From 4bf4b2121945948dd7fb80a15c9c95aa9534be44 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Sep 2026 16:11:28 -0300 Subject: [PATCH 01/55] chore: replace react-native-restart with expo reloadAppAsync --- app/externalModules.d.ts | 1 - app/views/LanguageView/index.tsx | 4 ++-- ios/Podfile.lock | 6 ------ package.json | 1 - pnpm-lock.yaml | 14 -------------- 5 files changed, 2 insertions(+), 24 deletions(-) diff --git a/app/externalModules.d.ts b/app/externalModules.d.ts index 4935ca2295f..caada7163d1 100644 --- a/app/externalModules.d.ts +++ b/app/externalModules.d.ts @@ -1,6 +1,5 @@ declare module 'remove-markdown'; declare module 'react-native-mime-types'; -declare module 'react-native-restart'; declare module 'react-native-math-view'; declare module '@env' { export const RUNNING_E2E_TESTS: string; diff --git a/app/views/LanguageView/index.tsx b/app/views/LanguageView/index.tsx index e2bc2c6157f..20f171eb830 100644 --- a/app/views/LanguageView/index.tsx +++ b/app/views/LanguageView/index.tsx @@ -1,6 +1,6 @@ +import { reloadAppAsync } from 'expo'; import { useLayoutEffect } from 'react'; import { FlatList } from 'react-native'; -import RNRestart from 'react-native-restart'; import { useDispatch } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; import { type NativeStackNavigationProp } from '@react-navigation/native-stack'; @@ -53,7 +53,7 @@ const LanguageView = () => { await Promise.all([changeLanguage(language), new Promise(resolve => setTimeout(resolve, 300))]); if (shouldRestart) { - await RNRestart.Restart(); + await reloadAppAsync('Language RTL change'); } else { dispatch(appStart({ root: RootEnum.ROOT_INSIDE })); } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e3964b3b425..4b1c5a010a7 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2231,8 +2231,6 @@ PODS: - Yoga - react-native-netinfo (11.4.1): - React-Core - - react-native-restart (0.0.22): - - React-Core - react-native-safe-area-context (5.6.2): - boost - DoubleConversion @@ -3618,7 +3616,6 @@ DEPENDENCIES: - react-native-external-keyboard (from `../node_modules/react-native-external-keyboard`) - react-native-keyboard-controller (from `../node_modules/react-native-keyboard-controller`) - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - - react-native-restart (from `../node_modules/react-native-restart`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - "react-native-slider (from `../node_modules/@react-native-community/slider`)" - react-native-webrtc (from `../node_modules/react-native-webrtc`) @@ -3856,8 +3853,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-keyboard-controller" react-native-netinfo: :path: "../node_modules/@react-native-community/netinfo" - react-native-restart: - :path: "../node_modules/react-native-restart" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" react-native-slider: @@ -4069,7 +4064,6 @@ SPEC CHECKSUMS: react-native-external-keyboard: db51d3a78d68c1f87fef41c67353a7c0ddbe51dd react-native-keyboard-controller: c4ca61f44d66c2f8987a7e67e9b78e80dc965c45 react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 - react-native-restart: f6f591aeb40194c41b9b5013901f00e6cf7d0f29 react-native-safe-area-context: 0a3b034bb63a5b684dd2f5fffd3c90ef6ed41ee8 react-native-slider: 6201419b3e3f7c6b7cf2068e0c01274fa86a1da5 react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74 diff --git a/package.json b/package.json index c5731eec7c6..e7c7b059c60 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,6 @@ "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", "react-native-reanimated": "4.1.3", - "react-native-restart": "0.0.22", "react-native-safe-area-context": "^5.5.2", "react-native-screens": "~4.17.1", "react-native-skeleton-placeholder": "5.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e23de4c7370..e8f03c2a726 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -282,9 +282,6 @@ importers: react-native-reanimated: specifier: 4.1.3 version: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-restart: - specifier: 0.0.22 - version: 0.0.22(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-safe-area-context: specifier: ^5.5.2 version: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -6617,12 +6614,6 @@ packages: react-native: '*' react-native-worklets: '>=0.5.0' - react-native-restart@0.0.22: - resolution: {integrity: sha512-XwCqAMAKsO8yCM3xACPFKvkDQZe41lcavOuO0gUEu803IuTLtciualCq/qs83ryRDCDh1jkXYRqFjsGjLMCN3Q==} - peerDependencies: - react: '*' - react-native: '*' - react-native-safe-area-context@5.6.2: resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==} peerDependencies: @@ -15133,11 +15124,6 @@ snapshots: react-native-worklets: 0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) semver: 7.7.2 - react-native-restart@0.0.22(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): - dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 From b36586c87637d13a54ba01a1d75f9451f1578626 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Sep 2026 16:12:44 -0300 Subject: [PATCH 02/55] chore: replace react-native-background-timer with setInterval --- app/lib/methods/videoConfTimer.ts | 12 ++++-------- ios/Podfile.lock | 6 ------ package.json | 2 -- pnpm-lock.yaml | 20 -------------------- 4 files changed, 4 insertions(+), 36 deletions(-) diff --git a/app/lib/methods/videoConfTimer.ts b/app/lib/methods/videoConfTimer.ts index 741204d06f0..a1ba213a962 100644 --- a/app/lib/methods/videoConfTimer.ts +++ b/app/lib/methods/videoConfTimer.ts @@ -1,18 +1,15 @@ -import BackgroundTimer from 'react-native-background-timer'; - import { updateJitsiTimeout } from '../services/restApi'; -let interval: number | null = null; +let interval: ReturnType | null = null; export const initVideoConfTimer = (rid: string): void => { if (rid) { updateJitsiTimeout(rid).catch((e: unknown) => console.log(e)); if (interval) { - BackgroundTimer.clearInterval(interval); - BackgroundTimer.stopBackgroundTimer(); + clearInterval(interval); interval = null; } - interval = BackgroundTimer.setInterval(() => { + interval = setInterval(() => { updateJitsiTimeout(rid).catch((e: unknown) => console.log(e)); }, 10000); } @@ -20,8 +17,7 @@ export const initVideoConfTimer = (rid: string): void => { export const endVideoConfTimer = (): void => { if (interval) { - BackgroundTimer.clearInterval(interval); + clearInterval(interval); interval = null; - BackgroundTimer.stopBackgroundTimer(); } }; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 4b1c5a010a7..c71f63e5585 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2112,8 +2112,6 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-background-timer (2.4.1): - - React-Core - react-native-cameraroll (7.10.2): - boost - DoubleConversion @@ -3610,7 +3608,6 @@ DEPENDENCIES: - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-a11y-order (from `../node_modules/react-native-a11y-order`) - - react-native-background-timer (from `../node_modules/react-native-background-timer`) - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" - react-native-external-keyboard (from `../node_modules/react-native-external-keyboard`) @@ -3841,8 +3838,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" react-native-a11y-order: :path: "../node_modules/react-native-a11y-order" - react-native-background-timer: - :path: "../node_modules/react-native-background-timer" react-native-cameraroll: :path: "../node_modules/@react-native-camera-roll/camera-roll" react-native-cookies: @@ -4058,7 +4053,6 @@ SPEC CHECKSUMS: React-Mapbuffer: 017336879e2e0fb7537bbc08c24f34e2384c9260 React-microtasksnativemodule: 63ee6730cec233feab9cdcc0c100dc28a12e4165 react-native-a11y-order: 20b33ff538af60d8b8a7f7284115a7febc9034d4 - react-native-background-timer: 4638ae3bee00320753647900b21260b10587b6f7 react-native-cameraroll: ae31ba7ee17d31c5ee05d7bb248742e3af482783 react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 react-native-external-keyboard: db51d3a78d68c1f87fef41c67353a7c0ddbe51dd diff --git a/package.json b/package.json index e7c7b059c60..a134e484617 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,6 @@ "react-native": "0.81.5", "react-native-a11y-order": "^0.4.0", "react-native-animatable": "1.3.3", - "react-native-background-timer": "2.4.1", "react-native-bootsplash": "^6.3.8", "react-native-callkeep": "4.3.16", "react-native-console-time-polyfill": "1.2.3", @@ -185,7 +184,6 @@ "@types/lodash": "^4.14.188", "@types/node": "25.0.3", "@types/react": "~19.1.0", - "@types/react-native-background-timer": "^2.0.2", "@types/semver": "7.3.13", "@types/ua-parser-js": "^0.7.36", "@types/url-parse": "^1.4.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8f03c2a726..b83a8b3429e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,9 +207,6 @@ importers: react-native-animatable: specifier: 1.3.3 version: 1.3.3 - react-native-background-timer: - specifier: 2.4.1 - version: 2.4.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) react-native-bootsplash: specifier: ^6.3.8 version: 6.3.11(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -439,9 +436,6 @@ importers: '@types/react': specifier: ~19.1.0 version: 19.1.17 - '@types/react-native-background-timer': - specifier: ^2.0.2 - version: 2.0.2 '@types/semver': specifier: 7.3.13 version: 7.3.13 @@ -2903,9 +2897,6 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - '@types/react-native-background-timer@2.0.2': - resolution: {integrity: sha512-cMAep0M5yqUHjiiRPvGiviqiJYdI45KSjbI5ufsIFSQGFwHwrHJC/8yawNhy0G3Gix6fufWLsEj6jC5niUNHiQ==} - '@types/react@17.0.90': resolution: {integrity: sha512-P9beVR/x06U9rCJzSxtENnOr4BrbJ6VrsrDTc+73TtHv9XHhryXKbjGRB+6oooB2r0G/pQkD/S4dHo/7jUfwFw==} @@ -6451,11 +6442,6 @@ packages: react-native-animatable@1.3.3: resolution: {integrity: sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==} - react-native-background-timer@2.4.1: - resolution: {integrity: sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==} - peerDependencies: - react-native: '>=0.47.0' - react-native-bootsplash@6.3.11: resolution: {integrity: sha512-VA102LDBPyqMJzRtIb5H6MWsKSSpjzW49e34E2kpOivmkYllLlOpkpB/Q6Yvrt4u3EbkgOxB5gerJERhvcO4Tg==} hasBin: true @@ -10897,8 +10883,6 @@ snapshots: '@types/prop-types@15.7.15': {} - '@types/react-native-background-timer@2.0.2': {} - '@types/react@17.0.90': dependencies: '@types/prop-types': 15.7.15 @@ -14950,10 +14934,6 @@ snapshots: dependencies: prop-types: 15.8.1 - react-native-background-timer@2.4.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): - dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-bootsplash@6.3.11(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@expo/config-plugins': 10.1.2 From 4b1f58bc510ef3fcc3c138ec976ca54e1c9b02c8 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Sep 2026 16:14:36 -0300 Subject: [PATCH 03/55] chore: bump react-native-localize to 3.7.0 --- __mocks__/react-native-localize.js | 2 +- app/i18n/index.ts | 2 +- ios/Podfile.lock | 30 ++++++++++++++++++++++++++++-- package.json | 2 +- pnpm-lock.yaml | 23 +++++++++++++++++------ 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/__mocks__/react-native-localize.js b/__mocks__/react-native-localize.js index 2800ee9024e..94e4c6a2551 100644 --- a/__mocks__/react-native-localize.js +++ b/__mocks__/react-native-localize.js @@ -1,2 +1,2 @@ export const initialConstants = null; -export const findBestAvailableLanguage = () => null; +export const findBestLanguageTag = () => null; diff --git a/app/i18n/index.ts b/app/i18n/index.ts index 91189b48d42..0015c925882 100644 --- a/app/i18n/index.ts +++ b/app/i18n/index.ts @@ -182,7 +182,7 @@ export const setLanguage = (l: string) => { i18n.translations = { en: translations.en?.() }; const defaultLanguage = { languageTag: 'en', isRTL: false }; const availableLanguages = Object.keys(translations); -const { languageTag } = RNLocalize.findBestAvailableLanguage(availableLanguages) || defaultLanguage; +const { languageTag } = RNLocalize.findBestLanguageTag(availableLanguages) || defaultLanguage; // @ts-ignore i18n.isTranslated = (text?: string) => text in englishJson; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index c71f63e5585..ebdb78c97e3 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3187,8 +3187,34 @@ PODS: - SocketRocket - TOCropViewController (~> 2.8.0) - Yoga - - RNLocalize (2.1.1): + - RNLocalize (3.7.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - RNReanimated (4.1.3): - boost - DoubleConversion @@ -4107,7 +4133,7 @@ SPEC CHECKSUMS: RNFileViewer: f9424017fa643c115c1444e11292e84fb16ddd68 RNGestureHandler: b8d2e75c2e88fc2a1f6be3b3beeeed80b88fa37d RNImageCropPicker: 5432d75a3bc7209dc8b6ab189fcfe19bd6339fb9 - RNLocalize: ca86348d88b9a89da0e700af58d428ab3f343c4e + RNLocalize: c46dd4008dc8990a098fcafd6ee051122a1ccfda RNReanimated: e1690cdd7f215cfb96a3b7986b81889867dfdb4f RNScreens: ccfcc2f7d9c0d458b7fc41b3f4f0bea054602b3a RNSVG: 94a1be05fab4043354bcf7104f0f9b0e2231ef05 diff --git a/package.json b/package.json index a134e484617..8e4d4a39565 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "react-native-katex": "git+https://github.com/RocketChat/react-native-katex.git", "react-native-keyboard-controller": "1.18.5", "react-native-linear-gradient": "2.6.2", - "react-native-localize": "2.1.1", + "react-native-localize": "3.7.0", "react-native-math-view": "3.9.5", "react-native-mime-types": "2.3.0", "react-native-mmkv": "^4.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b83a8b3429e..c58dd5c9806 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -250,8 +250,8 @@ importers: specifier: 2.6.2 version: 2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-localize: - specifier: 2.1.1 - version: 2.1.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: 3.7.0 + version: 3.7.0(@expo/config-plugins@54.0.4)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-math-view: specifier: 3.9.5 version: 3.9.5(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) @@ -6543,10 +6543,18 @@ packages: react: '*' react-native: '*' - react-native-localize@2.1.1: - resolution: {integrity: sha512-+uyz2/b0vyLq19fcb7r1qU1gqmzbp3aC6EMTvOVXwfBuiN+aJXR/fDdFOJJ8D7+bLccKeuS2zBDrazh+ZayX/g==} + react-native-localize@3.7.0: + resolution: {integrity: sha512-6Ohx+zZzycC6zhNVBGM/u1U+O6Ww29YIFseeyXqsKcO/pTfjLcdE40IUJF4SVVwrdh00IMJwy90HjLGUaeqK7Q==} peerDependencies: - react-native: '>=0.60.0' + '@expo/config-plugins': '*' + react: '*' + react-native: '*' + react-native-macos: '*' + peerDependenciesMeta: + '@expo/config-plugins': + optional: true + react-native-macos: + optional: true react-native-math-view@3.9.5: resolution: {integrity: sha512-UJxrisNafszfqIW+utoSDylb72SkZ92cKz1IfE5Dm0s+uIaHxOxepF2DdRbktAV8c0FEFllnXfErcGdh8sfIBw==} @@ -15044,9 +15052,12 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-localize@2.1.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-localize@3.7.0(@expo/config-plugins@54.0.4)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: + react: 19.1.0 react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + optionalDependencies: + '@expo/config-plugins': 54.0.4 react-native-math-view@3.9.5(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): dependencies: From 22c118219a825fb18dcb47611875551b69a8050c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Sep 2026 16:16:41 -0300 Subject: [PATCH 04/55] chore: replace react-native-file-viewer with expo-quick-look --- app/lib/methods/helpers/fileDownload.ts | 7 ++----- ios/Podfile.lock | 12 +++++------ jest.setup.js | 4 ++-- package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++----------- 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/app/lib/methods/helpers/fileDownload.ts b/app/lib/methods/helpers/fileDownload.ts index 6cbf3fcac8c..3eb13342a5a 100644 --- a/app/lib/methods/helpers/fileDownload.ts +++ b/app/lib/methods/helpers/fileDownload.ts @@ -1,5 +1,5 @@ import * as FileSystem from 'expo-file-system/legacy'; -import FileViewer from 'react-native-file-viewer'; +import ExpoQuickLook from '@magrinj/expo-quick-look'; import { LISTENER } from '~/containers/Toast'; import { type IAttachment } from '~/definitions'; @@ -38,10 +38,7 @@ export const fileDownloadAndPreview = async (url: string, attachment: IAttachmen } } - await FileViewer.open(file, { - showOpenWithDialog: true, - showAppsSuggestions: true - }); + await ExpoQuickLook.previewFile({ uri: file }); } catch (e) { EventEmitter.emit(LISTENER, { message: i18n.t('Error_Download_file') }); } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ebdb78c97e3..65503ee5460 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -129,6 +129,8 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - ExpoQuickLook (0.4.0): + - ExpoModulesCore - ExpoSystemUI (6.0.9): - ExpoModulesCore - ExpoVideoThumbnails (10.0.8): @@ -3095,8 +3097,6 @@ PODS: - FirebaseCoreExtension - React-Core - RNFBApp - - RNFileViewer (2.1.4): - - React-Core - RNGestureHandler (2.28.0): - boost - DoubleConversion @@ -3586,6 +3586,7 @@ DEPENDENCIES: - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoLocalAuthentication (from `../node_modules/expo-local-authentication/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - "ExpoQuickLook (from `../node_modules/@magrinj/expo-quick-look/ios`)" - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) - ExpoVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`) - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) @@ -3685,7 +3686,6 @@ DEPENDENCIES: - "RNFBAnalytics (from `../node_modules/@react-native-firebase/analytics`)" - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" - "RNFBCrashlytics (from `../node_modules/@react-native-firebase/crashlytics`)" - - RNFileViewer (from `../node_modules/react-native-file-viewer`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) - RNLocalize (from `../node_modules/react-native-localize`) @@ -3773,6 +3773,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-local-authentication/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + ExpoQuickLook: + :path: "../node_modules/@magrinj/expo-quick-look/ios" ExpoSystemUI: :path: "../node_modules/expo-system-ui/ios" ExpoVideoThumbnails: @@ -3966,8 +3968,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-firebase/app" RNFBCrashlytics: :path: "../node_modules/@react-native-firebase/crashlytics" - RNFileViewer: - :path: "../node_modules/react-native-file-viewer" RNGestureHandler: :path: "../node_modules/react-native-gesture-handler" RNImageCropPicker: @@ -4013,6 +4013,7 @@ SPEC CHECKSUMS: ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 ExpoLocalAuthentication: 8a31808565da7af926dd9b595e98594d8b1553b6 ExpoModulesCore: 91a57f1d109cf53fe58d44fcf6b68a777561549a + ExpoQuickLook: 7ac65cd559a74619ea41e13df20e9d7a61e79ea6 ExpoSystemUI: 2ad325f361a2fcd96a464e8574e19935c461c9cc ExpoVideoThumbnails: 503a79271416c8723f04b55ea4737282513ebe4f ExpoWebBrowser: 17b064c621789e41d4816c95c93f429b84971f52 @@ -4130,7 +4131,6 @@ SPEC CHECKSUMS: RNFBAnalytics: 2e8b8ffcd2bb3d59a43ecbe09571c73c56edef7a RNFBApp: a448037d2df74af9d374a0b765be12ff1e844dc0 RNFBCrashlytics: c3bb5533f9957eddc88f3ea383583309a4ce9f89 - RNFileViewer: f9424017fa643c115c1444e11292e84fb16ddd68 RNGestureHandler: b8d2e75c2e88fc2a1f6be3b3beeeed80b88fa37d RNImageCropPicker: 5432d75a3bc7209dc8b6ab189fcfe19bd6339fb9 RNLocalize: c46dd4008dc8990a098fcafd6ee051122a1ccfda diff --git a/jest.setup.js b/jest.setup.js index c5815af3787..4243cbabb12 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -49,8 +49,8 @@ jest.mock('react-native-reanimated', () => { jest.mock('@react-native-clipboard/clipboard', () => mockClipboard); -jest.mock('react-native-file-viewer', () => ({ - open: jest.fn(() => null) +jest.mock('@magrinj/expo-quick-look', () => ({ + previewFile: jest.fn(() => Promise.resolve()) })); jest.mock('react-native-incall-manager', () => ({ diff --git a/package.json b/package.json index 8e4d4a39565..b8b3ac24c10 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "@expo/vector-icons": "^15.0.3", "@hookform/resolvers": "^2.9.10", "@lodev09/react-native-true-sheet": "~3.7.0", + "@magrinj/expo-quick-look": "0.4.0", "@nozbe/watermelondb": "^0.28.1-0", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-camera-roll/camera-roll": "^7.10.0", @@ -98,7 +99,6 @@ "react-native-easy-grid": "0.2.2", "react-native-easy-toast": "2.3.0", "react-native-external-keyboard": "^0.9.0", - "react-native-file-viewer": "2.1.4", "react-native-gesture-handler": "~2.28.0", "react-native-image-crop-picker": "RocketChat/react-native-image-crop-picker#47092e8c90550a54d45fe307f7cb2a24c9535ed5", "react-native-incall-manager": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c58dd5c9806..0b122ee8a96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,9 @@ importers: '@lodev09/react-native-true-sheet': specifier: ~3.7.0 version: 3.7.3(261280a80c394a7dcf8d9609d62c37ca) + '@magrinj/expo-quick-look': + specifier: 0.4.0 + version: 0.4.0(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@nozbe/watermelondb': specifier: ^0.28.1-0 version: 0.28.1-0 @@ -228,9 +231,6 @@ importers: react-native-external-keyboard: specifier: ^0.9.0 version: 0.9.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-file-viewer: - specifier: 2.1.4 - version: 2.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) react-native-gesture-handler: specifier: ~2.28.0 version: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -2019,6 +2019,13 @@ packages: react-native-worklets: optional: true + '@magrinj/expo-quick-look@0.4.0': + resolution: {integrity: sha512-7otvYguE9gjhXqvQGrTKmJIRDY/t4o3bx2tfMcUZDb4hQprLuoRbzmtxDpyNCVkGmIXZKTeg7YxGMVa1BGpbGA==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -6493,11 +6500,6 @@ packages: react: '*' react-native: '*' - react-native-file-viewer@2.1.4: - resolution: {integrity: sha512-G3ko9lmqxT+lWhsDNy2K3Jes6xSMsUvlYwuwnRCNk2wC6hgYMeoeaiwDt8R3CdON781hB6Ej1eu3ir1QATtHXg==} - peerDependencies: - react-native: '>=0.47' - react-native-gesture-handler@2.28.0: resolution: {integrity: sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==} peerDependencies: @@ -9912,6 +9914,12 @@ snapshots: react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-worklets: 0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@magrinj/expo-quick-look@0.4.0(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + dependencies: + expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.8.0 @@ -15008,10 +15016,6 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-file-viewer@2.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): - dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@egjs/hammerjs': 2.0.17 From 3230b78416071331677ece443b26eaac9013b42d Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 15 Sep 2026 10:36:55 -0300 Subject: [PATCH 05/55] chore: migrate from expo-av to expo-audio and expo-video (#6719) --- app/containers/AudioPlayer/Seek.test.tsx | 44 +++ app/containers/AudioPlayer/Seek.tsx | 21 +- app/containers/AudioPlayer/index.test.tsx | 84 +++--- app/containers/AudioPlayer/index.tsx | 37 +-- .../MessageComposer/MessageComposer.test.tsx | 34 ++- .../components/Buttons/MicOrSendButton.tsx | 31 ++- .../components/RecordAudio/Duration.tsx | 28 +- .../components/RecordAudio/RecordAudio.tsx | 64 ++--- app/containers/Ringer/index.tsx | 33 +-- .../__snapshots__/index.test.tsx.snap | 16 ++ app/containers/VideoPlayer/index.stories.tsx | 20 ++ app/containers/VideoPlayer/index.test.tsx | 90 +++++++ app/containers/VideoPlayer/index.tsx | 71 +++++ app/containers/VideoPlayer/styles.ts | 7 + app/i18n/locales/ar.json | 2 + app/i18n/locales/bn-IN.json | 2 + app/i18n/locales/cs.json | 2 + app/i18n/locales/de.json | 2 + app/i18n/locales/en.json | 3 +- app/i18n/locales/es.json | 2 + app/i18n/locales/fi.json | 2 + app/i18n/locales/fr.json | 2 + app/i18n/locales/hi-IN.json | 2 + app/i18n/locales/hu.json | 2 + app/i18n/locales/it.json | 2 + app/i18n/locales/ja.json | 2 + app/i18n/locales/nl.json | 2 + app/i18n/locales/nn.json | 2 + app/i18n/locales/no.json | 3 +- app/i18n/locales/pt-BR.json | 3 +- app/i18n/locales/pt-PT.json | 2 + app/i18n/locales/ru.json | 2 + app/i18n/locales/sl-SI.json | 2 + app/i18n/locales/sv.json | 2 + app/i18n/locales/ta-IN.json | 2 + app/i18n/locales/te-IN.json | 2 + app/i18n/locales/tr.json | 2 + app/i18n/locales/zh-CN.json | 2 + app/i18n/locales/zh-TW.json | 2 + app/lib/constants/audio.ts | 61 ++--- app/lib/methods/AudioManager.test.ts | 255 ++++++++++++++++++ app/lib/methods/AudioManager.ts | 146 +++++++--- app/lib/native/NativeVoip.ts | 2 +- .../services/voip/playCallEndedSound.test.ts | 164 +++++------ app/lib/services/voip/playCallEndedSound.ts | 24 +- app/sagas/__tests__/deepLinking.test.ts | 2 +- app/views/AttachmentView.test.tsx | 5 - app/views/AttachmentView.tsx | 41 +-- .../components/Dialpad/DialpadContext.tsx | 33 +-- app/views/CallView/index.tsx | 26 +- app/views/ShareView/Preview.tsx | 41 ++- ios/Podfile.lock | 19 +- jest.setup.js | 151 +++-------- package.json | 3 +- patches/expo-audio+0.4.9.patch | 24 ++ pnpm-lock.yaml | 32 ++- 56 files changed, 1117 insertions(+), 545 deletions(-) create mode 100644 app/containers/AudioPlayer/Seek.test.tsx create mode 100644 app/containers/VideoPlayer/__snapshots__/index.test.tsx.snap create mode 100644 app/containers/VideoPlayer/index.stories.tsx create mode 100644 app/containers/VideoPlayer/index.test.tsx create mode 100644 app/containers/VideoPlayer/index.tsx create mode 100644 app/containers/VideoPlayer/styles.ts create mode 100644 app/lib/methods/AudioManager.test.ts create mode 100644 patches/expo-audio+0.4.9.patch diff --git a/app/containers/AudioPlayer/Seek.test.tsx b/app/containers/AudioPlayer/Seek.test.tsx new file mode 100644 index 00000000000..ce7668c55a7 --- /dev/null +++ b/app/containers/AudioPlayer/Seek.test.tsx @@ -0,0 +1,44 @@ +import { act, render, renderHook } from '@testing-library/react-native'; +import { Gesture, State } from 'react-native-gesture-handler'; +import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; +import { useSharedValue } from 'react-native-reanimated'; + +import Seek from './Seek'; + +jest.mock('~/theme', () => ({ useTheme: () => ({ colors: {} }) })); + +const setup = () => { + const pan = jest.spyOn(Gesture, 'Pan'); + const { result } = renderHook(() => ({ currentTime: useSharedValue(30), duration: useSharedValue(120) })); + const { currentTime, duration } = result.current; + const onChangeTime = jest.fn(); + render(); + return { gesture: pan.mock.results[0].value, currentTime, onChangeTime }; +}; + +afterEach(() => jest.restoreAllMocks()); + +test('a tap that never starts dragging preserves the paused position', () => { + const { gesture, currentTime, onChangeTime } = setup(); + act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); + expect(currentTime.value).toBe(30); + expect(onChangeTime).not.toHaveBeenCalled(); +}); + +test('a cancelled drag restores its starting position without seeking', () => { + const { gesture, currentTime, onChangeTime } = setup(); + act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.CANCELLED }])); + expect(currentTime.value).toBe(30); + expect(onChangeTime).not.toHaveBeenCalled(); + + currentTime.value = 45; + act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); + expect(currentTime.value).toBe(45); +}); + +test('a completed drag seeks in seconds', () => { + const { gesture, onChangeTime } = setup(); + act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.END }])); + expect(onChangeTime).toHaveBeenCalledTimes(1); + expect(onChangeTime).toHaveBeenCalledWith(30); +}); diff --git a/app/containers/AudioPlayer/Seek.tsx b/app/containers/AudioPlayer/Seek.tsx index 929f0b8bc78..ebef805872b 100644 --- a/app/containers/AudioPlayer/Seek.tsx +++ b/app/containers/AudioPlayer/Seek.tsx @@ -20,7 +20,7 @@ interface ISeek { duration: SharedValue; currentTime: SharedValue; loaded: boolean; - onChangeTime: (time: number) => Promise; + onChangeTime: (time: number) => void; } function clamp(value: number, min: number, max: number) { @@ -49,6 +49,8 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => const scale = useSharedValue(1); const isPanning = useSharedValue(false); const contextX = useSharedValue(0); + const savedTranslateX = useSharedValue(0); + const savedCurrentTime = useSharedValue(0); const styleLine = useAnimatedStyle(() => ({ width: translateX.value @@ -69,23 +71,24 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => .onStart(() => { isPanning.value = true; contextX.value = translateX.value; + savedTranslateX.value = translateX.value; + savedCurrentTime.value = currentTime.value; scale.value = withTiming(1.3, { duration: 150 }); }) .onUpdate(event => { const newX = contextX.value + event.translationX; translateX.value = clamp(newX, 0, maxWidth.value); }) - .onEnd(() => { - scheduleOnRN(onChangeTime, Math.round(currentTime.value * 1000)); - }) .onFinalize((_, didSucceed) => { - if (isPanning.value && !didSucceed) { - translateX.value = contextX.value; - currentTime.value = (contextX.value * duration.value) / maxWidth.value || 0; - } - + if (!isPanning.value) return; isPanning.value = false; scale.value = withTiming(1, { duration: 150 }); + if (didSucceed) { + scheduleOnRN(onChangeTime, currentTime.value); + } else { + translateX.value = savedTranslateX.value; + currentTime.value = savedCurrentTime.value; + } }); useDerivedValue(() => { diff --git a/app/containers/AudioPlayer/index.test.tsx b/app/containers/AudioPlayer/index.test.tsx index e4166f42a8d..1f28c6a3d2f 100644 --- a/app/containers/AudioPlayer/index.test.tsx +++ b/app/containers/AudioPlayer/index.test.tsx @@ -13,12 +13,12 @@ jest.mock('~/lib/methods/AudioManager', () => ({ default: { loadAudio: jest.fn(), setOnPlaybackStatusUpdate: jest.fn(), - setRateAsync: jest.fn(), + setRate: jest.fn(), addAudioRendered: jest.fn(), removeAudioRendered: jest.fn(), pauseAudio: jest.fn(), playAudio: jest.fn(), - setPositionAsync: jest.fn() + setPositionAsync: jest.fn(() => Promise.resolve()) } })); @@ -40,10 +40,10 @@ jest.mock('~/theme', () => ({ })); const mockTaskCancel = jest.fn(); -let capturedFocusCb: Function | undefined; -let capturedBlurCb: Function | undefined; +let capturedFocusCb: (() => void) | undefined; +let capturedBlurCb: (() => void) | undefined; let mockUnsubscribe: jest.Mock; -let capturedAudioFocusedCb: Function | undefined; +let capturedAudioFocusedCb: ((audioFocused: string) => void) | undefined; const defaultProps = { fileUri: 'file:///audio.mp3', @@ -67,7 +67,7 @@ describe('AudioPlayer', () => { capturedFocusCb = undefined; capturedBlurCb = undefined; mockUnsubscribe = jest.fn(); - const mockAddListener = jest.fn((event: string, cb: Function) => { + const mockAddListener = jest.fn((event: string, cb: () => void) => { if (event === 'focus') capturedFocusCb = cb; if (event === 'blur') capturedBlurCb = cb; return mockUnsubscribe; @@ -75,7 +75,7 @@ describe('AudioPlayer', () => { (useNavigation as jest.Mock).mockReturnValue({ navigate: jest.fn(), addListener: mockAddListener }); capturedAudioFocusedCb = undefined; - (emitter.on as jest.Mock).mockImplementation((event: string, cb: Function) => { + (emitter.on as jest.Mock).mockImplementation((event: string, cb: (audioFocused: string) => void) => { if (event === 'audioFocused') capturedAudioFocusedCb = cb; }); }); @@ -102,7 +102,7 @@ describe('AudioPlayer', () => { await waitFor(() => { expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalledWith('mock-audio-key', expect.any(Function)); - expect(AudioManager.setRateAsync).toHaveBeenCalledWith('mock-audio-key', 1.0); + expect(AudioManager.setRate).toHaveBeenCalledWith('mock-audio-key', 1.0); }); }); @@ -168,7 +168,7 @@ describe('AudioPlayer', () => { expect(() => getByTestId('play-button')).not.toThrow(); }); - it('skips setOnPlaybackStatusUpdate and setRateAsync (with loaded key) when loadAudio throws', async () => { + it('skips setOnPlaybackStatusUpdate and setRate (with loaded key) when loadAudio throws', async () => { (AudioManager.loadAudio as jest.Mock).mockRejectedValue(new Error('load failed')); render(); @@ -176,7 +176,7 @@ describe('AudioPlayer', () => { await act(async () => {}); expect(AudioManager.setOnPlaybackStatusUpdate).not.toHaveBeenCalled(); - expect(AudioManager.setRateAsync).not.toHaveBeenCalledWith('mock-audio-key', expect.any(Number)); + expect(AudioManager.setRate).not.toHaveBeenCalledWith('mock-audio-key', expect.any(Number)); }); }); @@ -273,7 +273,7 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); fireEvent.press(getByTestId('play-button')); @@ -299,7 +299,7 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); await waitFor(() => expect(getByTestId('play-button').props.accessibilityLabel).toBe('Pause')); }); @@ -310,10 +310,10 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); await waitFor(() => expect(getByTestId('play-button').props.accessibilityLabel).toBe('Pause')); - act(() => statusCb({ isLoaded: true, isPlaying: false })); + act(() => statusCb({ isLoaded: true, playing: false })); await waitFor(() => expect(getByTestId('play-button').props.accessibilityLabel).toBe('Play')); }); @@ -324,13 +324,13 @@ describe('AudioPlayer', () => { const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 30000, positionMillis: 1000 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 30, currentTime: 1 })); expect(currentTimeValue.value).toBe(1); - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 30000, positionMillis: 2000 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 30, currentTime: 2 })); expect(currentTimeValue.value).toBe(2); - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 30000, positionMillis: 3000 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 30, currentTime: 3 })); expect(currentTimeValue.value).toBe(3); }); }); @@ -356,7 +356,7 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); await waitFor(() => expect(queryByTestId('playback-speed')).not.toBeNull()); }); @@ -383,7 +383,7 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); await waitFor(() => expect(activateKeepAwake).toHaveBeenCalled()); }); @@ -466,24 +466,24 @@ describe('AudioPlayer', () => { }); describe('onPlaybackStatusUpdate callback chain', () => { - it('sets paused to false (audioState: playing) when status has isPlaying: true', async () => { + it('sets paused to false (audioState: playing) when status has playing: true', async () => { const { queryByTestId } = render(); await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: true })); + act(() => statusCb({ isLoaded: true, playing: true })); await waitFor(() => expect(queryByTestId('playback-speed')).not.toBeNull()); }); - it('keeps paused true when status has isPlaying: false', async () => { + it('keeps paused true when status has playing: false', async () => { const { queryByTestId } = render(); await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb({ isLoaded: true, isPlaying: false })); + act(() => statusCb({ isLoaded: true, playing: false })); await act(async () => {}); @@ -500,13 +500,13 @@ describe('AudioPlayer', () => { const durationValue = sharedValueMock.mock.results[0].value as { value: number }; const currentTimeValue = sharedValueMock.mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, durationMillis: 10000, positionMillis: 3000, isPlaying: false })); + act(() => statusCb({ isLoaded: true, duration: 10, currentTime: 3, playing: false })); expect(durationValue.value).toBe(10); expect(currentTimeValue.value).toBe(3); }); - it('does not update currentTime.value when positionMillis exceeds durationMillis', async () => { + it('does not update currentTime.value when currentTime exceeds duration', async () => { render(); await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); @@ -514,14 +514,14 @@ describe('AudioPlayer', () => { const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, durationMillis: 5000, positionMillis: 2000, isPlaying: false })); + act(() => statusCb({ isLoaded: true, duration: 5, currentTime: 2, playing: false })); expect(currentTimeValue.value).toBe(2); - act(() => statusCb({ isLoaded: true, durationMillis: 5000, positionMillis: 9000, isPlaying: false })); + act(() => statusCb({ isLoaded: true, duration: 5, currentTime: 9, playing: false })); expect(currentTimeValue.value).toBe(2); }); - it('does not update shared values when durationMillis is absent', async () => { + it('does not update shared values when duration is absent', async () => { render(); await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); @@ -529,7 +529,7 @@ describe('AudioPlayer', () => { const durationValue = (useSharedValue as jest.Mock).mock.results[0].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: false })); + act(() => statusCb({ isLoaded: true, playing: false })); expect(durationValue.value).toBe(0); }); @@ -542,9 +542,9 @@ describe('AudioPlayer', () => { const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 5000, positionMillis: 4000 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 5, currentTime: 4 })); - act(() => statusCb({ isLoaded: true, isPlaying: false, didJustFinish: true })); + act(() => statusCb({ isLoaded: true, playing: false, didJustFinish: true, currentTime: 5, duration: 5 })); await waitFor(() => { expect(queryByTestId('playback-speed')).toBeNull(); @@ -560,16 +560,16 @@ describe('AudioPlayer', () => { const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 0 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 0 })); expect(currentTimeValue.value).toBe(0); - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 2500 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 2.5 })); expect(currentTimeValue.value).toBe(2.5); - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 5000 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 5 })); expect(currentTimeValue.value).toBe(5); - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 7500 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 7.5 })); expect(currentTimeValue.value).toBe(7.5); }); @@ -580,7 +580,7 @@ describe('AudioPlayer', () => { const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; const durationValue = (useSharedValue as jest.Mock).mock.results[0].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 0 })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 0 })); expect(durationValue.value).toBe(10); }); @@ -592,7 +592,7 @@ describe('AudioPlayer', () => { const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: false, durationMillis: 10000, positionMillis: 3500 })); + act(() => statusCb({ isLoaded: true, playing: false, duration: 10, currentTime: 3.5 })); expect(currentTimeValue.value).toBe(3.5); }); @@ -604,19 +604,19 @@ describe('AudioPlayer', () => { const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; const currentTimeValue = (useSharedValue as jest.Mock).mock.results[1].value as { value: number }; - act(() => statusCb({ isLoaded: true, isPlaying: true, durationMillis: 10000, positionMillis: 7777 })); - act(() => statusCb({ isLoaded: true, isPlaying: false, didJustFinish: true })); + act(() => statusCb({ isLoaded: true, playing: true, duration: 10, currentTime: 7.777 })); + act(() => statusCb({ isLoaded: true, playing: false, didJustFinish: true, currentTime: 10, duration: 10 })); expect(currentTimeValue.value).toBe(0); }); - it('does not crash when status is null', async () => { + it('does not crash or update state when status is not loaded', async () => { render(); await waitFor(() => expect(AudioManager.setOnPlaybackStatusUpdate).toHaveBeenCalled()); const statusCb = (AudioManager.setOnPlaybackStatusUpdate as jest.Mock).mock.calls[0][1] as Function; - act(() => statusCb(null)); + act(() => statusCb({ isLoaded: false })); await act(async () => {}); }); @@ -634,7 +634,7 @@ describe('AudioPlayer', () => { await waitFor(() => expect(AudioManager.playAudio).toHaveBeenCalledWith('mock-audio-key')); act(() => { - statusCb({ isLoaded: true, isPlaying: true, positionMillis: 5000, durationMillis: 30000 }); + statusCb({ isLoaded: true, playing: true, currentTime: 5, duration: 30 }); }); expect(currentTimeValue.value).toBe(5); diff --git a/app/containers/AudioPlayer/index.tsx b/app/containers/AudioPlayer/index.tsx index 544de5850b9..442ae6e3c5b 100644 --- a/app/containers/AudioPlayer/index.tsx +++ b/app/containers/AudioPlayer/index.tsx @@ -1,9 +1,9 @@ import { useEffect, useRef, useState } from 'react'; import { InteractionManager, View } from 'react-native'; -import { type AVPlaybackStatus } from 'expo-av'; import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake'; import { useSharedValue } from 'react-native-reanimated'; import { useNavigation } from '@react-navigation/native'; +import type { AudioStatus } from 'expo-audio'; import { useTheme } from '~/theme'; import styles from './styles'; @@ -16,6 +16,7 @@ import { type TDownloadState } from '~/lib/methods/handleMediaDownload'; import { emitter } from '~/lib/methods/helpers/emitter'; import { type TAudioState } from './types'; import { useUserPreferences } from '~/lib/methods/userPreferences'; +import log from '~/lib/methods/helpers/log'; interface IAudioPlayerProps { fileUri: string; @@ -47,7 +48,7 @@ const AudioPlayer = ({ const audioUri = useRef(''); const navigation = useNavigation(); - const onPlaybackStatusUpdate = (status: AVPlaybackStatus) => { + const onPlaybackStatusUpdate = (status: AudioStatus): void => { if (status) { onPlaying(status); handlePlaybackStatusUpdate(status); @@ -55,37 +56,37 @@ const AudioPlayer = ({ } }; - const onPlaying = (data: AVPlaybackStatus) => { - if (data.isLoaded && data.isPlaying) { + const onPlaying = (data: AudioStatus): void => { + if (data.isLoaded && data.playing) { setPaused(false); } else { setPaused(true); } }; - const handlePlaybackStatusUpdate = (data: AVPlaybackStatus) => { - if (data.isLoaded && data.durationMillis) { - const durationSeconds = data.durationMillis / 1000; - duration.value = durationSeconds > 0 ? durationSeconds : 0; - const currentSecond = data.positionMillis / 1000; - if (currentSecond <= durationSeconds) { - currentTime.value = currentSecond; - } + const handlePlaybackStatusUpdate = (data: AudioStatus): void => { + if (!data.isLoaded) return; + const durationSeconds = data.duration || 0; + duration.value = durationSeconds > 0 ? durationSeconds : 0; + const currentSecond = data.currentTime || 0; + if (currentSecond <= durationSeconds) { + currentTime.value = currentSecond; } }; - const onEnd = (data: AVPlaybackStatus) => { + const onEnd = (data: AudioStatus) => { if (data.isLoaded && data.didJustFinish) { try { setPaused(true); currentTime.value = 0; - } catch { - // do nothing + AudioManager.setPositionAsync(audioUri.current, 0).catch(log); + } catch (error) { + log(error); } } }; - const setPosition = async (time: number) => { + const setPosition = async (time: number): Promise => { await AudioManager.setPositionAsync(audioUri.current, time); }; @@ -102,7 +103,7 @@ const AudioPlayer = ({ }; useEffect(() => { - AudioManager.setRateAsync(audioUri.current, playbackSpeed); + AudioManager.setRate(audioUri.current, playbackSpeed); }, [playbackSpeed]); const onPress = () => { @@ -121,7 +122,7 @@ const AudioPlayer = ({ try { audioUri.current = await AudioManager.loadAudio({ msgId, rid, uri: fileUri }); AudioManager.setOnPlaybackStatusUpdate(audioUri.current, onPlaybackStatusUpdate); - AudioManager.setRateAsync(audioUri.current, playbackSpeed); + AudioManager.setRate(audioUri.current, playbackSpeed); } catch { // do nothing } diff --git a/app/containers/MessageComposer/MessageComposer.test.tsx b/app/containers/MessageComposer/MessageComposer.test.tsx index e470df6bc2c..a1f7acfcec1 100644 --- a/app/containers/MessageComposer/MessageComposer.test.tsx +++ b/app/containers/MessageComposer/MessageComposer.test.tsx @@ -1,6 +1,7 @@ import { useEffect, type ReactElement, type RefObject } from 'react'; -import { act, render, screen, fireEvent, waitFor, userEvent } from '@testing-library/react-native'; +import { act, render, renderHook, screen, fireEvent, waitFor, userEvent } from '@testing-library/react-native'; import { Provider } from 'react-redux'; +import { getRecordingPermissionsAsync, requestRecordingPermissionsAsync, useAudioRecorder, PermissionStatus } from 'expo-audio'; import { MessageComposerContainer } from './MessageComposerContainer'; import { ComposerAttachments } from './components/Attachments/ComposerAttachments'; @@ -23,6 +24,10 @@ import { useMessageComposerApi } from './context'; import { type IMessageComposerRef } from './interfaces'; import { sendFileMessage } from '~/lib/methods/sendFileMessage'; import { runSlashCommand } from '~/lib/services/restApi'; +import log from '~/lib/methods/helpers/log'; +import { RECORDING_SETTINGS } from '~/lib/constants/audio'; + +jest.mock('~/lib/methods/helpers/log', () => ({ __esModule: true, default: jest.fn() })); jest.useFakeTimers(); @@ -734,6 +739,33 @@ describe('MessageComposer', () => { }); describe('Audio', () => { + test('requests undetermined microphone permission before recording', async () => { + jest.mocked(getRecordingPermissionsAsync).mockResolvedValueOnce({ + status: PermissionStatus.UNDETERMINED, + granted: false, + canAskAgain: true, + expires: 'never' + }); + jest.mocked(requestRecordingPermissionsAsync).mockClear(); + render(); + await user.press(screen.getByTestId('message-composer-send-audio')); + expect(requestRecordingPermissionsAsync).toHaveBeenCalled(); + expect(screen.queryByTestId('message-composer-send-audio')).not.toBeOnTheScreen(); + }); + + test('exits recording when recorder preparation fails', async () => { + const error = new Error('Failed to prepare recorder'); + const { result } = renderHook(() => useAudioRecorder(RECORDING_SETTINGS)); + const recorder = result.current; + jest.mocked(recorder.prepareToRecordAsync).mockRejectedValueOnce(error); + jest.mocked(useAudioRecorder).mockReturnValueOnce(recorder); + render(); + await user.press(screen.getByTestId('message-composer-send-audio')); + await waitFor(() => expect(log).toHaveBeenCalledWith(error)); + expect(screen.getByTestId('message-composer-send-audio')).toBeOnTheScreen(); + expect(recorder.record).not.toHaveBeenCalled(); + }); + test('tap record', async () => { render(); expect(screen.getByTestId('message-composer-send-audio')).toBeOnTheScreen(); diff --git a/app/containers/MessageComposer/components/Buttons/MicOrSendButton.tsx b/app/containers/MessageComposer/components/Buttons/MicOrSendButton.tsx index cfc4a5051cd..24b34428161 100644 --- a/app/containers/MessageComposer/components/Buttons/MicOrSendButton.tsx +++ b/app/containers/MessageComposer/components/Buttons/MicOrSendButton.tsx @@ -1,11 +1,11 @@ -import { Audio } from 'expo-av'; +import { requestRecordingPermissionsAsync, getRecordingPermissionsAsync, PermissionStatus } from 'expo-audio'; import { useContext, type ReactElement } from 'react'; import { Alert } from 'react-native'; -import { PermissionStatus } from 'expo-camera'; import i18n from '~/i18n'; import { useAppSelector } from '~/lib/hooks/useAppSelector'; import { openAppSettings } from '~/lib/methods/helpers/openAppSettings'; +import log from '~/lib/methods/helpers/log'; import { useTheme } from '~/theme'; import { useComposerRid, useComposerSharing } from '~/containers/MessageComposer/ComposerStore'; import { @@ -28,16 +28,27 @@ export const MicOrSendButton = (): ReactElement | null => { const { colors } = useTheme(); const { setRecordingAudio } = useMessageComposerApi(); - const requestPermissionAndStartToRecordAudio = () => - Audio.requestPermissionsAsync() - .then(({ granted }) => setRecordingAudio(granted)) - .catch(() => {}); + const requestPermissionAndStartToRecordAudio = async () => { + try { + const { granted } = await requestRecordingPermissionsAsync(); + setRecordingAudio(granted); + } catch (error) { + log(error); + setRecordingAudio(false); + } + }; const startRecording = async () => { - const { status, granted, canAskAgain } = await Audio.getPermissionsAsync(); - if (granted) return setRecordingAudio(true); - if (status === PermissionStatus.UNDETERMINED) return requestPermissionAndStartToRecordAudio(); - if (canAskAgain) return requestPermissionAndStartToRecordAudio(); + try { + const { status, granted, canAskAgain } = await getRecordingPermissionsAsync(); + if (granted) return setRecordingAudio(true); + if (status === PermissionStatus.UNDETERMINED) return requestPermissionAndStartToRecordAudio(); + if (canAskAgain) return requestPermissionAndStartToRecordAudio(); + } catch (error) { + log(error); + setRecordingAudio(false); + return; + } Alert.alert( i18n.t('Microphone_access_needed_to_record_audio'), diff --git a/app/containers/MessageComposer/components/RecordAudio/Duration.tsx b/app/containers/MessageComposer/components/RecordAudio/Duration.tsx index d8396723cb4..9390b653311 100644 --- a/app/containers/MessageComposer/components/RecordAudio/Duration.tsx +++ b/app/containers/MessageComposer/components/RecordAudio/Duration.tsx @@ -1,32 +1,24 @@ -import { forwardRef, useImperativeHandle, useState } from 'react'; +import { useState } from 'react'; import { type FontVariant, Text } from 'react-native'; -import { type Audio } from 'expo-av'; +import { useAudioRecorderState, type AudioRecorder } from 'expo-audio'; import sharedStyles from '~/views/Styles'; import { useTheme } from '~/theme'; import { formatTime } from './utils'; -export interface IDurationRef { - onRecordingStatusUpdate: (status: Audio.RecordingStatus) => void; -} - -export const Duration = forwardRef((_, ref) => { +export const Duration = ({ audioRecorder }: { audioRecorder: AudioRecorder }) => { const [styles] = useStyle(); + const recorderState = useAudioRecorderState(audioRecorder); const [duration, setDuration] = useState('00:00'); - useImperativeHandle(ref, () => ({ - onRecordingStatusUpdate - })); - - const onRecordingStatusUpdate = (status: Audio.RecordingStatus) => { - if (!status.isRecording) { - return; - } - setDuration(formatTime(Math.floor(status.durationMillis / 1000))); - }; + // Adjust state during render (instead of an effect) to sync the timer with the recorder state + const nextDuration = recorderState.isRecording ? formatTime(Math.floor(recorderState.durationMillis / 1000)) : duration; + if (nextDuration !== duration) { + setDuration(nextDuration); + } return {duration}; -}); +}; function useStyle() { const { colors } = useTheme(); diff --git a/app/containers/MessageComposer/components/RecordAudio/RecordAudio.tsx b/app/containers/MessageComposer/components/RecordAudio/RecordAudio.tsx index 773fab2203f..25c6712dcfa 100644 --- a/app/containers/MessageComposer/components/RecordAudio/RecordAudio.tsx +++ b/app/containers/MessageComposer/components/RecordAudio/RecordAudio.tsx @@ -1,6 +1,6 @@ import { View, Text } from 'react-native'; -import { useEffect, useRef, useState, type ReactElement } from 'react'; -import { Audio } from 'expo-av'; +import { useEffect, useState, type ReactElement } from 'react'; +import { requestRecordingPermissionsAsync, setAudioModeAsync, useAudioRecorder } from 'expo-audio'; import { getInfoAsync } from 'expo-file-system/legacy'; import { useKeepAwake } from 'expo-keep-awake'; import { shallowEqual } from 'react-redux'; @@ -12,22 +12,21 @@ import sharedStyles from '~/views/Styles'; import { ReviewButton } from './ReviewButton'; import { useMessageComposerApi } from '~/containers/MessageComposer/context'; import { sendFileMessage } from '~/lib/methods/sendFileMessage'; -import { RECORDING_EXTENSION, RECORDING_MODE, RECORDING_SETTINGS } from '~/lib/constants/audio'; +import { RECORDING_EXTENSION, RECORDING_SETTINGS, RECORDING_MODE } from '~/lib/constants/audio'; import { useAppSelector } from '~/lib/hooks/useAppSelector'; import log from '~/lib/methods/helpers/log'; import { type IUpload } from '~/definitions'; import { useComposerRid, useComposerTmid } from '~/containers/MessageComposer/ComposerStore'; import { useCanUploadFile } from '~/containers/MessageComposer/hooks'; -import { Duration, type IDurationRef } from './Duration'; +import { Duration } from './Duration'; import AudioPlayer from '~/containers/AudioPlayer'; import { CancelButton } from './CancelButton'; import i18n from '~/i18n'; export const RecordAudio = (): ReactElement | null => { const [styles, colors] = useStyle(); - const recordingRef = useRef(null); - const durationRef = useRef({} as IDurationRef); - const numberOfTriesRef = useRef(0); + const audioRecorder = useAudioRecorder(RECORDING_SETTINGS); + const [status, setStatus] = useState<'recording' | 'reviewing'>('recording'); const { setRecordingAudio } = useMessageComposerApi(); const rid = useComposerRid(); @@ -40,33 +39,26 @@ export const RecordAudio = (): ReactElement | null => { useEffect(() => { const record = async () => { try { - await Audio.setAudioModeAsync(RECORDING_MODE); - recordingRef.current = new Audio.Recording(); - await recordingRef.current.prepareToRecordAsync(RECORDING_SETTINGS); - recordingRef.current.setOnRecordingStatusUpdate(durationRef.current.onRecordingStatusUpdate); - await recordingRef.current.startAsync(); - } catch (error: any) { - // error only occurs on iOS devices - if (error?.code === 'E_AUDIO_RECORDERNOTCREATED') { - if (numberOfTriesRef.current <= 5) { - recordingRef.current = null; - numberOfTriesRef.current += 1; - setTimeout(() => { - record(); - }, 100); - } else { - console.error(error); - } - } else { - console.error(error); + const permissions = await requestRecordingPermissionsAsync(); + if (!permissions.granted) { + setRecordingAudio(false); + return; } + + await setAudioModeAsync(RECORDING_MODE); + await audioRecorder.prepareToRecordAsync(); + audioRecorder.record(); + } catch (error) { + log(error); + setRecordingAudio(false); } }; + record(); return () => { try { - recordingRef.current?.stopAndUnloadAsync(); + audioRecorder.stop(); } catch { // Do nothing } @@ -75,7 +67,7 @@ export const RecordAudio = (): ReactElement | null => { const cancelRecording = async () => { try { - await recordingRef.current?.stopAndUnloadAsync(); + await audioRecorder.stop(); } catch { // Do nothing } finally { @@ -85,7 +77,7 @@ export const RecordAudio = (): ReactElement | null => { const goReview = async () => { try { - await recordingRef.current?.stopAndUnloadAsync(); + await audioRecorder.stop(); setStatus('reviewing'); } catch { // Do nothing @@ -94,16 +86,14 @@ export const RecordAudio = (): ReactElement | null => { const sendAudio = async () => { try { - if (!rid) return; - setRecordingAudio(false); - const fileURI = recordingRef.current?.getURI(); - const fileData = await getInfoAsync(fileURI as string); + if (!rid || !audioRecorder.uri) return; + const fileData = await getInfoAsync(audioRecorder.uri); const fileInfo = { name: `${Date.now()}${RECORDING_EXTENSION}`, mime: 'audio/aac', type: 'audio/aac', store: 'Uploads', - path: fileURI, + path: fileData.uri, size: fileData.exists ? fileData.size : null } as IUpload; @@ -112,7 +102,9 @@ export const RecordAudio = (): ReactElement | null => { await sendFileMessage(rid, fileInfo, tmid, server, user); } } + setRecordingAudio(false); } catch (e) { + setRecordingAudio(false); log(e); } }; @@ -125,7 +117,7 @@ export const RecordAudio = (): ReactElement | null => { return ( - + @@ -146,7 +138,7 @@ export const RecordAudio = (): ReactElement | null => { - + diff --git a/app/containers/Ringer/index.tsx b/app/containers/Ringer/index.tsx index 19dad9435cd..59174edc05b 100644 --- a/app/containers/Ringer/index.tsx +++ b/app/containers/Ringer/index.tsx @@ -1,5 +1,7 @@ -import { Audio } from 'expo-av'; -import { useEffect, useRef, memo } from 'react'; +import { createAudioPlayer } from 'expo-audio'; +import { useEffect, memo } from 'react'; + +import log from '~/lib/methods/helpers/log'; export enum ERingerSounds { DIALTONE = 'dialtone', @@ -7,25 +9,24 @@ export enum ERingerSounds { } const Ringer = memo(({ ringer }: { ringer: ERingerSounds }) => { - const sound = useRef(new Audio.Sound()); - useEffect(() => { - const loadAndPlay = async () => { + const soundFile = ringer === ERingerSounds.DIALTONE ? require('./dialtone.mp3') : require('./ringtone.mp3'); + const player = createAudioPlayer(soundFile); + try { + player.loop = true; + player.play(); + } catch (error) { + log(error); + } + + return () => { try { - const soundFile = ringer === ERingerSounds.DIALTONE ? require(`./dialtone.mp3`) : require(`./ringtone.mp3`); - await sound.current.loadAsync(soundFile); - await sound.current.playAsync(); - await sound.current.setIsLoopingAsync(true); + player.pause(); + player.release(); } catch (error) { - console.error('Error loading sound:', error); + log(error); } }; - - loadAndPlay(); - - return () => { - sound.current?.unloadAsync(); - }; }, []); return null; diff --git a/app/containers/VideoPlayer/__snapshots__/index.test.tsx.snap b/app/containers/VideoPlayer/__snapshots__/index.test.tsx.snap new file mode 100644 index 00000000000..4e2d0c7e633 --- /dev/null +++ b/app/containers/VideoPlayer/__snapshots__/index.test.tsx.snap @@ -0,0 +1,16 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Story Snapshots: Basic should match snapshot 1`] = ` + +`; diff --git a/app/containers/VideoPlayer/index.stories.tsx b/app/containers/VideoPlayer/index.stories.tsx new file mode 100644 index 00000000000..fa4ee1ef025 --- /dev/null +++ b/app/containers/VideoPlayer/index.stories.tsx @@ -0,0 +1,20 @@ +import { type ReactElement } from 'react'; + +import VideoPlayer from '.'; + +export default { + title: 'Video Player' +}; + +const attachment = { + title_link: 'https://open.rocket.chat/video.mp4', + video_url: 'https://open.rocket.chat/video.mp4' +}; + +const user = { id: 'user-id', token: 'token' }; + +const setLoading = () => undefined; + +export const Basic = (): ReactElement => ( + +); diff --git a/app/containers/VideoPlayer/index.test.tsx b/app/containers/VideoPlayer/index.test.tsx new file mode 100644 index 00000000000..12e94566684 --- /dev/null +++ b/app/containers/VideoPlayer/index.test.tsx @@ -0,0 +1,90 @@ +import { render } from '@testing-library/react-native'; +import { Alert } from 'react-native'; + +import VideoPlayer from '.'; +import { useAppNavigation } from '~/lib/hooks/navigation'; +import { generateSnapshots } from '~/.rnstorybook/generateSnapshots'; +import * as stories from './index.stories'; + +jest.mock('expo', () => ({ + useEventListener: jest.fn() +})); + +jest.mock('~/i18n', () => ({ + __esModule: true, + default: { + t: (key: string) => key + } +})); + +jest.mock('~/lib/methods/helpers', () => ({ + formatAttachmentUrl: (url: string) => url, + encodeAttachmentUrl: (url: string) => url +})); + +jest.mock('~/lib/hooks/navigation', () => ({ + useAppNavigation: jest.fn(() => ({ + addListener: jest.fn(() => jest.fn()), + goBack: jest.fn() + })) +})); + +const mockUseEventListener = require('expo').useEventListener as jest.Mock; + +const mockUseAppNavigation = useAppNavigation as jest.Mock; + +let statusCallback: ((event: { status: string }) => void) | undefined; + +const baseProps = { + attachment: { + title_link: 'https://open.rocket.chat/video.mp4', + video_url: 'https://open.rocket.chat/video.mp4' + }, + user: { id: 'user-id', token: 'token' }, + baseUrl: 'https://open.rocket.chat' +}; + +describe('VideoPlayer', () => { + beforeEach(() => { + jest.clearAllMocks(); + statusCallback = undefined; + mockUseAppNavigation.mockReturnValue({ + addListener: jest.fn(() => jest.fn()), + goBack: jest.fn() + }); + mockUseEventListener.mockImplementation((_player: unknown, _event: string, cb: (event: { status: string }) => void) => { + statusCallback = cb; + }); + }); + + it('hides the loading indicator when the video is ready to play', () => { + const setLoading = jest.fn(); + render(); + + statusCallback?.({ status: 'readyToPlay' }); + + expect(setLoading).toHaveBeenCalledWith(false); + }); + + it('alerts and navigates back only once when the video fails to load', () => { + const setLoading = jest.fn(); + const goBack = jest.fn(); + mockUseAppNavigation.mockReturnValue({ + addListener: jest.fn(() => jest.fn()), + goBack + }); + const alertSpy = jest.spyOn(Alert, 'alert').mockImplementation(() => undefined); + + render(); + + statusCallback?.({ status: 'error' }); + statusCallback?.({ status: 'error' }); + + expect(alertSpy).toHaveBeenCalledTimes(1); + expect(goBack).toHaveBeenCalledTimes(1); + + alertSpy.mockRestore(); + }); +}); + +generateSnapshots(stories); diff --git a/app/containers/VideoPlayer/index.tsx b/app/containers/VideoPlayer/index.tsx new file mode 100644 index 00000000000..4d156ff367f --- /dev/null +++ b/app/containers/VideoPlayer/index.tsx @@ -0,0 +1,71 @@ +import { useVideoPlayer, VideoView } from 'expo-video'; +import { useEffect, useRef, type Dispatch, type SetStateAction, type ReactElement } from 'react'; +import { View } from 'react-native'; +import { useEventListener } from 'expo'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; + +import { styles } from './styles'; +import { useAppNavigation } from '~/lib/hooks/navigation'; +import I18n from '~/i18n'; +import { type IAttachment } from '~/definitions'; +import { formatAttachmentUrl, encodeAttachmentUrl } from '~/lib/methods/helpers'; +import { showErrorAlert } from '~/lib/methods/helpers/info'; + +interface IVideoPlayerProps { + attachment: IAttachment; + user: { id: string; token: string }; + baseUrl: string; + setLoading: Dispatch>; +} + +const VideoPlayer = ({ attachment, user, baseUrl, setLoading }: IVideoPlayerProps): ReactElement => { + const navigation = useAppNavigation(); + const hasHandledErrorRef = useRef(false); + const { bottom } = useSafeAreaInsets(); + + const url = formatAttachmentUrl(attachment.title_link || attachment.video_url, user.id, user.token, baseUrl); + const uri = encodeAttachmentUrl(url); + + const player = useVideoPlayer(uri, player => { + player.play(); + }); + + useEventListener(player, 'statusChange', ({ status }) => { + if (status === 'readyToPlay') { + setLoading(false); + } else if (status === 'error' && !hasHandledErrorRef.current) { + hasHandledErrorRef.current = true; + setLoading(false); + showErrorAlert(I18n.t('There_was_an_error_while_playing_video'), I18n.t('Error')); + navigation.goBack(); + } + }); + + useEffect(() => { + hasHandledErrorRef.current = false; + }, [uri]); + + useEffect(() => { + const blurSub = navigation.addListener('blur', () => { + player.pause(); + }); + return () => { + blurSub(); + }; + }, [navigation, player]); + + return ( + + + + ); +}; + +export default VideoPlayer; diff --git a/app/containers/VideoPlayer/styles.ts b/app/containers/VideoPlayer/styles.ts new file mode 100644 index 00000000000..c445de8903d --- /dev/null +++ b/app/containers/VideoPlayer/styles.ts @@ -0,0 +1,7 @@ +import { StyleSheet } from 'react-native'; + +export const styles = StyleSheet.create({ + container: { + flex: 1 + } +}); diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 874571d310e..cdbeaa547a1 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -209,6 +209,7 @@ "Enter_E2EE_Password_description": "أدخل كلمة مرور E2EE لعرض وإرسال الرسائل المشفرة.\n\nيجب إدخال كلمة المرور على كل جهاز.", "Enter_manually": "أدخل يدويًا", "Enter_username_or_number": "أدخل اسم المستخدم أو الرقم", + "Error": "خطأ", "Error_incorrect_password": "كلمة المرور غير صحيحة", "Error_prefix": "خطأ: {{message}}", "Error_uploading": "خطأ في الرفع", @@ -614,6 +615,7 @@ "The_user_wont_be_able_to_type_in_roomName": "المستخدم لن يتمكن من الكتابة في {{roomName}}", "Theme": "سمة", "There_was_an_error_while_action": "حدث خطأ أثناء {{action}}!", + "There_was_an_error_while_playing_video": "حدث خطأ أثناء تشغيل الفيديو.", "This_room_is_blocked": "هذه الغرفة محظورة", "This_room_is_read_only": "هذه الغرفة للقراءة فقط", "This_will_clear_all_your_offline_data": "سيؤدي هذا إلى محو جميع بياناتك في وضع عدم الاتصال.", diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json index 17c242b47a3..9d6021a1d35 100644 --- a/app/i18n/locales/bn-IN.json +++ b/app/i18n/locales/bn-IN.json @@ -310,6 +310,7 @@ "Enter_E2EE_Password_description": "আপনার ই2ইইই পাসওয়ার্ড প্রবেশ করান গোপন বার্তা দেখতে এবং পাঠানোর জন্য।\n\nপ্রতিটি যন্ত্রে পাসওয়ার্ড প্রবেশ করতে হবে।", "Enter_manually": "ম্যানুয়ালি লিখুন", "Enter_username_or_number": "ব্যবহারকারীর নাম বা নম্বর লিখুন", + "Error": "ত্রুটি", "Error_Download_file": "ফাইল ডাউনলোড করতে ত্রুটি", "Error_incorrect_password": "ভুল পাসওয়ার্ড", "Error_prefix": "ত্রুটি: {{message}}", @@ -835,6 +836,7 @@ "The_user_wont_be_able_to_type_in_roomName": "ব্যবহারকারী প্রতিষ্ঠানগুলি {{roomName}} টাইপ করতে পারবেন না", "Theme": "থিম", "There_was_an_error_while_action": "{{action}} সময়ে একটি ত্রুটি ছিল!", + "There_was_an_error_while_playing_video": "ভিডিও চালানোর সময় একটি ত্রুটি ঘটেছে।", "This_room_is_blocked": "এই রুমটি অবরোধিত", "This_room_is_read_only": "এই রুমটি শুধুমাত্র পড়া যায়", "This_will_clear_all_your_offline_data": "এটি আপনার সমস্ত অফলাইন ডেটা মুছে ফেলবে।", diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json index 957e5cea9e4..b85835d83c7 100644 --- a/app/i18n/locales/cs.json +++ b/app/i18n/locales/cs.json @@ -329,6 +329,7 @@ "Enter_Your_E2E_Password": "Zadejte heslo E2E", "Enter_Your_Encryption_Password_desc1": "To vám umožní přístup k vašim zašifrovaným soukromým skupinám a přímým zprávám.", "Enter_Your_Encryption_Password_desc2": "Ke kódování/dekódování zpráv musíte zadat heslo na každém místě, kde používáte chat.", + "Error": "Chyba", "Error_Download_file": "Chyba při stahování souboru", "Error_incorrect_password": "Nesprávné heslo", "Error_prefix": "Chyba: {{message}}", @@ -898,6 +899,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Uživatel nebude moci psát v {{roomName}}", "Theme": "Téma", "There_was_an_error_while_action": "Při {{action}} došlo k chybě!", + "There_was_an_error_while_playing_video": "Při přehrávání videa došlo k chybě.", "This_room_is_blocked": "Tato místnost je zablokována", "This_room_is_read_only": "Tato místnost je pouze pro čtení", "This_will_clear_all_your_offline_data": "Tímto vymažete všechna vaše offline data.", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index 4af39fdeab6..162d248ddd7 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -304,6 +304,7 @@ "Enter_E2EE_Password_description": "Geben Sie Ihr E2EE-Passwort ein, um verschlüsselte Nachrichten anzuzeigen und zu senden.\n\nDas Passwort muss auf jedem Gerät eingegeben werden.", "Enter_manually": "Manuell eingeben", "Enter_username_or_number": "Benutzername oder Nummer eingeben", + "Error": "Fehler", "Error_Download_file": "Fehler beim Herunterladen der Datei", "Error_incorrect_password": "Falsches Passwort", "Error_prefix": "Fehler: {{message}}", @@ -827,6 +828,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Dem Nutzer wird es nicht möglich sein in {{roomName}} zu schreiben", "Theme": "Erscheinungsbild", "There_was_an_error_while_action": "Während {{action}} ist ein Fehler aufgetreten!", + "There_was_an_error_while_playing_video": "Beim Abspielen des Videos ist ein Fehler aufgetreten.", "This_room_is_blocked": "Dieser Room ist gesperrt", "This_room_is_read_only": "Dieser Room kann nur gelesen werden", "This_will_clear_all_your_offline_data": "Dies wird Ihre Offline-Daten löschen.", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 4a0809c15a1..20f09b55c0b 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -350,9 +350,9 @@ "Enter_manually": "Enter manually", "Enter_the_code": "Enter the code we just emailed you.", "Enter_username_or_number": "Enter username or number", + "Error": "Error", "Error_Download_file": "Error while downloading file", "Error_incorrect_password": "Incorrect password", - "Error_play_video": "There was an error while playing this video", "Error_prefix": "Error: {{message}}", "Error_uploading": "Error uploading", "error-action-not-allowed": "{{action}} is not allowed", @@ -924,6 +924,7 @@ "The_user_wont_be_able_to_type_in_roomName": "The user won't be able to type in {{roomName}}", "Theme": "Theme", "There_was_an_error_while_action": "There was an error while {{action}}!", + "There_was_an_error_while_playing_video": "There was an error while playing the video.", "This_room_is_blocked": "This room is blocked", "This_room_is_read_only": "This room is read only", "This_will_clear_all_your_offline_data": "This will clear all your offline data.", diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json index f590403f9e8..fa0a06ceb55 100644 --- a/app/i18n/locales/es.json +++ b/app/i18n/locales/es.json @@ -174,6 +174,7 @@ "Enter_E2EE_Password_description": "Ingrese su contraseña E2EE para ver y enviar mensajes cifrados.\n\nLa contraseña debe ingresarse en cada dispositivo.", "Enter_manually": "Ingresar manualmente", "Enter_username_or_number": "Introduzca usuario o número", + "Error": "Error", "Error_incorrect_password": "Contraseña incorrecta", "Error_prefix": "Error: {{mensaje}}", "Error_uploading": "Error en la subida", @@ -459,6 +460,7 @@ "The_autocomplete_options_are_available_above_the_input_composer": "Las opciones de autocompletado están disponibles arriba del compositor de entrada.", "Theme": "Tema", "There_was_an_error_while_action": "¡Ha habido un error mientras {{action}}!", + "There_was_an_error_while_playing_video": "Se produjo un error al reproducir el vídeo.", "This_room_is_blocked": "La sala está bloqueada", "This_room_is_read_only": "Esta sala es de sólo lectura", "Thread": "Hilo", diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json index 19a11f6f096..f36f557d3ba 100644 --- a/app/i18n/locales/fi.json +++ b/app/i18n/locales/fi.json @@ -289,6 +289,7 @@ "Enter_E2EE_Password_description": "Syötä E2EE-salasanasi, jotta voit tarkastella ja lähettää salattuja viestejä.\n\nSalasana on syötettävä jokaisella laitteella.", "Enter_manually": "Syötä manuaalisesti", "Enter_username_or_number": "Anna käyttäjänimi tai numero", + "Error": "Virhe", "Error_Download_file": "Virhe ladattaessa tiedostoa", "Error_incorrect_password": "Virheellinen salasana", "Error_prefix": "Virhe: {{message}}", @@ -802,6 +803,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Käyttäjä ei voi kirjoittaa huoneessa {{roomName}}", "Theme": "Teema", "There_was_an_error_while_action": "Virhe toiminnon {{action}} aikana!", + "There_was_an_error_while_playing_video": "Videon toiston aikana tapahtui virhe.", "This_room_is_blocked": "Huone on estetty", "This_room_is_read_only": "Huone on vain luku -tilassa", "This_will_clear_all_your_offline_data": "Tämä poistaa kaikki offline-tietosi.", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index ae37eb4740f..ddb8e006735 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -257,6 +257,7 @@ "Enter_E2EE_Password_description": "Entrez votre mot de passe E2EE pour consulter et envoyer des messages chiffrés.\n\nLe mot de passe doit être saisi sur chaque appareil.", "Enter_manually": "Saisir manuellement", "Enter_username_or_number": "Saisissez un nom d’utilisateur ou un numéro", + "Error": "Erreur", "Error_Download_file": "Erreur lors du téléchargement du fichier", "Error_incorrect_password": "Mot de passe incorrect", "Error_prefix": "Erreur : {{message}}", @@ -735,6 +736,7 @@ "The_user_wont_be_able_to_type_in_roomName": "L'utilisateur ne pourra pas écrire dans {{roomName}}", "Theme": "Thème", "There_was_an_error_while_action": "Une erreur s'est produite lors de {{action}} !", + "There_was_an_error_while_playing_video": "Une erreur s'est produite lors de la lecture de la vidéo.", "This_room_is_blocked": "Ce salon est bloqué", "This_room_is_read_only": "Ce salon est en lecture seule", "This_will_clear_all_your_offline_data": "Cela effacera toutes vos données hors ligne.", diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json index 75c383b403f..3ceefcbd1d2 100644 --- a/app/i18n/locales/hi-IN.json +++ b/app/i18n/locales/hi-IN.json @@ -310,6 +310,7 @@ "Enter_E2EE_Password_description": "एन्क्रिप्टेड संदेश देखने और भेजने के लिए अपना E2EE पासवर्ड दर्ज करें।\n\nप्रत्येक डिवाइस पर पासवर्ड दर्ज करना आवश्यक है।", "Enter_manually": "मैन्युअल रूप से दर्ज करें", "Enter_username_or_number": "उपयोगकर्ता नाम या नंबर दर्ज करें", + "Error": "त्रुटि", "Error_Download_file": "फ़ाइल डाउनलोड करते समय त्रुटि", "Error_incorrect_password": "गलत पासवर्ड", "Error_prefix": "त्रुटि: {{message}}", @@ -835,6 +836,7 @@ "The_user_wont_be_able_to_type_in_roomName": "उपयोगकर्ता {{roomName}} में टाइप नहीं कर सकता है", "Theme": "थीम", "There_was_an_error_while_action": "{{action}} करते समय एक त्रुटि हुई थी!", + "There_was_an_error_while_playing_video": "वीडियो चलाते समय एक त्रुटि हुई।", "This_room_is_blocked": "यह कमरा ब्लॉक किया गया है", "This_room_is_read_only": "यह कमरा केवल पठन के लिए है", "This_will_clear_all_your_offline_data": "यह आपके सभी ऑफ़लाइन डेटा को हटा देगा।", diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json index 1c274001778..70261c37561 100644 --- a/app/i18n/locales/hu.json +++ b/app/i18n/locales/hu.json @@ -310,6 +310,7 @@ "Enter_E2EE_Password_description": "Adja meg az E2EE jelszavát a titkosított üzenetek megtekintéséhez és küldéséhez.\n\nA jelszót minden eszközön meg kell adni.", "Enter_manually": "Kézi bevitel", "Enter_username_or_number": "Adjon meg felhasználónevet vagy számot", + "Error": "Hiba", "Error_Download_file": "Hiba a fájl letöltése közben", "Error_incorrect_password": "Helytelen jelszó", "Error_prefix": "Hiba: {{üzenet}}", @@ -836,6 +837,7 @@ "The_user_wont_be_able_to_type_in_roomName": "A felhasználó nem tud írni itt: {{roomName}}", "Theme": "Téma", "There_was_an_error_while_action": "Hiba történt a {{action}}!", + "There_was_an_error_while_playing_video": "Hiba történt a videó lejátszása közben.", "This_room_is_blocked": "Ez a szoba tiltva van", "This_room_is_read_only": "Ez a szoba csak olvasható", "This_will_clear_all_your_offline_data": "Ez törli az összes offline adatot.", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 20f08388d0f..8f7c7534bfb 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -233,6 +233,7 @@ "Enter_E2EE_Password_description": "Inserisci la tua password E2EE per visualizzare e inviare messaggi crittografati.\n\nLa password deve essere inserita su ciascun dispositivo.", "Enter_manually": "Inserisci manualmente", "Enter_username_or_number": "Inserisci nome utente o numero", + "Error": "Errore", "Error_incorrect_password": "Password errata", "Error_prefix": "Errore: {{message}}", "Error_uploading": "Errore nel caricamento di", @@ -648,6 +649,7 @@ "The_user_wont_be_able_to_type_in_roomName": "L'utente non potrà scrivere in {{roomName}}", "Theme": "Tema", "There_was_an_error_while_action": "Si è verificato un errore nel {{action}}!", + "There_was_an_error_while_playing_video": "Si è verificato un errore durante la riproduzione del video.", "This_room_is_blocked": "Questa stanza è bloccata", "This_room_is_read_only": "Questa stanza è in sola lettura", "This_will_clear_all_your_offline_data": "Questo cancellerà tutti i tuoi dati offline.", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 41cd0fd4c3a..40a9cf29fd4 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -208,6 +208,7 @@ "Enter_E2EE_Password_description": "E2EEパスワードを入力して、暗号化されたメッセージを表示および送信してください。\n\n各デバイスでパスワードを入力する必要があります。", "Enter_manually": "手動で入力", "Enter_username_or_number": "ユーザー名または番号を入力", + "Error": "エラー", "Error_incorrect_password": "パスワードが違います。", "Error_prefix": "エラー: {{message}}", "Error_uploading": "アップロードエラー", @@ -546,6 +547,7 @@ "The_autocomplete_options_are_available_above_the_input_composer": "オートコンプリートのオプションは入力コンポーザーの上にあります。", "Theme": "テーマ", "There_was_an_error_while_action": "{{action}}の最中にエラーが発生しました!", + "There_was_an_error_while_playing_video": "動画の再生中にエラーが発生しました。", "This_room_is_blocked": "このルームはブロックされています。", "This_room_is_read_only": "このルームは読み取り専用です。", "This_will_clear_all_your_offline_data": "オフラインデータをすべて削除します。", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index d1801286da3..c127f34c9d2 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -257,6 +257,7 @@ "Enter_E2EE_Password_description": "Voer je E2EE-wachtwoord in om versleutelde berichten te bekijken en te verzenden.\n\nHet wachtwoord moet op elk apparaat worden ingevoerd.", "Enter_manually": "Handmatig invoeren", "Enter_username_or_number": "Voer een gebruikersnaam of nummer in", + "Error": "Fout", "Error_Download_file": "Fout tijdens het downloaden van bestand", "Error_incorrect_password": "Onjuist wachtwoord", "Error_prefix": "Fout: {{message}}", @@ -735,6 +736,7 @@ "The_user_wont_be_able_to_type_in_roomName": "De gebruiker zal in {{roomName}} niet kunnen typen", "Theme": "Thema", "There_was_an_error_while_action": "Er is een fout opgetreden tijdens {{action}}!", + "There_was_an_error_while_playing_video": "Er is een fout opgetreden tijdens het afspelen van de video.", "This_room_is_blocked": "Deze kamer is geblokkeerd", "This_room_is_read_only": "Deze kamer is alleen-lezen", "This_will_clear_all_your_offline_data": "Hiermee worden al jouw offline gegevens gewist.", diff --git a/app/i18n/locales/nn.json b/app/i18n/locales/nn.json index 88bcc574c4f..ddb9e2c1bcb 100644 --- a/app/i18n/locales/nn.json +++ b/app/i18n/locales/nn.json @@ -174,6 +174,7 @@ "Enter_manually": "Skriv inn manuelt", "Enter_the_code": "Skriv inn koden vi nettopp sendte deg på e-post.", "Enter_username_or_number": "Skriv inn brukarnamn eller nummer", + "Error": "Feil", "error-action-not-allowed": "{{action}} er ikke tillatt", "error-avatar-invalid-url": "Ugyldig avatar URL: {{url}}", "error-email-send-failed": "Feil ved å prøve å sende e-post: {{message}}", @@ -414,6 +415,7 @@ "The_maximum_number_of_users_has_been_reached": "Maksimalt antall brukere er nådd.", "The_room_does_not_exist": "Rommet eksisterer ikke eller du har ikke tilgang", "Theme": "Tema", + "There_was_an_error_while_playing_video": "Det oppstod ein feil under avspeling av videoen.", "This_room_is_blocked": "Dette rommet er blokkert", "This_room_is_read_only": "Dette rommet er kun skrivebeskyttet", "Thread_message": "trådmelding {{msg}}", diff --git a/app/i18n/locales/no.json b/app/i18n/locales/no.json index b9a643c907c..f0aa31b332a 100644 --- a/app/i18n/locales/no.json +++ b/app/i18n/locales/no.json @@ -335,8 +335,8 @@ "Enter_manually": "Skriv inn manuelt", "Enter_the_code": "Skriv inn koden vi nettopp sendte deg på e-post.", "Enter_username_or_number": "Skriv inn brukernavn eller nummer", + "Error": "Feil", "Error_Download_file": "Feil under nedlasting av fil", - "Error_play_video": "Det oppsto en feil under avspilling av denne videoen", "Error_uploading": "Feil ved opplasting", "error-action-not-allowed": "{{action}} er ikke tillat", "error-avatar-invalid-url": "Ugyldig avatar URL: {{url}}", @@ -882,6 +882,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Brukeren vil ikke kunne skrive inn {{roomName}}", "Theme": "Tema", "There_was_an_error_while_action": "Det oppsto en feil mens {{action}}!", + "There_was_an_error_while_playing_video": "Det oppstod en feil under avspilling av videoen.", "This_room_is_blocked": "Dette rommet er blokkert", "This_room_is_read_only": "Dette rommet er skrivebeskyttet", "This_will_clear_all_your_offline_data": "Dette vil slette alle dine frakoblede data.", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index 6e6322cde1f..1af1d2a4788 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -339,9 +339,9 @@ "Enter_manually": "Inserir manualmente", "Enter_the_code": "Insira o código que acabamos de enviar por e-mail.", "Enter_username_or_number": "Digite o usuário ou número", + "Error": "Erro", "Error_Download_file": "Erro ao baixar o arquivo", "Error_incorrect_password": "Senha incorreta", - "Error_play_video": "Houve um erro ao reproduzir esse vídeo", "Error_prefix": "Erro: {{message}}", "Error_uploading": "Erro subindo", "error-action-not-allowed": "{{action}} não é permitido", @@ -907,6 +907,7 @@ "The_user_wont_be_able_to_type_in_roomName": "O usuário não poderá digitar em {{roomName}}", "Theme": "Tema", "There_was_an_error_while_action": "Aconteceu um erro {{action}}!", + "There_was_an_error_while_playing_video": "Ocorreu um erro ao reproduzir o vídeo.", "This_room_is_blocked": "Esta sala está bloqueada", "This_room_is_read_only": "Esta sala é somente leitura", "This_will_clear_all_your_offline_data": "Isto limpará todos os seus dados offline.", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index d7d39e650a8..033e4036b2c 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -204,6 +204,7 @@ "Enter_E2EE_Password_description": "Introduza a sua palavra-passe E2EE para ver e enviar mensagens encriptadas.\n\nA palavra-passe precisa ser introduzida em cada dispositivo.", "Enter_manually": "Inserir manualmente", "Enter_username_or_number": "Introduza o nome de utilizador ou número", + "Error": "Erro", "Error_incorrect_password": "Palavra-passe incorreta", "Error_prefix": "Erro: {{message}}", "Error_uploading": "Erro ao fazer o envio", @@ -530,6 +531,7 @@ "Terms_of_Service": " Termos do Serviço ", "The_autocomplete_options_are_available_above_the_input_composer": "As opções de preenchimento automático estão disponíveis acima do compositor de entrada.", "There_was_an_error_while_action": "Houve um erro enquanto {{action}}!", + "There_was_an_error_while_playing_video": "Ocorreu um erro ao reproduzir o vídeo.", "This_room_is_blocked": "Esta sala está bloqueada", "This_room_is_read_only": "Esta sala é apenas de leitura", "Thread_message": "mensagem do tópico {{msg}}", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index ad350745b44..11cce560077 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -280,6 +280,7 @@ "Enter_E2EE_Password_description": "Введите ваш E2EE пароль, чтобы просматривать и отправлять зашифрованные сообщения.\n\nПароль необходимо вводить на каждом устройстве.", "Enter_manually": "Ввести вручную", "Enter_username_or_number": "Введите имя пользователя или номер", + "Error": "Ошибка", "Error_Download_file": "Ошибка при скачивании файла", "Error_incorrect_password": "Неверный пароль", "Error_prefix": "Ошибка: {{сообщение}}", @@ -779,6 +780,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Пользователь не сможет писать сообщения в {{roomName}}", "Theme": "Тема", "There_was_an_error_while_action": "Произошла ошибка в процессе {{action}}!", + "There_was_an_error_while_playing_video": "Произошла ошибка при воспроизведении видео.", "This_room_is_blocked": "Этот чат заблокирован", "This_room_is_read_only": "Этот чат доступен только для чтения", "This_will_clear_all_your_offline_data": "Это очистит все ваши офлайн данные.", diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json index a7817e3d830..efcefab0cf0 100644 --- a/app/i18n/locales/sl-SI.json +++ b/app/i18n/locales/sl-SI.json @@ -267,6 +267,7 @@ "Enter_E2EE_Password_description": "Vnesite svoje geslo E2EE za ogled in pošiljanje šifriranih sporočil.\n\nGeslo je treba vnesti na vsaki napravi.", "Enter_manually": "Vnesi ročno", "Enter_username_or_number": "Vnesite uporabniško ime ali številko", + "Error": "Napaka", "Error_Download_file": "Napaka med prenosom datoteke", "Error_incorrect_password": "Napačno geslo", "Error_prefix": "Napaka: {{message}}", @@ -749,6 +750,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Uporabnik ne bo mogel vtipkavati v {{roomName}}", "Theme": "Tema", "There_was_an_error_while_action": "Med {{action}} je prišlo do napake!", + "There_was_an_error_while_playing_video": "Med predvajanjem videa je prišlo do napake.", "This_room_is_blocked": "Ta soba je blokirana", "This_room_is_read_only": "Ta soba se samo bere", "This_will_clear_all_your_offline_data": "To bo zbrisalo vse vaše podatke brez povezave.", diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json index ab2f2b6c0b3..0f671eca4f7 100644 --- a/app/i18n/locales/sv.json +++ b/app/i18n/locales/sv.json @@ -289,6 +289,7 @@ "Enter_E2EE_Password_description": "Ange ditt E2EE-lösenord för att visa och skicka krypterade meddelanden.\n\nLösenordet måste anges på varje enhet.", "Enter_manually": "Ange manuellt", "Enter_username_or_number": "Ange användarnamn eller nummer", + "Error": "Fel", "Error_Download_file": "Fel vid nedladdning av fil", "Error_incorrect_password": "Felaktigt lösenord", "Error_prefix": "Fel: {{message}}", @@ -801,6 +802,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Användaren kan inte ange {{roomName}}", "Theme": "Tema", "There_was_an_error_while_action": "Ett fel inträffade vid {{action}}.", + "There_was_an_error_while_playing_video": "Ett fel uppstod när videon spelades upp.", "This_room_is_blocked": "Rummet är blockerat", "This_room_is_read_only": "Rummet är skrivskyddat", "This_will_clear_all_your_offline_data": "Med den här åtgärden rensas alla dina offlinedata.", diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json index 14a0b567050..c7223617b79 100644 --- a/app/i18n/locales/ta-IN.json +++ b/app/i18n/locales/ta-IN.json @@ -310,6 +310,7 @@ "Enter_E2EE_Password_description": "உங்கள் கடவுச்சொல்லைப் பதிவு செய்து குறியாக்கச் செய்திகளைப் பார்க்கவும் மற்றும் அனுப்பவும். \n\nஒவ்வொரு சாதனத்திலும் கடவுச்சொல்லை உள்ளிட வேண்டும்.", "Enter_manually": "கைமுறையாக உள்ளிடவும்", "Enter_username_or_number": "பயனர் பெயர் அல்லது எண்ணை உள்ளிடவும்", + "Error": "பிழை", "Error_Download_file": "கோப்பு பதிவிறக்கம் செய்யும் போது பிழை", "Error_incorrect_password": "தவறான கடவுச்சொல்", "Error_prefix": "பிழை: {{message}}", @@ -835,6 +836,7 @@ "The_user_wont_be_able_to_type_in_roomName": "பயனர் {{roomName}} இல்லை என்றார்", "Theme": "வானம்", "There_was_an_error_while_action": "{{action}} போன்ற நடவடிக்கையில் பிழை ஏற்பட்டது", + "There_was_an_error_while_playing_video": "வீடியோவை இயக்கும்போது ஒரு பிழை ஏற்பட்டது.", "This_room_is_blocked": "இந்த அறை தடைக்கப்பட்டுள்ளது", "This_room_is_read_only": "இந்த அறை மட்டுமே படிக்கக்கூடியது", "This_will_clear_all_your_offline_data": "இது உங்களுடைய அனுமதிகள் அனைத்து ஆஃப்லைன் தரவையும் அழிக்கும்.", diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 661e4f51b98..85195c0a19e 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -309,6 +309,7 @@ "Enter_E2EE_Password_description": "ఎన్‌క్రిప్ట్ చేయబడిన సందేశాలను వీక్షించడానికి మరియు పంపడానికి మీ E2EE పాస్‌వర్డ్‌ని నమోదు చెయ్యండి.\n\nప్రతీ పరికరంలో పాస్‌వర్డ్‌ని నమోదు చేయాల్సి ఉంటుంది.", "Enter_manually": "మాన్యువల్‌గా నమోదు చేయండి", "Enter_username_or_number": "వినియోగదారు పేరు లేదా నంబర్‌ను నమోదు చేయండి", + "Error": "లోపం", "Error_Download_file": "ఫైల్ డౌన్‌లోడ్ చేస్తున్నప్పుడు తప్పిబాటు", "Error_incorrect_password": "తప్పు పాస్‌వర్డ్", "Error_prefix": "తప్పు: {{message}}", @@ -834,6 +835,7 @@ "The_user_wont_be_able_to_type_in_roomName": "వాడు {{roomName}}లో టైప్ చేయగలరు", "Theme": "థీమ్", "There_was_an_error_while_action": "{{action}} ప్రవృత్తి ప్రారంభించడానికి ఒక లోపం ఉంది!", + "There_was_an_error_while_playing_video": "వీడియోను ప్లే చేస్తున్నప్పుడు ఒక లోపం సంభవించింది.", "This_room_is_blocked": "ఈ గది నిషేధించబడింది", "This_room_is_read_only": "ఈ గది కంటెంట్ చదవడానికి మాత్రమే", "This_will_clear_all_your_offline_data": "ఇది మీ ఆఫ్‌లైన్ డేటాను అన్ని క్లియర్ చేస్తుంది.", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index dd2dc95dbce..5ba75c7bc19 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -222,6 +222,7 @@ "Enter_E2EE_Password_description": "Şifreli mesajları görüntülemek ve göndermek için E2EE şifrenizi girin.\n\nHer cihazda şifre girişi yapılmalıdır.", "Enter_manually": "Manuel olarak gir", "Enter_username_or_number": "Kullanıcı adı veya numara girin", + "Error": "Hata", "Error_incorrect_password": "Yanlış parola", "Error_prefix": "Hata: {{message}}", "Error_uploading": "Yükleme hatası", @@ -631,6 +632,7 @@ "The_user_wont_be_able_to_type_in_roomName": "Kullanıcı {{roomName}} içinde yazamayacak", "Theme": "Tema", "There_was_an_error_while_action": "{{action}} sırasında bir hata oluştu!", + "There_was_an_error_while_playing_video": "Video oynatılırken bir hata oluştu.", "This_room_is_blocked": "Bu oda engellendi", "This_room_is_read_only": "Bu oda yazma kısıtlı", "This_will_clear_all_your_offline_data": "Bu, tüm çevrimdışı verilerinizi temizleyecektir.", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index 63d65844017..0826aeadeaa 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -218,6 +218,7 @@ "Enter_E2EE_Password_description": "输入您的E2EE密码以查看和发送加密消息。\n\n每台设备都需要输入密码。", "Enter_manually": "手动输入", "Enter_username_or_number": "输入用户名或号码", + "Error": "错误", "Error_incorrect_password": "密码错误", "Error_prefix": "错误:{{message}}", "Error_uploading": "错误上传", @@ -603,6 +604,7 @@ "The_user_wont_be_able_to_type_in_roomName": "此用户将无法在 {{roomName}} 中输入", "Theme": "布景主题", "There_was_an_error_while_action": "{{action}}出现错误!", + "There_was_an_error_while_playing_video": "播放视频时发生错误。", "This_room_is_blocked": "这个聊天室被锁了", "This_room_is_read_only": "这个聊天室是只读的", "This_will_clear_all_your_offline_data": "这将清除您的所有离线资料。", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index 4c5ae9b4029..a6ff5ba72b2 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -224,6 +224,7 @@ "Enter_E2EE_Password_description": "輸入您的E2EE密碼以查看和發送加密訊息。\n\n每個設備都需要輸入密碼。", "Enter_manually": "手動輸入", "Enter_username_or_number": "輸入使用者名稱或號碼", + "Error": "錯誤", "Error_incorrect_password": "密碼錯誤", "Error_prefix": "錯誤:{{message}}", "Error_uploading": "錯誤上傳", @@ -631,6 +632,7 @@ "The_user_wont_be_able_to_type_in_roomName": "此使用者將無法在 {{roomName}} 中輸入", "Theme": "佈景主題", "There_was_an_error_while_action": "{{action}}出現錯誤!", + "There_was_an_error_while_playing_video": "播放影片時發生錯誤。", "This_room_is_blocked": "這個聊天室已被鎖定", "This_room_is_read_only": "這個聊天室是唯讀的", "This_will_clear_all_your_offline_data": "這將清除您的所有離線資料。", diff --git a/app/lib/constants/audio.ts b/app/lib/constants/audio.ts index f0c506c34de..bfb77daeb4a 100644 --- a/app/lib/constants/audio.ts +++ b/app/lib/constants/audio.ts @@ -1,48 +1,41 @@ -import { Audio, type AudioMode, InterruptionModeAndroid, InterruptionModeIOS } from 'expo-av'; -import { type RecordingOptions } from 'expo-av/build/Audio'; +import { isIOS } from '../methods/helpers'; +import { AudioQuality, IOSOutputFormat, type RecordingOptions, type AudioMode } from 'expo-audio'; export const RECORDING_EXTENSION = '.aac'; + export const RECORDING_SETTINGS: RecordingOptions = { + extension: RECORDING_EXTENSION, + sampleRate: 44100, + numberOfChannels: 2, + bitRate: isIOS ? 64000 : 128000, android: { - // Settings related to audio encoding. - extension: RECORDING_EXTENSION, - outputFormat: Audio.AndroidOutputFormat.AAC_ADTS, - audioEncoder: Audio.AndroidAudioEncoder.AAC, - // Settings related to audio quality. - sampleRate: Audio.RecordingOptionsPresets.LOW_QUALITY.android.sampleRate, - numberOfChannels: Audio.RecordingOptionsPresets.LOW_QUALITY.android.numberOfChannels, - bitRate: Audio.RecordingOptionsPresets.LOW_QUALITY.android.bitRate + outputFormat: 'aac_adts', + audioEncoder: 'aac' }, ios: { - // Settings related to audio encoding. - extension: RECORDING_EXTENSION, - audioQuality: Audio.IOSAudioQuality.MEDIUM, - outputFormat: Audio.IOSOutputFormat.MPEG4AAC, - // Settings related to audio quality. - sampleRate: Audio.RecordingOptionsPresets.LOW_QUALITY.ios.sampleRate, - numberOfChannels: Audio.RecordingOptionsPresets.LOW_QUALITY.ios.numberOfChannels, - bitRate: Audio.RecordingOptionsPresets.LOW_QUALITY.ios.bitRate + audioQuality: AudioQuality.MEDIUM, + outputFormat: IOSOutputFormat.MPEG4AAC, + linearPCMBitDepth: 16, + linearPCMIsBigEndian: false, + linearPCMIsFloat: false }, - web: {}, - keepAudioActiveHint: true + web: {} }; export const RECORDING_MODE: AudioMode = { - allowsRecordingIOS: true, - playsInSilentModeIOS: true, - staysActiveInBackground: true, - shouldDuckAndroid: true, - playThroughEarpieceAndroid: false, - interruptionModeIOS: InterruptionModeIOS.DoNotMix, - interruptionModeAndroid: InterruptionModeAndroid.DoNotMix + playsInSilentMode: true, + shouldPlayInBackground: true, + allowsRecording: true, + shouldRouteThroughEarpiece: false, + interruptionMode: 'doNotMix', + interruptionModeAndroid: 'doNotMix' }; export const AUDIO_MODE: AudioMode = { - allowsRecordingIOS: false, - playsInSilentModeIOS: true, - staysActiveInBackground: true, - shouldDuckAndroid: true, - playThroughEarpieceAndroid: false, - interruptionModeIOS: InterruptionModeIOS.DoNotMix, - interruptionModeAndroid: InterruptionModeAndroid.DoNotMix + playsInSilentMode: true, + shouldPlayInBackground: true, + allowsRecording: false, + shouldRouteThroughEarpiece: false, + interruptionMode: 'doNotMix', + interruptionModeAndroid: 'doNotMix' }; diff --git a/app/lib/methods/AudioManager.test.ts b/app/lib/methods/AudioManager.test.ts new file mode 100644 index 00000000000..9996b0b1eaf --- /dev/null +++ b/app/lib/methods/AudioManager.test.ts @@ -0,0 +1,255 @@ +jest.mock('../database/services/Message', () => ({ + getMessageById: jest.fn(() => Promise.resolve(null)) +})); + +jest.mock('./getFilePathAudio', () => ({ + getFilePathAudio: jest.fn(() => 'file://x') +})); + +import type AudioManagerInstance from './AudioManager'; +import type { AudioStatus } from 'expo-audio'; +import type { TMessageModel } from '~/definitions'; + +interface IAudioManagerSetup { + AudioManager: typeof AudioManagerInstance; + players: any[]; +} + +const setup = (): IAudioManagerSetup => { + jest.resetModules(); + const players: any[] = []; + const createAudioPlayer = require('expo-audio').createAudioPlayer as jest.Mock; + createAudioPlayer.mockImplementation(() => { + const player = { + play: jest.fn(), + pause: jest.fn(), + stop: jest.fn(), + replay: jest.fn(), + setPlaying: jest.fn(), + setLooping: jest.fn(), + setMuted: jest.fn(), + setVolume: jest.fn(), + shouldCorrectPitch: false, + setPlaybackRate: jest.fn(function (this: { shouldCorrectPitch: boolean }) { + return this.shouldCorrectPitch; + }), + seekTo: jest.fn(), + release: jest.fn(), + remove: jest.fn(), + addListener: jest.fn(() => ({ remove: jest.fn() })), + removeListener: jest.fn(), + getStatusAsync: jest.fn(() => Promise.resolve()), + playing: false, + looping: false, + muted: false, + volume: 1, + playbackRate: 1, + currentTime: 0, + duration: 0, + loaded: false, + progress: 0, + buffering: false, + keepAlive: false + }; + players.push(player); + return player; + }); + const AudioManager = require('./AudioManager').default; + return { AudioManager, players }; +}; + +describe('AudioManager', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('loadAudio caches the player keyed by msgId/rid/uri', async () => { + const { AudioManager, players } = setup(); + const key1 = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + const key2 = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + + expect(key1).toBe(key2); + expect(players).toHaveLength(1); + }); + + it('loadAudio returns different keys for different uris', async () => { + const { AudioManager, players } = setup(); + const key1 = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + const key2 = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://b.mp3' }); + + expect(key1).not.toBe(key2); + expect(players).toHaveLength(2); + }); + + it('unloadRoomAudios releases only players for the given rid', async () => { + const { AudioManager, players } = setup(); + await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + await AudioManager.loadAudio({ rid: 'room-2', uri: 'file://b.mp3' }); + const [player1, player2] = players; + + await AudioManager.unloadRoomAudios('room-1'); + + expect(player1.release).toHaveBeenCalled(); + expect(player2.release).not.toHaveBeenCalled(); + }); + + it('unloadRoomAudios matches by exact rid segment, not substring', async () => { + const { AudioManager, players } = setup(); + await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://room-10/x.mp3' }); + await AudioManager.loadAudio({ rid: 'room-10', uri: 'file://x.mp3' }); + const [playerSubstring, playerExact] = players; + + await AudioManager.unloadRoomAudios('room-1'); + + expect(playerSubstring.release).toHaveBeenCalled(); + expect(playerExact.release).not.toHaveBeenCalled(); + }); + + it('onEnd releases the player when didJustFinish is true', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + AudioManager.addAudioRendered(key); + + await AudioManager.onEnd(key, { isLoaded: true, didJustFinish: true, currentTime: 5, duration: 5 } as AudioStatus); + + expect(players[0].release).toHaveBeenCalled(); + }); + + it('setPositionAsync seeks the player', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + + await AudioManager.setPositionAsync(key, 10); + + expect(players[0].seekTo).toHaveBeenCalledWith(10); + }); + + // On iOS setPlaybackRate maps to AVPlayer.rate, and a non-zero rate starts playback + it('setRate does not touch an idle player, so loading never starts playback', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + + AudioManager.setRate(key, 1); + + expect(players[0].setPlaybackRate).not.toHaveBeenCalled(); + expect(players[0].play).not.toHaveBeenCalled(); + }); + + it('playAudio applies the rate stored while the player was idle', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + AudioManager.setRate(key, 1.5); + + await AudioManager.playAudio(key); + + expect(players[0].setPlaybackRate).toHaveBeenCalledWith(1.5, 'medium'); + expect(players[0].setPlaybackRate).toHaveLastReturnedWith(true); + expect(players[0].play).toHaveBeenCalled(); + }); + + it('setRate applies immediately to the audio currently playing', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + await AudioManager.playAudio(key); + players[0].setPlaybackRate.mockClear(); + + AudioManager.setRate(key, 2); + + expect(players[0].setPlaybackRate).toHaveBeenCalledWith(2, 'medium'); + expect(players[0].setPlaybackRate).toHaveLastReturnedWith(true); + }); + + it('setRate leaves other loaded audios untouched while one is playing', async () => { + const { AudioManager, players } = setup(); + const playingKey = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + const idleKey = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://b.mp3' }); + await AudioManager.playAudio(playingKey); + + AudioManager.setRate(idleKey, 2); + + expect(players[1].setPlaybackRate).not.toHaveBeenCalled(); + expect(players[1].play).not.toHaveBeenCalled(); + }); + + it('a recreated player seeks to the saved position before the rate is applied', async () => { + const { AudioManager, players } = setup(); + const key = await AudioManager.loadAudio({ rid: 'room-1', uri: 'file://a.mp3' }); + AudioManager.setRate(key, 1.5); + await AudioManager.setPositionAsync(key, 7); + await AudioManager.onEnd(key, { isLoaded: true, didJustFinish: true, currentTime: 5, duration: 5 } as AudioStatus); + + await AudioManager.playAudio(key); + + const recreated = players[1]; + const [seekOrder] = recreated.seekTo.mock.invocationCallOrder; + const [rateOrder] = recreated.setPlaybackRate.mock.invocationCallOrder; + const [playOrder] = recreated.play.mock.invocationCallOrder; + expect(recreated.setPlaybackRate).toHaveBeenCalledWith(1.5, 'medium'); + expect(recreated.setPlaybackRate).toHaveLastReturnedWith(true); + expect(seekOrder).toBeLessThan(rateOrder); + expect(rateOrder).toBeLessThan(playOrder); + }); + + it('recreates the next completed audio when replaying a sequence', async () => { + const { AudioManager, players } = setup(); + const firstKey = AudioManager.loadAudio({ msgId: 'a', rid: 'room', uri: 'file://x' }); + const nextKey = AudioManager.loadAudio({ msgId: 'b', rid: 'room', uri: 'file://x' }); + const nextMessage = { id: 'b', attachments: [{ audio_url: '/x', audio_type: 'audio/mp3' }] } as TMessageModel; + jest + .spyOn(AudioManager, 'getNextAudioMessage') + .mockImplementation(msgId => Promise.resolve(msgId === 'a' ? nextMessage : null)); + const finished = { isLoaded: true, didJustFinish: true } as AudioStatus; + + await AudioManager.playAudio(firstKey); + await AudioManager.onEnd(firstKey, finished); + expect(players[1].play).toHaveBeenCalledTimes(1); + await AudioManager.onEnd(nextKey, finished); + + await AudioManager.playAudio(firstKey); + await AudioManager.onEnd(firstKey, finished); + + expect(players).toHaveLength(4); + expect(players[3].play).toHaveBeenCalledTimes(1); + + await AudioManager.onEnd(nextKey, finished); + AudioManager.removeAudioRendered(nextKey); + await AudioManager.playAudio(firstKey); + await AudioManager.onEnd(firstKey, finished); + expect(players).toHaveLength(5); + }); + + it('room cleanup removes completed audio state and releases live players only in that room', async () => { + const { AudioManager, players } = setup(); + const completedKey = AudioManager.loadAudio({ msgId: 'a', rid: 'room', uri: 'file://x' }); + const liveKey = AudioManager.loadAudio({ msgId: 'b', rid: 'room', uri: 'file://x' }); + const otherKey = AudioManager.loadAudio({ msgId: 'c', rid: 'other', uri: 'file://x' }); + const callback = jest.fn(); + AudioManager.setOnPlaybackStatusUpdate(completedKey, callback); + AudioManager.setRate(completedKey, 2); + await AudioManager.onEnd(completedKey, { isLoaded: true, didJustFinish: true } as AudioStatus); + + await AudioManager.unloadRoomAudios('room'); + + expect(players[0].release).toHaveBeenCalledTimes(1); + expect(players[1].release).toHaveBeenCalledTimes(1); + expect(players[2].release).not.toHaveBeenCalled(); + for (const field of [ + 'audioQueue', + 'audioUris', + 'audioPositions', + 'audioRates', + 'audioSubscriptions', + 'audioCallbacks', + 'audioMeta' + ] as const) { + expect(AudioManager[field]).not.toHaveProperty([completedKey]); + expect(AudioManager[field]).not.toHaveProperty([liveKey]); + } + expect(AudioManager['audioUris'][otherKey]).toBe('file://x'); + expect(AudioManager['audioMeta'][otherKey]).toEqual({ msgId: 'c', rid: 'other' }); + jest.spyOn(AudioManager, 'getNextAudioMessage').mockResolvedValue({ id: 'a', attachments: [{}] } as TMessageModel); + const playAudio = jest.spyOn(AudioManager, 'playAudio'); + await AudioManager.playNextAudioInSequence(liveKey); + expect(playAudio).not.toHaveBeenCalled(); + }); +}); diff --git a/app/lib/methods/AudioManager.ts b/app/lib/methods/AudioManager.ts index fbd2a388147..9972160441c 100644 --- a/app/lib/methods/AudioManager.ts +++ b/app/lib/methods/AudioManager.ts @@ -1,4 +1,4 @@ -import { type AVPlaybackStatus, Audio } from 'expo-av'; +import { createAudioPlayer, setAudioModeAsync, type AudioPlayer, type AudioStatus } from 'expo-audio'; import { Q } from '@nozbe/watermelondb'; import dayjs from '../dayjs'; @@ -6,18 +6,31 @@ import { getMessageById } from '../database/services/Message'; import database from '../database'; import { getFilePathAudio } from './getFilePathAudio'; import { type TMessageModel } from '~/definitions'; -import { AUDIO_MODE } from '../constants/audio'; import { emitter } from './helpers'; +import log from './helpers/log'; +import { AUDIO_MODE } from '../constants/audio'; const getAudioKey = ({ msgId, rid, uri }: { msgId?: string; rid: string; uri: string }) => `${msgId}-${rid}-${uri}`; class AudioManagerClass { - private audioQueue: { [audioKey: string]: Audio.Sound }; + private audioQueue: { [audioKey: string]: AudioPlayer }; + private audioUris: { [audioKey: string]: string }; + private audioPositions: { [audioKey: string]: number }; + private audioRates: { [audioKey: string]: number }; + private audioSubscriptions: { [audioKey: string]: () => void }; + private audioCallbacks: { [audioKey: string]: (status: AudioStatus) => void }; + private audioMeta: { [audioKey: string]: { msgId?: string; rid: string } }; private audioPlaying: string; private audiosRendered: Set; constructor() { this.audioQueue = {}; + this.audioUris = {}; + this.audioPositions = {}; + this.audioRates = {}; + this.audioSubscriptions = {}; + this.audioCallbacks = {}; + this.audioMeta = {}; this.audioPlaying = ''; this.audiosRendered = new Set(); } @@ -30,72 +43,119 @@ class AudioManagerClass { this.audiosRendered.delete(audioKey); }; - async loadAudio({ msgId, rid, uri }: { rid: string; msgId?: string; uri: string }): Promise { + loadAudio({ msgId, rid, uri }: { rid: string; msgId?: string; uri: string }): string { const audioKey = getAudioKey({ msgId, rid, uri }); this.addAudioRendered(audioKey); + this.audioUris[audioKey] = uri; + this.audioMeta[audioKey] = { msgId, rid }; if (this.audioQueue[audioKey]) { return audioKey; } - const { sound } = await Audio.Sound.createAsync({ uri }, { androidImplementation: 'MediaPlayer' }); + + const sound = createAudioPlayer({ uri }); this.audioQueue[audioKey] = sound; return audioKey; } async playAudio(audioKey: string) { if (this.audioPlaying) { - await this.pauseAudio(); + this.pauseAudio(); + } + + // If player was released, recreate it + if (!this.audioQueue[audioKey] && this.audioUris[audioKey]) { + const sound = createAudioPlayer({ uri: this.audioUris[audioKey] }); + this.audioQueue[audioKey] = sound; + + if (this.audioPositions[audioKey] !== undefined) { + await sound.seekTo(this.audioPositions[audioKey]); + } + + // Re-register the callback if it exists + if (this.audioCallbacks[audioKey]) { + const sub = sound.addListener('playbackStatusUpdate', status => { + this.onPlaybackStatusUpdate(audioKey, status, this.audioCallbacks[audioKey]); + }); + if (sub) this.audioSubscriptions[audioKey] = () => sub.remove?.(); + } + } + + try { + await setAudioModeAsync(AUDIO_MODE); + this.audioPlaying = audioKey; + this.setRate(audioKey, this.audioRates[audioKey]); + this.audioQueue[audioKey]?.play(); + emitter.emit('audioFocused', audioKey); + } catch (error) { + log(error); } - await Audio.setAudioModeAsync(AUDIO_MODE); - await this.audioQueue[audioKey]?.playAsync(); - this.audioPlaying = audioKey; - emitter.emit('audioFocused', audioKey); } - async pauseAudio() { + pauseAudio(): void { if (this.audioPlaying) { - await this.audioQueue[this.audioPlaying]?.pauseAsync(); + this.audioQueue[this.audioPlaying]?.pause(); this.audioPlaying = ''; } } async setPositionAsync(audioKey: string, time: number) { + this.audioPositions[audioKey] = time; try { - await this.audioQueue[audioKey]?.setPositionAsync(time); - } catch { - // Do nothing + await this.audioQueue[audioKey]?.seekTo(time); + } catch (error) { + log(error); } } - async setRateAsync(audioKey: string, value = 1.0) { + setRate(audioKey: string, value = 1.0): void { + this.audioRates[audioKey] = value; + if (!audioKey || this.audioPlaying !== audioKey) { + return; + } + try { - await this.audioQueue[audioKey].setRateAsync(value, true); - } catch { - // Do nothing + const player = this.audioQueue[audioKey]; + if (!player) return; + player.shouldCorrectPitch = true; + player.setPlaybackRate(value, 'medium'); + } catch (error) { + log(error); } } - onPlaybackStatusUpdate(audioKey: string, status: AVPlaybackStatus, callback: (status: AVPlaybackStatus) => void) { + onPlaybackStatusUpdate(audioKey: string, status: AudioStatus, callback: (status: AudioStatus) => void): void { if (status) { callback(status); this.onEnd(audioKey, status); } } - setOnPlaybackStatusUpdate(audioKey: string, callback: (status: AVPlaybackStatus) => void): void { - return this.audioQueue[audioKey]?.setOnPlaybackStatusUpdate(status => - this.onPlaybackStatusUpdate(audioKey, status, callback) - ); + setOnPlaybackStatusUpdate(audioKey: string, callback: (status: AudioStatus) => void): void { + this.audioCallbacks[audioKey] = callback; + this.audioSubscriptions[audioKey]?.(); + const sub = this.audioQueue[audioKey]?.addListener('playbackStatusUpdate', status => { + this.onPlaybackStatusUpdate(audioKey, status, callback); + }); + if (sub) this.audioSubscriptions[audioKey] = () => sub.remove?.(); } - async onEnd(audioKey: string, status: AVPlaybackStatus) { + async onEnd(audioKey: string, status: AudioStatus): Promise { + if (!this.audioQueue[audioKey]) { + return; + } + if (status.isLoaded && status.didJustFinish) { try { - await this.audioQueue[audioKey]?.stopAsync(); + this.audioSubscriptions[audioKey]?.(); + delete this.audioSubscriptions[audioKey]; + this.audioQueue[audioKey].release(); + delete this.audioQueue[audioKey]; + this.audioPositions[audioKey] = 0; this.audioPlaying = ''; emitter.emit('audioFocused', ''); await this.playNextAudioInSequence(audioKey); - } catch { - // do nothing + } catch (error) { + log(error); } } } @@ -127,7 +187,6 @@ class AudioManagerClass { } else { whereClause.push(Q.where('rid', rid), Q.where('tmid', null)); } - const [message] = await db .get('messages') .query(...whereClause) @@ -143,7 +202,7 @@ class AudioManagerClass { const nextMessage = await this.getNextAudioMessage(msgId, rid); if (nextMessage && nextMessage.attachments) { const nextAudioInSeqKey = this.getNextAudioKey({ message: nextMessage, rid }); - if (nextAudioInSeqKey && this.audioQueue?.[nextAudioInSeqKey] && this.audiosRendered.has(nextAudioInSeqKey)) { + if (nextAudioInSeqKey && this.audioUris[nextAudioInSeqKey] && this.audiosRendered.has(nextAudioInSeqKey)) { await this.playAudio(nextAudioInSeqKey); } } @@ -153,20 +212,23 @@ class AudioManagerClass { if (!rid) { return; } - const regExp = new RegExp(rid); - const roomAudioKeysLoaded = Object.keys(this.audioQueue).filter(audioKey => regExp.test(audioKey)); + const roomAudioKeysLoaded = Object.keys(this.audioMeta).filter(audioKey => this.audioMeta[audioKey].rid === rid); const roomAudiosLoaded = roomAudioKeysLoaded.map(key => this.audioQueue[key]); try { - await Promise.all( - roomAudiosLoaded.map(async audio => { - await audio?.stopAsync(); - await audio?.unloadAsync(); - }) - ); - } catch { - // Do nothing - } - roomAudioKeysLoaded.forEach(key => delete this.audioQueue[key]); + await Promise.all(roomAudiosLoaded.map(audio => audio?.release())); + } catch (error) { + log(error); + } + roomAudioKeysLoaded.forEach(key => { + this.audioSubscriptions[key]?.(); + delete this.audioSubscriptions[key]; + delete this.audioCallbacks[key]; + delete this.audioQueue[key]; + delete this.audioUris[key]; + delete this.audioPositions[key]; + delete this.audioRates[key]; + delete this.audioMeta[key]; + }); this.audioPlaying = ''; } } diff --git a/app/lib/native/NativeVoip.ts b/app/lib/native/NativeVoip.ts index 4aa6636b53d..e79e64861df 100644 --- a/app/lib/native/NativeVoip.ts +++ b/app/lib/native/NativeVoip.ts @@ -74,7 +74,7 @@ export interface Spec extends TurboModule { /** * Plays the outgoing-call ringback (dialtone) on the voice-communication audio path so it * follows the active comm device (earpiece/speaker/BT) instead of the music stream. - * Idempotent: a second call while playing is a no-op. iOS no-op (CallKit + AVAudioSession handle routing for expo-av). + * Idempotent: a second call while playing is a no-op. iOS no-op (CallKit + AVAudioSession handle routing for expo-audio). */ startRingback(): Promise; diff --git a/app/lib/services/voip/playCallEndedSound.test.ts b/app/lib/services/voip/playCallEndedSound.test.ts index 577fefa1697..cbaae6f71cc 100644 --- a/app/lib/services/voip/playCallEndedSound.test.ts +++ b/app/lib/services/voip/playCallEndedSound.test.ts @@ -6,156 +6,140 @@ jest.mock('~/lib/methods/helpers/log', () => ({ default: (...args: unknown[]) => mockLog(...args) })); -// Mock expo-av at the test boundary, matching the style used in the VoIP services directory. -const mockLoadAsync = jest.fn(() => Promise.resolve()); -const mockPlayAsync = jest.fn(() => Promise.resolve()); -const mockUnloadAsync = jest.fn(() => Promise.resolve()); -type MockPlaybackStatus = { isLoaded: boolean; didJustFinish?: boolean }; -let capturedPlaybackStatusUpdate: ((status: MockPlaybackStatus) => void) | null = null; - -const mockSetOnPlaybackStatusUpdate = jest.fn((cb: (status: MockPlaybackStatus) => void) => { - capturedPlaybackStatusUpdate = cb; -}); +// Access the global mock from jest.setup.js - it provides a consistent mock player +// eslint-disable-next-line @typescript-eslint/no-var-requires +const expoAudio = require('expo-audio'); -const mockSoundInstance = { - loadAsync: mockLoadAsync, - playAsync: mockPlayAsync, - unloadAsync: mockUnloadAsync, - setOnPlaybackStatusUpdate: mockSetOnPlaybackStatusUpdate -}; - -jest.mock('expo-av', () => ({ - Audio: { - Sound: jest.fn(() => mockSoundInstance) - } -})); +const mockCreateAudioPlayer = expoAudio.createAudioPlayer as jest.Mock; + +const getActualPlayer = () => mockCreateAudioPlayer.mock.results[0].value; beforeEach(() => { jest.clearAllMocks(); - capturedPlaybackStatusUpdate = null; resetPlayCallEndedSoundForTesting(); mockLog.mockClear(); + mockCreateAudioPlayer.mockClear(); }); describe('playCallEndedSound', () => { - it('triggers playback when invoked', async () => { - await playCallEndedSound(); + it('creates a player and starts playback when invoked', () => { + playCallEndedSound(); - expect(mockLoadAsync).toHaveBeenCalledTimes(1); - expect(mockPlayAsync).toHaveBeenCalledTimes(1); + expect(mockCreateAudioPlayer).toHaveBeenCalledTimes(1); + expect(getActualPlayer().play).toHaveBeenCalledTimes(1); }); - it('registers a playback status callback', async () => { - await playCallEndedSound(); + it('registers a playback status listener', () => { + playCallEndedSound(); - expect(mockSetOnPlaybackStatusUpdate).toHaveBeenCalledTimes(1); + expect(getActualPlayer().addListener).toHaveBeenCalledWith('playbackStatusUpdate', expect.any(Function)); }); - it('unloads the player when didJustFinish fires', async () => { - await playCallEndedSound(); + it('removes the player when didJustFinish fires', () => { + playCallEndedSound(); + + const actualPlayer = getActualPlayer(); + const statusCallback = actualPlayer.addListener.mock.calls.find( + ([event]: [string, unknown]) => event === 'playbackStatusUpdate' + )?.[1]; + expect(statusCallback).toBeDefined(); - expect(capturedPlaybackStatusUpdate).not.toBeNull(); - capturedPlaybackStatusUpdate!({ isLoaded: true, didJustFinish: true }); + statusCallback({ isLoaded: true, didJustFinish: true }); - expect(mockUnloadAsync).toHaveBeenCalledTimes(1); + expect(actualPlayer.release).toHaveBeenCalledTimes(1); }); - it('does not unload when didJustFinish is false', async () => { - await playCallEndedSound(); + it('does not remove when didJustFinish is false', () => { + playCallEndedSound(); - capturedPlaybackStatusUpdate!({ isLoaded: true, didJustFinish: false }); + const actualPlayer = getActualPlayer(); + const addListenerCalls = actualPlayer.addListener.mock.calls; + const statusCallback = addListenerCalls.find(([event]: [string, unknown]) => event === 'playbackStatusUpdate')?.[1]; + statusCallback?.({ isLoaded: true, didJustFinish: false }); - expect(mockUnloadAsync).not.toHaveBeenCalled(); + expect(actualPlayer.release).not.toHaveBeenCalled(); }); - it('double-invocation while first is in flight does not produce overlapping playback', async () => { - // First invocation — loadAsync resolves immediately in mock but we can test - // the coalescing: a second call while the first play is underway must not call - // loadAsync/playAsync a second time. - let resolveLoad!: () => void; - mockLoadAsync.mockImplementationOnce( - () => - new Promise(res => { - resolveLoad = res; - }) - ); - - // Start first invocation (hangs at loadAsync) - const first = playCallEndedSound(); + it('double-invocation while first is in flight does not produce overlapping playback', () => { + // Start first invocation + playCallEndedSound(); // Second invocation while first is still loading — must be a no-op - const second = playCallEndedSound(); + playCallEndedSound(); - // Resolve the first load - resolveLoad(); - await first; - await second; - - // loadAsync and playAsync must each have been called exactly once - expect(mockLoadAsync).toHaveBeenCalledTimes(1); - expect(mockPlayAsync).toHaveBeenCalledTimes(1); + // createAudioPlayer and play must each have been called exactly once (coalescing) + expect(mockCreateAudioPlayer).toHaveBeenCalledTimes(1); + expect(getActualPlayer().play).toHaveBeenCalledTimes(1); }); - it('allows a new invocation after the previous cue completes', async () => { - await playCallEndedSound(); + it('allows a new invocation after the previous cue completes', () => { + playCallEndedSound(); + // Simulate completion - capturedPlaybackStatusUpdate!({ isLoaded: true, didJustFinish: true }); + const actualPlayer = getActualPlayer(); + const addListenerCalls = actualPlayer.addListener.mock.calls; + const statusCallback = addListenerCalls.find(([event]: [string, unknown]) => event === 'playbackStatusUpdate')?.[1]; + statusCallback?.({ isLoaded: true, didJustFinish: true }); // Reset mocks to count fresh calls - mockLoadAsync.mockClear(); - mockPlayAsync.mockClear(); - mockSetOnPlaybackStatusUpdate.mockClear(); - capturedPlaybackStatusUpdate = null; + mockCreateAudioPlayer.mockClear(); - await playCallEndedSound(); + playCallEndedSound(); - expect(mockLoadAsync).toHaveBeenCalledTimes(1); - expect(mockPlayAsync).toHaveBeenCalledTimes(1); + expect(mockCreateAudioPlayer).toHaveBeenCalledTimes(1); + expect(getActualPlayer().play).toHaveBeenCalledTimes(1); }); - it('watchdog releases the lock if didJustFinish never fires', async () => { + it('watchdog releases the lock if didJustFinish never fires', () => { jest.useFakeTimers(); try { - await playCallEndedSound(); + playCallEndedSound(); + + const actualPlayer = getActualPlayer(); // didJustFinish never fires; lock would be permanent without the watchdog. - expect(mockUnloadAsync).not.toHaveBeenCalled(); + expect(actualPlayer.release).not.toHaveBeenCalled(); jest.advanceTimersByTime(5000); - // Watchdog forces unload + lock release. - expect(mockUnloadAsync).toHaveBeenCalledTimes(1); + // Watchdog forces remove + lock release. + expect(actualPlayer.release).toHaveBeenCalledTimes(1); // Subsequent invocation is allowed (lock cleared). - mockLoadAsync.mockClear(); - mockPlayAsync.mockClear(); - await playCallEndedSound(); - expect(mockLoadAsync).toHaveBeenCalledTimes(1); - expect(mockPlayAsync).toHaveBeenCalledTimes(1); + mockCreateAudioPlayer.mockClear(); + playCallEndedSound(); + expect(mockCreateAudioPlayer).toHaveBeenCalledTimes(1); + expect(getActualPlayer().play).toHaveBeenCalledTimes(1); } finally { jest.useRealTimers(); } }); - it('didJustFinish clears the watchdog so it does not double-unload', async () => { + it('didJustFinish clears the watchdog so it does not double-remove', () => { jest.useFakeTimers(); try { - await playCallEndedSound(); - capturedPlaybackStatusUpdate!({ isLoaded: true, didJustFinish: true }); - expect(mockUnloadAsync).toHaveBeenCalledTimes(1); + playCallEndedSound(); + + const actualPlayer = getActualPlayer(); + const addListenerCalls = actualPlayer.addListener.mock.calls; + const statusCallback = addListenerCalls.find(([event]: [string, unknown]) => event === 'playbackStatusUpdate')?.[1]; + statusCallback?.({ isLoaded: true, didJustFinish: true }); + expect(actualPlayer.release).toHaveBeenCalledTimes(1); // Watchdog must not fire after natural completion. jest.advanceTimersByTime(10000); - expect(mockUnloadAsync).toHaveBeenCalledTimes(1); + expect(actualPlayer.release).toHaveBeenCalledTimes(1); } finally { jest.useRealTimers(); } }); - it('calls log when loadAsync throws', async () => { + it('calls log when createAudioPlayer throws', () => { const err = new Error('E_LOAD_FAILED'); - mockLoadAsync.mockRejectedValueOnce(err); + mockCreateAudioPlayer.mockImplementationOnce(() => { + throw err; + }); - await playCallEndedSound(); + playCallEndedSound(); expect(mockLog).toHaveBeenCalledWith(err); }); diff --git a/app/lib/services/voip/playCallEndedSound.ts b/app/lib/services/voip/playCallEndedSound.ts index a7625e8df6d..c1d6276ca7d 100644 --- a/app/lib/services/voip/playCallEndedSound.ts +++ b/app/lib/services/voip/playCallEndedSound.ts @@ -1,10 +1,11 @@ -import { Audio } from 'expo-av'; +import { createAudioPlayer } from 'expo-audio'; import log from '~/lib/methods/helpers/log'; // Module-scoped state so it survives React tree unmounts and is safe to call // fire-and-forget from any termination path. let isPlaying = false; +let currentPlayer: ReturnType | null = null; let watchdogTimer: ReturnType | null = null; // Cue is ~1.5s; 5s is generous slack before we assume the player is wedged. @@ -12,6 +13,7 @@ const WATCHDOG_MS = 5000; function releaseLock(): void { isPlaying = false; + currentPlayer = null; if (watchdogTimer != null) { clearTimeout(watchdogTimer); watchdogTimer = null; @@ -28,7 +30,7 @@ function releaseLock(): void { * the player or the audio session is interrupted indefinitely), so future * cues aren't permanently blocked. */ -export async function playCallEndedSound(): Promise { +export function playCallEndedSound(): void { if (isPlaying) { return; } @@ -36,26 +38,22 @@ export async function playCallEndedSound(): Promise { isPlaying = true; try { - const sound = new Audio.Sound(); + currentPlayer = createAudioPlayer(require('~/containers/Ringer/call-ended.mp3')); - sound.setOnPlaybackStatusUpdate(status => { + currentPlayer.addListener('playbackStatusUpdate', status => { if (status.isLoaded && status.didJustFinish) { + const player = currentPlayer; releaseLock(); - sound.unloadAsync().catch(() => { - // best-effort unload - }); + player?.release(); } }); - // eslint-disable-next-line @typescript-eslint/no-require-imports - await sound.loadAsync(require('~/containers/Ringer/call-ended.mp3')); - await sound.playAsync(); + currentPlayer.play(); watchdogTimer = setTimeout(() => { + const player = currentPlayer; releaseLock(); - sound.unloadAsync().catch(() => { - // best-effort unload - }); + player?.release(); }, WATCHDOG_MS); } catch (error) { // Never throw — this is fire-and-forget diff --git a/app/sagas/__tests__/deepLinking.test.ts b/app/sagas/__tests__/deepLinking.test.ts index dfbcd55c3b7..be257131f23 100644 --- a/app/sagas/__tests__/deepLinking.test.ts +++ b/app/sagas/__tests__/deepLinking.test.ts @@ -78,7 +78,7 @@ jest.mock('i18n-js', () => ({ default: { t: (k: string) => k } })); -jest.mock('../../lib/methods/helpers/info', () => ({ +jest.mock('~/lib/methods/helpers/info', () => ({ showConfirmationAlert: jest.fn(({ onPress }: { onPress: () => void }) => onPress()) })); diff --git a/app/views/AttachmentView.test.tsx b/app/views/AttachmentView.test.tsx index 701b0cb9375..d44fed8c0d1 100644 --- a/app/views/AttachmentView.test.tsx +++ b/app/views/AttachmentView.test.tsx @@ -18,11 +18,6 @@ jest.mock('react-native-safe-area-context', () => ({ useSafeAreaInsets: () => ({ top: 0, bottom: 0, left: 0, right: 0 }) })); -jest.mock('expo-av', () => ({ - ResizeMode: { CONTAIN: 'contain' }, - Video: () => null -})); - jest.mock('expo-file-system/legacy', () => ({ deleteAsync: jest.fn() })); diff --git a/app/views/AttachmentView.tsx b/app/views/AttachmentView.tsx index 52e3368c460..5c821df148e 100644 --- a/app/views/AttachmentView.tsx +++ b/app/views/AttachmentView.tsx @@ -1,7 +1,6 @@ import { CameraRoll } from '@react-native-camera-roll/camera-roll'; import { useHeaderHeight } from '@react-navigation/elements'; -import { ResizeMode, Video } from 'expo-av'; -import { useCallback, useLayoutEffect, useRef, useState, type Dispatch, type SetStateAction, type ReactElement } from 'react'; +import { useCallback, useLayoutEffect, useState, type Dispatch, type SetStateAction, type ReactElement } from 'react'; import { PermissionsAndroid, useWindowDimensions, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { shallowEqual } from 'react-redux'; @@ -12,13 +11,14 @@ import RCActivityIndicator from '../containers/ActivityIndicator'; import AltTextLabel from '../containers/AltTextLabel'; import * as HeaderButton from '../containers/Header/components/HeaderButton'; import { ImageViewer } from '../containers/ImageViewer'; +import VideoPlayer from '../containers/VideoPlayer'; import { LISTENER } from '../containers/Toast'; import { type IAttachment } from '../definitions'; import I18n from '../i18n'; import { useAltTextSupported } from '../lib/hooks/useAltTextSupported'; import { useAppSelector } from '../lib/hooks/useAppSelector'; import { useAppNavigation, useAppRoute } from '../lib/hooks/navigation'; -import { encodeAttachmentUrl, formatAttachmentUrl, isAndroid, showErrorAlert } from '../lib/methods/helpers'; +import { encodeAttachmentUrl, formatAttachmentUrl, isAndroid } from '../lib/methods/helpers'; import { fileDownload } from '../lib/methods/helpers/fileDownload'; import EventEmitter from '../lib/methods/helpers/events'; import { getUserSelector } from '../selectors/login'; @@ -35,11 +35,9 @@ const RenderContent = ({ attachment: IAttachment; altText?: string; }) => { - const videoRef = useRef ); } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 65503ee5460..a6270f6acc9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -33,9 +33,6 @@ PODS: - DoubleConversion (1.1.6) - EXApplication (7.0.8): - ExpoModulesCore - - EXAV (16.0.8): - - ExpoModulesCore - - ReactCommon/turbomodule/core - EXConstants (18.0.12): - ExpoModulesCore - EXNotifications (0.32.15): @@ -75,6 +72,8 @@ PODS: - ExpoModulesCore - ExpoAsset (12.0.12): - ExpoModulesCore + - ExpoAudio (0.4.9): + - ExpoModulesCore - ExpoCamera (17.0.10): - ExpoModulesCore - ZXingObjC/OneD @@ -133,6 +132,8 @@ PODS: - ExpoModulesCore - ExpoSystemUI (6.0.9): - ExpoModulesCore + - ExpoVideo (3.0.16): + - ExpoModulesCore - ExpoVideoThumbnails (10.0.8): - ExpoModulesCore - ExpoWebBrowser (15.0.10): @@ -3570,12 +3571,12 @@ DEPENDENCIES: - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EXApplication (from `../node_modules/expo-application/ios`) - - EXAV (from `../node_modules/expo-av/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - EXNotifications (from `../node_modules/expo-notifications/ios`) - Expo (from `../node_modules/expo`) - ExpoAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`) - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoAudio (from `../node_modules/expo-audio/ios`) - ExpoCamera (from `../node_modules/expo-camera/ios`) - ExpoDevice (from `../node_modules/expo-device/ios`) - ExpoDocumentPicker (from `../node_modules/expo-document-picker/ios`) @@ -3588,6 +3589,7 @@ DEPENDENCIES: - ExpoModulesCore (from `../node_modules/expo-modules-core`) - "ExpoQuickLook (from `../node_modules/@magrinj/expo-quick-look/ios`)" - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) + - ExpoVideo (from `../node_modules/expo-video/ios`) - ExpoVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`) - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) @@ -3741,8 +3743,6 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXApplication: :path: "../node_modules/expo-application/ios" - EXAV: - :path: "../node_modules/expo-av/ios" EXConstants: :path: "../node_modules/expo-constants/ios" EXNotifications: @@ -3753,6 +3753,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-apple-authentication/ios" ExpoAsset: :path: "../node_modules/expo-asset/ios" + ExpoAudio: + :path: "../node_modules/expo-audio/ios" ExpoCamera: :path: "../node_modules/expo-camera/ios" ExpoDevice: @@ -3777,6 +3779,8 @@ EXTERNAL SOURCES: :path: "../node_modules/@magrinj/expo-quick-look/ios" ExpoSystemUI: :path: "../node_modules/expo-system-ui/ios" + ExpoVideo: + :path: "../node_modules/expo-video/ios" ExpoVideoThumbnails: :path: "../node_modules/expo-video-thumbnails/ios" ExpoWebBrowser: @@ -3997,12 +4001,12 @@ SPEC CHECKSUMS: BVLinearGradient: 7815a70ab485b7b155186dd0cc836363e0288cad DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXApplication: 1e98d4b1dccdf30627f92917f4b2c5a53c330e5f - EXAV: b60fcf142fae6684d295bc28cd7cfcb3335570ea EXConstants: 805f35b1b295c542ca6acce836f21a1f9ee104d5 EXNotifications: 983f04ad4ad879b181179e326bf220541e478386 Expo: 6118272de314ed3d4bc74de3b1229b8f5b324ef1 ExpoAppleAuthentication: 9413ae9a5e631a424cc04c1b13b0694dbab7d594 ExpoAsset: f867e55ceb428aab99e1e8c082b5aee7c159ea18 + ExpoAudio: d98f922b17a945cd33f8462d086278dbd810c537 ExpoCamera: 6a326deb45ba840749652e4c15198317aa78497e ExpoDevice: 6327c3c200816795708885adf540d26ecab83d1a ExpoDocumentPicker: 7cd9e71a0f66fb19eb0a586d6f26eee1284692e0 @@ -4015,6 +4019,7 @@ SPEC CHECKSUMS: ExpoModulesCore: 91a57f1d109cf53fe58d44fcf6b68a777561549a ExpoQuickLook: 7ac65cd559a74619ea41e13df20e9d7a61e79ea6 ExpoSystemUI: 2ad325f361a2fcd96a464e8574e19935c461c9cc + ExpoVideo: 8d9e8a1acd0c4c210e538b4355e34ae8ff5e04f7 ExpoVideoThumbnails: 503a79271416c8723f04b55ea4737282513ebe4f ExpoWebBrowser: 17b064c621789e41d4816c95c93f429b84971f52 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 diff --git a/jest.setup.js b/jest.setup.js index 4243cbabb12..69aa7056068 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -90,121 +90,54 @@ jest.mock('expo-font', () => ({ __esModule: true })); -jest.mock('expo-av', () => { - const InterruptionModeAndroid = { - DoNotMix: 1, - DuckOthers: 2 - }; - const InterruptionModeIOS = { - DoNotMix: 1, - DuckOthers: 2, - MixWithOthers: 3 +jest.mock('expo-audio', () => { + const recorderState = { + canRecord: true, + isRecording: false, + durationMillis: 0, + mediaServicesDidReset: false, + url: null }; return { - Audio: { - getPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted', granted: true, canAskAgain: true })), - requestPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted', granted: true, canAskAgain: true })), - setAudioModeAsync: jest.fn(() => Promise.resolve()), - Recording: jest.fn(() => ({ - prepareToRecordAsync: jest.fn(() => Promise.resolve()), - startAsync: jest.fn(() => Promise.resolve()), - stopAndUnloadAsync: jest.fn(() => Promise.resolve()), - setOnRecordingStatusUpdate: jest.fn(), - getStatusAsync: jest.fn(() => Promise.resolve()) - })), - Sound: { - createAsync: jest.fn(() => - Promise.resolve({ - sound: { - setOnPlaybackStatusUpdate: jest.fn(), - playAsync: jest.fn(() => Promise.resolve()), - pauseAsync: jest.fn(() => Promise.resolve()), - stopAsync: jest.fn(() => Promise.resolve()), - unloadAsync: jest.fn(() => Promise.resolve()), - getStatusAsync: jest.fn(() => Promise.resolve()), - setPositionAsync: jest.fn(() => Promise.resolve()) - }, - status: {} - }) - ), - create: jest.fn(() => ({ - setOnPlaybackStatusUpdate: jest.fn(), - playAsync: jest.fn(() => Promise.resolve()), - pauseAsync: jest.fn(() => Promise.resolve()), - stopAsync: jest.fn(() => Promise.resolve()), - unloadAsync: jest.fn(() => Promise.resolve()), - getStatusAsync: jest.fn(() => Promise.resolve()), - setPositionAsync: jest.fn(() => Promise.resolve()), - loadAsync: jest.fn(() => Promise.resolve()) - })) - }, - RecordingStatus: { - StatusDict: {} - }, - AudioStatus: { - StatusDict: {} - }, - AndroidOutputFormat: { - AAC_ADTS: 0 - }, - AndroidAudioEncoder: { - AAC: 0 - }, - IOSAudioQuality: { - LOW: 0, - MEDIUM: 1, - HIGH: 2 - }, - IOSOutputFormat: { - MPEG4AAC: 0 - }, - RecordingOptionsPresets: { - LOW_QUALITY: { - android: { - extension: '.aac', - outputFormat: 0, - audioEncoder: 0, - sampleRate: 16000, - numberOfChannels: 1, - bitRate: 64000 - }, - ios: { - extension: '.aac', - audioQuality: 1, - outputFormat: 0, - sampleRate: 16000, - numberOfChannels: 1, - bitRate: 64000 - }, - web: {} - }, - HIGH_QUALITY: { - android: { - extension: '.aac', - outputFormat: 0, - audioEncoder: 0, - sampleRate: 48000, - numberOfChannels: 2, - bitRate: 128000 - }, - ios: { - extension: '.aac', - audioQuality: 1, - outputFormat: 0, - sampleRate: 48000, - numberOfChannels: 2, - bitRate: 128000 - }, - web: {} - } - } - }, - InterruptionModeAndroid, - InterruptionModeIOS + PermissionStatus: { GRANTED: 'granted', DENIED: 'denied', UNDETERMINED: 'undetermined' }, + AudioQuality: { MEDIUM: 0x40 }, + IOSOutputFormat: { MPEG4AAC: 'aac ' }, + createAudioPlayer: jest.fn(() => ({ + play: jest.fn(), + pause: jest.fn(), + setPlaybackRate: jest.fn(), + seekTo: jest.fn(() => Promise.resolve()), + release: jest.fn(), + addListener: jest.fn(() => ({ remove: jest.fn() })), + playing: false, + loop: false, + isLoaded: false, + shouldCorrectPitch: false + })), + setAudioModeAsync: jest.fn(() => Promise.resolve()), + requestRecordingPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted', granted: true, canAskAgain: true })), + getRecordingPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted', granted: true, canAskAgain: true })), + useAudioRecorder: jest.fn(() => ({ + uri: null, + stop: jest.fn(() => Promise.resolve()), + record: jest.fn(), + prepareToRecordAsync: jest.fn(() => Promise.resolve()), + getStatus: jest.fn(() => ({ ...recorderState })) + })), + useAudioRecorderState: jest.fn(() => ({ ...recorderState })) }; }); +jest.mock('expo-video', () => ({ + useVideoPlayer: jest.fn(() => ({ + play: jest.fn(), + pause: jest.fn(), + addListener: jest.fn(() => ({ remove: jest.fn() })) + })), + VideoView: jest.fn(() => null) +})); + jest.mock('./app/lib/methods/search', () => ({ search: () => [] })); diff --git a/package.json b/package.json index b8b3ac24c10..9a4243c12a2 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "eslint-import-resolver-typescript": "^4.4.4", "expo": "^54.0.0", "expo-apple-authentication": "~8.0.8", - "expo-av": "~16.0.8", + "expo-audio": "~0.4.9", "expo-camera": "~17.0.10", "expo-device": "^8.0.10", "expo-document-picker": "~14.0.8", @@ -77,6 +77,7 @@ "expo-notifications": "~0.32.15", "expo-status-bar": "~3.0.9", "expo-system-ui": "~6.0.9", + "expo-video": "~3.0.16", "expo-video-thumbnails": "~10.0.8", "expo-web-browser": "~15.0.10", "hoist-non-react-statics": "3.3.2", diff --git a/patches/expo-audio+0.4.9.patch b/patches/expo-audio+0.4.9.patch new file mode 100644 index 00000000000..7b6f7a2961e --- /dev/null +++ b/patches/expo-audio+0.4.9.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt b/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt +index c9fd366..5c74acf 100644 +--- a/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt ++++ b/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt +@@ -26,6 +26,7 @@ import androidx.media3.datasource.okhttp.OkHttpDataSource + import androidx.media3.exoplayer.dash.DashMediaSource + import androidx.media3.exoplayer.hls.HlsMediaSource + import androidx.media3.exoplayer.smoothstreaming.SsMediaSource ++import androidx.media3.extractor.DefaultExtractorsFactory + import androidx.media3.exoplayer.source.MediaSource + import androidx.media3.exoplayer.source.ProgressiveMediaSource + import expo.modules.interfaces.permissions.Permissions +@@ -553,7 +554,10 @@ class AudioModule : Module() { + CONTENT_TYPE_SS -> SsMediaSource.Factory(factory) + CONTENT_TYPE_DASH -> DashMediaSource.Factory(factory) + CONTENT_TYPE_HLS -> HlsMediaSource.Factory(factory) +- CONTENT_TYPE_OTHER -> ProgressiveMediaSource.Factory(factory) ++ CONTENT_TYPE_OTHER -> ProgressiveMediaSource.Factory( ++ factory, ++ DefaultExtractorsFactory().setConstantBitrateSeekingEnabled(true) ++ ) + else -> throw IllegalStateException("Unsupported type: $type") + }.createMediaSource(mediaItem) + } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b122ee8a96..2153d88cd26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,9 +129,9 @@ importers: expo-apple-authentication: specifier: ~8.0.8 version: 8.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - expo-av: - specifier: ~16.0.8 - version: 16.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-audio: + specifier: ~0.4.9 + version: 0.4.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-camera: specifier: ~17.0.10 version: 17.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -165,6 +165,9 @@ importers: expo-system-ui: specifier: ~6.0.9 version: 6.0.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + expo-video: + specifier: ~3.0.16 + version: 3.0.16(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-video-thumbnails: specifier: ~10.0.8 version: 10.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) @@ -4473,16 +4476,12 @@ packages: react: '*' react-native: '*' - expo-av@16.0.8: - resolution: {integrity: sha512-cmVPftGR/ca7XBgs7R6ky36lF3OC0/MM/lpgX/yXqfv0jASTsh7AYX9JxHCwFmF+Z6JEB1vne9FDx4GiLcGreQ==} + expo-audio@0.4.9: + resolution: {integrity: sha512-J4mMYEt2mqRqqwmSsXFylMGlrNWa+MbCzGl1IZBs+smvPAMJ3Ni8fNplzCQ0I9RnRzygKhRwJNpnAVL+n4MuyA==} peerDependencies: expo: '*' react: '*' react-native: '*' - react-native-web: '*' - peerDependenciesMeta: - react-native-web: - optional: true expo-camera@17.0.10: resolution: {integrity: sha512-w1RBw83mAGVk4BPPwNrCZyFop0VLiVSRE3c2V9onWbdFwonpRhzmB4drygG8YOUTl1H3wQvALJHyMPTbgsK1Jg==} @@ -4593,6 +4592,13 @@ packages: peerDependencies: expo: '*' + expo-video@3.0.16: + resolution: {integrity: sha512-H1HlxcHGomZItqisGfW3YL/G9BHtNBfVSimDJcLuyxyU87wFnV8loO9tCjuhufkfh/aTa2sW5BYAjLjg9DvnBQ==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + expo-web-browser@15.0.10: resolution: {integrity: sha512-fvDhW4bhmXAeWFNFiInmsGCK83PAqAcQaFyp/3pE/jbdKmFKoRCWr46uZGIfN4msLK/OODhaQ/+US7GSJNDHJg==} peerDependencies: @@ -12561,7 +12567,7 @@ snapshots: transitivePeerDependencies: - supports-color - expo-av@16.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-audio@0.4.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react: 19.1.0 @@ -12674,6 +12680,12 @@ snapshots: dependencies: expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-video@3.0.16(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + dependencies: + expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo-web-browser@15.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): dependencies: expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) From 6978e70154bb9042f0cee686dbbc07652c5534ea Mon Sep 17 00:00:00 2001 From: OtavioStasiak Date: Tue, 15 Sep 2026 15:30:20 -0300 Subject: [PATCH 06/55] chore: bump react-native-mmkv and react-native-nitro-modules --- android/app/build.gradle | 2 +- ios/Podfile.lock | 22 +++++++++++----------- ios/RocketChat.xcodeproj/project.pbxproj | 4 ++++ metro.config.js | 1 - package.json | 4 ++-- pnpm-lock.yaml | 22 +++++++++++----------- 6 files changed, 29 insertions(+), 26 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index d282923fc23..708ee991747 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -142,7 +142,7 @@ dependencies { implementation project(':watermelondb-jsi') implementation "com.google.code.gson:gson:2.8.9" - implementation "io.github.zhongwuzw:mmkv:2.2.4" + implementation "io.github.zhongwuzw:mmkv:2.4.1" implementation "com.github.bumptech.glide:glide:${rootProject.ext.glideVersion}" implementation 'com.facebook.soloader:soloader:0.10.4' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a6270f6acc9..100f970b291 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -248,9 +248,9 @@ PODS: - libwebp/sharpyuv (1.5.0) - libwebp/webp (1.5.0): - libwebp/sharpyuv - - MMKV (2.2.4): - - MMKVCore (~> 2.2.4) - - MMKVCore (2.2.4) + - MMKV (2.4.0): + - MMKVCore (~> 2.4.0) + - MMKVCore (2.4.0) - MobileCrypto (0.4.0): - boost - DoubleConversion @@ -284,14 +284,14 @@ PODS: - nanopb/encode (= 3.30910.0) - nanopb/decode (3.30910.0) - nanopb/encode (3.30910.0) - - NitroMmkv (4.1.2): + - NitroMmkv (4.3.2): - boost - DoubleConversion - fast_float - fmt - glog - hermes-engine - - MMKVCore (= 2.2.4) + - MMKVCore (= 2.4.0) - NitroModules - RCT-Folly - RCT-Folly/Fabric @@ -315,7 +315,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - NitroModules (0.33.9): + - NitroModules (0.37.1): - boost - DoubleConversion - fast_float @@ -4043,12 +4043,12 @@ SPEC CHECKSUMS: libavif: 5f8e715bea24debec477006f21ef9e95432e254d libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - MMKV: 1a8e7dbce7f9cad02c52e1b1091d07bd843aefaf - MMKVCore: f2dd4c9befea04277a55e84e7812f930537993df + MMKV: 86859fdfa2b0b21db1fd6e48788474a6416a2c77 + MMKVCore: 3d16ce9f7d411e135020915fde98a056859a1efa MobileCrypto: cbe4be11a33b5888e77861de9346fa5d3fccc8ac nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - NitroMmkv: 4a2d747ce97a4ae740b3cb3a3853366813faf831 - NitroModules: 18e41c298d86fc753fc754969fa9f84044e70711 + NitroMmkv: 5d6c3a5cca0e47be9a4dd3f66262dbad0799c087 + NitroModules: f2a165630c12aed5793d6b42b9002c6a649ea04e PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 @@ -4122,7 +4122,7 @@ SPEC CHECKSUMS: React-timing: c39eeb992274aeaeb9f4666dc97a36a31d33fe94 React-utils: 2f9ba0088251788ad66aa1855ff99ed2424024d2 ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 - ReactCodegen: 7fadc30654a54b3a0d62df08f55e2211e25486ee + ReactCodegen: e0a2012cda55dfd0d2e626ba5d11929c9ff5986c ReactCommon: 6d0fa86a4510730da7c72560e0ced14258292ab9 ReactNativeIncallManager: dccd3e7499caa3bb73d3acfedf4fb0360f1a87d5 RNBootSplash: 7fcc9a58ae343aeb1a1dd49f9030832fe432c544 diff --git a/ios/RocketChat.xcodeproj/project.pbxproj b/ios/RocketChat.xcodeproj/project.pbxproj index a37be2d721d..7f2c42f4612 100644 --- a/ios/RocketChat.xcodeproj/project.pbxproj +++ b/ios/RocketChat.xcodeproj/project.pbxproj @@ -1285,6 +1285,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/MMKV/MMKV_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", @@ -1319,6 +1320,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MMKV_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", @@ -1442,6 +1444,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/MMKV/MMKV_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", @@ -1476,6 +1479,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MMKV_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", diff --git a/metro.config.js b/metro.config.js index 5b1d7cb76a9..bd22faf1ff1 100644 --- a/metro.config.js +++ b/metro.config.js @@ -14,7 +14,6 @@ const config = { }, resolver: { // When running E2E tests, prioritize .mock.ts files for app code - // Note: react-native-mmkv's internal mock file is disabled via patch-package sourceExts: process.env.RUNNING_E2E_TESTS === 'true' ? ['mock.ts', ...sourceExts] : sourceExts } }; diff --git a/package.json b/package.json index 9a4243c12a2..7f58059d646 100644 --- a/package.json +++ b/package.json @@ -109,9 +109,9 @@ "react-native-localize": "3.7.0", "react-native-math-view": "3.9.5", "react-native-mime-types": "2.3.0", - "react-native-mmkv": "^4.1.2", + "react-native-mmkv": "^4.3.2", "react-native-modal": "13.0.1", - "react-native-nitro-modules": "^0.33.9", + "react-native-nitro-modules": "^0.37.1", "react-native-notifier": "1.6.1", "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2153d88cd26..4c9f438dcbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -262,14 +262,14 @@ importers: specifier: 2.3.0 version: 2.3.0 react-native-mmkv: - specifier: ^4.1.2 - version: 4.1.2(react-native-nitro-modules@0.33.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ^4.3.2 + version: 4.3.2(react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-modal: specifier: 13.0.1 version: 13.0.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-nitro-modules: - specifier: ^0.33.9 - version: 0.33.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ^0.37.1 + version: 0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-notifier: specifier: 1.6.1 version: 1.6.1(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -6574,8 +6574,8 @@ packages: resolution: {integrity: sha512-9l/kkT1QM0i0xAKkOADkP6jIMhqiS+R/eSKBS/lsUmuMYMqboClyrwTFFZwUcaVIN0SpeH4wOKhYTqCnFgRsEw==} engines: {node: '>= 0.6'} - react-native-mmkv@4.1.2: - resolution: {integrity: sha512-6LHb2DQBXuo96Aues13EugmlWw/HAYuh3KoJoQNrC4JsBwn3J3KiRYAg2mCm5Je0VYq2YsmbgZG7XJwX/WFYZA==} + react-native-mmkv@4.3.2: + resolution: {integrity: sha512-49OAyfkg0/TMWiWELZN6VuVQPZPhizwL4DTmp8b7B1md3dB/s3LH3mGfC3T+lp9W0y/rqxZMEnotLFTIbOAenQ==} peerDependencies: react: '*' react-native: '*' @@ -6587,8 +6587,8 @@ packages: react: '*' react-native: '>=0.65.0' - react-native-nitro-modules@0.33.9: - resolution: {integrity: sha512-BM9C5mCGYYjrc8CDWZZ0anLWU/knH2xaEuFzvzogKTOW6fzgS6mmsCdM3ty+AhImJNSYwK19DLrHaqwnrrwEzw==} + react-native-nitro-modules@0.37.1: + resolution: {integrity: sha512-KpW6EQVQ/bfegpCGxN9Be+ndvsfj56t4IESEvCASu9gWpJa/NDfHpIeIwCOvZQ3eXmLEj6YD4wCLqcC1FJPr2w==} peerDependencies: react: '*' react-native: '*' @@ -15088,11 +15088,11 @@ snapshots: dependencies: mime-db: 1.37.0 - react-native-mmkv@4.1.2(react-native-nitro-modules@0.33.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-mmkv@4.3.2(react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.33.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-nitro-modules: 0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-modal@13.0.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: @@ -15101,7 +15101,7 @@ snapshots: react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) react-native-animatable: 1.3.3 - react-native-nitro-modules@0.33.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) From f96be07ce638ff54515a4b65db253b77956eb250 Mon Sep 17 00:00:00 2001 From: OtavioStasiak Date: Tue, 15 Sep 2026 15:30:55 -0300 Subject: [PATCH 07/55] chore: drop dead react-native-mmkv patch and tighten its jest mock --- __mocks__/react-native-mmkv.js | 275 +++--------------------- app/lib/methods/userPreferences.test.ts | 156 ++++++++++++-- patches/react-native-mmkv+4.1.2.patch | 26 --- 3 files changed, 164 insertions(+), 293 deletions(-) delete mode 100644 patches/react-native-mmkv+4.1.2.patch diff --git a/__mocks__/react-native-mmkv.js b/__mocks__/react-native-mmkv.js index c0e1cedee61..4ca7eabb782 100644 --- a/__mocks__/react-native-mmkv.js +++ b/__mocks__/react-native-mmkv.js @@ -1,27 +1,20 @@ -// Mock for react-native-mmkv -const { useState, useEffect, useRef, useMemo, useCallback } = require('react'); +// Mock for react-native-mmkv. +// Covers only the surface app/lib/methods/userPreferences.ts uses: createMMKV, useMMKVString, +// and the instance methods it calls. Keep this in sync with that module — a method that exists +// here but not on the real MMKV instance makes Jest pass while the device fails. +const { useState, useEffect, useCallback } = require('react'); // Shared storage between instances with the same id const storageInstances = new Map(); -let defaultInstance = null; -export const Mode = { - SINGLE_PROCESS: 'single-process', - MULTI_PROCESS: 'multi-process' -}; - -// MMKV Instance class class MMKVInstance { constructor(config = {}) { - const { id = 'mmkv.default', path, encryptionKey, mode, readOnly } = config; + const { id = 'mmkv.default', path, encryptionKey, mode } = config; this.id = id; this.path = path; this.encryptionKey = encryptionKey; this.mode = mode; - this.isReadOnly = readOnly || false; - this._size = 0; - // Share storage between instances with the same id if (!storageInstances.has(this.id)) { storageInstances.set(this.id, { storage: new Map(), @@ -34,16 +27,8 @@ class MMKVInstance { this.listeners = instance.listeners; } - get size() { - return this._size; - } - set(key, value) { - if (this.isReadOnly) { - throw new Error('Cannot set value in read-only instance'); - } this.storage.set(key, value); - this._size = this.storage.size; this.notifyListeners(key); } @@ -62,22 +47,13 @@ class MMKVInstance { return typeof value === 'boolean' ? value : undefined; } - getBuffer(key) { - const value = this.storage.get(key); - return value instanceof ArrayBuffer ? value : undefined; - } - contains(key) { return this.storage.has(key); } remove(key) { - if (this.isReadOnly) { - throw new Error('Cannot remove value in read-only instance'); - } const deleted = this.storage.delete(key); if (deleted) { - this._size = this.storage.size; this.notifyListeners(key); } return deleted; @@ -88,39 +64,11 @@ class MMKVInstance { } clearAll() { - if (this.isReadOnly) { - throw new Error('Cannot clear read-only instance'); - } this.storage.clear(); - this._size = 0; - // Notify about clear (pass undefined to indicate clear all) + // The real listener contract passes undefined to mean "everything changed" this.notifyListeners(undefined); } - recrypt(key) { - this.encryptionKey = key; - } - - trim() { - // No-op for mock - } - - importAllFrom(other) { - if (this.isReadOnly) { - throw new Error('Cannot import values into read-only instance'); - } - let count = 0; - for (const [key, value] of other.storage.entries()) { - this.storage.set(key, value); - count++; - } - this._size = this.storage.size; - if (count > 0) { - this.notifyListeners(undefined); - } - return count; - } - addOnValueChangedListener(callback) { this.listeners.push(callback); return { @@ -144,202 +92,37 @@ class MMKVInstance { } } -// Factory function to create MMKV instances export function createMMKV(configuration) { return new MMKVInstance(configuration); } -// Get default instance -function getDefaultMMKVInstance() { - if (defaultInstance == null) { - defaultInstance = createMMKV(); - } - return defaultInstance; -} - -// Top-level functions -export function existsMMKV(id) { - return storageInstances.has(id); -} - -export function deleteMMKV(id) { - const instance = storageInstances.get(id); - instance?.storage.clear(); - instance?.listeners.splice(0); - - const deleted = storageInstances.delete(id); - if (defaultInstance?.id === id) { - defaultInstance = null; - } - return deleted; -} +export function useMMKVString(key, instance) { + const [value, setValue] = useState(() => instance.getString(key)); -// Helper function for configuration comparison -function isConfigurationEqual(left, right) { - if (left == null || right == null) { - return left == null && right == null; - } - - return ( - left.encryptionKey === right.encryptionKey && - left.id === right.id && - left.path === right.path && - left.mode === right.mode && - left.readOnly === right.readOnly + const set = useCallback( + v => { + const newValue = typeof v === 'function' ? v(instance.getString(key)) : v; + if (newValue === undefined) { + instance.remove(key); + return; + } + if (typeof newValue !== 'string') { + throw new Error(`MMKV: Type ${typeof newValue} is not supported!`); + } + instance.set(key, newValue); + }, + [key, instance] ); -} - -/** - * Use the default, shared MMKV instance or a custom instance with configuration - */ -export function useMMKV(configuration) { - const configurationRef = useRef(); - const instanceRef = useRef(); - - if (configuration == null) { - return getDefaultMMKVInstance(); - } - - if (!instanceRef.current || !isConfigurationEqual(configurationRef.current, configuration)) { - configurationRef.current = configuration; - instanceRef.current = createMMKV(configuration); - } - - return instanceRef.current; -} - -/** - * Listen for changes in the given MMKV storage instance - */ -export function useMMKVListener(valueChangedListener, instance) { - const ref = useRef(valueChangedListener); - const mmkv = instance ?? getDefaultMMKVInstance(); useEffect(() => { - ref.current = valueChangedListener; - }, [valueChangedListener]); - - useEffect(() => { - const listener = mmkv.addOnValueChangedListener(changedKey => { - ref.current(changedKey); + setValue(instance.getString(key)); + const listener = instance.addOnValueChangedListener(changedKey => { + if (changedKey === undefined || changedKey === key) { + setValue(instance.getString(key)); + } }); return () => listener.remove(); - }, [mmkv]); -} + }, [key, instance]); -/** - * Get a list of all keys that exist in the given MMKV instance - */ -export function useMMKVKeys(instance) { - const mmkv = instance ?? getDefaultMMKVInstance(); - const [allKeys, setKeys] = useState(() => mmkv.getAllKeys()); - - useEffect(() => { - setKeys(mmkv.getAllKeys()); - }, [mmkv]); - - useMMKVListener(key => { - if (key === undefined) { - setKeys(() => mmkv.getAllKeys()); - return; - } - - const currentlyHasKey = allKeys.includes(key); - const hasKey = mmkv.contains(key); - if (hasKey !== currentlyHasKey) { - setKeys(() => mmkv.getAllKeys()); - } - }, mmkv); - - return allKeys; + return [value, set]; } - -/** - * Create a custom MMKV hook for a specific type - */ -function createMMKVHook(getter, onSet) { - return (key, instance) => { - const mmkv = instance ?? getDefaultMMKVInstance(); - - const [bump, setBump] = useState(0); - const value = useMemo(() => getter(mmkv, key), [mmkv, key, bump]); - - const set = useCallback( - v => { - const newValue = typeof v === 'function' ? v(getter(mmkv, key)) : v; - if (onSet) { - onSet(mmkv, key, newValue); - return; - } - switch (typeof newValue) { - case 'number': - case 'string': - case 'boolean': - mmkv.set(key, newValue); - break; - case 'undefined': - mmkv.remove(key); - break; - case 'object': - if (newValue instanceof ArrayBuffer) { - mmkv.set(key, newValue); - break; - } else { - throw new Error(`MMKV: Type object (${newValue}) is not supported!`); - } - default: - throw new Error(`MMKV: Type ${typeof newValue} is not supported!`); - } - }, - [key, mmkv, onSet] - ); - - useEffect(() => { - const listener = mmkv.addOnValueChangedListener(changedKey => { - if (changedKey === undefined || changedKey === key) { - setBump(b => b + 1); - } - }); - return () => listener.remove(); - }, [key, mmkv]); - - return [value, set]; - }; -} - -/** - * Use the string value of the given key from the given MMKV storage instance - */ -export const useMMKVString = createMMKVHook((instance, key) => instance.getString(key)); - -/** - * Use the number value of the given key from the given MMKV storage instance - */ -export const useMMKVNumber = createMMKVHook((instance, key) => instance.getNumber(key)); - -/** - * Use the boolean value of the given key from the given MMKV storage instance - */ -export const useMMKVBoolean = createMMKVHook((instance, key) => instance.getBoolean(key)); - -/** - * Use the object value (JSON stringified) of the given key from the given MMKV storage instance - */ -export const useMMKVObject = createMMKVHook( - (instance, key) => { - const stored = instance.getString(key); - return stored ? JSON.parse(stored) : undefined; - }, - (mmkv, key, value) => { - if (value === undefined) { - mmkv.remove(key); - return; - } - mmkv.set(key, JSON.stringify(value)); - } -); - -/** - * Use the buffer value of the given key from the given MMKV storage instance - */ -export const useMMKVBuffer = createMMKVHook((instance, key) => instance.getBuffer(key)); diff --git a/app/lib/methods/userPreferences.test.ts b/app/lib/methods/userPreferences.test.ts index e0a9aaf8bdb..c613b4084d5 100644 --- a/app/lib/methods/userPreferences.test.ts +++ b/app/lib/methods/userPreferences.test.ts @@ -1,37 +1,151 @@ -import userPreferences from './userPreferences'; +import { act, renderHook } from '@testing-library/react-native'; + +import userPreferences, { useUserPreferences } from './userPreferences'; describe('UserPreferences', () => { beforeEach(() => userPreferences.clearAll()); - it('getBool returns false for stored false', () => { - userPreferences.setBool('k', false); - expect(userPreferences.getBool('k')).toBe(false); + describe('string', () => { + it('round-trips a stored string', () => { + userPreferences.setString('k', 'value'); + expect(userPreferences.getString('k')).toBe('value'); + }); + + it('getString returns null for unset key', () => { + expect(userPreferences.getString('missing')).toBeNull(); + }); + + it('getString returns null for an empty string', () => { + userPreferences.setString('k', ''); + expect(userPreferences.getString('k')).toBeNull(); + }); }); - it('getBool parses JSON-string stored boolean', () => { - userPreferences.setString('k', JSON.stringify(false)); - expect(userPreferences.getBool('k')).toBe(false); - userPreferences.setString('k', JSON.stringify(true)); - expect(userPreferences.getBool('k')).toBe(true); + describe('bool', () => { + it('getBool returns false for stored false', () => { + userPreferences.setBool('k', false); + expect(userPreferences.getBool('k')).toBe(false); + }); + + it('getBool parses JSON-string stored boolean', () => { + userPreferences.setString('k', JSON.stringify(false)); + expect(userPreferences.getBool('k')).toBe(false); + userPreferences.setString('k', JSON.stringify(true)); + expect(userPreferences.getBool('k')).toBe(true); + }); + + it('getBool returns null for non-boolean or invalid JSON strings', () => { + for (const value of ['1', 'null', '{}', 'not-json']) { + userPreferences.setString('k', value); + expect(userPreferences.getBool('k')).toBeNull(); + } + }); + + it('getBool returns null for unset key', () => { + expect(userPreferences.getBool('missing')).toBeNull(); + }); }); - it('getBool returns null for non-boolean or invalid JSON strings', () => { - for (const value of ['1', 'null', '{}', 'not-json']) { - userPreferences.setString('k', value); - expect(userPreferences.getBool('k')).toBeNull(); - } + describe('number', () => { + it('getNumber returns 0 for stored 0', () => { + userPreferences.setNumber('k', 0); + expect(userPreferences.getNumber('k')).toBe(0); + }); + + it('getNumber returns null for unset key', () => { + expect(userPreferences.getNumber('missing')).toBeNull(); + }); }); - it('getBool returns null for unset key', () => { - expect(userPreferences.getBool('missing')).toBeNull(); + describe('map', () => { + it('round-trips a stored object', () => { + userPreferences.setMap('k', { sort: 'activity', group: true }); + expect(userPreferences.getMap('k')).toEqual({ sort: 'activity', group: true }); + }); + + it('getMap returns null for unset key', () => { + expect(userPreferences.getMap('missing')).toBeNull(); + }); + + it('getMap returns null when the stored string is not JSON', () => { + userPreferences.setString('k', 'not-json'); + expect(userPreferences.getMap('k')).toBeNull(); + }); }); - it('getNumber returns 0 for stored 0', () => { - userPreferences.setNumber('k', 0); - expect(userPreferences.getNumber('k')).toBe(0); + describe('key management', () => { + it('contains reports whether a key is stored', () => { + expect(userPreferences.contains('k')).toBe(false); + userPreferences.setString('k', 'value'); + expect(userPreferences.contains('k')).toBe(true); + }); + + it('removeItem drops a single key', () => { + userPreferences.setString('keep', 'a'); + userPreferences.setString('drop', 'b'); + userPreferences.removeItem('drop'); + expect(userPreferences.contains('drop')).toBe(false); + expect(userPreferences.getString('keep')).toBe('a'); + }); + + it('getAllKeys lists every stored key', () => { + userPreferences.setString('a', '1'); + userPreferences.setBool('b', true); + userPreferences.setNumber('c', 2); + expect(userPreferences.getAllKeys().sort()).toEqual(['a', 'b', 'c']); + }); + + it('clearAll empties the storage', () => { + userPreferences.setString('a', '1'); + userPreferences.clearAll(); + expect(userPreferences.getAllKeys()).toEqual([]); + }); }); - it('getNumber returns null for unset key', () => { - expect(userPreferences.getNumber('missing')).toBeNull(); + describe('useUserPreferences', () => { + it('returns the default value when nothing is stored', () => { + const { result } = renderHook(() => useUserPreferences('k', 'fallback')); + expect(result.current[0]).toBe('fallback'); + }); + + it('returns undefined when nothing is stored and no default is given', () => { + const { result } = renderHook(() => useUserPreferences('k')); + expect(result.current[0]).toBeUndefined(); + }); + + it('reads back a string written through the setter', () => { + const { result } = renderHook(() => useUserPreferences('k', 'fallback')); + + act(() => result.current[1]('written')); + + expect(result.current[0]).toBe('written'); + expect(userPreferences.getString('k')).toBe('written'); + }); + + it('round-trips a non-string value as JSON', () => { + const { result } = renderHook(() => useUserPreferences<{ sort: string }>('k', { sort: 'alphabetical' })); + + act(() => result.current[1]({ sort: 'activity' })); + + expect(result.current[0]).toEqual({ sort: 'activity' }); + expect(userPreferences.getMap('k')).toEqual({ sort: 'activity' }); + }); + + it('falls back to the default when the stored string is not valid JSON', () => { + userPreferences.setString('k', 'not-json'); + const { result } = renderHook(() => useUserPreferences<{ sort: string }>('k', { sort: 'alphabetical' })); + + expect(result.current[0]).toEqual({ sort: 'alphabetical' }); + }); + + it('clears the stored value when set to undefined', () => { + userPreferences.setString('k', 'written'); + const { result } = renderHook(() => useUserPreferences('k', 'fallback')); + + act(() => result.current[1](undefined)); + + expect(userPreferences.contains('k')).toBe(false); + expect(result.current[0]).toBe('fallback'); + }); }); }); diff --git a/patches/react-native-mmkv+4.1.2.patch b/patches/react-native-mmkv+4.1.2.patch deleted file mode 100644 index e11f0299747..00000000000 --- a/patches/react-native-mmkv+4.1.2.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/node_modules/react-native-mmkv/src/createMMKV/createMMKV.ts b/node_modules/react-native-mmkv/src/createMMKV/createMMKV.ts -index d5142f9..5da521f 100644 ---- a/node_modules/react-native-mmkv/src/createMMKV/createMMKV.ts -+++ b/node_modules/react-native-mmkv/src/createMMKV/createMMKV.ts -@@ -2,15 +2,15 @@ import type { MMKV } from '../specs/MMKV.nitro' - import type { Configuration } from '../specs/MMKVFactory.nitro' - import { Platform } from 'react-native' - import { addMemoryWarningListener } from '../addMemoryWarningListener/addMemoryWarningListener' --import { isTest } from '../isTest' --import { createMockMMKV } from './createMockMMKV' -+// import { isTest } from '../isTest' -+// import { createMockMMKV } from './createMockMMKV' // Disabled via patch-package for E2E tests - import { getMMKVFactory, getPlatformContext } from '../getMMKVFactory' - - export function createMMKV(configuration?: Configuration): MMKV { -- if (isTest()) { -- // In a test environment, we mock the MMKV instance. -- return createMockMMKV(configuration) -- } -+ //if (isTest()) { -+ // In a test environment, we mock the MMKV instance. -+ // return createMockMMKV(configuration) -+ //} - - const factory = getMMKVFactory() - From 559b2f79aa49e452e8d0a1ce0504d58169e81603 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 15 Sep 2026 17:55:58 -0300 Subject: [PATCH 08/55] chore: RN 0.86 / Expo 57 dependencies, toolchain and patches (#7693) * chore: upgrade dependencies and patches to RN 0.86 / Expo 57 * chore: align upgrade toolchain floors and CI checks * chore: update Jest toolchain for RN 0.86 and Expo 57 --- .github/actions/build-ios/action.yml | 5 - .github/actions/upload-ios/action.yml | 5 - .github/workflows/e2e-build-ios.yml | 5 - .github/workflows/eslint.yml | 8 +- .github/workflows/maestro-ios.yml | 6 - .github/workflows/organize_translations.yml | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- jest.config.js | 2 + jest.preset.js | 2 - jest.setup.js | 16 +- package.json | 73 +- ...12.0.12.patch => expo-asset+57.0.17.patch} | 15 +- ...io+0.4.9.patch => expo-audio+57.0.5.patch} | 4 +- ...21.patch => expo-file-system+57.0.7.patch} | 10 +- ...t+14.0.10.patch => expo-font+57.0.4.patch} | 0 patches/react-native+0.81.5.patch | 38 - patches/react-native+0.86.3.patch | 24 + ...react-native-gesture-handler+2.32.0.patch} | 31 +- pnpm-lock.yaml | 4132 ++++++++++------- 19 files changed, 2580 insertions(+), 1800 deletions(-) rename patches/{expo-asset+12.0.12.patch => expo-asset+57.0.17.patch} (68%) rename patches/{expo-audio+0.4.9.patch => expo-audio+57.0.5.patch} (94%) rename patches/{expo-file-system+19.0.21.patch => expo-file-system+57.0.7.patch} (80%) rename patches/{expo-font+14.0.10.patch => expo-font+57.0.4.patch} (100%) delete mode 100644 patches/react-native+0.81.5.patch create mode 100644 patches/react-native+0.86.3.patch rename patches/{react-native-gesture-handler+2.28.0.patch => react-native-gesture-handler+2.32.0.patch} (54%) diff --git a/.github/actions/build-ios/action.yml b/.github/actions/build-ios/action.yml index ddb2133bd5d..d9e6e064f42 100644 --- a/.github/actions/build-ios/action.yml +++ b/.github/actions/build-ios/action.yml @@ -41,11 +41,6 @@ runs: sudo rm -rf ~/Library/Developer/CoreSimulator/Caches/* shell: bash - - name: Set up Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 - with: - xcode-version: '26.2.0' - - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/actions/upload-ios/action.yml b/.github/actions/upload-ios/action.yml index 781851ac8d3..ef727a14c4d 100644 --- a/.github/actions/upload-ios/action.yml +++ b/.github/actions/upload-ios/action.yml @@ -61,11 +61,6 @@ runs: restore-keys: | pods-v1- - - name: Set up Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 - with: - xcode-version: '26.2.0' - - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/workflows/e2e-build-ios.yml b/.github/workflows/e2e-build-ios.yml index f290a6d4228..6bfdd887904 100644 --- a/.github/workflows/e2e-build-ios.yml +++ b/.github/workflows/e2e-build-ios.yml @@ -65,11 +65,6 @@ jobs: ~/.maestro/deps key: maestro-${{ runner.os }}-${{ env.MAESTRO_VERSION }} - - name: Set up Xcode - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 - with: - xcode-version: '26.2.0' - - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 2372337e384..198f70d4188 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -19,10 +19,14 @@ jobs: uses: ./.github/actions/setup-node - name: Run Oxlint - run: pnpm lint + run: pnpm exec oxlint + + - name: Run TypeScript + continue-on-error: true + run: pnpm exec tsc - name: Run Tests - run: pnpm test --runInBand + run: pnpm test - name: Validate sniffler test-map freshness run: node .github/scripts/validate-test-map.js diff --git a/.github/workflows/maestro-ios.yml b/.github/workflows/maestro-ios.yml index 3cf48779f52..c87463cc0e8 100644 --- a/.github/workflows/maestro-ios.yml +++ b/.github/workflows/maestro-ios.yml @@ -22,12 +22,6 @@ jobs: - name: Checkout Repo uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - - name: Set up Xcode - # Match the Xcode version e2e-build-ios.yml builds with - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 - with: - xcode-version: '26.2.0' - - name: Configure Simulator run: | defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false diff --git a/.github/workflows/organize_translations.yml b/.github/workflows/organize_translations.yml index 4e2dad51c2a..12cb600686b 100644 --- a/.github/workflows/organize_translations.yml +++ b/.github/workflows/organize_translations.yml @@ -20,7 +20,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: 18 + node-version: 22 - name: Run script to organize JSON keys run: node scripts/organize-translations.js diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 42f0071e3f1..bc79d447cc6 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/jest.config.js b/jest.config.js index d8ca39be13d..e9ef674db8f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,6 +1,8 @@ const getAliasConfig = require('./config/import-aliases'); module.exports = { + maxWorkers: 2, + workerIdleMemoryLimit: '512MB', modulePathIgnorePatterns: ['/.*worktrees/'], testPathIgnorePatterns: [ 'e2e', diff --git a/jest.preset.js b/jest.preset.js index 32b28ff7b71..92c0a951b5e 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -1,7 +1,5 @@ -const jestRN = 'react-native'; const jestExpo = require('jest-expo/jest-preset.js'); module.exports = { - ...jestRN, ...jestExpo }; diff --git a/jest.setup.js b/jest.setup.js index 69aa7056068..9ebbf508fb7 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -18,22 +18,8 @@ jest.mock('react-native-safe-area-context', () => { const loadAsyncMock = jest.spyOn(Image, 'loadAsync'); loadAsyncMock.mockImplementation(() => Promise.resolve({ width: 200, height: 300 })); -jest.mock('react-native-worklets', () => ({ - RuntimeKind: { ReactNative: 1, UI: 2, Worker: 3 }, - getRuntimeKind: jest.fn(() => 1), - createSerializable: jest.fn(value => value), - isWorkletFunction: jest.fn(() => false), - runOnUI: jest.fn(fn => fn), - runOnJS: jest.fn(fn => fn), - makeShareable: jest.fn(value => value), - callMicrotasks: jest.fn(), - executeOnUIRuntimeSync: jest.fn(fn => fn()), - serializableMappingCache: { get: jest.fn(), set: jest.fn(), has: jest.fn(() => false), delete: jest.fn() }, - scheduleOnRN: jest.fn((fn, ...args) => fn(...args)) -})); +jest.mock('react-native-worklets', () => jest.requireActual('react-native-worklets/lib/module/mock')); -// @ts-ignore -global.__reanimatedWorkletInit = () => {}; jest.mock('react-native-reanimated', () => { const actual = jest.requireActual('react-native-reanimated/mock'); return { diff --git a/package.json b/package.json index 7f58059d646..05b6aca3168 100644 --- a/package.json +++ b/package.json @@ -35,10 +35,10 @@ "@react-native-async-storage/async-storage": "2.2.0", "@react-native-camera-roll/camera-roll": "^7.10.0", "@react-native-clipboard/clipboard": "^1.13.2", - "@react-native-community/datetimepicker": "8.4.4", + "@react-native-community/datetimepicker": "9.1.0", "@react-native-community/hooks": "^100.1.0", - "@react-native-community/netinfo": "^11.3.1", - "@react-native-community/slider": "5.0.1", + "@react-native-community/netinfo": "^12.0.1", + "@react-native-community/slider": "5.2.0", "@react-native-cookies/cookies": "6.2.1", "@react-native-firebase/analytics": "^21.12.2", "@react-native-firebase/app": "^21.12.2", @@ -63,23 +63,23 @@ "dequal": "2.0.3", "ejson": "2.2.3", "eslint-import-resolver-typescript": "^4.4.4", - "expo": "^54.0.0", - "expo-apple-authentication": "~8.0.8", - "expo-audio": "~0.4.9", - "expo-camera": "~17.0.10", - "expo-device": "^8.0.10", - "expo-document-picker": "~14.0.8", - "expo-file-system": "~19.0.21", - "expo-haptics": "~15.0.8", - "expo-image": "~3.0.11", - "expo-keep-awake": "~15.0.8", - "expo-local-authentication": "~17.0.8", - "expo-notifications": "~0.32.15", - "expo-status-bar": "~3.0.9", - "expo-system-ui": "~6.0.9", - "expo-video": "~3.0.16", - "expo-video-thumbnails": "~10.0.8", - "expo-web-browser": "~15.0.10", + "expo": "^57.0.0", + "expo-apple-authentication": "~57.0.2", + "expo-audio": "~57.0.5", + "expo-camera": "~57.0.5", + "expo-device": "^57.0.2", + "expo-document-picker": "~57.0.2", + "expo-file-system": "~57.0.7", + "expo-haptics": "~57.0.3", + "expo-image": "~57.0.5", + "expo-keep-awake": "~57.0.2", + "expo-local-authentication": "~57.0.3", + "expo-notifications": "~57.0.19", + "expo-status-bar": "~57.0.1", + "expo-system-ui": "~57.0.4", + "expo-video": "~57.0.4", + "expo-video-thumbnails": "~57.0.2", + "expo-web-browser": "~57.0.3", "hoist-non-react-statics": "3.3.2", "i18n-js": "3.9.2", "js-base64": "3.6.1", @@ -88,9 +88,9 @@ "lodash": "4.17.21", "mitt": "3.0.1", "pretty-bytes": "5.6.0", - "react": "19.1.0", + "react": "19.2.3", "react-hook-form": "7.34.2", - "react-native": "0.81.5", + "react-native": "0.86.3", "react-native-a11y-order": "^0.4.0", "react-native-animatable": "1.3.3", "react-native-bootsplash": "^6.3.8", @@ -100,7 +100,7 @@ "react-native-easy-grid": "0.2.2", "react-native-easy-toast": "2.3.0", "react-native-external-keyboard": "^0.9.0", - "react-native-gesture-handler": "~2.28.0", + "react-native-gesture-handler": "~2.32.0", "react-native-image-crop-picker": "RocketChat/react-native-image-crop-picker#47092e8c90550a54d45fe307f7cb2a24c9535ed5", "react-native-incall-manager": "^4.2.1", "react-native-katex": "git+https://github.com/RocketChat/react-native-katex.git", @@ -115,15 +115,15 @@ "react-native-notifier": "1.6.1", "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", - "react-native-reanimated": "4.1.3", + "react-native-reanimated": "4.5.1", "react-native-safe-area-context": "^5.5.2", - "react-native-screens": "~4.17.1", + "react-native-screens": "~4.26.2", "react-native-skeleton-placeholder": "5.2.4", "react-native-svg": "^15.12.1", "react-native-url-polyfill": "2.0.0", "react-native-webrtc": "124.0.7", "react-native-webview": "13.16.1", - "react-native-worklets": "^0.6.1", + "react-native-worklets": "^0.10.1", "react-redux": "8.0.5", "reanimated-tab-view": "^0.3.0", "redux": "4.2.0", @@ -146,7 +146,10 @@ "pnpm": { "overrides": { "ua-parser-js": "1.0.2", - "jpeg-js": "0.4.4" + "jpeg-js": "0.4.4", + "typescript": "7.0.2", + "react-native-keyboard-controller": "1.18.5", + "react-native-nitro-modules": "^0.37.1" }, "onlyBuiltDependencies": [ "@bugsnag/cli", @@ -159,7 +162,7 @@ ] }, "devDependencies": { - "@babel/core": "~7.25.9", + "@babel/core": "~7.29.7", "@babel/plugin-proposal-decorators": "~7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "~7.25.9", "@babel/preset-env": "~7.25.9", @@ -171,7 +174,7 @@ "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", "@react-native/babel-preset": "0.81.5", - "@react-native/metro-config": "0.81.5", + "@react-native/metro-config": "0.86.3", "@react-native/typescript-config": "0.81.5", "@storybook/react": "~9.0.9", "@storybook/react-native": "~9.0.9", @@ -184,7 +187,7 @@ "@types/jsrsasign": "^10.5.8", "@types/lodash": "^4.14.188", "@types/node": "25.0.3", - "@types/react": "~19.1.0", + "@types/react": "~19.2.18", "@types/semver": "7.3.13", "@types/ua-parser-js": "^0.7.36", "@types/url-parse": "^1.4.8", @@ -193,19 +196,19 @@ "babel-plugin-module-resolver": "^5.0.3", "babel-plugin-react-compiler": "1.0.0", "babel-plugin-transform-remove-console": "^6.9.4", - "babel-preset-expo": "~54.0.9", + "babel-preset-expo": "~57.0.12", "emojibase-data": "17.0.0", "eslint-plugin-react-native": "~5.0.0", "fast-glob": "3.3.3", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-cli": "^29.7.0", - "jest-expo": "~54.0.16", + "jest-expo": "~57.0.5", "oxfmt": "^0.60.0", "oxlint": "^1.75.0", "oxlint-plugin-complexity": "^2.1.8", "patch-package": "~8.0.1", - "react-dom": "19.1.0", + "react-dom": "19.2.3", "react-native-dotenv": "3.4.8", "sniffler": "0.4.0", "storybook": "~9.0.9", @@ -213,7 +216,7 @@ }, "snyk": true, "engines": { - "node": ">=18" + "node": ">=22.13.0" }, "codegenConfig": { "name": "SSLPinning", @@ -224,6 +227,6 @@ } }, "volta": { - "node": "24.13.1" + "node": "22.13.0" } } diff --git a/patches/expo-asset+12.0.12.patch b/patches/expo-asset+57.0.17.patch similarity index 68% rename from patches/expo-asset+12.0.12.patch rename to patches/expo-asset+57.0.17.patch index dd415ccd507..1a7de8cc921 100644 --- a/patches/expo-asset+12.0.12.patch +++ b/patches/expo-asset+57.0.17.patch @@ -1,24 +1,21 @@ diff --git a/node_modules/expo-asset/android/src/main/java/expo/modules/asset/AssetModule.kt b/node_modules/expo-asset/android/src/main/java/expo/modules/asset/AssetModule.kt -index 9f1e2c6..d4c49cd 100644 +index cff5e41..a57e8a8 100644 --- a/node_modules/expo-asset/android/src/main/java/expo/modules/asset/AssetModule.kt +++ b/node_modules/expo-asset/android/src/main/java/expo/modules/asset/AssetModule.kt -@@ -3,6 +3,7 @@ package expo.modules.asset +@@ -2,6 +2,7 @@ package expo.modules.asset + import android.content.Context import android.net.Uri - import android.util.Log +import android.os.Build - import expo.modules.interfaces.filesystem.Permission + import android.util.Log import expo.modules.kotlin.AppContext import expo.modules.kotlin.exception.CodedException -@@ -80,6 +81,13 @@ class AssetModule : Module() { +@@ -83,6 +84,10 @@ class AssetModule : Module() { Name("ExpoAsset") AsyncFunction("downloadAsync") Coroutine { uri: URI, md5Hash: String?, type: String -> -+ // If the scheme is null, it's a raw asset (e.g., "custom.ttf"). -+ // Returning early prevents Expo from trying to "cache" a local native file. -+ // Only for Android 8 and early + if (uri.scheme == null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.O) { -+ return@Coroutine uri ++ return@Coroutine uri + } + if (uri.scheme == "file" && !uri.toString().startsWith(ANDROID_EMBEDDED_URL_BASE_RESOURCE)) { diff --git a/patches/expo-audio+0.4.9.patch b/patches/expo-audio+57.0.5.patch similarity index 94% rename from patches/expo-audio+0.4.9.patch rename to patches/expo-audio+57.0.5.patch index 7b6f7a2961e..0d7210ec4b5 100644 --- a/patches/expo-audio+0.4.9.patch +++ b/patches/expo-audio+57.0.5.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt b/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt -index c9fd366..5c74acf 100644 +index 992239b..df504ce 100644 --- a/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt +++ b/node_modules/expo-audio/android/src/main/java/expo/modules/audio/AudioModule.kt @@ -26,6 +26,7 @@ import androidx.media3.datasource.okhttp.OkHttpDataSource @@ -10,7 +10,7 @@ index c9fd366..5c74acf 100644 import androidx.media3.exoplayer.source.MediaSource import androidx.media3.exoplayer.source.ProgressiveMediaSource import expo.modules.interfaces.permissions.Permissions -@@ -553,7 +554,10 @@ class AudioModule : Module() { +@@ -931,7 +932,10 @@ class AudioModule : Module() { CONTENT_TYPE_SS -> SsMediaSource.Factory(factory) CONTENT_TYPE_DASH -> DashMediaSource.Factory(factory) CONTENT_TYPE_HLS -> HlsMediaSource.Factory(factory) diff --git a/patches/expo-file-system+19.0.21.patch b/patches/expo-file-system+57.0.7.patch similarity index 80% rename from patches/expo-file-system+19.0.21.patch rename to patches/expo-file-system+57.0.7.patch index 8633be6f991..37a07aee726 100644 --- a/patches/expo-file-system+19.0.21.patch +++ b/patches/expo-file-system+57.0.7.patch @@ -1,11 +1,11 @@ diff --git a/node_modules/expo-file-system/android/src/main/java/expo/modules/filesystem/legacy/FileSystemLegacyModule.kt b/node_modules/expo-file-system/android/src/main/java/expo/modules/filesystem/legacy/FileSystemLegacyModule.kt -index f6d43bf..197bebf 100644 +index 4626dac..a17bc35 100644 --- a/node_modules/expo-file-system/android/src/main/java/expo/modules/filesystem/legacy/FileSystemLegacyModule.kt +++ b/node_modules/expo-file-system/android/src/main/java/expo/modules/filesystem/legacy/FileSystemLegacyModule.kt -@@ -80,11 +80,20 @@ fun slashifyFilePath(path: String?): String? { - open class FileSystemLegacyModule : Module() { - private val context: Context - get() = appContext.reactContext ?: throw Exceptions.AppContextLost() +@@ -83,11 +83,20 @@ open class FileSystemLegacyModule : Module() { + get() = appContext.persistentFilesDirectory + private val cacheDirectory: File + get() = appContext.cacheDirectory - private var client: OkHttpClient? = null private var dirPermissionsRequest: Promise? = null private val taskHandlers: MutableMap = HashMap() diff --git a/patches/expo-font+14.0.10.patch b/patches/expo-font+57.0.4.patch similarity index 100% rename from patches/expo-font+14.0.10.patch rename to patches/expo-font+57.0.4.patch diff --git a/patches/react-native+0.81.5.patch b/patches/react-native+0.81.5.patch deleted file mode 100644 index 8c17708ee96..00000000000 --- a/patches/react-native+0.81.5.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/node_modules/react-native/React/Views/RCTViewManager.m b/node_modules/react-native/React/Views/RCTViewManager.m -index f017cb8..f6aaafb 100644 ---- a/node_modules/react-native/React/Views/RCTViewManager.m -+++ b/node_modules/react-native/React/Views/RCTViewManager.m -@@ -225,7 +225,9 @@ RCT_CUSTOM_VIEW_PROPERTY(accessibilityRole, UIAccessibilityTraits, RCTView) - { - UIAccessibilityTraits accessibilityRoleTraits = - json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; -- if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits) { -+ NSString *roleString = json ? [RCTConvert NSString:json] : nil; -+ if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits || view.reactAccessibilityElement.accessibilityRole != roleString) { -+ - view.accessibilityRoleTraits = accessibilityRoleTraits; - view.reactAccessibilityElement.accessibilityRole = json ? [RCTConvert NSString:json] : nil; - [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; -@@ -235,7 +237,8 @@ RCT_CUSTOM_VIEW_PROPERTY(accessibilityRole, UIAccessibilityTraits, RCTView) - RCT_CUSTOM_VIEW_PROPERTY(role, UIAccessibilityTraits, RCTView) - { - UIAccessibilityTraits roleTraits = json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; -- if (view.reactAccessibilityElement.roleTraits != roleTraits) { -+ NSString *roleString = json ? [RCTConvert NSString:json] : nil; -+ if (view.reactAccessibilityElement.roleTraits != roleTraits || view.reactAccessibilityElement.role != roleString) { - view.roleTraits = roleTraits; - view.reactAccessibilityElement.role = json ? [RCTConvert NSString:json] : nil; - [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; -diff --git a/node_modules/react-native/scripts/cocoapods/new_architecture.rb b/node_modules/react-native/scripts/cocoapods/new_architecture.rb -index 7d8f8e6..d2852a2 100644 ---- a/node_modules/react-native/scripts/cocoapods/new_architecture.rb -+++ b/node_modules/react-native/scripts/cocoapods/new_architecture.rb -@@ -163,7 +163,7 @@ class NewArchitectureHelper - .uniq{ |p| p.path } - .map{ |p| p.path } - -- excluded_info_plist = ["/Pods", "Tests", "metainternal", ".bundle", "build/", "DerivedData/"] -+ excluded_info_plist = ["/Pods", "Tests", "metainternal", ".bundle", "build/", "DerivedData/", ".xcframework", ".framework"] - projectPaths.each do |projectPath| - projectFolderPath = File.dirname(projectPath) - infoPlistFiles = `find #{projectFolderPath} -name "Info.plist"` diff --git a/patches/react-native+0.86.3.patch b/patches/react-native+0.86.3.patch new file mode 100644 index 00000000000..b0da19c9af6 --- /dev/null +++ b/patches/react-native+0.86.3.patch @@ -0,0 +1,24 @@ +diff --git a/node_modules/react-native/React/Views/RCTViewManager.m b/node_modules/react-native/React/Views/RCTViewManager.m +index fa1e0bc..82d9393 100644 +--- a/node_modules/react-native/React/Views/RCTViewManager.m ++++ b/node_modules/react-native/React/Views/RCTViewManager.m +@@ -223,7 +223,8 @@ - (RCTShadowView *)shadowView + { + UIAccessibilityTraits accessibilityRoleTraits = + json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; +- if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits) { ++ NSString *roleString = json ? [RCTConvert NSString:json] : nil; ++ if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits || view.reactAccessibilityElement.accessibilityRole != roleString) { + view.accessibilityRoleTraits = accessibilityRoleTraits; + view.reactAccessibilityElement.accessibilityRole = json ? [RCTConvert NSString:json] : nil; + [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; +@@ -233,7 +234,8 @@ - (RCTShadowView *)shadowView + RCT_CUSTOM_VIEW_PROPERTY(role, UIAccessibilityTraits, RCTView) + { + UIAccessibilityTraits roleTraits = json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; +- if (view.reactAccessibilityElement.roleTraits != roleTraits) { ++ NSString *roleString = json ? [RCTConvert NSString:json] : nil; ++ if (view.reactAccessibilityElement.roleTraits != roleTraits || view.reactAccessibilityElement.role != roleString) { + view.roleTraits = roleTraits; + view.reactAccessibilityElement.role = json ? [RCTConvert NSString:json] : nil; + [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; diff --git a/patches/react-native-gesture-handler+2.28.0.patch b/patches/react-native-gesture-handler+2.32.0.patch similarity index 54% rename from patches/react-native-gesture-handler+2.28.0.patch rename to patches/react-native-gesture-handler+2.32.0.patch index 309449cc7c5..ba5d8c8056f 100644 --- a/patches/react-native-gesture-handler+2.28.0.patch +++ b/patches/react-native-gesture-handler+2.32.0.patch @@ -1,8 +1,35 @@ +diff --git a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +index e4114c4..41544da 100644 +--- a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt ++++ b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +@@ -504,10 +504,22 @@ class RNGestureHandlerButtonViewManager : + } + + override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { ++ if (isActivationKey(keyCode) && !isChildTouched() && !context.isScreenReaderOn()) { ++ findGestureHandlerRootView()?.activateNativeHandlers(this) ++ return true ++ } + receivedKeyEvent = true + return super.onKeyUp(keyCode, event) + } + ++ private fun isActivationKey(keyCode: Int) = when (keyCode) { ++ KeyEvent.KEYCODE_DPAD_CENTER, ++ KeyEvent.KEYCODE_ENTER, ++ KeyEvent.KEYCODE_NUMPAD_ENTER, ++ KeyEvent.KEYCODE_SPACE -> true ++ else -> false ++ } ++ + override fun performClick(): Boolean { + // don't preform click when a child button is pressed (mainly to prevent sound effect of + // a parent button from playing) diff --git a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm b/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm -index 2296c39..0a872ba 100644 +index 6b9fa9c..6d2ccea 100644 --- a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm +++ b/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm -@@ -89,6 +89,52 @@ +@@ -83,6 +83,52 @@ - (BOOL)shouldHandleTouch:(RNGHUIView *)view } #if !TARGET_OS_OSX diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c9f438dcbd..5007156765b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,9 @@ settings: overrides: ua-parser-js: 1.0.2 jpeg-js: 0.4.4 + typescript: 7.0.2 + react-native-keyboard-controller: 1.18.5 + react-native-nitro-modules: ^0.37.1 importers: @@ -17,73 +20,73 @@ importers: version: 8.4.0 '@expo/vector-icons': specifier: ^15.0.3 - version: 15.0.3(expo-font@14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 15.0.3(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@hookform/resolvers': specifier: ^2.9.10 - version: 2.9.11(react-hook-form@7.34.2(react@19.1.0)) + version: 2.9.11(react-hook-form@7.34.2(react@19.2.3)) '@lodev09/react-native-true-sheet': specifier: ~3.7.0 - version: 3.7.3(261280a80c394a7dcf8d9609d62c37ca) + version: 3.7.3(b217ab5bd6345e9949a4a395c898a850) '@magrinj/expo-quick-look': specifier: 0.4.0 - version: 0.4.0(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@nozbe/watermelondb': specifier: ^0.28.1-0 version: 0.28.1-0 '@react-native-async-storage/async-storage': specifier: 2.2.0 - version: 2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) '@react-native-camera-roll/camera-roll': specifier: ^7.10.0 - version: 7.10.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 7.10.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) '@react-native-clipboard/clipboard': specifier: ^1.13.2 - version: 1.16.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.16.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-community/datetimepicker': - specifier: 8.4.4 - version: 8.4.4(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: 9.1.0 + version: 9.1.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-community/hooks': specifier: ^100.1.0 - version: 100.1.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 100.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-community/netinfo': - specifier: ^11.3.1 - version: 11.4.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: ^12.0.1 + version: 12.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-community/slider': - specifier: 5.0.1 - version: 5.0.1 + specifier: 5.2.0 + version: 5.2.0 '@react-native-cookies/cookies': specifier: 6.2.1 - version: 6.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 6.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) '@react-native-firebase/analytics': specifier: ^21.12.2 - version: 21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + version: 21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)) '@react-native-firebase/app': specifier: ^21.12.2 - version: 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-firebase/crashlytics': specifier: ^21.12.2 - version: 21.14.0(7f31d425d6e3bb1976dd842bb1e41e49) + version: 21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo@57.0.23) '@react-native-masked-view/masked-view': specifier: ^0.3.1 - version: 0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native-picker/picker': specifier: 2.11.4 - version: 2.11.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native/codegen': specifier: ^0.80.0 - version: 0.80.2(@babel/core@7.25.9) + version: 0.80.2(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.12.2 - version: 7.12.2(1791ab06baac4955f4dd8054e3baaac6) + version: 7.12.2(568a64fb44ad70e6f0b55611752f41f8) '@react-navigation/elements': specifier: ^2.9.25 - version: 2.9.25(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@react-navigation/native@7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) '@react-navigation/native': specifier: ^7.3.3 - version: 7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-navigation/native-stack': specifier: ^7.17.5 - version: 7.17.5(5d5d774b9c7e992721e68b3dbd486565) + version: 7.17.5(b9b07f1e05b03fd68f5bb004ad12b8b4) '@rocket.chat/media-signaling': specifier: 1.0.0-rc.1 version: 1.0.0-rc.1 @@ -92,7 +95,7 @@ importers: version: 0.31.36 '@rocket.chat/mobile-crypto': specifier: RocketChat/rocket.chat-mobile-crypto#main - version: https://codeload.github.com/RocketChat/rocket.chat-mobile-crypto/tar.gz/69a0a250dd7c6ff0808eb659d7202be1cae7fa1c(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: https://codeload.github.com/RocketChat/rocket.chat-mobile-crypto/tar.gz/69a0a250dd7c6ff0808eb659d7202be1cae7fa1c(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@rocket.chat/sdk': specifier: RocketChat/Rocket.Chat.js.SDK#ecf4fedcf8ab6121e62a6b95bb48823afd805afd version: https://codeload.github.com/RocketChat/Rocket.Chat.js.SDK/tar.gz/ecf4fedcf8ab6121e62a6b95bb48823afd805afd @@ -101,7 +104,7 @@ importers: version: 0.39.0(@rocket.chat/icons@0.47.0)(@types/node@25.0.3)(typescript@7.0.2) '@zoontek/react-native-navigation-bar': specifier: ^1.1.1 - version: 1.1.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.1.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) axios: specifier: 0.30.3 version: 0.30.3 @@ -124,56 +127,56 @@ importers: specifier: ^4.4.4 version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1) expo: - specifier: ^54.0.0 - version: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ^57.0.0 + version: 57.0.23(92e84404446a2d5101115c437b8fd679) expo-apple-authentication: - specifier: ~8.0.8 - version: 8.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-audio: - specifier: ~0.4.9 - version: 0.4.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.5 + version: 57.0.5(expo-asset@57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-camera: - specifier: ~17.0.10 - version: 17.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.5 + version: 57.0.5(@types/emscripten@1.41.6)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-device: - specifier: ^8.0.10 - version: 8.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + specifier: ^57.0.2 + version: 57.0.2(expo@57.0.23) expo-document-picker: - specifier: ~14.0.8 - version: 14.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.23) expo-file-system: - specifier: ~19.0.21 - version: 19.0.21(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: ~57.0.7 + version: 57.0.7(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) expo-haptics: - specifier: ~15.0.8 - version: 15.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + specifier: ~57.0.3 + version: 57.0.3(expo@57.0.23) expo-image: - specifier: ~3.0.11 - version: 3.0.11(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.5 + version: 57.0.5(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-keep-awake: - specifier: ~15.0.8 - version: 15.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.23)(react@19.2.3) expo-local-authentication: - specifier: ~17.0.8 - version: 17.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + specifier: ~57.0.3 + version: 57.0.3(expo@57.0.23) expo-notifications: - specifier: ~0.32.15 - version: 0.32.15(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.19 + version: 57.0.19(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) expo-status-bar: - specifier: ~3.0.9 - version: 3.0.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.1 + version: 57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-system-ui: - specifier: ~6.0.9 - version: 6.0.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: ~57.0.4 + version: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) expo-video: - specifier: ~3.0.16 - version: 3.0.16(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.4 + version: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-video-thumbnails: - specifier: ~10.0.8 - version: 10.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + specifier: ~57.0.2 + version: 57.0.2(expo@57.0.23) expo-web-browser: - specifier: ~15.0.10 - version: 15.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + specifier: ~57.0.3 + version: 57.0.3(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) hoist-non-react-statics: specifier: 3.3.2 version: 3.3.2 @@ -199,119 +202,119 @@ importers: specifier: 5.6.0 version: 5.6.0 react: - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.2.3 + version: 19.2.3 react-hook-form: specifier: 7.34.2 - version: 7.34.2(react@19.1.0) + version: 7.34.2(react@19.2.3) react-native: - specifier: 0.81.5 - version: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + specifier: 0.86.3 + version: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-a11y-order: specifier: ^0.4.0 - version: 0.4.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.4.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-animatable: specifier: 1.3.3 version: 1.3.3 react-native-bootsplash: specifier: ^6.3.8 - version: 6.3.11(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 6.3.11(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-callkeep: specifier: 4.3.16 - version: 4.3.16(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 4.3.16(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-console-time-polyfill: specifier: 1.2.3 - version: 1.2.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.2.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-device-info: specifier: 11.1.0 - version: 11.1.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 11.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-easy-grid: specifier: 0.2.2 version: 0.2.2 react-native-easy-toast: specifier: 2.3.0 - version: 2.3.0(prop-types@15.8.1)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 2.3.0(prop-types@15.8.1)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-external-keyboard: specifier: ^0.9.0 - version: 0.9.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.9.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-gesture-handler: - specifier: ~2.28.0 - version: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~2.32.0 + version: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-image-crop-picker: specifier: RocketChat/react-native-image-crop-picker#47092e8c90550a54d45fe307f7cb2a24c9535ed5 - version: https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/47092e8c90550a54d45fe307f7cb2a24c9535ed5(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/47092e8c90550a54d45fe307f7cb2a24c9535ed5(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-incall-manager: specifier: ^4.2.1 - version: 4.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 4.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-katex: specifier: git+https://github.com/RocketChat/react-native-katex.git - version: https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1(react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: specifier: 1.18.5 - version: 1.18.5(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.18.5(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-linear-gradient: specifier: 2.6.2 - version: 2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-localize: specifier: 3.7.0 - version: 3.7.0(@expo/config-plugins@54.0.4)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.7.0(@expo/config-plugins@57.0.9(typescript@7.0.2))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-math-view: specifier: 3.9.5 - version: 3.9.5(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 3.9.5(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-mime-types: specifier: 2.3.0 version: 2.3.0 react-native-mmkv: specifier: ^4.3.2 - version: 4.3.2(react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 4.3.2(react-native-nitro-modules@0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-modal: specifier: 13.0.1 - version: 13.0.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 13.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-nitro-modules: specifier: ^0.37.1 - version: 0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-notifier: specifier: 1.6.1 - version: 1.6.1(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.6.1(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-picker-select: specifier: 9.0.1 - version: 9.0.1(@react-native-picker/picker@2.11.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) + version: 9.0.1(@react-native-picker/picker@2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)) react-native-popover-view: specifier: 5.1.7 version: 5.1.7 react-native-reanimated: - specifier: 4.1.3 - version: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: ^5.5.2 - version: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: - specifier: ~4.17.1 - version: 4.17.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~4.26.2 + version: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-skeleton-placeholder: specifier: 5.2.4 - version: 5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-linear-gradient@2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg: specifier: ^15.12.1 - version: 15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-url-polyfill: specifier: 2.0.0 - version: 2.0.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 2.0.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-webrtc: specifier: 124.0.7 - version: 124.0.7(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + version: 124.0.7(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react-native-webview: specifier: 13.16.1 - version: 13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-worklets: - specifier: ^0.6.1 - version: 0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-redux: specifier: 8.0.5 - version: 8.0.5(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(redux@4.2.0) + version: 8.0.5(@types/react@19.2.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(redux@4.2.0) reanimated-tab-view: specifier: ^0.3.0 - version: 0.3.0(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.3.0(641d271507e632f6b7f49ee76b960c3d) redux: specifier: 4.2.0 version: 4.2.0 @@ -347,10 +350,10 @@ importers: version: 1.5.10 use-debounce: specifier: 9.0.4 - version: 9.0.4(react@19.1.0) + version: 9.0.4(react@19.2.3) use-deep-compare-effect: specifier: 1.6.1 - version: 1.6.1(react@19.1.0) + version: 1.6.1(react@19.2.3) xregexp: specifier: 5.0.2 version: 5.0.2 @@ -359,20 +362,20 @@ importers: version: 0.32.11 zustand: specifier: ^5.0.10 - version: 5.0.12(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)) + version: 5.0.12(@types/react@19.2.18)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)) devDependencies: '@babel/core': - specifier: ~7.25.9 - version: 7.25.9 + specifier: ~7.29.7 + version: 7.29.7 '@babel/plugin-proposal-decorators': specifier: ~7.25.9 - version: 7.25.9(@babel/core@7.25.9) + version: 7.25.9(@babel/core@7.29.7) '@babel/plugin-transform-named-capturing-groups-regex': specifier: ~7.25.9 - version: 7.25.9(@babel/core@7.25.9) + version: 7.25.9(@babel/core@7.29.7) '@babel/preset-env': specifier: ~7.25.9 - version: 7.25.9(@babel/core@7.25.9) + version: 7.25.9(@babel/core@7.29.7) '@babel/runtime': specifier: ~7.25.9 version: 7.25.9 @@ -384,7 +387,7 @@ importers: version: 2.3.3 '@gorhom/bottom-sheet': specifier: ^5 - version: 5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 5.2.8(9928f68f03a282f377b2614cb23deb76) '@react-native-community/cli': specifier: 20.0.0 version: 20.0.0(typescript@7.0.2) @@ -396,22 +399,22 @@ importers: version: 20.0.0 '@react-native/babel-preset': specifier: 0.81.5 - version: 0.81.5(@babel/core@7.25.9) + version: 0.81.5(@babel/core@7.29.7) '@react-native/metro-config': - specifier: 0.81.5 - version: 0.81.5(@babel/core@7.25.9) + specifier: 0.86.3 + version: 0.86.3(@babel/core@7.29.7) '@react-native/typescript-config': specifier: 0.81.5 version: 0.81.5 '@storybook/react': specifier: ~9.0.9 - version: 9.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + version: 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native': specifier: ~9.0.9 - version: 9.0.18(b3c380f041753120db9b4b839e8df819) + version: 9.0.18(03fc32bb656def7817eec6786e023d85) '@testing-library/react-native': specifier: ^13.2.0 - version: 13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) + version: 13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) '@types/bytebuffer': specifier: ~5.0.49 version: 5.0.49 @@ -437,8 +440,8 @@ importers: specifier: 25.0.3 version: 25.0.3 '@types/react': - specifier: ~19.1.0 - version: 19.1.17 + specifier: ~19.2.18 + version: 19.2.18 '@types/semver': specifier: 7.3.13 version: 7.3.13 @@ -450,10 +453,10 @@ importers: version: 1.4.11 babel-jest: specifier: ~29.7.0 - version: 29.7.0(@babel/core@7.25.9) + version: 29.7.0(@babel/core@7.29.7) babel-loader: specifier: ~9.1.3 - version: 9.1.3(@babel/core@7.25.9)(webpack@5.106.2(esbuild@0.25.12)) + version: 9.1.3(@babel/core@7.29.7)(webpack@5.106.2(esbuild@0.25.12)) babel-plugin-module-resolver: specifier: ^5.0.3 version: 5.0.3 @@ -464,8 +467,8 @@ importers: specifier: ^6.9.4 version: 6.9.4 babel-preset-expo: - specifier: ~54.0.9 - version: 54.0.9(@babel/core@7.25.9)(@babel/runtime@7.25.9)(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2) + specifier: ~57.0.12 + version: 57.0.12(@babel/core@7.29.7)(@babel/runtime@7.25.9)(expo@57.0.23)(react-refresh@0.14.2) emojibase-data: specifier: 17.0.0 version: 17.0.0(emojibase@17.0.0) @@ -485,8 +488,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0) jest-expo: - specifier: ~54.0.16 - version: 54.0.16(@babel/core@7.25.9)(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~57.0.5 + version: 57.0.5(@babel/core@7.29.7)(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(expo@57.0.23)(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) oxfmt: specifier: ^0.60.0 version: 0.60.0 @@ -500,8 +503,8 @@ importers: specifier: ~8.0.1 version: 8.0.1 react-dom: - specifier: 19.1.0 - version: 19.1.0(react@19.1.0) + specifier: 19.2.3 + version: 19.2.3(react@19.2.3) react-native-dotenv: specifier: 3.4.8 version: 3.4.8(@babel/runtime@7.25.9) @@ -517,14 +520,6 @@ importers: packages: - '@0no-co/graphql.web@1.2.0': - resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - graphql: - optional: true - '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -539,26 +534,50 @@ packages: resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.25.9': resolution: {integrity: sha512-WYvQviPw+Qyib0v92AwNIrdLISTp7RfDkM7bPqBvpbnhY4wq8HvHBZREVdYDXk98C8BkOIVnHAY3yvj7AVISxQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.28.6': resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} engines: {node: '>=6.9.0'} @@ -580,6 +599,10 @@ packages: resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} @@ -588,12 +611,22 @@ packages: resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.28.6': resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -602,6 +635,10 @@ packages: resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.27.1': resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} @@ -622,14 +659,26 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.28.6': resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} @@ -638,6 +687,10 @@ packages: resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.9': resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} engines: {node: '>=6.9.0'} @@ -647,6 +700,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} @@ -767,6 +825,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1085,6 +1149,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.29.7': + resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-pure-annotations@7.27.1': resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} engines: {node: '>=6.9.0'} @@ -1180,12 +1250,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.28.5': resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} engines: {node: '>=6.9.0'} @@ -1212,14 +1276,26 @@ packages: resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.8': + resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} + engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1484,8 +1560,8 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@expo/cli@54.0.20': - resolution: {integrity: sha512-cwsXmhftvS0p9NNYOhXGnicBAZl9puWwRt19Qq5eQ6njLnaj8WvcR+kDZyADtgZxBsZiyVlrKXvnjt43HXywQA==} + '@expo/cli@57.0.25': + resolution: {integrity: sha512-G2FJfwClIPNPhH2sJlIFAkhQLYaKNGzSarIQUl6sVA8oGdrmBnhRvbtTzxDzjS6WzO2aDX8DY7y1aNbCFILodg==} hasBin: true peerDependencies: expo: '*' @@ -1497,29 +1573,29 @@ packages: react-native: optional: true - '@expo/code-signing-certificates@0.0.5': - resolution: {integrity: sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==} + '@expo/code-signing-certificates@0.0.6': + resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} '@expo/config-plugins@10.1.2': resolution: {integrity: sha512-IMYCxBOcnuFStuK0Ay+FzEIBKrwW8OVUMc65+v0+i7YFIIe8aL342l7T4F8lR4oCfhXn7d6M5QPgXvjtc/gAcw==} - '@expo/config-plugins@54.0.4': - resolution: {integrity: sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==} + '@expo/config-plugins@57.0.9': + resolution: {integrity: sha512-hHgfL1avkCdEvDSw7IwlKwRYYNgcxzbNNMIk6W6lTkJpY0MajinAfeJUS0J+wPCsjUfGbVqOJM+XhPaO5ulUxg==} '@expo/config-types@53.0.5': resolution: {integrity: sha512-kqZ0w44E+HEGBjy+Lpyn0BVL5UANg/tmNixxaRMLS6nf37YsDrLk2VMAmeKMMk5CKG0NmOdVv3ngeUjRQMsy9g==} - '@expo/config-types@54.0.10': - resolution: {integrity: sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==} + '@expo/config-types@57.0.2': + resolution: {integrity: sha512-ewW08OonrcRIsRKIlFvvcmmafE5zemb1ocu3HkNwtVPyRtj2w42pZCAkMIROYpcVBaPnc3mDT9UZDzwXWC3i6g==} - '@expo/config@12.0.13': - resolution: {integrity: sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==} + '@expo/config@57.0.9': + resolution: {integrity: sha512-dmzlKraIFxa7wLwV6K7WzI8jp6QZpW6Mc5mGjLimJUFjzh4uQdYaT3m3plEutM5yxBoBEwqzks7l+I/ljCbxAQ==} '@expo/devcert@1.2.1': resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==} - '@expo/devtools@0.1.8': - resolution: {integrity: sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ==} + '@expo/devtools@57.0.1': + resolution: {integrity: sha512-GyUf+wFNkbttaX0jR7MZa9bm77U0IrLg6d2AjpxdyoXw/w4abHoXG0oFufwLMgP9zLTd5+Ct4X/ffNUTnlzZgg==} peerDependencies: react: '*' react-native: '*' @@ -1529,59 +1605,115 @@ packages: react-native: optional: true - '@expo/env@2.0.8': - resolution: {integrity: sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==} + '@expo/dom-webview@57.0.1': + resolution: {integrity: sha512-lAKsME4SAq+8sf56oN0DX5TBYyruupoRxbWbD2xf9RnKY8y6x8eb9LCE5pxSN0qyWdqnp+0wmyWzDkKboThKAw==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' + + '@expo/env@2.4.3': + resolution: {integrity: sha512-M1NXeZCA1mkMkYOyIe7PlyRX0/jqFtMoJgyblnlq/vpCRfmueFT7RnGSQG8uEFDF5WHOFGijAQ3fogPh3/n5Ng==} + engines: {node: '>=20.12.0'} + + '@expo/expo-modules-macros-plugin@0.6.1': + resolution: {integrity: sha512-cpsLZE4rqkc1Y3eZTkxB98jrqY1YXgetmtxFt8q89jBRmk3quRuk1BZo+VcnCSObZardjg99r1k5xijEMONFGA==} - '@expo/fingerprint@0.15.4': - resolution: {integrity: sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==} + '@expo/fingerprint@0.20.13': + resolution: {integrity: sha512-h1x+w+JpNRu88a/5SMZRzJs9YDGR/f7R8ApCr7OdenhqmJ00hFxQMzvxajDLL+1P2Y2g/ND0xksusqvBqWSW5Q==} hasBin: true - '@expo/image-utils@0.8.8': - resolution: {integrity: sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==} + '@expo/image-utils@0.11.5': + resolution: {integrity: sha512-KPQBTpmpAfy/Vu9y4wPW808/qtZxjYmyJg8cm2QCPAupp+qEWA3b5zmk0ulOwQ9OgeHxuCPgUqWgkwHFo7UsrQ==} - '@expo/json-file@10.0.8': - resolution: {integrity: sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==} + '@expo/inline-modules@0.1.7': + resolution: {integrity: sha512-Bz/khd1gIJqDkje7t5ejD5e9jFbm4xEJzWSwRKadRo6gruepbw1xJ3Eb+e58OS8fY1ZNQYjzZbspnuph67sN0g==} + + '@expo/json-file@11.0.1': + resolution: {integrity: sha512-zxHWj4MKKMAL29ZQSY/Fssx4Thluk40JmuGNaeS078wy/NhlFhnVi+rHHunulE3xJAJ0CM73m8VK2+GkF9eRwQ==} '@expo/json-file@9.1.5': resolution: {integrity: sha512-prWBhLUlmcQtvN6Y7BpW2k9zXGd3ySa3R6rAguMJkp1z22nunLN64KYTUWfijFlprFoxm9r2VNnGkcbndAlgKA==} - '@expo/metro-config@54.0.12': - resolution: {integrity: sha512-Xhv1z/ak/cuJWeLxlnWr2u22q2AM/klASbjpP5eE34y91lGWa2NUwrFWoS830MhJ6kuAqtGdoQhwyPa3TES7sA==} + '@expo/local-build-cache-provider@57.0.8': + resolution: {integrity: sha512-SEdE0pAQrr90bRh3MNR0ZuwoIBw390cYdFgbn7Vk0Mtm9EHaBfP7kYj+2hXnXZJgOEm3/JMtfoD3rV7rWA9FGg==} + + '@expo/log-box@57.0.4': + resolution: {integrity: sha512-IxwS9s1L2muj8mj8AQSuiy7u8OFJdc02NRFo2me/Tj6DiaeG5SREqmpBE4rQpR2cadqSg5jl8Qab8Cjie616dg==} + peerDependencies: + '@expo/dom-webview': ^57.0.1 + expo: '*' + react: '*' + react-native: '*' + + '@expo/metro-config@57.0.12': + resolution: {integrity: sha512-S62Lrq35HZqBFD55423pmWb8PjaiR/W02zQC1uECBmw1vTN8WZaFz4TJ0i21EeJzwfebMb9MLxL8JZ102Z6VbA==} peerDependencies: expo: '*' peerDependenciesMeta: expo: optional: true - '@expo/metro@54.2.0': - resolution: {integrity: sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==} + '@expo/metro-file-map@57.0.3': + resolution: {integrity: sha512-1OXy+uPYY5uc7Tm4VBsd2NRn+3wHhqeqNuEO/Xo4kmYgv8FjYgUAc+bUXON9FpC2ikcLn4EVlGM9ce2exx9Mlg==} + + '@expo/metro@56.0.2': + resolution: {integrity: sha512-Ld5AeYMCCDa8bLeWhfuLbZFFjlV3f6ORqyPz2glGh6RltIngMuLf9BTC2yvHFjkKuGxL5SynijmA8xmNNWn5iA==} - '@expo/osascript@2.3.8': - resolution: {integrity: sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w==} + '@expo/osascript@2.7.1': + resolution: {integrity: sha512-Zn03EX6In7ts2lPUW2ESUSkEhEWQN1qqsiXjadtZMJOuZRkMiAg1ZQHuvz9DjByDWNJ2pBwAGyrts9lj9k389g==} engines: {node: '>=12'} - '@expo/package-manager@1.9.9': - resolution: {integrity: sha512-Nv5THOwXzPprMJwbnXU01iXSrCp3vJqly9M4EJ2GkKko9Ifer2ucpg7x6OUsE09/lw+npaoUnHMXwkw7gcKxlg==} + '@expo/package-manager@1.13.1': + resolution: {integrity: sha512-y/K+CaYYpZpNGZhSX4HyLT/vyIunFjNfyoxNysPBCefeLKI/VCx6f9LNPzrxayr3rCYO5bl9O8H+HRQK265Nkg==} '@expo/plist@0.3.5': resolution: {integrity: sha512-9RYVU1iGyCJ7vWfg3e7c/NVyMFs8wbl+dMWZphtFtsqyN9zppGREU3ctlD3i8KUE0sCUTVnLjCWr+VeUIDep2g==} - '@expo/plist@0.4.8': - resolution: {integrity: sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==} + '@expo/plist@0.8.1': + resolution: {integrity: sha512-3gTReGIUm0oRaMClsAJYxBnVPCl6fVpsl8HS+DTVxDhW4GyVyxg9E/Znm3BvcHtUJ51RJJI14pC1wvrNilCRHw==} + + '@expo/prebuild-config@57.0.16': + resolution: {integrity: sha512-QA8oMZ7y70kjOzw+abhRl9uYC8Nu/abeUTHr0YVxb3pgIC14gc7w543bYtI+5gEDI3q55jKUViIauC76QvZN1w==} + + '@expo/require-utils@57.0.5': + resolution: {integrity: sha512-kTAXj9lDFEIPMsbAOGCGbjBbMF0oi7CqkYM79KOX0DDD9wSwXmlKL1z2h8OwsrBf7mbOo2DjlRvZu4BEjrIxGw==} + peerDependencies: + typescript: 7.0.2 + peerDependenciesMeta: + typescript: + optional: true - '@expo/prebuild-config@54.0.8': - resolution: {integrity: sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==} + '@expo/router-server@57.0.10': + resolution: {integrity: sha512-8rGh6N5di7jzu7UC1SuIA1TWmVd+vBwOHwC7/1ww+FA6CcxcWyQlcPl39h2+Jpnul78CVzWpIjOcdKsZsp2zXw==} peerDependencies: + '@expo/metro-runtime': ^57.0.15 expo: '*' + expo-constants: ^57.0.18 + expo-font: ^57.0.4 + expo-router: '*' + expo-server: ^57.0.3 + react: '*' + react-dom: '*' + react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 + peerDependenciesMeta: + '@expo/metro-runtime': + optional: true + expo-router: + optional: true + react-dom: + optional: true + react-server-dom-webpack: + optional: true - '@expo/schema-utils@0.1.8': - resolution: {integrity: sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==} + '@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==} - '@expo/spawn-async@1.7.2': - resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==} + '@expo/spawn-async@1.8.0': + resolution: {integrity: sha512-eb9xxd/LbuEGSdua4NumCu/McVB9EM+F/JxB9pWgnERw4HQ9XyTNH1KapG6oqLWR8TuRK2LQfzJlmNi94CVobw==} engines: {node: '>=12'} '@expo/sudo-prompt@9.3.2': @@ -1594,11 +1726,13 @@ packages: react: '*' react-native: '*' - '@expo/ws-tunnel@1.0.6': - resolution: {integrity: sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==} + '@expo/ws-tunnel@2.0.0': + resolution: {integrity: sha512-j+JfTRdCk820J9dU0sA2SqshQIKFOMo7ED84w9MJFcebfbNQgsLztEY/SABDkGnjatrW4xGqnUhVRxSBVyCkXw==} + peerDependencies: + ws: ^8.0.0 - '@expo/xcpretty@4.3.2': - resolution: {integrity: sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==} + '@expo/xcpretty@4.4.5': + resolution: {integrity: sha512-J3eL4n4h5QTwfD0SIz8OIk6/+sOL/hFZAMacgCM07UNlxBQfJipEpIC2AQxvGkbYeStByJ0TVhQAJo+DeNgaSQ==} hasBin: true '@firebase/analytics-compat@0.2.17': @@ -1865,9 +1999,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ide/backoff@1.0.0': - resolution: {integrity: sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g==} - '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1889,10 +2020,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -1990,6 +2117,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -2410,8 +2540,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@react-native-community/datetimepicker@8.4.4': - resolution: {integrity: sha512-bc4ZixEHxZC9/qf5gbdYvIJiLZ5CLmEsC3j+Yhe1D1KC/3QhaIfGDVdUcid0PdlSoGOSEq4VlB93AWyetEyBSQ==} + '@react-native-community/datetimepicker@9.1.0': + resolution: {integrity: sha512-eadbnk+I2vxvW30iTAsm/qlCnMMAadkifIMYNEB2lzhxN/SvlKc7S2V4k5DyrwjdCbqdcMk3t9K6fnUMcAV34w==} peerDependencies: expo: '>=52.0.0' react: '*' @@ -2429,13 +2559,14 @@ packages: react: '>=18.0.0' react-native: '>=0.70' - '@react-native-community/netinfo@11.4.1': - resolution: {integrity: sha512-B0BYAkghz3Q2V09BF88RA601XursIEA111tnc2JOaN7axJWmNefmfjZqw/KdSxKZp7CZUuPpjBmz/WCR9uaHYg==} + '@react-native-community/netinfo@12.0.1': + resolution: {integrity: sha512-P/3caXIvfYSJG8AWJVefukg+ZGRPs+M4Lp3pNJtgcTYoJxCjWrKQGNnCkj/Cz//zWa/avGed0i/wzm0T8vV2IQ==} peerDependencies: + react: '*' react-native: '>=0.59' - '@react-native-community/slider@5.0.1': - resolution: {integrity: sha512-K3JRWkIW4wQ79YJ6+BPZzp1SamoikxfPRw7Yw4B4PElEQmqZFrmH9M5LxvIo460/3QSrZF/wCgi3qizJt7g/iw==} + '@react-native-community/slider@5.2.0': + resolution: {integrity: sha512-484sH8aWEaSjxaZ7HT3YZ8CKDcNes2synko1vdEz5DFEdvKAduxKJTj22L/qBMD7rtIkfbX69DMzWDAGbOAV6w==} '@react-native-cookies/cookies@6.2.1': resolution: {integrity: sha512-D17wCA0DXJkGJIxkL74Qs9sZ3sA+c+kCoGmXVknW7bVw/W+Vv1m/7mWTNi9DLBZSRddhzYw8SU0aJapIaM/g5w==} @@ -2479,20 +2610,30 @@ packages: react: '*' react-native: '*' - '@react-native/assets-registry@0.81.5': - resolution: {integrity: sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==} - engines: {node: '>= 20.19.4'} + '@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.81.5': resolution: {integrity: sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==} engines: {node: '>= 20.19.4'} + '@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.81.5': resolution: {integrity: sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==} engines: {node: '>= 20.19.4'} peerDependencies: '@babel/core': '*' + '@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.80.2': resolution: {integrity: sha512-eYad9ex9/RS6oFbbpu6LxsczktbhfJbJlTvtRlcWLJjJbFTeNr5Q7CgBT2/m5VtpxnJ/0YdmZ9vdazsJ2yp9kw==} engines: {node: '>=18'} @@ -2505,60 +2646,76 @@ packages: peerDependencies: '@babel/core': '*' - '@react-native/community-cli-plugin@0.81.5': - resolution: {integrity: sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==} - engines: {node: '>= 20.19.4'} + '@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.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': '*' + '@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.81.5': - resolution: {integrity: sha512-bnd9FSdWKx2ncklOetCgrlwqSGhMHP2zOxObJbOWXoj7GHEmih4MKarBo5/a8gX8EfA1EwRATdfNBQ81DY+h+w==} - engines: {node: '>= 20.19.4'} + '@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/dev-middleware@0.81.5': - resolution: {integrity: sha512-WfPfZzboYgo/TUtysuD5xyANzzfka8Ebni6RIb2wDxhb56ERi7qDrE4xGhtPsjCL4pQBXSVxyIlCy0d8I6EgGA==} - engines: {node: '>= 20.19.4'} + '@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/gradle-plugin@0.81.5': - resolution: {integrity: sha512-hORRlNBj+ReNMLo9jme3yQ6JQf4GZpVEBLxmTXGGlIL78MAezDZr5/uq9dwElSbcGmLEgeiax6e174Fie6qPLg==} - engines: {node: '>= 20.19.4'} + '@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/js-polyfills@0.81.5': - resolution: {integrity: sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==} - engines: {node: '>= 20.19.4'} + '@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/metro-babel-transformer@0.81.5': - resolution: {integrity: sha512-Vwm6gJ3VlP+QKAEU98v1dwZKqbUcIYP47K614SktA9dYDOtw+rEBjyzvNf69S4YG5JRvDmzw36E9zxtcg6ABOw==} + '@react-native/jest-preset@0.86.3': + resolution: {integrity: sha512-oMmBwXUpTgJvGlcXQQPuiQLykoM8jsWYp6RwdJ2NWyIWzJcGp1rmSr3XV7istoIcUt0wdOVLtQs0A0nDm9ND+A==} engines: {node: '>= 20.19.4'} + peerDependencies: + react: ^19.2.3 + + '@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.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.81.5': - resolution: {integrity: sha512-3Q0jQt5Zcen4+udkE0XQIS8VmI+vx3sWl5R2o36vHkg8eXpiQjvz/jY0sZmC8ahailiEWEscFklQzhTmizhdPQ==} - engines: {node: '>= 20.19.4'} + '@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-color@2.1.0': resolution: {integrity: sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==} - '@react-native/normalize-colors@0.81.5': - resolution: {integrity: sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==} + '@react-native/normalize-colors@0.86.3': + resolution: {integrity: sha512-Cv3CDkprb67GrzuaS9BGbBJC/6G4lIw3nyKOHRKTqTTum4bn37y5+R0Z04L8mcbQN85eEohNrRwb7IOM4j6uvg==} '@react-native/typescript-config@0.81.5': resolution: {integrity: sha512-NeCecPmlW+fcwFKzDzT1GcEQmJSE6tLz9Fg6wGjKL1l7pqUzpQIQg1iF3OovHOlyfPiB98+XRHnIBvlTSJ5R0w==} - '@react-native/virtualized-lists@0.81.5': - resolution: {integrity: sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw==} - engines: {node: '>= 20.19.4'} + '@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.1.0 + '@types/react': ^19.2.0 react: '*' - react-native: '*' + react-native: 0.86.3 peerDependenciesMeta: '@types/react': optional: true @@ -2759,7 +2916,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^9.0.18 - typescript: '>= 4.9.x' + typescript: 7.0.2 peerDependenciesMeta: typescript: optional: true @@ -2771,7 +2928,7 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta storybook: ^9.1.17 - typescript: '>= 4.9.x' + typescript: 7.0.2 peerDependenciesMeta: typescript: optional: true @@ -2836,6 +2993,9 @@ packages: '@types/ejson@2.2.2': resolution: {integrity: sha512-4DEXy6yKJVr1DQx4xy+y7NV9mK6p1vgikvtbOITWgp2Prs6yhffqZ8XOjEtojX2pzC7B1KF9kcQe9Bv52E9K2A==} + '@types/emscripten@1.41.6': + resolution: {integrity: sha512-uN+9i8bFT5CUcZfyIEYDrSueACEyKGbUs5kC/72DGlZZoinh84sJfVV0i8UOJD1asdzkvLPBRrKs41kZ8MdEXg==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -2907,11 +3067,14 @@ packages: '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@types/react-test-renderer@19.3.0': + resolution: {integrity: sha512-TX4p2D4Z2oigM3SXU7+QyLSUnSR0vR1S1Pfxm/qFL9nHQ3jclgi6ioGoWQmlIr1DeKRVmPJrmNlhgM0JlWlLUg==} + '@types/react@17.0.90': resolution: {integrity: sha512-P9beVR/x06U9rCJzSxtENnOr4BrbJ6VrsrDTc+73TtHv9XHhryXKbjGRB+6oooB2r0G/pQkD/S4dHo/7jUfwFw==} - '@types/react@19.1.17': - resolution: {integrity: sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==} + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} '@types/scheduler@0.16.8': resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} @@ -3170,14 +3333,6 @@ packages: cpu: [x64] os: [win32] - '@urql/core@5.2.0': - resolution: {integrity: sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==} - - '@urql/exchange-retry@1.3.2': - resolution: {integrity: sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==} - peerDependencies: - '@urql/core': ^5.0.0 - '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -3275,6 +3430,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -3306,6 +3465,11 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-cli-detector@0.1.7: + resolution: {integrity: sha512-d8OWDVdZMgjhLUT9ZPgSv/BdFFF9pVuscC0JdUSz3bjwE15gcp6u/o0/JooM2yyAWC49KThFhXlgTXRa9B7yng==} + engines: {node: '>=18.18'} + hasBin: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3367,9 +3531,6 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3431,9 +3592,6 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -3528,6 +3686,12 @@ packages: babel-plugin-syntax-hermes-parser@0.29.1: resolution: {integrity: sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==} + 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==} @@ -3539,17 +3703,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 || ^8.0.0-0 - babel-preset-expo@54.0.9: - resolution: {integrity: sha512-8J6hRdgEC2eJobjoft6mKJ294cLxmi3khCUy2JJQp4htOYYkllSLUq6vudWJkTJiIuGdVR4bR6xuz2EvJLWHNg==} + babel-preset-expo@57.0.12: + resolution: {integrity: sha512-rrZqJPYbVevy7rqibJZQFd3AsleGslJ63vmB3Qs8b5poOO5AHaehUGbZHjb0HoOZO59d86BEifYbq0/ncoM2UQ==} peerDependencies: '@babel/runtime': ^7.20.0 expo: '*' + expo-widgets: ^57.0.19 react-refresh: '>=0.14.0 <1.0.0' peerDependenciesMeta: '@babel/runtime': optional: true expo: optional: true + expo-widgets: + optional: true babel-preset-jest@29.6.3: resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} @@ -3563,6 +3730,13 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + barcode-detector@3.2.2: + resolution: {integrity: sha512-/4QOrrNrCRmDSBWiiP4aC72dnkuXUEdcFRidHgbPRXUpy82XcCMvJssI6fEs6JT42LS7DvBVZO70qasJbYKyrA==} + bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -3643,6 +3817,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -3734,10 +3912,6 @@ packages: chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -3747,8 +3921,8 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-edge-launcher@0.2.0: - resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==} + chromium-edge-launcher@0.3.0: + resolution: {integrity: sha512-p03azHlGjtyRvFEee3cyvtsRYdniSkwjkzmM/KmVnqT5d7QkkwpJBhis/zCLMYdQMVJ5tt140TBNqqrZPaWeFA==} ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} @@ -3853,10 +4027,6 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -3902,6 +4072,10 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.1.0: + resolution: {integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==} + engines: {node: '>=18'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -3919,7 +4093,7 @@ packages: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} peerDependencies: - typescript: '>=4.9.5' + typescript: 7.0.2 peerDependenciesMeta: typescript: optional: true @@ -3933,10 +4107,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -4108,6 +4278,9 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dnssd-advertise@1.1.6: + resolution: {integrity: sha512-Ndrrf6BMPalkQPd/zubL+4YghH2J9NspapQ09uDXwYbvOPkP0oaqf5CkcwJ0b50kS2O3ul6yVu+jz+RY62Cejg==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -4140,14 +4313,6 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} @@ -4214,10 +4379,6 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - env-editor@0.4.2: - resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} - engines: {node: '>=8'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -4439,9 +4600,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - exec-async@2.2.0: - resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -4458,33 +4616,35 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expo-apple-authentication@8.0.8: - resolution: {integrity: sha512-TwCHWXYR1kS0zaeV7QZKLWYluxsvqL31LFJubzK30njZqeWoWO89HZ8nZVaeXbFV1LrArKsze4BmMb+94wS0AQ==} + expo-apple-authentication@57.0.2: + resolution: {integrity: sha512-00KnlyRceRKski+ljZz8q8JhJZ4D3ZScU+Y0RqS6ElJ8GaCWfd7Qh5tMr47yIU/dKDrOnkzkFUM+6vyHS5HI7Q==} peerDependencies: expo: '*' + react: '*' react-native: '*' - expo-application@7.0.8: - resolution: {integrity: sha512-qFGyxk7VJbrNOQWBbE09XUuGuvkOgFS9QfToaK2FdagM2aQ+x3CvGV2DuVgl/l4ZxPgIf3b/MNh9xHpwSwn74Q==} + expo-application@57.0.3: + resolution: {integrity: sha512-t/CxeLio0NjY9/cOak1tQp62/hAUjzJxmhR4rVUR7K5bb9YoEtfl1ZekTn+Iuh+dYOMYzF0l72ODMSmY3CR1NA==} peerDependencies: expo: '*' - expo-asset@12.0.12: - resolution: {integrity: sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==} + expo-asset@57.0.17: + resolution: {integrity: sha512-qSdWZBSfEg06o3GJMwcj36tw0vXkB6eYjqkQistWmyJkHxhUOKnsKJnev6OraXxLdoI+KOd1+qgp/ENx8gcqYA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-audio@0.4.9: - resolution: {integrity: sha512-J4mMYEt2mqRqqwmSsXFylMGlrNWa+MbCzGl1IZBs+smvPAMJ3Ni8fNplzCQ0I9RnRzygKhRwJNpnAVL+n4MuyA==} + expo-audio@57.0.5: + resolution: {integrity: sha512-39fX5JC5zDvELB4/eDJPj2XAYRN0W9+K2DfDWm5N3aC5WZ7HRrhupWtT6hbH09NlfYpsRSqYOwEZnocFM42ynQ==} peerDependencies: expo: '*' + expo-asset: '*' react: '*' react-native: '*' - expo-camera@17.0.10: - resolution: {integrity: sha512-w1RBw83mAGVk4BPPwNrCZyFop0VLiVSRE3c2V9onWbdFwonpRhzmB4drygG8YOUTl1H3wQvALJHyMPTbgsK1Jg==} + expo-camera@57.0.5: + resolution: {integrity: sha512-0JaUXfDWMytmqm4pVKesZfLTSjAumfS2UGhnc1M4tqJ0qATCS0jxc7KjaoyKEzWJY+FEc8GlPCAGprS/7tNWZQ==} peerDependencies: expo: '*' react: '*' @@ -4494,42 +4654,42 @@ packages: react-native-web: optional: true - expo-constants@18.0.12: - resolution: {integrity: sha512-WzcKYMVNRRu4NcSzfIVRD5aUQFnSpTZgXFrlWmm19xJoDa4S3/PQNi6PNTBRc49xz9h8FT7HMxRKaC8lr0gflA==} + expo-constants@57.0.18: + resolution: {integrity: sha512-cLDwDOniPfuCZPHNY++cAY2ZkK97u5aobbBvilPK2LLmaWxR4ZpD31LWUIzUDLrwMPxLjmh1uURnbeYEf0Mivw==} peerDependencies: expo: '*' react-native: '*' - expo-device@8.0.10: - resolution: {integrity: sha512-jd5BxjaF7382JkDMaC+P04aXXknB2UhWaVx5WiQKA05ugm/8GH5uaz9P9ckWdMKZGQVVEOC8MHaUADoT26KmFA==} + expo-device@57.0.2: + resolution: {integrity: sha512-1A0/FICR3CgrH43FeiDQP3l5eHDmiMoh4EjXfhfoHHkMgdBQdyD0kwDWskiGZlQ3E0Nd0LHkCFH6vJ1ofm/jow==} peerDependencies: expo: '*' - expo-document-picker@14.0.8: - resolution: {integrity: sha512-3tyQKpPqWWFlI8p9RiMX1+T1Zge5mEKeBuXWp1h8PEItFMUDSiOJbQ112sfdC6Hxt8wSxreV9bCRl/NgBdt+fA==} + expo-document-picker@57.0.2: + resolution: {integrity: sha512-vVBbBNg0piMJUIxjB+DR6JaZZpcSl90ZUoywLA/EgNHTfRkZW+9axP97UxM2a0Zm0W6WfH3cLzzGAEfP9OKGwg==} peerDependencies: expo: '*' - expo-file-system@19.0.21: - resolution: {integrity: sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==} + expo-file-system@57.0.7: + resolution: {integrity: sha512-1vkZRadOsIputFDBcclqBa1pO3iXOO6iIsdqJipQWw4V5TSnWgmRTuOF7ro8IzrVue+PHbum++KCG3Tawem4cg==} peerDependencies: expo: '*' react-native: '*' - expo-font@14.0.10: - resolution: {integrity: sha512-UqyNaaLKRpj4pKAP4HZSLnuDQqueaO5tB1c/NWu5vh1/LF9ulItyyg2kF/IpeOp0DeOLk0GY0HrIXaKUMrwB+Q==} + expo-font@57.0.4: + resolution: {integrity: sha512-7WOMC2oA6xCfOm8bbofqWn2bIqyWFm7YLEnpc/gA1MJH0Ll0TfT/3+CqRkoW2eNRWMS8sxrz5WukUmSvmNquHA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-haptics@15.0.8: - resolution: {integrity: sha512-lftutojy8Qs8zaDzzjwM3gKHFZ8bOOEZDCkmh2Ddpe95Ra6kt2izeOfOfKuP/QEh0MZ1j9TfqippyHdRd1ZM9g==} + expo-haptics@57.0.3: + resolution: {integrity: sha512-qucUXtwtJdtECKSQK5D6TQBc/0SxKj7s5wQ4mrfSxhZsHrS9a4rcxINl/gbruMaY9spTXStco32ST4pV0vXmxw==} peerDependencies: expo: '*' - expo-image@3.0.11: - resolution: {integrity: sha512-4TudfUCLgYgENv+f48omnU8tjS2S0Pd9EaON5/s1ZUBRwZ7K8acEr4NfvLPSaeXvxW24iLAiyQ7sV7BXQH3RoA==} + expo-image@57.0.5: + resolution: {integrity: sha512-jOm5lofaIKXhQ7i0Hz3I5JuNULw/aghmpIPZXddwQcEtw8+wUhlozq3M7LbsOrcsBEapcG4jFs85DsfuFoz1tQ==} peerDependencies: expo: '*' react: '*' @@ -4539,46 +4699,56 @@ packages: react-native-web: optional: true - expo-keep-awake@15.0.8: - resolution: {integrity: sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==} + expo-keep-awake@57.0.2: + resolution: {integrity: sha512-GqgH746wtJImmsbyHmCQoi7cOslKuWQBbJHXr53S35Bpf5UvxCAztvnitUEd7D0QvFN2rvkOhylbZpgZZfBLlQ==} peerDependencies: expo: '*' react: '*' - expo-local-authentication@17.0.8: - resolution: {integrity: sha512-Q5fXHhu6w3pVPlFCibU72SYIAN+9wX7QpFn9h49IUqs0Equ44QgswtGrxeh7fdnDqJrrYGPet5iBzjnE70uolA==} + expo-local-authentication@57.0.3: + resolution: {integrity: sha512-1oQCBKz8JOpai+Zp+Z2RkBFIi2CHHWLSJk/pjvT9VEyf8nPFslo4kt1ZlQvtJ4rupbKNCmxqKfYr8Mlo8nJEug==} peerDependencies: expo: '*' - expo-modules-autolinking@3.0.23: - resolution: {integrity: sha512-YZnaE0G+52xftjH5nsIRaWsoVBY38SQCECclpdgLisdbRY/6Mzo7ndokjauOv3mpFmzMZACHyJNu1YSAffQwTg==} + expo-modules-autolinking@57.0.13: + resolution: {integrity: sha512-Hj5NjZRlfccazhKab+wK19leRVUr1Y/PUERaRvegIbUSkq4GVxKq6lU9QHlKQyC16MdD/VS4iwsiLivB4o7lvQ==} hasBin: true - expo-modules-core@3.0.29: - resolution: {integrity: sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==} + expo-modules-core@57.0.18: + resolution: {integrity: sha512-ovB7C+GVQTlKAOIsOIHJVVXN9Mn0ljf2SYBS+afrRaGqq+HZEn1D3o+HReIVeH1NjCn/xDBb7I4HjldHs6luZA==} peerDependencies: react: '*' react-native: '*' + react-native-worklets: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 + peerDependenciesMeta: + react-native-worklets: + optional: true + + expo-modules-jsi@57.1.0: + resolution: {integrity: sha512-a5ckeHfnbYfonhcHGkM0EU/a0Keh+/OufXy/HyFS+spr5Ib0N4Oh1ZsSYFQhp5xdOUFkVofKRhfH+VmcccIIpA==} + peerDependencies: + react-native: '*' - expo-notifications@0.32.15: - resolution: {integrity: sha512-gnJcauheC2S0Wl0RuJaFkaBRVzCG011j5hlG0TEbsuOCPBuB/F30YEk8yurK8Psv+zHkVfeiJ5AC+nL0LWk0WA==} + expo-notifications@57.0.19: + resolution: {integrity: sha512-JW/usGEwOxWzN8s0L7+j3FAoB39GtaZtpUGye2lPvcqYSkvewpZYkrC16P1JaCP09YRx0Q+qXPx5NUoUU8NsBA==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-server@1.0.5: - resolution: {integrity: sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==} + expo-server@57.0.3: + resolution: {integrity: sha512-aK+LdKzauHSGmsOStZtyxdzv0zWssCkxTw3m4QuOhfDSJsZaMRTd9O41d8ixU/QfELTbaJ0oRNcF7JFV/7O9YQ==} engines: {node: '>=20.16.0'} - expo-status-bar@3.0.9: - resolution: {integrity: sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==} + expo-status-bar@57.0.1: + resolution: {integrity: sha512-Xwaq1gAoVRWx5dPG5VhT5RSbnI9OilhZnO5qoPBnUaBAa5VzRzfdS8q0/bsPt0jR2DKLtGuP0bQ6efMJ4RIMDg==} peerDependencies: + expo: '*' react: '*' react-native: '*' - expo-system-ui@6.0.9: - resolution: {integrity: sha512-eQTYGzw1V4RYiYHL9xDLYID3Wsec2aZS+ypEssmF64D38aDrqbDgz1a2MSlHLQp2jHXSs3FvojhZ9FVela1Zcg==} + expo-system-ui@57.0.4: + resolution: {integrity: sha512-z//rxQJzhTNA1PcKrUtWmrd21jAS3nEDu1b0n8B/7LTTR933OcsZYP1HnbaZifuo2ZH/h7nce2Ow61WZ1Ig2bg==} peerDependencies: expo: '*' react-native: '*' @@ -4587,38 +4757,44 @@ packages: react-native-web: optional: true - expo-video-thumbnails@10.0.8: - resolution: {integrity: sha512-nPUtP7ERLf5DY5V2A6gquRP5rP3Uvq6+FVkDwG9R3KKhFeTYkWZ5Ce1iQ7Yt5qDNQqcUcgEqmRpGCbJmn9ckKA==} + expo-video-thumbnails@57.0.2: + resolution: {integrity: sha512-9nqx9nzjdFuSweJL/WsCaDoZOpd3lzOswudvoBsHUZvx0xfHJ+iGo3fND2u58P1CBT7qVjEiVm0wMBZKB6Z14g==} peerDependencies: expo: '*' - expo-video@3.0.16: - resolution: {integrity: sha512-H1HlxcHGomZItqisGfW3YL/G9BHtNBfVSimDJcLuyxyU87wFnV8loO9tCjuhufkfh/aTa2sW5BYAjLjg9DvnBQ==} + expo-video@57.0.4: + resolution: {integrity: sha512-4YCWG1IJzUNpLX0xoussK0VOG524qgUiMbwJzrgpDuPUzOgR3ZqXSZxKsy3HlYLiuWdzIQzwfpbtSNim9F9D3Q==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-web-browser@15.0.10: - resolution: {integrity: sha512-fvDhW4bhmXAeWFNFiInmsGCK83PAqAcQaFyp/3pE/jbdKmFKoRCWr46uZGIfN4msLK/OODhaQ/+US7GSJNDHJg==} + expo-web-browser@57.0.3: + resolution: {integrity: sha512-+ecvhyS/PdWkpv4ai6FF1Trd6Y/4kn/eQ3O86mie2ecU3w+I8bKZh13kppY/jw1uSL7yikt03L5W/iiHojrFwQ==} peerDependencies: expo: '*' react-native: '*' - expo@54.0.30: - resolution: {integrity: sha512-6q+aFfKL0SpT8prfdpR3V8HcN51ov0mCGuwQTzyuk6eeO9rg7a7LWbgPv9rEVXGZEuyULstL8LGNwHqusand7Q==} + expo@57.0.23: + resolution: {integrity: sha512-/aBLZFTD7+BNHWV/q5XbNRFqMhW/CrHsYeq8CcS/iGz6lJHYwEMm4XFcdoaeliuMdo6ZjNrsTHkBIdGB8VMHTg==} hasBin: true peerDependencies: '@expo/dom-webview': '*' '@expo/metro-runtime': '*' react: '*' + react-dom: '*' react-native: '*' + react-native-web: '*' react-native-webview: '*' peerDependenciesMeta: '@expo/dom-webview': optional: true '@expo/metro-runtime': optional: true + react-dom: + optional: true + react-native-web: + optional: true react-native-webview: optional: true @@ -4655,6 +4831,11 @@ packages: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -4667,6 +4848,9 @@ packages: picomatch: optional: true + fetch-nodeshim@0.4.10: + resolution: {integrity: sha512-m6I8ALe4L4XpdETy7MJZWs6L1IVMbjs99bwbpIKphxX+0CTns4IKDWJY0LWfr4YsFjfg+z1TjzTMU8lKl8rG0w==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -4758,10 +4942,6 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} - freeport-async@2.0.0: - resolution: {integrity: sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==} - engines: {node: '>=8'} - fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -4874,10 +5054,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} - globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -4943,14 +5119,23 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hermes-compiler@250829098.0.17: + resolution: {integrity: sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==} + hermes-estree@0.28.1: resolution: {integrity: sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==} hermes-estree@0.29.1: resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==} - hermes-estree@0.32.0: - resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + hermes-estree@0.35.0: + resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} + + hermes-estree@0.36.0: + resolution: {integrity: sha512-A1+8zn5oss2CFP7pKsOaxorQG6FNIz1WU1VDqruLPPZl3LVgeE2C5xfFg8Ow6/Ow4mSslLLtYP1J3n38eKyW9w==} + + hermes-estree@0.36.1: + resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} hermes-parser@0.28.1: resolution: {integrity: sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==} @@ -4958,8 +5143,14 @@ packages: hermes-parser@0.29.1: resolution: {integrity: sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==} - hermes-parser@0.32.0: - resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + 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==} @@ -5030,11 +5221,6 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - image-size@1.2.1: - resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} - engines: {node: '>=16.x'} - hasBin: true - import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -5159,10 +5345,6 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -5333,14 +5515,17 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-expo@54.0.16: - resolution: {integrity: sha512-wPV5dddlNMORNSA7ZjEjePA+ztks3G5iKCOHLIauURnKQPTscnaat5juXPboK1Bv2I+c/RDfkt4uZtAmXdlu/g==} + jest-expo@57.0.5: + resolution: {integrity: sha512-U08fwjaDBwnnbKnZcOA0WQbHfKqOWTCGku+IdCaekrLZmfbbZr3P1WqEsXHo6ntidQ3DmW+TT6G1aOp+ChYfKA==} hasBin: true peerDependencies: + '@react-native/jest-preset': ^0.86.3 expo: '*' react-native: '*' - react-server-dom-webpack: ~19.0.3 || ~19.1.4 || ~19.2.3 + react-server-dom-webpack: ~19.0.4 || ~19.1.5 || ~19.2.4 peerDependenciesMeta: + expo: + optional: true react-server-dom-webpack: optional: true @@ -5537,8 +5722,8 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} - lan-network@0.1.7: - resolution: {integrity: sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==} + lan-network@0.2.1: + resolution: {integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==} hasBin: true launch-editor@2.12.0: @@ -5763,62 +5948,120 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - metro-babel-transformer@0.83.3: - resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==} - engines: {node: '>=20.19.4'} + 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-babel-transformer@0.84.6: + resolution: {integrity: sha512-B1ozl6KxFHbQjXZ2U8WiTPWXylqiD3V4EXyV5r0fqETOrqIrJlBvbVTD82UxIN+B3Vpe4l8G1tb15ocd2RyOQA==} + 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-key@0.84.6: + resolution: {integrity: sha512-6tyXt1BZ/3U183XV48oif7Nm65TE+pTo0Vs31u4FxMgqiYQR/SiSr3RoXn3pmy4pd280ZmLmct0x3jZpu0pV4A==} + 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-cache@0.84.6: + resolution: {integrity: sha512-KBJVpb02oKNO+jlWQ1Aax7cd11YP0MClDaMgx6C4MhyZ9g95J/dC1Bo6sCzXaU9L9h/w5cQfT5zDkGW5sOj99A==} + 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-cache-key@0.83.3: - resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==} - engines: {node: '>=20.19.4'} + metro-config@0.84.6: + resolution: {integrity: sha512-cD2mLEofcuV26kxSV4hfV1Pbuh6igdUhYQriO8ZVeJ7HyZfq4/wqHV0gSR7fEO8NUp9odr60/Kzm5YakmghWwQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-cache@0.83.3: - resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==} - engines: {node: '>=20.19.4'} + 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-config@0.83.3: - resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==} - engines: {node: '>=20.19.4'} + metro-core@0.84.6: + resolution: {integrity: sha512-ZqYskM8+f3PFMosBDJd8DLqRvT1ltRGhWL/ZfTpBvf4SoadO30VVrdhAoHFVGz3G1CJpWa3fgZH7nnnX/ybllA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-core@0.83.3: - resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==} - engines: {node: '>=20.19.4'} + 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-file-map@0.83.3: - resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==} - engines: {node: '>=20.19.4'} + metro-file-map@0.84.6: + resolution: {integrity: sha512-ov9VywWBsHPt54Zc7/DxWvqjTwxuZvhfeyHg8ZAMGKtf2PcH1wS3EnoBH7In53Rspk/eXVWAO5+avxunPn081w==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-minify-terser@0.83.3: - resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==} - engines: {node: '>=20.19.4'} + 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.83.3: - resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==} - engines: {node: '>=20.19.4'} + metro-minify-terser@0.84.6: + resolution: {integrity: sha512-SqhB/Kxrw0XfyW0k8mEscqX/CQopm6Fp3EpdSIPzvKfGgQp9bTMahg9PAdVsXUmIWwErbmFw1VqB+VFBOKksUw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-runtime@0.83.3: - resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==} - engines: {node: '>=20.19.4'} + 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-source-map@0.83.3: - resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==} - engines: {node: '>=20.19.4'} + metro-resolver@0.84.6: + resolution: {integrity: sha512-PplpGc/OCLxgKeLNsLQO/VHsYDIvkcGGr3zNT7UanHCGRqhxKv245o+naV8cRI4/pcLqyc+9j+J0AJbT3Kp5Sg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro-symbolicate@0.83.3: - resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==} - engines: {node: '>=20.19.4'} + 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-runtime@0.84.6: + resolution: {integrity: sha512-47EYO/DOai0PA3GoAyDpyXOgHNMwbl/Z9dQlQineDLHkpD42xOwMrIx1crT0+n6F+aGoEyxZmeFwfMzaIqVqKQ==} + 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-source-map@0.84.6: + resolution: {integrity: sha512-4p/EplRbgNxhdqA6kAj1AmIq9qqYXYSAjgxuZ73rYA+p037xDDrxK8CyDKNfbn1k6aMuVt8LV0fpt7NHUTKiZw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + + 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.83.3: - resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==} - engines: {node: '>=20.19.4'} + metro-symbolicate@0.84.6: + resolution: {integrity: sha512-wJFyyF5ysbVyoYVWGL6GwVMiNnGllwDU2gF096376fl0fc8IFUlADSyNlswj31K9og2sOilXe/FdyWFPczPUYg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + hasBin: true + + 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-plugins@0.84.6: + resolution: {integrity: sha512-pROPMFaj25Y9+3LlLqpBRz/7B/2YPnfEQz/z3juYxkh3FGQ+3c/Qh4E+khPSTdwTw0M6LitLYHMqaHMbQmuBJw==} + 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-transform-worker@0.83.3: - resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==} - engines: {node: '>=20.19.4'} + metro-transform-worker@0.84.6: + resolution: {integrity: sha512-xLTVrOENaHR9DiuhnHS+zcle0rKsCy2CpXSIx7xD+zhJs+qVRNUyV7Z1zIt/0P/d0cSGVx846R+dIjHEudhcww==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} - metro@0.83.3: - resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==} - engines: {node: '>=20.19.4'} + 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 + + metro@0.84.6: + resolution: {integrity: sha512-ty/tx/imE5Ph2gvPU788Ckim6RAC2tyZxLz2hWRgC9U7/fGKV7qY/slADy0qHPEw9cpUgc4BfmV3oUsYwm7oeg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} hasBin: true mhchemparser@4.2.1: @@ -5844,6 +6087,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -5874,6 +6121,10 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -5896,10 +6147,6 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -5923,12 +6170,12 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multitars@1.0.2: + resolution: {integrity: sha512-6GwVw5eLi9sThdtlS4PKwC7yRLaf45pYhIEzKBHdKxi+YOXGKFX8acIniH+Uh/+k9mS2lQOupTccjoe5r0/1IQ==} + mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoclone@0.2.1: resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} @@ -5937,6 +6184,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} @@ -5956,12 +6208,13 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.1.0: + resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==} + engines: {node: '>=18'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nested-error-stacks@2.0.1: - resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} - nocache@3.0.4: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} engines: {node: '>=12.0.0'} @@ -6014,9 +6267,13 @@ packages: nwsapi@2.2.23: resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} - ob1@0.83.3: - resolution: {integrity: sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==} - engines: {node: '>=20.19.4'} + 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} + + ob1@0.84.6: + resolution: {integrity: sha512-+s+6zjd0X68hfAcn92NsEPXnSYOF3O7exw/Fj4UfRTB+UL+Tdjdkzu5/4WquXlzqgvNm8FWuuW6/0Yd8S2rYxw==} + 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==} @@ -6026,10 +6283,6 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -6250,10 +6503,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@3.0.1: - resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} - engines: {node: '>=10'} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -6294,8 +6543,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.3: @@ -6373,10 +6622,6 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qrcode-terminal@0.11.0: - resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} - hasBin: true - qs@6.14.1: resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} @@ -6394,9 +6639,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - randexp@0.5.3: resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==} engines: {node: '>=4'} @@ -6416,10 +6658,10 @@ packages: react-devtools-core@6.1.5: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: - react: ^19.1.0 + react: ^19.2.3 react-freeze@1.0.4: resolution: {integrity: sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==} @@ -6445,6 +6687,9 @@ packages: react-is@19.1.0: resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} + react-is@19.3.0: + resolution: {integrity: sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA==} + react-native-a11y-order@0.4.0: resolution: {integrity: sha512-qtx+cvHWcCKu2UukjuKLGAwMqTFWQG3LxblR7E2QBOjLlt204kk33vZHotGW+U7jvE+aikL7t/DcNNCwj05Kiw==} engines: {node: '>= 16.0.0'} @@ -6506,8 +6751,8 @@ packages: react: '*' react-native: '*' - react-native-gesture-handler@2.28.0: - resolution: {integrity: sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==} + react-native-gesture-handler@2.32.0: + resolution: {integrity: sha512-uYIMOKlKENORq2SABE+jIjbPU+h5I/sQKcq2v16zRq848nwEp1fWRVwML4QWqijc8UcXJC25o54S8GQd4Mf2OA==} peerDependencies: react: '*' react-native: '*' @@ -6530,6 +6775,12 @@ packages: react: '*' react-native: '*' + react-native-is-edge-to-edge@1.3.1: + resolution: {integrity: sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA==} + peerDependencies: + react: '*' + react-native: '*' + react-native-katex@https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1: resolution: {gitHosted: true, tarball: https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1} version: 1.3.0 @@ -6579,7 +6830,7 @@ packages: peerDependencies: react: '*' react-native: '*' - react-native-nitro-modules: '*' + react-native-nitro-modules: ^0.37.1 react-native-modal@13.0.1: resolution: {integrity: sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw==} @@ -6608,22 +6859,21 @@ packages: react-native-popover-view@5.1.7: resolution: {integrity: sha512-Xa+zKYp9x62UNezT8o9SnqQaBQEHdGwGHZnFnA2bsXLneVRvvlBopNwMNj+p7N65qnPf3mmzWj+57ThtM1qFuw==} - react-native-reanimated@4.1.3: - resolution: {integrity: sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg==} + react-native-reanimated@4.5.1: + resolution: {integrity: sha512-RnMvtDuR+68ig864gAvZCOdZehqhC5rFmMo0kn+ARfgVSTvFeF6IFLBVgMPUu0KwihaapEyW24WRi6nEyy1kSA==} peerDependencies: - '@babel/core': ^7.0.0-0 react: '*' - react-native: '*' - react-native-worklets: '>=0.5.0' + react-native: 0.83 - 0.86 + react-native-worklets: 0.10.x - react-native-safe-area-context@5.6.2: - resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==} + react-native-safe-area-context@5.7.0: + resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} peerDependencies: react: '*' react-native: '*' - react-native-screens@4.17.1: - resolution: {integrity: sha512-hGArs1kzsokvwxq98vluGlprUw3Q95zEjvZ3U2q28FmvLy25e6jxMclEkgxNtJ0GVJ2gWcFRTXON0EIVvUEd+A==} + react-native-screens@4.26.2: + resolution: {integrity: sha512-2XnWsZToKj76trGtEZzx5ELD/qOICFEprEeUntImmitQFVUkea27fiWdUSITArI356Y1qynpXZINW+Unbhky/A==} peerDependencies: react: '*' react-native: '*' @@ -6636,8 +6886,8 @@ packages: react-native: '>=0.50.1' react-native-linear-gradient: ^2.5.6 - react-native-svg@15.12.1: - resolution: {integrity: sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==} + react-native-svg@15.15.4: + resolution: {integrity: sha512-boT/vIRgj6zZKBpfTPJJiYWMbZE9duBMOwPK6kCSTgxsS947IFMOq9OgIFkpWZTB7t229H24pDRkh3W9ZK/J1A==} peerDependencies: react: '*' react-native: '*' @@ -6658,21 +6908,25 @@ packages: react: '*' react-native: '*' - react-native-worklets@0.6.1: - resolution: {integrity: sha512-URca8l7c7Uog7gv4mcg9KILdJlnbvwdS5yfXQYf5TDkD2W1VY1sduEKrD+sA3lUPXH/TG1vmXAvNxCNwPMYgGg==} + react-native-worklets@0.10.1: + resolution: {integrity: sha512-62mRM19bDpfpdI8HLkEErcdOsrAPDtE9lA/sw+5lLRpzBHNhxaoj9QyY2KjXqUmirelxkX4zuPGTC3VdA0feJA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': '*' + '@react-native/metro-config': '*' react: '*' - react-native: '*' + react-native: 0.83 - 0.86 - react-native@0.81.5: - resolution: {integrity: sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==} - engines: {node: '>= 20.19.4'} + 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: - '@types/react': ^19.1.0 - react: ^19.1.0 + '@react-native/jest-preset': 0.86.3 + '@types/react': ^19.1.1 + react: ^19.2.3 peerDependenciesMeta: + '@react-native/jest-preset': + optional: true '@types/react': optional: true @@ -6701,13 +6955,13 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-test-renderer@19.1.0: - resolution: {integrity: sha512-jXkSl3CpvPYEF+p/eGDLB4sPoDX8pKkYvRl9+rR8HxLY0X04vW7hCm1/0zHoUSjPZ3bDa+wXWNTDVIw/R8aDVw==} + react-test-renderer@19.2.3: + resolution: {integrity: sha512-TMR1LnSFiWZMJkCgNf5ATSvAheTT2NvKIwiVwdBPHxjBI7n/JbWd4gaZ16DVd9foAXdvDz+sB5yxZTwMjPRxpw==} peerDependencies: - react: ^19.1.0 + react: ^19.2.3 - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} read-pkg-up@7.0.1: @@ -6798,10 +7052,6 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireg@0.2.2: - resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} - engines: {node: '>= 4.0.0'} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -6823,10 +7073,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -6842,9 +7088,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@1.7.1: - resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} - restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} @@ -6894,6 +7137,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 + sax@1.4.3: resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} @@ -6901,8 +7149,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} schema-utils@4.3.3: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} @@ -6921,11 +7169,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -7235,11 +7478,6 @@ packages: structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - superstruct@2.0.2: resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} engines: {node: '>=14.0.0'} @@ -7271,6 +7509,10 @@ packages: resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} engines: {node: '>=8.0.0'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -7288,15 +7530,6 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.2: - resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} - engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} @@ -7332,13 +7565,6 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} @@ -7392,6 +7618,9 @@ packages: toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + toqr@0.1.1: + resolution: {integrity: sha512-FWAPzCIHZHnrE/5/w9MPk0kK25hSQSH2IKhYh9PyjS3SG/+IEMvlwIHbhz+oF7xl54I+ueZlVnMjyzdSwLmAwA==} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -7412,9 +7641,6 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -7456,6 +7682,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@5.9.0: + resolution: {integrity: sha512-yANm3Jr3GiJ1qgJlxGAVxTOIcEOk1rhQHamlXtnrCK7EHP4HeM9OGxtMg/W7HFdrVzw/ZWJKGVIJusVH85sLtw==} + engines: {node: '>=20'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -7503,7 +7733,7 @@ packages: resolution: {integrity: sha512-eLIKd0KHZtSvbsA+FYwX+Y0ZBt0BwVGz3GgODQX+6GfGL4DOzKW02LEx62oUZg6vCQX1BL5xyiPXAIdW+Hc51g==} hasBin: true peerDependencies: - typescript: '>=4.8.0 <5.10.0' + typescript: 7.0.2 typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} @@ -7524,10 +7754,6 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@6.22.0: - resolution: {integrity: sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==} - engines: {node: '>=18.17'} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -7544,10 +7770,6 @@ packages: resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} - unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - universal-websocket-client@1.0.3: resolution: {integrity: sha512-ZQF2hSasp4IM7Y3E+IAkA40c6kclsfhpligALvnuecEnU1dTJQZ5XlgXWLt3C8+uizDw5x48kCMBDPnLg/EVzA==} @@ -7699,6 +7921,9 @@ packages: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + whatwg-url-minimum@0.1.2: + resolution: {integrity: sha512-XPEm0XFQWNVG292lII1PrRRJl3sItrs7CettZ4ncYxuDVpLyy+NwlGyut2hXI0JswcJUxeCH+CyOJK0ZzAXD6A==} + whatwg-url-without-unicode@8.0.0-3: resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==} engines: {node: '>=10'} @@ -7734,9 +7959,6 @@ packages: wicked-good-xpath@1.3.0: resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==} - wonka@6.3.5: - resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -7846,10 +8068,6 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -7887,6 +8105,9 @@ packages: resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} engines: {node: '>=10'} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zustand@5.0.12: resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} engines: {node: '>=12.20.0'} @@ -7905,9 +8126,12 @@ packages: use-sync-external-store: optional: true -snapshots: + zxing-wasm@3.1.3: + resolution: {integrity: sha512-3lC9BJk4fR5ZJxcGjb0hVnDFOW7KpLXHIebiBmVd4FDRQZVeObztoTKxRUPxlWwSgxrMRONK0u50hBD1aTYEKg==} + peerDependencies: + '@types/emscripten': '>=1.39.6' - '@0no-co/graphql.web@1.2.0': {} +snapshots: '@adobe/css-tools@4.4.4': {} @@ -7926,8 +8150,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.29.0': {} + '@babel/compat-data@7.29.7': {} + '@babel/core@7.25.9': dependencies: '@ampproject/remapping': 2.3.0 @@ -7948,6 +8180,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.29.1': dependencies: '@babel/parser': 7.29.2 @@ -7956,10 +8208,22 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/generator@7.29.8': + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.27.3': dependencies: '@babel/types': 7.29.0 + '@babel/helper-annotate-as-pure@7.29.7': + dependencies: + '@babel/types': 7.29.8 + '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.0 @@ -7968,29 +8232,37 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.25.9)': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/core': 7.25.9 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.25.9) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.29.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.25.9)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.25.9)': + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 debug: 4.4.3 @@ -8001,6 +8273,8 @@ snapshots: '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} + '@babel/helper-member-expression-to-functions@7.28.5': dependencies: '@babel/traverse': 7.29.0 @@ -8015,6 +8289,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 @@ -8024,24 +8305,44 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.25.9)': + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.25.9)': + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.29.0 @@ -8057,10 +8358,16 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-option@7.29.7': {} + '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.28.6 @@ -8074,6 +8381,11 @@ snapshots: '@babel/template': 7.28.6 '@babel/types': 7.29.0 + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + '@babel/highlight@7.25.9': dependencies: '@babel/helper-validator-identifier': 7.28.5 @@ -8085,102 +8397,126 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.9)': + '@babel/parser@7.29.8': dependencies: - '@babel/core': 7.25.9 + '@babel/types': 7.29.8 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.25.9) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.25.9) + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.9)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.9)': + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-export-default-from@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-syntax-export-default-from@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-syntax-flow@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.25.9)': @@ -8188,226 +8524,296 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.25.9)': dependencies: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.9)': + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.25.9)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.25.9) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.7) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.25.9) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.25.9) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.25.9)': + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.25.9) + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color @@ -8420,328 +8826,335 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.25.9)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.25.9) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.25.9) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.25.9) + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.25.9)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.25.9)': + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.25.9) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.7) '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/types': 7.29.8 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.25.9)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.25.9)': + '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.25.9) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.25.9) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.25.9) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.25.9)': + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.25.9) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.25.9) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.25.9)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.9)': + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.25.9(@babel/core@7.25.9)': + '@babel/preset-env@7.25.9(@babel/core@7.29.7)': dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.9) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.9) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.25.9) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.25.9) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.25.9) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.25.9) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.25.9) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.9) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.25.9) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.9) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.25.9) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.29.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.29.7) core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.9)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/preset-react@7.28.5(@babel/core@7.25.9)': + '@babel/preset-typescript@7.28.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.25.9) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.25.9) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.28.5(@babel/core@7.25.9)': - dependencies: - '@babel/core': 7.25.9 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.25.9) + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -8765,6 +9178,12 @@ snapshots: '@babel/parser': 7.29.2 '@babel/types': 7.29.0 + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 @@ -8777,11 +9196,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.8': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} '@bugsnag/cli@3.5.1': @@ -8986,32 +9422,34 @@ snapshots: '@eslint/js@8.57.1': {} - '@expo/cli@54.0.20(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))': + '@expo/cli@57.0.25(@expo/dom-webview@57.0.1)(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo@57.0.23)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': dependencies: - '@0no-co/graphql.web': 1.2.0 - '@expo/code-signing-certificates': 0.0.5 - '@expo/config': 12.0.13 - '@expo/config-plugins': 54.0.4 + '@expo/code-signing-certificates': 0.0.6 + '@expo/config': 57.0.9(typescript@7.0.2) + '@expo/config-plugins': 57.0.9(typescript@7.0.2) '@expo/devcert': 1.2.1 - '@expo/env': 2.0.8 - '@expo/image-utils': 0.8.8 - '@expo/json-file': 10.0.8 - '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) - '@expo/osascript': 2.3.8 - '@expo/package-manager': 1.9.9 - '@expo/plist': 0.4.8 - '@expo/prebuild-config': 54.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) - '@expo/schema-utils': 0.1.8 - '@expo/spawn-async': 1.7.2 - '@expo/ws-tunnel': 1.0.6 - '@expo/xcpretty': 4.3.2 - '@react-native/dev-middleware': 0.81.5 - '@urql/core': 5.2.0 - '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0) + '@expo/env': 2.4.3 + '@expo/image-utils': 0.11.5(typescript@7.0.2) + '@expo/inline-modules': 0.1.7(typescript@7.0.2) + '@expo/json-file': 11.0.1 + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@expo/metro': 56.0.2 + '@expo/metro-config': 57.0.12(expo@57.0.23)(typescript@7.0.2) + '@expo/metro-file-map': 57.0.3 + '@expo/osascript': 2.7.1 + '@expo/package-manager': 1.13.1 + '@expo/plist': 0.8.1 + '@expo/prebuild-config': 57.0.16(typescript@7.0.2) + '@expo/require-utils': 57.0.5(typescript@7.0.2) + '@expo/router-server': 57.0.10(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo-server@57.0.3)(expo@57.0.23)(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.18.3) + '@expo/xcpretty': 4.4.5 + '@react-native/dev-middleware': 0.86.3 accepts: 1.3.8 + agent-cli-detector: 0.1.7 arg: 5.0.2 - better-opn: 3.0.2 bplist-creator: 0.1.0 bplist-parser: 0.3.2 chalk: 4.1.2 @@ -9019,51 +9457,51 @@ snapshots: compression: 1.8.1 connect: 3.7.0 debug: 4.4.3 - env-editor: 0.4.2 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-server: 1.0.5 - freeport-async: 2.0.0 + dnssd-advertise: 1.1.6 + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo-server: 57.0.3 + fetch-nodeshim: 0.4.10 getenv: 2.0.0 glob: 13.0.0 - lan-network: 0.1.7 - minimatch: 9.0.5 + lan-network: 0.2.1 + multitars: 1.0.2 node-forge: 1.3.3 npm-package-arg: 11.0.3 ora: 3.4.0 - picomatch: 3.0.1 - pretty-bytes: 5.6.0 + picomatch: 4.0.5 pretty-format: 29.7.0 progress: 2.0.3 prompts: 2.4.2 - qrcode-terminal: 0.11.0 - require-from-string: 2.0.2 - requireg: 0.2.2 - resolve: 1.22.11 resolve-from: 5.0.0 - resolve.exports: 2.0.3 + sandbox-cli-detector: 0.2.0 semver: 7.7.4 send: 0.19.2 slugify: 1.6.6 - source-map-support: 0.5.21 stacktrace-parser: 0.1.11 structured-headers: 0.4.1 - tar: 7.5.2 terminal-link: 2.1.1 - undici: 6.22.0 + toqr: 0.1.1 wrap-ansi: 7.0.0 ws: 8.18.3 + zod: 3.25.76 optionalDependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: + - '@expo/dom-webview' + - '@expo/metro-runtime' - bufferutil - - graphql + - expo-constants + - expo-font + - react + - react-dom + - react-server-dom-webpack - supports-color + - typescript - utf-8-validate - '@expo/code-signing-certificates@0.0.5': + '@expo/code-signing-certificates@0.0.6': dependencies: node-forge: 1.3.3 - nullthrows: 1.1.1 '@expo/config-plugins@10.1.2': dependencies: @@ -9084,46 +9522,44 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/config-plugins@54.0.4': + '@expo/config-plugins@57.0.9(typescript@7.0.2)': dependencies: - '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.8 - '@expo/plist': 0.4.8 + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/plist': 0.8.1 + '@expo/require-utils': 57.0.5(typescript@7.0.2) '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.3 getenv: 2.0.0 glob: 13.0.0 - resolve-from: 5.0.0 semver: 7.7.4 - slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 xml2js: 0.6.0 transitivePeerDependencies: - supports-color + - typescript '@expo/config-types@53.0.5': {} - '@expo/config-types@54.0.10': {} + '@expo/config-types@57.0.2': {} - '@expo/config@12.0.13': + '@expo/config@57.0.9(typescript@7.0.2)': dependencies: - '@babel/code-frame': 7.10.4 - '@expo/config-plugins': 54.0.4 - '@expo/config-types': 54.0.10 - '@expo/json-file': 10.0.8 + '@expo/config-plugins': 57.0.9(typescript@7.0.2) + '@expo/config-types': 57.0.2 + '@expo/json-file': 11.0.1 + '@expo/require-utils': 57.0.5(typescript@7.0.2) deepmerge: 4.3.1 getenv: 2.0.0 glob: 13.0.0 - require-from-string: 2.0.2 - resolve-from: 5.0.0 resolve-workspace-root: 2.0.0 semver: 7.7.4 slugify: 1.6.6 - sucrase: 3.35.1 transitivePeerDependencies: - supports-color + - typescript '@expo/devcert@1.2.1': dependencies: @@ -9132,55 +9568,68 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@0.1.8(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/devtools@57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: chalk: 4.1.2 optionalDependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@expo/env@2.0.8': + '@expo/dom-webview@57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': + dependencies: + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + + '@expo/env@2.4.3': dependencies: chalk: 4.1.2 debug: 4.4.3 - dotenv: 16.4.7 - dotenv-expand: 11.0.7 getenv: 2.0.0 transitivePeerDependencies: - supports-color - '@expo/fingerprint@0.15.4': + '@expo/expo-modules-macros-plugin@0.6.1': {} + + '@expo/fingerprint@0.20.13': dependencies: - '@expo/spawn-async': 1.7.2 + '@expo/env': 2.4.3 + '@expo/spawn-async': 1.8.0 arg: 5.0.2 chalk: 4.1.2 debug: 4.4.3 getenv: 2.0.0 glob: 13.0.0 ignore: 5.3.2 - minimatch: 9.0.5 - p-limit: 3.1.0 + minimatch: 10.2.6 resolve-from: 5.0.0 semver: 7.7.4 transitivePeerDependencies: - supports-color - '@expo/image-utils@0.8.8': + '@expo/image-utils@0.11.5(typescript@7.0.2)': dependencies: - '@expo/spawn-async': 1.7.2 + '@expo/require-utils': 57.0.5(typescript@7.0.2) + '@expo/spawn-async': 1.8.0 chalk: 4.1.2 getenv: 2.0.0 jimp-compact: 0.16.1 parse-png: 2.1.0 - resolve-from: 5.0.0 - resolve-global: 1.0.0 semver: 7.7.4 - temp-dir: 2.0.0 - unique-string: 2.0.0 + transitivePeerDependencies: + - supports-color + - typescript - '@expo/json-file@10.0.8': + '@expo/inline-modules@0.1.7(typescript@7.0.2)': dependencies: - '@babel/code-frame': 7.10.4 + '@expo/config-plugins': 57.0.9(typescript@7.0.2) + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/json-file@11.0.1': + dependencies: + '@babel/code-frame': 7.29.0 json5: 2.2.3 '@expo/json-file@9.1.5': @@ -9188,66 +9637,96 @@ snapshots: '@babel/code-frame': 7.10.4 json5: 2.2.3 - '@expo/metro-config@54.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))': + '@expo/local-build-cache-provider@57.0.8(typescript@7.0.2)': + dependencies: + '@expo/config': 57.0.9(typescript@7.0.2) + chalk: 4.1.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/log-box@57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': + dependencies: + '@expo/dom-webview': 57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + anser: 1.4.10 + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + stacktrace-parser: 0.1.11 + + '@expo/metro-config@57.0.12(expo@57.0.23)(typescript@7.0.2)': dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.25.9 '@babel/generator': 7.29.1 - '@expo/config': 12.0.13 - '@expo/env': 2.0.8 - '@expo/json-file': 10.0.8 - '@expo/metro': 54.2.0 - '@expo/spawn-async': 1.7.2 + '@expo/config': 57.0.9(typescript@7.0.2) + '@expo/env': 2.4.3 + '@expo/json-file': 11.0.1 + '@expo/metro': 56.0.2 + '@expo/require-utils': 57.0.5(typescript@7.0.2) + '@expo/spawn-async': 1.8.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 browserslist: 4.28.1 chalk: 4.1.2 debug: 4.4.3 - dotenv: 16.4.7 - dotenv-expand: 11.0.7 getenv: 2.0.0 glob: 13.0.0 - hermes-parser: 0.29.1 + hermes-parser: 0.36.1 jsc-safe-url: 0.2.4 lightningcss: 1.30.2 - minimatch: 9.0.5 - postcss: 8.4.49 + picomatch: 4.0.5 + postcss: 8.5.28 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) transitivePeerDependencies: - bufferutil - supports-color + - typescript - utf-8-validate - '@expo/metro@54.2.0': - dependencies: - metro: 0.83.3 - metro-babel-transformer: 0.83.3 - metro-cache: 0.83.3 - metro-cache-key: 0.83.3 - metro-config: 0.83.3 - metro-core: 0.83.3 - metro-file-map: 0.83.3 - metro-minify-terser: 0.83.3 - metro-resolver: 0.83.3 - metro-runtime: 0.83.3 - metro-source-map: 0.83.3 - metro-symbolicate: 0.83.3 - metro-transform-plugins: 0.83.3 - metro-transform-worker: 0.83.3 + '@expo/metro-file-map@57.0.3': + dependencies: + debug: 4.4.3 + fb-watchman: 2.0.2 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + + '@expo/metro@56.0.2': + dependencies: + metro: 0.84.5 + metro-babel-transformer: 0.84.5 + metro-cache: 0.84.5 + metro-cache-key: 0.84.5 + metro-config: 0.84.5 + 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 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/osascript@2.3.8': + '@expo/osascript@2.7.1': dependencies: - '@expo/spawn-async': 1.7.2 - exec-async: 2.2.0 + '@expo/spawn-async': 1.8.0 - '@expo/package-manager@1.9.9': + '@expo/package-manager@1.13.1': dependencies: - '@expo/json-file': 10.0.8 - '@expo/spawn-async': 1.7.2 + '@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 @@ -9259,51 +9738,75 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/plist@0.4.8': + '@expo/plist@0.8.1': dependencies: '@xmldom/xmldom': 0.8.11 base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@54.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))': + '@expo/prebuild-config@57.0.16(typescript@7.0.2)': dependencies: - '@expo/config': 12.0.13 - '@expo/config-plugins': 54.0.4 - '@expo/config-types': 54.0.10 - '@expo/image-utils': 0.8.8 - '@expo/json-file': 10.0.8 - '@react-native/normalize-colors': 0.81.5 + '@expo/config': 57.0.9(typescript@7.0.2) + '@expo/config-plugins': 57.0.9(typescript@7.0.2) + '@expo/config-types': 57.0.2 + '@expo/image-utils': 0.11.5(typescript@7.0.2) + '@expo/json-file': 11.0.1 + '@react-native/normalize-colors': 0.86.3 debug: 4.4.3 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-modules-autolinking: 57.0.13(typescript@7.0.2) resolve-from: 5.0.0 semver: 7.7.4 - xml2js: 0.6.0 transitivePeerDependencies: - supports-color + - typescript - '@expo/schema-utils@0.1.8': {} + '@expo/require-utils@57.0.5(typescript@7.0.2)': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.25.9 + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.25.9) + optionalDependencies: + typescript: 7.0.2 + transitivePeerDependencies: + - supports-color + + '@expo/router-server@57.0.10(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo-server@57.0.3)(expo@57.0.23)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + debug: 4.4.3 + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) + expo-font: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + expo-server: 57.0.3 + react: 19.2.3 + optionalDependencies: + react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - supports-color + + '@expo/schema-utils@57.0.2': {} '@expo/sdk-runtime-versions@1.0.0': {} - '@expo/spawn-async@1.7.2': + '@expo/spawn-async@1.8.0': dependencies: cross-spawn: 7.0.6 '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@15.0.3(expo-font@14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/vector-icons@15.0.3(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - expo-font: 14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo-font: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@expo/ws-tunnel@1.0.6': {} + '@expo/ws-tunnel@2.0.0(ws@8.18.3)': + dependencies: + ws: 8.18.3 - '@expo/xcpretty@4.3.2': + '@expo/xcpretty@4.4.5': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.29.0 chalk: 4.1.2 - find-up: 5.0.0 js-yaml: 4.1.1 '@firebase/analytics-compat@0.2.17(@firebase/app-compat@0.2.50)(@firebase/app@0.11.1)': @@ -9370,10 +9873,10 @@ snapshots: idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.5.18(@firebase/app-compat@0.2.50)(@firebase/app-types@0.9.3)(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))': + '@firebase/auth-compat@0.5.18(@firebase/app-compat@0.2.50)(@firebase/app-types@0.9.3)(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))': dependencies: '@firebase/app-compat': 0.2.50 - '@firebase/auth': 1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))) + '@firebase/auth': 1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))) '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.10.3) '@firebase/component': 0.6.12 '@firebase/util': 1.10.3 @@ -9390,7 +9893,7 @@ snapshots: '@firebase/app-types': 0.9.3 '@firebase/util': 1.10.3 - '@firebase/auth@1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))': + '@firebase/auth@1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))': dependencies: '@firebase/app': 0.11.1 '@firebase/component': 0.6.12 @@ -9398,7 +9901,7 @@ snapshots: '@firebase/util': 1.10.3 tslib: 2.8.1 optionalDependencies: - '@react-native-async-storage/async-storage': 2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + '@react-native-async-storage/async-storage': 2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) '@firebase/component@0.6.12': dependencies: @@ -9626,22 +10129,22 @@ snapshots: '@firebase/webchannel-wrapper@1.0.3': {} - '@gorhom/bottom-sheet@5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@gorhom/bottom-sheet@5.2.8(9928f68f03a282f377b2614cb23deb76)': dependencies: - '@gorhom/portal': 1.0.14(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@gorhom/portal': 1.0.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) optionalDependencies: - '@types/react': 19.1.17 + '@types/react': 19.2.18 - '@gorhom/portal@1.0.14(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@gorhom/portal@1.0.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: nanoid: 3.3.11 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) '@grpc/grpc-js@1.9.15': dependencies: @@ -9661,9 +10164,9 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@hookform/resolvers@2.9.11(react-hook-form@7.34.2(react@19.1.0))': + '@hookform/resolvers@2.9.11(react-hook-form@7.34.2(react@19.2.3))': dependencies: - react-hook-form: 7.34.2(react@19.1.0) + react-hook-form: 7.34.2(react@19.2.3) '@humanwhocodes/config-array@0.13.0': dependencies: @@ -9677,8 +10180,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ide/backoff@1.0.0': {} - '@inquirer/external-editor@1.0.3(@types/node@25.0.3)': dependencies: chardet: 2.1.1 @@ -9701,10 +10202,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - '@isaacs/ttlcache@1.4.1': {} '@istanbuljs/load-nyc-config@1.1.0': @@ -9896,6 +10393,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -9910,21 +10412,21 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lodev09/react-native-true-sheet@3.7.3(261280a80c394a7dcf8d9609d62c37ca)': + '@lodev09/react-native-true-sheet@3.7.3(b217ab5bd6345e9949a4a395c898a850)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-worklets: 0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@magrinj/expo-quick-look@0.4.0(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@magrinj/expo-quick-look@0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) '@napi-rs/wasm-runtime@0.2.12': dependencies: @@ -10103,19 +10605,19 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))': + '@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))': dependencies: merge-options: 3.0.4 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-camera-roll/camera-roll@7.10.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))': + '@react-native-camera-roll/camera-roll@7.10.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))': dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-clipboard/clipboard@1.16.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-clipboard/clipboard@1.16.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) '@react-native-community/cli-clean@20.0.0': dependencies: @@ -10273,134 +10775,181 @@ snapshots: - typescript - utf-8-validate - '@react-native-community/datetimepicker@8.4.4(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-community/datetimepicker@9.1.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - '@react-native-community/hooks@100.1.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-community/hooks@100.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-community/netinfo@11.4.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))': + '@react-native-community/netinfo@12.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-community/slider@5.0.1': {} + '@react-native-community/slider@5.2.0': {} - '@react-native-cookies/cookies@6.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))': + '@react-native-cookies/cookies@6.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))': dependencies: invariant: 2.2.4 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-firebase/analytics@21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))': + '@react-native-firebase/analytics@21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))': dependencies: - '@react-native-firebase/app': 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native-firebase/app': 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) superstruct: 2.0.2 - '@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - firebase: 11.3.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + firebase: 11.3.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - '@react-native-firebase/crashlytics@21.14.0(7f31d425d6e3bb1976dd842bb1e41e49)': + '@react-native-firebase/crashlytics@21.14.0(@react-native-firebase/app@21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo@57.0.23)': dependencies: - '@react-native-firebase/app': 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)))(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native-firebase/app': 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) stacktrace-js: 2.0.2 optionalDependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - '@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native-picker/picker@2.11.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native-picker/picker@2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@react-native/assets-registry@0.81.5': {} + '@react-native/assets-registry@0.86.3': {} - '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.25.9)': + '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.7)': dependencies: '@babel/traverse': 7.29.0 - '@react-native/codegen': 0.81.5(@babel/core@7.25.9) + '@react-native/codegen': 0.81.5(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' - supports-color - '@react-native/babel-preset@0.81.5(@babel/core@7.25.9)': + '@react-native/babel-plugin-codegen@0.86.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.9) - '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.9) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.25.9) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.25.9) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.25.9) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.25.9) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.25.9) - '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.25.9) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.25.9) + '@babel/traverse': 7.29.8 + '@react-native/codegen': 0.86.3(@babel/core@7.29.7) + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@react-native/babel-preset@0.81.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-proposal-export-default-from': 7.27.1(@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.27.1(@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-arrow-functions': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) '@babel/template': 7.28.6 - '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.25.9) + '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.29.7) babel-plugin-syntax-hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.25.9) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) + react-refresh: 0.14.2 + transitivePeerDependencies: + - supports-color + + '@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.27.1(@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.27.1(@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.0(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) + '@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.80.2(@babel/core@7.25.9)': + '@react-native/codegen@0.80.2(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 glob: 7.2.3 hermes-parser: 0.28.1 invariant: 2.2.4 nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/codegen@0.81.5(@babel/core@7.25.9)': + '@react-native/codegen@0.81.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 '@babel/parser': 7.29.2 glob: 7.2.3 hermes-parser: 0.29.1 @@ -10408,62 +10957,93 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.81.5(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))': + '@react-native/codegen@0.86.3(@babel/core@7.29.7)': dependencies: - '@react-native/dev-middleware': 0.81.5 + '@babel/core': 7.29.7 + '@babel/parser': 7.29.2 + hermes-parser: 0.36.0 + invariant: 2.2.4 + nullthrows: 1.1.1 + tinyglobby: 0.2.15 + yargs: 17.7.2 + + '@react-native/community-cli-plugin@0.86.3(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))': + dependencies: + '@react-native/dev-middleware': 0.86.3 debug: 4.4.3 invariant: 2.2.4 - metro: 0.83.3 - metro-config: 0.83.3 - metro-core: 0.83.3 + metro: 0.84.6 + metro-config: 0.84.6 + metro-core: 0.84.6 semver: 7.5.2 optionalDependencies: '@react-native-community/cli': 20.0.0(typescript@7.0.2) - '@react-native/metro-config': 0.81.5(@babel/core@7.25.9) + '@react-native/metro-config': 0.86.3(@babel/core@7.29.7) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.81.5': {} + '@react-native/debugger-frontend@0.86.3': {} - '@react-native/dev-middleware@0.81.5': + '@react-native/debugger-shell@0.86.3': + dependencies: + cross-spawn: 7.0.6 + debug: 4.4.3 + fb-dotslash: 0.5.8 + transitivePeerDependencies: + - supports-color + + '@react-native/dev-middleware@0.86.3': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.81.5 + '@react-native/debugger-frontend': 0.86.3 + '@react-native/debugger-shell': 0.86.3 chrome-launcher: 0.15.2 - chromium-edge-launcher: 0.2.0 + chromium-edge-launcher: 0.3.0 connect: 3.7.0 debug: 4.4.3 invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 serve-static: 1.16.3 - ws: 6.2.3 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.81.5': {} + '@react-native/gradle-plugin@0.86.3': {} - '@react-native/js-polyfills@0.81.5': {} + '@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3)': + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native/js-polyfills': 0.86.3 + babel-jest: 29.7.0(@babel/core@7.29.7) + jest-environment-node: 29.7.0 + react: 19.2.3 + regenerator-runtime: 0.13.11 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@react-native/js-polyfills@0.86.3': {} - '@react-native/metro-babel-transformer@0.81.5(@babel/core@7.25.9)': + '@react-native/metro-babel-transformer@0.86.3(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.25.9 - '@react-native/babel-preset': 0.81.5(@babel/core@7.25.9) - hermes-parser: 0.29.1 + '@babel/core': 7.29.7 + '@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.81.5(@babel/core@7.25.9)': + '@react-native/metro-config@0.86.3(@babel/core@7.29.7)': dependencies: - '@react-native/js-polyfills': 0.81.5 - '@react-native/metro-babel-transformer': 0.81.5(@babel/core@7.25.9) - metro-config: 0.83.3 - metro-runtime: 0.83.3 + '@react-native/js-polyfills': 0.86.3 + '@react-native/metro-babel-transformer': 0.86.3(@babel/core@7.29.7) + metro-config: 0.84.6 + metro-runtime: 0.84.6 transitivePeerDependencies: - '@babel/core' - bufferutil @@ -10472,83 +11052,83 @@ snapshots: '@react-native/normalize-color@2.1.0': {} - '@react-native/normalize-colors@0.81.5': {} + '@react-native/normalize-colors@0.86.3': {} '@react-native/typescript-config@0.81.5': {} - '@react-native/virtualized-lists@0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native/virtualized-lists@0.86.3(@types/react@19.2.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - '@types/react': 19.1.17 + '@types/react': 19.2.18 - '@react-navigation/core@7.21.1(react@19.1.0)': + '@react-navigation/core@7.21.1(react@19.2.3)': dependencies: '@react-navigation/routers': 7.6.0 escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 query-string: 7.1.3 - react: 19.1.0 + react: 19.2.3 react-is: 19.1.0 - use-latest-callback: 0.2.6(react@19.1.0) - use-sync-external-store: 1.6.0(react@19.1.0) + use-latest-callback: 0.2.6(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.12.2(1791ab06baac4955f4dd8054e3baaac6)': + '@react-navigation/drawer@7.12.2(568a64fb44ad70e6f0b55611752f41f8)': dependencies: - '@react-navigation/elements': 2.9.25(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@react-navigation/native@7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) + '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-drawer-layout: 4.2.5(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-screens: 4.17.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - use-latest-callback: 0.2.6(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-drawer-layout: 4.2.5(641d271507e632f6b7f49ee76b960c3d) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + use-latest-callback: 0.2.6(react@19.2.3) transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/elements@2.9.25(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@react-navigation/native@7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/elements@2.9.25(94b93b3be2a5aeeeacd03698514a6eb6)': dependencies: - '@react-navigation/native': 7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - use-latest-callback: 0.2.6(react@19.1.0) - use-sync-external-store: 1.6.0(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack@7.17.5(5d5d774b9c7e992721e68b3dbd486565)': + '@react-navigation/native-stack@7.17.5(b9b07f1e05b03fd68f5bb004ad12b8b4)': dependencies: - '@react-navigation/elements': 2.9.25(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(@react-navigation/native@7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.3.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) + '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-screens: 4.17.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/native@7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - '@react-navigation/core': 7.21.1(react@19.1.0) + '@react-navigation/core': 7.21.1(react@19.2.3) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) standard-navigation: 0.0.7 - use-latest-callback: 0.2.6(react@19.1.0) + use-latest-callback: 0.2.6(react@19.2.3) '@react-navigation/routers@7.6.0': dependencies: @@ -10592,10 +11172,10 @@ snapshots: dependencies: tldts: 6.1.86 - '@rocket.chat/mobile-crypto@https://codeload.github.com/RocketChat/rocket.chat-mobile-crypto/tar.gz/69a0a250dd7c6ff0808eb659d7202be1cae7fa1c(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@rocket.chat/mobile-crypto@https://codeload.github.com/RocketChat/rocket.chat-mobile-crypto/tar.gz/69a0a250dd7c6ff0808eb659d7202be1cae7fa1c(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) '@rocket.chat/sdk@https://codeload.github.com/RocketChat/Rocket.Chat.js.SDK/tar.gz/ecf4fedcf8ab6121e62a6b95bb48823afd805afd': dependencies: @@ -10643,34 +11223,34 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/react-dom-shim@9.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))': + '@storybook/react-dom-shim@9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) - '@storybook/react-dom-shim@9.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))': + '@storybook/react-dom-shim@9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) - '@storybook/react-native-theming@9.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@storybook/react-native-theming@9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: polished: 4.3.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - '@storybook/react-native-ui-common@9.1.4(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': + '@storybook/react-native-ui-common@9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': dependencies: - '@storybook/react': 9.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) - '@storybook/react-native-theming': 9.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) es-toolkit: 1.43.0 fuse.js: 7.1.0 memoizerific: 1.11.3 polished: 4.3.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) store2: 2.14.4 storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) ts-dedent: 2.2.0 @@ -10678,51 +11258,51 @@ snapshots: - react-dom - typescript - '@storybook/react-native-ui@9.1.4(ebecaf8f8fcf1df6c542e15e1e29e0ad)': + '@storybook/react-native-ui@9.1.4(ec70a72c944b256777781574cc6aeff6)': dependencies: - '@gorhom/bottom-sheet': 5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@storybook/react': 9.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) - '@storybook/react-native-theming': 9.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@storybook/react-native-ui-common': 9.1.4(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) es-toolkit: 1.43.0 fuse.js: 7.1.0 memoizerific: 1.11.3 polished: 4.3.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-svg: 15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) store2: 2.14.4 storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) transitivePeerDependencies: - react-dom - typescript - '@storybook/react-native@9.0.18(b3c380f041753120db9b4b839e8df819)': + '@storybook/react-native@9.0.18(03fc32bb656def7817eec6786e023d85)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react': 9.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) - '@storybook/react-native-theming': 9.1.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@storybook/react-native-ui': 9.1.4(ebecaf8f8fcf1df6c542e15e1e29e0ad) - '@storybook/react-native-ui-common': 9.1.4(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + '@storybook/react': 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) + '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@storybook/react-native-ui': 9.1.4(ec70a72c944b256777781574cc6aeff6) + '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) commander: 8.3.0 dedent: 1.6.0(babel-plugin-macros@3.1.0) deepmerge: 4.3.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-url-polyfill: 2.0.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-url-polyfill: 2.0.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) setimmediate: 1.0.5 storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) type-fest: 2.19.0 util: 0.12.5 ws: 8.18.3 optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - babel-plugin-macros - bufferutil @@ -10731,29 +11311,29 @@ snapshots: - typescript - utf-8-validate - '@storybook/react@9.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': + '@storybook/react@9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.0.18(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@storybook/react-dom-shim': 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4)) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) optionalDependencies: typescript: 7.0.2 - '@storybook/react@9.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': + '@storybook/react@9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.1.17(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4)) - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + '@storybook/react-dom-shim': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4)) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) optionalDependencies: typescript: 7.0.2 '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/runtime': 7.25.9 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -10771,14 +11351,14 @@ snapshots: picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: jest-matcher-utils: 30.2.0 picocolors: 1.1.1 pretty-format: 30.2.0 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-test-renderer: 19.1.0(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-test-renderer: 19.2.3(react@19.2.3) redent: 3.0.0 optionalDependencies: jest: 29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0) @@ -10831,6 +11411,8 @@ snapshots: '@types/ejson@2.2.2': {} + '@types/emscripten@1.41.6': {} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -10853,9 +11435,9 @@ snapshots: dependencies: '@types/unist': 2.0.11 - '@types/hoist-non-react-statics@3.3.7(@types/react@19.1.17)': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.18)': dependencies: - '@types/react': 19.1.17 + '@types/react': 19.2.18 hoist-non-react-statics: 3.3.2 '@types/i18n-js@3.8.3': {} @@ -10905,13 +11487,17 @@ snapshots: '@types/prop-types@15.7.15': {} + '@types/react-test-renderer@19.3.0': + dependencies: + '@types/react': 19.2.18 + '@types/react@17.0.90': dependencies: '@types/prop-types': 15.7.15 '@types/scheduler': 0.16.8 csstype: 3.2.3 - '@types/react@19.1.17': + '@types/react@19.2.18': dependencies: csstype: 3.2.3 @@ -11058,18 +11644,6 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@urql/core@5.2.0': - dependencies: - '@0no-co/graphql.web': 1.2.0 - wonka: 6.3.5 - transitivePeerDependencies: - - graphql - - '@urql/exchange-retry@1.3.2(@urql/core@5.2.0)': - dependencies: - '@urql/core': 5.2.0 - wonka: 6.3.5 - '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.3 @@ -11180,10 +11754,10 @@ snapshots: '@yarnpkg/lockfile@1.1.0': {} - '@zoontek/react-native-navigation-bar@1.1.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@zoontek/react-native-navigation-bar@1.1.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) abab@2.0.6: {} @@ -11196,6 +11770,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.1.0 + acorn-globals@7.0.1: dependencies: acorn: 8.16.0 @@ -11223,6 +11802,8 @@ snapshots: agent-base@7.1.4: {} + agent-cli-detector@0.1.7: {} + ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 @@ -11278,8 +11859,6 @@ snapshots: ansi-styles@6.2.3: {} - any-promise@1.3.0: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -11365,14 +11944,6 @@ snapshots: asap@2.0.6: {} - assert@2.1.0: - dependencies: - call-bind: 1.0.8 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.7 - util: 0.12.5 - assertion-error@2.0.1: {} ast-types@0.16.1: @@ -11415,9 +11986,22 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.1.3(@babel/core@7.25.9)(webpack@5.106.2(esbuild@0.25.12)): + babel-jest@29.7.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.25.9 + '@babel/core': 7.29.7 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.29.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@9.1.3(@babel/core@7.29.7)(webpack@5.106.2(esbuild@0.25.12)): + dependencies: + '@babel/core': 7.29.7 find-cache-dir: 4.0.0 schema-utils: 4.3.3 webpack: 5.106.2(esbuild@0.25.12) @@ -11454,35 +12038,35 @@ snapshots: reselect: 4.1.8 resolve: 1.22.11 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.25.9): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.0 - '@babel/core': 7.25.9 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.9): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.29.7): dependencies: - '@babel/core': 7.25.9 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.7) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.25.9): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.25.9 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.7) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.25.9): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.29.7): dependencies: - '@babel/core': 7.25.9 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.25.9) + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.7) transitivePeerDependencies: - supports-color @@ -11496,9 +12080,17 @@ snapshots: dependencies: hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.25.9): + babel-plugin-syntax-hermes-parser@0.36.0: dependencies: - '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.25.9) + 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: + '@babel/plugin-syntax-flow': 7.27.1(@babel/core@7.29.7) transitivePeerDependencies: - '@babel/core' @@ -11523,34 +12115,73 @@ snapshots: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.9) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.9) - babel-preset-expo@54.0.9(@babel/core@7.25.9)(@babel/runtime@7.25.9)(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2): - dependencies: - '@babel/helper-module-imports': 7.28.6 - '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-syntax-export-default-from': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.25.9) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.9) - '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.25.9) - '@babel/preset-react': 7.28.5(@babel/core@7.25.9) - '@babel/preset-typescript': 7.28.5(@babel/core@7.25.9) - '@react-native/babel-preset': 0.81.5(@babel/core@7.25.9) + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + + babel-preset-expo@57.0.12(@babel/core@7.29.7)(@babel/runtime@7.25.9)(expo@57.0.23)(react-refresh@0.14.2): + dependencies: + '@babel/generator': 7.29.8 + '@babel/helper-module-imports': 7.29.7 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@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.27.1(@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.0(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@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.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.25.9) + 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 - resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.25.9 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11561,10 +12192,24 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.25.9) + babel-preset-jest@29.6.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) + badgin@1.2.3: {} balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + + barcode-detector@3.2.2(@types/emscripten@1.41.6): + dependencies: + zxing-wasm: 3.1.3(@types/emscripten@1.41.6) + transitivePeerDependencies: + - '@types/emscripten' + bare-events@2.8.2: {} bare-fs@4.5.2: @@ -11658,6 +12303,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.12: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -11748,8 +12397,6 @@ snapshots: chownr@1.1.4: {} - chownr@3.0.0: {} - chrome-launcher@0.15.2: dependencies: '@types/node': 25.0.3 @@ -11761,14 +12408,13 @@ snapshots: chrome-trace-event@1.0.4: {} - chromium-edge-launcher@0.2.0: + chromium-edge-launcher@0.3.0: dependencies: '@types/node': 25.0.3 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 mkdirp: 1.0.4 - rimraf: 3.0.2 transitivePeerDependencies: - supports-color @@ -11864,8 +12510,6 @@ snapshots: commander@2.20.3: {} - commander@4.1.1: {} - commander@7.2.0: {} commander@8.3.0: {} @@ -11917,6 +12561,8 @@ snapshots: content-type@1.0.5: {} + content-type@2.1.0: {} + convert-source-map@2.0.0: {} core-js-compat@3.48.0: @@ -11964,8 +12610,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-random-string@2.0.0: {} - css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -12079,6 +12723,7 @@ snapshots: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 + optional: true delayed-stream@1.0.0: {} @@ -12102,6 +12747,8 @@ snapshots: diff-sequences@29.6.3: {} + dnssd-advertise@1.1.6: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -12133,15 +12780,9 @@ snapshots: domutils@3.2.2: dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.6.1 - - dotenv@16.4.7: {} + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 dotenv@16.6.1: {} @@ -12190,8 +12831,6 @@ snapshots: entities@6.0.1: {} - env-editor@0.4.2: {} - env-paths@2.2.1: {} envinfo@7.21.0: {} @@ -12522,8 +13161,6 @@ snapshots: events@3.3.0: {} - exec-async@2.2.0: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -12548,182 +13185,202 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - expo-apple-authentication@8.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + expo-apple-authentication@57.0.2(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-application@7.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-application@57.0.3(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - expo-asset@12.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-asset@57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2): dependencies: - '@expo/image-utils': 0.8.8 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + '@expo/image-utils': 0.11.5(typescript@7.0.2) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color + - typescript - expo-audio@0.4.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-audio@57.0.5(expo-asset@57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo-asset: 57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-camera@17.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-camera@57.0.5(@types/emscripten@1.41.6)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + barcode-detector: 3.2.2(@types/emscripten@1.41.6) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + transitivePeerDependencies: + - '@types/emscripten' - expo-constants@18.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - '@expo/config': 12.0.13 - '@expo/env': 2.0.8 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + '@expo/env': 2.4.3 + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color - expo-device@8.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-device@57.0.2(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) ua-parser-js: 1.0.2 - expo-document-picker@14.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-document-picker@57.0.2(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - expo-file-system@19.0.21(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + expo-file-system@57.0.7(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-font@14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) fontfaceobserver: 2.3.0 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-haptics@15.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-haptics@57.0.3(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - expo-image@3.0.11(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-image@57.0.5(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + sf-symbols-typescript: 2.2.0 - expo-keep-awake@15.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0): + expo-keep-awake@57.0.2(expo@57.0.23)(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 - expo-local-authentication@17.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-local-authentication@57.0.3(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) invariant: 2.2.4 - expo-modules-autolinking@3.0.23: + expo-modules-autolinking@57.0.13(typescript@7.0.2): dependencies: - '@expo/spawn-async': 1.7.2 + '@expo/require-utils': 57.0.5(typescript@7.0.2) + '@expo/spawn-async': 1.8.0 chalk: 4.1.2 commander: 7.2.0 - require-from-string: 2.0.2 - resolve-from: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript - expo-modules-core@3.0.29(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-modules-core@57.0.18(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: + '@expo/expo-modules-macros-plugin': 0.6.1 + expo-modules-jsi: 57.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + optionalDependencies: + react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + + expo-modules-jsi@57.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): + dependencies: + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-notifications@0.32.15(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-notifications@57.0.19(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2): dependencies: - '@expo/image-utils': 0.8.8 - '@ide/backoff': 1.0.0 + '@expo/image-utils': 0.11.5(typescript@7.0.2) abort-controller: 3.0.0 - assert: 2.1.0 badgin: 1.2.3 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-application: 7.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) - expo-constants: 18.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo-application: 57.0.3(expo@57.0.23) + expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color + - typescript - expo-server@1.0.5: {} + expo-server@57.0.3: {} - expo-status-bar@3.0.9(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-status-bar@57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-system-ui@6.0.9(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + expo-system-ui@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - '@react-native/normalize-colors': 0.81.5 + '@react-native/normalize-colors': 0.86.3 debug: 4.4.3 - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color - expo-video-thumbnails@10.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + expo-video-thumbnails@57.0.2(expo@57.0.23): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) - expo-video@3.0.16(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-video@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo-web-browser@15.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + expo-web-browser@57.0.3(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo@57.0.23(92e84404446a2d5101115c437b8fd679): dependencies: '@babel/runtime': 7.25.9 - '@expo/cli': 54.0.20(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - '@expo/config': 12.0.13 - '@expo/config-plugins': 54.0.4 - '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@expo/fingerprint': 0.15.4 - '@expo/metro': 54.2.0 - '@expo/metro-config': 54.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)) - '@expo/vector-icons': 15.0.3(expo-font@14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/cli': 57.0.25(@expo/dom-webview@57.0.1)(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo@57.0.23)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@expo/config': 57.0.9(typescript@7.0.2) + '@expo/config-plugins': 57.0.9(typescript@7.0.2) + '@expo/devtools': 57.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@expo/fingerprint': 0.20.13 + '@expo/local-build-cache-provider': 57.0.8(typescript@7.0.2) + '@expo/log-box': 57.0.4(@expo/dom-webview@57.0.1)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@expo/metro': 56.0.2 + '@expo/metro-config': 57.0.12(expo@57.0.23)(typescript@7.0.2) '@ungap/structured-clone': 1.3.0 - babel-preset-expo: 54.0.9(@babel/core@7.25.9)(@babel/runtime@7.25.9)(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2) - expo-asset: 12.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-constants: 18.0.12(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - expo-file-system: 19.0.21(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)) - expo-font: 14.0.10(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo-keep-awake: 15.0.8(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0) - expo-modules-autolinking: 3.0.23 - expo-modules-core: 3.0.29(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + babel-preset-expo: 57.0.12(@babel/core@7.29.7)(@babel/runtime@7.25.9)(expo@57.0.23)(react-refresh@0.14.2) + expo-asset: 57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) + expo-file-system: 57.0.7(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) + expo-font: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + expo-keep-awake: 57.0.2(expo@57.0.23)(react@19.2.3) + expo-modules-autolinking: 57.0.13(typescript@7.0.2) + expo-modules-core: 57.0.18(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) pretty-format: 29.7.0 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-refresh: 0.14.2 - whatwg-url-without-unicode: 8.0.0-3 + whatwg-url-minimum: 0.1.2 optionalDependencies: - react-native-webview: 13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/dom-webview': 57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - '@babel/core' - bufferutil - expo-router - - graphql + - expo-widgets + - react-native-worklets + - react-server-dom-webpack - supports-color + - typescript - utf-8-validate exponential-backoff@3.1.3: {} @@ -12758,6 +13415,8 @@ snapshots: dependencies: websocket-driver: 0.7.4 + fb-dotslash@0.5.8: {} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -12766,6 +13425,8 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + fetch-nodeshim@0.4.10: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -12828,7 +13489,7 @@ snapshots: dependencies: micromatch: 4.0.8 - firebase@11.3.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))): + firebase@11.3.1(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))): dependencies: '@firebase/analytics': 0.10.11(@firebase/app@0.11.1) '@firebase/analytics-compat': 0.2.17(@firebase/app-compat@0.2.50)(@firebase/app@0.11.1) @@ -12837,8 +13498,8 @@ snapshots: '@firebase/app-check-compat': 0.3.18(@firebase/app-compat@0.2.50)(@firebase/app@0.11.1) '@firebase/app-compat': 0.2.50 '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))) - '@firebase/auth-compat': 0.5.18(@firebase/app-compat@0.2.50)(@firebase/app-types@0.9.3)(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))) + '@firebase/auth': 1.9.0(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))) + '@firebase/auth-compat': 0.5.18(@firebase/app-compat@0.2.50)(@firebase/app-types@0.9.3)(@firebase/app@0.11.1)(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))) '@firebase/data-connect': 0.3.0(@firebase/app@0.11.1) '@firebase/database': 1.0.12 '@firebase/database-compat': 2.0.3 @@ -12900,8 +13561,6 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - freeport-async@2.0.0: {} - fresh@0.5.2: {} fs-constants@1.0.0: {} @@ -13030,10 +13689,6 @@ snapshots: minipass: 4.2.8 path-scurry: 1.11.1 - global-dirs@0.1.1: - dependencies: - ini: 1.3.8 - globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -13098,11 +13753,17 @@ snapshots: he@1.2.0: {} + hermes-compiler@250829098.0.17: {} + hermes-estree@0.28.1: {} hermes-estree@0.29.1: {} - hermes-estree@0.32.0: {} + hermes-estree@0.35.0: {} + + hermes-estree@0.36.0: {} + + hermes-estree@0.36.1: {} hermes-parser@0.28.1: dependencies: @@ -13112,9 +13773,17 @@ snapshots: dependencies: hermes-estree: 0.29.1 - hermes-parser@0.32.0: + 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.32.0 + hermes-estree: 0.36.1 hoist-non-react-statics@3.3.2: dependencies: @@ -13190,10 +13859,6 @@ snapshots: ignore@5.3.2: {} - image-size@1.2.1: - dependencies: - queue: 6.0.2 - import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -13339,11 +14004,6 @@ snapshots: is-map@2.0.3: optional: true - is-nan@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - is-negative-zero@2.0.3: optional: true @@ -13601,24 +14261,24 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-expo@54.0.16(@babel/core@7.25.9)(expo@54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + jest-expo@57.0.5(@babel/core@7.29.7)(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(expo@57.0.23)(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - '@expo/config': 12.0.13 - '@expo/json-file': 10.0.8 '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0 - babel-jest: 29.7.0(@babel/core@7.25.9) - expo: 54.0.30(@babel/core@7.25.9)(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native/jest-preset': 0.86.3(@babel/core@7.29.7)(react@19.2.3) + babel-jest: 29.7.0(@babel/core@7.29.7) jest-environment-jsdom: 29.7.0 jest-snapshot: 29.7.0 jest-watch-select-projects: 2.0.0 jest-watch-typeahead: 2.2.1(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0)) json5: 2.2.3 lodash: 4.17.21 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-test-renderer: 19.1.0(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-test-renderer: 19.2.3(react@19.2.3) server-only: 0.0.1 stacktrace-js: 2.0.2 + optionalDependencies: + expo: 57.0.23(92e84404446a2d5101115c437b8fd679) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -13970,7 +14630,7 @@ snapshots: kleur@3.0.3: {} - lan-network@0.1.7: {} + lan-network@0.2.1: {} launch-editor@2.12.0: dependencies: @@ -14153,50 +14813,109 @@ snapshots: merge2@1.4.1: {} - metro-babel-transformer@0.83.3: + metro-babel-transformer@0.84.5: + dependencies: + '@babel/core': 7.25.9 + 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-babel-transformer@0.84.6: dependencies: '@babel/core': 7.25.9 flow-enums-runtime: 0.0.6 - hermes-parser: 0.32.0 + hermes-parser: 0.35.0 + metro-cache-key: 0.84.6 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - metro-cache-key@0.83.3: + metro-cache-key@0.84.5: dependencies: flow-enums-runtime: 0.0.6 - metro-cache@0.83.3: + metro-cache-key@0.84.6: + dependencies: + flow-enums-runtime: 0.0.6 + + 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-cache@0.84.6: dependencies: exponential-backoff: 3.1.3 flow-enums-runtime: 0.0.6 https-proxy-agent: 7.0.6 - metro-core: 0.83.3 + metro-core: 0.84.6 + transitivePeerDependencies: + - supports-color + + metro-config@0.84.5: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.84.5 + metro-cache: 0.84.5 + metro-core: 0.84.5 + metro-runtime: 0.84.5 + yaml: 2.8.2 transitivePeerDependencies: + - bufferutil - supports-color + - utf-8-validate - metro-config@0.83.3: + metro-config@0.84.6: dependencies: connect: 3.7.0 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.83.3 - metro-cache: 0.83.3 - metro-core: 0.83.3 - metro-runtime: 0.83.3 + metro: 0.84.6 + metro-cache: 0.84.6 + metro-core: 0.84.6 + metro-runtime: 0.84.6 yaml: 2.8.2 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro-core@0.83.3: + metro-core@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.84.5 + + metro-core@0.84.6: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 - metro-resolver: 0.83.3 + metro-resolver: 0.84.6 + + 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-file-map@0.83.3: + metro-file-map@0.84.6: dependencies: debug: 4.4.3 fb-watchman: 2.0.2 @@ -14210,47 +14929,96 @@ snapshots: transitivePeerDependencies: - supports-color - metro-minify-terser@0.83.3: + metro-minify-terser@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.44.1 + + metro-minify-terser@0.84.6: dependencies: flow-enums-runtime: 0.0.6 terser: 5.44.1 - metro-resolver@0.83.3: + metro-resolver@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + + metro-resolver@0.84.6: dependencies: flow-enums-runtime: 0.0.6 - metro-runtime@0.83.3: + metro-runtime@0.84.5: + dependencies: + '@babel/runtime': 7.25.9 + flow-enums-runtime: 0.0.6 + + metro-runtime@0.84.6: dependencies: '@babel/runtime': 7.25.9 flow-enums-runtime: 0.0.6 - metro-source-map@0.83.3: + metro-source-map@0.84.5: dependencies: '@babel/traverse': 7.29.0 - '@babel/traverse--for-generate-function-map': '@babel/traverse@7.29.0' '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-symbolicate: 0.83.3 + metro-symbolicate: 0.84.5 nullthrows: 1.1.1 - ob1: 0.83.3 + ob1: 0.84.5 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-symbolicate@0.83.3: + metro-source-map@0.84.6: + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.84.6 + nullthrows: 1.1.1 + ob1: 0.84.6 + source-map: 0.5.7 + vlq: 1.0.1 + 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-symbolicate@0.84.6: dependencies: flow-enums-runtime: 0.0.6 invariant: 2.2.4 - metro-source-map: 0.83.3 + metro-source-map: 0.84.6 nullthrows: 1.1.1 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color - metro-transform-plugins@0.83.3: + metro-transform-plugins@0.84.5: + dependencies: + '@babel/core': 7.25.9 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + metro-transform-plugins@0.84.6: dependencies: '@babel/core': 7.25.9 '@babel/generator': 7.29.1 @@ -14261,27 +15029,47 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.83.3: + metro-transform-worker@0.84.5: + dependencies: + '@babel/core': 7.25.9 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + metro: 0.84.5 + 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-transform-worker@0.84.6: dependencies: '@babel/core': 7.25.9 '@babel/generator': 7.29.1 '@babel/parser': 7.29.2 '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 - metro: 0.83.3 - metro-babel-transformer: 0.83.3 - metro-cache: 0.83.3 - metro-cache-key: 0.83.3 - metro-minify-terser: 0.83.3 - metro-source-map: 0.83.3 - metro-transform-plugins: 0.83.3 + metro: 0.84.6 + metro-babel-transformer: 0.84.6 + metro-cache: 0.84.6 + metro-cache-key: 0.84.6 + metro-minify-terser: 0.84.6 + metro-source-map: 0.84.6 + metro-transform-plugins: 0.84.6 nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - metro@0.83.3: + metro@0.84.5: dependencies: '@babel/code-frame': 7.29.0 '@babel/core': 7.25.9 @@ -14290,33 +15078,76 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 - accepts: 1.3.8 - chalk: 4.1.2 + 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.32.0 - image-size: 1.2.1 + 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.83.3 - metro-cache: 0.83.3 - metro-cache-key: 0.83.3 - metro-config: 0.83.3 - metro-core: 0.83.3 - metro-file-map: 0.83.3 - metro-resolver: 0.83.3 - metro-runtime: 0.83.3 - metro-source-map: 0.83.3 - metro-symbolicate: 0.83.3 - metro-transform-plugins: 0.83.3 - metro-transform-worker: 0.83.3 - mime-types: 2.1.35 + metro-babel-transformer: 0.84.5 + metro-cache: 0.84.5 + metro-cache-key: 0.84.5 + metro-config: 0.84.5 + 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 + 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.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + metro@0.84.6: + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.25.9 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + 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.6 + metro-cache: 0.84.6 + metro-cache-key: 0.84.6 + metro-config: 0.84.6 + metro-core: 0.84.6 + metro-file-map: 0.84.6 + metro-resolver: 0.84.6 + metro-runtime: 0.84.6 + metro-source-map: 0.84.6 + metro-symbolicate: 0.84.6 + metro-transform-plugins: 0.84.6 + metro-transform-worker: 0.84.6 + mime-types: 3.0.2 nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 @@ -14345,6 +15176,10 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.6.0: {} @@ -14361,6 +15196,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.12 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -14379,10 +15218,6 @@ snapshots: minipass@7.1.2: {} - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - mitt@3.0.1: {} mj-context-menu@0.6.1: {} @@ -14397,18 +15232,16 @@ snapshots: ms@2.1.3: {} - mute-stream@0.0.8: {} + multitars@1.0.2: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + mute-stream@0.0.8: {} nanoclone@0.2.1: {} nanoid@3.3.11: {} + nanoid@3.3.19: {} + napi-build-utils@2.0.0: {} napi-postinstall@0.3.4: {} @@ -14419,9 +15252,11 @@ snapshots: negotiator@0.6.4: {} - neo-async@2.6.2: {} + negotiator@1.1.0: + dependencies: + content-type: 2.1.0 - nested-error-stacks@2.0.1: {} + neo-async@2.6.2: {} nocache@3.0.4: {} @@ -14472,7 +15307,11 @@ snapshots: nwsapi@2.2.23: {} - ob1@0.83.3: + ob1@0.84.5: + dependencies: + flow-enums-runtime: 0.0.6 + + ob1@0.84.6: dependencies: flow-enums-runtime: 0.0.6 @@ -14480,11 +15319,6 @@ snapshots: object-inspect@1.13.4: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - object-keys@1.1.1: {} object.assign@4.1.7: @@ -14495,6 +15329,7 @@ snapshots: es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 + optional: true object.fromentries@2.0.8: dependencies: @@ -14748,8 +15583,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@3.0.1: {} - picomatch@4.0.3: {} picomatch@4.0.5: {} @@ -14782,9 +15615,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.4.49: + postcss@8.5.28: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -14880,8 +15713,6 @@ snapshots: pure-rand@6.1.0: {} - qrcode-terminal@0.11.0: {} - qs@6.14.1: dependencies: side-channel: 1.1.0 @@ -14899,10 +15730,6 @@ snapshots: queue-microtask@1.2.3: {} - queue@6.0.2: - dependencies: - inherits: 2.0.4 - randexp@0.5.3: dependencies: drange: 1.1.1 @@ -14932,18 +15759,18 @@ snapshots: - bufferutil - utf-8-validate - react-dom@19.1.0(react@19.1.0): + react-dom@19.2.3(react@19.2.3): dependencies: - react: 19.1.0 - scheduler: 0.26.0 + react: 19.2.3 + scheduler: 0.27.0 - react-freeze@1.0.4(react@19.1.0): + react-freeze@1.0.4(react@19.2.3): dependencies: - react: 19.1.0 + react: 19.2.3 - react-hook-form@7.34.2(react@19.1.0): + react-hook-form@7.34.2(react@19.2.3): dependencies: - react: 19.1.0 + react: 19.2.3 react-is@16.13.1: {} @@ -14953,16 +15780,18 @@ snapshots: react-is@19.1.0: {} - react-native-a11y-order@0.4.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-is@19.3.0: {} + + react-native-a11y-order@0.4.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-animatable@1.3.3: dependencies: prop-types: 15.8.1 - react-native-bootsplash@6.3.11(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-bootsplash@6.3.11(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@expo/config-plugins': 10.1.2 '@react-native-community/cli-config-android': 18.0.1 @@ -14974,9 +15803,9 @@ snapshots: node-html-parser: 7.0.1 picocolors: 1.1.1 prettier: 3.7.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-is-edge-to-edge: 1.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) sharp: 0.32.6 ts-dedent: 2.2.0 xml-formatter: 3.6.7 @@ -14986,135 +15815,141 @@ snapshots: - react-native-b4a - supports-color - react-native-callkeep@4.3.16(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-callkeep@4.3.16(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-console-time-polyfill@1.2.3(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-console-time-polyfill@1.2.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-device-info@11.1.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-device-info@11.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-dotenv@3.4.8(@babel/runtime@7.25.9): dependencies: '@babel/runtime': 7.25.9 dotenv: 16.6.1 - react-native-drawer-layout@4.2.5(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-drawer-layout@4.2.5(641d271507e632f6b7f49ee76b960c3d): dependencies: color: 4.2.3 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - use-latest-callback: 0.2.6(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + use-latest-callback: 0.2.6(react@19.2.3) react-native-easy-grid@0.2.2: dependencies: lodash: 4.17.21 - react-native-easy-toast@2.3.0(prop-types@15.8.1)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-easy-toast@2.3.0(prop-types@15.8.1)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: deprecated-react-native-prop-types: 2.3.0 prop-types: 15.8.1 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-external-keyboard@0.9.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-external-keyboard@0.9.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@egjs/hammerjs': 2.0.17 + '@types/react-test-renderer': 19.3.0 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + + react-native-image-crop-picker@https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/47092e8c90550a54d45fe307f7cb2a24c9535ed5(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + dependencies: + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-image-crop-picker@https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/47092e8c90550a54d45fe307f7cb2a24c9535ed5(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-incall-manager@4.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-incall-manager@4.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-is-edge-to-edge@1.2.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-is-edge-to-edge@1.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-is-edge-to-edge@1.3.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-katex@https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1(react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-katex@https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1(react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-webview: 13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-keyboard-controller@1.18.5(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-keyboard-controller@1.18.5(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-linear-gradient@2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-localize@3.7.0(@expo/config-plugins@54.0.4)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-localize@3.7.0(@expo/config-plugins@57.0.9(typescript@7.0.2))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - '@expo/config-plugins': 54.0.4 + '@expo/config-plugins': 57.0.9(typescript@7.0.2) - react-native-math-view@3.9.5(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-math-view@3.9.5(react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: hast-util-from-selector: 2.0.1 lodash: 4.17.21 mathjax-full: 3.2.2 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-svg: 15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transformation-matrix: 2.16.1 react-native-mime-types@2.3.0: dependencies: mime-db: 1.37.0 - react-native-mmkv@4.3.2(react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-mmkv@4.3.2(react-native-nitro-modules@0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-nitro-modules: 0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-modal@13.0.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-modal@13.0.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: prop-types: 15.8.1 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-animatable: 1.3.3 - react-native-nitro-modules@0.37.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-nitro-modules@0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-notifier@1.6.1(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-notifier@1.6.1(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-picker-select@9.0.1(@react-native-picker/picker@2.11.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)): + react-native-picker-select@9.0.1(@react-native-picker/picker@2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)): dependencies: - '@react-native-picker/picker': 2.11.4(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native-picker/picker': 2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) lodash.isequal: 4.5.0 react-native-popover-view@5.1.7: @@ -15122,121 +15957,121 @@ snapshots: deprecated-react-native-prop-types: 2.3.0 prop-types: 15.8.1 - react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - '@babel/core': 7.25.9 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-worklets: 0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - semver: 7.7.2 + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + semver: 7.7.4 - react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-safe-area-context@5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-screens@4.17.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-screens@4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - react: 19.1.0 - react-freeze: 1.0.4(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-freeze: 1.0.4(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) warn-once: 0.1.1 - react-native-skeleton-placeholder@5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-linear-gradient@2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-skeleton-placeholder@5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - '@react-native-masked-view/masked-view': 0.3.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-linear-gradient: 2.6.2(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-linear-gradient: 2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: css-select: 5.2.2 css-tree: 1.1.3 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) warn-once: 0.1.1 - react-native-url-polyfill@2.0.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-url-polyfill@2.0.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) whatwg-url-without-unicode: 8.0.0-3 - react-native-webrtc@124.0.7(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0)): + react-native-webrtc@124.0.7(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color - react-native-webview@13.16.1(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: escape-string-regexp: 4.0.0 invariant: 2.2.4 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - - react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): - dependencies: - '@babel/core': 7.25.9 - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.25.9) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.25.9) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.25.9) - '@babel/preset-typescript': 7.28.5(@babel/core@7.25.9) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) + '@babel/types': 7.29.8 + '@react-native/metro-config': 0.86.3(@babel/core@7.29.7) convert-source-map: 2.0.0 - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - semver: 7.7.2 + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + semver: 7.7.4 transitivePeerDependencies: - supports-color - react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0): + react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3): dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.81.5 - '@react-native/codegen': 0.81.5(@babel/core@7.25.9) - '@react-native/community-cli-plugin': 0.81.5(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9)) - '@react-native/gradle-plugin': 0.81.5 - '@react-native/js-polyfills': 0.81.5 - '@react-native/normalize-colors': 0.81.5 - '@react-native/virtualized-lists': 0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@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-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.86.3(@babel/core@7.29.7)) + '@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.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.25.9) - babel-plugin-syntax-hermes-parser: 0.29.1 + babel-plugin-syntax-hermes-parser: 0.36.0 base64-js: 1.5.1 commander: 12.1.0 flow-enums-runtime: 0.0.6 - glob: 7.2.3 + hermes-compiler: 250829098.0.17 invariant: 2.2.4 - jest-environment-node: 29.7.0 memoize-one: 5.2.1 - metro-runtime: 0.83.3 - metro-source-map: 0.83.3 + metro-runtime: 0.84.6 + metro-source-map: 0.84.6 nullthrows: 1.1.1 pretty-format: 29.7.0 promise: 8.3.0 - react: 19.1.0 + react: 19.2.3 react-devtools-core: 6.1.5 react-refresh: 0.14.2 regenerator-runtime: 0.13.11 - scheduler: 0.26.0 + scheduler: 0.27.0 semver: 7.5.2 stacktrace-parser: 0.1.11 + tinyglobby: 0.2.15 whatwg-fetch: 3.6.20 - ws: 6.2.3 + ws: 7.5.10 yargs: 17.7.2 optionalDependencies: - '@types/react': 19.1.17 + '@react-native/jest-preset': 0.86.3(@babel/core@7.29.7)(react@19.2.3) + '@types/react': 19.2.18 transitivePeerDependencies: - '@babel/core' - '@react-native-community/cli' @@ -15245,30 +16080,30 @@ snapshots: - supports-color - utf-8-validate - react-redux@8.0.5(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(redux@4.2.0): + react-redux@8.0.5(@types/react@19.2.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(redux@4.2.0): dependencies: '@babel/runtime': 7.25.9 - '@types/hoist-non-react-statics': 3.3.7(@types/react@19.1.17) + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.18) '@types/use-sync-external-store': 0.0.3 hoist-non-react-statics: 3.3.2 - react: 19.1.0 + react: 19.2.3 react-is: 18.3.1 - use-sync-external-store: 1.6.0(react@19.1.0) + use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: - '@types/react': 19.1.17 - react-dom: 19.1.0(react@19.1.0) - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) + '@types/react': 19.2.18 + react-dom: 19.2.3(react@19.2.3) + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) redux: 4.2.0 react-refresh@0.14.2: {} - react-test-renderer@19.1.0(react@19.1.0): + react-test-renderer@19.2.3(react@19.2.3): dependencies: - react: 19.1.0 - react-is: 19.1.0 - scheduler: 0.26.0 + react: 19.2.3 + react-is: 19.3.0 + scheduler: 0.27.0 - react@19.1.0: {} + react@19.2.3: {} read-pkg-up@7.0.1: dependencies: @@ -15289,12 +16124,12 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - reanimated-tab-view@0.3.0(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + reanimated-tab-view@0.3.0(641d271507e632f6b7f49ee76b960c3d): dependencies: - react: 19.1.0 - react-native: 0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 4.1.3(@babel/core@7.25.9)(react-native-worklets@0.6.1(@babel/core@7.25.9)(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.25.9)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/metro-config@0.81.5(@babel/core@7.25.9))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react: 19.2.3 + react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) + react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) recast@0.23.11: dependencies: @@ -15379,12 +16214,6 @@ snapshots: require-main-filename@2.0.0: {} - requireg@0.2.2: - dependencies: - nested-error-stacks: 2.0.1 - rc: 1.2.8 - resolve: 1.7.1 - requires-port@1.0.0: {} reselect@4.0.0: {} @@ -15399,10 +16228,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-global@1.0.0: - dependencies: - global-dirs: 0.1.1 - resolve-pkg-maps@1.0.0: {} resolve-workspace-root@2.0.0: {} @@ -15415,10 +16240,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@1.7.1: - dependencies: - path-parse: 1.0.7 - restore-cursor@2.0.0: dependencies: onetime: 2.0.1 @@ -15472,13 +16293,15 @@ snapshots: safer-buffer@2.1.2: {} + sandbox-cli-detector@0.2.0: {} + sax@1.4.3: {} saxes@6.0.0: dependencies: xmlchars: 2.2.0 - scheduler@0.26.0: {} + scheduler@0.27.0: {} schema-utils@4.3.3: dependencies: @@ -15495,8 +16318,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.7.2: {} - semver@7.7.4: {} send@0.19.2: @@ -15861,16 +16682,6 @@ snapshots: structured-headers@0.4.1: {} - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.15 - ts-interface-checker: 0.1.13 - superstruct@2.0.2: {} supports-color@5.5.0: @@ -15901,6 +16712,8 @@ snapshots: typical: 5.2.0 wordwrapjs: 4.0.1 + tagged-tag@1.0.0: {} + tapable@2.3.3: {} tar-fs@2.1.4: @@ -15939,16 +16752,6 @@ snapshots: - bare-abort-controller - react-native-b4a - tar@7.5.2: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - temp-dir@2.0.0: {} - terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 @@ -15985,14 +16788,6 @@ snapshots: text-table@0.2.0: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - throat@5.0.0: {} through@2.3.8: {} @@ -16030,6 +16825,8 @@ snapshots: toposort@2.0.2: {} + toqr@0.1.1: {} + tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -16049,8 +16846,6 @@ snapshots: ts-dedent@2.2.0: {} - ts-interface-checker@0.1.13: {} - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -16083,6 +16878,10 @@ snapshots: type-fest@2.19.0: {} + type-fest@5.9.0: + dependencies: + tagged-tag: 1.0.0 + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -16198,8 +16997,6 @@ snapshots: undici-types@7.16.0: {} - undici@6.22.0: {} - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -16211,10 +17008,6 @@ snapshots: unicode-property-aliases-ecmascript@2.2.0: {} - unique-string@2.0.0: - dependencies: - crypto-random-string: 2.0.0 - universal-websocket-client@1.0.3: dependencies: ws: 8.18.3 @@ -16269,24 +17062,24 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-debounce@9.0.4(react@19.1.0): + use-debounce@9.0.4(react@19.2.3): dependencies: - react: 19.1.0 + react: 19.2.3 - use-deep-compare-effect@1.6.1(react@19.1.0): + use-deep-compare-effect@1.6.1(react@19.2.3): dependencies: '@babel/runtime': 7.25.9 '@types/react': 17.0.90 dequal: 2.0.3 - react: 19.1.0 + react: 19.2.3 - use-latest-callback@0.2.6(react@19.1.0): + use-latest-callback@0.2.6(react@19.2.3): dependencies: - react: 19.1.0 + react: 19.2.3 - use-sync-external-store@1.6.0(react@19.1.0): + use-sync-external-store@1.6.0(react@19.2.3): dependencies: - react: 19.1.0 + react: 19.2.3 util-deprecate@1.0.2: {} @@ -16393,6 +17186,8 @@ snapshots: whatwg-mimetype@3.0.0: {} + whatwg-url-minimum@0.1.2: {} + whatwg-url-without-unicode@8.0.0-3: dependencies: buffer: 5.7.1 @@ -16456,8 +17251,6 @@ snapshots: wicked-good-xpath@1.3.0: {} - wonka@6.3.5: {} - word-wrap@1.2.5: {} wordwrapjs@4.0.1: @@ -16534,8 +17327,6 @@ snapshots: yallist@4.0.0: {} - yallist@5.0.0: {} - yaml@1.10.2: optional: true @@ -16586,8 +17377,15 @@ snapshots: property-expr: 2.0.6 toposort: 2.0.2 - zustand@5.0.12(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)): + zod@3.25.76: {} + + zustand@5.0.12(@types/react@19.2.18)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)): optionalDependencies: - '@types/react': 19.1.17 - react: 19.1.0 - use-sync-external-store: 1.6.0(react@19.1.0) + '@types/react': 19.2.18 + react: 19.2.3 + use-sync-external-store: 1.6.0(react@19.2.3) + + zxing-wasm@3.1.3(@types/emscripten@1.41.6): + dependencies: + '@types/emscripten': 1.41.6 + type-fest: 5.9.0 From 521901437bb2cc9e2909f9dcfbacff54bc3db29d Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 15 Sep 2026 18:42:24 -0300 Subject: [PATCH 09/55] fix: adapt app code to React Native 0.86 and Expo 57 (#7694) * fix: adapt app code to React Native 0.86 and Expo 57 * test: await scheduled gesture and floating date callbacks --- app/containers/ActionSheet/styles.ts | 2 +- app/containers/AudioPlayer/Seek.test.tsx | 14 +- .../Avatar/__snapshots__/Avatar.test.tsx.snap | 54 + .../Chip/__snapshots__/Chip.test.tsx.snap | 9 + .../__snapshots__/DirectoryItem.test.tsx.snap | 21 + .../NotifierComponent.test.tsx.snap | 12 + app/containers/Loading/index.tsx | 2 +- .../LoginServices/LoginServices.test.tsx | 8 +- .../__snapshots__/FilterHeader.test.tsx.snap | 8 +- .../__snapshots__/PeerItem.test.tsx.snap | 6 + .../__snapshots__/PeerList.test.tsx.snap | 9 + .../__snapshots__/SelectedPeer.test.tsx.snap | 12 + .../__snapshots__/ReactionsList.test.tsx.snap | 36 + .../__snapshots__/RoomItem.test.tsx.snap | 150 +++ .../__snapshots__/SearchBox.test.tsx.snap | 4 +- .../__snapshots__/ServerItem.test.tsx.snap | 24 + app/containers/StatusBar.tsx | 7 +- .../__snapshots__/TextInput.test.tsx.snap | 46 +- .../__snapshots__/UiKitModal.test.tsx.snap | 42 +- app/containers/VideoPlayer/index.tsx | 2 +- .../__snapshots__/Markdown.test.tsx.snap | 15 + .../message/components/Attachments/Reply.tsx | 2 +- .../__snapshots__/Message.test.tsx.snap | 1083 +++++++++++++++++ .../__snapshots__/leaves.test.tsx.snap | 6 + app/lib/methods/helpers/theme.ts | 2 +- .../MasterDetailStack/ModalContainer.tsx | 2 +- .../__snapshots__/index.test.tsx.snap | 42 + .../__snapshots__/Dialpad.test.tsx.snap | 16 +- .../__snapshots__/CallerInfo.test.tsx.snap | 6 + .../__snapshots__/Item.test.tsx.snap | 24 + .../__snapshots__/Item.test.tsx.snap | 12 + .../ServersHistoryItem.test.tsx.snap | 24 + .../RoomInfoViewAvatar.test.tsx.snap | 6 + .../List/hooks/useFloatingDate.test.ts | 47 +- app/views/ShareView/Preview.tsx | 2 +- .../__snapshots__/Item.test.tsx.snap | 36 + jest.setup.js | 7 + 37 files changed, 1705 insertions(+), 95 deletions(-) diff --git a/app/containers/ActionSheet/styles.ts b/app/containers/ActionSheet/styles.ts index be6d260b9e3..ecbb9be14e3 100644 --- a/app/containers/ActionSheet/styles.ts +++ b/app/containers/ActionSheet/styles.ts @@ -39,7 +39,7 @@ export default StyleSheet.create({ margin: 8 }, backdrop: { - ...StyleSheet.absoluteFillObject + ...StyleSheet.absoluteFill }, button: { marginHorizontal: 16, diff --git a/app/containers/AudioPlayer/Seek.test.tsx b/app/containers/AudioPlayer/Seek.test.tsx index ce7668c55a7..7ba004704f3 100644 --- a/app/containers/AudioPlayer/Seek.test.tsx +++ b/app/containers/AudioPlayer/Seek.test.tsx @@ -18,27 +18,27 @@ const setup = () => { afterEach(() => jest.restoreAllMocks()); -test('a tap that never starts dragging preserves the paused position', () => { +test('a tap that never starts dragging preserves the paused position', async () => { const { gesture, currentTime, onChangeTime } = setup(); - act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); + await act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); expect(currentTime.value).toBe(30); expect(onChangeTime).not.toHaveBeenCalled(); }); -test('a cancelled drag restores its starting position without seeking', () => { +test('a cancelled drag restores its starting position without seeking', async () => { const { gesture, currentTime, onChangeTime } = setup(); - act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.CANCELLED }])); + await act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.CANCELLED }])); expect(currentTime.value).toBe(30); expect(onChangeTime).not.toHaveBeenCalled(); currentTime.value = 45; - act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); + await act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.FAILED }])); expect(currentTime.value).toBe(45); }); -test('a completed drag seeks in seconds', () => { +test('a completed drag seeks in seconds', async () => { const { gesture, onChangeTime } = setup(); - act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.END }])); + await act(() => fireGestureHandler(gesture, [{ state: State.BEGAN }, { state: State.ACTIVE }, { state: State.END }])); expect(onChangeTime).toHaveBeenCalledTimes(1); expect(onChangeTime).toHaveBeenCalledWith(30); }); diff --git a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap index ecb8f0874b4..24c8f2149b2 100644 --- a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap +++ b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap @@ -34,6 +34,7 @@ exports[`Story Snapshots: AvatarBase64 should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -51,6 +52,8 @@ exports[`Story Snapshots: AvatarBase64 should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -91,6 +94,7 @@ exports[`Story Snapshots: AvatarExternalProviderUrl should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -108,6 +112,8 @@ exports[`Story Snapshots: AvatarExternalProviderUrl should match snapshot 1`] = "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -148,6 +154,7 @@ exports[`Story Snapshots: AvatarPath should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -165,6 +172,8 @@ exports[`Story Snapshots: AvatarPath should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -205,6 +214,7 @@ exports[`Story Snapshots: AvatarRoomId should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -222,6 +232,8 @@ exports[`Story Snapshots: AvatarRoomId should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -262,6 +274,7 @@ exports[`Story Snapshots: AvatarText should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -279,6 +292,8 @@ exports[`Story Snapshots: AvatarText should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -319,6 +334,7 @@ exports[`Story Snapshots: AvatarUrl should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -336,6 +352,8 @@ exports[`Story Snapshots: AvatarUrl should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -376,6 +394,7 @@ exports[`Story Snapshots: Channel should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -393,6 +412,8 @@ exports[`Story Snapshots: Channel should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -433,6 +454,7 @@ exports[`Story Snapshots: Children should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -450,6 +472,8 @@ exports[`Story Snapshots: Children should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -529,6 +553,7 @@ exports[`Story Snapshots: CustomBorderRadius should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -546,6 +571,8 @@ exports[`Story Snapshots: CustomBorderRadius should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -588,6 +615,7 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -605,6 +633,8 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -645,6 +675,7 @@ exports[`Story Snapshots: Direct should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -662,6 +693,8 @@ exports[`Story Snapshots: Direct should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -712,6 +745,7 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -726,6 +760,8 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -767,6 +803,7 @@ exports[`Story Snapshots: RoomAvatarExternalProviderUrl should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -784,6 +821,8 @@ exports[`Story Snapshots: RoomAvatarExternalProviderUrl should match snapshot 1` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -824,6 +863,7 @@ exports[`Story Snapshots: Static should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -841,6 +881,8 @@ exports[`Story Snapshots: Static should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -961,6 +1003,7 @@ exports[`Story Snapshots: Touchable should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -978,6 +1021,8 @@ exports[`Story Snapshots: Touchable should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -1021,6 +1066,7 @@ exports[`Story Snapshots: WithETag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1038,6 +1084,8 @@ exports[`Story Snapshots: WithETag should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -1078,6 +1126,7 @@ exports[`Story Snapshots: WithoutETag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1095,6 +1144,8 @@ exports[`Story Snapshots: WithoutETag should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> @@ -1135,6 +1186,7 @@ exports[`Story Snapshots: WrongServer should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1152,6 +1204,8 @@ exports[`Story Snapshots: WrongServer should match snapshot 1`] = ` "width": 56, } } + symbolSize={null} + symbolWeight={null} transition={null} width={56} /> diff --git a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap index 724d28a710d..e2eef08552c 100644 --- a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap +++ b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap @@ -208,6 +208,7 @@ exports[`Story Snapshots: ChipText should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -225,6 +226,8 @@ exports[`Story Snapshots: ChipText should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -396,6 +399,7 @@ exports[`Story Snapshots: ChipWithShortText should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -413,6 +417,8 @@ exports[`Story Snapshots: ChipWithShortText should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -820,6 +826,7 @@ exports[`Story Snapshots: ChipWithoutIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -837,6 +844,8 @@ exports[`Story Snapshots: ChipWithoutIcon should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> diff --git a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap index 02fd544278f..8f7883c8591 100644 --- a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap +++ b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap @@ -149,6 +149,7 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -166,6 +167,8 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -438,6 +441,7 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -455,6 +459,8 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -727,6 +733,7 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -744,6 +751,8 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -985,6 +994,7 @@ exports[`Story Snapshots: LongRoomName should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1002,6 +1012,8 @@ exports[`Story Snapshots: LongRoomName should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -1490,6 +1502,7 @@ exports[`Story Snapshots: TeamMain should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1507,6 +1520,8 @@ exports[`Story Snapshots: TeamMain should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -1779,6 +1794,7 @@ exports[`Story Snapshots: WithRightLabel should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1796,6 +1812,8 @@ exports[`Story Snapshots: WithRightLabel should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -2090,6 +2108,7 @@ exports[`Story Snapshots: WithoutDescription should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2107,6 +2126,8 @@ exports[`Story Snapshots: WithoutDescription should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> diff --git a/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap b/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap index c8346155834..22b27242232 100644 --- a/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap +++ b/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap @@ -154,6 +154,7 @@ exports[`Story Snapshots: ChannelMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -171,6 +172,8 @@ exports[`Story Snapshots: ChannelMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -506,6 +509,7 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -523,6 +527,8 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -858,6 +864,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -875,6 +882,8 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -1210,6 +1219,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1227,6 +1237,8 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> diff --git a/app/containers/Loading/index.tsx b/app/containers/Loading/index.tsx index 9d579450bd8..4e356e0acdf 100644 --- a/app/containers/Loading/index.tsx +++ b/app/containers/Loading/index.tsx @@ -110,7 +110,7 @@ const Loading = (): ReactElement | null => { ({})); -jest.mock('react-native/Libraries/Linking/Linking', () => ({ - openURL: jest.fn() -})); +jest.mock('react-native/Libraries/Linking/Linking', () => { + const linking = { openURL: jest.fn() }; + + return { ...linking, default: linking }; +}); const SERVER = 'https://demo.rocket.chat'; diff --git a/app/containers/NewMediaCall/__snapshots__/FilterHeader.test.tsx.snap b/app/containers/NewMediaCall/__snapshots__/FilterHeader.test.tsx.snap index 1b2a83f0383..41809dd0ebf 100644 --- a/app/containers/NewMediaCall/__snapshots__/FilterHeader.test.tsx.snap +++ b/app/containers/NewMediaCall/__snapshots__/FilterHeader.test.tsx.snap @@ -40,13 +40,13 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` } > @@ -452,6 +455,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -469,6 +473,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> diff --git a/app/containers/NewMediaCall/__snapshots__/PeerList.test.tsx.snap b/app/containers/NewMediaCall/__snapshots__/PeerList.test.tsx.snap index 3647f8288b7..59381fb0ffc 100644 --- a/app/containers/NewMediaCall/__snapshots__/PeerList.test.tsx.snap +++ b/app/containers/NewMediaCall/__snapshots__/PeerList.test.tsx.snap @@ -314,6 +314,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -331,6 +332,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -522,6 +525,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -539,6 +543,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -730,6 +736,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -747,6 +754,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> diff --git a/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap b/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap index 1da0008460a..c2250ce3384 100644 --- a/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap +++ b/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap @@ -97,6 +97,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -114,6 +115,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -511,6 +514,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -528,6 +532,8 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -762,6 +768,7 @@ exports[`Story Snapshots: LongUsername should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -779,6 +786,8 @@ exports[`Story Snapshots: LongUsername should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> @@ -1202,6 +1211,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1219,6 +1229,8 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` "width": 28, } } + symbolSize={null} + symbolWeight={null} transition={null} width={28} /> diff --git a/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap b/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap index 7c2f1d2d9f9..9ee970be89c 100644 --- a/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap +++ b/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap @@ -160,6 +160,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -173,6 +174,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -262,6 +265,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -275,6 +279,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -364,6 +370,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -377,6 +384,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -691,6 +700,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -704,6 +714,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -791,6 +803,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -804,6 +817,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -891,6 +906,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -904,6 +920,8 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1289,6 +1307,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1302,6 +1321,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -1391,6 +1412,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1404,6 +1426,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -1493,6 +1517,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1506,6 +1531,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 24, } } + symbolSize={null} + symbolWeight={null} transition={null} width={24} /> @@ -1820,6 +1847,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1833,6 +1861,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1920,6 +1950,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1933,6 +1964,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2020,6 +2053,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -2033,6 +2067,8 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> diff --git a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap index 9743e9e9ebc..cd35cf933d4 100644 --- a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap +++ b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap @@ -485,6 +485,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -502,6 +503,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -1139,6 +1142,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1156,6 +1160,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -1837,6 +1843,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1854,6 +1861,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -2535,6 +2544,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2552,6 +2562,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -3233,6 +3245,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3250,6 +3263,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -3931,6 +3946,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3948,6 +3964,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -4629,6 +4647,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -4646,6 +4665,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -5327,6 +5348,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5344,6 +5366,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -6025,6 +6049,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6042,6 +6067,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -6723,6 +6750,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6740,6 +6768,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -7421,6 +7451,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -7438,6 +7469,8 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -8123,6 +8156,7 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8140,6 +8174,8 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -8760,6 +8796,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8777,6 +8814,8 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -9458,6 +9497,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -9475,6 +9515,8 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -10156,6 +10198,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -10173,6 +10216,8 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -14716,6 +14761,7 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -14733,6 +14779,8 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -15377,6 +15425,7 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -15394,6 +15443,8 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -16043,6 +16094,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -16060,6 +16112,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -16713,6 +16767,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -16730,6 +16785,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -17383,6 +17440,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -17400,6 +17458,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -18053,6 +18113,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -18070,6 +18131,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -18723,6 +18786,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -18740,6 +18804,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -19458,6 +19524,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -19475,6 +19542,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -20193,6 +20262,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -20210,6 +20280,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -20933,6 +21005,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -20950,6 +21023,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -21566,6 +21641,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -21583,6 +21659,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -22199,6 +22277,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -22216,6 +22295,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -22832,6 +22913,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -22849,6 +22931,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -23465,6 +23549,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -23482,6 +23567,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -24098,6 +24185,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -24115,6 +24203,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -24731,6 +24821,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -24748,6 +24839,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -25364,6 +25457,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -25381,6 +25475,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -25997,6 +26093,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -26014,6 +26111,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -26630,6 +26729,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -26647,6 +26747,8 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -27268,6 +27370,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -27285,6 +27388,8 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -27940,6 +28045,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -27957,6 +28063,8 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -28650,6 +28758,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -28667,6 +28776,8 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -29322,6 +29433,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -29339,6 +29451,8 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -30036,6 +30150,7 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -30053,6 +30168,8 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -30673,6 +30790,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -30690,6 +30808,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -31314,6 +31434,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -31331,6 +31452,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -31947,6 +32070,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -31964,6 +32088,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -32580,6 +32706,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -32597,6 +32724,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -33213,6 +33342,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -33230,6 +33360,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -33846,6 +33978,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -33863,6 +33996,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -34479,6 +34614,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -34496,6 +34632,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -35112,6 +35250,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -35129,6 +35268,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -35745,6 +35886,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -35762,6 +35904,8 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -36383,6 +36527,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -36400,6 +36545,8 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> @@ -37024,6 +37171,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -37041,6 +37189,8 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` "width": 48, } } + symbolSize={null} + symbolWeight={null} transition={null} width={48} /> diff --git a/app/containers/SearchBox/__snapshots__/SearchBox.test.tsx.snap b/app/containers/SearchBox/__snapshots__/SearchBox.test.tsx.snap index fbc1de51897..a72a4351e98 100644 --- a/app/containers/SearchBox/__snapshots__/SearchBox.test.tsx.snap +++ b/app/containers/SearchBox/__snapshots__/SearchBox.test.tsx.snap @@ -10,13 +10,13 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` testID="searchbox" > @@ -361,6 +364,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -375,6 +379,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -598,6 +604,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -612,6 +619,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -966,6 +975,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -980,6 +990,8 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1331,6 +1343,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -1345,6 +1358,8 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1575,6 +1590,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -1589,6 +1605,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1812,6 +1830,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -1826,6 +1845,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -2049,6 +2070,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` }, ] } + sfEffect={null} source={ [ { @@ -2063,6 +2085,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> diff --git a/app/containers/StatusBar.tsx b/app/containers/StatusBar.tsx index d096c2b9248..451bbc9f5c3 100644 --- a/app/containers/StatusBar.tsx +++ b/app/containers/StatusBar.tsx @@ -4,18 +4,17 @@ import { useTheme } from '../theme'; interface IStatusBar { barStyle?: 'light' | 'dark'; - backgroundColor?: string; } -const StatusBar = ({ barStyle, backgroundColor }: IStatusBar) => { - const { theme, colors } = useTheme(); +const StatusBar = ({ barStyle }: IStatusBar) => { + const { theme } = useTheme(); if (!barStyle) { barStyle = 'light'; if (theme === 'light') { barStyle = 'dark'; } } - return ; + return ; }; export default StatusBar; diff --git a/app/containers/TextInput/__snapshots__/TextInput.test.tsx.snap b/app/containers/TextInput/__snapshots__/TextInput.test.tsx.snap index f556661b7db..41064e56d07 100644 --- a/app/containers/TextInput/__snapshots__/TextInput.test.tsx.snap +++ b/app/containers/TextInput/__snapshots__/TextInput.test.tsx.snap @@ -9,13 +9,13 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = ` } > @@ -4155,13 +4158,13 @@ exports[`Story Snapshots: ModalInputWithAddField should match snapshot 1`] = ` First field diff --git a/app/containers/VideoPlayer/index.tsx b/app/containers/VideoPlayer/index.tsx index 4d156ff367f..b8877b4553d 100644 --- a/app/containers/VideoPlayer/index.tsx +++ b/app/containers/VideoPlayer/index.tsx @@ -61,7 +61,7 @@ const VideoPlayer = ({ attachment, user, baseUrl, setLoading }: IVideoPlayerProp style={styles.container} contentFit='contain' nativeControls - allowsFullscreen + fullscreenOptions={{ enable: true }} allowsPictureInPicture /> diff --git a/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap b/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap index 5c067a788e9..a77bc0df4ee 100644 --- a/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap +++ b/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap @@ -805,6 +805,7 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -818,6 +819,8 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -866,6 +869,7 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -879,6 +883,8 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -927,6 +933,7 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -940,6 +947,8 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -1034,6 +1043,7 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1047,6 +1057,8 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -4156,6 +4168,7 @@ exports[`Story Snapshots: Image should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -4170,6 +4183,8 @@ exports[`Story Snapshots: Image should match snapshot 1`] = ` "width": 300, } } + symbolSize={null} + symbolWeight={null} transition={null} width={300} /> diff --git a/app/containers/message/components/Attachments/Reply.tsx b/app/containers/message/components/Attachments/Reply.tsx index 264dff3de55..15fe63b2433 100644 --- a/app/containers/message/components/Attachments/Reply.tsx +++ b/app/containers/message/components/Attachments/Reply.tsx @@ -36,7 +36,7 @@ const styles = StyleSheet.create({ paddingLeft: 8 }, backdrop: { - ...StyleSheet.absoluteFillObject + ...StyleSheet.absoluteFill }, authorContainer: { flex: 1, diff --git a/app/containers/message/components/__tests__/__snapshots__/Message.test.tsx.snap b/app/containers/message/components/__tests__/__snapshots__/Message.test.tsx.snap index 404c7f13697..180d7b86dc5 100644 --- a/app/containers/message/components/__tests__/__snapshots__/Message.test.tsx.snap +++ b/app/containers/message/components/__tests__/__snapshots__/Message.test.tsx.snap @@ -224,6 +224,7 @@ exports[`Story Snapshots: Archived should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -241,6 +242,8 @@ exports[`Story Snapshots: Archived should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -679,6 +682,7 @@ exports[`Story Snapshots: ArchivedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -696,6 +700,8 @@ exports[`Story Snapshots: ArchivedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -1142,6 +1148,7 @@ exports[`Story Snapshots: AttachmentWithTextAndLink should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1159,6 +1166,8 @@ exports[`Story Snapshots: AttachmentWithTextAndLink should match snapshot 1`] = "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1945,6 +1954,7 @@ exports[`Story Snapshots: AttachmentWithTextAndLinkLargeFont should match snapsh onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1962,6 +1972,8 @@ exports[`Story Snapshots: AttachmentWithTextAndLinkLargeFont should match snapsh "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -2748,6 +2760,7 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2765,6 +2778,8 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -3198,6 +3213,7 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3215,6 +3231,8 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -4103,6 +4121,7 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -4117,6 +4136,8 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -4561,6 +4582,7 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -4575,6 +4597,8 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -5022,6 +5046,7 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5039,6 +5064,8 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -5472,6 +5499,7 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5489,6 +5517,8 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -5935,6 +5965,7 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5952,6 +5983,8 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -6385,6 +6418,7 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6402,6 +6436,8 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -6848,6 +6884,7 @@ exports[`Story Snapshots: BlockQuote should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6865,6 +6902,8 @@ exports[`Story Snapshots: BlockQuote should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -7330,6 +7369,7 @@ Testing block quote." onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -7347,6 +7387,8 @@ Testing block quote." "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -7878,6 +7920,7 @@ exports[`Story Snapshots: BlockQuoteLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -7895,6 +7938,8 @@ exports[`Story Snapshots: BlockQuoteLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -8360,6 +8405,7 @@ Testing block quote." onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8377,6 +8423,8 @@ Testing block quote." "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -8908,6 +8956,7 @@ exports[`Story Snapshots: Broadcast should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8925,6 +8974,8 @@ exports[`Story Snapshots: Broadcast should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -9494,6 +9545,7 @@ exports[`Story Snapshots: BroadcastLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -9511,6 +9563,8 @@ exports[`Story Snapshots: BroadcastLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -10080,6 +10134,7 @@ exports[`Story Snapshots: CollapsedAttachments should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -10097,6 +10152,8 @@ exports[`Story Snapshots: CollapsedAttachments should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -10685,6 +10742,7 @@ exports[`Story Snapshots: CollapsedAttachments should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -10702,6 +10760,8 @@ exports[`Story Snapshots: CollapsedAttachments should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -11529,6 +11589,7 @@ exports[`Story Snapshots: CollapsedAttachmentsLargeFont should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -11546,6 +11607,8 @@ exports[`Story Snapshots: CollapsedAttachmentsLargeFont should match snapshot 1` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -12134,6 +12197,7 @@ exports[`Story Snapshots: CollapsedAttachmentsLargeFont should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -12151,6 +12215,8 @@ exports[`Story Snapshots: CollapsedAttachmentsLargeFont should match snapshot 1` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -12978,6 +13044,7 @@ exports[`Story Snapshots: CollapsibleAttachmentWithText should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -12995,6 +13062,8 @@ exports[`Story Snapshots: CollapsibleAttachmentWithText should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -13585,6 +13654,7 @@ exports[`Story Snapshots: CollapsibleAttachmentWithText should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -13602,6 +13672,8 @@ exports[`Story Snapshots: CollapsibleAttachmentWithText should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -14585,6 +14657,7 @@ exports[`Story Snapshots: CollapsibleAttachmentWithTextLargeFont should match sn onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -14602,6 +14675,8 @@ exports[`Story Snapshots: CollapsibleAttachmentWithTextLargeFont should match sn "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -15192,6 +15267,7 @@ exports[`Story Snapshots: CollapsibleAttachmentWithTextLargeFont should match sn onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -15209,6 +15285,8 @@ exports[`Story Snapshots: CollapsibleAttachmentWithTextLargeFont should match sn "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -16192,6 +16270,7 @@ exports[`Story Snapshots: ColoredAttachments should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -16209,6 +16288,8 @@ exports[`Story Snapshots: ColoredAttachments should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -17464,6 +17545,7 @@ exports[`Story Snapshots: ColoredAttachmentsLargeFont should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -17481,6 +17563,8 @@ exports[`Story Snapshots: ColoredAttachmentsLargeFont should match snapshot 1`] "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -18736,6 +18820,7 @@ exports[`Story Snapshots: CustomFields should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -18753,6 +18838,8 @@ exports[`Story Snapshots: CustomFields should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -19568,6 +19655,7 @@ exports[`Story Snapshots: CustomFields should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -19585,6 +19673,8 @@ exports[`Story Snapshots: CustomFields should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -20698,6 +20788,7 @@ exports[`Story Snapshots: CustomFieldsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -20715,6 +20806,8 @@ exports[`Story Snapshots: CustomFieldsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -21530,6 +21623,7 @@ exports[`Story Snapshots: CustomFieldsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -21547,6 +21641,8 @@ exports[`Story Snapshots: CustomFieldsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -22660,6 +22756,7 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -22677,6 +22774,8 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -23178,6 +23277,7 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -23195,6 +23295,8 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -23887,6 +23989,7 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -23904,6 +24007,8 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -24414,6 +24519,7 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -24431,6 +24537,8 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -24877,6 +24985,7 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -24894,6 +25003,8 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -25395,6 +25506,7 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -25412,6 +25524,8 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -26104,6 +26218,7 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -26121,6 +26236,8 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -26631,6 +26748,7 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -26648,6 +26766,8 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -27094,6 +27214,7 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -27111,6 +27232,8 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -27670,6 +27793,7 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -27687,6 +27811,8 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -28248,6 +28374,7 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -28265,6 +28392,8 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -28826,6 +28955,7 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -28843,6 +28973,8 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -29417,6 +29549,7 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -29434,6 +29567,8 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -29993,6 +30128,7 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -30010,6 +30146,8 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -30571,6 +30709,7 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -30588,6 +30727,8 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -31149,6 +31290,7 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -31166,6 +31308,8 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -31740,6 +31884,7 @@ exports[`Story Snapshots: Edited should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -31757,6 +31902,8 @@ exports[`Story Snapshots: Edited should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -32487,6 +32634,7 @@ exports[`Story Snapshots: EditedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -32504,6 +32652,8 @@ exports[`Story Snapshots: EditedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -33235,6 +33385,7 @@ exports[`Story Snapshots: Editing should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -33252,6 +33403,8 @@ exports[`Story Snapshots: Editing should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -33699,6 +33852,7 @@ exports[`Story Snapshots: EditingLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -33716,6 +33870,8 @@ exports[`Story Snapshots: EditingLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -34162,6 +34318,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -34179,6 +34336,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -34611,6 +34770,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -34628,6 +34788,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -35038,6 +35200,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -35055,6 +35218,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -35236,6 +35401,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -35249,6 +35415,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -35280,6 +35448,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -35293,6 +35462,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -35324,6 +35495,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -35337,6 +35509,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -35575,6 +35749,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -35592,6 +35767,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -35773,6 +35950,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -35786,6 +35964,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -36024,6 +36204,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -36041,6 +36222,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -36244,6 +36427,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -36257,6 +36441,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -36495,6 +36681,7 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -36512,6 +36699,8 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -37024,6 +37213,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -37041,6 +37231,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -37473,6 +37665,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -37490,6 +37683,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -37900,6 +38095,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -37917,6 +38113,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -38098,6 +38296,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -38111,6 +38310,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -38142,6 +38343,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -38155,6 +38357,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -38186,6 +38390,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -38199,6 +38404,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -38437,6 +38644,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -38454,6 +38662,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -38635,6 +38845,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -38648,6 +38859,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -38886,6 +39099,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -38903,6 +39117,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -39106,6 +39322,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -39119,6 +39336,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -39357,6 +39576,7 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -39374,6 +39594,8 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -39886,6 +40108,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -39903,6 +40126,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -40616,6 +40841,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -40633,6 +40859,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -41072,6 +41300,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -41085,6 +41314,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -41678,6 +41909,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -41695,6 +41927,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -41968,6 +42202,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -41985,6 +42220,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -42456,6 +42693,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -42473,6 +42711,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -42859,6 +43099,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -42876,6 +43117,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -43415,6 +43658,7 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -43432,6 +43676,8 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -44218,6 +44464,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -44235,6 +44482,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -44948,6 +45197,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -44965,6 +45215,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -45404,6 +45656,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -45417,6 +45670,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -46010,6 +46265,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -46027,6 +46283,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -46300,6 +46558,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -46317,6 +46576,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -46788,6 +47049,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -46805,6 +47067,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -47191,6 +47455,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -47208,6 +47473,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -47747,6 +48014,7 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -47764,6 +48032,8 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -48469,6 +48739,7 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -48486,6 +48757,8 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -48911,6 +49184,7 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -48928,6 +49202,8 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -49366,6 +49642,7 @@ exports[`Story Snapshots: ErrorLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -49383,6 +49660,8 @@ exports[`Story Snapshots: ErrorLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -49808,6 +50087,7 @@ exports[`Story Snapshots: ErrorLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -49825,6 +50105,8 @@ exports[`Story Snapshots: ErrorLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -50344,6 +50626,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -50361,6 +50644,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -50939,6 +51224,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -50956,6 +51242,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -51534,6 +51822,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -51551,6 +51840,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -52129,6 +52420,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -52146,6 +52438,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -53272,6 +53566,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -53289,6 +53584,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -53867,6 +54164,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -53884,6 +54182,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -54462,6 +54762,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -54479,6 +54780,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -55057,6 +55360,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -55074,6 +55378,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -56187,6 +56493,7 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -56204,6 +56511,8 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -56956,6 +57265,7 @@ exports[`Story Snapshots: FullName should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -56973,6 +57283,8 @@ exports[`Story Snapshots: FullName should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -57419,6 +57731,7 @@ exports[`Story Snapshots: FullNameLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -57436,6 +57749,8 @@ exports[`Story Snapshots: FullNameLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -57882,6 +58197,7 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -57899,6 +58215,8 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -58332,6 +58650,7 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -58349,6 +58668,8 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -59206,6 +59527,7 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -59223,6 +59545,8 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -59669,6 +59993,7 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -59686,6 +60011,8 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -60119,6 +60446,7 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -60136,6 +60464,8 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -60993,6 +61323,7 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -61010,6 +61341,8 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -61461,6 +61794,7 @@ exports[`Story Snapshots: Ignored should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -61478,6 +61812,8 @@ exports[`Story Snapshots: Ignored should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -61776,6 +62112,7 @@ exports[`Story Snapshots: IgnoredLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -61793,6 +62130,8 @@ exports[`Story Snapshots: IgnoredLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -62086,6 +62425,7 @@ exports[`Story Snapshots: InlineKatex should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -62103,6 +62443,8 @@ exports[`Story Snapshots: InlineKatex should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -62535,6 +62877,7 @@ exports[`Story Snapshots: InlineKatexLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -62552,6 +62895,8 @@ exports[`Story Snapshots: InlineKatexLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -62976,6 +63321,7 @@ exports[`Story Snapshots: JitsiCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -62993,6 +63339,8 @@ exports[`Story Snapshots: JitsiCall should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -63501,6 +63849,7 @@ exports[`Story Snapshots: JitsiCallLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -63518,6 +63867,8 @@ exports[`Story Snapshots: JitsiCallLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -64034,6 +64385,7 @@ exports[`Story Snapshots: Katex should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -64051,6 +64403,8 @@ exports[`Story Snapshots: Katex should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -64445,6 +64799,7 @@ exports[`Story Snapshots: KatexArray should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -64462,6 +64817,8 @@ exports[`Story Snapshots: KatexArray should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -64856,6 +65213,7 @@ exports[`Story Snapshots: KatexArrayLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -64873,6 +65231,8 @@ exports[`Story Snapshots: KatexArrayLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -65267,6 +65627,7 @@ exports[`Story Snapshots: KatexLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -65284,6 +65645,8 @@ exports[`Story Snapshots: KatexLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -65680,6 +66043,7 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -65697,6 +66061,8 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -66330,6 +66696,7 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -66347,6 +66714,8 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -66928,6 +67297,7 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -66945,6 +67315,8 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -67701,6 +68073,7 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -67718,6 +68091,8 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -68351,6 +68726,7 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -68368,6 +68744,8 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -68949,6 +69327,7 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -68966,6 +69345,8 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -69720,6 +70101,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -69737,6 +70119,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -70170,6 +70554,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -70187,6 +70572,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -70656,6 +71043,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -70673,6 +71061,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -71141,6 +71531,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -71158,6 +71549,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -71544,6 +71937,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -71561,6 +71955,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -72067,6 +72463,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -72084,6 +72481,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -72548,6 +72947,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -72565,6 +72965,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -72981,6 +73383,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -72998,6 +73401,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -73555,6 +73960,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -73572,6 +73978,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -74129,6 +74537,7 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -74146,6 +74555,8 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -74797,6 +75208,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -74814,6 +75226,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -75247,6 +75661,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -75264,6 +75679,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -75733,6 +76150,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -75750,6 +76168,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -76218,6 +76638,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -76235,6 +76656,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -76621,6 +77044,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -76638,6 +77062,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -77144,6 +77570,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -77161,6 +77588,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -77625,6 +78054,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -77642,6 +78072,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -78058,6 +78490,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -78075,6 +78508,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -78632,6 +79067,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -78649,6 +79085,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -79206,6 +79644,7 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -79223,6 +79662,8 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -79874,6 +80315,7 @@ exports[`Story Snapshots: Mentions should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -79891,6 +80333,8 @@ exports[`Story Snapshots: Mentions should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -80521,6 +80965,7 @@ exports[`Story Snapshots: Mentions should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -80538,6 +80983,8 @@ exports[`Story Snapshots: Mentions should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -81160,6 +81607,7 @@ exports[`Story Snapshots: MentionsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -81177,6 +81625,8 @@ exports[`Story Snapshots: MentionsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -81807,6 +82257,7 @@ exports[`Story Snapshots: MentionsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -81824,6 +82275,8 @@ exports[`Story Snapshots: MentionsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -82446,6 +82899,7 @@ exports[`Story Snapshots: Message should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -82463,6 +82917,8 @@ exports[`Story Snapshots: Message should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -82842,6 +83298,7 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -82859,6 +83316,8 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -83602,6 +84061,7 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -83619,6 +84079,8 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -84410,6 +84872,7 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -84427,6 +84890,8 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -85224,6 +85689,7 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -85241,6 +85707,8 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -85929,6 +86397,7 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -85946,6 +86415,8 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -86844,6 +87315,7 @@ exports[`Story Snapshots: MessageWithReadReceipt should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -86861,6 +87333,8 @@ exports[`Story Snapshots: MessageWithReadReceipt should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -87568,6 +88042,7 @@ exports[`Story Snapshots: MessageWithReadReceipt should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -87585,6 +88060,8 @@ exports[`Story Snapshots: MessageWithReadReceipt should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -88305,6 +88782,7 @@ exports[`Story Snapshots: MessageWithReadReceiptLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -88322,6 +88800,8 @@ exports[`Story Snapshots: MessageWithReadReceiptLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -89029,6 +89509,7 @@ exports[`Story Snapshots: MessageWithReadReceiptLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -89046,6 +89527,8 @@ exports[`Story Snapshots: MessageWithReadReceiptLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -89766,6 +90249,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -89783,6 +90267,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -90397,6 +90883,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -90414,6 +90901,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -90750,6 +91239,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -90763,6 +91253,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -90967,6 +91459,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -90980,6 +91473,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -91350,6 +91845,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -91367,6 +91863,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -92158,6 +92656,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -92175,6 +92674,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -92591,6 +93092,7 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -92604,6 +93106,8 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -93040,6 +93544,7 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -93057,6 +93562,8 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -93658,6 +94165,7 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -93675,6 +94183,8 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -94383,6 +94893,7 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -94400,6 +94911,8 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -95174,6 +95687,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -95191,6 +95705,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -95792,6 +96308,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -95809,6 +96326,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -96517,6 +97036,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -96534,6 +97054,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -97295,6 +97817,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -97312,6 +97835,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -98109,6 +98634,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -98126,6 +98652,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -98814,6 +99342,7 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -98831,6 +99360,8 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -99729,6 +100260,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -99746,6 +100278,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -100360,6 +100894,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -100377,6 +100912,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -100713,6 +101250,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -100726,6 +101264,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -101035,6 +101575,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -101052,6 +101593,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -101843,6 +102386,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -101860,6 +102404,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -102276,6 +102822,7 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -102289,6 +102836,8 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -102726,6 +103275,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -102743,6 +103293,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -103662,6 +104214,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -103679,6 +104232,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -104091,6 +104646,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -104108,6 +104664,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -104520,6 +105078,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -104537,6 +105096,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -104949,6 +105510,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -104966,6 +105528,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -105378,6 +105942,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -105395,6 +105960,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -105807,6 +106374,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -105824,6 +106392,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -106236,6 +106806,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -106253,6 +106824,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -106665,6 +107238,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -106682,6 +107256,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -107094,6 +107670,7 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -107111,6 +107688,8 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -107409,6 +107988,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -107426,6 +108006,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -108345,6 +108927,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -108362,6 +108945,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -108774,6 +109359,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -108791,6 +109377,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -109203,6 +109791,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -109220,6 +109809,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -109632,6 +110223,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -109649,6 +110241,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -110061,6 +110655,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -110078,6 +110673,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -110490,6 +111087,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -110507,6 +111105,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -110919,6 +111519,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -110936,6 +111537,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -111348,6 +111951,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -111365,6 +111969,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -111777,6 +112383,7 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -111794,6 +112401,8 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -112091,6 +112700,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -112108,6 +112718,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -112460,6 +113072,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -112477,6 +113090,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -113144,6 +113759,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -113161,6 +113777,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -113513,6 +114131,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -113530,6 +114149,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -114197,6 +114818,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -114214,6 +114836,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -114566,6 +115190,7 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -114583,6 +115208,8 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -115263,6 +115890,7 @@ exports[`Story Snapshots: Pinned should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -115280,6 +115908,8 @@ exports[`Story Snapshots: Pinned should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -115998,6 +116628,7 @@ exports[`Story Snapshots: PinnedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -116015,6 +116646,8 @@ exports[`Story Snapshots: PinnedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -116733,6 +117366,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -116750,6 +117384,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -117155,6 +117791,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -117168,6 +117805,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -117739,6 +118378,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -117756,6 +118396,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -118055,6 +118697,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -118068,6 +118711,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -118183,6 +118828,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -118196,6 +118842,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -118311,6 +118959,7 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -118324,6 +118973,8 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -119226,6 +119877,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -119243,6 +119895,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -119648,6 +120302,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -119661,6 +120316,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -120232,6 +120889,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -120249,6 +120907,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -120548,6 +121208,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -120561,6 +121222,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -120676,6 +121339,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -120689,6 +121353,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -120804,6 +121470,7 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -120817,6 +121484,8 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` "width": 19, } } + symbolSize={null} + symbolWeight={null} transition={null} width={19} /> @@ -121720,6 +122389,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -121737,6 +122407,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -122533,6 +123205,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -122550,6 +123223,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -122839,6 +123514,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -122856,6 +123532,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -123145,6 +123823,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -123162,6 +123841,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -123460,6 +124141,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -123477,6 +124159,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -124273,6 +124957,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -124290,6 +124975,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -124579,6 +125266,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -124596,6 +125284,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -124885,6 +125575,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -124902,6 +125593,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -125327,6 +126020,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -125344,6 +126038,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -125633,6 +126329,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -125650,6 +126347,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -125939,6 +126638,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -125956,6 +126656,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -126245,6 +126947,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -126262,6 +126965,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -126687,6 +127392,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -126704,6 +127410,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -126993,6 +127701,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -127010,6 +127719,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -127299,6 +128010,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -127316,6 +128028,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -127605,6 +128319,7 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -127622,6 +128337,8 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -127919,6 +128636,7 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -127936,6 +128654,8 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -128445,6 +129165,7 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -128462,6 +129183,8 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -129209,6 +129932,7 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -129226,6 +129950,8 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -129735,6 +130461,7 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -129752,6 +130479,8 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -130499,6 +131228,7 @@ exports[`Story Snapshots: StaticAvatar should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -130516,6 +131246,8 @@ exports[`Story Snapshots: StaticAvatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -130962,6 +131694,7 @@ exports[`Story Snapshots: StaticAvatarLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -130979,6 +131712,8 @@ exports[`Story Snapshots: StaticAvatarLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -131351,6 +132086,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -131368,6 +132104,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -131591,6 +132329,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -131608,6 +132347,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -131831,6 +132572,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -131848,6 +132590,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -132074,6 +132818,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -132091,6 +132836,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -132314,6 +133061,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -132331,6 +133079,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -132554,6 +133304,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -132571,6 +133322,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -132794,6 +133547,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -132811,6 +133565,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -133034,6 +133790,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -133051,6 +133808,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -133274,6 +134033,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -133291,6 +134051,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -133514,6 +134276,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -133531,6 +134294,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -133754,6 +134519,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -133771,6 +134537,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -133994,6 +134762,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -134011,6 +134780,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -134234,6 +135005,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -134251,6 +135023,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -134474,6 +135248,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -134491,6 +135266,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -134714,6 +135491,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -134731,6 +135509,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -134954,6 +135734,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -134971,6 +135752,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -135194,6 +135977,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -135211,6 +135995,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -135434,6 +136220,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -135451,6 +136238,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -135674,6 +136463,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -135691,6 +136481,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -135914,6 +136706,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -135931,6 +136724,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -136154,6 +136949,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -136171,6 +136967,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -136394,6 +137192,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -136411,6 +137210,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -136634,6 +137435,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -136651,6 +137453,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -136874,6 +137678,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -136891,6 +137696,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -137114,6 +137921,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -137131,6 +137939,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -137354,6 +138164,7 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -137371,6 +138182,8 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` "width": 20, } } + symbolSize={null} + symbolWeight={null} transition={null} width={20} /> @@ -137582,6 +138395,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -137599,6 +138413,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -137822,6 +138638,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -137839,6 +138656,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -138062,6 +138881,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -138079,6 +138899,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -138305,6 +139127,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -138322,6 +139145,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -138545,6 +139370,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -138562,6 +139388,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -138785,6 +139613,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -138802,6 +139631,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -139025,6 +139856,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -139042,6 +139874,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -139265,6 +140099,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -139282,6 +140117,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -139505,6 +140342,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -139522,6 +140360,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -139745,6 +140585,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -139762,6 +140603,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -139985,6 +140828,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -140002,6 +140846,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -140225,6 +141071,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -140242,6 +141089,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -140465,6 +141314,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -140482,6 +141332,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -140705,6 +141557,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -140722,6 +141575,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -140945,6 +141800,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -140962,6 +141818,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -141185,6 +142043,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -141202,6 +142061,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -141425,6 +142286,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -141442,6 +142304,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -141665,6 +142529,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -141682,6 +142547,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -141905,6 +142772,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -141922,6 +142790,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -142145,6 +143015,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -142162,6 +143033,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -142385,6 +143258,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -142402,6 +143276,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -142625,6 +143501,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -142642,6 +143519,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -142865,6 +143744,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -142882,6 +143762,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -143105,6 +143987,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -143122,6 +144005,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -143345,6 +144230,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -143362,6 +144248,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -143585,6 +144473,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -143602,6 +144491,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "width": 26, } } + symbolSize={null} + symbolWeight={null} transition={null} width={26} /> @@ -143879,6 +144770,7 @@ exports[`Story Snapshots: Temp should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -143896,6 +144788,8 @@ exports[`Story Snapshots: Temp should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -144338,6 +145232,7 @@ exports[`Story Snapshots: TempLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -144355,6 +145250,8 @@ exports[`Story Snapshots: TempLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -144805,6 +145702,7 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -144822,6 +145720,8 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -145154,6 +146054,7 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -145171,6 +146072,8 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` "width": 80, } } + symbolSize={null} + symbolWeight={null} transition={null} width={80} /> @@ -145488,6 +146391,7 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -145505,6 +146409,8 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -145837,6 +146743,7 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -145854,6 +146761,8 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] "width": 80, } } + symbolSize={null} + symbolWeight={null} transition={null} width={80} /> @@ -146171,6 +147080,7 @@ exports[`Story Snapshots: TimeFormat should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -146188,6 +147098,8 @@ exports[`Story Snapshots: TimeFormat should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -146634,6 +147546,7 @@ exports[`Story Snapshots: TimeFormatLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -146651,6 +147564,8 @@ exports[`Story Snapshots: TimeFormatLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -147097,6 +148012,7 @@ exports[`Story Snapshots: Translated should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -147114,6 +148030,8 @@ exports[`Story Snapshots: Translated should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -147595,6 +148513,7 @@ exports[`Story Snapshots: TranslatedLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -147612,6 +148531,8 @@ exports[`Story Snapshots: TranslatedLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -148093,6 +149014,7 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdown should match snapshot onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -148110,6 +149032,8 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdown should match snapshot "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -149390,6 +150314,7 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdownLargeFont should match onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -149407,6 +150332,8 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdownLargeFont should match "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -150687,6 +151614,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -150704,6 +151632,8 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -151279,6 +152209,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -151296,6 +152227,8 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -151521,6 +152454,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -151534,6 +152468,8 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -152140,6 +153076,7 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -152157,6 +153094,8 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -152628,6 +153567,7 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -152645,6 +153585,8 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -153066,6 +154008,7 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -153083,6 +154026,8 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -153554,6 +154499,7 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -153571,6 +154517,8 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -153992,6 +154940,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -154009,6 +154958,8 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -154584,6 +155535,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -154601,6 +155553,8 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -154826,6 +155780,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -154839,6 +155794,8 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -155445,6 +156402,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -155462,6 +156420,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -155814,6 +156774,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -155831,6 +156792,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -156498,6 +157461,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -156515,6 +157479,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -156867,6 +157833,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -156884,6 +157851,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -157551,6 +158520,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -157568,6 +158538,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -157920,6 +158892,7 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -157937,6 +158910,8 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -158617,6 +159592,7 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -158634,6 +159610,8 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -159089,6 +160067,7 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -159106,6 +160085,8 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -159574,6 +160555,7 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -159591,6 +160573,8 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -160046,6 +161030,7 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -160063,6 +161048,8 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -160531,6 +161518,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -160548,6 +161536,8 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -160783,6 +161773,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -160796,6 +161787,8 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -162650,6 +163643,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -162663,6 +163657,8 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -163387,6 +164383,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -163404,6 +164401,8 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -163639,6 +164638,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -163652,6 +164652,8 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -165482,6 +166484,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -165495,6 +166498,8 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -166219,6 +167224,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -166236,6 +167242,8 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -166612,6 +167620,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -166625,6 +167634,8 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -167013,6 +168024,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -167026,6 +168038,8 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -167267,6 +168281,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -167280,6 +168295,8 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -167540,6 +168557,7 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -167557,6 +168575,8 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -167933,6 +168953,7 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -167946,6 +168967,8 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -168334,6 +169357,7 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -168347,6 +169371,8 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -168607,6 +169633,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -168624,6 +169651,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -168859,6 +169888,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -168872,6 +169902,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -169273,6 +170305,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -169290,6 +170323,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -169591,6 +170626,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -169604,6 +170640,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -169865,6 +170903,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -169878,6 +170917,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -170440,6 +171481,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -170457,6 +171499,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -171220,6 +172264,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -171237,6 +172282,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -171472,6 +172519,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -171485,6 +172533,8 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -171886,6 +172936,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -171903,6 +172954,8 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -172892,6 +173945,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -172909,6 +173963,8 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -173672,6 +174728,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -173689,6 +174746,8 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -173924,6 +174983,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -173937,6 +174997,8 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -174338,6 +175400,7 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -174355,6 +175418,8 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -174590,6 +175655,7 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -174603,6 +175669,8 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -175304,6 +176372,7 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -175321,6 +176390,8 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -176029,6 +177100,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -176046,6 +177118,8 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -176281,6 +177355,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -176294,6 +177369,8 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` "width": 15, } } + symbolSize={null} + symbolWeight={null} transition={null} width={15} /> @@ -176653,6 +177730,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -176670,6 +177748,8 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> @@ -177172,6 +178252,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -177189,6 +178270,8 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` "width": 46.800000000000004, } } + symbolSize={null} + symbolWeight={null} transition={null} width={46.800000000000004} /> diff --git a/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap b/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap index 4dbc206d95b..7fbe6b02650 100644 --- a/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap +++ b/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap @@ -706,6 +706,7 @@ exports[`Story Snapshots: EmojiCustom should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -719,6 +720,8 @@ exports[`Story Snapshots: EmojiCustom should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -1337,6 +1340,7 @@ exports[`Story Snapshots: MessageAvatar should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1354,6 +1358,8 @@ exports[`Story Snapshots: MessageAvatar should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> diff --git a/app/lib/methods/helpers/theme.ts b/app/lib/methods/helpers/theme.ts index cf41f3740ca..42f045e6107 100644 --- a/app/lib/methods/helpers/theme.ts +++ b/app/lib/methods/helpers/theme.ts @@ -22,7 +22,7 @@ export const initialTheme = (): IThemePreference => { export const defaultTheme = (): TThemeMode => { const systemTheme = Appearance.getColorScheme(); - if (systemTheme) { + if (systemTheme === 'light' || systemTheme === 'dark') { return systemTheme; } return 'light'; diff --git a/app/stacks/MasterDetailStack/ModalContainer.tsx b/app/stacks/MasterDetailStack/ModalContainer.tsx index 5e1759d4231..691d4e08bd4 100644 --- a/app/stacks/MasterDetailStack/ModalContainer.tsx +++ b/app/stacks/MasterDetailStack/ModalContainer.tsx @@ -25,7 +25,7 @@ const styles = StyleSheet.create({ justifyContent: 'center' }, backdrop: { - ...StyleSheet.absoluteFillObject + ...StyleSheet.absoluteFill } }); diff --git a/app/views/CallView/__snapshots__/index.test.tsx.snap b/app/views/CallView/__snapshots__/index.test.tsx.snap index a29f9ff832c..09ca015dd9a 100644 --- a/app/views/CallView/__snapshots__/index.test.tsx.snap +++ b/app/views/CallView/__snapshots__/index.test.tsx.snap @@ -122,6 +122,7 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -139,6 +140,8 @@ exports[`Story Snapshots: ConnectedCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -1017,6 +1020,7 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1034,6 +1038,8 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -1918,6 +1924,7 @@ exports[`Story Snapshots: MutedAndOnHold should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1935,6 +1942,8 @@ exports[`Story Snapshots: MutedAndOnHold should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -2813,6 +2822,7 @@ exports[`Story Snapshots: MutedCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2830,6 +2840,8 @@ exports[`Story Snapshots: MutedCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -3708,6 +3720,7 @@ exports[`Story Snapshots: OnHoldCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3725,6 +3738,8 @@ exports[`Story Snapshots: OnHoldCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -4603,6 +4618,7 @@ exports[`Story Snapshots: SpeakerOn should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -4620,6 +4636,8 @@ exports[`Story Snapshots: SpeakerOn should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -5481,6 +5499,7 @@ exports[`Story Snapshots: TabletConnectedCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5498,6 +5517,8 @@ exports[`Story Snapshots: TabletConnectedCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -6348,6 +6369,7 @@ exports[`Story Snapshots: TabletConnectingCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6365,6 +6387,8 @@ exports[`Story Snapshots: TabletConnectingCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -7221,6 +7245,7 @@ exports[`Story Snapshots: TabletMutedAndOnHold should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -7238,6 +7263,8 @@ exports[`Story Snapshots: TabletMutedAndOnHold should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -8088,6 +8115,7 @@ exports[`Story Snapshots: TabletMutedCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8105,6 +8133,8 @@ exports[`Story Snapshots: TabletMutedCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -8955,6 +8985,7 @@ exports[`Story Snapshots: TabletOnHoldCall should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -8972,6 +9003,8 @@ exports[`Story Snapshots: TabletOnHoldCall should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -9822,6 +9855,7 @@ exports[`Story Snapshots: TabletSpeakerOn should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -9839,6 +9873,8 @@ exports[`Story Snapshots: TabletSpeakerOn should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -10689,6 +10725,7 @@ exports[`Story Snapshots: TabletWithDialpad should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -10706,6 +10743,8 @@ exports[`Story Snapshots: TabletWithDialpad should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -11573,6 +11612,7 @@ exports[`Story Snapshots: WithDialpad should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -11590,6 +11630,8 @@ exports[`Story Snapshots: WithDialpad should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> diff --git a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap index 25a50d663a9..414681cf33c 100644 --- a/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap +++ b/app/views/CallView/components/Dialpad/__snapshots__/Dialpad.test.tsx.snap @@ -26,13 +26,13 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` } > @@ -252,6 +255,7 @@ exports[`Story Snapshots: UsernameOnly should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -269,6 +273,8 @@ exports[`Story Snapshots: UsernameOnly should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> diff --git a/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap b/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap index 1dedcc55ec4..2260fa4e792 100644 --- a/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap +++ b/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap @@ -139,6 +139,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -156,6 +157,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -537,6 +540,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -554,6 +558,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -935,6 +941,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -952,6 +959,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1335,6 +1344,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1352,6 +1362,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1733,6 +1745,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1750,6 +1763,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2151,6 +2166,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2168,6 +2184,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2536,6 +2554,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2553,6 +2572,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2921,6 +2942,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2938,6 +2960,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> diff --git a/app/views/NewMessageView/__snapshots__/Item.test.tsx.snap b/app/views/NewMessageView/__snapshots__/Item.test.tsx.snap index 530b9e1be5f..6b68f09c5e0 100644 --- a/app/views/NewMessageView/__snapshots__/Item.test.tsx.snap +++ b/app/views/NewMessageView/__snapshots__/Item.test.tsx.snap @@ -95,6 +95,7 @@ exports[`NewMessageView Item should match snapshot when hasMediaCallPermission i onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -112,6 +113,8 @@ exports[`NewMessageView Item should match snapshot when hasMediaCallPermission i "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -259,6 +262,7 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -276,6 +280,8 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -485,6 +491,7 @@ exports[`Story Snapshots: LongName should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -502,6 +509,8 @@ exports[`Story Snapshots: LongName should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> @@ -711,6 +720,7 @@ exports[`Story Snapshots: NoVoiceCallPermission should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -728,6 +738,8 @@ exports[`Story Snapshots: NoVoiceCallPermission should match snapshot 1`] = ` "width": 30, } } + symbolSize={null} + symbolWeight={null} transition={null} width={30} /> diff --git a/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap b/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap index de1d3b1e0a2..de5a8f4f41f 100644 --- a/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap +++ b/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap @@ -244,6 +244,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -258,6 +259,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -565,6 +568,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -579,6 +583,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -886,6 +892,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -900,6 +907,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1212,6 +1221,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1226,6 +1236,8 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1533,6 +1545,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1547,6 +1560,8 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -1859,6 +1874,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -1873,6 +1889,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -2180,6 +2198,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -2194,6 +2213,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> @@ -2501,6 +2522,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onLoadStart={[Function]} onProgress={[Function]} placeholder={[]} + sfEffect={null} source={ [ { @@ -2515,6 +2537,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 44, } } + symbolSize={null} + symbolWeight={null} transition={null} width={44} /> diff --git a/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap b/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap index 510bdb3df62..b6b2cbca761 100644 --- a/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap +++ b/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap @@ -46,6 +46,7 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -63,6 +64,8 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> @@ -116,6 +119,7 @@ exports[`Story Snapshots: WithEdit should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -133,6 +137,8 @@ exports[`Story Snapshots: WithEdit should match snapshot 1`] = ` "width": 120, } } + symbolSize={null} + symbolWeight={null} transition={null} width={120} /> diff --git a/app/views/RoomView/List/hooks/useFloatingDate.test.ts b/app/views/RoomView/List/hooks/useFloatingDate.test.ts index 2f30c9937d1..dcecd388afd 100644 --- a/app/views/RoomView/List/hooks/useFloatingDate.test.ts +++ b/app/views/RoomView/List/hooks/useFloatingDate.test.ts @@ -118,7 +118,16 @@ describe('useFloatingDate', () => { const fadeOut = { type: 'timing', toValue: 0, duration: 300 }; const animationsOf = (result: any) => (result.current.opacity as any).animations; - const settle = (ms: number) => act(() => jest.advanceTimersByTime(ms)); + const scroll = (callback: () => void) => + act(() => { + callback(); + jest.runAllTicks(); + }); + const settle = (ms: number) => + act(() => { + jest.advanceTimersByTime(ms); + jest.runAllTicks(); + }); it('keeps viewabilityConfigCallbackPairs identity stable across updates', () => { const { result, rerender } = renderHook(() => useFloatingDate()); @@ -140,7 +149,7 @@ describe('useFloatingDate', () => { it('fades in when the user starts dragging', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); expect(animationsOf(result)).toEqual([fadeIn]); expect(result.current.opacity.value).toBe(1); }); @@ -150,10 +159,10 @@ describe('useFloatingDate', () => { // crept towards 1 without arriving. it('issues the fade in once across a momentum event storm', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); for (let i = 0; i < 20; i++) { - act(() => result.current.scrollEvents.onMomentumEnd()); - act(() => result.current.scrollEvents.onMomentumBegin()); + scroll(() => result.current.scrollEvents.onMomentumEnd()); + scroll(() => result.current.scrollEvents.onMomentumBegin()); } expect(animationsOf(result)).toEqual([fadeIn]); expect(result.current.opacity.value).toBe(1); @@ -161,8 +170,8 @@ describe('useFloatingDate', () => { it('holds at full opacity until the settle delay elapses', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); - act(() => result.current.scrollEvents.onEndDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onEndDrag()); settle(999); expect(animationsOf(result)).toEqual([fadeIn]); settle(1); @@ -172,11 +181,11 @@ describe('useFloatingDate', () => { it('re-arms the settle delay so the fling that follows a drag keeps the pill up', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); - act(() => result.current.scrollEvents.onEndDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onEndDrag()); settle(500); - act(() => result.current.scrollEvents.onMomentumBegin()); - act(() => result.current.scrollEvents.onMomentumEnd()); + scroll(() => result.current.scrollEvents.onMomentumBegin()); + scroll(() => result.current.scrollEvents.onMomentumEnd()); settle(999); expect(animationsOf(result)).toEqual([fadeIn]); settle(1); @@ -185,10 +194,10 @@ describe('useFloatingDate', () => { it('cancels the pending fade out when scrolling resumes', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); - act(() => result.current.scrollEvents.onEndDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onEndDrag()); settle(500); - act(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); settle(5000); expect(animationsOf(result)).toEqual([fadeIn]); expect(result.current.opacity.value).toBe(1); @@ -196,18 +205,18 @@ describe('useFloatingDate', () => { it('fades in again after a completed fade out', () => { const { result } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); - act(() => result.current.scrollEvents.onEndDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onEndDrag()); settle(HIDE_DELAY_MS); - act(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); expect(animationsOf(result)).toEqual([fadeIn, fadeOut, fadeIn]); expect(result.current.opacity.value).toBe(1); }); it('drops the pending fade out on unmount', () => { const { result, unmount } = renderHook(() => useFloatingDate()); - act(() => result.current.scrollEvents.onBeginDrag()); - act(() => result.current.scrollEvents.onEndDrag()); + scroll(() => result.current.scrollEvents.onBeginDrag()); + scroll(() => result.current.scrollEvents.onEndDrag()); unmount(); settle(5000); expect(animationsOf(result)).toEqual([fadeIn]); diff --git a/app/views/ShareView/Preview.tsx b/app/views/ShareView/Preview.tsx index 4be35d248e2..370f0bc31ef 100644 --- a/app/views/ShareView/Preview.tsx +++ b/app/views/ShareView/Preview.tsx @@ -37,7 +37,7 @@ const VideoPreview = memo(({ uri, width, height }: { uri: string; width?: number style={{ width: width || '100%', height: height || '100%' }} contentFit='contain' nativeControls - allowsFullscreen + fullscreenOptions={{ enable: true }} /> ); }); diff --git a/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap b/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap index 367af2db8e6..9366619b1ec 100644 --- a/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap +++ b/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap @@ -139,6 +139,7 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -156,6 +157,8 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -678,6 +681,7 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -695,6 +699,8 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1217,6 +1223,7 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1234,6 +1241,8 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -1743,6 +1752,7 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -1760,6 +1770,8 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2302,6 +2314,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2319,6 +2332,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -2825,6 +2840,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -2842,6 +2858,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -3348,6 +3366,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3365,6 +3384,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -3871,6 +3892,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -3888,6 +3910,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -4394,6 +4418,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -4411,6 +4436,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -4937,6 +4964,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -4954,6 +4982,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -5463,6 +5493,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -5480,6 +5511,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> @@ -5989,6 +6022,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` onProgress={[Function]} placeholder={[]} priority="high" + sfEffect={null} source={ [ { @@ -6006,6 +6040,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` "width": 36, } } + symbolSize={null} + symbolWeight={null} transition={null} width={36} /> diff --git a/jest.setup.js b/jest.setup.js index 9ebbf508fb7..c82820c93b7 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -4,6 +4,13 @@ import { Image } from 'expo-image'; jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage); +jest.mock('./app/lib/methods/handleMediaDownload', () => ({ + ...jest.requireActual('./app/lib/methods/handleMediaDownload'), + getMediaCache: jest.fn(() => Promise.resolve({ exists: false })), + downloadMediaFile: jest.fn(() => Promise.resolve('')), + isDownloadActive: jest.fn(() => false) +})); + jest.mock('react-native-safe-area-context', () => { const inset = { top: 0, right: 0, bottom: 0, left: 0 }; return { From 998957d7ec4300ba8df6bce759ca7090ec06ccca Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 16 Sep 2026 09:50:05 -0300 Subject: [PATCH 10/55] fix(ios): support React Native 0.86 and Expo 57 (#7696) * fix(ios): support React Native 0.86 and Expo 57 * test: fix jest failures under Node 22 Resolve Expo's lazy fetch global in jest setup so suites that fully mock react-native no longer crash when jest enumerates globals at teardown. Restore real timers only after Testing Library unmounts, so immediates scheduled with fake timers are cancelled with the same clock. * fix(android): adopt Expo 57 autolinking plugin and drop jcenter from patched libraries Expo 57 removed scripts/autolinking.gradle in favour of the expo-autolinking-settings and expo-root-project Gradle plugins. Gradle 9 removed jcenter(), which @react-native-cookies/cookies and react-native-math-view still declared. Bump the iOS Pods cache key so runners stop restoring Local Podspecs generated for the previous React Native version. * fix(android): build with React Native 0.86 codegen and Expo 57 prebuilt modules Bump @react-native/codegen, babel-preset and typescript-config to 0.86.3 so libraries stop resolving the stale 0.80 codegen. Build the four patched Expo packages from source, since Expo 57 ships prebuilt Android artifacts that ignore patch-package changes. Patch camera-roll to drop string literal unions from its spec, keyboard-controller for the non-null onConfigurationChanged signature, math-view to drop the removed UIManagerModuleListener import, and expo-font for the nullable loadedFonts field. Declare androidx.localbroadcastmanager explicitly and resolve the WRITE_EXTERNAL_STORAGE maxSdkVersion manifest conflict. * fix: drop undefined request headers rejected by Expo fetch Expo 57 installs its native fetch as the global and rejects header entries whose value is undefined. getServerInfo sent X-Auth-Token and X-User-Id as undefined before login, so every deep link login fell back to the Add workspace screen and all E2E flows failed. * test(e2e): wait for LoginView transition before keyboard navigation * fix(login): keep focus on the password field when submitting with a hardware keyboard * fix(ios): compile the release bundle with the hermesc matching the bundled Hermes runtime * fix(ios): expose room header testIDs to accessibility tree An accessible wrapper around the room header hides its children from XCUITest on React Native 0.86, so Maestro could not find the header title or the header button. Move the accessibility label and role to the pressable header, which already exposes its children. * fix(ios): expose rooms list header testIDs to accessibility tree Same cause as the room header: an accessible wrapper inside the native stack header hides its children from XCUITest, so Maestro could not find the servers list button. * fix(ios): bump react-native-linear-gradient to 2.8.3 to stop zero-size layer crash on mention autocomplete * fix(ios): address upgrade review feedback * fix(ios): exclude Android keyboard flow change --- .github/actions/build-ios/action.yml | 4 +- .github/actions/upload-ios/action.yml | 4 +- CLAUDE.md | 2 +- README.md | 2 +- app/containers/RoomHeader/RoomHeader.tsx | 13 +- .../__snapshots__/RoomHeader.test.tsx.snap | 183 ++- .../methods/helpers/__tests__/fetch.test.ts | 29 + app/lib/methods/helpers/fetch.ts | 11 +- app/views/LoginView/UserForm.tsx | 3 +- app/views/RoomsListView/components/Header.tsx | 8 +- app/views/ShareView/ShareView.test.tsx | 8 +- ios/AppDelegate.swift | 7 +- ios/Podfile | 15 +- ios/Podfile.lock | 1169 +++++++++++------ ios/RocketChat.xcodeproj/project.pbxproj | 62 +- jest.setup.js | 3 + package.json | 8 +- ...ative-camera-roll+camera-roll+7.10.2.patch | 26 + pnpm-lock.yaml | 192 +-- 19 files changed, 1026 insertions(+), 723 deletions(-) create mode 100644 app/lib/methods/helpers/__tests__/fetch.test.ts create mode 100644 patches/@react-native-camera-roll+camera-roll+7.10.2.patch diff --git a/.github/actions/build-ios/action.yml b/.github/actions/build-ios/action.yml index d9e6e064f42..01728c71c7b 100644 --- a/.github/actions/build-ios/action.yml +++ b/.github/actions/build-ios/action.yml @@ -53,9 +53,9 @@ runs: path: | ~/.pods ios/Pods - key: pods-v1-{{ checksum "ios/Podfile.lock" }} + key: pods-v2-${{ hashFiles('ios/Podfile.lock') }} restore-keys: | - pods-v1- + pods-v2- - name: pod install run: | diff --git a/.github/actions/upload-ios/action.yml b/.github/actions/upload-ios/action.yml index ef727a14c4d..bfb05673825 100644 --- a/.github/actions/upload-ios/action.yml +++ b/.github/actions/upload-ios/action.yml @@ -57,9 +57,9 @@ runs: path: | ~/.pods ios/Pods - key: pods-v1-{{ checksum "ios/Podfile.lock" }} + key: pods-v2-${{ hashFiles('ios/Podfile.lock') }} restore-keys: | - pods-v1- + pods-v2- - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 diff --git a/CLAUDE.md b/CLAUDE.md index 048929f381f..6391983df5b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -Rocket.Chat React Native mobile client. Single-package React Native app (not a monorepo) using pnpm. Supports iOS 13.4+ and Android 6.0+. +Rocket.Chat React Native mobile client. Single-package React Native app (not a monorepo) using pnpm. Supports iOS 16.4+ and Android 6.0+. Read CONTEXT.md. diff --git a/README.md b/README.md index ed7fb227d16..3ce08b95d7f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Rocket.Chat Mobile - **Supported server versions:** 0.70.0+ -- **Supported iOS versions**: 13.4+ +- **Supported iOS versions**: 16.4+ - **Supported Android versions**: 6.0+ ## Download diff --git a/app/containers/RoomHeader/RoomHeader.tsx b/app/containers/RoomHeader/RoomHeader.tsx index 9b702283284..06b833796c9 100644 --- a/app/containers/RoomHeader/RoomHeader.tsx +++ b/app/containers/RoomHeader/RoomHeader.tsx @@ -233,11 +233,14 @@ const Header = ({ enableA11yFocus={autoFocusHeader && !disabled} focusable={!disabled} canBeFocused={!disabled} - style={[styles.container, { opacity: disabled ? 0.5 : 1, height: 36.9 * fontScale }]} - accessible - accessibilityLabel={accessibilityLabel} - accessibilityRole='header'> - + style={[styles.container, { opacity: disabled ? 0.5 : 1, height: 36.9 * fontScale }]}> + {tmid ? null : ( { + const globalFetch = jest.fn().mockResolvedValue({} as Response); + + beforeEach(() => { + globalFetch.mockClear(); + globalThis.fetch = globalFetch; + }); + + it('drops headers whose value is undefined or null', async () => { + await fetchWithHeaders('https://example.com/api/info', { + method: 'GET', + headers: { 'Content-Type': 'application/json', 'X-Auth-Token': undefined, 'X-User-Id': null as unknown as undefined } + }); + + const [, options] = globalFetch.mock.calls[0]; + expect(options.headers).toEqual({ 'Content-Type': 'application/json', ...headers }); + }); + + it('keeps defined caller headers alongside the default ones', async () => { + await fetchWithHeaders('https://example.com/api/info', { + headers: { 'X-Auth-Token': 'token', 'X-User-Id': 'id' } + }); + + const [, options] = globalFetch.mock.calls[0]; + expect(options.headers).toEqual({ 'X-Auth-Token': 'token', 'X-User-Id': 'id', ...headers }); + }); +}); diff --git a/app/lib/methods/helpers/fetch.ts b/app/lib/methods/helpers/fetch.ts index d15a050e8fc..33e68813f70 100644 --- a/app/lib/methods/helpers/fetch.ts +++ b/app/lib/methods/helpers/fetch.ts @@ -39,11 +39,14 @@ export const BASIC_AUTH_KEY = 'BASIC_AUTH_KEY'; RocketChatSettings.customHeaders = headers; +const withoutEmptyValues = (requestHeaders: CustomHeaders): Record => + Object.fromEntries(Object.entries(requestHeaders).filter((entry): entry is [string, string] => typeof entry[1] === 'string')); + export default (url: string, options: IOptions = {}): Promise => { - let customOptions = { ...options, headers: RocketChatSettings.customHeaders }; - if (options && options.headers) { - customOptions = { ...customOptions, headers: { ...options.headers, ...customOptions.headers } }; - } + const customOptions = { + ...options, + headers: withoutEmptyValues({ ...options.headers, ...RocketChatSettings.customHeaders }) + }; // TODO: Check if this really works and if anyone else has complained about this problem. // if (RocketChat.controller) { // // @ts-ignore diff --git a/app/views/LoginView/UserForm.tsx b/app/views/LoginView/UserForm.tsx index 90eba5b34ce..f979dfc87f2 100644 --- a/app/views/LoginView/UserForm.tsx +++ b/app/views/LoginView/UserForm.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import { Keyboard, Text, View, Alert } from 'react-native'; +import { Text, View, Alert, Keyboard } from 'react-native'; import { useDispatch } from 'react-redux'; import { type RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { type NativeStackNavigationProp } from '@react-navigation/native-stack'; @@ -111,6 +111,7 @@ const UserForm = () => { placeholder={Accounts_EmailOrUsernamePlaceholder} keyboardType='email-address' returnKeyType='next' + submitBehavior='submit' onSubmitEditing={() => setFocus('password')} testID='login-view-email' textContentType='username' diff --git a/app/views/RoomsListView/components/Header.tsx b/app/views/RoomsListView/components/Header.tsx index a54635c4bf6..288e581f621 100644 --- a/app/views/RoomsListView/components/Header.tsx +++ b/app/views/RoomsListView/components/Header.tsx @@ -64,8 +64,12 @@ const RoomsListHeaderView = ({ search, searchEnabled }: { search: (text: string) subtitle = server?.replace(/(^\w+:|^)\/\//, ''); } return ( - - + + {serverName} diff --git a/app/views/ShareView/ShareView.test.tsx b/app/views/ShareView/ShareView.test.tsx index 0582229fe97..854aee35e4e 100644 --- a/app/views/ShareView/ShareView.test.tsx +++ b/app/views/ShareView/ShareView.test.tsx @@ -154,11 +154,11 @@ const makeInstance = ({ return shareView; }; -describe('ShareView', () => { - afterEach(() => { - jest.useRealTimers(); - }); +afterEach(() => { + jest.useRealTimers(); +}); +describe('ShareView', () => { beforeEach(() => { jest.clearAllMocks(); mockGetSubscriptionByRoomId.mockResolvedValue({ diff --git a/ios/AppDelegate.swift b/ios/AppDelegate.swift index 2699b2c7fba..636a2acedf2 100644 --- a/ios/AppDelegate.swift +++ b/ios/AppDelegate.swift @@ -1,4 +1,4 @@ -import Expo +public import Expo import React import ReactAppDependencyProvider import Firebase @@ -38,12 +38,11 @@ public class AppDelegate: ExpoAppDelegate { } let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) + let factory = ExpoReactNativeFactory(delegate: delegate) delegate.dependencyProvider = RCTAppDependencyProvider() reactNativeDelegate = delegate reactNativeFactory = factory - bindReactNativeFactory(factory) #if os(iOS) || os(tvOS) window = UIWindow(frame: UIScreen.main.bounds) @@ -89,7 +88,7 @@ public class AppDelegate: ExpoAppDelegate { } } -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { +class ReactNativeDelegate: ExpoReactNativeFactoryDelegate { override func sourceURL(for bridge: RCTBridge) -> URL? { self.bundleURL() } diff --git a/ios/Podfile b/ios/Podfile index 4b0ef129eca..028fecd8aba 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,7 +1,11 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") -platform :ios, '15.1' +ENV['RCT_USE_PREBUILT_RNCORE'] = '0' +ENV['RCT_USE_RN_DEP'] = '0' +ENV['RCT_HERMES_V1_ENABLED'] = '0' + +platform :ios, '16.4' install! 'cocoapods', :deterministic_uuids => false # Pin the generated workspace name so `react-native run-ios` selects it and @@ -78,6 +82,15 @@ post_install do |installer| end end + if ENV['RCT_HERMES_V1_ENABLED'] == '0' + installer.aggregate_targets.each do |aggregate_target| + aggregate_target.xcconfigs.each do |config_name, xcconfig| + xcconfig.attributes['HERMES_CLI_PATH'] = '$(PODS_ROOT)/hermes-engine/destroot/bin/hermesc' + xcconfig.save_as(aggregate_target.xcconfig_path(config_name)) + end + end + end + bitcode_strip_path = `xcrun --find bitcode_strip`.chop! def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path) framework_path = File.join(Dir.pwd, framework_relative_path) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 100f970b291..07bd8c959b7 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -28,19 +28,18 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - BVLinearGradient (2.6.2): + - BVLinearGradient (2.8.3): - React-Core - DoubleConversion (1.1.6) - - EXApplication (7.0.8): + - EXApplication (57.0.3): - ExpoModulesCore - - EXConstants (18.0.12): + - EXConstants (57.0.18): - ExpoModulesCore - - EXNotifications (0.32.15): - - ExpoModulesCore - - Expo (54.0.30): + - Expo (57.0.23): - boost - DoubleConversion - ExpoModulesCore + - ExpoModulesJSI - fast_float - fmt - glog @@ -68,40 +67,47 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - ExpoAppleAuthentication (8.0.8): + - ExpoAppleAuthentication (57.0.2): - ExpoModulesCore - - ExpoAsset (12.0.12): + - ExpoAsset (57.0.17): - ExpoModulesCore - - ExpoAudio (0.4.9): + - ExpoAudio (57.0.5): - ExpoModulesCore - - ExpoCamera (17.0.10): + - ExpoCamera (57.0.5): - ExpoModulesCore + - ExpoCameraBarcodeScanning (57.0.5): + - ExpoCamera - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoDevice (8.0.10): + - ExpoDevice (57.0.2): + - ExpoModulesCore + - ExpoDocumentPicker (57.0.2): - ExpoModulesCore - - ExpoDocumentPicker (14.0.8): + - ExpoDomWebView (57.0.1): - ExpoModulesCore - - ExpoFileSystem (19.0.21): + - ExpoFileSystem (57.0.7): - ExpoModulesCore - - ExpoFont (14.0.10): + - ExpoFont (57.0.4): - ExpoModulesCore - - ExpoHaptics (15.0.8): + - ExpoHaptics (57.0.3): - ExpoModulesCore - - ExpoImage (3.0.11): + - ExpoImage (57.0.5): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoKeepAwake (15.0.8): + - ExpoKeepAwake (57.0.2): - ExpoModulesCore - - ExpoLocalAuthentication (17.0.8): + - ExpoLocalAuthentication (57.0.3): - ExpoModulesCore - - ExpoModulesCore (3.0.29): + - ExpoLogBox (57.0.4): + - React-Core + - ExpoModulesCore (57.0.18): - boost - DoubleConversion + - ExpoModulesJSI - fast_float - fmt - glog @@ -128,18 +134,31 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - ExpoModulesJSI (57.1.0): + - React-Core + - ReactCommon + - ExpoModulesWorklets (57.0.18): + - ExpoModulesCore + - ExpoModulesJSI + - ExpoModulesWorkletsAdapter (57.0.18): + - ExpoModulesCore + - ExpoModulesJSI + - ExpoModulesWorklets + - RNWorklets + - ExpoNotifications (57.0.19): + - ExpoModulesCore - ExpoQuickLook (0.4.0): - ExpoModulesCore - - ExpoSystemUI (6.0.9): + - ExpoSystemUI (57.0.4): - ExpoModulesCore - - ExpoVideo (3.0.16): + - ExpoVideo (57.0.4): - ExpoModulesCore - - ExpoVideoThumbnails (10.0.8): + - ExpoVideoThumbnails (57.0.2): - ExpoModulesCore - - ExpoWebBrowser (15.0.10): + - ExpoWebBrowser (57.0.3): - ExpoModulesCore - fast_float (8.0.0) - - FBLazyVector (0.81.5) + - FBLazyVector (0.86.3) - Firebase/AnalyticsWithoutAdIdSupport (11.11.0): - Firebase/CoreOnly - FirebaseAnalytics/WithoutAdIdSupport (~> 11.11.0) @@ -189,7 +208,7 @@ PODS: - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - - fmt (11.0.2) + - fmt (12.1.0) - glog (0.3.5) - GoogleAppMeasurement/WithoutAdIdSupport (11.11.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.0) @@ -227,9 +246,9 @@ PODS: - GoogleUtilities/UserDefaults (8.1.0): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - hermes-engine (0.81.5): - - hermes-engine/Pre-built (= 0.81.5) - - hermes-engine/Pre-built (0.81.5) + - hermes-engine (0.17.0): + - hermes-engine/Pre-built (= 0.17.0) + - hermes-engine/Pre-built (0.17.0) - JitsiWebRTC (124.0.2) - libavif/core (1.0.0) - libavif/libdav1d (1.0.0): @@ -351,42 +370,45 @@ PODS: - boost - DoubleConversion - fast_float (= 8.0.0) - - fmt (= 11.0.2) + - fmt (= 12.1.0) - glog - RCT-Folly/Default (= 2024.11.18.00) - RCT-Folly/Default (2024.11.18.00): - boost - DoubleConversion - fast_float (= 8.0.0) - - fmt (= 11.0.2) + - fmt (= 12.1.0) - glog - RCT-Folly/Fabric (2024.11.18.00): - boost - DoubleConversion - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCTDeprecation (0.81.5) - - RCTRequired (0.81.5) - - RCTTypeSafety (0.81.5): - - FBLazyVector (= 0.81.5) - - RCTRequired (= 0.81.5) - - React-Core (= 0.81.5) - - React (0.81.5): - - React-Core (= 0.81.5) - - React-Core/DevSupport (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) - - React-RCTActionSheet (= 0.81.5) - - React-RCTAnimation (= 0.81.5) - - React-RCTBlob (= 0.81.5) - - React-RCTImage (= 0.81.5) - - React-RCTLinking (= 0.81.5) - - React-RCTNetwork (= 0.81.5) - - React-RCTSettings (= 0.81.5) - - React-RCTText (= 0.81.5) - - React-RCTVibration (= 0.81.5) - - React-callinvoker (0.81.5) - - React-Core (0.81.5): + - fmt (= 12.1.0) + - glog + - RCTDeprecation (0.86.3) + - RCTRequired (0.86.3) + - RCTSwiftUI (0.86.3) + - RCTSwiftUIWrapper (0.86.3): + - RCTSwiftUI + - RCTTypeSafety (0.86.3): + - FBLazyVector (= 0.86.3) + - RCTRequired (= 0.86.3) + - React-Core (= 0.86.3) + - React (0.86.3): + - React-Core (= 0.86.3) + - React-Core/DevSupport (= 0.86.3) + - React-Core/RCTWebSocket (= 0.86.3) + - React-RCTActionSheet (= 0.86.3) + - React-RCTAnimation (= 0.86.3) + - React-RCTBlob (= 0.86.3) + - React-RCTImage (= 0.86.3) + - React-RCTLinking (= 0.86.3) + - React-RCTNetwork (= 0.86.3) + - React-RCTSettings (= 0.86.3) + - React-RCTText (= 0.86.3) + - React-RCTVibration (= 0.86.3) + - React-callinvoker (0.86.3) + - React-Core (0.86.3): - boost - DoubleConversion - fast_float @@ -396,7 +418,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) + - React-Core/Default (= 0.86.3) - React-cxxreact - React-featureflags - React-hermes @@ -411,7 +433,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.5): + - React-Core/CoreModulesHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -436,7 +458,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.5): + - React-Core/Default (0.86.3): - boost - DoubleConversion - fast_float @@ -460,7 +482,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.5): + - React-Core/DevSupport (0.86.3): - boost - DoubleConversion - fast_float @@ -470,8 +492,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) + - React-Core/Default (= 0.86.3) + - React-Core/RCTWebSocket (= 0.86.3) - React-cxxreact - React-featureflags - React-hermes @@ -486,7 +508,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.5): + - React-Core/RCTActionSheetHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -511,7 +533,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.5): + - React-Core/RCTAnimationHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -536,7 +558,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.5): + - React-Core/RCTBlobHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -561,7 +583,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.5): + - React-Core/RCTImageHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -586,7 +608,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.5): + - React-Core/RCTLinkingHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -611,7 +633,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.5): + - React-Core/RCTNetworkHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -636,7 +658,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.5): + - React-Core/RCTSettingsHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -661,7 +683,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.5): + - React-Core/RCTTextHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -686,7 +708,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.5): + - React-Core/RCTVibrationHeaders (0.86.3): - boost - DoubleConversion - fast_float @@ -711,7 +733,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.5): + - React-Core/RCTWebSocket (0.86.3): - boost - DoubleConversion - fast_float @@ -721,7 +743,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.5) + - React-Core/Default (= 0.86.3) - React-cxxreact - React-featureflags - React-hermes @@ -736,7 +758,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.5): + - React-CoreModules (0.86.3): - boost - DoubleConversion - fast_float @@ -744,20 +766,23 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.5) - - React-Core/CoreModulesHeaders (= 0.81.5) - - React-jsi (= 0.81.5) + - RCTTypeSafety (= 0.86.3) + - React-Core/CoreModulesHeaders (= 0.86.3) + - React-debug + - React-featureflags + - React-jsi (= 0.86.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.5) + - React-RCTImage (= 0.86.3) - React-runtimeexecutor + - React-utils - ReactCommon - SocketRocket - - React-cxxreact (0.81.5): + - React-cxxreact (0.86.3): - boost - DoubleConversion - fast_float @@ -766,19 +791,22 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-debug (= 0.81.5) - - React-jsi (= 0.81.5) + - React-callinvoker (= 0.86.3) + - React-debug (= 0.86.3) + - React-jsi (= 0.86.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) + - React-logger (= 0.86.3) + - React-perflogger (= 0.86.3) - React-runtimeexecutor - - React-timing (= 0.81.5) + - React-timing (= 0.86.3) + - React-utils - SocketRocket - - React-debug (0.81.5) - - React-defaultsnativemodule (0.81.5): + - React-debug (0.86.3): + - React-debug/redbox (= 0.86.3) + - React-debug/redbox (0.86.3) + - React-defaultsnativemodule (0.86.3): - boost - DoubleConversion - fast_float @@ -788,14 +816,21 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-domnativemodule + - React-Fabric/animated + - React-featureflags - React-featureflagsnativemodule - React-idlecallbacksnativemodule + - React-intersectionobservernativemodule - React-jsi - React-jsiexecutor - React-microtasksnativemodule + - React-mutationobservernativemodule - React-RCTFBReactNativeSpec + - React-viewtransitionnativemodule + - React-webperformancenativemodule - SocketRocket - - React-domnativemodule (0.81.5): + - Yoga + - React-domnativemodule (0.86.3): - boost - DoubleConversion - fast_float @@ -815,7 +850,77 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.5): + - React-Fabric (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animated (= 0.86.3) + - React-Fabric/animationbackend (= 0.86.3) + - React-Fabric/animations (= 0.86.3) + - React-Fabric/attributedstring (= 0.86.3) + - React-Fabric/bridging (= 0.86.3) + - React-Fabric/componentregistry (= 0.86.3) + - React-Fabric/componentregistrynative (= 0.86.3) + - React-Fabric/components (= 0.86.3) + - React-Fabric/consistency (= 0.86.3) + - React-Fabric/core (= 0.86.3) + - React-Fabric/dom (= 0.86.3) + - React-Fabric/imagemanager (= 0.86.3) + - React-Fabric/leakchecker (= 0.86.3) + - React-Fabric/mounting (= 0.86.3) + - React-Fabric/observers (= 0.86.3) + - React-Fabric/scheduler (= 0.86.3) + - React-Fabric/telemetry (= 0.86.3) + - React-Fabric/uimanager (= 0.86.3) + - React-Fabric/viewtransition (= 0.86.3) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/animated (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animationbackend + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/animationbackend (0.86.3): - boost - DoubleConversion - fast_float @@ -829,23 +934,6 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.5) - - React-Fabric/attributedstring (= 0.81.5) - - React-Fabric/bridging (= 0.81.5) - - React-Fabric/componentregistry (= 0.81.5) - - React-Fabric/componentregistrynative (= 0.81.5) - - React-Fabric/components (= 0.81.5) - - React-Fabric/consistency (= 0.81.5) - - React-Fabric/core (= 0.81.5) - - React-Fabric/dom (= 0.81.5) - - React-Fabric/imagemanager (= 0.81.5) - - React-Fabric/leakchecker (= 0.81.5) - - React-Fabric/mounting (= 0.81.5) - - React-Fabric/observers (= 0.81.5) - - React-Fabric/scheduler (= 0.81.5) - - React-Fabric/telemetry (= 0.81.5) - - React-Fabric/templateprocessor (= 0.81.5) - - React-Fabric/uimanager (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -857,7 +945,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.5): + - React-Fabric/animations (0.86.3): - boost - DoubleConversion - fast_float @@ -882,7 +970,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.5): + - React-Fabric/attributedstring (0.86.3): - boost - DoubleConversion - fast_float @@ -907,7 +995,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.5): + - React-Fabric/bridging (0.86.3): - boost - DoubleConversion - fast_float @@ -932,7 +1020,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.5): + - React-Fabric/componentregistry (0.86.3): - boost - DoubleConversion - fast_float @@ -957,7 +1045,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.5): + - React-Fabric/componentregistrynative (0.86.3): - boost - DoubleConversion - fast_float @@ -982,7 +1070,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.5): + - React-Fabric/components (0.86.3): - boost - DoubleConversion - fast_float @@ -996,10 +1084,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.5) - - React-Fabric/components/root (= 0.81.5) - - React-Fabric/components/scrollview (= 0.81.5) - - React-Fabric/components/view (= 0.81.5) + - React-Fabric/components/legacyviewmanagerinterop (= 0.86.3) + - React-Fabric/components/root (= 0.86.3) + - React-Fabric/components/scrollview (= 0.86.3) + - React-Fabric/components/view (= 0.86.3) - React-featureflags - React-graphics - React-jsi @@ -1011,7 +1099,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.5): + - React-Fabric/components/legacyviewmanagerinterop (0.86.3): - boost - DoubleConversion - fast_float @@ -1036,7 +1124,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.5): + - React-Fabric/components/root (0.86.3): - boost - DoubleConversion - fast_float @@ -1061,7 +1149,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.5): + - React-Fabric/components/scrollview (0.86.3): - boost - DoubleConversion - fast_float @@ -1086,7 +1174,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.5): + - React-Fabric/components/view (0.86.3): - boost - DoubleConversion - fast_float @@ -1113,7 +1201,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.5): + - React-Fabric/consistency (0.86.3): - boost - DoubleConversion - fast_float @@ -1138,7 +1226,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.5): + - React-Fabric/core (0.86.3): - boost - DoubleConversion - fast_float @@ -1163,7 +1251,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.5): + - React-Fabric/dom (0.86.3): - boost - DoubleConversion - fast_float @@ -1188,7 +1276,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.5): + - React-Fabric/imagemanager (0.86.3): - boost - DoubleConversion - fast_float @@ -1213,7 +1301,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.5): + - React-Fabric/leakchecker (0.86.3): - boost - DoubleConversion - fast_float @@ -1238,7 +1326,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.5): + - React-Fabric/mounting (0.86.3): - boost - DoubleConversion - fast_float @@ -1256,6 +1344,7 @@ PODS: - React-graphics - React-jsi - React-jsiexecutor + - React-jsinspectortracing - React-logger - React-rendererdebug - React-runtimeexecutor @@ -1263,7 +1352,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.5): + - React-Fabric/observers (0.86.3): - boost - DoubleConversion - fast_float @@ -1277,7 +1366,9 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.5) + - React-Fabric/observers/events (= 0.86.3) + - React-Fabric/observers/intersection (= 0.86.3) + - React-Fabric/observers/mutation (= 0.86.3) - React-featureflags - React-graphics - React-jsi @@ -1289,7 +1380,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.5): + - React-Fabric/observers/events (0.86.3): - boost - DoubleConversion - fast_float @@ -1314,7 +1405,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.5): + - React-Fabric/observers/intersection (0.86.3): - boost - DoubleConversion - fast_float @@ -1328,12 +1419,65 @@ PODS: - React-Core - React-cxxreact - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers/mutation (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/scheduler (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animationbackend - React-Fabric/observers/events + - React-Fabric/viewtransition - React-featureflags - React-graphics - React-jsi - React-jsiexecutor - React-logger + - React-performancecdpmetrics - React-performancetimeline - React-rendererdebug - React-runtimeexecutor @@ -1341,7 +1485,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.5): + - React-Fabric/telemetry (0.86.3): - boost - DoubleConversion - fast_float @@ -1366,7 +1510,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.5): + - React-Fabric/uimanager (0.86.3): - boost - DoubleConversion - fast_float @@ -1380,18 +1524,20 @@ PODS: - React-Core - React-cxxreact - React-debug + - React-Fabric/uimanager/consistency (= 0.86.3) - React-featureflags - React-graphics - React-jsi - React-jsiexecutor - React-logger + - React-rendererconsistency - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.5): + - React-Fabric/uimanager/consistency (0.86.3): - boost - DoubleConversion - fast_float @@ -1405,7 +1551,6 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -1418,7 +1563,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.5): + - React-Fabric/viewtransition (0.86.3): - boost - DoubleConversion - fast_float @@ -1437,14 +1582,13 @@ PODS: - React-jsi - React-jsiexecutor - React-logger - - React-rendererconsistency - React-rendererdebug - React-runtimeexecutor - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.5): + - React-FabricComponents (0.86.3): - boost - DoubleConversion - fast_float @@ -1459,8 +1603,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.5) - - React-FabricComponents/textlayoutmanager (= 0.81.5) + - React-FabricComponents/components (= 0.86.3) + - React-FabricComponents/textlayoutmanager (= 0.86.3) - React-featureflags - React-graphics - React-jsi @@ -1473,7 +1617,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.5): + - React-FabricComponents/components (0.86.3): - boost - DoubleConversion - fast_float @@ -1488,17 +1632,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.5) - - React-FabricComponents/components/iostextinput (= 0.81.5) - - React-FabricComponents/components/modal (= 0.81.5) - - React-FabricComponents/components/rncore (= 0.81.5) - - React-FabricComponents/components/safeareaview (= 0.81.5) - - React-FabricComponents/components/scrollview (= 0.81.5) - - React-FabricComponents/components/switch (= 0.81.5) - - React-FabricComponents/components/text (= 0.81.5) - - React-FabricComponents/components/textinput (= 0.81.5) - - React-FabricComponents/components/unimplementedview (= 0.81.5) - - React-FabricComponents/components/virtualview (= 0.81.5) + - React-FabricComponents/components/inputaccessory (= 0.86.3) + - React-FabricComponents/components/iostextinput (= 0.86.3) + - React-FabricComponents/components/modal (= 0.86.3) + - React-FabricComponents/components/rncore (= 0.86.3) + - React-FabricComponents/components/safeareaview (= 0.86.3) + - React-FabricComponents/components/scrollview (= 0.86.3) + - React-FabricComponents/components/switch (= 0.86.3) + - React-FabricComponents/components/text (= 0.86.3) + - React-FabricComponents/components/textinput (= 0.86.3) + - React-FabricComponents/components/unimplementedview (= 0.86.3) + - React-FabricComponents/components/virtualview (= 0.86.3) - React-featureflags - React-graphics - React-jsi @@ -1511,7 +1655,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.5): + - React-FabricComponents/components/inputaccessory (0.86.3): - boost - DoubleConversion - fast_float @@ -1538,7 +1682,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.5): + - React-FabricComponents/components/iostextinput (0.86.3): - boost - DoubleConversion - fast_float @@ -1565,7 +1709,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.5): + - React-FabricComponents/components/modal (0.86.3): - boost - DoubleConversion - fast_float @@ -1592,7 +1736,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.5): + - React-FabricComponents/components/rncore (0.86.3): - boost - DoubleConversion - fast_float @@ -1619,7 +1763,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.5): + - React-FabricComponents/components/safeareaview (0.86.3): - boost - DoubleConversion - fast_float @@ -1646,7 +1790,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.5): + - React-FabricComponents/components/scrollview (0.86.3): - boost - DoubleConversion - fast_float @@ -1673,7 +1817,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/switch (0.81.5): + - React-FabricComponents/components/switch (0.86.3): - boost - DoubleConversion - fast_float @@ -1700,7 +1844,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.5): + - React-FabricComponents/components/text (0.86.3): - boost - DoubleConversion - fast_float @@ -1727,7 +1871,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.5): + - React-FabricComponents/components/textinput (0.86.3): - boost - DoubleConversion - fast_float @@ -1754,7 +1898,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.5): + - React-FabricComponents/components/unimplementedview (0.86.3): - boost - DoubleConversion - fast_float @@ -1781,7 +1925,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.5): + - React-FabricComponents/components/virtualview (0.86.3): - boost - DoubleConversion - fast_float @@ -1808,7 +1952,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.5): + - React-FabricComponents/textlayoutmanager (0.86.3): - boost - DoubleConversion - fast_float @@ -1835,7 +1979,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.5): + - React-FabricImage (0.86.3): - boost - DoubleConversion - fast_float @@ -1844,21 +1988,21 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.5) - - RCTTypeSafety (= 0.81.5) + - RCTRequired (= 0.86.3) + - RCTTypeSafety (= 0.86.3) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.5) + - React-jsiexecutor (= 0.86.3) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.5): + - React-featureflags (0.86.3): - boost - DoubleConversion - fast_float @@ -1867,7 +2011,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.5): + - React-featureflagsnativemodule (0.86.3): - boost - DoubleConversion - fast_float @@ -1882,7 +2026,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.5): + - React-graphics (0.86.3): - boost - DoubleConversion - fast_float @@ -1891,11 +2035,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric + - React-featureflags - React-jsi - React-jsiexecutor + - React-rendererdebug - React-utils - SocketRocket - - React-hermes (0.81.5): + - React-hermes (0.86.3): - boost - DoubleConversion - fast_float @@ -1904,16 +2050,18 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) + - React-cxxreact (= 0.86.3) - React-jsi - - React-jsiexecutor (= 0.81.5) + - React-jsiexecutor (= 0.86.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.5) + - React-jsitooling + - React-oscompat + - React-perflogger (= 0.86.3) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.5): + - React-idlecallbacksnativemodule (0.86.3): - boost - DoubleConversion - fast_float @@ -1929,7 +2077,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.5): + - React-ImageManager (0.86.3): - boost - DoubleConversion - fast_float @@ -1944,7 +2092,28 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.5): + - React-intersectionobservernativemodule (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-Fabric/bridging + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - React-runtimescheduler + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-jserrorhandler (0.86.3): - boost - DoubleConversion - fast_float @@ -1959,7 +2128,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.5): + - React-jsi (0.86.3): - boost - DoubleConversion - fast_float @@ -1969,7 +2138,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.5): + - React-jsiexecutor (0.86.3): - boost - DoubleConversion - fast_float @@ -1978,15 +2147,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) + - React-cxxreact + - React-debug + - React-jserrorhandler + - React-jsi - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.5) + - React-jsitooling + - React-perflogger - React-runtimeexecutor + - React-utils - SocketRocket - - React-jsinspector (0.81.5): + - React-jsinspector (0.86.3): - boost - DoubleConversion - fast_float @@ -2001,10 +2174,11 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.5) + - React-perflogger (= 0.86.3) - React-runtimeexecutor + - React-utils - SocketRocket - - React-jsinspectorcdp (0.81.5): + - React-jsinspectorcdp (0.86.3): - boost - DoubleConversion - fast_float @@ -2013,7 +2187,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.5): + - React-jsinspectornetwork (0.86.3): - boost - DoubleConversion - fast_float @@ -2021,40 +2195,44 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-featureflags - React-jsinspectorcdp - - React-performancetimeline - - React-timing - SocketRocket - - React-jsinspectortracing (0.81.5): + - React-jsinspectortracing (0.86.3): - boost - DoubleConversion - fast_float - fmt - glog + - hermes-engine - RCT-Folly - RCT-Folly/Fabric + - React-jsi + - React-jsinspectornetwork - React-oscompat - React-timing + - React-utils - SocketRocket - - React-jsitooling (0.81.5): + - React-jsitooling (0.86.3): - boost - DoubleConversion - fast_float - fmt - glog + - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) + - React-cxxreact (= 0.86.3) + - React-debug + - React-jsi (= 0.86.3) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor + - React-utils - SocketRocket - - React-jsitracing (0.81.5): + - React-jsitracing (0.86.3): - React-jsi - - React-logger (0.81.5): + - React-logger (0.86.3): - boost - DoubleConversion - fast_float @@ -2063,7 +2241,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.5): + - React-Mapbuffer (0.86.3): - boost - DoubleConversion - fast_float @@ -2073,7 +2251,21 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.5): + - React-microtasksnativemodule (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - React-mutationobservernativemodule (0.86.3): - boost - DoubleConversion - fast_float @@ -2082,11 +2274,18 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-Fabric/bridging + - React-Fabric/observers/mutation + - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec + - React-runtimeexecutor - ReactCommon/turbomodule/core - SocketRocket + - Yoga - react-native-a11y-order (0.4.0): - boost - DoubleConversion @@ -2230,9 +2429,35 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-netinfo (11.4.1): + - react-native-netinfo (12.0.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety - React-Core - - react-native-safe-area-context (5.6.2): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - react-native-safe-area-context (5.7.0): - boost - DoubleConversion - fast_float @@ -2250,8 +2475,8 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-safe-area-context/common (= 5.6.2) - - react-native-safe-area-context/fabric (= 5.6.2) + - react-native-safe-area-context/common (= 5.7.0) + - react-native-safe-area-context/fabric (= 5.7.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -2262,7 +2487,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-safe-area-context/common (5.6.2): + - react-native-safe-area-context/common (5.7.0): - boost - DoubleConversion - fast_float @@ -2290,7 +2515,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-safe-area-context/fabric (5.6.2): + - react-native-safe-area-context/fabric (5.7.0): - boost - DoubleConversion - fast_float @@ -2319,7 +2544,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-slider (5.0.1): + - react-native-slider (5.2.0): - boost - DoubleConversion - fast_float @@ -2337,7 +2562,7 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-slider/common (= 5.0.1) + - react-native-slider/common (= 5.2.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -2348,7 +2573,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-slider/common (5.0.1): + - react-native-slider/common (5.2.0): - boost - DoubleConversion - fast_float @@ -2407,7 +2632,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-NativeModulesApple (0.81.5): + - React-NativeModulesApple (0.86.3): - boost - DoubleConversion - fast_float @@ -2419,6 +2644,7 @@ PODS: - React-callinvoker - React-Core - React-cxxreact + - React-debug - React-featureflags - React-jsi - React-jsinspector @@ -2427,8 +2653,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.5) - - React-perflogger (0.81.5): + - React-networking (0.86.3): - boost - DoubleConversion - fast_float @@ -2436,8 +2661,36 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric + - React-jsinspectornetwork + - React-jsinspectortracing + - React-performancetimeline + - React-timing + - SocketRocket + - React-oscompat (0.86.3) + - React-perflogger (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-performancecdpmetrics (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-performancetimeline + - React-runtimeexecutor + - React-timing - SocketRocket - - React-performancetimeline (0.81.5): + - React-performancetimeline (0.86.3): - boost - DoubleConversion - fast_float @@ -2446,13 +2699,14 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-featureflags + - React-jsinspector - React-jsinspectortracing - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.5): - - React-Core/RCTActionSheetHeaders (= 0.81.5) - - React-RCTAnimation (0.81.5): + - React-RCTActionSheet (0.86.3): + - React-Core/RCTActionSheetHeaders (= 0.86.3) + - React-RCTAnimation (0.86.3): - boost - DoubleConversion - fast_float @@ -2462,13 +2716,14 @@ PODS: - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTAnimationHeaders + - React-debug - React-featureflags - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.5): + - React-RCTAppDelegate (0.86.3): - boost - DoubleConversion - fast_float @@ -2502,7 +2757,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.5): + - React-RCTBlob (0.86.3): - boost - DoubleConversion - fast_float @@ -2521,7 +2776,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.5): + - React-RCTFabric (0.86.3): - boost - DoubleConversion - fast_float @@ -2530,6 +2785,7 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric + - RCTSwiftUIWrapper - React-Core - React-debug - React-Fabric @@ -2541,8 +2797,9 @@ PODS: - React-jsi - React-jsinspector - React-jsinspectorcdp - - React-jsinspectornetwork - React-jsinspectortracing + - React-networking + - React-performancecdpmetrics - React-performancetimeline - React-RCTAnimation - React-RCTFBReactNativeSpec @@ -2556,7 +2813,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.5): + - React-RCTFBReactNativeSpec (0.86.3): - boost - DoubleConversion - fast_float @@ -2570,10 +2827,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.5) + - React-RCTFBReactNativeSpec/components (= 0.86.3) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.5): + - React-RCTFBReactNativeSpec/components (0.86.3): - boost - DoubleConversion - fast_float @@ -2596,7 +2853,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.5): + - React-RCTImage (0.86.3): - boost - DoubleConversion - fast_float @@ -2612,14 +2869,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.5): - - React-Core/RCTLinkingHeaders (= 0.81.5) - - React-jsi (= 0.81.5) + - React-RCTLinking (0.86.3): + - React-Core/RCTLinkingHeaders (= 0.86.3) + - React-jsi (= 0.86.3) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.5) - - React-RCTNetwork (0.81.5): + - ReactCommon/turbomodule/core (= 0.86.3) + - React-RCTNetwork (0.86.3): - boost - DoubleConversion - fast_float @@ -2629,15 +2886,17 @@ PODS: - RCT-Folly/Fabric - RCTTypeSafety - React-Core/RCTNetworkHeaders + - React-debug - React-featureflags - React-jsi - React-jsinspectorcdp - React-jsinspectornetwork - React-NativeModulesApple + - React-networking - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTRuntime (0.81.5): + - React-RCTRuntime (0.86.3): - boost - DoubleConversion - fast_float @@ -2647,6 +2906,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-Core + - React-debug - React-jsi - React-jsinspector - React-jsinspectorcdp @@ -2656,8 +2916,9 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes + - React-utils - SocketRocket - - React-RCTSettings (0.81.5): + - React-RCTSettings (0.86.3): - boost - DoubleConversion - fast_float @@ -2672,10 +2933,10 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTText (0.81.5): - - React-Core/RCTTextHeaders (= 0.81.5) + - React-RCTText (0.86.3): + - React-Core/RCTTextHeaders (= 0.86.3) - Yoga - - React-RCTVibration (0.81.5): + - React-RCTVibration (0.86.3): - boost - DoubleConversion - fast_float @@ -2689,11 +2950,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.5) - - React-renderercss (0.81.5): + - React-rendererconsistency (0.86.3) + - React-renderercss (0.86.3): - React-debug - React-utils - - React-rendererdebug (0.81.5): + - React-rendererdebug (0.86.3): - boost - DoubleConversion - fast_float @@ -2703,7 +2964,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.5): + - React-RuntimeApple (0.86.3): - boost - DoubleConversion - fast_float @@ -2732,7 +2993,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.5): + - React-RuntimeCore (0.86.3): - boost - DoubleConversion - fast_float @@ -2754,7 +3015,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.5): + - React-runtimeexecutor (0.86.3): - boost - DoubleConversion - fast_float @@ -2764,10 +3025,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.5) + - React-jsi (= 0.86.3) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.5): + - React-RuntimeHermes (0.86.3): - boost - DoubleConversion - fast_float @@ -2788,7 +3049,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.5): + - React-runtimescheduler (0.86.3): - boost - DoubleConversion - fast_float @@ -2810,9 +3071,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.5): + - React-timing (0.86.3): - React-debug - - React-utils (0.81.5): + - React-utils (0.86.3): - boost - DoubleConversion - fast_float @@ -2822,11 +3083,46 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.5) + - React-jsi (= 0.86.3) + - SocketRocket + - React-viewtransitionnativemodule (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Fabric + - React-Fabric/bridging + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core - SocketRocket - - ReactAppDependencyProvider (0.81.5): + - Yoga + - React-webperformancenativemodule (0.86.3): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-performancetimeline + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - SocketRocket + - ReactAppDependencyProvider (0.86.3): - ReactCodegen - - ReactCodegen (0.81.5): + - ReactCodegen (0.86.3): - boost - DoubleConversion - fast_float @@ -2852,7 +3148,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.5): + - ReactCommon (0.86.3): - boost - DoubleConversion - fast_float @@ -2860,9 +3156,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.5) + - ReactCommon/turbomodule (= 0.86.3) - SocketRocket - - ReactCommon/turbomodule (0.81.5): + - ReactCommon/turbomodule (0.86.3): - boost - DoubleConversion - fast_float @@ -2871,15 +3167,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - ReactCommon/turbomodule/bridging (= 0.81.5) - - ReactCommon/turbomodule/core (= 0.81.5) + - React-callinvoker (= 0.86.3) + - React-cxxreact (= 0.86.3) + - React-jsi (= 0.86.3) + - React-logger (= 0.86.3) + - React-perflogger (= 0.86.3) + - ReactCommon/turbomodule/bridging (= 0.86.3) + - ReactCommon/turbomodule/core (= 0.86.3) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.5): + - ReactCommon/turbomodule/bridging (0.86.3): - boost - DoubleConversion - fast_float @@ -2888,13 +3184,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) + - React-callinvoker (= 0.86.3) + - React-cxxreact (= 0.86.3) + - React-jsi (= 0.86.3) + - React-logger (= 0.86.3) + - React-perflogger (= 0.86.3) - SocketRocket - - ReactCommon/turbomodule/core (0.81.5): + - ReactCommon/turbomodule/core (0.86.3): - boost - DoubleConversion - fast_float @@ -2903,14 +3199,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-debug (= 0.81.5) - - React-featureflags (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - React-utils (= 0.81.5) + - React-callinvoker (= 0.86.3) + - React-cxxreact (= 0.86.3) + - React-debug (= 0.86.3) + - React-featureflags (= 0.86.3) + - React-jsi (= 0.86.3) + - React-logger (= 0.86.3) + - React-perflogger (= 0.86.3) + - React-utils (= 0.86.3) - SocketRocket - ReactNativeIncallManager (4.2.1): - React-Core @@ -3056,7 +3352,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - RNDateTimePicker (8.4.4): + - RNDateTimePicker (9.1.0): - boost - DoubleConversion - fast_float @@ -3098,7 +3394,7 @@ PODS: - FirebaseCoreExtension - React-Core - RNFBApp - - RNGestureHandler (2.28.0): + - RNGestureHandler (2.32.0): - boost - DoubleConversion - fast_float @@ -3216,7 +3512,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - RNReanimated (4.1.3): + - RNReanimated (4.5.1): - boost - DoubleConversion - fast_float @@ -3243,11 +3539,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.1.3) + - RNReanimated/apple (= 4.5.1) + - RNReanimated/common (= 4.5.1) + - RNReanimated/view (= 4.5.1) - RNWorklets - SocketRocket - Yoga - - RNReanimated/reanimated (4.1.3): + - RNReanimated/apple (4.5.1): - boost - DoubleConversion - fast_float @@ -3274,11 +3572,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.1.3) - RNWorklets - SocketRocket - Yoga - - RNReanimated/reanimated/apple (4.1.3): + - RNReanimated/common (4.5.1): - boost - DoubleConversion - fast_float @@ -3308,7 +3605,37 @@ PODS: - RNWorklets - SocketRocket - Yoga - - RNScreens (4.17.1): + - RNReanimated/view (4.5.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNWorklets + - SocketRocket + - Yoga + - RNScreens (4.26.2): - boost - DoubleConversion - fast_float @@ -3335,10 +3662,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.17.1) + - RNScreens/common (= 4.26.2) - SocketRocket - Yoga - - RNScreens/common (4.17.1): + - RNScreens/common (4.26.2): - boost - DoubleConversion - fast_float @@ -3367,7 +3694,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - RNSVG (15.12.1): + - RNSVG (15.15.4): - boost - DoubleConversion - fast_float @@ -3393,10 +3720,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.12.1) + - RNSVG/common (= 15.15.4) - SocketRocket - Yoga - - RNSVG/common (15.12.1): + - RNSVG/common (15.15.4): - boost - DoubleConversion - fast_float @@ -3452,7 +3779,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - RNWorklets (0.6.1): + - RNWorklets (0.10.1): - boost - DoubleConversion - fast_float @@ -3479,10 +3806,11 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets (= 0.6.1) + - RNWorklets/apple (= 0.10.1) + - RNWorklets/common (= 0.10.1) - SocketRocket - Yoga - - RNWorklets/worklets (0.6.1): + - RNWorklets/apple (0.10.1): - boost - DoubleConversion - fast_float @@ -3509,10 +3837,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets/apple (= 0.6.1) - SocketRocket - Yoga - - RNWorklets/worklets/apple (0.6.1): + - RNWorklets/common (0.10.1): - boost - DoubleConversion - fast_float @@ -3572,21 +3899,27 @@ DEPENDENCIES: - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EXApplication (from `../node_modules/expo-application/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - - EXNotifications (from `../node_modules/expo-notifications/ios`) - Expo (from `../node_modules/expo`) - ExpoAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`) - ExpoAsset (from `../node_modules/expo-asset/ios`) - ExpoAudio (from `../node_modules/expo-audio/ios`) - ExpoCamera (from `../node_modules/expo-camera/ios`) + - ExpoCameraBarcodeScanning (from `../node_modules/expo-camera/ios`) - ExpoDevice (from `../node_modules/expo-device/ios`) - ExpoDocumentPicker (from `../node_modules/expo-document-picker/ios`) + - "ExpoDomWebView (from `../node_modules/@expo/dom-webview/ios`)" - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) - ExpoFont (from `../node_modules/expo-font/ios`) - ExpoHaptics (from `../node_modules/expo-haptics/ios`) - ExpoImage (from `../node_modules/expo-image/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoLocalAuthentication (from `../node_modules/expo-local-authentication/ios`) + - "ExpoLogBox (from `../node_modules/@expo/log-box`)" - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoModulesJSI (from `../node_modules/expo-modules-jsi/apple`) + - ExpoModulesWorklets (from `../node_modules/expo-modules-core`) + - ExpoModulesWorkletsAdapter (from `../node_modules/expo-modules-core`) + - ExpoNotifications (from `../node_modules/expo-notifications/ios`) - "ExpoQuickLook (from `../node_modules/@magrinj/expo-quick-look/ios`)" - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) - ExpoVideo (from `../node_modules/expo-video/ios`) @@ -3605,6 +3938,8 @@ DEPENDENCIES: - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTSwiftUI (from `../node_modules/react-native/ReactApple/RCTSwiftUI`) + - RCTSwiftUIWrapper (from `../node_modules/react-native/ReactApple/RCTSwiftUIWrapper`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) @@ -3624,6 +3959,7 @@ DEPENDENCIES: - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-intersectionobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver`) - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) @@ -3636,6 +3972,7 @@ DEPENDENCIES: - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - React-mutationobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver`) - react-native-a11y-order (from `../node_modules/react-native-a11y-order`) - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" @@ -3647,8 +3984,10 @@ DEPENDENCIES: - react-native-webrtc (from `../node_modules/react-native-webrtc`) - react-native-webview (from `../node_modules/react-native-webview`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-networking (from `../node_modules/react-native/ReactCommon/react/networking`) - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancecdpmetrics (from `../node_modules/react-native/ReactCommon/react/performance/cdpmetrics`) - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) @@ -3673,8 +4012,10 @@ DEPENDENCIES: - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - ReactAppDependencyProvider (from `build/generated/ios`) - - ReactCodegen (from `build/generated/ios`) + - React-viewtransitionnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition`) + - React-webperformancenativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/webperformance`) + - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) + - ReactCodegen (from `build/generated/ios/ReactCodegen`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeIncallManager (from `../node_modules/react-native-incall-manager`) - RNBootSplash (from `../node_modules/react-native-bootsplash`) @@ -3745,8 +4086,6 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-application/ios" EXConstants: :path: "../node_modules/expo-constants/ios" - EXNotifications: - :path: "../node_modules/expo-notifications/ios" Expo: :path: "../node_modules/expo" ExpoAppleAuthentication: @@ -3757,10 +4096,14 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-audio/ios" ExpoCamera: :path: "../node_modules/expo-camera/ios" + ExpoCameraBarcodeScanning: + :path: "../node_modules/expo-camera/ios" ExpoDevice: :path: "../node_modules/expo-device/ios" ExpoDocumentPicker: :path: "../node_modules/expo-document-picker/ios" + ExpoDomWebView: + :path: "../node_modules/@expo/dom-webview/ios" ExpoFileSystem: :path: "../node_modules/expo-file-system/ios" ExpoFont: @@ -3773,8 +4116,18 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoLocalAuthentication: :path: "../node_modules/expo-local-authentication/ios" + ExpoLogBox: + :path: "../node_modules/@expo/log-box" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + ExpoModulesJSI: + :path: "../node_modules/expo-modules-jsi/apple" + ExpoModulesWorklets: + :path: "../node_modules/expo-modules-core" + ExpoModulesWorkletsAdapter: + :path: "../node_modules/expo-modules-core" + ExpoNotifications: + :path: "../node_modules/expo-notifications/ios" ExpoQuickLook: :path: "../node_modules/@magrinj/expo-quick-look/ios" ExpoSystemUI: @@ -3795,7 +4148,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 + :tag: hermes-v0.17.0 MobileCrypto: :path: "../node_modules/@rocket.chat/mobile-crypto" NitroMmkv: @@ -3808,6 +4161,10 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: :path: "../node_modules/react-native/Libraries/Required" + RCTSwiftUI: + :path: "../node_modules/react-native/ReactApple/RCTSwiftUI" + RCTSwiftUIWrapper: + :path: "../node_modules/react-native/ReactApple/RCTSwiftUIWrapper" RCTTypeSafety: :path: "../node_modules/react-native/Libraries/TypeSafety" React: @@ -3844,6 +4201,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" React-ImageManager: :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-intersectionobservernativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver" React-jserrorhandler: :path: "../node_modules/react-native/ReactCommon/jserrorhandler" React-jsi: @@ -3868,6 +4227,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon" React-microtasksnativemodule: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + React-mutationobservernativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/mutationobserver" react-native-a11y-order: :path: "../node_modules/react-native-a11y-order" react-native-cameraroll: @@ -3890,10 +4251,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-webview" React-NativeModulesApple: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-networking: + :path: "../node_modules/react-native/ReactCommon/react/networking" React-oscompat: :path: "../node_modules/react-native/ReactCommon/oscompat" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancecdpmetrics: + :path: "../node_modules/react-native/ReactCommon/react/performance/cdpmetrics" React-performancetimeline: :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" React-RCTActionSheet: @@ -3942,10 +4307,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../node_modules/react-native/ReactCommon/react/utils" + React-viewtransitionnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/viewtransition" + React-webperformancenativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" ReactAppDependencyProvider: - :path: build/generated/ios + :path: build/generated/ios/ReactAppDependencyProvider ReactCodegen: - :path: build/generated/ios + :path: build/generated/ios/ReactCodegen ReactCommon: :path: "../node_modules/react-native/ReactCommon" ReactNativeIncallManager: @@ -3998,32 +4367,38 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 BugsnagReactNative: 2078dec76e54db9f6e687743af45dc3673cb32ab - BVLinearGradient: 7815a70ab485b7b155186dd0cc836363e0288cad + BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - EXApplication: 1e98d4b1dccdf30627f92917f4b2c5a53c330e5f - EXConstants: 805f35b1b295c542ca6acce836f21a1f9ee104d5 - EXNotifications: 983f04ad4ad879b181179e326bf220541e478386 - Expo: 6118272de314ed3d4bc74de3b1229b8f5b324ef1 - ExpoAppleAuthentication: 9413ae9a5e631a424cc04c1b13b0694dbab7d594 - ExpoAsset: f867e55ceb428aab99e1e8c082b5aee7c159ea18 - ExpoAudio: d98f922b17a945cd33f8462d086278dbd810c537 - ExpoCamera: 6a326deb45ba840749652e4c15198317aa78497e - ExpoDevice: 6327c3c200816795708885adf540d26ecab83d1a - ExpoDocumentPicker: 7cd9e71a0f66fb19eb0a586d6f26eee1284692e0 - ExpoFileSystem: 858a44267a3e6e9057e0888ad7c7cfbf55d52063 - ExpoFont: 35ac6191ed86bbf56b3ebd2d9154eda9fad5b509 - ExpoHaptics: d3a6375d8dcc3a1083d003bc2298ff654fafb536 - ExpoImage: 686f972bff29525733aa13357f6691dc90aa03d8 - ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 - ExpoLocalAuthentication: 8a31808565da7af926dd9b595e98594d8b1553b6 - ExpoModulesCore: 91a57f1d109cf53fe58d44fcf6b68a777561549a + EXApplication: a727f05eb8592f0bc764f6ab8d51eacc158652ec + EXConstants: 8948a340eb14bf2bdaaa0e21a63cb9343860b87a + Expo: 5958a8d1e01ac4630df9d05171059b291828a93b + ExpoAppleAuthentication: 16c2955d33ec7315e5a99d17fb5d62ed33cdb5b9 + ExpoAsset: b3999ffb3d4049b6c870708c60ea2209ace9f170 + ExpoAudio: edc9230b788be6f65238a53907d5c176b57a7ce0 + ExpoCamera: c4c16b83b6db376e5a0e538fe2a04deafbb5b6d8 + ExpoCameraBarcodeScanning: 69275ab8ecd76f338da22df825c59405bcf36472 + ExpoDevice: 5c638e530304a51992263ab5c1cab726f992b9dc + ExpoDocumentPicker: fe03a24855e39af0f9b5aee17e7eb4813f6e44a6 + ExpoDomWebView: beaec034e51bd028428b98bb1f2633ab79c6d095 + ExpoFileSystem: 28778f942725170102f7c6cf4dee05a526ddacd0 + ExpoFont: f8198a952ba2ff53c9b393b5269ea435f232cfc3 + ExpoHaptics: 32efd02d88953d30a5c2ff796c0fce692e7bcd2e + ExpoImage: abe60c6c68d08d837b2c51fb9e8b6c6e320b9125 + ExpoKeepAwake: 72af0b3be3615e59bc819d26061ff4e06b155ee0 + ExpoLocalAuthentication: 1e4aef156a3a1f953f8278b8d8309f6118919640 + ExpoLogBox: 80957303325cd4439137765c90a87d7f22aaf2ff + ExpoModulesCore: cfff5545e4ce059bbfba80e56bd1771d9a620ed1 + ExpoModulesJSI: 21c947f0cc559401c86995dad7a0b1112c7fd656 + ExpoModulesWorklets: 986cf72c18400743869b4642d243115f831e404d + ExpoModulesWorkletsAdapter: ae4dd675418c2bbdf802ae74f7f78442e7010ab7 + ExpoNotifications: 098f80e610228da37ee98c0828931337cf5b1106 ExpoQuickLook: 7ac65cd559a74619ea41e13df20e9d7a61e79ea6 - ExpoSystemUI: 2ad325f361a2fcd96a464e8574e19935c461c9cc - ExpoVideo: 8d9e8a1acd0c4c210e538b4355e34ae8ff5e04f7 - ExpoVideoThumbnails: 503a79271416c8723f04b55ea4737282513ebe4f - ExpoWebBrowser: 17b064c621789e41d4816c95c93f429b84971f52 + ExpoSystemUI: 05ee8d4aaba1b6af330f3621e19b39ff9f21e718 + ExpoVideo: 56ed2863b981dd5ae946d8ef23ecfcae855863a0 + ExpoVideoThumbnails: da5d471c170bf4110f681b6649524eace9c95b5b + ExpoWebBrowser: a4d7c382116fbe33c1ec7f60293f02b7e97042e4 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa + FBLazyVector: 94a9e5b949d0f65bbc1a741f8a7c72499da32567 Firebase: 6a8f201c61eda24e98f1ce2b44b1b9c2caf525cc FirebaseAnalytics: acfa848bf81e1a4dbf60ef1f0eddd7328fe6673e FirebaseCore: 2321536f9c423b1f857e047a82b8a42abc6d9e2c @@ -4033,12 +4408,12 @@ SPEC CHECKSUMS: FirebaseInstallations: 781e0e37aa0e1c92b44d00e739aba79ad31b2dba FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa FirebaseSessions: f5c6bfeb66a7202deaf33352017bb6365e395820 - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac + glog: 9c7bd858f1402a8e680d1637276210773c093b76 GoogleAppMeasurement: 8a82b93a6400c8e6551c0bcd66a9177f2e067aed GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172 + hermes-engine: 517aaf93c2fbacc66266024672ddb34b20ed8679 JitsiWebRTC: b47805ab5668be38e7ee60e2258f49badfe8e1d0 libavif: 5f8e715bea24debec477006f21ef9e95432e254d libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f @@ -4051,79 +4426,87 @@ SPEC CHECKSUMS: NitroModules: f2a165630c12aed5793d6b42b9002c6a649ea04e PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 5eb1d2eeff5fb91151e8a8eef45b6c7658b6c897 - RCTRequired: cebcf9442fc296c9b89ac791dfd463021d9f6f23 - RCTTypeSafety: b99aa872829ee18f6e777e0ef55852521c5a6788 - React: 914f8695f9bf38e6418228c2ffb70021e559f92f - React-callinvoker: 23cd4e33928608bd0cc35357597568b8b9a5f068 - React-Core: 6a0a97598e9455348113bfe4c573fe8edac34469 - React-CoreModules: a88a6ca48b668401b9780e272e2a607e70f9f955 - React-cxxreact: 06265fd7e8d5c3b6b49e00d328ef76e5f1ae9c8b - React-debug: 29aed758c756956a51b4560223edbd15191ca4c5 - React-defaultsnativemodule: c406bf7cd78036efffb7dec9df469257a1bca58c - React-domnativemodule: 925ea5ff8cb05c68e910057e6349e5898cce00f3 - React-Fabric: 13130d0a70f17e913865b04673ee64603d6c42fe - React-FabricComponents: 1f01ea24a1314bf9abcac4743bb7ad8791336be6 - React-FabricImage: f364dc54fcf8b0ef77192674a009aa4f65b34d75 - React-featureflags: 32217ac18a8c216fc571044186fb04164af72772 - React-featureflagsnativemodule: 9c552bb908a7434baa846002ee1752a77b1a5520 - React-graphics: 3034a698e46e947f74a443e761f1feef742e9d71 - React-hermes: a852be3ab9e1f515e46ba3ea9f48c31d4a9df437 - React-idlecallbacksnativemodule: c43fe1f2221b0548cc366bf15f88efb3b3221bbf - React-ImageManager: 7efd7b19cdfaa3a82482e9e6ac0b56606a3ec271 - React-jserrorhandler: 597057d0b9d158c03e02aa376a4a95f64f46a910 - React-jsi: 7b53959aea60909ac6bbe4dd0bdec6c10d7dc597 - React-jsiexecutor: 19938072af05ade148474bac41e0324a2d733f44 - React-jsinspector: eb6bb244a75cbd56f32767daf2efdb344e2ff10c - React-jsinspectorcdp: 727f37537e9c7ab22b6b86c802d879efae5e2757 - React-jsinspectornetwork: 11d47e644701c58038ef8d7f54a405ddd62b3b16 - React-jsinspectortracing: 8875637e6c65b3b9a3852b006856562e874e7a78 - React-jsitooling: b6e6a2551459a6ef9e1529df2ea981fa27ed3a91 - React-jsitracing: 879e2b2f80dd33d84175989de0a8db5d662505db - React-logger: a913317214a26565cd4c045347edf1bcacb80a3f - React-Mapbuffer: 017336879e2e0fb7537bbc08c24f34e2384c9260 - React-microtasksnativemodule: 63ee6730cec233feab9cdcc0c100dc28a12e4165 + RCT-Folly: 36c4f904fb6cd0219dcb76b94e9502d2a72fab0b + RCTDeprecation: 5268fe9d45036e52deb765d242297f1011e17333 + RCTRequired: 4ecfd325edd95cbbdc202163fb9cb2ba54ac3c9f + RCTSwiftUI: e8b9cdb0d9fbea9284db6420bb726206819a9287 + RCTSwiftUIWrapper: 823739174d403f0fc8fca2baa5c485b8121c00c4 + RCTTypeSafety: 40a9400b253020417515028803a696b35ab8042c + React: 52dce66f71097ed7a4968673d95eeb8095ded74e + React-callinvoker: fba8c8c6078156889ed4e6070ed46265345462b5 + React-Core: fb34f5a9df5c1743c550912b96f9c4f3a3ef69d8 + React-CoreModules: 0e196522b5b3e181a2e7b1e4f33f8b801ac23fd4 + React-cxxreact: 11942a287481cd18c11d9bd2c64d3b1b2b2626c2 + React-debug: 6fee06a4b91395b4dbcb20c628974edae868eb43 + React-defaultsnativemodule: 782f1b8c794bbc960cdce4b483db78d9e251cff2 + React-domnativemodule: 01e99c6243cb87447e7627399a891b41727178da + React-Fabric: 31abac546ae65a4a6b7b283df4496ff393545c86 + React-FabricComponents: 7d474b9b833c18fd349943bcf7b1c54cb9aed728 + React-FabricImage: 53aefdba02f5c6ca953cd7bab04a0d3cf8625c15 + React-featureflags: 7284e11613282ec1703cf697bf13b2744d3bf8b5 + React-featureflagsnativemodule: 40b3e8baff8d43413f89561d4987b73afcc97c2f + React-graphics: a252e749294e52fa60c2711b795f5aa7649d58b8 + React-hermes: df503e8bd7483322f10dfefe27c68f9290befbd5 + React-idlecallbacksnativemodule: e5ba08ad15e7dbbbad2d3bf7fc23bc051cfe6610 + React-ImageManager: a08e8bccc9f6ea6e43bbcb9ce324094eed9f5cb7 + React-intersectionobservernativemodule: 850839034c43eb7e7f15faab8e1fff2cd5a478f4 + React-jserrorhandler: 0b250992c1a8181a90e925834444fabbc7a21fb5 + React-jsi: 26b4997a1a030b14434e1a3b3ca28a593388a649 + React-jsiexecutor: 337306ff602647d6ad7017ee988286b69d51d513 + React-jsinspector: 70354072327bb21c23613eab53ab14381787d78f + React-jsinspectorcdp: b53e6d2c40036b4456d212e2b3f48112b2144c4e + React-jsinspectornetwork: 6f5479e9b485065597d2a00827180e35ef153c2f + React-jsinspectortracing: 8d37007dfcbd35bdae4c5feebb98aa87cec4cde1 + React-jsitooling: 6b2bc363c1eb762c303849787bdcf0cd7148da3a + React-jsitracing: db3ab1e47adee8b8a56ced09074a1cbdffd48609 + React-logger: 49084e2c68c541d938502793e71aeb3707407d5f + React-Mapbuffer: e1ff6f5e203a9e7508d74f83d82052ece710bc8a + React-microtasksnativemodule: 8f4fec3bfe2f2b2d5cf216106caac2349fc261c8 + React-mutationobservernativemodule: a44d1a1fe65bf7ec9f30036a66db8d8f0412c1ee react-native-a11y-order: 20b33ff538af60d8b8a7f7284115a7febc9034d4 react-native-cameraroll: ae31ba7ee17d31c5ee05d7bb248742e3af482783 react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 react-native-external-keyboard: db51d3a78d68c1f87fef41c67353a7c0ddbe51dd react-native-keyboard-controller: c4ca61f44d66c2f8987a7e67e9b78e80dc965c45 - react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 - react-native-safe-area-context: 0a3b034bb63a5b684dd2f5fffd3c90ef6ed41ee8 - react-native-slider: 6201419b3e3f7c6b7cf2068e0c01274fa86a1da5 + react-native-netinfo: 9fad4eedfec9840a10e73ac4591ea1158523309b + react-native-safe-area-context: eda63a662750758c1fdd7e719c9f1026c8d161cb + react-native-slider: 205c30f4f19af8469c1c24bd4e3ec74038576a67 react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74 react-native-webview: 83c663c5bdf1357d3e7c00986260cb888ea0e328 - React-NativeModulesApple: cbceb3c4cb726838c461b13802a76cefa6f3476f - React-oscompat: eb0626e8ba1a2c61673c991bf9dc21834898475d - React-perflogger: 509e1f9a3ee28df71b0a66de806ac515ce951246 - React-performancetimeline: 9ce28cce1cded27410c293283f99fe62bebdb920 - React-RCTActionSheet: 30fe8f9f8d86db4a25ff34595a658ecd837485fc - React-RCTAnimation: 3126eb1cb8e7a6ca33a52fd833d8018aa9311af1 - React-RCTAppDelegate: b03981c790aa40cf26e0f78cc0f1f2df8287ead4 - React-RCTBlob: 53c35e85c85d6bdaa55dc81a0b290d4e78431095 - React-RCTFabric: 59ad9008775f123019c508efff260594a8509791 - React-RCTFBReactNativeSpec: 82b605ab4f6f8da0a7ad88641161df5a0bafb1fb - React-RCTImage: 074b2faa71a152a456c974e118b60c9eeda94a64 - React-RCTLinking: e5ca17a4f7ae2ad7b0c0483be77e1b383ecd0a8a - React-RCTNetwork: c508d7548c9eceac30a8100a846ea00033a03366 - React-RCTRuntime: 6979568c0bc276fe785e085894f954fa15e0ec7e - React-RCTSettings: dd84c857a4fce42c1e08c1dabcda894e25af4a6e - React-RCTText: 6e4b177d047f98bccb90d6fb1ebdd3391cf8b299 - React-RCTVibration: 9572d4a06a0c92650bcc62913e50eb2a89f19fb6 - React-rendererconsistency: a7b47f8b186af64ff8509c8caec4114a2f1ae63f - React-renderercss: 9845c5063b3a2d0462ed4e4c7fc34219a5d608ed - React-rendererdebug: 3905e346c06347b86c6e49d427062cdd638a3044 - React-RuntimeApple: 97233caf2b635c40819bf5be38d818777f8229ab - React-RuntimeCore: dc41f86fcdf1fbb42a5b8388a29bf59dfa56b2f8 - React-runtimeexecutor: d16d045faaf6cd7de8d1aa8e31a51c13d8db84a4 - React-RuntimeHermes: 5a9d132554c8d6b416d794cd4ac7d927b2f88f7b - React-runtimescheduler: 689d805d43c28b8fb1ab390914e042d10e2ea2ab - React-timing: c39eeb992274aeaeb9f4666dc97a36a31d33fe94 - React-utils: 2f9ba0088251788ad66aa1855ff99ed2424024d2 - ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 - ReactCodegen: e0a2012cda55dfd0d2e626ba5d11929c9ff5986c - ReactCommon: 6d0fa86a4510730da7c72560e0ced14258292ab9 + React-NativeModulesApple: 750a5d07f72a9224863f7d7c30519f71aa88576e + React-networking: dc4795b8113f6029877be8abdf555cedb60d8f3c + React-oscompat: 3d37f8d54a39a05a54be863c235b939cb4108385 + React-perflogger: 5aa7c01773e8dca7c2e72b1eb42ebddb7ca83413 + React-performancecdpmetrics: c18cb2f28b3a4220c90f3b6ee5bcf375c52544be + React-performancetimeline: a9a81c04f7d4c2df48ce5e1a1c2bbfbf2e292579 + React-RCTActionSheet: 57e248e5a72bb65bb26e7afb5370ba3d411c003a + React-RCTAnimation: d7501cac9938345a51acb245ed6e911016c9414a + React-RCTAppDelegate: fd219555b51b039b0dbf58a910f0adb00eb6df8d + React-RCTBlob: 647dcdd01449e7d0f39c3a5d3862328ed4dfca83 + React-RCTFabric: 7b1c18df82a2bf7f355ad61264956b42abfcdfca + React-RCTFBReactNativeSpec: 289308a9b9c633e0250a7a7f82d403b60b9dac78 + React-RCTImage: 5880615f3360564cb78872c838ab435e013659ae + React-RCTLinking: ea77766ce56904248222754f0a5960bc6b173cbf + React-RCTNetwork: d2cf10109367dcbcadeeb36b01eeab729708ce94 + React-RCTRuntime: d566a4abd49a8e6eaf383d09c75bdb1dc1505a28 + React-RCTSettings: 058999035f72625afb32c6c32bd34074a33190f8 + React-RCTText: a09cad9bebd88d5088ef47e1dfb38fe4cf114591 + React-RCTVibration: da609d61ad6cef32ddfea86d116fd69c34fdbf34 + React-rendererconsistency: d7d521e7ac66970d051f25575c23a55355e4526d + React-renderercss: 3105f8eed9fd35b4035c61949193d1553741743a + React-rendererdebug: 119235eaa62ac4cc21e4d87cbc6f9ff8d7bdff51 + React-RuntimeApple: b58c06ee048b953b0fab67fd474d3f92fe47c403 + React-RuntimeCore: 463614d0376292c66e85f874db0dabbb8e0822e3 + React-runtimeexecutor: 3d63baa8fb9b5afd94ec56e7da49f0b49ef9de1b + React-RuntimeHermes: 3cefc114d68f49441e661b767b38730d7eb466ef + React-runtimescheduler: 0a4593b56ddab4a38ec431b2ad7d36ccb99b018d + React-timing: d0983fe4b4dd63fc660e9a9e220536747a4ba5e1 + React-utils: ca695510a0b98277cfae1a5e94274dd8fc01c877 + React-viewtransitionnativemodule: d2652188ed10f6dfbc05751607467dc53062e7ad + React-webperformancenativemodule: e59f5087f046a00242b60a8be0f471a353044f40 + ReactAppDependencyProvider: bb350d1333fd459c1aabe782088419a9b8894d3a + ReactCodegen: ead138c976dd9fc1ca8a79a297d4ccf96182531f + ReactCommon: 322cf4b51be09a3cbf5ae891c8dd9f52091c4011 ReactNativeIncallManager: dccd3e7499caa3bb73d3acfedf4fb0360f1a87d5 RNBootSplash: 7fcc9a58ae343aeb1a1dd49f9030832fe432c544 RNCallKeep: 1930a01d8caf48f018be4f2db0c9f03405c2f977 @@ -4131,19 +4514,19 @@ SPEC CHECKSUMS: RNCClipboard: e560338bf6cc4656a09ff90610b62ddc0dbdad65 RNCMaskedView: d707a83784c67099b54b37d056ababb2767ce15e RNCPicker: 35fc66f352403cdfe99d53b541f5180482ca2bc5 - RNDateTimePicker: ca1dc7e24d0b4839877f0ab619e7bca5db715289 + RNDateTimePicker: ea25d20659754bfe1014e0d5905d21dbc18ff705 RNDeviceInfo: 900bd20e1fd3bfd894e7384cc4a83880c0341bd3 RNFBAnalytics: 2e8b8ffcd2bb3d59a43ecbe09571c73c56edef7a RNFBApp: a448037d2df74af9d374a0b765be12ff1e844dc0 RNFBCrashlytics: c3bb5533f9957eddc88f3ea383583309a4ce9f89 - RNGestureHandler: b8d2e75c2e88fc2a1f6be3b3beeeed80b88fa37d + RNGestureHandler: 89c0c079dc88636fed9580bb581bd7df69ef33d0 RNImageCropPicker: 5432d75a3bc7209dc8b6ab189fcfe19bd6339fb9 RNLocalize: c46dd4008dc8990a098fcafd6ee051122a1ccfda - RNReanimated: e1690cdd7f215cfb96a3b7986b81889867dfdb4f - RNScreens: ccfcc2f7d9c0d458b7fc41b3f4f0bea054602b3a - RNSVG: 94a1be05fab4043354bcf7104f0f9b0e2231ef05 + RNReanimated: 1a67ec7c458dd04abadba7549d9d5abb24d6ec8a + RNScreens: 7a423c912ca9e107b37f54f32292186de32bfcaf + RNSVG: 1eecd65673a4735fead92da0e79441f09ec2d77a RNTrueSheet: 53f29088da313dabff8b81d7c4d52afd8e609cfa - RNWorklets: ab618bf7d1c7fd2cb793b9f0f39c3e29274b3ebf + RNWorklets: 71a002c69e25e15bd4758faccd089349bcfc82d7 SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c @@ -4152,9 +4535,9 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 TOCropViewController: 797deaf39c90e6e9ddd848d88817f6b9a8a09888 WatermelonDB: 4c846c8cb94eef3cba90fa034d15310163226703 - Yoga: 1e91d83a5286cfd3b725eade59274c92270540d4 + Yoga: 9690ea6ce9c77aee633f4815cc42202c701edbd8 ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: 9ef0d302aac0150cec49089c7c416db32bb9d3ec +PODFILE CHECKSUM: d705b9a75929ea25f9b7bb3ef8167fe307bd8b32 COCOAPODS: 1.15.2 diff --git a/ios/RocketChat.xcodeproj/project.pbxproj b/ios/RocketChat.xcodeproj/project.pbxproj index 7f2c42f4612..fba4a7314c7 100644 --- a/ios/RocketChat.xcodeproj/project.pbxproj +++ b/ios/RocketChat.xcodeproj/project.pbxproj @@ -1274,9 +1274,9 @@ "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoNotifications/ExpoNotifications_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", @@ -1296,6 +1296,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-timing/React-timing_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -1309,9 +1310,9 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", @@ -1331,6 +1332,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-timing_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", @@ -1433,9 +1435,9 @@ "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoNotifications/ExpoNotifications_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", @@ -1455,6 +1457,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-timing/React-timing_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -1468,9 +1471,9 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", @@ -1490,6 +1493,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-timing_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", @@ -1553,13 +1557,15 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoModulesJSI/ExpoModulesJSI.framework/ExpoModulesJSI", "${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermesvm.framework/hermesvm", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoModulesJSI.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermesvm.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -1853,7 +1859,7 @@ "$PODS_CONFIGURATION_BUILD_DIR/Firebase", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1929,7 +1935,7 @@ "$PODS_CONFIGURATION_BUILD_DIR/Firebase", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -1983,6 +1989,7 @@ INFOPLIST_KEY_CFBundleDisplayName = Rocket.Chat; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_WKCompanionAppBundleIdentifier = chat.rocket.ios; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2002,7 +2009,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 8.0; + WATCHOS_DEPLOYMENT_TARGET = 9.0; }; name = Debug; }; @@ -2036,6 +2043,7 @@ INFOPLIST_KEY_CFBundleDisplayName = Rocket.Chat; INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; INFOPLIST_KEY_WKCompanionAppBundleIdentifier = chat.rocket.ios; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2053,7 +2061,7 @@ SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 8.0; + WATCHOS_DEPLOYMENT_TARGET = 9.0; }; name = Release; }; @@ -2087,7 +2095,7 @@ "$(SRCROOT)", ); INFOPLIST_FILE = NotificationService/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2140,7 +2148,7 @@ "$(SRCROOT)", ); INFOPLIST_FILE = NotificationService/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2193,7 +2201,7 @@ "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2257,7 +2265,7 @@ "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -2348,16 +2356,25 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", + "${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers", ); IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); OTHER_LDFLAGS = ( "$(inherited)", " ", ); + PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; @@ -2418,15 +2435,24 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", + "${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers", + "${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers", ); IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = "$(inherited)"; - OTHER_CPLUSPLUSFLAGS = "$(inherited)"; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); + OTHER_CPLUSPLUSFLAGS = ( + "$(inherited)", + "-DRCT_REMOVE_LEGACY_ARCH=1", + ); OTHER_LDFLAGS = ( "$(inherited)", " ", ); + PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/jest.setup.js b/jest.setup.js index c82820c93b7..a438a918521 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -4,6 +4,9 @@ import { Image } from 'expo-image'; jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage); +const resolveExpoLazyFetchBeforeReactNativeMocks = () => globalThis.fetch; +resolveExpoLazyFetchBeforeReactNativeMocks(); + jest.mock('./app/lib/methods/handleMediaDownload', () => ({ ...jest.requireActual('./app/lib/methods/handleMediaDownload'), getMediaCache: jest.fn(() => Promise.resolve({ exists: false })), diff --git a/package.json b/package.json index 05b6aca3168..48fba68e228 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@react-native-firebase/crashlytics": "^21.12.2", "@react-native-masked-view/masked-view": "^0.3.1", "@react-native-picker/picker": "2.11.4", - "@react-native/codegen": "^0.80.0", + "@react-native/codegen": "0.86.3", "@react-navigation/drawer": "^7.12.2", "@react-navigation/elements": "^2.9.25", "@react-navigation/native": "^7.3.3", @@ -105,7 +105,7 @@ "react-native-incall-manager": "^4.2.1", "react-native-katex": "git+https://github.com/RocketChat/react-native-katex.git", "react-native-keyboard-controller": "1.18.5", - "react-native-linear-gradient": "2.6.2", + "react-native-linear-gradient": "2.8.3", "react-native-localize": "3.7.0", "react-native-math-view": "3.9.5", "react-native-mime-types": "2.3.0", @@ -173,9 +173,9 @@ "@react-native-community/cli": "20.0.0", "@react-native-community/cli-platform-android": "20.0.0", "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.81.5", + "@react-native/babel-preset": "0.86.3", "@react-native/metro-config": "0.86.3", - "@react-native/typescript-config": "0.81.5", + "@react-native/typescript-config": "0.86.3", "@storybook/react": "~9.0.9", "@storybook/react-native": "~9.0.9", "@testing-library/react-native": "^13.2.0", diff --git a/patches/@react-native-camera-roll+camera-roll+7.10.2.patch b/patches/@react-native-camera-roll+camera-roll+7.10.2.patch new file mode 100644 index 00000000000..d2ea78a557f --- /dev/null +++ b/patches/@react-native-camera-roll+camera-roll+7.10.2.patch @@ -0,0 +1,26 @@ +diff --git a/node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts b/node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts +index 63e1136..634a40b 100644 +--- a/node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts ++++ b/node_modules/@react-native-camera-roll/camera-roll/src/NativeCameraRollModule.ts +@@ -21,8 +21,8 @@ type Album = { + id: string; + title: string; + count: number; +- type: AlbumType; +- subtype?: AlbumSubType; ++ type: string; ++ subtype?: string; + }; + + type SubTypes = +@@ -41,8 +41,8 @@ type PhotoIdentifier = { + node: { + id: string; + type: string; +- subTypes: SubTypes; +- sourceType: SourceType; ++ subTypes: string; ++ sourceType: string; + group_name: string[]; + image: { + filename: string | null; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5007156765b..ea4362fae23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,8 +73,8 @@ importers: specifier: 2.11.4 version: 2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-native/codegen': - specifier: ^0.80.0 - version: 0.80.2(@babel/core@7.29.7) + specifier: 0.86.3 + version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.12.2 version: 7.12.2(568a64fb44ad70e6f0b55611752f41f8) @@ -253,8 +253,8 @@ importers: specifier: 1.18.5 version: 1.18.5(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-linear-gradient: - specifier: 2.6.2 - version: 2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: 2.8.3 + version: 2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-localize: specifier: 3.7.0 version: 3.7.0(@expo/config-plugins@57.0.9(typescript@7.0.2))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -293,7 +293,7 @@ importers: version: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-skeleton-placeholder: specifier: 5.2.4 - version: 5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg: specifier: ^15.12.1 version: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -398,14 +398,14 @@ importers: specifier: 20.0.0 version: 20.0.0 '@react-native/babel-preset': - specifier: 0.81.5 - version: 0.81.5(@babel/core@7.29.7) + specifier: 0.86.3 + version: 0.86.3(@babel/core@7.29.7) '@react-native/metro-config': specifier: 0.86.3 version: 0.86.3(@babel/core@7.29.7) '@react-native/typescript-config': - specifier: 0.81.5 - version: 0.81.5 + specifier: 0.86.3 + version: 0.86.3 '@storybook/react': specifier: ~9.0.9 version: 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) @@ -1143,12 +1143,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.27.1': - resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.29.7': resolution: {integrity: sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==} engines: {node: '>=6.9.0'} @@ -2614,38 +2608,16 @@ packages: 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.81.5': - resolution: {integrity: sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==} - engines: {node: '>= 20.19.4'} - '@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.81.5': - resolution: {integrity: sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==} - engines: {node: '>= 20.19.4'} - peerDependencies: - '@babel/core': '*' - '@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.80.2': - resolution: {integrity: sha512-eYad9ex9/RS6oFbbpu6LxsczktbhfJbJlTvtRlcWLJjJbFTeNr5Q7CgBT2/m5VtpxnJ/0YdmZ9vdazsJ2yp9kw==} - engines: {node: '>=18'} - peerDependencies: - '@babel/core': '*' - - '@react-native/codegen@0.81.5': - resolution: {integrity: sha512-a2TDA03Up8lpSa9sh5VRGCQDXgCTOyDOFH+aqyinxp1HChG8uk89/G+nkJ9FPd0rqgi25eCTR16TWdS3b+fA6g==} - engines: {node: '>= 20.19.4'} - peerDependencies: - '@babel/core': '*' - '@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} @@ -2706,8 +2678,8 @@ packages: '@react-native/normalize-colors@0.86.3': resolution: {integrity: sha512-Cv3CDkprb67GrzuaS9BGbBJC/6G4lIw3nyKOHRKTqTTum4bn37y5+R0Z04L8mcbQN85eEohNrRwb7IOM4j6uvg==} - '@react-native/typescript-config@0.81.5': - resolution: {integrity: sha512-NeCecPmlW+fcwFKzDzT1GcEQmJSE6tLz9Fg6wGjKL1l7pqUzpQIQg1iF3OovHOlyfPiB98+XRHnIBvlTSJ5R0w==} + '@react-native/typescript-config@0.86.3': + resolution: {integrity: sha512-HjYnjYUVP88Z/0YPGQ4ErRsEirCzccNYGuoldv6uhiK93aVnIdv7+8sbROmqcJv6BI6R+Kf0iBlN3gSG9Au+jg==} '@react-native/virtualized-lists@0.86.3': resolution: {integrity: sha512-1j44NEyNn05Ut40vHAmoSWbsIcybFkMAOBTwQt1PrESyfSS+qBoyU1LGIogNva0VIa0rQyEC5PzbA7R4/7Nhyw==} @@ -3683,9 +3655,6 @@ packages: babel-plugin-react-native-web@0.21.2: resolution: {integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==} - babel-plugin-syntax-hermes-parser@0.29.1: - resolution: {integrity: sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==} - babel-plugin-syntax-hermes-parser@0.36.0: resolution: {integrity: sha512-LhD0xdoedDw7ansQgXbB2DADLZIK/LRXuWNBPuVzMc5S2WK5GyT89tCM+cQzxFGO0mGyLK6D5TrVOJJzAoDy8Q==} @@ -5122,12 +5091,6 @@ packages: hermes-compiler@250829098.0.17: resolution: {integrity: sha512-qG1PXzTEtriF6oQLZF3vyHhSMxOdW5h2TqqLri0rdpstPustd2fSvRZQMVAPdlhgFwBfYnj3OUZtiO6LjYsEFw==} - hermes-estree@0.28.1: - resolution: {integrity: sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==} - - hermes-estree@0.29.1: - resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==} - hermes-estree@0.35.0: resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} @@ -5137,12 +5100,6 @@ packages: hermes-estree@0.36.1: resolution: {integrity: sha512-guv1nQ6IJ7S83NRFPWc3SA7IBZrdNC9kapwOq6uXvF4wP+sDCgjzQbKPCoyYmoyZRzztF/n/c36l/rccCZSiCw==} - hermes-parser@0.28.1: - resolution: {integrity: sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==} - - hermes-parser@0.29.1: - resolution: {integrity: sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==} - hermes-parser@0.35.0: resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} @@ -6796,8 +6753,8 @@ packages: react-native: '*' react-native-reanimated: '>=3.0.0' - react-native-linear-gradient@2.6.2: - resolution: {integrity: sha512-Z8Xxvupsex+9BBFoSYS87bilNPWcRfRsGC0cpJk72Nxb5p2nEkGSBv73xZbEHnW2mUFvP+huYxrVvjZkr/gRjQ==} + react-native-linear-gradient@2.8.3: + resolution: {integrity: sha512-KflAXZcEg54PXkLyflaSZQ3PJp4uC4whM7nT/Uot9m0e/qxFV3p6uor1983D1YOBJbJN7rrWdqIjq0T42jOJyA==} peerDependencies: react: '*' react-native: '*' @@ -8554,11 +8511,6 @@ snapshots: '@babel/core': 7.25.9 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -8947,23 +8899,12 @@ snapshots: '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.7) - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-react-jsx@7.29.7(@babel/core@7.29.7)': dependencies: @@ -10834,14 +10775,6 @@ snapshots: '@react-native/assets-registry@0.86.3': {} - '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.29.7)': - dependencies: - '@babel/traverse': 7.29.0 - '@react-native/codegen': 0.81.5(@babel/core@7.29.7) - transitivePeerDependencies: - - '@babel/core' - - supports-color - '@react-native/babel-plugin-codegen@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/traverse': 7.29.8 @@ -10850,56 +10783,6 @@ snapshots: - '@babel/core' - supports-color - '@react-native/babel-preset@0.81.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-proposal-export-default-from': 7.27.1(@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.27.1(@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-arrow-functions': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.7) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.7) - '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.29.7) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.7) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) - '@babel/template': 7.28.6 - '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.29.7) - babel-plugin-syntax-hermes-parser: 0.29.1 - babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) - react-refresh: 0.14.2 - transitivePeerDependencies: - - supports-color - '@react-native/babel-preset@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -10938,29 +10821,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/codegen@0.80.2(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - glob: 7.2.3 - hermes-parser: 0.28.1 - invariant: 2.2.4 - nullthrows: 1.1.1 - yargs: 17.7.2 - - '@react-native/codegen@0.81.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/parser': 7.29.2 - glob: 7.2.3 - hermes-parser: 0.29.1 - invariant: 2.2.4 - nullthrows: 1.1.1 - yargs: 17.7.2 - '@react-native/codegen@0.86.3(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.8 hermes-parser: 0.36.0 invariant: 2.2.4 nullthrows: 1.1.1 @@ -11054,7 +10918,7 @@ snapshots: '@react-native/normalize-colors@0.86.3': {} - '@react-native/typescript-config@0.81.5': {} + '@react-native/typescript-config@0.86.3': {} '@react-native/virtualized-lists@0.86.3(@types/react@19.2.18)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: @@ -12076,10 +11940,6 @@ snapshots: babel-plugin-react-native-web@0.21.2: {} - babel-plugin-syntax-hermes-parser@0.29.1: - dependencies: - hermes-parser: 0.29.1 - babel-plugin-syntax-hermes-parser@0.36.0: dependencies: hermes-parser: 0.36.0 @@ -13755,24 +13615,12 @@ snapshots: hermes-compiler@250829098.0.17: {} - hermes-estree@0.28.1: {} - - hermes-estree@0.29.1: {} - hermes-estree@0.35.0: {} hermes-estree@0.36.0: {} hermes-estree@0.36.1: {} - hermes-parser@0.28.1: - dependencies: - hermes-estree: 0.28.1 - - hermes-parser@0.29.1: - dependencies: - hermes-estree: 0.29.1 - hermes-parser@0.35.0: dependencies: hermes-estree: 0.35.0 @@ -15898,7 +15746,7 @@ snapshots: react-native-is-edge-to-edge: 1.3.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-linear-gradient@2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -15977,12 +15825,12 @@ snapshots: react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) warn-once: 0.1.1 - react-native-skeleton-placeholder@5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-skeleton-placeholder@5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-linear-gradient: 2.6.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-linear-gradient: 2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg@15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: From 0e8a91b6219171637708090e19a2b68b2554e66c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 16 Sep 2026 09:57:29 -0300 Subject: [PATCH 11/55] fix: update Android build for React Native 0.86 (#7695) * fix: update Android build for React Native 0.86 * fix: restore Android Gradle 9 compatibility * fix: align React Native codegen version * fix: resolve Android storage permission merge * fix: patch Android modules for React Native 0.86 * fix: restore Android local broadcast dependency * fix: build patched Expo modules from source * fix: raise iOS deployment target to 16.4 for Expo 57 * fix: materialize expo fetch global before jest mocks * fix: keep setImmediate real under jest fake timers * fix: key iOS pods cache by Podfile.lock hash * fix: allow non-modular React includes in framework modules * fix: drop undefined header values before fetch expo/fetch, installed as the global fetch on native by Expo 57, forwards header entries to the native request verbatim, so an undefined value fails the Kotlin cast to Pair and rejects the whole request. * fix: build React-Core from source instead of prebuilt * fix: match Expo import access level with generated provider * fix: adopt Expo 57 AppDelegate contract * fix: compile Hermes bytecode with the legacy compiler * fix: expose header test ids on iOS * fix: expose team channels header test id * fix: remove iOS changes from Android upgrade --- .github/actions/build-android/action.yml | 11 +------ .github/workflows/e2e-build-android.yml | 10 +----- android/app/build.gradle | 2 +- android/app/src/main/AndroidManifest.xml | 4 +++ android/settings.gradle | 17 +++++++--- .../methods/helpers/__tests__/fetch.test.ts | 33 ++++++++++++------- jest.config.js | 1 + jest.setup.js | 2 ++ package.json | 12 +++++++ .../@react-native-cookies+cookies+6.2.1.patch | 20 +++++++++++ patches/expo-font+57.0.4.patch | 2 +- ...ct-native-keyboard-controller+1.18.5.patch | 26 +++++++++++++++ patches/react-native-math-view+3.9.5.patch | 32 ++++++++++++++++++ 13 files changed, 134 insertions(+), 38 deletions(-) create mode 100644 patches/@react-native-cookies+cookies+6.2.1.patch create mode 100644 patches/react-native-keyboard-controller+1.18.5.patch create mode 100644 patches/react-native-math-view+3.9.5.patch diff --git a/.github/actions/build-android/action.yml b/.github/actions/build-android/action.yml index 86c531d52c9..022d586cd6a 100644 --- a/.github/actions/build-android/action.yml +++ b/.github/actions/build-android/action.yml @@ -45,17 +45,8 @@ runs: - name: Set gradle.properties working-directory: android run: | - echo "" > ./gradle.properties - echo -e "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8" >> ./gradle.properties - echo -e "android.useAndroidX=true" >> ./gradle.properties - echo -e "android.enableJetifier=true" >> ./gradle.properties - echo -e "android.jetifier.ignorelist=bcprov-jdk18on" >> ./gradle.properties - echo -e "reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64" >> ./gradle.properties - echo -e "newArchEnabled=true" >> ./gradle.properties - echo -e "hermesEnabled=true" >> ./gradle.properties - echo -e "edgeToEdgeEnabled=true" >> ./gradle.properties + printf '\n' >> ./gradle.properties echo -e "VERSIONCODE=${{ inputs.BUILD_VERSION }}" >> ./gradle.properties - echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties echo -e "BugsnagAPIKey=${{ inputs.BUGSNAG_KEY_OFFICIAL }}" >> ./gradle.properties echo -e "KEYSTORE=${{ inputs.KEYSTORE_OFFICIAL }}" >> ./gradle.properties echo -e 'KEYSTORE_PASSWORD=${{ inputs.KEYSTORE_OFFICIAL_PASSWORD }}' >> ./gradle.properties diff --git a/.github/workflows/e2e-build-android.yml b/.github/workflows/e2e-build-android.yml index 93ddf48c31c..89455a5af67 100644 --- a/.github/workflows/e2e-build-android.yml +++ b/.github/workflows/e2e-build-android.yml @@ -103,16 +103,8 @@ jobs: - name: Set gradle.properties working-directory: android run: | - echo "" > ./gradle.properties - echo -e "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -Dfile.encoding=UTF-8" >> ./gradle.properties - echo -e "android.useAndroidX=true" >> ./gradle.properties - echo -e "android.enableJetifier=true" >> ./gradle.properties - echo -e "android.jetifier.ignorelist=bcprov-jdk18on" >> ./gradle.properties + printf '\n' >> ./gradle.properties echo -e "reactNativeArchitectures=arm64-v8a,x86_64" >> ./gradle.properties - echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties - echo -e "newArchEnabled=true" >> ./gradle.properties - echo -e "hermesEnabled=true" >> ./gradle.properties - echo -e "edgeToEdgeEnabled=true" >> ./gradle.properties echo -e "VERSIONCODE=999999" >> ./gradle.properties echo -e "KEYSTORE=release.keystore" >> ./gradle.properties echo -e 'KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_OFFICIAL_PASSWORD }}' >> ./gradle.properties diff --git a/android/app/build.gradle b/android/app/build.gradle index 708ee991747..ffbf6561738 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation "com.google.code.gson:gson:2.8.9" implementation "io.github.zhongwuzw:mmkv:2.4.1" implementation "com.github.bumptech.glide:glide:${rootProject.ext.glideVersion}" - implementation 'com.facebook.soloader:soloader:0.10.4' + implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.1.0" // For SecureKeystore (EncryptedSharedPreferences) implementation 'androidx.security:security-crypto:1.1.0' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 0e9fdce9400..c6a739a6ef3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,10 @@ + diff --git a/android/settings.gradle b/android/settings.gradle index 9bb0709a8db..291937214cc 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,6 +1,14 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } +pluginManagement { + includeBuild("../node_modules/@react-native/gradle-plugin") + includeBuild("../node_modules/expo-modules-autolinking/android/expo-gradle-plugin") +} +plugins { + id("com.facebook.react.settings") + id("expo-autolinking-settings") +} +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) +} rootProject.name = 'RocketChatRN' include ':watermelondb-jsi' project(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi') @@ -8,5 +16,4 @@ include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') -apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); -useExpoModules() \ No newline at end of file +expoAutolinking.useExpoModules() diff --git a/app/lib/methods/helpers/__tests__/fetch.test.ts b/app/lib/methods/helpers/__tests__/fetch.test.ts index 54be37e9046..3b720b987bf 100644 --- a/app/lib/methods/helpers/__tests__/fetch.test.ts +++ b/app/lib/methods/helpers/__tests__/fetch.test.ts @@ -1,29 +1,38 @@ import fetchWithHeaders, { headers } from '../fetch'; -describe('fetch helper', () => { - const globalFetch = jest.fn().mockResolvedValue({} as Response); +jest.mock('react-native-device-info', () => ({ + getSystemVersion: () => '14', + getVersion: () => '4.0.0', + getBuildNumber: () => '1' +})); + +const fetchMock = jest.fn(() => Promise.resolve({} as Response)); +describe('fetch helper', () => { beforeEach(() => { - globalFetch.mockClear(); - globalThis.fetch = globalFetch; + fetchMock.mockClear(); + global.fetch = fetchMock as unknown as typeof global.fetch; }); it('drops headers whose value is undefined or null', async () => { - await fetchWithHeaders('https://example.com/api/info', { + await fetchWithHeaders('https://open.rocket.chat/api/info', { method: 'GET', headers: { 'Content-Type': 'application/json', 'X-Auth-Token': undefined, 'X-User-Id': null as unknown as undefined } }); - const [, options] = globalFetch.mock.calls[0]; - expect(options.headers).toEqual({ 'Content-Type': 'application/json', ...headers }); + expect(fetchMock).toHaveBeenCalledWith('https://open.rocket.chat/api/info', { + method: 'GET', + headers: { 'Content-Type': 'application/json', 'User-Agent': headers['User-Agent'] } + }); }); - it('keeps defined caller headers alongside the default ones', async () => { - await fetchWithHeaders('https://example.com/api/info', { - headers: { 'X-Auth-Token': 'token', 'X-User-Id': 'id' } + it('keeps headers whose value is defined', async () => { + await fetchWithHeaders('https://open.rocket.chat/api/info', { + headers: { 'X-Auth-Token': 'token', 'X-User-Id': 'userId' } }); - const [, options] = globalFetch.mock.calls[0]; - expect(options.headers).toEqual({ 'X-Auth-Token': 'token', 'X-User-Id': 'id', ...headers }); + expect(fetchMock).toHaveBeenCalledWith('https://open.rocket.chat/api/info', { + headers: { 'X-Auth-Token': 'token', 'X-User-Id': 'userId', 'User-Agent': headers['User-Agent'] } + }); }); }); diff --git a/jest.config.js b/jest.config.js index e9ef674db8f..04500372058 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,6 +2,7 @@ const getAliasConfig = require('./config/import-aliases'); module.exports = { maxWorkers: 2, + fakeTimers: { doNotFake: ['setImmediate'] }, workerIdleMemoryLimit: '512MB', modulePathIgnorePatterns: ['/.*worktrees/'], testPathIgnorePatterns: [ diff --git a/jest.setup.js b/jest.setup.js index a438a918521..e4b82ae1c42 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,3 +1,5 @@ +Object.defineProperty(globalThis, 'fetch', { value: globalThis.fetch, writable: true, configurable: true }); + import mockClipboard from '@react-native-clipboard/clipboard/jest/clipboard-mock.js'; import mockAsyncStorage from '@react-native-async-storage/async-storage/jest/async-storage-mock'; import { Image } from 'expo-image'; diff --git a/package.json b/package.json index 48fba68e228..d515c5f29cb 100644 --- a/package.json +++ b/package.json @@ -215,6 +215,18 @@ "typescript": "7.0.2" }, "snyk": true, + "expo": { + "autolinking": { + "android": { + "buildFromSource": [ + "expo-asset", + "expo-audio", + "expo-file-system", + "expo-font" + ] + } + } + }, "engines": { "node": ">=22.13.0" }, diff --git a/patches/@react-native-cookies+cookies+6.2.1.patch b/patches/@react-native-cookies+cookies+6.2.1.patch new file mode 100644 index 00000000000..d0a8cee9581 --- /dev/null +++ b/patches/@react-native-cookies+cookies+6.2.1.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/@react-native-cookies/cookies/android/build.gradle b/node_modules/@react-native-cookies/cookies/android/build.gradle +index 13c7e43..626fb5a 100644 +--- a/node_modules/@react-native-cookies/cookies/android/build.gradle ++++ b/node_modules/@react-native-cookies/cookies/android/build.gradle +@@ -31,7 +31,6 @@ buildscript { + if (project == rootProject) { + repositories { + google() +- jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.5.3' +@@ -67,7 +66,6 @@ repositories { + url "$rootDir/../node_modules/jsc-android/dist" + } + google() +- jcenter() + } + + dependencies { diff --git a/patches/expo-font+57.0.4.patch b/patches/expo-font+57.0.4.patch index 4735b243f74..14a4f88ce5a 100644 --- a/patches/expo-font+57.0.4.patch +++ b/patches/expo-font+57.0.4.patch @@ -26,7 +26,7 @@ index 2cd51dc..db368ff 100644 + val typeface = runCatching { Typeface.createFromAsset(context.assets, candidate) }.getOrNull() + if (typeface != null) { + ReactFontManager.getInstance().setTypeface(fontFamilyName, Typeface.NORMAL, typeface) -+ loadedFonts = loadedFonts.toMutableSet().apply { add(fontFamilyName) }.toList() ++ loadedFonts = getLoadedFonts().toMutableSet().apply { add(fontFamilyName) }.toList() + return@AsyncFunction // Exit early if we successfully loaded the font + } + } diff --git a/patches/react-native-keyboard-controller+1.18.5.patch b/patches/react-native-keyboard-controller+1.18.5.patch new file mode 100644 index 00000000000..82f20514f2e --- /dev/null +++ b/patches/react-native-keyboard-controller+1.18.5.patch @@ -0,0 +1,26 @@ +diff --git a/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/EdgeToEdgeReactViewGroup.kt b/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/EdgeToEdgeReactViewGroup.kt +index e13177c..45bc4e6 100644 +--- a/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/EdgeToEdgeReactViewGroup.kt ++++ b/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/EdgeToEdgeReactViewGroup.kt +@@ -91,7 +91,7 @@ class EdgeToEdgeReactViewGroup( + this.deactivate() + } + +- override fun onConfigurationChanged(newConfig: Configuration?) { ++ override fun onConfigurationChanged(newConfig: Configuration) { + this.reApplyWindowInsets() + } + // endregion +diff --git a/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/background/KeyboardBackgroundViewGroup.kt b/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/background/KeyboardBackgroundViewGroup.kt +index f19514f..8de0cf7 100644 +--- a/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/background/KeyboardBackgroundViewGroup.kt ++++ b/node_modules/react-native-keyboard-controller/android/src/main/java/com/reactnativekeyboardcontroller/views/background/KeyboardBackgroundViewGroup.kt +@@ -17,7 +17,7 @@ class KeyboardBackgroundViewGroup( + } + + // theme changed +- override fun onConfigurationChanged(newConfig: Configuration?) { ++ override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + super.setBackgroundColor(reactContext.getInputMethodColor()) + } diff --git a/patches/react-native-math-view+3.9.5.patch b/patches/react-native-math-view+3.9.5.patch new file mode 100644 index 00000000000..3b809f692be --- /dev/null +++ b/patches/react-native-math-view+3.9.5.patch @@ -0,0 +1,32 @@ +diff --git a/node_modules/react-native-math-view/android/build.gradle b/node_modules/react-native-math-view/android/build.gradle +index d960a90..ddf56d7 100644 +--- a/node_modules/react-native-math-view/android/build.gradle ++++ b/node_modules/react-native-math-view/android/build.gradle +@@ -31,7 +31,6 @@ repositories { + buildscript { + repositories { + maven { url "https://maven.google.com" } +- jcenter() + google() + maven { + url 'https://maven.google.com/' +@@ -51,7 +50,6 @@ allprojects { + repositories { + mavenLocal() + maven { url "https://maven.google.com" } +- jcenter() + google() + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm +diff --git a/node_modules/react-native-math-view/android/src/main/java/io/autodidact/rnmathview/SVGShadowNode.java b/node_modules/react-native-math-view/android/src/main/java/io/autodidact/rnmathview/SVGShadowNode.java +index e3719e6..76be8a4 100644 +--- a/node_modules/react-native-math-view/android/src/main/java/io/autodidact/rnmathview/SVGShadowNode.java ++++ b/node_modules/react-native-math-view/android/src/main/java/io/autodidact/rnmathview/SVGShadowNode.java +@@ -11,7 +11,6 @@ import com.facebook.react.uimanager.NativeViewHierarchyManager; + import com.facebook.react.uimanager.ReactStylesDiffMap; + import com.facebook.react.uimanager.UIBlock; + import com.facebook.react.uimanager.UIManagerModule; +-import com.facebook.react.uimanager.UIManagerModuleListener; + import com.facebook.react.uimanager.annotations.ReactProp; + import com.facebook.yoga.YogaMeasureFunction; + import com.facebook.yoga.YogaMeasureMode; From 50702636d0764a9efe5aa990583bf5ba10ad9a4e Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 16 Sep 2026 11:09:20 -0300 Subject: [PATCH 12/55] ci: make TypeScript check blocking again --- .github/workflows/eslint.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 198f70d4188..36a6c5ce89e 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -22,7 +22,6 @@ jobs: run: pnpm exec oxlint - name: Run TypeScript - continue-on-error: true run: pnpm exec tsc - name: Run Tests From a12e23b65909b3d83e20b36104d679dd0044fb6b Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 16 Sep 2026 12:08:10 -0300 Subject: [PATCH 13/55] fix: restore default submit behavior on login email field --- app/views/LoginView/UserForm.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/app/views/LoginView/UserForm.tsx b/app/views/LoginView/UserForm.tsx index f979dfc87f2..aab9a7b6a1d 100644 --- a/app/views/LoginView/UserForm.tsx +++ b/app/views/LoginView/UserForm.tsx @@ -111,7 +111,6 @@ const UserForm = () => { placeholder={Accounts_EmailOrUsernamePlaceholder} keyboardType='email-address' returnKeyType='next' - submitBehavior='submit' onSubmitEditing={() => setFocus('password')} testID='login-view-email' textContentType='username' From d0fcbadfed3a84ff4c281cf53d60bbf235a249ff Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 16 Sep 2026 13:38:39 -0300 Subject: [PATCH 14/55] fix: keep test identifiers on iOS accessibility elements --- app/containers/EmojiPicker/index.tsx | 12 +- .../MessageComposer.test.tsx.snap | 510 +++++++++--------- 2 files changed, 273 insertions(+), 249 deletions(-) diff --git a/app/containers/EmojiPicker/index.tsx b/app/containers/EmojiPicker/index.tsx index 52fb60422bf..dd6a875648b 100644 --- a/app/containers/EmojiPicker/index.tsx +++ b/app/containers/EmojiPicker/index.tsx @@ -49,15 +49,9 @@ const EmojiPicker = ({ ); const renderTabItem = (tab: Route, color: string) => ( - + + + ); return ( diff --git a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap index 544ac12a650..3c76e098373 100644 --- a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap +++ b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap @@ -9993,37 +9993,40 @@ exports[`MessageComposer Toolbar tap emoji 1`] = ` } } > - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + - + -  - + {}, + ] + } + > +  + + Date: Wed, 16 Sep 2026 13:47:49 -0300 Subject: [PATCH 15/55] fix: expose test identifiers on accessible elements --- .../components/HeaderButton/HeaderButtonItem.tsx | 1 + app/containers/RoomItem/RoomItem.tsx | 1 + app/containers/RoomItem/Wrapper.tsx | 10 +++++++++- app/containers/RoomItem/interfaces.ts | 1 + app/containers/Touch.tsx | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx b/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx index 7c7c0a3224b..02f0d3f97c3 100644 --- a/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx +++ b/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx @@ -58,6 +58,7 @@ const Item = memo( { +const Wrapper = ({ + accessibilityLabel, + accessibilityHint, + children, + displayMode, + testID, + ...props +}: IWrapperProps): ReactElement => { const { colors } = useTheme(); const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); return ( @@ -16,6 +23,7 @@ const Wrapper = ({ accessibilityLabel, accessibilityHint, children, displayMode, style={[styles.container, { height: displayMode === DisplayMode.Condensed ? rowHeightCondensed : rowHeight }]} accessibilityLabel={accessibilityLabel} accessibilityHint={accessibilityHint} + testID={testID} accessible accessibilityRole='button'> diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index 23016f9df87..f269cdd7219 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -41,6 +41,7 @@ export interface IUpdatedAtProps { export interface IWrapperProps { accessibilityLabel: string; + testID?: string; accessibilityHint?: string; avatar: string; type: string; diff --git a/app/containers/Touch.tsx b/app/containers/Touch.tsx index ce3e0e16a29..4632f2d9dc5 100644 --- a/app/containers/Touch.tsx +++ b/app/containers/Touch.tsx @@ -37,6 +37,7 @@ const Touch = forwardRef( accessibilityHint, accessibilityActions, onAccessibilityAction, + testID, style, rectButtonStyle, disabled, @@ -85,9 +86,11 @@ const Touch = forwardRef( focusable={!disabled} canBeFocused={!disabled} style={[rectButtonStyle, marginStyles, { backgroundColor, borderRadius }]} + testID={testID} {...props} enabled={!disabled}> Date: Wed, 16 Sep 2026 13:56:26 -0300 Subject: [PATCH 16/55] fix: keep a single test identifier per element --- .../__snapshots__/DirectoryItem.test.tsx.snap | 16 +-- .../HeaderButton/HeaderButtonItem.tsx | 2 +- .../NotifierComponent.test.tsx.snap | 8 +- .../MediaCallHeader.test.tsx.snap | 24 ++-- .../Base/__snapshots__/Base.test.tsx.snap | 136 +++++++++--------- app/containers/RoomItem/RoomItem.tsx | 1 - app/containers/RoomItem/Touchable.tsx | 2 - app/containers/RoomItem/interfaces.ts | 1 - .../__snapshots__/ServerItem.test.tsx.snap | 16 +-- .../__snapshots__/TextInput.test.tsx.snap | 2 +- app/containers/Touch.tsx | 1 - .../__snapshots__/UiKitModal.test.tsx.snap | 2 +- .../__snapshots__/Item.test.tsx.snap | 16 +-- .../ServersHistoryItem.test.tsx.snap | 16 +-- .../__snapshots__/Item.test.tsx.snap | 24 ++-- .../ChangePasscodeView.test.tsx.snap | 44 +++--- .../ScreenLockedView.test.tsx.snap | 92 ++++++------ 17 files changed, 199 insertions(+), 204 deletions(-) diff --git a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap index 8f7883c8591..d5761084a08 100644 --- a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap +++ b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap @@ -70,7 +70,6 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` }, ] } - testID="directory-item-style" underlayColor="#E4E7EA" > { const { colors } = useTheme(); return ( - + diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index f269cdd7219..b748aee603a 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -143,7 +143,6 @@ export interface ILastMessageProps { export interface ITouchableProps extends IRoomItemTouchables { children: ReactElement; type: SubscriptionType; - testID: string; width: number; favorite: boolean; isRead: boolean; diff --git a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap index 8c065cdf87f..1a4b92c41a3 100644 --- a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap +++ b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap @@ -58,7 +58,6 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` }, ] } - testID="server-item-https://open.rocket.chat/" underlayColor="#E4E7EA" > ( focusable={!disabled} canBeFocused={!disabled} style={[rectButtonStyle, marginStyles, { backgroundColor, borderRadius }]} - testID={testID} {...props} enabled={!disabled}> Date: Wed, 16 Sep 2026 15:09:32 -0300 Subject: [PATCH 17/55] fix: remove OrSeparator from accessibility focus chain --- .../LoginServices/__snapshots__/LoginServices.test.tsx.snap | 6 ++++-- app/containers/OrSeparator.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/containers/LoginServices/__snapshots__/LoginServices.test.tsx.snap b/app/containers/LoginServices/__snapshots__/LoginServices.test.tsx.snap index da8fdb96eda..76071c20e70 100644 --- a/app/containers/LoginServices/__snapshots__/LoginServices.test.tsx.snap +++ b/app/containers/LoginServices/__snapshots__/LoginServices.test.tsx.snap @@ -76,7 +76,7 @@ exports[`Story Snapshots: Separators should match snapshot 1`] = ` , , { const text = { color: colors.fontSecondaryInfo }; return ( - + - {I18n.t('OR')} + + {I18n.t('OR')} + ); From 6c6e7a2f5e4df7f4e8eb7d4b184f1d22cd34dd21 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 17 Sep 2026 10:14:03 -0300 Subject: [PATCH 18/55] chore(ios): re-enable prebuilt React-Core and Hermes V1 (#7698) Removed the three Podfile opt-outs (RCT_USE_PREBUILT_RNCORE, RCT_USE_RN_DEP, RCT_HERMES_V1_ENABLED) and the HERMES_CLI_PATH post_install override, letting React Native 0.86 use its prebuilt React-Core/ReactNativeDependencies tarball and Hermes V1 (250829098.0.17) instead of building from source. Dropped the RCTViewManager accessibility-role patch: it only touched the Paper renderer, the app runs on Fabric, and the file no longer compiles under prebuilt Core. VoiceOver role-update behavior is covered by manual smoke testing, not this patch. RNFB pods forced to static libraries in the pre_install hook to avoid a non-modular-include failure on RNFB 21.x; the fix ships in react-native-firebase >= 26.3.0, so this can be dropped on that bump. SocketRocket now ships vendored inside the ReactNativeDependencies xcframework under a namespaced header path, so SSLPinning.mm's import changed from a flat "SRWebSocket.h" to . Copy Pods Resources phases regenerated by pod install, dropping the boost/glog/RCT-Folly privacy bundles that no longer exist as separate pods. --- ios/Libraries/SSLPinning.mm | 2 +- ios/Podfile | 15 +- ios/Podfile.lock | 2035 ++++++---------------- ios/RocketChat.xcodeproj/project.pbxproj | 42 +- patches/react-native+0.86.3.patch | 24 - 5 files changed, 576 insertions(+), 1542 deletions(-) delete mode 100644 patches/react-native+0.86.3.patch diff --git a/ios/Libraries/SSLPinning.mm b/ios/Libraries/SSLPinning.mm index 3ff922eecc5..d99bbb79015 100644 --- a/ios/Libraries/SSLPinning.mm +++ b/ios/Libraries/SSLPinning.mm @@ -9,7 +9,7 @@ #import #import "SSLPinning.h" #import "../Shared/RocketChat/MMKVBridge.h" -#import "SRWebSocket.h" +#import #import "EXSessionTaskDispatcher.h" @implementation RCTHTTPRequestHandler (Challenge) diff --git a/ios/Podfile b/ios/Podfile index 028fecd8aba..9ad0df8bc26 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,10 +1,6 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") -ENV['RCT_USE_PREBUILT_RNCORE'] = '0' -ENV['RCT_USE_RN_DEP'] = '0' -ENV['RCT_HERMES_V1_ENABLED'] = '0' - platform :ios, '16.4' install! 'cocoapods', :deterministic_uuids => false @@ -49,7 +45,7 @@ $static_framework = [ pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {} installer.pod_targets.each do |pod| - if $static_framework.include?(pod.name) + if $static_framework.include?(pod.name) || pod.name.start_with?('RNFB') def pod.build_type; Pod::BuildType.static_library # >= 1.9 end @@ -82,15 +78,6 @@ post_install do |installer| end end - if ENV['RCT_HERMES_V1_ENABLED'] == '0' - installer.aggregate_targets.each do |aggregate_target| - aggregate_target.xcconfigs.each do |config_name, xcconfig| - xcconfig.attributes['HERMES_CLI_PATH'] = '$(PODS_ROOT)/hermes-engine/destroot/bin/hermesc' - xcconfig.save_as(aggregate_target.xcconfig_path(config_name)) - end - end - end - bitcode_strip_path = `xcrun --find bitcode_strip`.chop! def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path) framework_path = File.join(Dir.pwd, framework_relative_path) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 72e068a646e..65e167a9dd9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,17 +1,10 @@ PODS: - - boost (1.84.0) - BugsnagReactNative (8.4.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -26,29 +19,22 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - BVLinearGradient (2.8.3): - React-Core - - DoubleConversion (1.1.6) - EXApplication (57.0.3): - ExpoModulesCore - EXConstants (57.0.18): - ExpoModulesCore - Expo (57.0.23): - - boost - - DoubleConversion - ExpoModulesCore - ExpoModulesJSI - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -65,7 +51,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ExpoAppleAuthentication (57.0.2): - ExpoModulesCore @@ -105,18 +91,12 @@ PODS: - ExpoLogBox (57.0.4): - React-Core - ExpoModulesCore (57.0.18): - - boost - - DoubleConversion - ExpoModulesJSI - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -132,7 +112,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - ExpoModulesJSI (57.1.0): - React-Core @@ -157,7 +137,6 @@ PODS: - ExpoModulesCore - ExpoWebBrowser (57.0.3): - ExpoModulesCore - - fast_float (8.0.0) - FBLazyVector (0.86.3) - Firebase/AnalyticsWithoutAdIdSupport (11.11.0): - Firebase/CoreOnly @@ -208,8 +187,6 @@ PODS: - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - PromisesSwift (~> 2.1) - - fmt (12.1.0) - - glog (0.3.5) - GoogleAppMeasurement/WithoutAdIdSupport (11.11.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.0) - GoogleUtilities/MethodSwizzler (~> 8.0) @@ -246,9 +223,9 @@ PODS: - GoogleUtilities/UserDefaults (8.1.0): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - hermes-engine (0.17.0): - - hermes-engine/Pre-built (= 0.17.0) - - hermes-engine/Pre-built (0.17.0) + - hermes-engine (250829098.0.17): + - hermes-engine/Pre-built (= 250829098.0.17) + - hermes-engine/Pre-built (250829098.0.17) - JitsiWebRTC (124.0.2) - libavif/core (1.0.0) - libavif/libdav1d (1.0.0): @@ -271,17 +248,11 @@ PODS: - MMKVCore (~> 2.4.0) - MMKVCore (2.4.0) - MobileCrypto (0.4.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -296,7 +267,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) @@ -304,20 +275,14 @@ PODS: - nanopb/decode (3.30910.0) - nanopb/encode (3.30910.0) - NitroMmkv (4.3.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - MMKVCore (= 2.4.0) - NitroModules - - RCT-Folly - - RCT-Folly/Fabric - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -332,21 +297,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - NitroModules (0.37.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-callinvoker - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -361,30 +320,11 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - PromisesObjC (2.4.0) - PromisesSwift (2.4.0): - PromisesObjC (= 2.4.0) - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 12.1.0) - - glog - RCTDeprecation (0.86.3) - RCTRequired (0.86.3) - RCTSwiftUI (0.86.3) @@ -409,15 +349,9 @@ PODS: - React-RCTVibration (= 0.86.3) - React-callinvoker (0.86.3) - React-Core (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.86.3) - React-cxxreact - React-featureflags @@ -431,18 +365,14 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga + - React-Core-prebuilt (0.86.3): + - ReactNativeDependencies - React-Core/CoreModulesHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -456,18 +386,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/Default (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-cxxreact - React-featureflags - React-hermes @@ -480,18 +404,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/DevSupport (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.86.3) - React-Core/RCTWebSocket (= 0.86.3) - React-cxxreact @@ -506,18 +424,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTActionSheetHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -531,18 +443,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTAnimationHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -556,18 +462,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTBlobHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -581,18 +481,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTImageHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -606,18 +500,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTLinkingHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -631,18 +519,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTNetworkHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -656,18 +538,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTSettingsHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -681,18 +557,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTTextHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -706,18 +576,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTVibrationHeaders (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default - React-cxxreact - React-featureflags @@ -731,18 +595,12 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-Core/RCTWebSocket (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTDeprecation + - React-Core-prebuilt - React-Core/Default (= 0.86.3) - React-cxxreact - React-featureflags @@ -756,17 +614,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-CoreModules (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety (= 0.86.3) + - React-Core-prebuilt - React-Core/CoreModulesHeaders (= 0.86.3) - React-debug - React-featureflags @@ -781,17 +633,11 @@ PODS: - React-runtimeexecutor - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-cxxreact (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 0.86.3) + - React-Core-prebuilt - React-debug (= 0.86.3) - React-jsi (= 0.86.3) - React-jsinspector @@ -802,19 +648,13 @@ PODS: - React-runtimeexecutor - React-timing (= 0.86.3) - React-utils - - SocketRocket + - ReactNativeDependencies - React-debug (0.86.3): - React-debug/redbox (= 0.86.3) - React-debug/redbox (0.86.3) - React-defaultsnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-domnativemodule - React-Fabric/animated - React-featureflags @@ -828,17 +668,11 @@ PODS: - React-RCTFBReactNativeSpec - React-viewtransitionnativemodule - React-webperformancenativemodule - - SocketRocket + - ReactNativeDependencies - Yoga - React-domnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-Fabric - React-Fabric/bridging - React-FabricComponents @@ -848,20 +682,14 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/animated (= 0.86.3) @@ -893,19 +721,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/animated (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/animationbackend @@ -919,19 +741,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/animationbackend (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -944,19 +760,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/animations (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -969,19 +779,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/attributedstring (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -994,19 +798,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/bridging (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1019,19 +817,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistry (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1044,19 +836,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/componentregistrynative (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1069,19 +855,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/components/legacyviewmanagerinterop (= 0.86.3) @@ -1098,19 +878,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/legacyviewmanagerinterop (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1123,19 +897,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/root (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1148,19 +916,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/scrollview (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1173,19 +935,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/components/view (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1199,20 +955,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-Fabric/consistency (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1225,19 +975,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/core (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1250,19 +994,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/dom (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1275,19 +1013,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/imagemanager (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1300,19 +1032,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/leakchecker (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1325,19 +1051,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/mounting (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1351,19 +1071,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/observers/events (= 0.86.3) @@ -1379,19 +1093,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers/events (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1404,19 +1112,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers/intersection (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1429,19 +1131,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/observers/mutation (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1454,19 +1150,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/scheduler (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/animationbackend @@ -1484,19 +1174,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/telemetry (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1509,19 +1193,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric/uimanager/consistency (= 0.86.3) @@ -1536,19 +1214,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/uimanager/consistency (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1562,19 +1234,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-Fabric/viewtransition (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -1587,19 +1253,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-FabricComponents (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1615,20 +1275,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1653,20 +1307,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/inputaccessory (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1680,20 +1328,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/iostextinput (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1707,20 +1349,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/modal (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1734,20 +1370,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/rncore (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1761,20 +1391,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/safeareaview (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1788,20 +1412,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/scrollview (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1815,20 +1433,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/switch (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1842,20 +1454,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/text (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1869,20 +1475,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/textinput (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1896,20 +1496,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/unimplementedview (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1923,20 +1517,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/components/virtualview (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1950,20 +1538,14 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricComponents/textlayoutmanager (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-Fabric @@ -1977,19 +1559,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-FabricImage (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired (= 0.86.3) - RCTTypeSafety (= 0.86.3) + - React-Core-prebuilt - React-Fabric - React-featureflags - React-graphics @@ -2000,56 +1576,32 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-featureflags (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-featureflagsnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-graphics (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsiexecutor - React-rendererdebug - React-utils - - SocketRocket + - ReactNativeDependencies - React-hermes (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact (= 0.86.3) - React-jsi - React-jsiexecutor (= 0.86.3) @@ -2060,47 +1612,29 @@ PODS: - React-oscompat - React-perflogger (= 0.86.3) - React-runtimeexecutor - - SocketRocket + - ReactNativeDependencies - React-idlecallbacksnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-ImageManager (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/Default - React-debug - React-Fabric - React-graphics - React-rendererdebug - React-utils - - SocketRocket + - ReactNativeDependencies - React-intersectionobservernativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-Fabric/bridging @@ -2111,42 +1645,24 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-jserrorhandler (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags - React-jsi - ReactCommon/turbomodule/bridging - - SocketRocket + - ReactNativeDependencies - React-jsi (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - hermes-engine + - React-Core-prebuilt + - ReactNativeDependencies - React-jsiexecutor (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-debug - React-jserrorhandler @@ -2158,16 +1674,10 @@ PODS: - React-perflogger - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-jsinspector (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-jsi - React-jsinspectorcdp @@ -2177,50 +1687,26 @@ PODS: - React-perflogger (= 0.86.3) - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-jsinspectorcdp (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-jsinspectornetwork (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsinspectorcdp - - SocketRocket + - ReactNativeDependencies - React-jsinspectortracing (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsinspectornetwork - React-oscompat - React-timing - React-utils - - SocketRocket + - ReactNativeDependencies - React-jsitooling (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact (= 0.86.3) - React-debug - React-jsi (= 0.86.3) @@ -2229,51 +1715,27 @@ PODS: - React-jsinspectortracing - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-jsitracing (0.86.3): - React-jsi - React-logger (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-Mapbuffer (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - - SocketRocket + - ReactNativeDependencies - React-microtasksnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-mutationobservernativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-Fabric/bridging @@ -2284,20 +1746,14 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-a11y-order (0.4.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2312,20 +1768,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-cameraroll (7.10.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2340,22 +1790,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-cookies (6.2.1): - React-Core - react-native-external-keyboard (0.9.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2370,20 +1814,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-keyboard-controller (1.18.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2399,20 +1837,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-keyboard-controller/common (1.18.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2427,20 +1859,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-netinfo (12.0.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2455,20 +1881,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context (5.7.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2485,20 +1905,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/common (5.7.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2513,20 +1927,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-safe-area-context/fabric (5.7.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2542,20 +1950,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-slider (5.2.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2571,20 +1973,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-slider/common (5.2.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2599,23 +1995,17 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - react-native-webrtc (124.0.7): - JitsiWebRTC (~> 124.0.0) - React-Core - react-native-webview (13.16.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2630,19 +2020,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-NativeModulesApple (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker - React-Core + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -2652,69 +2036,39 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - React-networking (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsinspectornetwork - React-jsinspectortracing - React-performancetimeline - React-timing - - SocketRocket + - ReactNativeDependencies - React-oscompat (0.86.3) - React-perflogger (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket + - React-Core-prebuilt + - ReactNativeDependencies - React-performancecdpmetrics (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-jsi - React-performancetimeline - React-runtimeexecutor - React-timing - - SocketRocket + - ReactNativeDependencies - React-performancetimeline (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-featureflags - React-jsinspector - React-jsinspectortracing - React-perflogger - React-timing - - SocketRocket + - ReactNativeDependencies - React-RCTActionSheet (0.86.3): - React-Core/RCTActionSheetHeaders (= 0.86.3) - React-RCTAnimation (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTAnimationHeaders - React-debug - React-featureflags @@ -2722,19 +2076,13 @@ PODS: - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTAppDelegate (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-CoreModules - React-debug - React-defaultsnativemodule @@ -2756,16 +2104,10 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTBlob (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -2775,18 +2117,12 @@ PODS: - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFabric (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTSwiftUIWrapper - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -2811,37 +2147,25 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTFBReactNativeSpec (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec/components (= 0.86.3) - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTFBReactNativeSpec/components (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -2851,24 +2175,18 @@ PODS: - React-rendererdebug - React-utils - ReactCommon - - SocketRocket + - ReactNativeDependencies - Yoga - React-RCTImage (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - React-RCTNetwork - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTLinking (0.86.3): - React-Core/RCTLinkingHeaders (= 0.86.3) - React-jsi (= 0.86.3) @@ -2877,14 +2195,8 @@ PODS: - ReactCommon - ReactCommon/turbomodule/core (= 0.86.3) - React-RCTNetwork (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTNetworkHeaders - React-debug - React-featureflags @@ -2895,17 +2207,11 @@ PODS: - React-networking - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTRuntime (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-Core + - React-Core-prebuilt - React-debug - React-jsi - React-jsinspector @@ -2917,63 +2223,39 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - React-utils - - SocketRocket + - ReactNativeDependencies - React-RCTSettings (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - RCTTypeSafety + - React-Core-prebuilt - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-RCTText (0.86.3): - React-Core/RCTTextHeaders (= 0.86.3) - Yoga - React-RCTVibration (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - SocketRocket + - ReactNativeDependencies - React-rendererconsistency (0.86.3) - React-renderercss (0.86.3): - React-debug - React-utils - React-rendererdebug (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - - SocketRocket + - ReactNativeDependencies - React-RuntimeApple (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker + - React-Core-prebuilt - React-Core/Default - React-CoreModules - React-cxxreact @@ -2992,16 +2274,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-RuntimeCore (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-Fabric - React-featureflags @@ -3014,29 +2290,17 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimeexecutor (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - React-debug - React-featureflags - React-jsi (= 0.86.3) - React-utils - - SocketRocket + - ReactNativeDependencies - React-RuntimeHermes (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-featureflags - React-hermes - React-jsi @@ -3048,17 +2312,11 @@ PODS: - React-RuntimeCore - React-runtimeexecutor - React-utils - - SocketRocket + - ReactNativeDependencies - React-runtimescheduler (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker + - React-Core-prebuilt - React-cxxreact - React-debug - React-featureflags @@ -3070,30 +2328,18 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - SocketRocket + - ReactNativeDependencies - React-timing (0.86.3): - React-debug - React-utils (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-debug - React-jsi (= 0.86.3) - - SocketRocket + - ReactNativeDependencies - React-viewtransitionnativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-Fabric - React-Fabric/bridging - React-jsi @@ -3101,17 +2347,11 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - React-webperformancenativemodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine + - React-Core-prebuilt - React-cxxreact - React-jsi - React-jsiexecutor @@ -3119,21 +2359,15 @@ PODS: - React-RCTFBReactNativeSpec - React-runtimeexecutor - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - ReactAppDependencyProvider (0.86.3): - ReactCodegen - ReactCodegen (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricImage @@ -3147,59 +2381,35 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - ReactCommon (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric + - React-Core-prebuilt - ReactCommon/turbomodule (= 0.86.3) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 0.86.3) + - React-Core-prebuilt - React-cxxreact (= 0.86.3) - React-jsi (= 0.86.3) - React-logger (= 0.86.3) - React-perflogger (= 0.86.3) - ReactCommon/turbomodule/bridging (= 0.86.3) - ReactCommon/turbomodule/core (= 0.86.3) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/bridging (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 0.86.3) + - React-Core-prebuilt - React-cxxreact (= 0.86.3) - React-jsi (= 0.86.3) - React-logger (= 0.86.3) - React-perflogger (= 0.86.3) - - SocketRocket + - ReactNativeDependencies - ReactCommon/turbomodule/core (0.86.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - React-callinvoker (= 0.86.3) + - React-Core-prebuilt - React-cxxreact (= 0.86.3) - React-debug (= 0.86.3) - React-featureflags (= 0.86.3) @@ -3207,21 +2417,16 @@ PODS: - React-logger (= 0.86.3) - React-perflogger (= 0.86.3) - React-utils (= 0.86.3) - - SocketRocket + - ReactNativeDependencies + - ReactNativeDependencies (0.86.3) - ReactNativeIncallManager (4.2.1): - React-Core - RNBootSplash (6.3.11): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3236,22 +2441,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNCallKeep (4.3.16): - React - RNCAsyncStorage (2.2.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3266,20 +2465,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNCClipboard (1.16.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3294,20 +2487,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNCMaskedView (0.3.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3322,20 +2509,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNCPicker (2.11.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3350,20 +2531,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNDateTimePicker (9.1.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3378,7 +2553,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNDeviceInfo (11.1.0): - React-Core @@ -3395,17 +2570,11 @@ PODS: - React-Core - RNFBApp - RNGestureHandler (2.32.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-FabricComponents @@ -3421,20 +2590,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNImageCropPicker (0.51.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3450,22 +2613,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNImageCropPicker/QBImagePickerController (= 0.51.1) - - SocketRocket - TOCropViewController (~> 2.8.0) - Yoga - RNImageCropPicker/QBImagePickerController (0.51.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3481,21 +2638,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - TOCropViewController (~> 2.8.0) - Yoga - RNKeychain (10.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3510,20 +2661,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNLocalize (3.7.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3538,20 +2683,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNReanimated (4.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3567,24 +2706,18 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNReanimated/apple (= 4.5.1) - RNReanimated/common (= 4.5.1) - RNReanimated/view (= 4.5.1) - RNWorklets - - SocketRocket - Yoga - RNReanimated/apple (4.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3600,21 +2733,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - RNReanimated/common (4.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3630,21 +2757,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - RNReanimated/view (4.5.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3660,21 +2781,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets - - SocketRocket - Yoga - RNScreens (4.26.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3690,21 +2805,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNScreens/common (= 4.26.2) - - SocketRocket - Yoga - RNScreens/common (4.26.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3720,20 +2829,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNSVG (15.15.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3748,21 +2851,15 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNSVG/common (= 15.15.4) - - SocketRocket - Yoga - RNSVG/common (15.15.4): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3777,20 +2874,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNTrueSheet (3.7.3): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3805,20 +2896,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNWorklets (0.10.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3834,22 +2919,16 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNWorklets/apple (= 0.10.1) - RNWorklets/common (= 0.10.1) - - SocketRocket - Yoga - RNWorklets/apple (0.10.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3865,20 +2944,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - RNWorklets/common (0.10.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric + - hermes-engine - RCTRequired - RCTTypeSafety - React-Core + - React-Core-prebuilt - React-debug - React-Fabric - React-featureflags @@ -3894,7 +2967,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - SocketRocket + - ReactNativeDependencies - Yoga - SDWebImage (5.21.7): - SDWebImage/Core (= 5.21.7) @@ -3908,7 +2981,6 @@ PODS: - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - simdjson (3.9.4) - - SocketRocket (0.7.1) - TOCropViewController (2.8.0) - WatermelonDB (0.28.1-0): - React @@ -3921,10 +2993,8 @@ PODS: - ZXingObjC/Core DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)" - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - EXApplication (from `../node_modules/expo-application/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - Expo (from `../node_modules/expo`) @@ -3953,17 +3023,13 @@ DEPENDENCIES: - ExpoVideo (from `../node_modules/expo-video/ios`) - ExpoVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`) - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - MMKV - MMKVCore - "MobileCrypto (from `../node_modules/@rocket.chat/mobile-crypto`)" - NitroMmkv (from `../node_modules/react-native-mmkv`) - NitroModules (from `../node_modules/react-native-nitro-modules`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - RCTSwiftUI (from `../node_modules/react-native/ReactApple/RCTSwiftUI`) @@ -3972,6 +3038,7 @@ DEPENDENCIES: - React (from `../node_modules/react-native/`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-Core (from `../node_modules/react-native/`) + - React-Core-prebuilt (from `../node_modules/react-native/React-Core-prebuilt.podspec`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) @@ -4045,6 +3112,7 @@ DEPENDENCIES: - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) - ReactCodegen (from `build/generated/ios/ReactCodegen`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - ReactNativeIncallManager (from `../node_modules/react-native-incall-manager`) - RNBootSplash (from `../node_modules/react-native-bootsplash`) - RNCallKeep (from `../node_modules/react-native-callkeep`) @@ -4067,7 +3135,6 @@ DEPENDENCIES: - "RNTrueSheet (from `../node_modules/@lodev09/react-native-true-sheet`)" - RNWorklets (from `../node_modules/react-native-worklets`) - "simdjson (from `../node_modules/@nozbe/simdjson`)" - - SocketRocket (~> 0.7.1) - "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -4098,19 +3165,14 @@ SPEC REPOS: - SDWebImageAVIFCoder - SDWebImageSVGCoder - SDWebImageWebPCoder - - SocketRocket - TOCropViewController - ZXingObjC EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" BugsnagReactNative: :path: "../node_modules/@bugsnag/react-native" BVLinearGradient: :path: "../node_modules/react-native-linear-gradient" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXApplication: :path: "../node_modules/expo-application/ios" EXConstants: @@ -4167,25 +3229,17 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-video-thumbnails/ios" ExpoWebBrowser: :path: "../node_modules/expo-web-browser/ios" - fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-v0.17.0 + :tag: hermes-v250829098.0.17 MobileCrypto: :path: "../node_modules/@rocket.chat/mobile-crypto" NitroMmkv: :path: "../node_modules/react-native-mmkv" NitroModules: :path: "../node_modules/react-native-nitro-modules" - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -4202,6 +3256,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/callinvoker" React-Core: :path: "../node_modules/react-native/" + React-Core-prebuilt: + :podspec: "../node_modules/react-native/React-Core-prebuilt.podspec" React-CoreModules: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: @@ -4346,6 +3402,8 @@ EXTERNAL SOURCES: :path: build/generated/ios/ReactCodegen ReactCommon: :path: "../node_modules/react-native/ReactCommon" + ReactNativeDependencies: + :podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" ReactNativeIncallManager: :path: "../node_modules/react-native-incall-manager" RNBootSplash: @@ -4396,13 +3454,11 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - BugsnagReactNative: 2078dec76e54db9f6e687743af45dc3673cb32ab + BugsnagReactNative: 33c924422b4d4fac76459ac818500586dd53debf BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXApplication: a727f05eb8592f0bc764f6ab8d51eacc158652ec EXConstants: 8948a340eb14bf2bdaaa0e21a63cb9343860b87a - Expo: 5958a8d1e01ac4630df9d05171059b291828a93b + Expo: dfda0a34acc90766241acc0ba214badf45330567 ExpoAppleAuthentication: 16c2955d33ec7315e5a99d17fb5d62ed33cdb5b9 ExpoAsset: b3999ffb3d4049b6c870708c60ea2209ace9f170 ExpoAudio: edc9230b788be6f65238a53907d5c176b57a7ce0 @@ -4418,7 +3474,7 @@ SPEC CHECKSUMS: ExpoKeepAwake: 72af0b3be3615e59bc819d26061ff4e06b155ee0 ExpoLocalAuthentication: 1e4aef156a3a1f953f8278b8d8309f6118919640 ExpoLogBox: 80957303325cd4439137765c90a87d7f22aaf2ff - ExpoModulesCore: cfff5545e4ce059bbfba80e56bd1771d9a620ed1 + ExpoModulesCore: a220d034f6873d06db8ee66af1b33fca51c65318 ExpoModulesJSI: 21c947f0cc559401c86995dad7a0b1112c7fd656 ExpoModulesWorklets: 986cf72c18400743869b4642d243115f831e404d ExpoModulesWorkletsAdapter: ae4dd675418c2bbdf802ae74f7f78442e7010ab7 @@ -4428,8 +3484,7 @@ SPEC CHECKSUMS: ExpoVideo: 56ed2863b981dd5ae946d8ef23ecfcae855863a0 ExpoVideoThumbnails: da5d471c170bf4110f681b6649524eace9c95b5b ExpoWebBrowser: a4d7c382116fbe33c1ec7f60293f02b7e97042e4 - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 94a9e5b949d0f65bbc1a741f8a7c72499da32567 + FBLazyVector: 2138c6c2ab66c31bf5754dc18097fbc498a49c7f Firebase: 6a8f201c61eda24e98f1ce2b44b1b9c2caf525cc FirebaseAnalytics: acfa848bf81e1a4dbf60ef1f0eddd7328fe6673e FirebaseCore: 2321536f9c423b1f857e047a82b8a42abc6d9e2c @@ -4439,137 +3494,135 @@ SPEC CHECKSUMS: FirebaseInstallations: 781e0e37aa0e1c92b44d00e739aba79ad31b2dba FirebaseRemoteConfigInterop: 1c6135e8a094cc6368949f5faeeca7ee8948b8aa FirebaseSessions: f5c6bfeb66a7202deaf33352017bb6365e395820 - fmt: 530618a01105dae0fa3a2f27c81ae11fa8f67eac - glog: 9c7bd858f1402a8e680d1637276210773c093b76 GoogleAppMeasurement: 8a82b93a6400c8e6551c0bcd66a9177f2e067aed GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - hermes-engine: 517aaf93c2fbacc66266024672ddb34b20ed8679 + hermes-engine: 63c5db7d529c36335fada6582fd293ae2a105d77 JitsiWebRTC: b47805ab5668be38e7ee60e2258f49badfe8e1d0 libavif: 5f8e715bea24debec477006f21ef9e95432e254d libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 MMKV: 86859fdfa2b0b21db1fd6e48788474a6416a2c77 MMKVCore: 3d16ce9f7d411e135020915fde98a056859a1efa - MobileCrypto: cbe4be11a33b5888e77861de9346fa5d3fccc8ac + MobileCrypto: 182433a43bce9ff7ac5b0a46ca09e907b5194e92 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - NitroMmkv: 5d6c3a5cca0e47be9a4dd3f66262dbad0799c087 - NitroModules: f2a165630c12aed5793d6b42b9002c6a649ea04e + NitroMmkv: 38b271a19e7e152025a6893160c98326872ea05f + NitroModules: 6232dc95a28a7a221227e618733ce0e674e8753b PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - RCT-Folly: 36c4f904fb6cd0219dcb76b94e9502d2a72fab0b - RCTDeprecation: 5268fe9d45036e52deb765d242297f1011e17333 - RCTRequired: 4ecfd325edd95cbbdc202163fb9cb2ba54ac3c9f - RCTSwiftUI: e8b9cdb0d9fbea9284db6420bb726206819a9287 - RCTSwiftUIWrapper: 823739174d403f0fc8fca2baa5c485b8121c00c4 - RCTTypeSafety: 40a9400b253020417515028803a696b35ab8042c + RCTDeprecation: 96f68ebf33f8762466b01d57d6e873c4f30efb07 + RCTRequired: 166eed8ad6d8440e73e56d09a9090366609823d2 + RCTSwiftUI: e818198d11928a78c2b2afe281d072171dab617f + RCTSwiftUIWrapper: b9457f8613a1d0c8146c08844a04154702ff8809 + RCTTypeSafety: efc19e6b92931abf0b68b064212323a258a5f019 React: 52dce66f71097ed7a4968673d95eeb8095ded74e - React-callinvoker: fba8c8c6078156889ed4e6070ed46265345462b5 - React-Core: fb34f5a9df5c1743c550912b96f9c4f3a3ef69d8 - React-CoreModules: 0e196522b5b3e181a2e7b1e4f33f8b801ac23fd4 - React-cxxreact: 11942a287481cd18c11d9bd2c64d3b1b2b2626c2 - React-debug: 6fee06a4b91395b4dbcb20c628974edae868eb43 - React-defaultsnativemodule: 782f1b8c794bbc960cdce4b483db78d9e251cff2 - React-domnativemodule: 01e99c6243cb87447e7627399a891b41727178da - React-Fabric: 31abac546ae65a4a6b7b283df4496ff393545c86 - React-FabricComponents: 7d474b9b833c18fd349943bcf7b1c54cb9aed728 - React-FabricImage: 53aefdba02f5c6ca953cd7bab04a0d3cf8625c15 - React-featureflags: 7284e11613282ec1703cf697bf13b2744d3bf8b5 - React-featureflagsnativemodule: 40b3e8baff8d43413f89561d4987b73afcc97c2f - React-graphics: a252e749294e52fa60c2711b795f5aa7649d58b8 - React-hermes: df503e8bd7483322f10dfefe27c68f9290befbd5 - React-idlecallbacksnativemodule: e5ba08ad15e7dbbbad2d3bf7fc23bc051cfe6610 - React-ImageManager: a08e8bccc9f6ea6e43bbcb9ce324094eed9f5cb7 - React-intersectionobservernativemodule: 850839034c43eb7e7f15faab8e1fff2cd5a478f4 - React-jserrorhandler: 0b250992c1a8181a90e925834444fabbc7a21fb5 - React-jsi: 26b4997a1a030b14434e1a3b3ca28a593388a649 - React-jsiexecutor: 337306ff602647d6ad7017ee988286b69d51d513 - React-jsinspector: 70354072327bb21c23613eab53ab14381787d78f - React-jsinspectorcdp: b53e6d2c40036b4456d212e2b3f48112b2144c4e - React-jsinspectornetwork: 6f5479e9b485065597d2a00827180e35ef153c2f - React-jsinspectortracing: 8d37007dfcbd35bdae4c5feebb98aa87cec4cde1 - React-jsitooling: 6b2bc363c1eb762c303849787bdcf0cd7148da3a - React-jsitracing: db3ab1e47adee8b8a56ced09074a1cbdffd48609 - React-logger: 49084e2c68c541d938502793e71aeb3707407d5f - React-Mapbuffer: e1ff6f5e203a9e7508d74f83d82052ece710bc8a - React-microtasksnativemodule: 8f4fec3bfe2f2b2d5cf216106caac2349fc261c8 - React-mutationobservernativemodule: a44d1a1fe65bf7ec9f30036a66db8d8f0412c1ee - react-native-a11y-order: 20b33ff538af60d8b8a7f7284115a7febc9034d4 - react-native-cameraroll: ae31ba7ee17d31c5ee05d7bb248742e3af482783 + React-callinvoker: afa0525ab27f4ffbb4c377f855fe9368edb099bc + React-Core: fdb67992e049f2526ade3e258c21b8404e7943a3 + React-Core-prebuilt: 9abc518a8aa7aa4fa3bbbe52bc825bcd9fb3c3ce + React-CoreModules: 456d91152aa283ddc6ae8abfcec3292af88912f6 + React-cxxreact: 73a20c0dde5ec221f98d5e4da0e71349ab48353d + React-debug: 4a1d2ef3086d88dd35f28cfb5da803584f819924 + React-defaultsnativemodule: 65c2620e6e8b3426fe227fa546425395fad38b9d + React-domnativemodule: 9fa0a7b5ed12355add4e56b6c44c18afd4a7b409 + React-Fabric: 9f83fc6b78f3717dc7c0d98ecbee5e18f1849c6a + React-FabricComponents: eacd7040d74c3c8f0f400a0f53870a24dc1c70b0 + React-FabricImage: 3e6ccf1e63427426334e239699d1989c289fe8e8 + React-featureflags: 0856ddd67965e449ad24d27b8d9b166b9904523f + React-featureflagsnativemodule: 9fd134748e9befe3766bce575570dbf6666bad1a + React-graphics: 37e133f18290451de3c05306d21c2964053b651e + React-hermes: 65cfbf62d8d31c1e69f3556ff6836a2890cf4a62 + React-idlecallbacksnativemodule: 5a6dd45a2fa8ae6373ed5dd9547e98d15a8ba61c + React-ImageManager: 9f554c1e6340161c22d6c01291d0b773167a6c36 + React-intersectionobservernativemodule: 8882f818e84fe44d8246f9e25f4a6621e7cd2d08 + React-jserrorhandler: 8c8db1ad69aed9556c4f2083c82c902901b0171e + React-jsi: 69052b2d1958c9069a143f1637f382b933917b43 + React-jsiexecutor: b9b98ea432f58ee2899a60204f090d0bc8d48313 + React-jsinspector: 5b1972a5cea8b6dd8170f88f532493a333c8d74b + React-jsinspectorcdp: ab3fcfaa5c149f8fc5d5e8274eb9bfcecf4e5cc3 + React-jsinspectornetwork: c533e6e6bdc6a7d3477a3e46886707cc6b9bd715 + React-jsinspectortracing: 0775adf8a09823fce36b21f95a3caad06c4fa168 + React-jsitooling: c9c3e7cea49b264bf1f89f998673310bc37908a2 + React-jsitracing: 6293ec5716e46c568aaf4ffe766f4c5c5e1d69e7 + React-logger: b9bf04943233973fece220497f0784eaad409b3a + React-Mapbuffer: e05fcc335c004b3b2a45889244c5c27bbbfad64c + React-microtasksnativemodule: 27f8495905481c29ac6acd0e37313b3fbfb17cf0 + React-mutationobservernativemodule: 012f3688a7e96d459e5d787264724875939f6f43 + react-native-a11y-order: c1727d69dda91472e3479e2fdea0832fa8d426ae + react-native-cameraroll: d7e55dae97acb52c4ce88a32deb02841fa15de12 react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 - react-native-external-keyboard: db51d3a78d68c1f87fef41c67353a7c0ddbe51dd - react-native-keyboard-controller: c4ca61f44d66c2f8987a7e67e9b78e80dc965c45 - react-native-netinfo: 9fad4eedfec9840a10e73ac4591ea1158523309b - react-native-safe-area-context: eda63a662750758c1fdd7e719c9f1026c8d161cb - react-native-slider: 205c30f4f19af8469c1c24bd4e3ec74038576a67 + react-native-external-keyboard: f89ea61eb77875621a1ad086769d829da8ae3fcd + react-native-keyboard-controller: c5ba8bf515b500ecb3692bc5ecc944c6be4b3290 + react-native-netinfo: a05f9b897e76ad24b53f615fed1cbb731932363d + react-native-safe-area-context: ba7283e541a5f57c6b27a7e33f2c40b8977888c0 + react-native-slider: b15258ac3d287a5951f76b11497d659ed20c0def react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74 - react-native-webview: 83c663c5bdf1357d3e7c00986260cb888ea0e328 - React-NativeModulesApple: 750a5d07f72a9224863f7d7c30519f71aa88576e - React-networking: dc4795b8113f6029877be8abdf555cedb60d8f3c - React-oscompat: 3d37f8d54a39a05a54be863c235b939cb4108385 - React-perflogger: 5aa7c01773e8dca7c2e72b1eb42ebddb7ca83413 - React-performancecdpmetrics: c18cb2f28b3a4220c90f3b6ee5bcf375c52544be - React-performancetimeline: a9a81c04f7d4c2df48ce5e1a1c2bbfbf2e292579 - React-RCTActionSheet: 57e248e5a72bb65bb26e7afb5370ba3d411c003a - React-RCTAnimation: d7501cac9938345a51acb245ed6e911016c9414a - React-RCTAppDelegate: fd219555b51b039b0dbf58a910f0adb00eb6df8d - React-RCTBlob: 647dcdd01449e7d0f39c3a5d3862328ed4dfca83 - React-RCTFabric: 7b1c18df82a2bf7f355ad61264956b42abfcdfca - React-RCTFBReactNativeSpec: 289308a9b9c633e0250a7a7f82d403b60b9dac78 - React-RCTImage: 5880615f3360564cb78872c838ab435e013659ae - React-RCTLinking: ea77766ce56904248222754f0a5960bc6b173cbf - React-RCTNetwork: d2cf10109367dcbcadeeb36b01eeab729708ce94 - React-RCTRuntime: d566a4abd49a8e6eaf383d09c75bdb1dc1505a28 - React-RCTSettings: 058999035f72625afb32c6c32bd34074a33190f8 - React-RCTText: a09cad9bebd88d5088ef47e1dfb38fe4cf114591 - React-RCTVibration: da609d61ad6cef32ddfea86d116fd69c34fdbf34 - React-rendererconsistency: d7d521e7ac66970d051f25575c23a55355e4526d - React-renderercss: 3105f8eed9fd35b4035c61949193d1553741743a - React-rendererdebug: 119235eaa62ac4cc21e4d87cbc6f9ff8d7bdff51 - React-RuntimeApple: b58c06ee048b953b0fab67fd474d3f92fe47c403 - React-RuntimeCore: 463614d0376292c66e85f874db0dabbb8e0822e3 - React-runtimeexecutor: 3d63baa8fb9b5afd94ec56e7da49f0b49ef9de1b - React-RuntimeHermes: 3cefc114d68f49441e661b767b38730d7eb466ef - React-runtimescheduler: 0a4593b56ddab4a38ec431b2ad7d36ccb99b018d - React-timing: d0983fe4b4dd63fc660e9a9e220536747a4ba5e1 - React-utils: ca695510a0b98277cfae1a5e94274dd8fc01c877 - React-viewtransitionnativemodule: d2652188ed10f6dfbc05751607467dc53062e7ad - React-webperformancenativemodule: e59f5087f046a00242b60a8be0f471a353044f40 + react-native-webview: 2a4da2e03d3ec2c731c4d1a389cb86aaa4902167 + React-NativeModulesApple: 2b658272ca69df0694cf5d54f9510aa7c33977bc + React-networking: 8ff98fbf96752706ec66ccc1d0089c1005a5be11 + React-oscompat: cea7c66df8076bd97e95885d7f584b86afffde41 + React-perflogger: 9110ba33a4aa70c708e9d50aeca040e6f2aefaf7 + React-performancecdpmetrics: 6c158ff2e7a8ecf9a4618350b93b86e83d4f3b59 + React-performancetimeline: a6c41ea140789bbeacb60a123ae34cf18abd7b9d + React-RCTActionSheet: aeb20277150454e9020517c6a2cb70410d4856d9 + React-RCTAnimation: 8453deeb01d0f284202c9670b5f7d827575b4967 + React-RCTAppDelegate: 5e9c748cc138decd9045683d8987700d824a99ff + React-RCTBlob: e6c01cae3eeb7e63a55b12f72b7dfcfd8236b4b2 + React-RCTFabric: a641da4b62d3eab2479dfc057190740bb83a5989 + React-RCTFBReactNativeSpec: 7a20b043840a40f790e47c2fc79f28f54dd8eae1 + React-RCTImage: ec8488bc119d7e5d3209f85be3ebda7e4a937c61 + React-RCTLinking: b6ff56c2f206127d49d338262418c097ea306ad0 + React-RCTNetwork: 08d71b365278511a9bb07885b4a54bdc510d99bf + React-RCTRuntime: 9b306501174b368a4ded95bc86934bffe54e1bf5 + React-RCTSettings: 372551bc9f30d26890f5c5fd569dcd15243c656c + React-RCTText: 62cff7e93aeb3c06e3634f1c59984e8c5322b542 + React-RCTVibration: 2e8c1630ae80c092f437db9638a03715f616ac03 + React-rendererconsistency: 86b56864046a6622bcbf829db78e3dcbb15462b1 + React-renderercss: a1457503aef12d882e530a9fefc9f475fc46443c + React-rendererdebug: 4ccd491bef79e3bfa6b9ac3424ebec5c1e8c795e + React-RuntimeApple: f3e01025b46b99e089b1170b81d428bdc1d4260a + React-RuntimeCore: 7db4a36cccb24f8374ccfb887c46577c11955625 + React-runtimeexecutor: 6e11e5addf6d1d1dcff16359a298c0726f0c4f31 + React-RuntimeHermes: c124599239ce984c1bafabbce975c9c5595ead53 + React-runtimescheduler: bdcc80a052783ccbf9dd6aade14072618599736e + React-timing: 9b5e7d1b657745cd88398d04b8c042debc22ac82 + React-utils: 8c00679add05bd780264773f7582582b4e9db95d + React-viewtransitionnativemodule: e89719ba504600d18f59eec5a104ffb3cac7cb80 + React-webperformancenativemodule: f94d244822b5413c8ce3fb542e41976e7a202e50 ReactAppDependencyProvider: bb350d1333fd459c1aabe782088419a9b8894d3a - ReactCodegen: ead138c976dd9fc1ca8a79a297d4ccf96182531f - ReactCommon: 322cf4b51be09a3cbf5ae891c8dd9f52091c4011 + ReactCodegen: 4acb96173b6ecf8bb9a42044614b848dcfbc4fc6 + ReactCommon: 02f6a489d5eb4ab79d7deba5cd4434e0ba351a07 + ReactNativeDependencies: 6738e602b46fd24aa453cd58267ec3bb8bf29d27 ReactNativeIncallManager: dccd3e7499caa3bb73d3acfedf4fb0360f1a87d5 - RNBootSplash: 7fcc9a58ae343aeb1a1dd49f9030832fe432c544 + RNBootSplash: 768ba7c7983ab8415dce47ac54815acd4f5ae843 RNCallKeep: 1930a01d8caf48f018be4f2db0c9f03405c2f977 - RNCAsyncStorage: fd44f4b03e007e642e98df6726737bc66e9ba609 - RNCClipboard: e560338bf6cc4656a09ff90610b62ddc0dbdad65 - RNCMaskedView: d707a83784c67099b54b37d056ababb2767ce15e - RNCPicker: 35fc66f352403cdfe99d53b541f5180482ca2bc5 - RNDateTimePicker: ea25d20659754bfe1014e0d5905d21dbc18ff705 + RNCAsyncStorage: d90e523830fa7705f8c61632479abde871bc792f + RNCClipboard: 7a7d4557bfd3370b35c99dfecd92ae7b9fc4948a + RNCMaskedView: 8069b4d4e23b3d28b4fcac70bf266be43ffc3d2e + RNCPicker: a3921be99ae291e420e3e8940e5b2b53e572c543 + RNDateTimePicker: afe0288e6c7855994f7f2617b7b2c05799fea7f3 RNDeviceInfo: 900bd20e1fd3bfd894e7384cc4a83880c0341bd3 RNFBAnalytics: 2e8b8ffcd2bb3d59a43ecbe09571c73c56edef7a RNFBApp: a448037d2df74af9d374a0b765be12ff1e844dc0 RNFBCrashlytics: c3bb5533f9957eddc88f3ea383583309a4ce9f89 - RNGestureHandler: 89c0c079dc88636fed9580bb581bd7df69ef33d0 - RNImageCropPicker: 5432d75a3bc7209dc8b6ab189fcfe19bd6339fb9 - RNKeychain: d0bdaca4688ae123909b137de08491f49a6cf6b1 - RNLocalize: c46dd4008dc8990a098fcafd6ee051122a1ccfda - RNReanimated: 1a67ec7c458dd04abadba7549d9d5abb24d6ec8a - RNScreens: 7a423c912ca9e107b37f54f32292186de32bfcaf - RNSVG: 1eecd65673a4735fead92da0e79441f09ec2d77a - RNTrueSheet: 53f29088da313dabff8b81d7c4d52afd8e609cfa - RNWorklets: 71a002c69e25e15bd4758faccd089349bcfc82d7 + RNGestureHandler: 7b07d9192bc65c6883fb37fdecc05dc6b61c814f + RNImageCropPicker: 5c9c8bef4c72d3f451b499aa0ecd90a644ea1bbd + RNKeychain: d57edf101a72acf3ae85fe4d796eed1d951d2a90 + RNLocalize: 17bce0556e2d33fe1201c8cef53b3b7786e07612 + RNReanimated: 28766837a1b96215c55c2be65b27b8903e31ef5d + RNScreens: 5b4b260e28d8263d97fddcb53e59649515797bcc + RNSVG: 68c366b996064ea99cee1e55da62b8feafb33a78 + RNTrueSheet: 93f1765e65782ef6de12fd9338061a51399bb337 + RNWorklets: 43af89f696342f91118a2f1f3a879056e2f47331 SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 simdjson: 7bb9e33d87737cec966e7b427773c67baa4458fe - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 TOCropViewController: 797deaf39c90e6e9ddd848d88817f6b9a8a09888 WatermelonDB: 4c846c8cb94eef3cba90fa034d15310163226703 - Yoga: 9690ea6ce9c77aee633f4815cc42202c701edbd8 + Yoga: 269d501078efa6b25cd57f7f326fc3da213580be ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: d705b9a75929ea25f9b7bb3ef8167fe307bd8b32 +PODFILE CHECKSUM: b39e033fd5ceefcceb991d1d93ed4ea05c5752e0 COCOAPODS: 1.15.2 diff --git a/ios/RocketChat.xcodeproj/project.pbxproj b/ios/RocketChat.xcodeproj/project.pbxproj index fba4a7314c7..b3a5e045385 100644 --- a/ios/RocketChat.xcodeproj/project.pbxproj +++ b/ios/RocketChat.xcodeproj/project.pbxproj @@ -1288,7 +1288,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/MMKV/MMKV_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", @@ -1299,8 +1298,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-timing/React-timing_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/react-native-cameraroll/RNCameraRollPrivacyInfo.bundle", ); @@ -1324,7 +1321,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MMKV_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", @@ -1335,8 +1331,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-timing_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCameraRollPrivacyInfo.bundle", ); @@ -1449,7 +1443,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/MMKV/MMKV_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", @@ -1460,8 +1453,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-timing/React-timing_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/react-native-cameraroll/RNCameraRollPrivacyInfo.bundle", ); @@ -1485,7 +1476,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MMKV_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", @@ -1496,8 +1486,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-timing_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCameraRollPrivacyInfo.bundle", ); @@ -1559,12 +1547,16 @@ "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ExpoModulesJSI/ExpoModulesJSI.framework/ExpoModulesJSI", "${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/React-Core-prebuilt/React.framework/React", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ReactNativeDependencies/ReactNativeDependencies.framework/ReactNativeDependencies", "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermesvm.framework/hermesvm", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExpoModulesJSI.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/React.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactNativeDependencies.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermesvm.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -2358,6 +2350,18 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers", + "${PODS_ROOT}/ReactCommon", + "${PODS_ROOT}/ReactCommon/react/nativemodule/core", + "${PODS_ROOT}/React-runtimeexecutor", + "${PODS_ROOT}/React-runtimeexecutor/platform/ios", + "${PODS_ROOT}/ReactCommon-Samples", + "${PODS_ROOT}/ReactCommon-Samples/platform/ios", + "${PODS_ROOT}/React-Fabric/react/renderer/components/view/platform/cxx", + "${PODS_ROOT}/React-NativeModulesApple", + "${PODS_ROOT}/React-graphics", + "${PODS_ROOT}/React-graphics/react/renderer/graphics/platform/ios", + "${PODS_ROOT}/React-featureflags", + "${PODS_ROOT}/React-renderercss", ); IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; @@ -2378,6 +2382,7 @@ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; }; name = Debug; @@ -2437,6 +2442,18 @@ "${PODS_CONFIGURATION_BUILD_DIR}/React-runtimeexecutor/React_runtimeexecutor.framework/Headers/platform/ios", "${PODS_CONFIGURATION_BUILD_DIR}/React-featureflags/React_featureflags.framework/Headers", "${PODS_CONFIGURATION_BUILD_DIR}/React-renderercss/React_renderercss.framework/Headers", + "${PODS_ROOT}/ReactCommon", + "${PODS_ROOT}/ReactCommon/react/nativemodule/core", + "${PODS_ROOT}/React-runtimeexecutor", + "${PODS_ROOT}/React-runtimeexecutor/platform/ios", + "${PODS_ROOT}/ReactCommon-Samples", + "${PODS_ROOT}/ReactCommon-Samples/platform/ios", + "${PODS_ROOT}/React-Fabric/react/renderer/components/view/platform/cxx", + "${PODS_ROOT}/React-NativeModulesApple", + "${PODS_ROOT}/React-graphics", + "${PODS_ROOT}/React-graphics/react/renderer/graphics/platform/ios", + "${PODS_ROOT}/React-featureflags", + "${PODS_ROOT}/React-renderercss", ); IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; @@ -2456,6 +2473,7 @@ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_ENABLE_EXPLICIT_MODULES = NO; USE_HERMES = true; VALIDATE_PRODUCT = YES; }; diff --git a/patches/react-native+0.86.3.patch b/patches/react-native+0.86.3.patch deleted file mode 100644 index b0da19c9af6..00000000000 --- a/patches/react-native+0.86.3.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/node_modules/react-native/React/Views/RCTViewManager.m b/node_modules/react-native/React/Views/RCTViewManager.m -index fa1e0bc..82d9393 100644 ---- a/node_modules/react-native/React/Views/RCTViewManager.m -+++ b/node_modules/react-native/React/Views/RCTViewManager.m -@@ -223,7 +223,8 @@ - (RCTShadowView *)shadowView - { - UIAccessibilityTraits accessibilityRoleTraits = - json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; -- if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits) { -+ NSString *roleString = json ? [RCTConvert NSString:json] : nil; -+ if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits || view.reactAccessibilityElement.accessibilityRole != roleString) { - view.accessibilityRoleTraits = accessibilityRoleTraits; - view.reactAccessibilityElement.accessibilityRole = json ? [RCTConvert NSString:json] : nil; - [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; -@@ -233,7 +234,8 @@ - (RCTShadowView *)shadowView - RCT_CUSTOM_VIEW_PROPERTY(role, UIAccessibilityTraits, RCTView) - { - UIAccessibilityTraits roleTraits = json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; -- if (view.reactAccessibilityElement.roleTraits != roleTraits) { -+ NSString *roleString = json ? [RCTConvert NSString:json] : nil; -+ if (view.reactAccessibilityElement.roleTraits != roleTraits || view.reactAccessibilityElement.role != roleString) { - view.roleTraits = roleTraits; - view.reactAccessibilityElement.role = json ? [RCTConvert NSString:json] : nil; - [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; From c7701551f88539678e8d85fb4fc22a754200439d Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 17 Sep 2026 13:33:45 -0300 Subject: [PATCH 19/55] fix(e2e): anchor keyboard navigation login on focus (#7703) * fix(e2e): reach login email field by focus instead of Dpad count The keyboard navigation onboarding flow walked to the email field with four blind Remote Dpad Down presses. Removing the decorative OR separator from the accessibility focus chain shortened the chain by one, so the email was typed into the password field and the password into the email field, and login was never submitted. Press Down until login-view-email reports focused, bounded by times: 10, and assert focus before typing. Maestro returns normally when a repeat bound is exhausted, so without the assertion an over-long chain would fail later at the rooms-list-view wait with an unrelated error. The separator only renders when totalServices > 0, so the chain length depends on server config and no fixed count is correct. * fix(e2e): reach password and submit by focus, hide keyboard first Anchoring the email field exposed two more blind steps in the same flow. The hop to the password field assumed Enter moves focus, and the submit assumed Enter on the password field logs in. Neither had been exercised before, because the flow failed earlier. Press Down until each target reports focused, bounded and asserted like the email field. The submit loop needs the soft keyboard hidden first: with the keyboard up the Dpad presses go to the input method and never reach the login screen, so the submit button is never focused. --- .../keyboard-navigation-onboarding.yaml | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/.maestro/tests/keyboardNavigation/keyboard-navigation-onboarding.yaml b/.maestro/tests/keyboardNavigation/keyboard-navigation-onboarding.yaml index 8d48340f4ef..c40ca6d8223 100644 --- a/.maestro/tests/keyboardNavigation/keyboard-navigation-onboarding.yaml +++ b/.maestro/tests/keyboardNavigation/keyboard-navigation-onboarding.yaml @@ -31,21 +31,49 @@ tags: visible: id: 'login-view' timeout: 60000 -- pressKey: Remote Dpad Down -- waitForAnimationToEnd: - timeout: 1000 -- pressKey: Remote Dpad Down -- waitForAnimationToEnd: - timeout: 1000 -- pressKey: Remote Dpad Down -- waitForAnimationToEnd: - timeout: 1000 -- pressKey: Remote Dpad Down +- repeat: + times: 10 + while: + notVisible: + id: 'login-view-email' + focused: true + commands: + - pressKey: Remote Dpad Down + - waitForAnimationToEnd: + timeout: 1000 +- assertVisible: + id: 'login-view-email' + focused: true - inputText: ${output.user.email} - pressKey: enter -- waitForAnimationToEnd: - timeout: 1000 +- repeat: + times: 10 + while: + notVisible: + id: 'login-view-password' + focused: true + commands: + - pressKey: Remote Dpad Down + - waitForAnimationToEnd: + timeout: 1000 +- assertVisible: + id: 'login-view-password' + focused: true - inputText: ${output.user.password} +- hideKeyboard +- repeat: + times: 10 + while: + notVisible: + id: 'login-view-submit' + focused: true + commands: + - pressKey: Remote Dpad Down + - waitForAnimationToEnd: + timeout: 1000 +- assertVisible: + id: 'login-view-submit' + focused: true - pressKey: enter - extendedWaitUntil: visible: From e5b26d42d7de71911785218a246ced391788b418 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 18 Sep 2026 13:51:25 -0300 Subject: [PATCH 20/55] chore(deps): bump reanimated to 4.6.0 and worklets to 0.12.2 (#7706) * chore(deps): bump reanimated to 4.6.0 and worklets to 0.12.2 Reanimated 4.6.0 requires react-native-worklets 0.12.x, so both move together. Worklets drops its caret to match reanimated's exact pin. Reanimated 4.6.0 initializes CSS event handling at import time, which the JS-only fallback used by Jest does not implement, so the mock entry point throws on load. Stubbing setCSSEventHandler at its source keeps the rest of the proxy module real. * chore(ios): update Podfile.lock for reanimated and worklets CocoaPods preserves versions already in Podfile.lock, so pod install would not have picked these up on its own. * chore(ios): bump ffi to 1.17.4 for Xcode 27 compatibility --- Gemfile.lock | 2 +- ios/Podfile.lock | 28 ++++----- jest.setup.js | 5 ++ package.json | 4 +- pnpm-lock.yaml | 158 ++++++++++++++++++++++++----------------------- 5 files changed, 102 insertions(+), 95 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a85e179d53b..7b85556bf9a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -178,7 +178,7 @@ GEM xml-simple fastlane-sirp (1.0.0) sysrandom (~> 1.0) - ffi (1.17.1) + ffi (1.17.4) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 65e167a9dd9..9c6df442d34 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2685,7 +2685,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNReanimated (4.5.1): + - RNReanimated (4.6.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2707,12 +2707,12 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNReanimated/apple (= 4.5.1) - - RNReanimated/common (= 4.5.1) - - RNReanimated/view (= 4.5.1) + - RNReanimated/apple (= 4.6.0) + - RNReanimated/common (= 4.6.0) + - RNReanimated/view (= 4.6.0) - RNWorklets - Yoga - - RNReanimated/apple (4.5.1): + - RNReanimated/apple (4.6.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2736,7 +2736,7 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - RNReanimated/common (4.5.1): + - RNReanimated/common (4.6.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2760,7 +2760,7 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - RNReanimated/view (4.5.1): + - RNReanimated/view (4.6.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2898,7 +2898,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNWorklets (0.10.1): + - RNWorklets (0.12.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2920,10 +2920,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNWorklets/apple (= 0.10.1) - - RNWorklets/common (= 0.10.1) + - RNWorklets/apple (= 0.12.2) + - RNWorklets/common (= 0.12.2) - Yoga - - RNWorklets/apple (0.10.1): + - RNWorklets/apple (0.12.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2946,7 +2946,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNWorklets/common (0.10.1): + - RNWorklets/common (0.12.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3608,11 +3608,11 @@ SPEC CHECKSUMS: RNImageCropPicker: 5c9c8bef4c72d3f451b499aa0ecd90a644ea1bbd RNKeychain: d57edf101a72acf3ae85fe4d796eed1d951d2a90 RNLocalize: 17bce0556e2d33fe1201c8cef53b3b7786e07612 - RNReanimated: 28766837a1b96215c55c2be65b27b8903e31ef5d + RNReanimated: 0c93d90acdd8b5341f8ef5d08ab13e321ef374ca RNScreens: 5b4b260e28d8263d97fddcb53e59649515797bcc RNSVG: 68c366b996064ea99cee1e55da62b8feafb33a78 RNTrueSheet: 93f1765e65782ef6de12fd9338061a51399bb337 - RNWorklets: 43af89f696342f91118a2f1f3a879056e2f47331 + RNWorklets: 5793a617e7cc6e47a8ba79f2db881176b137cbc9 SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c diff --git a/jest.setup.js b/jest.setup.js index 8512d2ceb02..300cbd57106 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -32,6 +32,11 @@ loadAsyncMock.mockImplementation(() => Promise.resolve({ width: 200, height: 300 jest.mock('react-native-worklets', () => jest.requireActual('react-native-worklets/lib/module/mock')); +jest.mock('react-native-reanimated/src/css/native/proxy', () => ({ + ...jest.requireActual('react-native-reanimated/src/css/native/proxy'), + setCSSEventHandler: jest.fn() +})); + jest.mock('react-native-reanimated', () => { const actual = jest.requireActual('react-native-reanimated/mock'); return { diff --git a/package.json b/package.json index 21975423cd6..bc3bc445ef7 100644 --- a/package.json +++ b/package.json @@ -116,7 +116,7 @@ "react-native-notifier": "1.6.1", "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", - "react-native-reanimated": "4.5.1", + "react-native-reanimated": "4.6.0", "react-native-safe-area-context": "^5.5.2", "react-native-screens": "~4.26.2", "react-native-skeleton-placeholder": "5.2.4", @@ -124,7 +124,7 @@ "react-native-url-polyfill": "2.0.0", "react-native-webrtc": "124.0.7", "react-native-webview": "13.16.1", - "react-native-worklets": "^0.10.1", + "react-native-worklets": "0.12.2", "react-redux": "8.0.5", "reanimated-tab-view": "^0.3.0", "redux": "4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20b09bcb57e..7b0d05cfd78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 2.9.11(react-hook-form@7.34.2(react@19.2.3)) '@lodev09/react-native-true-sheet': specifier: ~3.7.0 - version: 3.7.3(b217ab5bd6345e9949a4a395c898a850) + version: 3.7.3(96151402182f1302dad3fc829007f172) '@magrinj/expo-quick-look': specifier: 0.4.0 version: 0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -77,7 +77,7 @@ importers: version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.12.2 - version: 7.12.2(568a64fb44ad70e6f0b55611752f41f8) + version: 7.12.2(e134207243f282dc8b8f0c5dc985da80) '@react-navigation/elements': specifier: ^2.9.25 version: 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) @@ -128,7 +128,7 @@ importers: version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1) expo: specifier: ^57.0.0 - version: 57.0.23(92e84404446a2d5101115c437b8fd679) + version: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-apple-authentication: specifier: ~57.0.2 version: 57.0.2(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -251,7 +251,7 @@ importers: version: https://codeload.github.com/RocketChat/react-native-katex/tar.gz/37e579804fe238732d8a4b06dec073610ab062b1(react-native-webview@13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-keyboard-controller: specifier: 1.18.5 - version: 1.18.5(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 1.18.5(react-native-reanimated@4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-keychain: specifier: 10.0.0 version: 10.0.0 @@ -286,8 +286,8 @@ importers: specifier: 5.1.7 version: 5.1.7 react-native-reanimated: - 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: 4.6.0 + version: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: ^5.5.2 version: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -310,14 +310,14 @@ importers: specifier: 13.16.1 version: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-worklets: - 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: 0.12.2 + version: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-redux: specifier: 8.0.5 version: 8.0.5(@types/react@19.2.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(redux@4.2.0) reanimated-tab-view: specifier: ^0.3.0 - version: 0.3.0(641d271507e632f6b7f49ee76b960c3d) + version: 0.3.0(435be115736f4209290803c40574d60f) redux: specifier: 4.2.0 version: 4.2.0 @@ -390,7 +390,7 @@ importers: version: 2.3.3 '@gorhom/bottom-sheet': specifier: ^5 - version: 5.2.8(9928f68f03a282f377b2614cb23deb76) + version: 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) '@react-native-community/cli': specifier: 20.0.0 version: 20.0.0(typescript@7.0.2) @@ -414,7 +414,7 @@ importers: version: 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native': specifier: ~9.0.9 - version: 9.0.18(03fc32bb656def7817eec6786e023d85) + version: 9.0.18(50ef928692a2961db10db85bb365a2eb) '@testing-library/react-native': specifier: ^13.2.0 version: 13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) @@ -6823,12 +6823,12 @@ packages: react-native-popover-view@5.1.7: resolution: {integrity: sha512-Xa+zKYp9x62UNezT8o9SnqQaBQEHdGwGHZnFnA2bsXLneVRvvlBopNwMNj+p7N65qnPf3mmzWj+57ThtM1qFuw==} - react-native-reanimated@4.5.1: - resolution: {integrity: sha512-RnMvtDuR+68ig864gAvZCOdZehqhC5rFmMo0kn+ARfgVSTvFeF6IFLBVgMPUu0KwihaapEyW24WRi6nEyy1kSA==} + react-native-reanimated@4.6.0: + resolution: {integrity: sha512-9vbQmok5BPX2J3RLPFt2UnwmK2QQoMDPDi0VB4a9JWIiEc55pdzvwEsdH91V/JXKNErqM6a9fElTBMc/1cbtBA==} peerDependencies: react: '*' - react-native: 0.83 - 0.86 - react-native-worklets: 0.10.x + react-native: 0.83 - 0.87 + react-native-worklets: 0.12.x react-native-safe-area-context@5.7.0: resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} @@ -6872,13 +6872,13 @@ packages: react: '*' react-native: '*' - react-native-worklets@0.10.1: - resolution: {integrity: sha512-62mRM19bDpfpdI8HLkEErcdOsrAPDtE9lA/sw+5lLRpzBHNhxaoj9QyY2KjXqUmirelxkX4zuPGTC3VdA0feJA==} + react-native-worklets@0.12.2: + resolution: {integrity: sha512-TB6Aze0WJg/U0XOu4Zfx/yV8i5i7C/lbMymUXPbq1izDy2nuzZ9ujQAMwAHM2Ygyhzi8sdRk/7FukuTTfuil9A==} peerDependencies: '@babel/core': '*' '@react-native/metro-config': '*' react: '*' - react-native: 0.83 - 0.86 + react-native: 0.83 - 0.87 react-native@0.86.3: resolution: {integrity: sha512-JR5s3bM9ezud+Mw24GlNXNfthqPIKwrQgPPJcam+L97t2sKjjEavhCzBn+fyqZZRcM5+XlhYxpTxVkK7e1n38Q==} @@ -9406,7 +9406,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3 dnssd-advertise: 1.1.6 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-server: 57.0.3 fetch-nodeshim: 0.4.10 getenv: 2.0.0 @@ -9525,7 +9525,7 @@ snapshots: '@expo/dom-webview@57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -9597,7 +9597,7 @@ snapshots: dependencies: '@expo/dom-webview': 57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) anser: 1.4.10 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) stacktrace-parser: 0.1.11 @@ -9628,7 +9628,7 @@ snapshots: postcss: 8.5.28 resolve-from: 5.0.0 optionalDependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) transitivePeerDependencies: - bufferutil - supports-color @@ -9721,7 +9721,7 @@ snapshots: '@expo/router-server@57.0.10(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo-server@57.0.3)(expo@57.0.23)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: debug: 4.4.3 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) expo-font: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-server: 57.0.3 @@ -10077,14 +10077,14 @@ snapshots: '@firebase/webchannel-wrapper@1.0.3': {} - '@gorhom/bottom-sheet@5.2.8(9928f68f03a282f377b2614cb23deb76)': + '@gorhom/bottom-sheet@5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e)': dependencies: '@gorhom/portal': 1.0.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) invariant: 2.2.4 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) optionalDependencies: '@types/react': 19.2.18 @@ -10360,19 +10360,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lodev09/react-native-true-sheet@3.7.3(b217ab5bd6345e9949a4a395c898a850)': + '@lodev09/react-native-true-sheet@3.7.3(96151402182f1302dad3fc829007f172)': dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@magrinj/expo-quick-look@0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -10729,7 +10729,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) '@react-native-community/hooks@100.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: @@ -10759,7 +10759,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -10768,7 +10768,7 @@ snapshots: '@react-native-firebase/app': 21.14.0(@react-native-async-storage/async-storage@2.2.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) stacktrace-js: 2.0.2 optionalDependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) '@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: @@ -10948,16 +10948,16 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.12.2(568a64fb44ad70e6f0b55611752f41f8)': + '@react-navigation/drawer@7.12.2(e134207243f282dc8b8f0c5dc985da80)': dependencies: '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-drawer-layout: 4.2.5(641d271507e632f6b7f49ee76b960c3d) + react-native-drawer-layout: 4.2.5(435be115736f4209290803c40574d60f) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) @@ -11129,9 +11129,9 @@ snapshots: - react-dom - typescript - '@storybook/react-native-ui@9.1.4(ec70a72c944b256777781574cc6aeff6)': + '@storybook/react-native-ui@9.1.4(66b479d1a625928ae8625bb9b43592a5)': dependencies: - '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) @@ -11142,7 +11142,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) store2: 2.14.4 @@ -11151,12 +11151,12 @@ snapshots: - react-dom - typescript - '@storybook/react-native@9.0.18(03fc32bb656def7817eec6786e023d85)': + '@storybook/react-native@9.0.18(50ef928692a2961db10db85bb365a2eb)': dependencies: '@storybook/global': 5.0.0 '@storybook/react': 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@storybook/react-native-ui': 9.1.4(ec70a72c944b256777781574cc6aeff6) + '@storybook/react-native-ui': 9.1.4(66b479d1a625928ae8625bb9b43592a5) '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) commander: 8.3.0 dedent: 1.6.0(babel-plugin-macros@3.1.0) @@ -11170,9 +11170,9 @@ snapshots: util: 0.12.5 ws: 8.18.3 optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(9928f68f03a282f377b2614cb23deb76) + '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - babel-plugin-macros @@ -12048,7 +12048,7 @@ snapshots: react-refresh: 0.14.2 optionalDependencies: '@babel/runtime': 7.25.9 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) transitivePeerDependencies: - '@babel/core' - supports-color @@ -13054,18 +13054,18 @@ snapshots: expo-apple-authentication@57.0.2(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) expo-application@57.0.3(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-asset@57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2): dependencies: '@expo/image-utils': 0.11.5(typescript@7.0.2) - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -13075,7 +13075,7 @@ snapshots: expo-audio@57.0.5(expo-asset@57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2))(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-asset: 57.0.17(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -13083,7 +13083,7 @@ snapshots: expo-camera@57.0.5(@types/emscripten@1.41.6)(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: barcode-detector: 3.2.2(@types/emscripten@1.41.6) - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: @@ -13092,51 +13092,51 @@ snapshots: expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: '@expo/env': 2.4.3 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color expo-device@57.0.2(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) ua-parser-js: 1.0.2 expo-document-picker@57.0.2(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-file-system@57.0.7(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) fontfaceobserver: 2.3.0 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) expo-haptics@57.0.3(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-image@57.0.5(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) sf-symbols-typescript: 2.2.0 expo-keep-awake@57.0.2(expo@57.0.23)(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 expo-local-authentication@57.0.3(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) invariant: 2.2.4 expo-modules-autolinking@57.0.13(typescript@7.0.2): @@ -13149,7 +13149,7 @@ snapshots: - supports-color - typescript - expo-modules-core@57.0.18(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + expo-modules-core@57.0.18(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@expo/expo-modules-macros-plugin': 0.6.1 expo-modules-jsi: 57.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) @@ -13157,7 +13157,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - react-native-worklets: 0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-modules-jsi@57.1.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: @@ -13168,7 +13168,7 @@ snapshots: '@expo/image-utils': 0.11.5(typescript@7.0.2) abort-controller: 3.0.0 badgin: 1.2.3 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-application: 57.0.3(expo@57.0.23) expo-constants: 57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)) react: 19.2.3 @@ -13181,7 +13181,7 @@ snapshots: expo-status-bar@57.0.1(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -13189,27 +13189,27 @@ snapshots: dependencies: '@react-native/normalize-colors': 0.86.3 debug: 4.4.3 - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) transitivePeerDependencies: - supports-color expo-video-thumbnails@57.0.2(expo@57.0.23): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) expo-video@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) expo-web-browser@57.0.3(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)): dependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - expo@57.0.23(92e84404446a2d5101115c437b8fd679): + expo@57.0.23(8132ea204d39ca81423aaa5e2384dd28): dependencies: '@babel/runtime': 7.25.9 '@expo/cli': 57.0.25(@expo/dom-webview@57.0.1)(expo-constants@57.0.18(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3)))(expo-font@57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(expo@57.0.23)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(typescript@7.0.2) @@ -13229,7 +13229,7 @@ snapshots: expo-font: 57.0.4(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) expo-keep-awake: 57.0.2(expo@57.0.23)(react@19.2.3) expo-modules-autolinking: 57.0.13(typescript@7.0.2) - expo-modules-core: 57.0.18(react-native-worklets@0.10.1(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + expo-modules-core: 57.0.18(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -14133,7 +14133,7 @@ snapshots: server-only: 0.0.1 stacktrace-js: 2.0.2 optionalDependencies: - expo: 57.0.23(92e84404446a2d5101115c437b8fd679) + expo: 57.0.23(8132ea204d39ca81423aaa5e2384dd28) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -15688,13 +15688,13 @@ snapshots: '@babel/runtime': 7.25.9 dotenv: 16.6.1 - react-native-drawer-layout@4.2.5(641d271507e632f6b7f49ee76b960c3d): + react-native-drawer-layout@4.2.5(435be115736f4209290803c40574d60f): dependencies: color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) react-native-easy-grid@0.2.2: @@ -15746,12 +15746,12 @@ snapshots: react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-webview: 13.16.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-keyboard-controller@1.18.5(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-keyboard-controller@1.18.5(react-native-reanimated@4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-keychain@10.0.0: {} @@ -15814,12 +15814,12 @@ snapshots: deprecated-react-native-prop-types: 2.3.0 prop-types: 15.8.1 - 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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-reanimated@4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) semver: 7.7.4 react-native-safe-area-context@5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): @@ -15870,9 +15870,10 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: '@babel/core': 7.29.7 + '@babel/generator': 7.29.8 '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.7) '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.7) @@ -15882,6 +15883,7 @@ snapshots: '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.7) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.7) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) + '@babel/traverse': 7.29.8 '@babel/types': 7.29.8 '@react-native/metro-config': 0.86.3(@babel/core@7.29.7) convert-source-map: 2.0.0 @@ -15981,12 +15983,12 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - reanimated-tab-view@0.3.0(641d271507e632f6b7f49ee76b960c3d): + reanimated-tab-view@0.3.0(435be115736f4209290803c40574d60f): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) recast@0.23.11: dependencies: From 18d5f9d940a7606803e8360c6e3bbb0b62b06710 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 18 Sep 2026 14:10:23 -0300 Subject: [PATCH 21/55] chore(deps): bump react-native-screens to 4.28.0 (#7709) --- ios/Podfile.lock | 12 ++++++------ package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 9c6df442d34..57fa1164bdd 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2784,7 +2784,7 @@ PODS: - ReactNativeDependencies - RNWorklets - Yoga - - RNScreens (4.26.2): + - RNScreens (4.28.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2806,9 +2806,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNScreens/common (= 4.26.2) + - RNScreens/common (= 4.28.0) - Yoga - - RNScreens/common (4.26.2): + - RNScreens/common (4.28.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3608,11 +3608,11 @@ SPEC CHECKSUMS: RNImageCropPicker: 5c9c8bef4c72d3f451b499aa0ecd90a644ea1bbd RNKeychain: d57edf101a72acf3ae85fe4d796eed1d951d2a90 RNLocalize: 17bce0556e2d33fe1201c8cef53b3b7786e07612 - RNReanimated: 0c93d90acdd8b5341f8ef5d08ab13e321ef374ca - RNScreens: 5b4b260e28d8263d97fddcb53e59649515797bcc + RNReanimated: c57ef141c7843c2849531e7556236d7223b7db1a + RNScreens: 8708989f700bdc3dc5abc3c77aa3b5f3e73ce2b2 RNSVG: 68c366b996064ea99cee1e55da62b8feafb33a78 RNTrueSheet: 93f1765e65782ef6de12fd9338061a51399bb337 - RNWorklets: 5793a617e7cc6e47a8ba79f2db881176b137cbc9 + RNWorklets: 453d16f4cb680d5a4262b314519711e7765a80a1 SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c diff --git a/package.json b/package.json index bc3bc445ef7..8090193e30e 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "react-native-popover-view": "5.1.7", "react-native-reanimated": "4.6.0", "react-native-safe-area-context": "^5.5.2", - "react-native-screens": "~4.26.2", + "react-native-screens": "~4.28.0", "react-native-skeleton-placeholder": "5.2.4", "react-native-svg": "^15.12.1", "react-native-url-polyfill": "2.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7b0d05cfd78..63bed4e9459 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,7 +77,7 @@ importers: version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.12.2 - version: 7.12.2(e134207243f282dc8b8f0c5dc985da80) + version: 7.12.2(73ba9f8e6c1cf66e4b24f58fe7369d0e) '@react-navigation/elements': specifier: ^2.9.25 version: 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) @@ -86,7 +86,7 @@ importers: version: 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-navigation/native-stack': specifier: ^7.17.5 - version: 7.17.5(b9b07f1e05b03fd68f5bb004ad12b8b4) + version: 7.17.5(3e0f47b5bea0de66da61abc3c1812caa) '@rocket.chat/media-signaling': specifier: 1.0.0-rc.1 version: 1.0.0-rc.1 @@ -292,8 +292,8 @@ importers: specifier: ^5.5.2 version: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: - specifier: ~4.26.2 - version: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: ~4.28.0 + version: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-skeleton-placeholder: specifier: 5.2.4 version: 5.2.4(@react-native-masked-view/masked-view@0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native-linear-gradient@2.8.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -6836,8 +6836,8 @@ packages: react: '*' react-native: '*' - react-native-screens@4.26.2: - resolution: {integrity: sha512-2XnWsZToKj76trGtEZzx5ELD/qOICFEprEeUntImmitQFVUkea27fiWdUSITArI356Y1qynpXZINW+Unbhky/A==} + react-native-screens@4.28.0: + resolution: {integrity: sha512-0/79Z8RCibuaAHti+DJ2Dq0m6UFWh4+p1bH58K3cjiQ7IDWs5kU9tCAj4lXcJMHHonbF2mIE2BeaPSEvOpIiFg==} peerDependencies: react: '*' react-native: '*' @@ -10948,7 +10948,7 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.12.2(e134207243f282dc8b8f0c5dc985da80)': + '@react-navigation/drawer@7.12.2(73ba9f8e6c1cf66e4b24f58fe7369d0e)': dependencies: '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -10959,7 +10959,7 @@ snapshots: react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -10976,7 +10976,7 @@ snapshots: optionalDependencies: '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack@7.17.5(b9b07f1e05b03fd68f5bb004ad12b8b4)': + '@react-navigation/native-stack@7.17.5(3e0f47b5bea0de66da61abc3c1812caa)': dependencies: '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -10984,7 +10984,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-screens: 4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-screens: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: @@ -15827,7 +15827,7 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-screens@4.26.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-screens@4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-freeze: 1.0.4(react@19.2.3) From da561234d26d8bee865868696d2e8db2bfefd90c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 18 Sep 2026 14:20:47 -0300 Subject: [PATCH 22/55] chore(deps): bump @react-navigation family (#7710) --- package.json | 8 +- ...ch => @react-navigation+core+7.22.1.patch} | 0 pnpm-lock.yaml | 147 +++++++----------- 3 files changed, 59 insertions(+), 96 deletions(-) rename patches/{@react-navigation+core+7.21.1.patch => @react-navigation+core+7.22.1.patch} (100%) diff --git a/package.json b/package.json index 8090193e30e..e8b05e1dcf3 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,10 @@ "@react-native-masked-view/masked-view": "^0.3.1", "@react-native-picker/picker": "2.11.4", "@react-native/codegen": "0.86.3", - "@react-navigation/drawer": "^7.12.2", - "@react-navigation/elements": "^2.9.25", - "@react-navigation/native": "^7.3.3", - "@react-navigation/native-stack": "^7.17.5", + "@react-navigation/drawer": "^7.14.1", + "@react-navigation/elements": "^2.9.42", + "@react-navigation/native": "^7.4.1", + "@react-navigation/native-stack": "^7.19.1", "@rocket.chat/media-signaling": "1.0.0-rc.1", "@rocket.chat/message-parser": "0.31.36", "@rocket.chat/mobile-crypto": "RocketChat/rocket.chat-mobile-crypto#main", diff --git a/patches/@react-navigation+core+7.21.1.patch b/patches/@react-navigation+core+7.22.1.patch similarity index 100% rename from patches/@react-navigation+core+7.21.1.patch rename to patches/@react-navigation+core+7.22.1.patch diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63bed4e9459..9357c543078 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 2.9.11(react-hook-form@7.34.2(react@19.2.3)) '@lodev09/react-native-true-sheet': specifier: ~3.7.0 - version: 3.7.3(96151402182f1302dad3fc829007f172) + version: 3.7.3(559152e7857b125189ca42b7a151d6a4) '@magrinj/expo-quick-look': specifier: 0.4.0 version: 0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -76,17 +76,17 @@ importers: specifier: 0.86.3 version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': - specifier: ^7.12.2 - version: 7.12.2(73ba9f8e6c1cf66e4b24f58fe7369d0e) + specifier: ^7.14.1 + version: 7.14.2(e24299e34c4f513bb3e57ce41b68cee3) '@react-navigation/elements': - specifier: ^2.9.25 - version: 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) + specifier: ^2.9.42 + version: 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) '@react-navigation/native': - specifier: ^7.3.3 - version: 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: ^7.4.1 + version: 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-navigation/native-stack': - specifier: ^7.17.5 - version: 7.17.5(3e0f47b5bea0de66da61abc3c1812caa) + specifier: ^7.19.1 + version: 7.19.2(5323759ca43d3318f9a4b86095166ade) '@rocket.chat/media-signaling': specifier: 1.0.0-rc.1 version: 1.0.0-rc.1 @@ -2695,15 +2695,15 @@ packages: '@types/react': optional: true - '@react-navigation/core@7.21.1': - resolution: {integrity: sha512-9eOK71VFEyJjm1bP8o4Gf7YYppWPZ+RdNIjTc+WbSM7AFEH0XXEIHkkhpIBuB416sDlRZ1CRxHk2frh1HPBZqw==} + '@react-navigation/core@7.22.1': + resolution: {integrity: sha512-6JAaYM4u6RPtVMUjN5ovX5DNBdBZtDqebk7kEwlncUP6fP4P94+qEYv1bRmtxSFs7UxiZwQQs+jzTsBaW2WeyA==} peerDependencies: react: '>= 18.2.0' - '@react-navigation/drawer@7.12.2': - resolution: {integrity: sha512-LEwER8YRq6Kjxjw9vECOVgWUAiP8l2jso3XntfAvthZqYWtVD4Ms1HdAUAf4Emwp78W15PEj7m0PV2StmglkLw==} + '@react-navigation/drawer@7.14.2': + resolution: {integrity: sha512-vHDJ5TlKZ2RWW1z+Zy7k4mwuo3kLXfhO2+EpDWBTPcaeb8b/3upouKDALQviWCQ1KqyUAme+DbE8cIoGcuSQvg==} peerDependencies: - '@react-navigation/native': ^7.3.3 + '@react-navigation/native': ^7.4.1 react: '>= 18.2.0' react-native: '*' react-native-gesture-handler: '>= 2.0.0' @@ -2711,11 +2711,11 @@ packages: react-native-safe-area-context: '>= 4.0.0' react-native-screens: '>= 4.0.0' - '@react-navigation/elements@2.9.25': - resolution: {integrity: sha512-cV7Hny55aE/uge6f4UB0pbGQbFl3XjXLMW+lTBNuJs8P7a9tuf7dkkPHxxgnLIvxE+KJVI2K8CGabfDk4Ht0Sg==} + '@react-navigation/elements@2.9.43': + resolution: {integrity: sha512-XOYpRfgT9RPV2VIoXeEfTVdmXwEPpHwkezDkZVsVNEN6rTWDo07BPyLmWsvXooczyMf3jHe9AB2p/U9lJArtiQ==} peerDependencies: '@react-native-masked-view/masked-view': '>= 0.2.0' - '@react-navigation/native': ^7.3.3 + '@react-navigation/native': ^7.4.1 react: '>= 18.2.0' react-native: '*' react-native-safe-area-context: '>= 4.0.0' @@ -2723,23 +2723,23 @@ packages: '@react-native-masked-view/masked-view': optional: true - '@react-navigation/native-stack@7.17.5': - resolution: {integrity: sha512-jS67nzFlpuzNSDzAsL09hk59sNrp6zxViqKW+RzC5ia26VMxZBw2QFLBZN6rOnO3nOcpAKDpS8/Mx6vicurDfw==} + '@react-navigation/native-stack@7.19.2': + resolution: {integrity: sha512-D6hmtgpMZz1x8R0PLbfqqKh5ajEkb13DguE7X/MNNKYL4riY4zD3TrjbcesUC2EZklpQ/EoJ6h6HAhMNfCCsoQ==} peerDependencies: - '@react-navigation/native': ^7.3.3 + '@react-navigation/native': ^7.4.1 react: '>= 18.2.0' react-native: '*' react-native-safe-area-context: '>= 4.0.0' react-native-screens: '>= 4.0.0' - '@react-navigation/native@7.3.3': - resolution: {integrity: sha512-VjZngfeiyJestZPT99CKHRi3qOR6XwnEEPWb6uHF/L7fBI6RBVP842iJf61MUHRTzsWPUT+epJqdf1wm8N5YkQ==} + '@react-navigation/native@7.4.1': + resolution: {integrity: sha512-pEnu5XzAXV6RWr6A6pmZ7qLB+O6TJWMhBO25AjckMdr596UWulMPHQCtBcnOUfg6K+2h9ZUctHF2E5Xu4vcOrQ==} peerDependencies: react: '>= 18.2.0' react-native: '*' - '@react-navigation/routers@7.6.0': - resolution: {integrity: sha512-lblhDXfS75jLc7G2K7BZGM+7cjqQXk13X/MA4fq/12r62zM+fBhhreLzYflSitrDDXFRJpSvJXy0ziiGU04Xow==} + '@react-navigation/routers@7.6.4': + resolution: {integrity: sha512-GI7eJm8/KsZUQaYcXvEExikKurRZRgEsSzyZ7faENfi65yqJBCXjDMwyN1pF6pNW1MoLH1ErDwDivFxY6BzD3w==} '@redux-saga/core@1.4.2': resolution: {integrity: sha512-nIMLGKo6jV6Wc1sqtVQs1iqbB3Kq20udB/u9XEaZQisT6YZ0NRB8+4L6WqD/E+YziYutd27NJbG8EWUPkb7c6Q==} @@ -4169,10 +4169,6 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -4835,10 +4831,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} - engines: {node: '>=0.10.0'} - finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} @@ -6589,10 +6581,6 @@ packages: quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - query-string@7.1.3: - resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} - engines: {node: '>=6'} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -6644,9 +6632,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.1.0: - resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} - react-is@19.3.0: resolution: {integrity: sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA==} @@ -6688,8 +6673,8 @@ packages: peerDependencies: '@babel/runtime': ^7.20.6 - react-native-drawer-layout@4.2.5: - resolution: {integrity: sha512-Yl82uLkXjXuq7222hWGIDsq5A6R/bsCeCEgdIxQUxAEHf00oRdDnRByLx3Fsij3qwtmYNPGrHV1NH8G8hbCbLQ==} + react-native-drawer-layout@4.2.10: + resolution: {integrity: sha512-O6TQdZ5LSm3dqnuR4rX9KPtE+9dVg7jsezEYz1l01rkQTe4fQvYZIoPu2sZFl5X2N70uhRdjnPULySVR3sBUwA==} peerDependencies: react: '>= 18.2.0' react-native: '*' @@ -7297,10 +7282,6 @@ packages: resolution: {integrity: sha512-S6ji+flMEga+1QU79NDbwZ8Ivf0S/MpupQQiIC0rTpU/ZTKgcajijJJb1OcByBQDjrXCN1/DJtGz4ZJeBMPGJw==} hasBin: true - split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} - engines: {node: '>=6'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -7331,8 +7312,10 @@ packages: resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} engines: {node: '>=6'} - standard-navigation@0.0.7: - resolution: {integrity: sha512-NCGLCNyuXrFOkGHxdNZFnpsehGtiq1oXbPhKl7ZuxFO5J//H2evqqOchmD4YwEUJnkjO4kH9Xp4hQX6hdAYCKQ==} + standard-navigation@0.0.8: + resolution: {integrity: sha512-TyVbo7INUDWtsUWDFn8RR7kwR87U0S4xHfLfbbnyeC581TmmyqQ+eM+nPw8rQTSD8QitRVcYfPaSHr/QJiUy1g==} + peerDependencies: + react: '*' statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} @@ -7365,10 +7348,6 @@ packages: streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} - strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} - engines: {node: '>=4'} - string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -10360,13 +10339,13 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lodev09/react-native-true-sheet@3.7.3(96151402182f1302dad3fc829007f172)': + '@lodev09/react-native-true-sheet@3.7.3(559152e7857b125189ca42b7a151d6a4)': dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) - '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -10936,26 +10915,25 @@ snapshots: optionalDependencies: '@types/react': 19.2.18 - '@react-navigation/core@7.21.1(react@19.2.3)': + '@react-navigation/core@7.22.1(react@19.2.3)': dependencies: - '@react-navigation/routers': 7.6.0 + '@react-navigation/routers': 7.6.4 escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 - nanoid: 3.3.11 - query-string: 7.1.3 + nanoid: 3.3.19 react: 19.2.3 - react-is: 19.1.0 + react-is: 19.3.0 use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.12.2(73ba9f8e6c1cf66e4b24f58fe7369d0e)': + '@react-navigation/drawer@7.14.2(e24299e34c4f513bb3e57ce41b68cee3)': dependencies: - '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) - '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/elements': 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) + '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-drawer-layout: 4.2.5(435be115736f4209290803c40574d60f) + react-native-drawer-layout: 4.2.10(435be115736f4209290803c40574d60f) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -10964,9 +10942,9 @@ snapshots: transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/elements@2.9.25(94b93b3be2a5aeeeacd03698514a6eb6)': + '@react-navigation/elements@2.9.43(9ff45bd34fc277ebcc4865acd7015c6f)': dependencies: - '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -10976,10 +10954,10 @@ snapshots: optionalDependencies: '@react-native-masked-view/masked-view': 0.3.2(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack@7.17.5(3e0f47b5bea0de66da61abc3c1812caa)': + '@react-navigation/native-stack@7.19.2(5323759ca43d3318f9a4b86095166ade)': dependencies: - '@react-navigation/elements': 2.9.25(94b93b3be2a5aeeeacd03698514a6eb6) - '@react-navigation/native': 7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@react-navigation/elements': 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) + '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -10990,20 +10968,20 @@ snapshots: transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/native@7.3.3(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': + '@react-navigation/native@7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)': dependencies: - '@react-navigation/core': 7.21.1(react@19.2.3) + '@react-navigation/core': 7.22.1(react@19.2.3) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 - nanoid: 3.3.11 + nanoid: 3.3.19 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - standard-navigation: 0.0.7 + standard-navigation: 0.0.8(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) - '@react-navigation/routers@7.6.0': + '@react-navigation/routers@7.6.4': dependencies: - nanoid: 3.3.11 + nanoid: 3.3.19 '@redux-saga/core@1.4.2': dependencies: @@ -12555,8 +12533,6 @@ snapshots: decimal.js@10.6.0: {} - decode-uri-component@0.2.2: {} - decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -13306,8 +13282,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - filter-obj@1.1.0: {} - finalhandler@1.1.2: dependencies: debug: 2.6.9 @@ -15574,13 +15548,6 @@ snapshots: quansync@0.2.11: {} - query-string@7.1.3: - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -15633,8 +15600,6 @@ snapshots: react-is@18.3.1: {} - react-is@19.1.0: {} - react-is@19.3.0: {} react-native-a11y-order@0.4.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): @@ -15688,7 +15653,7 @@ snapshots: '@babel/runtime': 7.25.9 dotenv: 16.6.1 - react-native-drawer-layout@4.2.5(435be115736f4209290803c40574d60f): + react-native-drawer-layout@4.2.10(435be115736f4209290803c40574d60f): dependencies: color: 4.2.3 react: 19.2.3 @@ -16377,8 +16342,6 @@ snapshots: commander: 13.1.0 wicked-good-xpath: 1.3.0 - split-on-first@1.1.0: {} - sprintf-js@1.0.3: {} sql-escape-string@1.1.0: {} @@ -16410,7 +16373,9 @@ snapshots: dependencies: type-fest: 0.7.1 - standard-navigation@0.0.7: {} + standard-navigation@0.0.8(react@19.2.3): + dependencies: + react: 19.2.3 statuses@1.5.0: {} @@ -16456,8 +16421,6 @@ snapshots: - bare-abort-controller - react-native-b4a - strict-uri-encode@2.0.0: {} - string-length@4.0.2: dependencies: char-regex: 1.0.2 From 29c926fe1f6458538d51bdbfc132be478d6c9d1a Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 18 Sep 2026 14:47:46 -0300 Subject: [PATCH 23/55] chore(deps): bump react-native-safe-area-context to 5.10.0 (#7711) --- ios/Podfile.lock | 12 ++++++------ package.json | 2 +- pnpm-lock.yaml | 44 ++++++++++++++++++++++---------------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 57fa1164bdd..f2a0eb6a6a2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1883,7 +1883,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context (5.7.0): + - react-native-safe-area-context (5.10.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1895,8 +1895,8 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-safe-area-context/common (= 5.7.0) - - react-native-safe-area-context/fabric (= 5.7.0) + - react-native-safe-area-context/common (= 5.10.0) + - react-native-safe-area-context/fabric (= 5.10.0) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -1907,7 +1907,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context/common (5.7.0): + - react-native-safe-area-context/common (5.10.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1929,7 +1929,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context/fabric (5.7.0): + - react-native-safe-area-context/fabric (5.10.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -3553,7 +3553,7 @@ SPEC CHECKSUMS: react-native-external-keyboard: f89ea61eb77875621a1ad086769d829da8ae3fcd react-native-keyboard-controller: c5ba8bf515b500ecb3692bc5ecc944c6be4b3290 react-native-netinfo: a05f9b897e76ad24b53f615fed1cbb731932363d - react-native-safe-area-context: ba7283e541a5f57c6b27a7e33f2c40b8977888c0 + react-native-safe-area-context: 678f254e77e69986ae9d9e62721f152e73dbc76b react-native-slider: b15258ac3d287a5951f76b11497d659ed20c0def react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74 react-native-webview: 2a4da2e03d3ec2c731c4d1a389cb86aaa4902167 diff --git a/package.json b/package.json index e8b05e1dcf3..5bc0a2356ae 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", "react-native-reanimated": "4.6.0", - "react-native-safe-area-context": "^5.5.2", + "react-native-safe-area-context": "^5.10.0", "react-native-screens": "~4.28.0", "react-native-skeleton-placeholder": "5.2.4", "react-native-svg": "^15.12.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9357c543078..737bfd93822 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,16 +77,16 @@ importers: version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.14.1 - version: 7.14.2(e24299e34c4f513bb3e57ce41b68cee3) + version: 7.14.2(dda132b9c8f311fd0053bf630a6001aa) '@react-navigation/elements': specifier: ^2.9.42 - version: 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) + version: 2.9.43(322efc84ae2b5bd2002572a8329e2a5c) '@react-navigation/native': specifier: ^7.4.1 version: 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@react-navigation/native-stack': specifier: ^7.19.1 - version: 7.19.2(5323759ca43d3318f9a4b86095166ade) + version: 7.19.2(9f93b74e18ae1df429c2a9dc7118e4c2) '@rocket.chat/media-signaling': specifier: 1.0.0-rc.1 version: 1.0.0-rc.1 @@ -289,8 +289,8 @@ importers: specifier: 4.6.0 version: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: - specifier: ^5.5.2 - version: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: ^5.10.0 + version: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: specifier: ~4.28.0 version: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -414,7 +414,7 @@ importers: version: 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native': specifier: ~9.0.9 - version: 9.0.18(50ef928692a2961db10db85bb365a2eb) + version: 9.0.18(abaa9f17cfa3ec17933d2333c1a01a26) '@testing-library/react-native': specifier: ^13.2.0 version: 13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) @@ -6815,8 +6815,8 @@ packages: react-native: 0.83 - 0.87 react-native-worklets: 0.12.x - react-native-safe-area-context@5.7.0: - resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} + react-native-safe-area-context@5.10.0: + resolution: {integrity: sha512-U655+G0KItefqpTKZenr0aBNulY/49TUKSZkWGVtESlFK5qmML7BejQjPDCRU+GzC24g2KeWFJguWP5LR52dqA==} peerDependencies: react: '*' react-native: '*' @@ -10926,9 +10926,9 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.14.2(e24299e34c4f513bb3e57ce41b68cee3)': + '@react-navigation/drawer@7.14.2(dda132b9c8f311fd0053bf630a6001aa)': dependencies: - '@react-navigation/elements': 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) + '@react-navigation/elements': 2.9.43(322efc84ae2b5bd2002572a8329e2a5c) '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 @@ -10936,32 +10936,32 @@ snapshots: react-native-drawer-layout: 4.2.10(435be115736f4209290803c40574d60f) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@react-navigation/elements@2.9.43(9ff45bd34fc277ebcc4865acd7015c6f)': + '@react-navigation/elements@2.9.43(322efc84ae2b5bd2002572a8329e2a5c)': dependencies: '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(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.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack@7.19.2(5323759ca43d3318f9a4b86095166ade)': + '@react-navigation/native-stack@7.19.2(9f93b74e18ae1df429c2a9dc7118e4c2)': dependencies: - '@react-navigation/elements': 2.9.43(9ff45bd34fc277ebcc4865acd7015c6f) + '@react-navigation/elements': 2.9.43(322efc84ae2b5bd2002572a8329e2a5c) '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 @@ -11107,7 +11107,7 @@ snapshots: - react-dom - typescript - '@storybook/react-native-ui@9.1.4(66b479d1a625928ae8625bb9b43592a5)': + '@storybook/react-native-ui@9.1.4(c7e041ee7310df2b401daba6013bd73c)': dependencies: '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) @@ -11121,7 +11121,7 @@ snapshots: react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) store2: 2.14.4 storybook: 9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4) @@ -11129,12 +11129,12 @@ snapshots: - react-dom - typescript - '@storybook/react-native@9.0.18(50ef928692a2961db10db85bb365a2eb)': + '@storybook/react-native@9.0.18(abaa9f17cfa3ec17933d2333c1a01a26)': dependencies: '@storybook/global': 5.0.0 '@storybook/react': 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@storybook/react-native-ui': 9.1.4(66b479d1a625928ae8625bb9b43592a5) + '@storybook/react-native-ui': 9.1.4(c7e041ee7310df2b401daba6013bd73c) '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) commander: 8.3.0 dedent: 1.6.0(babel-plugin-macros@3.1.0) @@ -11151,7 +11151,7 @@ snapshots: '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: 5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: - babel-plugin-macros - bufferutil @@ -15787,7 +15787,7 @@ snapshots: react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) semver: 7.7.4 - react-native-safe-area-context@5.7.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-safe-area-context@5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) From 5c0c03a557043a782022ccc84bd220f010941ac3 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 22 Sep 2026 10:51:38 -0300 Subject: [PATCH 24/55] fix(ios): adopt UIScene lifecycle for iOS 27 iOS 27 SDK requires scene-based app lifecycle. The app now uses Expo's ExpoAppSceneDelegate via a new SceneDelegate, with startReactNative and boot splash initialization moved out of the app delegate into the scene delegate. --- ios/AppDelegate.swift | 38 ++++++++++++++---------- ios/RocketChat.xcodeproj/project.pbxproj | 24 +++++++-------- ios/RocketChatRN/Info.plist | 30 +++++++++++++------ ios/SceneDelegate.swift | 17 +++++++++++ 4 files changed, 72 insertions(+), 37 deletions(-) create mode 100644 ios/SceneDelegate.swift diff --git a/ios/AppDelegate.swift b/ios/AppDelegate.swift index 636a2acedf2..56a299a8d4c 100644 --- a/ios/AppDelegate.swift +++ b/ios/AppDelegate.swift @@ -8,10 +8,10 @@ import PushKit @UIApplicationMain public class AppDelegate: ExpoAppDelegate { - var window: UIWindow? + public var window: UIWindow? var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? + public var reactNativeFactory: RCTReactNativeFactory? var watchConnection: WatchConnection? public override func application( @@ -44,21 +44,8 @@ public class AppDelegate: ExpoAppDelegate { reactNativeDelegate = delegate reactNativeFactory = factory -#if os(iOS) || os(tvOS) - window = UIWindow(frame: UIScreen.main.bounds) - factory.startReactNative( - withModuleName: "RocketChatRN", - in: window, - launchOptions: launchOptions) -#endif - let result = super.application(application, didFinishLaunchingWithOptions: launchOptions) - // Initialize boot splash - if let rootViewController = window?.rootViewController { - RNBootSplash.initWithStoryboard("LaunchScreen", rootView: rootViewController.view) - } - // Initialize SSL Pinning SSLPinning().migrate() @@ -86,6 +73,27 @@ public class AppDelegate: ExpoAppDelegate { let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler) return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result } + +#if os(iOS) || os(tvOS) + public func application( + _ application: UIApplication, + configurationForConnecting connectingSceneSession: UISceneSession, + options: UIScene.ConnectionOptions + ) -> UISceneConfiguration { + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + public func application( + _ application: UIApplication, + didDiscardSceneSessions sceneSessions: Set + ) {} +#endif +} + +extension AppDelegate: ExpoReactNativeFactoryProvider { + public var reactNativeFactoryModuleName: String { + "RocketChatRN" + } } class ReactNativeDelegate: ExpoReactNativeFactoryDelegate { diff --git a/ios/RocketChat.xcodeproj/project.pbxproj b/ios/RocketChat.xcodeproj/project.pbxproj index b3a5e045385..ea53c986722 100644 --- a/ios/RocketChat.xcodeproj/project.pbxproj +++ b/ios/RocketChat.xcodeproj/project.pbxproj @@ -211,6 +211,7 @@ 7AC0A1E02C000011001CAA11 /* Challenge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7AC0A1E02C000002001CAA11 /* Challenge.mm */; }; 7AC0A1E02C000012001CAA11 /* Challenge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7AC0A1E02C000002001CAA11 /* Challenge.mm */; }; 7ACFE7D92DDE48760090D9BC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */; }; + 6F204E445C3D44699793D4F8 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 680FA18DB475479CAD48F334 /* SceneDelegate.swift */; }; 7AE10C0828A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; }; 7AVR00022F5F5900002A6BDE /* VoipRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AVR00002F5F5900002A6BDE /* VoipRegion.swift */; }; 85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */; }; @@ -450,6 +451,7 @@ 7AC0A1E02C000002001CAA11 /* Challenge.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Challenge.mm; sourceTree = ""; }; 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 680FA18DB475479CAD48F334 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 7AE10C0528A59530003593CB /* Inter.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Inter.ttf; sourceTree = ""; }; 7AVR00002F5F5900002A6BDE /* VoipRegion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoipRegion.swift; sourceTree = ""; }; 83F98EE33D91A93DF8E69F34 /* MediaCallsAnswerRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaCallsAnswerRequest.swift; sourceTree = ""; }; @@ -519,6 +521,7 @@ 6FA7E2362F28A9D300A1D45E /* ExternalInputModule.h */, 6FA7E2372F28A9D300A1D45E /* ExternalInputModule.m */, 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */, + 680FA18DB475479CAD48F334 /* SceneDelegate.swift */, B1E1F0032F03A00000EXT003 /* ExternalInputModule.h */, B1E1F0042F03A00000EXT004 /* ExternalInputModule.m */, 65B9A7192AFC24190088956F /* ringtone.mp3 */, @@ -1355,7 +1358,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; + shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport NODE_BINARY=/opt/homebrew/bin/node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; 7A55BE3C2F1131C000D8744D /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -1382,7 +1385,7 @@ inputFileListPaths = ( ); inputPaths = ( - "$TARGET_BUILD_DIR/$INFOPLIST_PATH", + $TARGET_BUILD_DIR/$INFOPLIST_PATH, ); name = "Upload source maps to Bugsnag"; outputFileListPaths = ( @@ -1391,7 +1394,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n"; + shellScript = "#SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n"; showEnvVarsInLog = 0; }; 86A998705576AFA7CE938617 /* [Expo] Configure project */ = { @@ -1727,6 +1730,7 @@ 7AAB3E24257E6A6E00707CF6 /* Date+Extensions.swift in Sources */, 7AAB3E25257E6A6E00707CF6 /* Database.swift in Sources */, 7ACFE7D92DDE48760090D9BC /* AppDelegate.swift in Sources */, + 6F204E445C3D44699793D4F8 /* SceneDelegate.swift in Sources */, 7A3704572F7DB36E009085FC /* VoipPerCallDdpRegistry.swift in Sources */, 1E9A71752B59F36E00477BA2 /* ClientSSL.swift in Sources */, A48B46DA2D3FFBD200945489 /* A11yFlowModule.m in Sources */, @@ -1848,7 +1852,7 @@ "$(inherited)", "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", - "$PODS_CONFIGURATION_BUILD_DIR/Firebase", + $PODS_CONFIGURATION_BUILD_DIR/Firebase, ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.4; @@ -1924,7 +1928,7 @@ "$(inherited)", "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", - "$PODS_CONFIGURATION_BUILD_DIR/Firebase", + $PODS_CONFIGURATION_BUILD_DIR/Firebase, ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.4; @@ -2374,10 +2378,7 @@ "$(inherited)", "-DRCT_REMOVE_LEGACY_ARCH=1", ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; @@ -2465,10 +2466,7 @@ "$(inherited)", "-DRCT_REMOVE_LEGACY_ARCH=1", ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); + OTHER_LDFLAGS = "$(inherited) "; PODFILE_DIR = "$(SRCROOT)"; REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index 372948e2af8..c5f2177e95b 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -4,11 +4,6 @@ AppGroupIdentifier group.ios.chat.rocket - bugsnag - - apiKey - apiKeyValue - CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion @@ -75,6 +70,10 @@ Give $(PRODUCT_NAME) permission to save photos NSPhotoLibraryUsageDescription Upload photos to share with other users or to change your avatar + NSUserActivityTypes + + INSendMessageIntent + RCTNewArchEnabled UIAppFonts @@ -86,6 +85,18 @@ UIApplicationSupportsMultipleScenes + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + + + UIBackgroundModes @@ -108,9 +119,10 @@ UIViewControllerBasedStatusBarAppearance - NSUserActivityTypes - - INSendMessageIntent - + bugsnag + + apiKey + apiKeyValue + diff --git a/ios/SceneDelegate.swift b/ios/SceneDelegate.swift new file mode 100644 index 00000000000..dead07a76e4 --- /dev/null +++ b/ios/SceneDelegate.swift @@ -0,0 +1,17 @@ +import Expo +import UIKit + +@available(iOSApplicationExtension, unavailable) +class SceneDelegate: ExpoAppSceneDelegate { + override func scene( + _ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions + ) { + super.scene(scene, willConnectTo: session, options: connectionOptions) + + if let rootViewController = window?.rootViewController { + RNBootSplash.initWithStoryboard("LaunchScreen", rootView: rootViewController.view) + } + } +} From 2f86dc44dd345a7485acf4a0736e6388a01dc856 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 22 Sep 2026 20:23:23 -0300 Subject: [PATCH 25/55] fix(android): stop gesture-handler buttons hijacking hardware Enter/D-pad The RN 0.86 gesture-handler bump added an Android-only onKeyUp override that intercepts DPAD_CENTER/ENTER/SPACE and activates whichever button currently holds native view focus, bypassing the default performClick() path. Every composer and header icon button is a BorderlessButton, so this silently fired the wrong button (e.g. the header drawer button) on hardware Enter/D-pad and swallowed the key event elsewhere. Removed the hunk; the iOS press-handling hunk is untouched. --- .../react-native-gesture-handler+2.32.0.patch | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/patches/react-native-gesture-handler+2.32.0.patch b/patches/react-native-gesture-handler+2.32.0.patch index ba5d8c8056f..4c16a356879 100644 --- a/patches/react-native-gesture-handler+2.32.0.patch +++ b/patches/react-native-gesture-handler+2.32.0.patch @@ -1,30 +1,3 @@ -diff --git a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt -index e4114c4..41544da 100644 ---- a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt -+++ b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt -@@ -504,10 +504,22 @@ class RNGestureHandlerButtonViewManager : - } - - override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { -+ if (isActivationKey(keyCode) && !isChildTouched() && !context.isScreenReaderOn()) { -+ findGestureHandlerRootView()?.activateNativeHandlers(this) -+ return true -+ } - receivedKeyEvent = true - return super.onKeyUp(keyCode, event) - } - -+ private fun isActivationKey(keyCode: Int) = when (keyCode) { -+ KeyEvent.KEYCODE_DPAD_CENTER, -+ KeyEvent.KEYCODE_ENTER, -+ KeyEvent.KEYCODE_NUMPAD_ENTER, -+ KeyEvent.KEYCODE_SPACE -> true -+ else -> false -+ } -+ - override fun performClick(): Boolean { - // don't preform click when a child button is pressed (mainly to prevent sound effect of - // a parent button from playing) diff --git a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm b/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm index 6b9fa9c..6d2ccea 100644 --- a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm From 49c799461bfbb3861f5b1f0b543515bc99e492fe Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 22 Sep 2026 23:03:11 -0300 Subject: [PATCH 26/55] fix(room-list): close other swiped room items when a new one opens Track the currently open swipeable room item in a single UI-thread mutable value (openSwipeItemId) instead of per-item state. Every Touchable reacts to that value and springs itself closed once another row claims it, so only one room can be swiped open at a time. Tapping a room, long-pressing it, or opening its own actions all clear or reassign ownership. Also replaces the abrupt default spring with an explicit, softer config (damping/mass/stiffness) shared by every open/close animation. --- app/containers/RoomItem/Touchable.tsx | 27 ++++++++++++++++--- app/containers/RoomItem/openSwipeItem.test.ts | 19 +++++++++++++ app/containers/RoomItem/openSwipeItem.ts | 3 +++ app/containers/RoomItem/styles.ts | 6 +++++ jest.setup.js | 1 + 5 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 app/containers/RoomItem/openSwipeItem.test.ts create mode 100644 app/containers/RoomItem/openSwipeItem.ts diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 0db3467dc3b..25fcbea5adf 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,5 +1,5 @@ import { useRef, memo, type ReactElement } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; +import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction, withSpring } from 'react-native-reanimated'; import { Gesture, GestureDetector, @@ -9,8 +9,9 @@ import { import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../Touch'; -import { ACTION_WIDTH, LONG_SWIPE, SMALL_SWIPE } from './styles'; +import { ACTION_WIDTH, LONG_SWIPE, SMALL_SWIPE, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; +import { openSwipeItemId } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -41,11 +42,23 @@ const Touchable = ({ const close = () => { rowState.value = 0; - transX.value = withSpring(0, { overshootClamping: true }); + transX.value = withSpring(0, SWIPE_SPRING_CONFIG); rowOffSet.value = 0; valueRef.current = 0; + if (openSwipeItemId.value === rid) { + openSwipeItemId.value = null; + } }; + useAnimatedReaction( + () => openSwipeItemId.value, + current => { + if (current !== rid && rowState.value !== 0) { + scheduleOnRN(close); + } + } + ); + const handleToggleFav = () => { toggleFav(rid, favorite); close(); @@ -74,6 +87,7 @@ const Touchable = ({ close(); return; } + openSwipeItemId.value = null; if (onPress) { onPress(); } @@ -85,6 +99,7 @@ const Touchable = ({ return; } + openSwipeItemId.value = null; if (onLongPress) { onLongPress(); } @@ -164,9 +179,10 @@ const Touchable = ({ toValue = -2 * ACTION_WIDTH; } } - transX.value = withSpring(toValue, { overshootClamping: true }); + transX.value = withSpring(toValue, SWIPE_SPRING_CONFIG); rowOffSet.value = toValue; valueRef.current = toValue; + openSwipeItemId.value = rowState.value !== 0 ? rid : null; }; const longPressGesture = Gesture.LongPress() @@ -179,6 +195,9 @@ const Touchable = ({ .activeOffsetX([-10, 10]) // More sensitive horizontal detection .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) + .onStart(() => { + openSwipeItemId.value = rid; + }) .onUpdate(event => { transX.value = event.translationX + rowOffSet.value; if (transX.value > 2 * width) transX.value = 2 * width; diff --git a/app/containers/RoomItem/openSwipeItem.test.ts b/app/containers/RoomItem/openSwipeItem.test.ts new file mode 100644 index 00000000000..de40ab74809 --- /dev/null +++ b/app/containers/RoomItem/openSwipeItem.test.ts @@ -0,0 +1,19 @@ +import { openSwipeItemId } from './openSwipeItem'; + +describe('openSwipeItem', () => { + afterEach(() => { + openSwipeItemId.value = null; + }); + + it('starts with no room swiped open', () => { + expect(openSwipeItemId.value).toBeNull(); + }); + + it('tracks a single open room id at a time, replacing the previous one', () => { + openSwipeItemId.value = 'room-1'; + expect(openSwipeItemId.value).toBe('room-1'); + + openSwipeItemId.value = 'room-2'; + expect(openSwipeItemId.value).toBe('room-2'); + }); +}); diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts new file mode 100644 index 00000000000..a2ff5295c6e --- /dev/null +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -0,0 +1,3 @@ +import { makeMutable } from 'react-native-reanimated'; + +export const openSwipeItemId = makeMutable(null); diff --git a/app/containers/RoomItem/styles.ts b/app/containers/RoomItem/styles.ts index 26f760c186d..e3de5dd10fd 100644 --- a/app/containers/RoomItem/styles.ts +++ b/app/containers/RoomItem/styles.ts @@ -5,6 +5,12 @@ import sharedStyles from '~/views/Styles'; export const ACTION_WIDTH = 80; export const SMALL_SWIPE = ACTION_WIDTH / 2; export const LONG_SWIPE = ACTION_WIDTH * 2.5; +export const SWIPE_SPRING_CONFIG = { + overshootClamping: true, + damping: 20, + mass: 0.5, + stiffness: 200 +}; export default StyleSheet.create({ flex: { diff --git a/jest.setup.js b/jest.setup.js index 300cbd57106..0c07293e063 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -42,6 +42,7 @@ jest.mock('react-native-reanimated', () => { return { ...actual, useSharedValue: jest.fn(init => ({ value: init })), + makeMutable: jest.fn(init => ({ value: init })), useAnimatedReaction: jest.fn(), withTiming: jest.fn(value => value), useAnimatedGestureHandler: jest.fn(() => jest.fn()), From 6c6bdf553902b6a831a7ca13881be70ac286474a Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 22 Sep 2026 23:04:47 -0300 Subject: [PATCH 27/55] test(room-list): drop tautological swipe test, keep mock reverted openSwipeItem.test.ts only asserted that a shared value keeps what was written to it, which added no coverage. GestureDetector/pan behavior isn't exercisable through the existing jest reanimated mocks (useAnimatedReaction is a no-op), so a real cross-row close test isn't practical here without a broader mocking change. Revert the makeMutable jest mock added for that test since nothing else in the suite needs it. --- app/containers/RoomItem/openSwipeItem.test.ts | 19 ------------------- jest.setup.js | 1 - 2 files changed, 20 deletions(-) delete mode 100644 app/containers/RoomItem/openSwipeItem.test.ts diff --git a/app/containers/RoomItem/openSwipeItem.test.ts b/app/containers/RoomItem/openSwipeItem.test.ts deleted file mode 100644 index de40ab74809..00000000000 --- a/app/containers/RoomItem/openSwipeItem.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { openSwipeItemId } from './openSwipeItem'; - -describe('openSwipeItem', () => { - afterEach(() => { - openSwipeItemId.value = null; - }); - - it('starts with no room swiped open', () => { - expect(openSwipeItemId.value).toBeNull(); - }); - - it('tracks a single open room id at a time, replacing the previous one', () => { - openSwipeItemId.value = 'room-1'; - expect(openSwipeItemId.value).toBe('room-1'); - - openSwipeItemId.value = 'room-2'; - expect(openSwipeItemId.value).toBe('room-2'); - }); -}); diff --git a/jest.setup.js b/jest.setup.js index 0c07293e063..300cbd57106 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -42,7 +42,6 @@ jest.mock('react-native-reanimated', () => { return { ...actual, useSharedValue: jest.fn(init => ({ value: init })), - makeMutable: jest.fn(init => ({ value: init })), useAnimatedReaction: jest.fn(), withTiming: jest.fn(value => value), useAnimatedGestureHandler: jest.fn(() => jest.fn()), From 4322d5250065a72d133d64b02e132d85b3da33a9 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 10:30:27 -0300 Subject: [PATCH 28/55] fix(room-list): close open row on press-in of another row --- app/containers/RoomItem/Touchable.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 25fcbea5adf..e314834ef33 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -195,6 +195,11 @@ const Touchable = ({ .activeOffsetX([-10, 10]) // More sensitive horizontal detection .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) + .onTouchesDown(() => { + if (rowState.value === 0) { + openSwipeItemId.value = rid; + } + }) .onStart(() => { openSwipeItemId.value = rid; }) From aba4a85ab84211363dc4879e1597026d4fe262c9 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 10:50:00 -0300 Subject: [PATCH 29/55] wip: gesture manual restructuring attempt (bisect checkpoint) --- app/containers/RoomItem/Touchable.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index e314834ef33..cf4874a2d60 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -195,11 +195,6 @@ const Touchable = ({ .activeOffsetX([-10, 10]) // More sensitive horizontal detection .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) - .onTouchesDown(() => { - if (rowState.value === 0) { - openSwipeItemId.value = rid; - } - }) .onStart(() => { openSwipeItemId.value = rid; }) @@ -213,7 +208,16 @@ const Touchable = ({ // Use Race instead of Simultaneous to prevent conflicts // Pan gesture will take priority over long press for horizontal swipes - const composedGesture = Gesture.Race(panGesture, longPressGesture); + const swipeGesture = Gesture.Race(panGesture, longPressGesture); + + // Manual gesture never activates, so it observes touches without claiming or cancelling swipeGesture or Touch's own press + const closeOtherRowsGesture = Gesture.Manual().onTouchesDown(() => { + if (rowState.value === 0) { + openSwipeItemId.value = rid; + } + }); + + const composedGesture = Gesture.Simultaneous(swipeGesture, closeOtherRowsGesture); const animatedStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] From f0c0c808dc9255d567797de90a23490719dfb4a6 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 11:19:59 -0300 Subject: [PATCH 30/55] fix(room-list): close open swipe row via plain JS registry --- app/containers/RoomItem/Touchable.tsx | 59 +++++++++++------------- app/containers/RoomItem/openSwipeItem.ts | 19 +++++++- 2 files changed, 43 insertions(+), 35 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index cf4874a2d60..c832d155f77 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,5 +1,5 @@ -import { useRef, memo, type ReactElement } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction, withSpring } from 'react-native-reanimated'; +import { useRef, useEffect, memo, type ReactElement } from 'react'; +import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; import { Gesture, GestureDetector, @@ -11,7 +11,7 @@ import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../Touch'; import { ACTION_WIDTH, LONG_SWIPE, SMALL_SWIPE, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; -import { openSwipeItemId } from './openSwipeItem'; +import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -45,19 +45,10 @@ const Touchable = ({ transX.value = withSpring(0, SWIPE_SPRING_CONFIG); rowOffSet.value = 0; valueRef.current = 0; - if (openSwipeItemId.value === rid) { - openSwipeItemId.value = null; - } + unregisterOpenSwipeItem(rid); }; - useAnimatedReaction( - () => openSwipeItemId.value, - current => { - if (current !== rid && rowState.value !== 0) { - scheduleOnRN(close); - } - } - ); + useEffect(() => () => unregisterOpenSwipeItem(rid), [rid]); const handleToggleFav = () => { toggleFav(rid, favorite); @@ -87,7 +78,6 @@ const Touchable = ({ close(); return; } - openSwipeItemId.value = null; if (onPress) { onPress(); } @@ -99,7 +89,6 @@ const Touchable = ({ return; } - openSwipeItemId.value = null; if (onLongPress) { onLongPress(); } @@ -109,6 +98,7 @@ const Touchable = ({ const { translationX } = event; valueRef.current += translationX; let toValue = 0; + let nextRowState = rowState.value; if (rowState.value === 0) { // if no option is opened if (translationX > 0 && translationX < LONG_SWIPE) { @@ -117,7 +107,7 @@ const Touchable = ({ } else { toValue = ACTION_WIDTH; } - rowState.value = -1; + nextRowState = -1; } else if (translationX >= LONG_SWIPE) { toValue = 0; if (I18n.isRTL) { @@ -132,10 +122,10 @@ const Touchable = ({ } else { toValue = -2 * ACTION_WIDTH; } - rowState.value = 1; + nextRowState = 1; } else if (translationX <= -LONG_SWIPE) { toValue = 0; - rowState.value = 1; + nextRowState = 1; if (I18n.isRTL) { handleToggleRead(); } else { @@ -148,10 +138,10 @@ const Touchable = ({ // if left option is opened if (valueRef.current < SMALL_SWIPE) { toValue = 0; - rowState.value = 0; + nextRowState = 0; } else if (valueRef.current > LONG_SWIPE) { toValue = 0; - rowState.value = 0; + nextRowState = 0; if (I18n.isRTL) { handleHideChannel(); } else { @@ -166,7 +156,7 @@ const Touchable = ({ // if right option is opened if (valueRef.current > -2 * SMALL_SWIPE) { toValue = 0; - rowState.value = 0; + nextRowState = 0; } else if (valueRef.current < -LONG_SWIPE) { if (I18n.isRTL) { handleToggleRead(); @@ -179,10 +169,15 @@ const Touchable = ({ toValue = -2 * ACTION_WIDTH; } } + rowState.value = nextRowState; transX.value = withSpring(toValue, SWIPE_SPRING_CONFIG); rowOffSet.value = toValue; valueRef.current = toValue; - openSwipeItemId.value = rowState.value !== 0 ? rid : null; + if (nextRowState !== 0) { + registerOpenSwipeItem(rid, close); + } else { + unregisterOpenSwipeItem(rid); + } }; const longPressGesture = Gesture.LongPress() @@ -195,8 +190,8 @@ const Touchable = ({ .activeOffsetX([-10, 10]) // More sensitive horizontal detection .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) - .onStart(() => { - openSwipeItemId.value = rid; + .onBegin(() => { + scheduleOnRN(closeOpenSwipeItem, rid); }) .onUpdate(event => { transX.value = event.translationX + rowOffSet.value; @@ -208,16 +203,13 @@ const Touchable = ({ // Use Race instead of Simultaneous to prevent conflicts // Pan gesture will take priority over long press for horizontal swipes - const swipeGesture = Gesture.Race(panGesture, longPressGesture); + const composedGesture = Gesture.Race(panGesture, longPressGesture); - // Manual gesture never activates, so it observes touches without claiming or cancelling swipeGesture or Touch's own press - const closeOtherRowsGesture = Gesture.Manual().onTouchesDown(() => { - if (rowState.value === 0) { - openSwipeItemId.value = rid; + const handleActiveStateChange = (active: boolean) => { + if (active) { + closeOpenSwipeItem(rid); } - }); - - const composedGesture = Gesture.Simultaneous(swipeGesture, closeOtherRowsGesture); + }; const animatedStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] @@ -245,6 +237,7 @@ const Touchable = ({ diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index a2ff5295c6e..0abf1f54d92 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -1,3 +1,18 @@ -import { makeMutable } from 'react-native-reanimated'; +let openSwipeItem: { rid: string; close: () => void } | null = null; -export const openSwipeItemId = makeMutable(null); +export const registerOpenSwipeItem = (rid: string, close: () => void) => { + openSwipeItem = { rid, close }; +}; + +export const unregisterOpenSwipeItem = (rid: string) => { + if (openSwipeItem?.rid === rid) { + openSwipeItem = null; + } +}; + +export const closeOpenSwipeItem = (exceptRid?: string) => { + if (openSwipeItem && openSwipeItem.rid !== exceptRid) { + openSwipeItem.close(); + openSwipeItem = null; + } +}; From cb0d38020127c7fb886087efdaa036ac081efa2b Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 11:36:30 -0300 Subject: [PATCH 31/55] fix(room-list): swallow tap that only closes another open row --- app/containers/RoomItem/Touchable.tsx | 11 +++++- .../RoomItem/__tests__/openSwipeItem.test.ts | 34 +++++++++++++++++++ app/containers/RoomItem/openSwipeItem.ts | 2 ++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 app/containers/RoomItem/__tests__/openSwipeItem.test.ts diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index c832d155f77..313f74ac6db 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -39,6 +39,7 @@ const Touchable = ({ const transX = useSharedValue(0); const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened const valueRef = useRef(0); + const consumedTouchRef = useRef(false); const close = () => { rowState.value = 0; @@ -78,6 +79,10 @@ const Touchable = ({ close(); return; } + if (consumedTouchRef.current) { + consumedTouchRef.current = false; + return; + } if (onPress) { onPress(); } @@ -88,6 +93,10 @@ const Touchable = ({ close(); return; } + if (consumedTouchRef.current) { + consumedTouchRef.current = false; + return; + } if (onLongPress) { onLongPress(); @@ -207,7 +216,7 @@ const Touchable = ({ const handleActiveStateChange = (active: boolean) => { if (active) { - closeOpenSwipeItem(rid); + consumedTouchRef.current = closeOpenSwipeItem(rid); } }; diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts new file mode 100644 index 00000000000..5240882da47 --- /dev/null +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -0,0 +1,34 @@ +import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from '../openSwipeItem'; + +describe('closeOpenSwipeItem', () => { + afterEach(() => { + unregisterOpenSwipeItem('roomA'); + unregisterOpenSwipeItem('roomB'); + }); + + it('closes the open item and reports it was consumed', () => { + const close = jest.fn(); + registerOpenSwipeItem('roomA', close); + + const consumed = closeOpenSwipeItem('roomB'); + + expect(close).toHaveBeenCalledTimes(1); + expect(consumed).toBe(true); + }); + + it('reports nothing was consumed when no item is open', () => { + const consumed = closeOpenSwipeItem('roomB'); + + expect(consumed).toBe(false); + }); + + it('reports nothing was consumed when closing the same room that is open', () => { + const close = jest.fn(); + registerOpenSwipeItem('roomA', close); + + const consumed = closeOpenSwipeItem('roomA'); + + expect(close).not.toHaveBeenCalled(); + expect(consumed).toBe(false); + }); +}); diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index 0abf1f54d92..6cc940936d3 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -14,5 +14,7 @@ export const closeOpenSwipeItem = (exceptRid?: string) => { if (openSwipeItem && openSwipeItem.rid !== exceptRid) { openSwipeItem.close(); openSwipeItem = null; + return true; } + return false; }; From 4a6edf14ffbe37bd1a5298cc7ef07079621ee0b5 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 12:10:33 -0300 Subject: [PATCH 32/55] fix(room-list): close other row's swipe animation from the UI thread Route the cross-row close through a Reanimated shared-value registry so tapping row 2 starts row 1's spring close synchronously on the UI thread, from the pan gesture's onBegin worklet, instead of waiting for a JS-thread hop via scheduleOnRN. The JS-thread round trip could be delayed by other work on that thread, stalling the animation partway through and making it finish as a single jump instead of a smooth spring. --- app/containers/RoomItem/Touchable.tsx | 20 ++++++++--- .../RoomItem/__tests__/openSwipeItem.test.ts | 22 +++++++++---- app/containers/RoomItem/openSwipeItem.ts | 33 ++++++++++++++----- jest.setup.js | 1 + 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 313f74ac6db..655aea9a762 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -40,6 +40,15 @@ const Touchable = ({ const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened const valueRef = useRef(0); const consumedTouchRef = useRef(false); + const touchStartHandledRef = useRef(false); + + const handleTouchBegin = (closedOtherRow: boolean) => { + if (touchStartHandledRef.current) { + return; + } + touchStartHandledRef.current = true; + consumedTouchRef.current = closedOtherRow; + }; const close = () => { rowState.value = 0; @@ -75,6 +84,7 @@ const Touchable = ({ }; const handlePress = () => { + touchStartHandledRef.current = false; if (rowState.value !== 0) { close(); return; @@ -89,6 +99,7 @@ const Touchable = ({ }; const handleLongPress = () => { + touchStartHandledRef.current = false; if (rowState.value !== 0) { close(); return; @@ -183,7 +194,7 @@ const Touchable = ({ rowOffSet.value = toValue; valueRef.current = toValue; if (nextRowState !== 0) { - registerOpenSwipeItem(rid, close); + registerOpenSwipeItem({ rid, transX, rowState, rowOffSet }); } else { unregisterOpenSwipeItem(rid); } @@ -200,7 +211,8 @@ const Touchable = ({ .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) .onBegin(() => { - scheduleOnRN(closeOpenSwipeItem, rid); + const closedOtherRow = closeOpenSwipeItem(rid); + scheduleOnRN(handleTouchBegin, closedOtherRow); }) .onUpdate(event => { transX.value = event.translationX + rowOffSet.value; @@ -215,8 +227,8 @@ const Touchable = ({ const composedGesture = Gesture.Race(panGesture, longPressGesture); const handleActiveStateChange = (active: boolean) => { - if (active) { - consumedTouchRef.current = closeOpenSwipeItem(rid); + if (!active) { + touchStartHandledRef.current = false; } }; diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts index 5240882da47..92610ebcf89 100644 --- a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -1,5 +1,14 @@ +import { makeMutable } from 'react-native-reanimated'; + import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from '../openSwipeItem'; +const createItem = (rid: string) => ({ + rid, + transX: makeMutable(80), + rowState: makeMutable(1), + rowOffSet: makeMutable(80) +}); + describe('closeOpenSwipeItem', () => { afterEach(() => { unregisterOpenSwipeItem('roomA'); @@ -7,12 +16,13 @@ describe('closeOpenSwipeItem', () => { }); it('closes the open item and reports it was consumed', () => { - const close = jest.fn(); - registerOpenSwipeItem('roomA', close); + const item = createItem('roomA'); + registerOpenSwipeItem(item); const consumed = closeOpenSwipeItem('roomB'); - expect(close).toHaveBeenCalledTimes(1); + expect(item.rowState.value).toBe(0); + expect(item.rowOffSet.value).toBe(0); expect(consumed).toBe(true); }); @@ -23,12 +33,12 @@ describe('closeOpenSwipeItem', () => { }); it('reports nothing was consumed when closing the same room that is open', () => { - const close = jest.fn(); - registerOpenSwipeItem('roomA', close); + const item = createItem('roomA'); + registerOpenSwipeItem(item); const consumed = closeOpenSwipeItem('roomA'); - expect(close).not.toHaveBeenCalled(); + expect(item.rowState.value).toBe(1); expect(consumed).toBe(false); }); }); diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index 6cc940936d3..73171c51fce 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -1,19 +1,36 @@ -let openSwipeItem: { rid: string; close: () => void } | null = null; +import { makeMutable, withSpring, type SharedValue } from 'react-native-reanimated'; -export const registerOpenSwipeItem = (rid: string, close: () => void) => { - openSwipeItem = { rid, close }; +import { SWIPE_SPRING_CONFIG } from './styles'; + +type OpenSwipeItem = { + rid: string; + transX: SharedValue; + rowState: SharedValue; + rowOffSet: SharedValue; +}; + +export const openSwipeItem = makeMutable(null); + +export const registerOpenSwipeItem = (item: OpenSwipeItem) => { + 'worklet'; + openSwipeItem.value = item; }; export const unregisterOpenSwipeItem = (rid: string) => { - if (openSwipeItem?.rid === rid) { - openSwipeItem = null; + 'worklet'; + if (openSwipeItem.value?.rid === rid) { + openSwipeItem.value = null; } }; export const closeOpenSwipeItem = (exceptRid?: string) => { - if (openSwipeItem && openSwipeItem.rid !== exceptRid) { - openSwipeItem.close(); - openSwipeItem = null; + 'worklet'; + const item = openSwipeItem.value; + if (item && item.rid !== exceptRid) { + item.rowState.value = 0; + item.transX.value = withSpring(0, SWIPE_SPRING_CONFIG); + item.rowOffSet.value = 0; + openSwipeItem.value = null; return true; } return false; diff --git a/jest.setup.js b/jest.setup.js index 300cbd57106..0c07293e063 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -42,6 +42,7 @@ jest.mock('react-native-reanimated', () => { return { ...actual, useSharedValue: jest.fn(init => ({ value: init })), + makeMutable: jest.fn(init => ({ value: init })), useAnimatedReaction: jest.fn(), withTiming: jest.fn(value => value), useAnimatedGestureHandler: jest.fn(() => jest.fn()), From c449cf5227b4ad269449c017a9b1266f5e39c0c9 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 14:30:15 -0300 Subject: [PATCH 33/55] feat(room-list): WhatsApp-style swipe actions and release spring --- app/containers/RoomItem/Actions.tsx | 143 +- app/containers/RoomItem/Touchable.tsx | 58 +- .../__snapshots__/RoomItem.test.tsx.snap | 11910 +++++++++------- app/containers/RoomItem/styles.ts | 34 +- 4 files changed, 6738 insertions(+), 5407 deletions(-) diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index ed14ae1e18a..6b0def83a26 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -1,19 +1,13 @@ import { memo } from 'react'; import { View } from 'react-native'; -import Animated, { - useAnimatedStyle, - interpolate, - withSpring, - useAnimatedReaction, - useSharedValue -} from 'react-native-reanimated'; +import Animated, { useAnimatedStyle, useAnimatedReaction, useSharedValue, withTiming } from 'react-native-reanimated'; import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; import { scheduleOnRN } from 'react-native-worklets'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '~/lib/constants/constantDisplayMode'; -import styles, { ACTION_WIDTH, LONG_SWIPE } from './styles'; +import styles, { getOpenWidth, getFullSwipeThreshold } from './styles'; import { type ILeftActionsProps, type IRightActionsProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -21,14 +15,17 @@ import { useResponsiveLayout } from '~/lib/hooks/useResponsiveLayout/useResponsi const CONDENSED_ICON_SIZE = 24; const EXPANDED_ICON_SIZE = 28; +const EXPAND_DURATION = 300; export const LeftActions = memo(({ transX, isRead, width, onToggleReadPress, displayMode }: ILeftActionsProps) => { const { colors } = useTheme(); const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); - const animatedStyles = useAnimatedStyle(() => ({ - transform: [{ translateX: transX.value }] + const iconSlotWidth = getOpenWidth(width) / 2; + + const animatedButtonStyles = useAnimatedStyle(() => ({ + width: Math.max(transX.value, 0) })); const isCondensed = displayMode === DisplayMode.Condensed; @@ -43,23 +40,23 @@ export const LeftActions = memo(({ transX, isRead, width, onToggleReadPress, dis - - + + - - + + ); @@ -70,54 +67,37 @@ export const RightActions = memo(({ transX, favorite, width, toggleFav, onHidePr const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); - const animatedFavStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] })); + const iconSlotWidth = getOpenWidth(width) / 2; + const fullSwipeThreshold = getFullSwipeThreshold(width); - const translateXHide = useSharedValue(0); + const crossedThreshold = useSharedValue(false); + const expandProgress = useSharedValue(0); - const triggerHideAnimation = (toValue: number) => { + const triggerThresholdHaptic = () => { Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); - translateXHide.value = withSpring(toValue, { overshootClamping: true, mass: 0.7 }); }; useAnimatedReaction( - () => transX.value, - (currentTransX, previousTransX) => { - // Triggers the animation and hapticFeedback if swipe reaches/unreaches the threshold. - if (I18n.isRTL) { - if (previousTransX && currentTransX > LONG_SWIPE && previousTransX <= LONG_SWIPE) { - scheduleOnRN(triggerHideAnimation, ACTION_WIDTH); - } else if (previousTransX && currentTransX <= LONG_SWIPE && previousTransX > LONG_SWIPE) { - scheduleOnRN(triggerHideAnimation, 0); - } - } else if (previousTransX && currentTransX < -LONG_SWIPE && previousTransX >= -LONG_SWIPE) { - scheduleOnRN(triggerHideAnimation, -ACTION_WIDTH); - } else if (previousTransX && currentTransX >= -LONG_SWIPE && previousTransX < -LONG_SWIPE) { - scheduleOnRN(triggerHideAnimation, 0); + () => -transX.value >= fullSwipeThreshold, + isCrossed => { + if (isCrossed !== crossedThreshold.value) { + crossedThreshold.value = isCrossed; + expandProgress.value = withTiming(isCrossed ? 1 : 0, { duration: EXPAND_DURATION }); + scheduleOnRN(triggerThresholdHaptic); } } ); + const animatedFavStyles = useAnimatedStyle(() => { + const reveal = Math.max(-transX.value, 0); + const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); + return { width: favoriteWidth, right: reveal - favoriteWidth }; + }); + const animatedHideStyles = useAnimatedStyle(() => { - if (I18n.isRTL) { - if (transX.value < LONG_SWIPE && transX.value >= 2 * ACTION_WIDTH) { - const parallaxSwipe = interpolate( - transX.value, - [2 * ACTION_WIDTH, LONG_SWIPE], - [ACTION_WIDTH, ACTION_WIDTH + 0.1 * transX.value] - ); - return { transform: [{ translateX: parallaxSwipe + translateXHide.value }] }; - } - return { transform: [{ translateX: transX.value - ACTION_WIDTH + translateXHide.value }] }; - } - if (transX.value > -LONG_SWIPE && transX.value <= -2 * ACTION_WIDTH) { - const parallaxSwipe = interpolate( - transX.value, - [-2 * ACTION_WIDTH, -LONG_SWIPE], - [-ACTION_WIDTH, -ACTION_WIDTH + 0.1 * transX.value] - ); - return { transform: [{ translateX: parallaxSwipe + translateXHide.value }] }; - } - return { transform: [{ translateX: transX.value + ACTION_WIDTH + translateXHide.value }] }; + const reveal = Math.max(-transX.value, 0); + const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); + return { width: reveal - favoriteWidth }; }); const isCondensed = displayMode === DisplayMode.Condensed; @@ -130,49 +110,36 @@ export const RightActions = memo(({ transX, favorite, width, toggleFav, onHidePr accessibilityElementsHidden importantForAccessibility='no'> + style={[styles.actionRightButtonContainer, { backgroundColor: colors.statusFontWarning }, viewHeight, animatedFavStyles]}> - + + + - - + + + + diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 655aea9a762..0563921c965 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -9,7 +9,7 @@ import { import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../Touch'; -import { ACTION_WIDTH, LONG_SWIPE, SMALL_SWIPE, SWIPE_SPRING_CONFIG } from './styles'; +import { getOpenWidth, getFullSwipeThreshold, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; @@ -20,6 +20,11 @@ import { toggleRead } from '~/lib/methods/toggleRead'; import { hideRoom } from '~/lib/methods/hideRoom'; import { useAppSelector } from '~/lib/hooks/useAppSelector'; +const rubberband = (overshoot: number, dimension: number, constant = 0.55) => { + 'worklet'; + return (overshoot * dimension * constant) / (dimension + constant * Math.abs(overshoot)); +}; + const Touchable = ({ children, type, @@ -117,33 +122,28 @@ const Touchable = ({ const handleRelease = (event: GestureUpdateEvent) => { const { translationX } = event; valueRef.current += translationX; + const openWidth = getOpenWidth(width); + const fullSwipeThreshold = getFullSwipeThreshold(width); + const closeThreshold = openWidth / 2; let toValue = 0; let nextRowState = rowState.value; if (rowState.value === 0) { // if no option is opened - if (translationX > 0 && translationX < LONG_SWIPE) { - if (I18n.isRTL) { - toValue = 2 * ACTION_WIDTH; - } else { - toValue = ACTION_WIDTH; - } + if (translationX > 0 && translationX < fullSwipeThreshold) { + toValue = openWidth; nextRowState = -1; - } else if (translationX >= LONG_SWIPE) { + } else if (translationX >= fullSwipeThreshold) { toValue = 0; if (I18n.isRTL) { handleHideChannel(); } else { handleToggleRead(); } - } else if (translationX < 0 && translationX > -LONG_SWIPE) { + } else if (translationX < 0 && translationX > -fullSwipeThreshold) { // open trailing option if he swipe left - if (I18n.isRTL) { - toValue = -ACTION_WIDTH; - } else { - toValue = -2 * ACTION_WIDTH; - } + toValue = -openWidth; nextRowState = 1; - } else if (translationX <= -LONG_SWIPE) { + } else if (translationX <= -fullSwipeThreshold) { toValue = 0; nextRowState = 1; if (I18n.isRTL) { @@ -156,10 +156,10 @@ const Touchable = ({ } } else if (rowState.value === -1) { // if left option is opened - if (valueRef.current < SMALL_SWIPE) { + if (valueRef.current < closeThreshold) { toValue = 0; nextRowState = 0; - } else if (valueRef.current > LONG_SWIPE) { + } else if (valueRef.current > fullSwipeThreshold) { toValue = 0; nextRowState = 0; if (I18n.isRTL) { @@ -167,30 +167,26 @@ const Touchable = ({ } else { handleToggleRead(); } - } else if (I18n.isRTL) { - toValue = 2 * ACTION_WIDTH; } else { - toValue = ACTION_WIDTH; + toValue = openWidth; } } else if (rowState.value === 1) { // if right option is opened - if (valueRef.current > -2 * SMALL_SWIPE) { + if (valueRef.current > -closeThreshold) { toValue = 0; nextRowState = 0; - } else if (valueRef.current < -LONG_SWIPE) { + } else if (valueRef.current < -fullSwipeThreshold) { if (I18n.isRTL) { handleToggleRead(); } else { handleHideChannel(); } - } else if (I18n.isRTL) { - toValue = -ACTION_WIDTH; } else { - toValue = -2 * ACTION_WIDTH; + toValue = -openWidth; } } rowState.value = nextRowState; - transX.value = withSpring(toValue, SWIPE_SPRING_CONFIG); + transX.value = withSpring(toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); rowOffSet.value = toValue; valueRef.current = toValue; if (nextRowState !== 0) { @@ -215,8 +211,14 @@ const Touchable = ({ scheduleOnRN(handleTouchBegin, closedOtherRow); }) .onUpdate(event => { - transX.value = event.translationX + rowOffSet.value; - if (transX.value > 2 * width) transX.value = 2 * width; + const next = event.translationX + rowOffSet.value; + const boundary = getFullSwipeThreshold(width); + transX.value = + next > boundary + ? boundary + rubberband(next - boundary, width) + : next < -boundary + ? -boundary - rubberband(-next - boundary, width) + : next; }) .onEnd(event => { scheduleOnRN(handleRelease, event); diff --git a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap index cd35cf933d4..529e50b0bed 100644 --- a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap +++ b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap @@ -36,8 +36,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -46,68 +45,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -693,8 +717,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -703,68 +726,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -1394,8 +1442,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -1404,68 +1451,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -2095,8 +2167,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -2105,68 +2176,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -2796,8 +2892,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -2806,68 +2901,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -3497,8 +3617,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -3507,68 +3626,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -4198,8 +4342,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -4208,68 +4351,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -4899,8 +5067,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -4909,68 +5076,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -5600,8 +5792,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -5610,68 +5801,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -6301,8 +6517,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -6311,68 +6526,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -7002,8 +7242,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -7012,68 +7251,68 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -7707,8 +7971,7 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -7717,68 +7980,68 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -8347,8 +8635,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -8357,68 +8644,68 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -9048,8 +9360,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -9058,68 +9369,68 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -9749,8 +10085,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -9759,68 +10094,68 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -10429,8 +10789,7 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -10439,68 +10798,68 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -11071,8 +11455,7 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -11081,68 +11464,68 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -11648,8 +12056,7 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -11658,68 +12065,68 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -12269,8 +12701,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -12279,68 +12710,68 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -12963,8 +13419,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -12973,68 +13428,68 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -13657,8 +14137,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -13667,68 +14146,68 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -14312,8 +14816,7 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -14322,68 +14825,68 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -14976,8 +15504,7 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 60, @@ -14986,68 +15513,68 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -15645,8 +16197,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -15655,68 +16206,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -16318,8 +16894,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -16328,68 +16903,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -16991,8 +17591,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -17001,68 +17600,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -17664,8 +18288,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -17674,68 +18297,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -18337,8 +18985,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -18347,68 +18994,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -19075,8 +19747,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -19085,68 +19756,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -19813,8 +20509,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -19823,68 +20518,68 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -20556,8 +21276,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -20566,68 +21285,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -21192,8 +21936,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -21202,68 +21945,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -21828,8 +22596,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -21838,68 +22605,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -22464,8 +23256,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -22474,68 +23265,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -23100,8 +23916,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -23110,68 +23925,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -23736,8 +24576,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -23746,68 +24585,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -24372,8 +25236,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -24382,68 +25245,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -25008,8 +25896,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -25018,68 +25905,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -25644,8 +26556,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -25654,68 +26565,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -26280,8 +27216,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -26290,68 +27225,68 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -26921,8 +27881,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -26931,68 +27890,68 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -27596,8 +28580,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -27606,68 +28589,68 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -28309,8 +29317,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -28319,68 +29326,68 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -28984,8 +30016,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -28994,68 +30025,68 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -29701,8 +30757,7 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -29711,68 +30766,68 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -30341,8 +31421,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -30351,68 +31430,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -30985,8 +32089,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -30995,68 +32098,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -31621,8 +32749,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -31631,68 +32758,195 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - + + + +  + + + + + + + + - + - -  +  - - - - - - - - - -  - + - -  - + +  + + @@ -32257,8 +33409,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -32267,68 +33418,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -32893,8 +34069,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -32903,68 +34078,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -33529,138 +34729,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, - }, - { - "height": 75, - }, - [Function], - ] - } - > - - - - -  - - - - - - - - + +  + + + + + + + + + + -  - + +  + + - -  - + +  + + @@ -34165,8 +35389,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -34175,68 +35398,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -34801,8 +36049,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -34811,68 +36058,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -35437,8 +36709,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -35447,68 +36718,68 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + @@ -36078,8 +37374,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -36088,68 +37383,68 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` ] } > - - + - - - + + + + + +  + + + + + + - -  - - - - - - - -  - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + @@ -36722,8 +38042,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` }, { "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "left": 0, }, { "height": 75, @@ -36732,68 +38051,68 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` ] } > - - + - - - + + - -  - + +  + + - -  - + +  + + diff --git a/app/containers/RoomItem/styles.ts b/app/containers/RoomItem/styles.ts index e3de5dd10fd..d685c8913f6 100644 --- a/app/containers/RoomItem/styles.ts +++ b/app/containers/RoomItem/styles.ts @@ -1,15 +1,25 @@ import { StyleSheet } from 'react-native'; +import { ReduceMotion } from 'react-native-reanimated'; import sharedStyles from '~/views/Styles'; -export const ACTION_WIDTH = 80; -export const SMALL_SWIPE = ACTION_WIDTH / 2; -export const LONG_SWIPE = ACTION_WIDTH * 2.5; +export const OPEN_RATIO = 0.375; +export const FULL_SWIPE_RATIO = 0.53; + +export const getOpenWidth = (width: number) => { + 'worklet'; + return width * OPEN_RATIO; +}; +export const getFullSwipeThreshold = (width: number) => { + 'worklet'; + return width * FULL_SWIPE_RATIO; +}; + export const SWIPE_SPRING_CONFIG = { - overshootClamping: true, - damping: 20, - mass: 0.5, - stiffness: 200 + mass: 1, + stiffness: 150, + damping: 24.5, + reduceMotion: ReduceMotion.System }; export default StyleSheet.create({ @@ -94,7 +104,15 @@ export default StyleSheet.create({ top: 0 }, actionButton: { - width: ACTION_WIDTH, + width: '100%', + height: '100%', + flexDirection: 'row', + overflow: 'hidden' + }, + actionButtonContentEnd: { + justifyContent: 'flex-end' + }, + actionIconSlot: { height: '100%', alignItems: 'center', justifyContent: 'center' From 7ee5794e3aca74192c126f9e13757a1736ae2dce Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 16:18:17 -0300 Subject: [PATCH 34/55] fix(room-list): match left action width and tighten swipe release rules Left action opens to one action width like each right action. Haptic on the full-swipe threshold fires on both sides and only while the finger is down. Release opens a side only past half an action width; an open row stays open unless swiped fully closed. Release decision extracted to getSwipeRelease with tests. --- app/containers/RoomItem/Actions.tsx | 203 ++++++++++-------- app/containers/RoomItem/Touchable.tsx | 100 +++------ .../RoomItem/__tests__/swipeRelease.test.ts | 37 ++++ app/containers/RoomItem/interfaces.ts | 2 + app/containers/RoomItem/styles.ts | 4 + app/containers/RoomItem/swipeRelease.ts | 38 ++++ 6 files changed, 226 insertions(+), 158 deletions(-) create mode 100644 app/containers/RoomItem/__tests__/swipeRelease.test.ts create mode 100644 app/containers/RoomItem/swipeRelease.ts diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index 6b0def83a26..031dc9679b0 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -1,13 +1,19 @@ import { memo } from 'react'; import { View } from 'react-native'; -import Animated, { useAnimatedStyle, useAnimatedReaction, useSharedValue, withTiming } from 'react-native-reanimated'; +import Animated, { + type SharedValue, + useAnimatedStyle, + useAnimatedReaction, + useSharedValue, + withTiming +} from 'react-native-reanimated'; import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; import { scheduleOnRN } from 'react-native-worklets'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '~/lib/constants/constantDisplayMode'; -import styles, { getOpenWidth, getFullSwipeThreshold } from './styles'; +import styles, { getActionWidth, getFullSwipeThreshold } from './styles'; import { type ILeftActionsProps, type IRightActionsProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -17,12 +23,44 @@ const CONDENSED_ICON_SIZE = 24; const EXPANDED_ICON_SIZE = 28; const EXPAND_DURATION = 300; -export const LeftActions = memo(({ transX, isRead, width, onToggleReadPress, displayMode }: ILeftActionsProps) => { +const triggerThresholdHaptic = () => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); +}; + +const useFullSwipeProgress = ( + transX: SharedValue, + gestureActive: SharedValue, + width: number, + direction: 1 | -1 +) => { + const fullSwipeThreshold = getFullSwipeThreshold(width); + const crossedThreshold = useSharedValue(false); + const expandProgress = useSharedValue(0); + + useAnimatedReaction( + () => direction * transX.value >= fullSwipeThreshold, + isCrossed => { + if (isCrossed !== crossedThreshold.value) { + crossedThreshold.value = isCrossed; + expandProgress.value = withTiming(isCrossed ? 1 : 0, { duration: EXPAND_DURATION }); + if (gestureActive.value) { + scheduleOnRN(triggerThresholdHaptic); + } + } + } + ); + + return expandProgress; +}; + +export const LeftActions = memo(({ transX, gestureActive, isRead, width, onToggleReadPress, displayMode }: ILeftActionsProps) => { const { colors } = useTheme(); const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); - const iconSlotWidth = getOpenWidth(width) / 2; + const actionWidth = getActionWidth(width); + + useFullSwipeProgress(transX, gestureActive, width, 1); const animatedButtonStyles = useAnimatedStyle(() => ({ width: Math.max(transX.value, 0) @@ -49,7 +87,7 @@ export const LeftActions = memo(({ transX, isRead, width, onToggleReadPress, dis accessibilityLabel={I18n.t(isRead ? 'Mark_unread' : 'Mark_read')} style={[styles.actionButton, styles.actionButtonContentEnd]} onPress={onToggleReadPress}> - + { - const { colors } = useTheme(); - - const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); - - const iconSlotWidth = getOpenWidth(width) / 2; - const fullSwipeThreshold = getFullSwipeThreshold(width); - - const crossedThreshold = useSharedValue(false); - const expandProgress = useSharedValue(0); - - const triggerThresholdHaptic = () => { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); - }; - - useAnimatedReaction( - () => -transX.value >= fullSwipeThreshold, - isCrossed => { - if (isCrossed !== crossedThreshold.value) { - crossedThreshold.value = isCrossed; - expandProgress.value = withTiming(isCrossed ? 1 : 0, { duration: EXPAND_DURATION }); - scheduleOnRN(triggerThresholdHaptic); - } - } - ); - - const animatedFavStyles = useAnimatedStyle(() => { - const reveal = Math.max(-transX.value, 0); - const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); - return { width: favoriteWidth, right: reveal - favoriteWidth }; - }); - - const animatedHideStyles = useAnimatedStyle(() => { - const reveal = Math.max(-transX.value, 0); - const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); - return { width: reveal - favoriteWidth }; - }); - - const isCondensed = displayMode === DisplayMode.Condensed; - const viewHeight = { height: isCondensed ? rowHeightCondensed : rowHeight }; - - return ( - - - - - - - - - - - - - - - - - ); -}); +export const RightActions = memo( + ({ transX, gestureActive, favorite, width, toggleFav, onHidePress, displayMode }: IRightActionsProps) => { + const { colors } = useTheme(); + + const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); + + const actionWidth = getActionWidth(width); + const expandProgress = useFullSwipeProgress(transX, gestureActive, width, -1); + + const animatedFavStyles = useAnimatedStyle(() => { + const reveal = Math.max(-transX.value, 0); + const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); + return { width: favoriteWidth, right: reveal - favoriteWidth }; + }); + + const animatedHideStyles = useAnimatedStyle(() => { + const reveal = Math.max(-transX.value, 0); + const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); + return { width: reveal - favoriteWidth }; + }); + + const isCondensed = displayMode === DisplayMode.Condensed; + const viewHeight = { height: isCondensed ? rowHeightCondensed : rowHeight }; + + return ( + + + + + + + + + + + + + + + + + ); + } +); diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 0563921c965..199ab928fd1 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -9,8 +9,9 @@ import { import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../Touch'; -import { getOpenWidth, getFullSwipeThreshold, SWIPE_SPRING_CONFIG } from './styles'; +import { getOpenWidth, getActionWidth, getFullSwipeThreshold, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; +import { getSwipeRelease, type TRowState } from './swipeRelease'; import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; @@ -43,6 +44,7 @@ const Touchable = ({ const rowOffSet = useSharedValue(0); const transX = useSharedValue(0); const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened + const gestureActive = useSharedValue(false); const valueRef = useRef(0); const consumedTouchRef = useRef(false); const touchStartHandledRef = useRef(false); @@ -119,77 +121,28 @@ const Touchable = ({ } }; + const handleLeftFullSwipe = () => (I18n.isRTL ? handleHideChannel() : handleToggleRead()); + + const handleRightFullSwipe = () => (I18n.isRTL ? handleToggleRead() : handleHideChannel()); + const handleRelease = (event: GestureUpdateEvent) => { - const { translationX } = event; - valueRef.current += translationX; - const openWidth = getOpenWidth(width); - const fullSwipeThreshold = getFullSwipeThreshold(width); - const closeThreshold = openWidth / 2; - let toValue = 0; - let nextRowState = rowState.value; - if (rowState.value === 0) { - // if no option is opened - if (translationX > 0 && translationX < fullSwipeThreshold) { - toValue = openWidth; - nextRowState = -1; - } else if (translationX >= fullSwipeThreshold) { - toValue = 0; - if (I18n.isRTL) { - handleHideChannel(); - } else { - handleToggleRead(); - } - } else if (translationX < 0 && translationX > -fullSwipeThreshold) { - // open trailing option if he swipe left - toValue = -openWidth; - nextRowState = 1; - } else if (translationX <= -fullSwipeThreshold) { - toValue = 0; - nextRowState = 1; - if (I18n.isRTL) { - handleToggleRead(); - } else { - handleHideChannel(); - } - } else { - toValue = 0; - } - } else if (rowState.value === -1) { - // if left option is opened - if (valueRef.current < closeThreshold) { - toValue = 0; - nextRowState = 0; - } else if (valueRef.current > fullSwipeThreshold) { - toValue = 0; - nextRowState = 0; - if (I18n.isRTL) { - handleHideChannel(); - } else { - handleToggleRead(); - } - } else { - toValue = openWidth; - } - } else if (rowState.value === 1) { - // if right option is opened - if (valueRef.current > -closeThreshold) { - toValue = 0; - nextRowState = 0; - } else if (valueRef.current < -fullSwipeThreshold) { - if (I18n.isRTL) { - handleToggleRead(); - } else { - handleHideChannel(); - } - } else { - toValue = -openWidth; - } + const release = getSwipeRelease({ + rowState: rowState.value as TRowState, + offset: valueRef.current + event.translationX, + actionWidth: getActionWidth(width), + openWidth: getOpenWidth(width), + fullSwipeThreshold: getFullSwipeThreshold(width) + }); + if (release.fullSwipe === 'left') { + handleLeftFullSwipe(); + } else if (release.fullSwipe === 'right') { + handleRightFullSwipe(); } - rowState.value = nextRowState; - transX.value = withSpring(toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); - rowOffSet.value = toValue; - valueRef.current = toValue; - if (nextRowState !== 0) { + rowState.value = release.rowState; + transX.value = withSpring(release.toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); + rowOffSet.value = release.toValue; + valueRef.current = release.toValue; + if (release.rowState !== 0) { registerOpenSwipeItem({ rid, transX, rowState, rowOffSet }); } else { unregisterOpenSwipeItem(rid); @@ -207,6 +160,7 @@ const Touchable = ({ .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) .onBegin(() => { + gestureActive.value = true; const closedOtherRow = closeOpenSwipeItem(rid); scheduleOnRN(handleTouchBegin, closedOtherRow); }) @@ -221,7 +175,11 @@ const Touchable = ({ : next; }) .onEnd(event => { + gestureActive.value = false; scheduleOnRN(handleRelease, event); + }) + .onFinalize(() => { + gestureActive.value = false; }); // Use Race instead of Simultaneous to prevent conflicts @@ -243,6 +201,7 @@ const Touchable = ({ + getSwipeRelease({ rowState, offset, actionWidth, openWidth, fullSwipeThreshold }); + +const closed = { toValue: 0, rowState: 0, fullSwipe: null }; +const leftOpen = { toValue: actionWidth, rowState: -1, fullSwipe: null }; +const rightOpen = { toValue: -openWidth, rowState: 1, fullSwipe: null }; + +describe('getSwipeRelease', () => { + it.each([ + [0, 39, closed], + [0, 40, leftOpen], + [0, -39, closed], + [0, -40, rightOpen], + [0, 0, closed], + [-1, 1, leftOpen], + [-1, 200, leftOpen], + [-1, 0, closed], + [-1, -30, closed], + [1, -1, rightOpen], + [1, -200, rightOpen], + [1, 0, closed], + [1, 30, closed] + ] as [TRowState, number, object][])('from row state %i releasing at %i', (rowState, offset, expected) => { + expect(release(rowState, offset)).toEqual(expected); + }); + + it.each([-1, 0, 1] as TRowState[])('commits a full swipe from row state %i and closes', rowState => { + expect(release(rowState, fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'left' }); + expect(release(rowState, -fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'right' }); + }); +}); diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index b748aee603a..bcf508cb3be 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -12,6 +12,7 @@ import { export interface ILeftActionsProps { transX: SharedValue; + gestureActive: SharedValue; isRead: boolean; width: number; onToggleReadPress(): void; @@ -20,6 +21,7 @@ export interface ILeftActionsProps { export interface IRightActionsProps { transX: SharedValue; + gestureActive: SharedValue; favorite: boolean; width: number; toggleFav(): void; diff --git a/app/containers/RoomItem/styles.ts b/app/containers/RoomItem/styles.ts index d685c8913f6..ee46621c6c3 100644 --- a/app/containers/RoomItem/styles.ts +++ b/app/containers/RoomItem/styles.ts @@ -10,6 +10,10 @@ export const getOpenWidth = (width: number) => { 'worklet'; return width * OPEN_RATIO; }; +export const getActionWidth = (width: number) => { + 'worklet'; + return getOpenWidth(width) / 2; +}; export const getFullSwipeThreshold = (width: number) => { 'worklet'; return width * FULL_SWIPE_RATIO; diff --git a/app/containers/RoomItem/swipeRelease.ts b/app/containers/RoomItem/swipeRelease.ts new file mode 100644 index 00000000000..12a99bc0311 --- /dev/null +++ b/app/containers/RoomItem/swipeRelease.ts @@ -0,0 +1,38 @@ +export type TRowState = -1 | 0 | 1; + +export interface ISwipeRelease { + toValue: number; + rowState: TRowState; + fullSwipe: 'left' | 'right' | null; +} + +interface ISwipeReleaseInput { + rowState: TRowState; + offset: number; + actionWidth: number; + openWidth: number; + fullSwipeThreshold: number; +} + +const CLOSED: ISwipeRelease = { toValue: 0, rowState: 0, fullSwipe: null }; + +export const getSwipeRelease = ({ + rowState, + offset, + actionWidth, + openWidth, + fullSwipeThreshold +}: ISwipeReleaseInput): ISwipeRelease => { + if (offset >= fullSwipeThreshold) { + return { ...CLOSED, fullSwipe: 'left' }; + } + if (offset <= -fullSwipeThreshold) { + return { ...CLOSED, fullSwipe: 'right' }; + } + const side: TRowState = offset > 0 ? -1 : 1; + const openThreshold = rowState === 0 ? actionWidth / 2 : Number.MIN_VALUE; + if ((rowState !== 0 && rowState !== side) || Math.abs(offset) < openThreshold) { + return CLOSED; + } + return { toValue: side === -1 ? actionWidth : -openWidth, rowState: side, fullSwipe: null }; +}; From 59b5c8489868e45061aebb1aac99415a9b0edba8 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 16:44:47 -0300 Subject: [PATCH 35/55] fix(room-list): refresh row when its record changes Row read state, title, avatar and invite state now come from a useSyncExternalStore subscription to the record, since the compiler cached them on the in-place mutated record. The custom memo comparator is removed. Thread unreads count as unread, matching the badge. --- .../__tests__/RoomItemContainer.test.tsx | 71 +++++++++++++++++++ app/containers/RoomItem/index.tsx | 34 +++------ app/containers/RoomItem/useRecordValue.ts | 17 +++++ .../methods/helpers/__tests__/isRead.test.ts | 21 ++++++ app/lib/methods/helpers/helpers.ts | 2 +- 5 files changed, 118 insertions(+), 27 deletions(-) create mode 100644 app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx create mode 100644 app/containers/RoomItem/useRecordValue.ts create mode 100644 app/lib/methods/helpers/__tests__/isRead.test.ts diff --git a/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx b/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx new file mode 100644 index 00000000000..c6136477e38 --- /dev/null +++ b/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx @@ -0,0 +1,71 @@ +import { act, render } from '@testing-library/react-native'; +import { Subject } from 'rxjs'; + +import RoomItemContainer from '..'; +import { isRead } from '~/lib/methods/helpers'; + +jest.mock('../RoomItem', () => { + const { Text: MockText } = jest.requireActual('react-native'); + return ({ name, isRead: read }: { name: string; isRead: boolean }) => ( + {`${name}:${read ? 'read' : 'unread'}`} + ); +}); +jest.mock('../../ActionSheet', () => ({ useActionSheet: () => ({ showActionSheet: jest.fn() }) })); +jest.mock('~/lib/hooks/useAppSelector', () => ({ useAppSelector: () => '7.0.0' })); + +const createRecord = () => { + const changes = new Subject(); + const record = { + rid: 'rid', + t: 'c', + name: 'general', + fname: 'general', + open: true, + archived: false, + alert: true, + unread: 3, + tunread: [], + observe: () => changes + }; + return { record, changes }; +}; + +const renderRow = (record: ReturnType['record']) => + render( + room.fname} + getRoomAvatar={() => ''} + getIsRead={isRead} + swipeEnabled + /> + ); + +describe('RoomItemContainer', () => { + it('reflects in-place record updates after the record emits', () => { + const { record, changes } = createRecord(); + const { getByText } = renderRow(record); + expect(getByText('general:unread')).toBeTruthy(); + + record.alert = false; + record.unread = 0; + record.fname = 'renamed'; + act(() => changes.next()); + + expect(getByText('renamed:read')).toBeTruthy(); + }); + + it('unsubscribes from the record on unmount', () => { + const { record, changes } = createRecord(); + const { unmount } = renderRow(record); + unmount(); + expect(changes.observed).toBe(false); + }); +}); diff --git a/app/containers/RoomItem/index.tsx b/app/containers/RoomItem/index.tsx index 3e530fb9c01..782beb7c997 100644 --- a/app/containers/RoomItem/index.tsx +++ b/app/containers/RoomItem/index.tsx @@ -1,5 +1,4 @@ -import { useEffect, useReducer, useRef, memo } from 'react'; -import { type Subscription } from 'rxjs'; +import { memo } from 'react'; import { AccessibilityInfo } from 'react-native'; import { useActionSheet } from '../ActionSheet'; @@ -11,8 +10,7 @@ import RoomItem from './RoomItem'; import { getRoomActionsOptions } from './getRoomActionsOptions'; import { isInviteSubscription } from '~/lib/methods/isInviteSubscription'; import { isExternalKeyboardConnected } from '~/lib/methods/helpers/externalInput'; - -const attrs = ['width', 'isFocused', 'showLastMessage', 'autoJoin', 'showAvatar', 'displayMode']; +import { useRecordValue } from './useRecordValue'; const RoomItemContainer = memo( ({ @@ -35,31 +33,16 @@ const RoomItemContainer = memo( }: IRoomItemContainerProps) => { const { showActionSheet } = useActionSheet(); const serverVersion = useAppSelector(state => state.server.version); - const name = getRoomTitle(item); + const name = useRecordValue(item, getRoomTitle); const testID = `rooms-list-view-item-${name}`; - const avatar = getRoomAvatar(item); - const isRead = getIsRead(item); + const avatar = useRecordValue(item, getRoomAvatar); + const isRead = useRecordValue(item, getIsRead); + const isInvited = useRecordValue(item, isInviteSubscription); const date = item.roomUpdatedAt && formatDate(item.roomUpdatedAt); const alert = item.alert || item.tunread?.length; - const [_, forceUpdate] = useReducer(x => x + 1, 1); - const roomSubscription = useRef(null); const userId = item.t === 'd' && id && !isGroupChat(item) ? id : null; const accessibilityDate = formatDateAccessibility(item.roomUpdatedAt); - useEffect(() => { - const init = () => { - if (item?.observe) { - const observable = item.observe(); - roomSubscription.current = observable?.subscribe?.(() => { - if (_) forceUpdate(); - }); - } - }; - init(); - - return () => roomSubscription.current?.unsubscribe(); - }, []); - const handleOnPress = () => onPress(item); const handleOnLongPress = async () => { @@ -89,7 +72,7 @@ const RoomItemContainer = memo( name={name} avatar={avatar} isGroupChat={isGroupChat(item)} - isInvited={isInviteSubscription(item)} + isInvited={isInvited} isRead={isRead} onPress={handleOnPress} onLongPress={handleOnLongPress} @@ -126,8 +109,7 @@ const RoomItemContainer = memo( abacAttributes={item.abacAttributes} /> ); - }, - (props, nextProps) => attrs.every(key => props[key] === nextProps[key]) + } ); export default RoomItemContainer; diff --git a/app/containers/RoomItem/useRecordValue.ts b/app/containers/RoomItem/useRecordValue.ts new file mode 100644 index 00000000000..fb85f5d4cf7 --- /dev/null +++ b/app/containers/RoomItem/useRecordValue.ts @@ -0,0 +1,17 @@ +import { useSyncExternalStore } from 'react'; +import { type Observable } from 'rxjs'; + +interface IObservableRecord { + observe?: () => Observable; +} + +export const useRecordValue = ( + item: TRecord, + select: (item: TRecord) => TValue +): TValue => { + const subscribe = (onRecordChange: () => void) => { + const subscription = item.observe?.().subscribe(onRecordChange); + return () => subscription?.unsubscribe(); + }; + return useSyncExternalStore(subscribe, () => select(item)); +}; diff --git a/app/lib/methods/helpers/__tests__/isRead.test.ts b/app/lib/methods/helpers/__tests__/isRead.test.ts new file mode 100644 index 00000000000..5f1a576ac84 --- /dev/null +++ b/app/lib/methods/helpers/__tests__/isRead.test.ts @@ -0,0 +1,21 @@ +import { isRead } from '../helpers'; + +const openRoom = { open: true, archived: false, unread: 0, alert: false, tunread: [] as string[] }; + +describe('isRead', () => { + it('is read when there are no unreads', () => { + expect(isRead(openRoom)).toBe(true); + }); + + it('is unread when there are unread messages', () => { + expect(isRead({ ...openRoom, unread: 2 })).toBe(false); + }); + + it('is unread when only threads have unread messages', () => { + expect(isRead({ ...openRoom, tunread: ['tmid'] })).toBe(false); + }); + + it('is read when the room is archived even with thread unreads', () => { + expect(isRead({ ...openRoom, archived: true, tunread: ['tmid'] })).toBe(true); + }); +}); diff --git a/app/lib/methods/helpers/helpers.ts b/app/lib/methods/helpers/helpers.ts index 1280a9474b4..322b95420ce 100644 --- a/app/lib/methods/helpers/helpers.ts +++ b/app/lib/methods/helpers/helpers.ts @@ -81,7 +81,7 @@ export function canAutoTranslate() { export function isRead(item) { let isUnread = item.archived !== true && item.open === true; // item is not archived and not opened - isUnread = isUnread && (item.unread > 0 || item.alert === true); // either its unread count > 0 or its alert + isUnread = isUnread && (item.unread > 0 || item.alert === true || item.tunread?.length > 0); return !isUnread; } From a4ee602addfd0011e1a0057d9bf47474fbbbc964 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 16:44:51 -0300 Subject: [PATCH 36/55] refactor(room-list): write gesture flag with shared value set --- app/containers/RoomItem/Touchable.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 199ab928fd1..cb858561b2e 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -160,7 +160,7 @@ const Touchable = ({ .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling .enabled(swipeEnabled) .onBegin(() => { - gestureActive.value = true; + gestureActive.set(true); const closedOtherRow = closeOpenSwipeItem(rid); scheduleOnRN(handleTouchBegin, closedOtherRow); }) @@ -175,11 +175,11 @@ const Touchable = ({ : next; }) .onEnd(event => { - gestureActive.value = false; + gestureActive.set(false); scheduleOnRN(handleRelease, event); }) .onFinalize(() => { - gestureActive.value = false; + gestureActive.set(false); }); // Use Race instead of Simultaneous to prevent conflicts From f1f018071b29f5c5620287b5497172bb2ba57072 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 23 Sep 2026 16:44:57 -0300 Subject: [PATCH 37/55] fix(a11y): close drawer when navigating to the focused sidebar route (#7717) * fix(a11y): close drawer when navigating to the focused sidebar route Tapping a sidebar entry for the route already focused left the drawer open, because the drawer router only closes it when the focused index changes. Subsequent taps were swallowed by the drawer scrim. * chore(e2e): map ToastsAndDialogs flow to SidebarView The flow reaches Accessibility & appearance through the sidebar, so a change under app/views/SidebarView can break it. Without this the impact analysis never selects its shard for sidebar-only changes. --- .sniffler/test-map.json | 2 +- .../methods/__tests__/sidebarNavigate.test.ts | 29 +++++++++++++++++++ .../SidebarView/methods/sidebarNavigate.ts | 3 ++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 app/views/SidebarView/methods/__tests__/sidebarNavigate.test.ts diff --git a/.sniffler/test-map.json b/.sniffler/test-map.json index 7c9e3c8bd7c..027e9323988 100644 --- a/.sniffler/test-map.json +++ b/.sniffler/test-map.json @@ -1,7 +1,7 @@ [ { "test": ".maestro/tests/accessibilityAndAppearance/ToastsAndDialogs.yml", - "dependsOn": ["app/views/StatusView/**"] + "dependsOn": ["app/views/StatusView/**", "app/views/SidebarView/**"] }, { "test": ".maestro/tests/assorted/accessibility-and-appearance.yaml", diff --git a/app/views/SidebarView/methods/__tests__/sidebarNavigate.test.ts b/app/views/SidebarView/methods/__tests__/sidebarNavigate.test.ts new file mode 100644 index 00000000000..d1dda82be21 --- /dev/null +++ b/app/views/SidebarView/methods/__tests__/sidebarNavigate.test.ts @@ -0,0 +1,29 @@ +import { sidebarNavigate } from '../sidebarNavigate'; +import Navigation from '~/lib/navigation/appNavigation'; + +jest.mock('~/lib/methods/helpers/log', () => ({ + events: {}, + logEvent: jest.fn() +})); + +const mockNavigate = jest.fn(); +const mockDispatch = jest.fn(); + +describe('sidebarNavigate', () => { + beforeEach(() => { + jest.clearAllMocks(); + Navigation.navigationRef.current = { navigate: mockNavigate, dispatch: mockDispatch } as any; + }); + + it('navigates to the route', () => { + sidebarNavigate('AccessibilityStackNavigator'); + + expect(mockNavigate).toHaveBeenCalledWith('AccessibilityStackNavigator', undefined); + }); + + it('closes the drawer even when navigating to the focused route', () => { + sidebarNavigate('AccessibilityStackNavigator'); + + expect(mockDispatch).toHaveBeenCalledWith(expect.objectContaining({ type: 'CLOSE_DRAWER' })); + }); +}); diff --git a/app/views/SidebarView/methods/sidebarNavigate.ts b/app/views/SidebarView/methods/sidebarNavigate.ts index 07cc3fc6f11..064ba9fb57f 100644 --- a/app/views/SidebarView/methods/sidebarNavigate.ts +++ b/app/views/SidebarView/methods/sidebarNavigate.ts @@ -1,3 +1,5 @@ +import { DrawerActions } from '@react-navigation/native'; + import Navigation from '~/lib/navigation/appNavigation'; import { events, logEvent } from '~/lib/methods/helpers/log'; @@ -5,4 +7,5 @@ export const sidebarNavigate = (route: string) => { // @ts-ignore logEvent(events[`SIDEBAR_GO_${route.replace('StackNavigator', '').replace('View', '').toUpperCase()}`]); Navigation.navigate(route); + Navigation.dispatch(DrawerActions.closeDrawer()); }; From e316723d51bf33c2d5513f9f1eb9b28a02f376cd Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:10:17 -0300 Subject: [PATCH 38/55] fix(room-list): show selected room tint only in master-detail On iPhone the row got the tablet selected-room tint while the room was subscribed, so a tap flashed a second time before navigating and the row stayed tinted during the interactive back-swipe. --- app/views/RoomsListView/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/RoomsListView/index.tsx b/app/views/RoomsListView/index.tsx index b998c8a6953..1ca0506b51f 100644 --- a/app/views/RoomsListView/index.tsx +++ b/app/views/RoomsListView/index.tsx @@ -98,7 +98,7 @@ const RoomsListView = memo(function RoomsListView() { getRoomTitle={getRoomTitle} getRoomAvatar={getRoomAvatar} getIsRead={isRead} - isFocused={subscribedRoom === item.rid} + isFocused={isMasterDetail && subscribedRoom === item.rid} swipeEnabled={swipeEnabled} showAvatar={showAvatar} displayMode={displayMode} From 7fae6488d3ccb00fe823d17e0ec3b4647bc7d0c2 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:13:38 -0300 Subject: [PATCH 39/55] fix(room-list): re-render row on every record change --- .../__tests__/RoomItemContainer.test.tsx | 18 ++++++++++++++---- app/containers/RoomItem/index.tsx | 17 +++++++++++------ app/containers/RoomItem/useRecordValue.ts | 17 ----------------- 3 files changed, 25 insertions(+), 27 deletions(-) delete mode 100644 app/containers/RoomItem/useRecordValue.ts diff --git a/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx b/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx index c6136477e38..51cfe03c7ec 100644 --- a/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx +++ b/app/containers/RoomItem/__tests__/RoomItemContainer.test.tsx @@ -6,8 +6,8 @@ import { isRead } from '~/lib/methods/helpers'; jest.mock('../RoomItem', () => { const { Text: MockText } = jest.requireActual('react-native'); - return ({ name, isRead: read }: { name: string; isRead: boolean }) => ( - {`${name}:${read ? 'read' : 'unread'}`} + return ({ name, isRead: read, unread }: { name: string; isRead: boolean; unread: number }) => ( + {`${name}:${read ? 'read' : 'unread'}:${unread}`} ); }); jest.mock('../../ActionSheet', () => ({ useActionSheet: () => ({ showActionSheet: jest.fn() }) })); @@ -52,14 +52,24 @@ describe('RoomItemContainer', () => { it('reflects in-place record updates after the record emits', () => { const { record, changes } = createRecord(); const { getByText } = renderRow(record); - expect(getByText('general:unread')).toBeTruthy(); + expect(getByText('general:unread:3')).toBeTruthy(); record.alert = false; record.unread = 0; record.fname = 'renamed'; act(() => changes.next()); - expect(getByText('renamed:read')).toBeTruthy(); + expect(getByText('renamed:read:0')).toBeTruthy(); + }); + + it('reflects an unread count change while the row stays unread', () => { + const { record, changes } = createRecord(); + const { getByText } = renderRow(record); + + record.unread = 4; + act(() => changes.next()); + + expect(getByText('general:unread:4')).toBeTruthy(); }); it('unsubscribes from the record on unmount', () => { diff --git a/app/containers/RoomItem/index.tsx b/app/containers/RoomItem/index.tsx index 782beb7c997..345e223aa4d 100644 --- a/app/containers/RoomItem/index.tsx +++ b/app/containers/RoomItem/index.tsx @@ -1,4 +1,4 @@ -import { memo } from 'react'; +import { memo, useEffect, useReducer } from 'react'; import { AccessibilityInfo } from 'react-native'; import { useActionSheet } from '../ActionSheet'; @@ -10,7 +10,6 @@ import RoomItem from './RoomItem'; import { getRoomActionsOptions } from './getRoomActionsOptions'; import { isInviteSubscription } from '~/lib/methods/isInviteSubscription'; import { isExternalKeyboardConnected } from '~/lib/methods/helpers/externalInput'; -import { useRecordValue } from './useRecordValue'; const RoomItemContainer = memo( ({ @@ -31,13 +30,19 @@ const RoomItemContainer = memo( getIsRead = () => false, swipeEnabled = true }: IRoomItemContainerProps) => { + 'use no memo'; + const [, forceUpdate] = useReducer((version: number) => version + 1, 0); + useEffect(() => { + const subscription = item.observe?.().subscribe(forceUpdate); + return () => subscription?.unsubscribe(); + }, [item]); const { showActionSheet } = useActionSheet(); const serverVersion = useAppSelector(state => state.server.version); - const name = useRecordValue(item, getRoomTitle); + const name = getRoomTitle(item); const testID = `rooms-list-view-item-${name}`; - const avatar = useRecordValue(item, getRoomAvatar); - const isRead = useRecordValue(item, getIsRead); - const isInvited = useRecordValue(item, isInviteSubscription); + const avatar = getRoomAvatar(item); + const isRead = getIsRead(item); + const isInvited = isInviteSubscription(item); const date = item.roomUpdatedAt && formatDate(item.roomUpdatedAt); const alert = item.alert || item.tunread?.length; const userId = item.t === 'd' && id && !isGroupChat(item) ? id : null; diff --git a/app/containers/RoomItem/useRecordValue.ts b/app/containers/RoomItem/useRecordValue.ts deleted file mode 100644 index fb85f5d4cf7..00000000000 --- a/app/containers/RoomItem/useRecordValue.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useSyncExternalStore } from 'react'; -import { type Observable } from 'rxjs'; - -interface IObservableRecord { - observe?: () => Observable; -} - -export const useRecordValue = ( - item: TRecord, - select: (item: TRecord) => TValue -): TValue => { - const subscribe = (onRecordChange: () => void) => { - const subscription = item.observe?.().subscribe(onRecordChange); - return () => subscription?.unsubscribe(); - }; - return useSyncExternalStore(subscribe, () => select(item)); -}; From c3268bca7c34970be863051cf13a7412c92bb556 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:13:41 -0300 Subject: [PATCH 40/55] fix(room-list): read swipe offset from shared value --- app/containers/RoomItem/Touchable.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index cb858561b2e..dbe30bccf16 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -45,7 +45,6 @@ const Touchable = ({ const transX = useSharedValue(0); const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened const gestureActive = useSharedValue(false); - const valueRef = useRef(0); const consumedTouchRef = useRef(false); const touchStartHandledRef = useRef(false); @@ -61,7 +60,6 @@ const Touchable = ({ rowState.value = 0; transX.value = withSpring(0, SWIPE_SPRING_CONFIG); rowOffSet.value = 0; - valueRef.current = 0; unregisterOpenSwipeItem(rid); }; @@ -128,7 +126,7 @@ const Touchable = ({ const handleRelease = (event: GestureUpdateEvent) => { const release = getSwipeRelease({ rowState: rowState.value as TRowState, - offset: valueRef.current + event.translationX, + offset: rowOffSet.value + event.translationX, actionWidth: getActionWidth(width), openWidth: getOpenWidth(width), fullSwipeThreshold: getFullSwipeThreshold(width) @@ -141,7 +139,6 @@ const Touchable = ({ rowState.value = release.rowState; transX.value = withSpring(release.toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); rowOffSet.value = release.toValue; - valueRef.current = release.toValue; if (release.rowState !== 0) { registerOpenSwipeItem({ rid, transX, rowState, rowOffSet }); } else { From 4718502c03c0abfdde02237a3686b5bf0128e0dd Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:13:44 -0300 Subject: [PATCH 41/55] test(room-list): assert close resets translation --- app/containers/RoomItem/__tests__/openSwipeItem.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts index 92610ebcf89..0ad9f7fc5c0 100644 --- a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -23,6 +23,7 @@ describe('closeOpenSwipeItem', () => { expect(item.rowState.value).toBe(0); expect(item.rowOffSet.value).toBe(0); + expect(item.transX.value).toBe(0); expect(consumed).toBe(true); }); From 26af173f5386ea40879853cbfa2ce598d3e25685 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:18:01 -0300 Subject: [PATCH 42/55] refactor(room-list): observe row record without opting out of the compiler --- app/containers/RoomItem/index.tsx | 68 ++++++++++------------ app/containers/RoomItem/useRoomSnapshot.ts | 12 ++++ 2 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 app/containers/RoomItem/useRoomSnapshot.ts diff --git a/app/containers/RoomItem/index.tsx b/app/containers/RoomItem/index.tsx index 345e223aa4d..d7cf597d08f 100644 --- a/app/containers/RoomItem/index.tsx +++ b/app/containers/RoomItem/index.tsx @@ -1,4 +1,4 @@ -import { memo, useEffect, useReducer } from 'react'; +import { memo } from 'react'; import { AccessibilityInfo } from 'react-native'; import { useActionSheet } from '../ActionSheet'; @@ -10,6 +10,7 @@ import RoomItem from './RoomItem'; import { getRoomActionsOptions } from './getRoomActionsOptions'; import { isInviteSubscription } from '~/lib/methods/isInviteSubscription'; import { isExternalKeyboardConnected } from '~/lib/methods/helpers/externalInput'; +import { useRoomSnapshot } from './useRoomSnapshot'; const RoomItemContainer = memo( ({ @@ -30,23 +31,18 @@ const RoomItemContainer = memo( getIsRead = () => false, swipeEnabled = true }: IRoomItemContainerProps) => { - 'use no memo'; - const [, forceUpdate] = useReducer((version: number) => version + 1, 0); - useEffect(() => { - const subscription = item.observe?.().subscribe(forceUpdate); - return () => subscription?.unsubscribe(); - }, [item]); + const room = useRoomSnapshot(item); const { showActionSheet } = useActionSheet(); const serverVersion = useAppSelector(state => state.server.version); - const name = getRoomTitle(item); + const name = getRoomTitle(room); const testID = `rooms-list-view-item-${name}`; - const avatar = getRoomAvatar(item); - const isRead = getIsRead(item); - const isInvited = isInviteSubscription(item); - const date = item.roomUpdatedAt && formatDate(item.roomUpdatedAt); - const alert = item.alert || item.tunread?.length; - const userId = item.t === 'd' && id && !isGroupChat(item) ? id : null; - const accessibilityDate = formatDateAccessibility(item.roomUpdatedAt); + const avatar = getRoomAvatar(room); + const isRead = getIsRead(room); + const isInvited = isInviteSubscription(room); + const date = room.roomUpdatedAt && formatDate(room.roomUpdatedAt); + const alert = room.alert || room.tunread?.length; + const userId = room.t === 'd' && id && !isGroupChat(room) ? id : null; + const accessibilityDate = formatDateAccessibility(room.roomUpdatedAt); const handleOnPress = () => onPress(item); @@ -63,10 +59,10 @@ const RoomItemContainer = memo( } showActionSheet({ options: getRoomActionsOptions({ - rid: item.rid, - type: item.t, + rid: room.rid, + type: room.t, isRead, - favorite: !!item.f, + favorite: !!room.f, serverVersion }) }); @@ -76,7 +72,7 @@ const RoomItemContainer = memo( ); } diff --git a/app/containers/RoomItem/useRoomSnapshot.ts b/app/containers/RoomItem/useRoomSnapshot.ts new file mode 100644 index 00000000000..1606e0caec7 --- /dev/null +++ b/app/containers/RoomItem/useRoomSnapshot.ts @@ -0,0 +1,12 @@ +import { useEffect, useState } from 'react'; + +const takeSnapshot = (item: any) => (item.asPlain ? item.asPlain() : { ...item }); + +export const useRoomSnapshot = (item: any) => { + const [observed, setObserved] = useState<{ source: any; room: any } | null>(null); + useEffect(() => { + const subscription = item.observe?.().subscribe(() => setObserved({ source: item, room: takeSnapshot(item) })); + return () => subscription?.unsubscribe(); + }, [item]); + return observed && observed.source === item ? observed.room : takeSnapshot(item); +}; From ca7b341adf1b1dd633cf5cd073a4fb0a3db5887c Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:28:21 -0300 Subject: [PATCH 43/55] fix(room-list): reset closed-row tap guard on every touch --- app/containers/RoomItem/Touchable.tsx | 14 ---- .../RoomItem/__tests__/Touchable.test.tsx | 66 +++++++++++++++++++ 2 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 app/containers/RoomItem/__tests__/Touchable.test.tsx diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index dbe30bccf16..07e87f89938 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -46,13 +46,8 @@ const Touchable = ({ const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened const gestureActive = useSharedValue(false); const consumedTouchRef = useRef(false); - const touchStartHandledRef = useRef(false); const handleTouchBegin = (closedOtherRow: boolean) => { - if (touchStartHandledRef.current) { - return; - } - touchStartHandledRef.current = true; consumedTouchRef.current = closedOtherRow; }; @@ -89,7 +84,6 @@ const Touchable = ({ }; const handlePress = () => { - touchStartHandledRef.current = false; if (rowState.value !== 0) { close(); return; @@ -104,7 +98,6 @@ const Touchable = ({ }; const handleLongPress = () => { - touchStartHandledRef.current = false; if (rowState.value !== 0) { close(); return; @@ -183,12 +176,6 @@ const Touchable = ({ // Pan gesture will take priority over long press for horizontal swipes const composedGesture = Gesture.Race(panGesture, longPressGesture); - const handleActiveStateChange = (active: boolean) => { - if (!active) { - touchStartHandledRef.current = false; - } - }; - const animatedStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] })); @@ -217,7 +204,6 @@ const Touchable = ({ diff --git a/app/containers/RoomItem/__tests__/Touchable.test.tsx b/app/containers/RoomItem/__tests__/Touchable.test.tsx new file mode 100644 index 00000000000..44c015eef6c --- /dev/null +++ b/app/containers/RoomItem/__tests__/Touchable.test.tsx @@ -0,0 +1,66 @@ +import { act, fireEvent, render } from '@testing-library/react-native'; +import { Text } from 'react-native'; +import { Gesture, State } from 'react-native-gesture-handler'; +import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; +import { makeMutable, useSharedValue } from 'react-native-reanimated'; + +import Touchable from '../Touchable'; +import { registerOpenSwipeItem, unregisterOpenSwipeItem } from '../openSwipeItem'; +import { SubscriptionType } from '~/definitions'; + +jest.mock('~/lib/hooks/useAppSelector', () => ({ useAppSelector: () => '7.0.0' })); + +const setup = () => { + jest.mocked(useSharedValue).mockImplementation(init => { + const shared = { value: init, set: (next: typeof init) => (shared.value = next) }; + return shared as unknown as ReturnType; + }); + const pan = jest.spyOn(Gesture, 'Pan'); + const onPress = jest.fn(); + const { getByText } = render( + + row + + ); + return { gesture: pan.mock.results[0].value, onPress, pressRow: () => fireEvent.press(getByText('row')) }; +}; + +const touchWithoutSwipe = [ + { state: State.BEGAN, translationX: 0, velocityX: 0 }, + { state: State.FAILED, translationX: 0, velocityX: 0 } +]; + +afterEach(() => { + unregisterOpenSwipeItem('roomA'); + jest.restoreAllMocks(); +}); + +test('a tap after a touch that closed another row without pressing still opens the room', async () => { + const { gesture, onPress, pressRow } = setup(); + registerOpenSwipeItem({ rid: 'roomA', transX: makeMutable(80), rowState: makeMutable(1), rowOffSet: makeMutable(80) }); + await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); + + await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); + pressRow(); + + expect(onPress).toHaveBeenCalledTimes(1); +}); + +test('a tap that closed another row does not open the room', async () => { + const { gesture, onPress, pressRow } = setup(); + registerOpenSwipeItem({ rid: 'roomA', transX: makeMutable(80), rowState: makeMutable(1), rowOffSet: makeMutable(80) }); + + await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); + pressRow(); + + expect(onPress).not.toHaveBeenCalled(); +}); From f3ac0f75fd326211a4ac1f6e067d927767c97582 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 12:29:12 -0300 Subject: [PATCH 44/55] fix(room-list): close previously open row when another row opens --- .../RoomItem/__tests__/openSwipeItem.test.ts | 10 ++++++++++ app/containers/RoomItem/openSwipeItem.ts | 11 ++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts index 0ad9f7fc5c0..af0220449b5 100644 --- a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -42,4 +42,14 @@ describe('closeOpenSwipeItem', () => { expect(item.rowState.value).toBe(1); expect(consumed).toBe(false); }); + + it('closes the previously open item when another one registers', () => { + const previous = createItem('roomA'); + registerOpenSwipeItem(previous); + + registerOpenSwipeItem(createItem('roomB')); + + expect(previous.rowState.value).toBe(0); + expect(previous.transX.value).toBe(0); + }); }); diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index 73171c51fce..b807e067a0b 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -11,11 +11,6 @@ type OpenSwipeItem = { export const openSwipeItem = makeMutable(null); -export const registerOpenSwipeItem = (item: OpenSwipeItem) => { - 'worklet'; - openSwipeItem.value = item; -}; - export const unregisterOpenSwipeItem = (rid: string) => { 'worklet'; if (openSwipeItem.value?.rid === rid) { @@ -35,3 +30,9 @@ export const closeOpenSwipeItem = (exceptRid?: string) => { } return false; }; + +export const registerOpenSwipeItem = (item: OpenSwipeItem) => { + 'worklet'; + closeOpenSwipeItem(item.rid); + openSwipeItem.value = item; +}; From ebc314c7b0df44fc5dedb8baeea9bbda2ffdce8a Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Thu, 24 Sep 2026 15:27:00 -0300 Subject: [PATCH 45/55] refactor(room-list): address review feedback --- app/containers/RoomItem/Touchable.tsx | 55 ++++++------------- .../RoomItem/__tests__/Touchable.test.tsx | 15 ++++- .../RoomItem/__tests__/openSwipeItem.test.ts | 3 +- app/containers/RoomItem/openSwipeItem.ts | 14 +++-- app/containers/RoomItem/useRoomSnapshot.ts | 39 ++++++++++--- 5 files changed, 71 insertions(+), 55 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 07e87f89938..56e34850385 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -12,7 +12,7 @@ import Touch from '../Touch'; import { getOpenWidth, getActionWidth, getFullSwipeThreshold, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; import { getSwipeRelease, type TRowState } from './swipeRelease'; -import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from './openSwipeItem'; +import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem, resetSwipeRow } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -43,7 +43,7 @@ const Touchable = ({ const serverVersion = useAppSelector(state => state.server.version); const rowOffSet = useSharedValue(0); const transX = useSharedValue(0); - const rowState = useSharedValue(0); // 0: closed, 1: right opened, -1: left opened + const rowState = useSharedValue(0); const gestureActive = useSharedValue(false); const consumedTouchRef = useRef(false); @@ -52,9 +52,7 @@ const Touchable = ({ }; const close = () => { - rowState.value = 0; - transX.value = withSpring(0, SWIPE_SPRING_CONFIG); - rowOffSet.value = 0; + resetSwipeRow({ transX, rowState, rowOffSet }); unregisterOpenSwipeItem(rid); }; @@ -65,25 +63,21 @@ const Touchable = ({ close(); }; - const handleToggleRead = () => { - toggleRead(rid, isRead, serverVersion); - }; + const toggleReadRoom = () => toggleRead(rid, isRead, serverVersion); - const handleHideChannel = () => { - hideRoom(rid, type); - }; + const hideChannel = () => hideRoom(rid, type); const onToggleReadPress = () => { - handleToggleRead(); + toggleReadRoom(); close(); }; const onHidePress = () => { - handleHideChannel(); + hideChannel(); close(); }; - const handlePress = () => { + const guardTouch = (action?: () => void) => () => { if (rowState.value !== 0) { close(); return; @@ -92,42 +86,25 @@ const Touchable = ({ consumedTouchRef.current = false; return; } - if (onPress) { - onPress(); - } - }; - - const handleLongPress = () => { - if (rowState.value !== 0) { - close(); - return; - } - if (consumedTouchRef.current) { - consumedTouchRef.current = false; - return; - } - - if (onLongPress) { - onLongPress(); - } + action?.(); }; - const handleLeftFullSwipe = () => (I18n.isRTL ? handleHideChannel() : handleToggleRead()); + const handlePress = guardTouch(onPress); - const handleRightFullSwipe = () => (I18n.isRTL ? handleToggleRead() : handleHideChannel()); + const handleLongPress = guardTouch(onLongPress); const handleRelease = (event: GestureUpdateEvent) => { const release = getSwipeRelease({ - rowState: rowState.value as TRowState, + rowState: rowState.value, offset: rowOffSet.value + event.translationX, actionWidth: getActionWidth(width), openWidth: getOpenWidth(width), fullSwipeThreshold: getFullSwipeThreshold(width) }); - if (release.fullSwipe === 'left') { - handleLeftFullSwipe(); - } else if (release.fullSwipe === 'right') { - handleRightFullSwipe(); + if (release.fullSwipe === (I18n.isRTL ? 'left' : 'right')) { + hideChannel(); + } else if (release.fullSwipe) { + toggleReadRoom(); } rowState.value = release.rowState; transX.value = withSpring(release.toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); diff --git a/app/containers/RoomItem/__tests__/Touchable.test.tsx b/app/containers/RoomItem/__tests__/Touchable.test.tsx index 44c015eef6c..f2c0eddf9a1 100644 --- a/app/containers/RoomItem/__tests__/Touchable.test.tsx +++ b/app/containers/RoomItem/__tests__/Touchable.test.tsx @@ -5,6 +5,7 @@ import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; import { makeMutable, useSharedValue } from 'react-native-reanimated'; import Touchable from '../Touchable'; +import { type TRowState } from '../swipeRelease'; import { registerOpenSwipeItem, unregisterOpenSwipeItem } from '../openSwipeItem'; import { SubscriptionType } from '~/definitions'; @@ -46,7 +47,12 @@ afterEach(() => { test('a tap after a touch that closed another row without pressing still opens the room', async () => { const { gesture, onPress, pressRow } = setup(); - registerOpenSwipeItem({ rid: 'roomA', transX: makeMutable(80), rowState: makeMutable(1), rowOffSet: makeMutable(80) }); + registerOpenSwipeItem({ + rid: 'roomA', + transX: makeMutable(80), + rowState: makeMutable(1), + rowOffSet: makeMutable(80) + }); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); @@ -57,7 +63,12 @@ test('a tap after a touch that closed another row without pressing still opens t test('a tap that closed another row does not open the room', async () => { const { gesture, onPress, pressRow } = setup(); - registerOpenSwipeItem({ rid: 'roomA', transX: makeMutable(80), rowState: makeMutable(1), rowOffSet: makeMutable(80) }); + registerOpenSwipeItem({ + rid: 'roomA', + transX: makeMutable(80), + rowState: makeMutable(1), + rowOffSet: makeMutable(80) + }); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); pressRow(); diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts index af0220449b5..a13a8cd11e5 100644 --- a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -1,11 +1,12 @@ import { makeMutable } from 'react-native-reanimated'; +import { type TRowState } from '../swipeRelease'; import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from '../openSwipeItem'; const createItem = (rid: string) => ({ rid, transX: makeMutable(80), - rowState: makeMutable(1), + rowState: makeMutable(1), rowOffSet: makeMutable(80) }); diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index b807e067a0b..ace5c3c0c1b 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -1,16 +1,24 @@ import { makeMutable, withSpring, type SharedValue } from 'react-native-reanimated'; import { SWIPE_SPRING_CONFIG } from './styles'; +import { type TRowState } from './swipeRelease'; type OpenSwipeItem = { rid: string; transX: SharedValue; - rowState: SharedValue; + rowState: SharedValue; rowOffSet: SharedValue; }; export const openSwipeItem = makeMutable(null); +export const resetSwipeRow = ({ transX, rowState, rowOffSet }: Omit) => { + 'worklet'; + rowState.value = 0; + transX.value = withSpring(0, SWIPE_SPRING_CONFIG); + rowOffSet.value = 0; +}; + export const unregisterOpenSwipeItem = (rid: string) => { 'worklet'; if (openSwipeItem.value?.rid === rid) { @@ -22,9 +30,7 @@ export const closeOpenSwipeItem = (exceptRid?: string) => { 'worklet'; const item = openSwipeItem.value; if (item && item.rid !== exceptRid) { - item.rowState.value = 0; - item.transX.value = withSpring(0, SWIPE_SPRING_CONFIG); - item.rowOffSet.value = 0; + resetSwipeRow(item); openSwipeItem.value = null; return true; } diff --git a/app/containers/RoomItem/useRoomSnapshot.ts b/app/containers/RoomItem/useRoomSnapshot.ts index 1606e0caec7..f93caefabcf 100644 --- a/app/containers/RoomItem/useRoomSnapshot.ts +++ b/app/containers/RoomItem/useRoomSnapshot.ts @@ -1,12 +1,33 @@ -import { useEffect, useState } from 'react'; +import { useCallback, useRef, useSyncExternalStore } from 'react'; +import { type Observable } from 'rxjs'; -const takeSnapshot = (item: any) => (item.asPlain ? item.asPlain() : { ...item }); +type TObservableRoom = TRoom & { + observe?: () => Observable; + asPlain?: () => TRoom; +}; + +const takeSnapshot = (item: TObservableRoom): TRoom => (item.asPlain ? item.asPlain() : { ...item }); + +export const useRoomSnapshot = (item: TObservableRoom): TRoom => { + const cache = useRef<{ source: TObservableRoom; room: TRoom } | null>(null); + + const getSnapshot = () => { + if (cache.current?.source !== item) { + cache.current = { source: item, room: takeSnapshot(item) }; + } + return cache.current.room; + }; + + const subscribe = useCallback( + (onStoreChange: () => void) => { + const subscription = item.observe?.().subscribe(() => { + cache.current = { source: item, room: takeSnapshot(item) }; + onStoreChange(); + }); + return () => subscription?.unsubscribe(); + }, + [item] + ); -export const useRoomSnapshot = (item: any) => { - const [observed, setObserved] = useState<{ source: any; room: any } | null>(null); - useEffect(() => { - const subscription = item.observe?.().subscribe(() => setObserved({ source: item, room: takeSnapshot(item) })); - return () => subscription?.unsubscribe(); - }, [item]); - return observed && observed.source === item ? observed.room : takeSnapshot(item); + return useSyncExternalStore(subscribe, getSnapshot); }; From e7a9d5cac573d937458c84e611f2bf7816695654 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 25 Sep 2026 09:48:11 -0300 Subject: [PATCH 46/55] ci(ios): restore Xcode version pin --- .github/actions/build-ios/action.yml | 5 +++++ .github/actions/upload-ios/action.yml | 5 +++++ .github/workflows/e2e-build-ios.yml | 5 +++++ .github/workflows/maestro-ios.yml | 6 ++++++ 4 files changed, 21 insertions(+) diff --git a/.github/actions/build-ios/action.yml b/.github/actions/build-ios/action.yml index 01728c71c7b..54d5eb89c2a 100644 --- a/.github/actions/build-ios/action.yml +++ b/.github/actions/build-ios/action.yml @@ -41,6 +41,11 @@ runs: sudo rm -rf ~/Library/Developer/CoreSimulator/Caches/* shell: bash + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 + with: + xcode-version: '26.2.0' + - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/actions/upload-ios/action.yml b/.github/actions/upload-ios/action.yml index bfb05673825..5043327a44a 100644 --- a/.github/actions/upload-ios/action.yml +++ b/.github/actions/upload-ios/action.yml @@ -61,6 +61,11 @@ runs: restore-keys: | pods-v2- + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 + with: + xcode-version: '26.2.0' + - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/workflows/e2e-build-ios.yml b/.github/workflows/e2e-build-ios.yml index 6bfdd887904..f290a6d4228 100644 --- a/.github/workflows/e2e-build-ios.yml +++ b/.github/workflows/e2e-build-ios.yml @@ -65,6 +65,11 @@ jobs: ~/.maestro/deps key: maestro-${{ runner.os }}-${{ env.MAESTRO_VERSION }} + - name: Set up Xcode + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 + with: + xcode-version: '26.2.0' + - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 with: diff --git a/.github/workflows/maestro-ios.yml b/.github/workflows/maestro-ios.yml index c87463cc0e8..3cf48779f52 100644 --- a/.github/workflows/maestro-ios.yml +++ b/.github/workflows/maestro-ios.yml @@ -22,6 +22,12 @@ jobs: - name: Checkout Repo uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + - name: Set up Xcode + # Match the Xcode version e2e-build-ios.yml builds with + uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 + with: + xcode-version: '26.2.0' + - name: Configure Simulator run: | defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false From e96f669ee84dedff7f6a694737e0ad622b34af01 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Fri, 25 Sep 2026 10:28:05 -0300 Subject: [PATCH 47/55] ci(ios): pin Xcode 26.6 --- .github/actions/build-ios/action.yml | 2 +- .github/actions/upload-ios/action.yml | 2 +- .github/workflows/e2e-build-ios.yml | 2 +- .github/workflows/maestro-ios.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/build-ios/action.yml b/.github/actions/build-ios/action.yml index 54d5eb89c2a..3b718269fb6 100644 --- a/.github/actions/build-ios/action.yml +++ b/.github/actions/build-ios/action.yml @@ -44,7 +44,7 @@ runs: - name: Set up Xcode uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '26.2.0' + xcode-version: '26.6' - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 diff --git a/.github/actions/upload-ios/action.yml b/.github/actions/upload-ios/action.yml index 5043327a44a..2a5e75d8eb8 100644 --- a/.github/actions/upload-ios/action.yml +++ b/.github/actions/upload-ios/action.yml @@ -64,7 +64,7 @@ runs: - name: Set up Xcode uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '26.2.0' + xcode-version: '26.6' - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 diff --git a/.github/workflows/e2e-build-ios.yml b/.github/workflows/e2e-build-ios.yml index f290a6d4228..f6f787074f2 100644 --- a/.github/workflows/e2e-build-ios.yml +++ b/.github/workflows/e2e-build-ios.yml @@ -68,7 +68,7 @@ jobs: - name: Set up Xcode uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '26.2.0' + xcode-version: '26.6' - name: Set up Ruby uses: ruby/setup-ruby@7372622e62b60b3cb750dcd2b9e32c247ffec26a # v1.302.0 diff --git a/.github/workflows/maestro-ios.yml b/.github/workflows/maestro-ios.yml index 3cf48779f52..18115e31568 100644 --- a/.github/workflows/maestro-ios.yml +++ b/.github/workflows/maestro-ios.yml @@ -26,7 +26,7 @@ jobs: # Match the Xcode version e2e-build-ios.yml builds with uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0 with: - xcode-version: '26.2.0' + xcode-version: '26.6' - name: Configure Simulator run: | From 5430efd976871f6d0c47d88ef8f6c144465c1638 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 28 Sep 2026 15:47:50 -0300 Subject: [PATCH 48/55] perf(room-list): mount swipe actions only while the row is moved --- app/containers/RoomItem/Touchable.tsx | 55 +- .../__snapshots__/RoomItem.test.tsx.snap | 27492 ++-------------- 2 files changed, 3478 insertions(+), 24069 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 56e34850385..0f5a5dc79a4 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,5 +1,5 @@ -import { useRef, useEffect, memo, type ReactElement } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; +import { useRef, useEffect, useState, memo, type ReactElement } from 'react'; +import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction, withSpring } from 'react-native-reanimated'; import { Gesture, GestureDetector, @@ -46,6 +46,16 @@ const Touchable = ({ const rowState = useSharedValue(0); const gestureActive = useSharedValue(false); const consumedTouchRef = useRef(false); + const [actionsMounted, setActionsMounted] = useState(false); + + useAnimatedReaction( + () => transX.value !== 0, + (moved, previouslyMoved) => { + if (moved !== previouslyMoved) { + scheduleOnRN(setActionsMounted, moved); + } + } + ); const handleTouchBegin = (closedOtherRow: boolean) => { consumedTouchRef.current = closedOtherRow; @@ -131,6 +141,9 @@ const Touchable = ({ const closedOtherRow = closeOpenSwipeItem(rid); scheduleOnRN(handleTouchBegin, closedOtherRow); }) + .onStart(() => { + scheduleOnRN(setActionsMounted, true); + }) .onUpdate(event => { const next = event.translationX + rowOffSet.value; const boundary = getFullSwipeThreshold(width); @@ -160,23 +173,27 @@ const Touchable = ({ return ( - - + {actionsMounted ? ( + <> + + + + ) : null} - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -687,375 +319,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` collapsable={false} > - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - + +  + + + -  - - - - + { + "borderColor": "#CBCED1", + }, + ] + } + > + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + 1 + + + + + + + + + , + @@ -13389,79 +6747,71 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` collapsable={false} > - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - 1 - - @@ -14103,83 +7049,80 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` , +] +`; + +exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` +[ - - -  - - - - - - - - - - - -  - - - - - - - - - + + + -  - + { + "borderColor": "#CBCED1", + }, + ] + } + > + + +  + + + rocket.cat + + +  + + + + 10:00 + + + + + - + + , + @@ -14559,7 +7462,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` > - -  - + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={36} + /> - rocket.cat +  - 10:00 + rocket.cat - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries +  + + + 10:00 + + @@ -14780,401 +7697,33 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` ] `; -exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` +exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - @@ -15238,7 +7787,7 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` > -  + 10:00 - + + - - 10:00 - - + No message + @@ -15474,79 +8032,71 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` collapsable={false} > - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - -  + 10:00 - + + - - 10:00 - - + 2 + @@ -16158,88 +8357,75 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` , -] -`; - -exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` -[ - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - No message + You: 1 @@ -16864,79 +8690,71 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` collapsable={false} > - - -  - - - - - - - - - - - -  - - - - - - - - - + + + -  - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - 2 - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - You: 1 - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - - 1 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - - +999 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - - 1 - - - - - - - - - - , -] -`; - -exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` -[ - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - - - - - - - - - -  - - - rocket.cat - - - - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - + +  + + + rocket.cat + + + 10:00 + + + -  - + "alignItems": "flex-start", + "flex": 1, + "flexDirection": "row", + } + } + testID="room-item-last-message-container" + > + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + - + + , + @@ -23018,7 +9103,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > +  + + + rocket.cat + + -  + 10:00 + + - rocket.cat + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - 10:00 + 1 @@ -23226,315 +9413,71 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` collapsable={false} > - - - - - -  - - - - - - - - - - - -  - - - - - + - -  - + + + + + + +  + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + +999 + + + + + - + + , + @@ -23678,7 +9891,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > -  +  rocket.cat + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + - 10:00 + 1 @@ -23882,377 +10197,14 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - +] +`; + +exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` +[ + @@ -24474,7 +10426,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  , - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - + collapsable={false} + > @@ -25109,7 +10693,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#6C727A", + "color": "#AC892F", "fontSize": 22, }, [ @@ -25134,7 +10718,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - + + , + @@ -25769,7 +10985,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#158D65", + "color": "#2F343D", "fontSize": 22, }, [ @@ -25794,7 +11010,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  , - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - + collapsable={false} + > @@ -26454,7 +11302,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + + - + + , + @@ -27114,7 +11594,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  , - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - + collapsable={false} + > @@ -27774,7 +11886,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  , -] -`; - -exports[`Story Snapshots: Tag should match snapshot 1`] = ` -[ - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -28303,7 +12042,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` > -  +  rocket.cat - - - Auto-join - - - - -  - + + + + + + +  + + + rocket.cat + + + + 10:00 + + + + + - + + , + - - -  - - - - - - - - - + + + -  - + { + "borderColor": "#CBCED1", + }, + ] + } + > + + +  + + + rocket.cat + + + + 10:00 + + + + + - + + , + @@ -29002,7 +12918,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` > -  +  - Auto-join + 10:00 - - - 10:00 - - - - - No message - + @@ -29283,83 +13122,80 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` , +] +`; + +exports[`Story Snapshots: Tag should match snapshot 1`] = ` +[ - - -  - - - - - - - - - - - -  - - - - - - - - - + + + -  - + ] + } + > + + +  + + + rocket.cat + + + + Auto-join + + + + + 10:00 + + + + + - + + , + @@ -29739,7 +13546,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` > - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + rocket.cat - Auto-join - - - - - 10:00 + Auto-join + + 10:00 + + + + + No message + @@ -29986,315 +13831,71 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` collapsable={false} > - - - - - -  - - - - - - - - - - - -  - - - - - - -  - + + + + + + +  + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + Auto-join + + + + + 10:00 + + + + + - + + , + @@ -30715,385 +14523,17 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` - - - - , -] -`; - -exports[`Story Snapshots: Touch should match snapshot 1`] = ` - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - + + - + , +] +`; + +exports[`Story Snapshots: Touch should match snapshot 1`] = ` + @@ -31390,374 +14830,6 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -32044,388 +15116,20 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + 10:00 + + + + + - + + , + @@ -32718,374 +15422,6 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -33364,388 +15700,20 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + 10:00 + + + + + - + + , + @@ -34038,374 +16006,6 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -34684,388 +16284,20 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + 10:00 + + + + + - + + , + @@ -35358,374 +16590,6 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -36004,388 +16868,20 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > - 10:00 - - - - - - - - - - , - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + 10:00 + + + + + - + + , + @@ -36678,374 +17174,6 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - @@ -37329,388 +17457,20 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` - - - - - - , -] -`; - -exports[`Story Snapshots: User should match snapshot 1`] = ` -[ - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - + - + + , +] +`; + +exports[`Story Snapshots: User should match snapshot 1`] = ` +[ + @@ -38011,374 +17771,6 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - -  - - - - - From 989de54f238cf0cbda2cf1da8f69eee8cb202771 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 28 Sep 2026 17:28:43 -0300 Subject: [PATCH 49/55] chore: tidy RN 0.86 upgrade leftovers --- __mocks__/react-native-mmkv.js | 5 ----- android/settings.gradle | 2 -- app/containers/UIKit/UiKitModal.test.tsx | 7 +++++++ .../components/stories/__tests__/leaves.test.tsx | 7 +++++++ app/lib/methods/helpers/fetch.ts | 6 ------ ios/Podfile | 7 +++++-- ios/Podfile.lock | 2 +- jest.setup.js | 10 ---------- package.json | 1 - pnpm-lock.yaml | 1 - 10 files changed, 20 insertions(+), 28 deletions(-) diff --git a/__mocks__/react-native-mmkv.js b/__mocks__/react-native-mmkv.js index 4ca7eabb782..2426b2b20e6 100644 --- a/__mocks__/react-native-mmkv.js +++ b/__mocks__/react-native-mmkv.js @@ -1,7 +1,3 @@ -// Mock for react-native-mmkv. -// Covers only the surface app/lib/methods/userPreferences.ts uses: createMMKV, useMMKVString, -// and the instance methods it calls. Keep this in sync with that module — a method that exists -// here but not on the real MMKV instance makes Jest pass while the device fails. const { useState, useEffect, useCallback } = require('react'); // Shared storage between instances with the same id @@ -65,7 +61,6 @@ class MMKVInstance { clearAll() { this.storage.clear(); - // The real listener contract passes undefined to mean "everything changed" this.notifyListeners(undefined); } diff --git a/android/settings.gradle b/android/settings.gradle index 291937214cc..20c52556af3 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -14,6 +14,4 @@ include ':watermelondb-jsi' project(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi') include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') - expoAutolinking.useExpoModules() diff --git a/app/containers/UIKit/UiKitModal.test.tsx b/app/containers/UIKit/UiKitModal.test.tsx index 6e94984375d..b93f37bba60 100644 --- a/app/containers/UIKit/UiKitModal.test.tsx +++ b/app/containers/UIKit/UiKitModal.test.tsx @@ -1,4 +1,11 @@ import { generateSnapshots } from '~/.rnstorybook/generateSnapshots'; import * as stories from './UiKitModal.stories'; +jest.mock('~/lib/methods/handleMediaDownload.ts', () => ({ + ...jest.requireActual('~/lib/methods/handleMediaDownload.ts'), + getMediaCache: jest.fn(() => Promise.resolve({ exists: false })), + downloadMediaFile: jest.fn(() => Promise.resolve('')), + isDownloadActive: jest.fn(() => false) +})); + generateSnapshots(stories); diff --git a/app/containers/message/components/stories/__tests__/leaves.test.tsx b/app/containers/message/components/stories/__tests__/leaves.test.tsx index ccf68731b89..4a969b2e400 100644 --- a/app/containers/message/components/stories/__tests__/leaves.test.tsx +++ b/app/containers/message/components/stories/__tests__/leaves.test.tsx @@ -21,6 +21,13 @@ import * as pinned from '../RightIcons/Pinned.stories'; import * as readReceipt from '../RightIcons/ReadReceipt.stories'; import * as translated from '../RightIcons/Translated.stories'; +jest.mock('~/lib/methods/handleMediaDownload.ts', () => ({ + ...jest.requireActual('~/lib/methods/handleMediaDownload.ts'), + getMediaCache: jest.fn(() => Promise.resolve({ exists: false })), + downloadMediaFile: jest.fn(() => Promise.resolve('')), + isDownloadActive: jest.fn(() => false) +})); + generateSnapshots(attachments); generateSnapshots(broadcast); generateSnapshots(callButton); diff --git a/app/lib/methods/helpers/fetch.ts b/app/lib/methods/helpers/fetch.ts index 33e68813f70..a6f31906f6b 100644 --- a/app/lib/methods/helpers/fetch.ts +++ b/app/lib/methods/helpers/fetch.ts @@ -47,11 +47,5 @@ export default (url: string, options: IOptions = {}): Promise => { ...options, headers: withoutEmptyValues({ ...options.headers, ...RocketChatSettings.customHeaders }) }; - // TODO: Check if this really works and if anyone else has complained about this problem. - // if (RocketChat.controller) { - // // @ts-ignore - // const { signal } = RocketChat.controller; - // customOptions = { ...customOptions, signal }; - // } return fetch(url, customOptions); }; diff --git a/ios/Podfile b/ios/Podfile index 9ad0df8bc26..f73893b1e2f 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -40,12 +40,15 @@ end $static_framework = [ 'WatermelonDB', - 'simdjson' + 'simdjson', + 'RNFBApp', + 'RNFBAnalytics', + 'RNFBCrashlytics' ] pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {} installer.pod_targets.each do |pod| - if $static_framework.include?(pod.name) || pod.name.start_with?('RNFB') + if $static_framework.include?(pod.name) def pod.build_type; Pod::BuildType.static_library # >= 1.9 end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f2a0eb6a6a2..93a1b65ffb4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3623,6 +3623,6 @@ SPEC CHECKSUMS: Yoga: 269d501078efa6b25cd57f7f326fc3da213580be ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: b39e033fd5ceefcceb991d1d93ed4ea05c5752e0 +PODFILE CHECKSUM: 3ef18da69ac141a16cded1b74c0bc71b2f7216a7 COCOAPODS: 1.15.2 diff --git a/jest.setup.js b/jest.setup.js index 300cbd57106..506242c12db 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -6,16 +6,6 @@ import { Image } from 'expo-image'; jest.mock('@react-native-async-storage/async-storage', () => mockAsyncStorage); -const resolveExpoLazyFetchBeforeReactNativeMocks = () => globalThis.fetch; -resolveExpoLazyFetchBeforeReactNativeMocks(); - -jest.mock('./app/lib/methods/handleMediaDownload', () => ({ - ...jest.requireActual('./app/lib/methods/handleMediaDownload'), - getMediaCache: jest.fn(() => Promise.resolve({ exists: false })), - downloadMediaFile: jest.fn(() => Promise.resolve('')), - isDownloadActive: jest.fn(() => false) -})); - jest.mock('react-native-safe-area-context', () => { const inset = { top: 0, right: 0, bottom: 0, left: 0 }; return { diff --git a/package.json b/package.json index ca9e103cd16..db1b1ad61ff 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,6 @@ "ua-parser-js": "1.0.2", "jpeg-js": "0.4.4", "typescript": "7.0.2", - "react-native-keyboard-controller": "1.18.5", "react-native-nitro-modules": "^0.37.1" }, "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f24110a636..b97a73ed1b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,6 @@ overrides: ua-parser-js: 1.0.2 jpeg-js: 0.4.4 typescript: 7.0.2 - react-native-keyboard-controller: 1.18.5 react-native-nitro-modules: ^0.37.1 importers: From 681d520f15030c99297c1877f2386e047ae1d23f Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 29 Sep 2026 10:29:59 -0300 Subject: [PATCH 50/55] chore(deps): upgrade react-native-gesture-handler to 3.3.0 (#7726) * chore(deps): bump react-native-gesture-handler to 3.3.0 * refactor: migrate gestures to the gesture handler 3 hook API * refactor: replace deprecated gesture handler buttons with Touchable * chore(ios): update Podfile.lock for react-native-gesture-handler 3.3.0 * fix: restore disabled state on Touch after gesture handler 3 migration * fix(android): enable nested scroll on reactions lists inside the action sheet * fix(android): activate focused gesture-handler buttons on hardware Enter/D-pad --- app/containers/ActionSheet/Handle.tsx | 6 +- app/containers/AudioPlayer/Seek.test.tsx | 12 +- app/containers/AudioPlayer/Seek.tsx | 27 +- .../Avatar/__snapshots__/Avatar.test.tsx.snap | 99 +- app/containers/Button/Button.test.tsx | 2 +- .../Button/__snapshots__/Button.test.tsx.snap | 521 +- app/containers/Button/index.tsx | 22 +- app/containers/CallHeader.tsx | 4 +- .../__snapshots__/DirectoryItem.test.tsx.snap | 792 +- .../GestureButtons/BorderlessButton.tsx | 44 + app/containers/GestureButtons/RectButton.tsx | 50 + app/containers/GestureButtons/index.ts | 2 + app/containers/GestureButtons/types.ts | 29 + .../HeaderButton/HeaderButtonItem.tsx | 4 +- .../__snapshots__/HeaderButtons.test.tsx.snap | 1903 +- app/containers/ImageViewer/ImageViewer.tsx | 51 +- .../NotifierComponent.test.tsx.snap | 812 +- app/containers/List/ListItem.tsx | 2 +- .../List/__snapshots__/List.test.tsx.snap | 2394 +- .../__snapshots__/LoginServices.test.tsx.snap | 1378 +- .../MediaCallHeader.test.tsx.snap | 660 +- .../MessageComposer/MessageComposer.test.tsx | 8 +- .../MessageComposer.test.tsx.snap | 6288 +- .../AttachmentActionSheet.test.tsx.snap | 380 +- .../Autocomplete/AutocompleteItem.tsx | 2 +- .../Autocomplete/AutocompletePreview.tsx | 2 +- .../components/Buttons/BaseButton.tsx | 2 +- .../components/RecordAudio/ReviewButton.tsx | 2 +- .../components/SendThreadToChannel.tsx | 6 +- app/containers/NewMediaCall/SelectedPeer.tsx | 2 +- .../__snapshots__/SelectedPeer.test.tsx.snap | 336 +- app/containers/Passcode/Base/Button.tsx | 4 +- .../Base/__snapshots__/Base.test.tsx.snap | 6740 +- app/containers/Passcode/PasscodeChoose.tsx | 3 +- app/containers/Passcode/PasscodeEnter.tsx | 3 +- app/containers/ReactionsList/AllTab.tsx | 2 + app/containers/ReactionsList/UsersList.tsx | 2 + .../__snapshots__/ReactionsList.test.tsx.snap | 2 + app/containers/RoomHeader/RoomHeader.tsx | 8 +- .../__snapshots__/RoomHeader.test.tsx.snap | 7123 +- app/containers/RoomItem/Actions.tsx | 2 +- app/containers/RoomItem/Touchable.tsx | 39 +- .../__snapshots__/RoomItem.test.tsx.snap | 54322 ++++++++-------- .../SwipeableDeleteItem/Actions.tsx | 2 +- .../SwipeableDeleteItem/Touchable.tsx | 24 +- .../__snapshots__/ServerItem.test.tsx.snap | 1732 +- app/containers/TabView/index.tsx | 6 +- .../__snapshots__/TextInput.test.tsx.snap | 198 +- app/containers/Thumbs.tsx | 2 +- app/containers/Touch.tsx | 22 +- app/containers/UIKit/MultiSelect/Input.tsx | 2 +- .../__snapshots__/UiKitMessage.test.tsx.snap | 395 +- .../__snapshots__/UiKitModal.test.tsx.snap | 866 +- .../__snapshots__/Message.test.tsx.snap | 45048 ++++++------- .../__snapshots__/leaves.test.tsx.snap | 198 +- .../CannedResponseItem.test.tsx.snap | 370 +- .../__snapshots__/Item.test.tsx.snap | 792 +- app/views/NewMessageView/Item.tsx | 4 +- .../__snapshots__/Item.test.tsx.snap | 456 +- .../ServersHistoryItem.test.tsx.snap | 4076 +- .../__snapshots__/CallSection.test.tsx.snap | 299 +- app/views/RoomActionsView/index.tsx | 2 +- .../RoomInfoView/components/BaseButton.tsx | 4 +- .../RoomInfoButtons.test.tsx.snap | 1342 +- .../RoomInfoViewAvatar.test.tsx.snap | 80 +- app/views/RoomView/LoadMore/index.tsx | 2 +- app/views/RoomView/components/Banner.tsx | 3 +- app/views/RoomsListView/components/Header.tsx | 8 +- app/views/StatusView/index.test.tsx | 28 +- .../__snapshots__/Item.test.tsx.snap | 2376 +- .../ChangePasscodeView.test.tsx.snap | 2277 +- .../ScreenLockedView.test.tsx.snap | 4752 +- ios/Podfile.lock | 5 +- jest.config.js | 1 + jest.setup.js | 22 +- package.json | 2 +- ... react-native-gesture-handler+3.3.0.patch} | 32 +- pnpm-lock.yaml | 77 +- 78 files changed, 78025 insertions(+), 71572 deletions(-) create mode 100644 app/containers/GestureButtons/BorderlessButton.tsx create mode 100644 app/containers/GestureButtons/RectButton.tsx create mode 100644 app/containers/GestureButtons/index.ts create mode 100644 app/containers/GestureButtons/types.ts rename patches/{react-native-gesture-handler+2.32.0.patch => react-native-gesture-handler+3.3.0.patch} (54%) diff --git a/app/containers/ActionSheet/Handle.tsx b/app/containers/ActionSheet/Handle.tsx index 874a655028c..3d4d23a1192 100644 --- a/app/containers/ActionSheet/Handle.tsx +++ b/app/containers/ActionSheet/Handle.tsx @@ -1,7 +1,7 @@ -import { forwardRef, type ComponentType, type Ref } from 'react'; +import { forwardRef } from 'react'; import { View } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; +import { RectButton } from '~/containers/GestureButtons'; import styles from './styles'; import { themes } from '~/lib/constants/colors'; import { useTheme } from '~/theme'; @@ -13,7 +13,7 @@ export const Handle = forwardRef void }>(({ onPress }, re // We should use RectButton from gesture-handler to avoid issues with the keyboard return ( } + ref={ref} onPress={onPress} style={styles.handle} testID='action-sheet-handle' diff --git a/app/containers/AudioPlayer/Seek.test.tsx b/app/containers/AudioPlayer/Seek.test.tsx index 7ba004704f3..489f489763d 100644 --- a/app/containers/AudioPlayer/Seek.test.tsx +++ b/app/containers/AudioPlayer/Seek.test.tsx @@ -1,22 +1,26 @@ import { act, render, renderHook } from '@testing-library/react-native'; -import { Gesture, State } from 'react-native-gesture-handler'; +import { State, usePanGesture } from 'react-native-gesture-handler'; import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; import { useSharedValue } from 'react-native-reanimated'; import Seek from './Seek'; jest.mock('~/theme', () => ({ useTheme: () => ({ colors: {} }) })); +jest.mock('react-native-gesture-handler', () => { + const actual = jest.requireActual('react-native-gesture-handler'); + return { ...actual, usePanGesture: jest.fn(actual.usePanGesture) }; +}); const setup = () => { - const pan = jest.spyOn(Gesture, 'Pan'); const { result } = renderHook(() => ({ currentTime: useSharedValue(30), duration: useSharedValue(120) })); const { currentTime, duration } = result.current; const onChangeTime = jest.fn(); render(); - return { gesture: pan.mock.results[0].value, currentTime, onChangeTime }; + const { results } = jest.mocked(usePanGesture).mock; + return { gesture: results[results.length - 1].value, currentTime, onChangeTime }; }; -afterEach(() => jest.restoreAllMocks()); +afterEach(() => jest.clearAllMocks()); test('a tap that never starts dragging preserves the paused position', async () => { const { gesture, currentTime, onChangeTime } = setup(); diff --git a/app/containers/AudioPlayer/Seek.tsx b/app/containers/AudioPlayer/Seek.tsx index ebef805872b..31c884f93f7 100644 --- a/app/containers/AudioPlayer/Seek.tsx +++ b/app/containers/AudioPlayer/Seek.tsx @@ -1,5 +1,5 @@ import { type LayoutChangeEvent, View, TextInput, type TextInputProps, TouchableNativeFeedback } from 'react-native'; -import { Gesture, GestureDetector } from 'react-native-gesture-handler'; +import { GestureDetector, usePanGesture } from 'react-native-gesture-handler'; import Animated, { type SharedValue, useAnimatedProps, @@ -65,31 +65,32 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => maxWidth.value = width; }; - const panGesture = Gesture.Pan() - .enabled(loaded) - .activeOffsetX([-ACTIVE_OFFSET_X, ACTIVE_OFFSET_X]) - .onStart(() => { + const panGesture = usePanGesture({ + enabled: loaded, + activeOffsetX: [-ACTIVE_OFFSET_X, ACTIVE_OFFSET_X], + onActivate: () => { isPanning.value = true; contextX.value = translateX.value; savedTranslateX.value = translateX.value; savedCurrentTime.value = currentTime.value; scale.value = withTiming(1.3, { duration: 150 }); - }) - .onUpdate(event => { + }, + onUpdate: event => { const newX = contextX.value + event.translationX; translateX.value = clamp(newX, 0, maxWidth.value); - }) - .onFinalize((_, didSucceed) => { + }, + onFinalize: event => { if (!isPanning.value) return; isPanning.value = false; scale.value = withTiming(1, { duration: 150 }); - if (didSucceed) { - scheduleOnRN(onChangeTime, currentTime.value); - } else { + if (event.canceled) { translateX.value = savedTranslateX.value; currentTime.value = savedCurrentTime.value; + } else { + scheduleOnRN(onChangeTime, currentTime.value); } - }); + } + }); useDerivedValue(() => { if (isPanning.value) { diff --git a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap index 24c8f2149b2..7be341954a9 100644 --- a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap +++ b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap @@ -926,60 +926,63 @@ exports[`Story Snapshots: Touchable should match snapshot 1`] = ` ] } > - - - + `; diff --git a/app/containers/Button/Button.test.tsx b/app/containers/Button/Button.test.tsx index 06829aa76b3..c36468daeff 100644 --- a/app/containers/Button/Button.test.tsx +++ b/app/containers/Button/Button.test.tsx @@ -63,7 +63,7 @@ describe('ButtonTests', () => { test('disabled button is in disabled state', async () => { const { findByTestId } = render(); const button = await findByTestId(testProps.testID); - expect(button.props.enabled).toBe(false); + expect(button).toBeDisabled(); }); test('should trigger onPress function on button press', async () => { diff --git a/app/containers/Button/__snapshots__/Button.test.tsx.snap b/app/containers/Button/__snapshots__/Button.test.tsx.snap index 1b0415bde25..e9de7a7a3aa 100644 --- a/app/containers/Button/__snapshots__/Button.test.tsx.snap +++ b/app/containers/Button/__snapshots__/Button.test.tsx.snap @@ -1,58 +1,63 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Story Snapshots: CustomButton should match snapshot 1`] = ` - - Press me! - + `; exports[`Story Snapshots: DisabledButton should match snapshot 1`] = ` - - Press me! - + `; exports[`Story Snapshots: DisabledLoadingButton should match snapshot 1`] = ` - - - + `; exports[`Story Snapshots: LoadingButton should match snapshot 1`] = ` - - - + `; exports[`Story Snapshots: PrimaryButton should match snapshot 1`] = ` - - Press me! - + `; exports[`Story Snapshots: SecondaryButton should match snapshot 1`] = ` - - Press me! - + `; exports[`Story Snapshots: SmallButton should match snapshot 1`] = ` - - Press me! - + `; diff --git a/app/containers/Button/index.tsx b/app/containers/Button/index.tsx index bbd625b5f1d..ac78814931b 100644 --- a/app/containers/Button/index.tsx +++ b/app/containers/Button/index.tsx @@ -1,13 +1,16 @@ import { type FC } from 'react'; -import { type StyleProp, StyleSheet, Text, type TextStyle, type ViewStyle } from 'react-native'; -import { RectButton, type RectButtonProps } from 'react-native-gesture-handler'; +import { type Insets, type StyleProp, StyleSheet, Text, type TextStyle, type ViewStyle } from 'react-native'; import { useTheme } from '~/theme'; import sharedStyles from '~/views/Styles'; import ActivityIndicator from '../ActivityIndicator'; +import { RectButton } from '../GestureButtons'; -interface IButtonProps extends Omit { +interface IButtonProps { title: string; + testID?: string; + hitSlop?: number | Insets; + accessibilityLabel?: string; onPress: () => void; type?: 'primary' | 'secondary'; backgroundColor?: string; @@ -61,7 +64,9 @@ const Button: FC = ({ style, styleText, small, - ...otherProps + testID, + hitSlop, + accessibilityLabel }) => { const { colors } = useTheme(); const isPrimary = type === 'primary'; @@ -90,11 +95,12 @@ const Button: FC = ({ return ( + testID={testID} + hitSlop={hitSlop} + accessibilityLabel={accessibilityLabel ?? title} + accessibilityRole='button'> {loading ? : {title}} ); diff --git a/app/containers/CallHeader.tsx b/app/containers/CallHeader.tsx index 51ccf7e3eb9..c2e13b71bdc 100644 --- a/app/containers/CallHeader.tsx +++ b/app/containers/CallHeader.tsx @@ -54,7 +54,7 @@ export const CallHeader = ({ mic, cam, setCam, setMic, title, avatar, uid, name, onPress={() => setCam(!cam)} style={[style.iconCallContainerRight, { backgroundColor: handleColors(cam).button }]} hitSlop={BUTTON_HIT_SLOP} - enabled={!calling}> + disabled={calling}> @@ -64,7 +64,7 @@ export const CallHeader = ({ mic, cam, setCam, setMic, title, avatar, uid, name, onPress={() => setMic(!mic)} style={[style.iconCallContainer, { backgroundColor: handleColors(mic).button }]} hitSlop={BUTTON_HIT_SLOP} - enabled={!calling}> + disabled={calling}> diff --git a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap index d5761084a08..1bc1299cc61 100644 --- a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap +++ b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap @@ -37,60 +37,63 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` ] } > - - - + @@ -331,60 +334,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + @@ -623,60 +629,63 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` ] } > - - - + @@ -884,60 +893,63 @@ exports[`Story Snapshots: LongRoomName should match snapshot 1`] = ` ] } > - - - + @@ -1198,60 +1210,63 @@ exports[`Story Snapshots: OnlyTitle should match snapshot 1`] = ` ] } > - - - + @@ -1392,60 +1407,63 @@ exports[`Story Snapshots: TeamMain should match snapshot 1`] = ` ] } > - - - + @@ -1684,60 +1702,63 @@ exports[`Story Snapshots: WithRightLabel should match snapshot 1`] = ` ] } > - - - + @@ -1998,60 +2019,63 @@ exports[`Story Snapshots: WithoutDescription should match snapshot 1`] = ` ] } > - - - + diff --git a/app/containers/GestureButtons/BorderlessButton.tsx b/app/containers/GestureButtons/BorderlessButton.tsx new file mode 100644 index 00000000000..a960f434169 --- /dev/null +++ b/app/containers/GestureButtons/BorderlessButton.tsx @@ -0,0 +1,44 @@ +import { Touchable } from 'react-native-gesture-handler'; + +import { isAndroid } from '~/lib/methods/helpers/deviceInfo'; +import { type IGestureButtonProps } from './types'; + +const BorderlessButton = ({ + children, + ref, + onPress, + onLongPress, + disabled, + style, + hitSlop, + testID, + accessible, + accessibilityLabel, + accessibilityHint, + accessibilityRole, + accessibilityState, + rippleColor, + foreground, + activeOpacity = 0.3 +}: IGestureButtonProps) => ( + + {children} + +); + +export default BorderlessButton; diff --git a/app/containers/GestureButtons/RectButton.tsx b/app/containers/GestureButtons/RectButton.tsx new file mode 100644 index 00000000000..65da8156168 --- /dev/null +++ b/app/containers/GestureButtons/RectButton.tsx @@ -0,0 +1,50 @@ +import { Touchable } from 'react-native-gesture-handler'; + +import { isAndroid } from '~/lib/methods/helpers/deviceInfo'; +import { type IGestureButtonProps } from './types'; + +interface IRectButtonProps extends IGestureButtonProps { + underlayColor?: string; +} + +const RectButton = ({ + children, + ref, + onPress, + onLongPress, + disabled, + style, + hitSlop, + testID, + accessible, + accessibilityLabel, + accessibilityHint, + accessibilityRole, + accessibilityState, + rippleColor, + foreground, + underlayColor = 'black', + activeOpacity = 0.105 +}: IRectButtonProps) => ( + + {children} + +); + +export default RectButton; diff --git a/app/containers/GestureButtons/index.ts b/app/containers/GestureButtons/index.ts new file mode 100644 index 00000000000..868743c5260 --- /dev/null +++ b/app/containers/GestureButtons/index.ts @@ -0,0 +1,2 @@ +export { default as RectButton } from './RectButton'; +export { default as BorderlessButton } from './BorderlessButton'; diff --git a/app/containers/GestureButtons/types.ts b/app/containers/GestureButtons/types.ts new file mode 100644 index 00000000000..a9060235ddf --- /dev/null +++ b/app/containers/GestureButtons/types.ts @@ -0,0 +1,29 @@ +import { type ReactNode, type Ref } from 'react'; +import { type TouchableProps } from 'react-native-gesture-handler'; +import { + type AccessibilityRole, + type AccessibilityState, + type Insets, + type StyleProp, + type View, + type ViewStyle +} from 'react-native'; + +export interface IGestureButtonProps { + children?: ReactNode; + ref?: Ref; + onPress?: TouchableProps['onPress']; + onLongPress?: TouchableProps['onLongPress']; + disabled?: boolean; + style?: StyleProp; + hitSlop?: number | Insets; + testID?: string; + accessible?: boolean; + accessibilityLabel?: string; + accessibilityHint?: string; + accessibilityRole?: AccessibilityRole; + accessibilityState?: AccessibilityState; + rippleColor?: string; + foreground?: boolean; + activeOpacity?: number; +} diff --git a/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx b/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx index e79b2ed757a..54394ce983b 100644 --- a/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx +++ b/app/containers/Header/components/HeaderButton/HeaderButtonItem.tsx @@ -1,7 +1,7 @@ import { memo, type ReactElement } from 'react'; import { Platform, StyleSheet, Text, View } from 'react-native'; -import { BorderlessButton } from 'react-native-gesture-handler'; +import { BorderlessButton } from '~/containers/GestureButtons'; import { CustomIcon, type TIconsName } from '~/containers/CustomIcon'; import { useTheme } from '~/theme'; import sharedStyles from '~/views/Styles'; @@ -55,7 +55,7 @@ const Item = memo( }: IHeaderButtonItem): ReactElement => { const { colors } = useTheme(); return ( - + - - - + - - + - + - - + @@ -758,14 +813,29 @@ exports[`Story Snapshots: Common should match snapshot 1`] = ` ] } > - - + @@ -974,14 +1042,29 @@ exports[`Story Snapshots: Common should match snapshot 1`] = ` ] } > - - + - - + - - + @@ -1640,14 +1749,29 @@ exports[`Story Snapshots: Common should match snapshot 1`] = ` ] } > - - + @@ -1849,14 +1972,29 @@ exports[`Story Snapshots: Common should match snapshot 1`] = ` ] } > - - + @@ -2058,14 +2195,29 @@ exports[`Story Snapshots: Common should match snapshot 1`] = ` ] } > - - + @@ -2234,14 +2384,29 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = ` ] } > - - + - - + @@ -2529,15 +2707,30 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = ` ] } > - - - + - + - - - + - + @@ -3011,14 +3245,29 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` ] } > - - + - - + - - - + - + @@ -3562,14 +3851,29 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` ] } > - - + - - + - - - + - + @@ -4113,14 +4457,29 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` ] } > - - + - - + - - - + - + @@ -4623,14 +5022,29 @@ exports[`Story Snapshots: Title should match snapshot 1`] = ` ] } > - - + - - + @@ -4908,14 +5335,29 @@ exports[`Story Snapshots: Title should match snapshot 1`] = ` ] } > - - - + - + - - - + - + diff --git a/app/containers/ImageViewer/ImageViewer.tsx b/app/containers/ImageViewer/ImageViewer.tsx index 5fcb5585e93..f34e3ae7af5 100644 --- a/app/containers/ImageViewer/ImageViewer.tsx +++ b/app/containers/ImageViewer/ImageViewer.tsx @@ -1,6 +1,12 @@ import { useRef, useState, type ReactElement } from 'react'; import { type LayoutChangeEvent, StyleSheet, type StyleProp, type ViewStyle, View } from 'react-native'; -import { Gesture, GestureDetector } from 'react-native-gesture-handler'; +import { + GestureDetector, + usePanGesture, + usePinchGesture, + useSimultaneousGestures, + useTapGesture +} from 'react-native-gesture-handler'; import Animated, { withTiming, useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; import { Image, type ImageStyle } from 'expo-image'; @@ -91,36 +97,38 @@ export const ImageViewer = ({ uri = '', width, height, altText, isAnimated, ...p return Math.max(Math.min(value, max), min); }; - const pinchGesture = Gesture.Pinch() - .onUpdate(event => { + const pinchGesture = usePinchGesture({ + onUpdate: event => { scale.value = clamp(scaleOffset.value * (event.scale > 0 ? event.scale : 1), 1, 4); - }) - .onEnd(() => { + }, + onDeactivate: () => { scaleOffset.value = scale.value > 0 ? scale.value : 1; - }); + } + }); - const panGesture = Gesture.Pan() - .maxPointers(2) - .onStart(() => { + const panGesture = usePanGesture({ + maxPointers: 2, + onActivate: () => { translationX.value = offsetX.value; translationY.value = offsetY.value; - }) - .onUpdate(event => { + }, + onUpdate: event => { const scaleFactor = scale.value - 1; translationX.value = clamp(event.translationX + offsetX.value, -scaleFactor * centerX, scaleFactor * centerX); translationY.value = clamp(event.translationY + offsetY.value, -scaleFactor * centerY, scaleFactor * centerY); - }) - .onEnd(() => { + }, + onDeactivate: () => { offsetX.value = translationX.value; offsetY.value = translationY.value; if (scale.value === 1) resetScaleAnimation(); - }); + } + }); - const doubleTapGesture = Gesture.Tap() - .numberOfTaps(2) - .maxDelay(120) - .maxDistance(70) - .onEnd(event => { + const doubleTapGesture = useTapGesture({ + numberOfTaps: 2, + maxDelay: 120, + maxDistance: 70, + onDeactivate: event => { if (scaleOffset.value > 1) resetScaleAnimation(); else { scale.value = withTiming(2, { duration: 200 }); @@ -128,9 +136,10 @@ export const ImageViewer = ({ uri = '', width, height, altText, isAnimated, ...p offsetX.value = centerX - event.x; scaleOffset.value = 2; } - }); + } + }); - const gesture = Gesture.Simultaneous(pinchGesture, panGesture, doubleTapGesture); + const gesture = useSimultaneousGestures(pinchGesture, panGesture, doubleTapGesture); const { colors } = useTheme(); diff --git a/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap b/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap index c6e4ff178e4..5b926331829 100644 --- a/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap +++ b/app/containers/InAppNotification/__snapshots__/NotifierComponent.test.tsx.snap @@ -46,13 +46,29 @@ exports[`Story Snapshots: ChannelMessage should match snapshot 1`] = ` ] } > - - - + - - @@ -350,7 +357,7 @@ exports[`Story Snapshots: ChannelMessage should match snapshot 1`] = `  - + `; @@ -401,13 +408,29 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = ` ] } > - - - + - - @@ -705,7 +719,7 @@ exports[`Story Snapshots: DirectMessage should match snapshot 1`] = `  - + `; @@ -756,13 +770,29 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` ] } > - - - + - - @@ -1060,7 +1081,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = `  - + `; @@ -1111,13 +1132,29 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` ] } > - - - + - - @@ -1415,7 +1443,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = `  - + `; diff --git a/app/containers/List/ListItem.tsx b/app/containers/List/ListItem.tsx index fb028afabd6..ed783e558b0 100644 --- a/app/containers/List/ListItem.tsx +++ b/app/containers/List/ListItem.tsx @@ -242,7 +242,7 @@ const Button = memo(({ onPress, backgroundColor, underlayColor, style, ...props onPress={handlePress} style={[{ backgroundColor: backgroundColor || colors.surfaceRoom }, style]} underlayColor={underlayColor} - enabled={!props.disabled || !!props.disabledReason}> + disabled={props.disabled && !props.disabledReason}> ); diff --git a/app/containers/List/__snapshots__/List.test.tsx.snap b/app/containers/List/__snapshots__/List.test.tsx.snap index 09d7aab5b6d..e13bf9441eb 100644 --- a/app/containers/List/__snapshots__/List.test.tsx.snap +++ b/app/containers/List/__snapshots__/List.test.tsx.snap @@ -753,60 +753,63 @@ exports[`Story Snapshots: ListItemWithRightContainerStyle should match snapshot ] } > - - @@ -993,7 +996,7 @@ exports[`Story Snapshots: ListItemWithRightContainerStyle should match snapshot - + `; @@ -1053,60 +1056,63 @@ exports[`Story Snapshots: Pressable should match snapshot 1`] = ` ] } > - - @@ -1173,7 +1179,7 @@ exports[`Story Snapshots: Pressable should match snapshot 1`] = ` - + - - @@ -1332,7 +1341,7 @@ exports[`Story Snapshots: Pressable should match snapshot 1`] = ` - + - - @@ -1576,7 +1588,7 @@ exports[`Story Snapshots: Radio should match snapshot 1`] = ` - + - - @@ -1782,7 +1797,7 @@ exports[`Story Snapshots: Radio should match snapshot 1`] = ` - + - - @@ -1988,7 +2006,7 @@ exports[`Story Snapshots: Radio should match snapshot 1`] = ` - + - - @@ -2216,7 +2237,7 @@ exports[`Story Snapshots: Radio should match snapshot 1`] = ` - + - - @@ -3982,7 +4006,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` - + - - @@ -4258,7 +4285,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` - + - - @@ -4615,7 +4645,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` - + - - @@ -4891,7 +4924,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` - + - - @@ -5295,7 +5331,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` - + - - @@ -5571,7 +5610,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` - + - - @@ -5928,7 +5970,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` - + - - @@ -6204,7 +6249,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` - + - - @@ -6515,7 +6563,7 @@ exports[`Story Snapshots: WithCustomColors should match snapshot 1`] = ` - + - - @@ -6886,7 +6937,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` - + - - @@ -7162,7 +7216,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` - + - - @@ -7519,7 +7576,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` - + - - @@ -7795,7 +7855,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` - + - - @@ -9867,7 +9930,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` - + - - @@ -10143,7 +10209,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` - + - - @@ -10500,7 +10569,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` - + - - @@ -10776,7 +10848,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` - + - More options - , + , , - - Less options - , + , - Login on web - , + , - - - + , - - - + , - - - + , ] `; exports[`Story Snapshots: ServiceListUncollapsed should match snapshot 1`] = ` [ - - Login on web - , + , - - - + , - - - + , - - - + , - - - + , ] `; @@ -1613,60 +1661,64 @@ exports[`Story Snapshots: ServicesList should match snapshot 1`] = ` ] } > - - - + , - - - + , - - - + , - - - + , ] `; diff --git a/app/containers/MediaCallHeader/__snapshots__/MediaCallHeader.test.tsx.snap b/app/containers/MediaCallHeader/__snapshots__/MediaCallHeader.test.tsx.snap index 362aca97c9c..3c6d903cd60 100644 --- a/app/containers/MediaCallHeader/__snapshots__/MediaCallHeader.test.tsx.snap +++ b/app/containers/MediaCallHeader/__snapshots__/MediaCallHeader.test.tsx.snap @@ -46,14 +46,29 @@ exports[`Story Snapshots: ActiveCall should match snapshot 1`] = ` ] } > - - + - - + @@ -377,14 +403,29 @@ exports[`Story Snapshots: Collapsed should match snapshot 1`] = ` ] } > - - + - - + @@ -708,14 +760,29 @@ exports[`Story Snapshots: ConnectingCall should match snapshot 1`] = ` ] } > - - + - - + @@ -1059,14 +1137,29 @@ exports[`Story Snapshots: Focused should match snapshot 1`] = ` ] } > - - + - - + @@ -1410,14 +1514,29 @@ exports[`Story Snapshots: WithRemoteHeld should match snapshot 1`] = ` ] } > - - + - - + @@ -1765,14 +1895,29 @@ exports[`Story Snapshots: WithRemoteMuted should match snapshot 1`] = ` ] } > - - + - - + diff --git a/app/containers/MessageComposer/MessageComposer.test.tsx b/app/containers/MessageComposer/MessageComposer.test.tsx index c63cc090e1d..56dce8186ae 100644 --- a/app/containers/MessageComposer/MessageComposer.test.tsx +++ b/app/containers/MessageComposer/MessageComposer.test.tsx @@ -876,11 +876,13 @@ describe('MessageComposer', () => { await screen.findByTestId('message-composer-attachment-0'); await screen.findByTestId('composer-quote-abc'); await fireEvent.changeText(screen.getByTestId('message-composer-input'), 'caption'); - const sendPromise = user.press(screen.getByTestId('message-composer-send')); + await user.press(screen.getByTestId('message-composer-send')); await waitFor(() => expect(sendFileMessage).toHaveBeenCalled()); await fireEvent.changeText(screen.getByTestId('message-composer-input'), 'typed while uploading'); - resolveUpload(); - await sendPromise; + await act(() => { + resolveUpload(); + return Promise.resolve(); + }); await waitFor(() => expect(composerRef.current?.getText()).toBe('')); expect(screen.queryByTestId('composer-quote-abc')).not.toBeOnTheScreen(); diff --git a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap index 3c76e098373..087e172b4a8 100644 --- a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap +++ b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap @@ -77,13 +77,29 @@ exports[`MessageComposer Audio tap record 1`] = ` } } > - - + - - + , - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - @@ -3213,7 +3681,7 @@ exports[`MessageComposer Toolbar Markdown tap code 1`] = `  - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - @@ -6280,7 +7360,7 @@ exports[`MessageComposer Toolbar Markdown type test and tap bold 1`] = `  - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - - + - - + - - + - - + , - - + - - + - - + - @@ -9347,7 +11039,7 @@ exports[`MessageComposer Toolbar tap actions 1`] = `  - + - - + , - - + - - + - - + - - + - - + , - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - - -  - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - + - - + - - + - - + - - + - - + , - - Save - + `; @@ -267,56 +273,62 @@ exports[`Story Snapshots: Image should match snapshot 1`] = ` } /> - - Save - + `; @@ -424,56 +436,62 @@ exports[`Story Snapshots: ImageOnLegacyServer should match snapshot 1`] = ` } /> - - Save - + `; @@ -581,56 +599,62 @@ exports[`Story Snapshots: ImageWithPrefilledAltText should match snapshot 1`] = } /> - - Save - + `; @@ -768,56 +792,62 @@ exports[`Story Snapshots: Video should match snapshot 1`] = ` - - Save - + `; diff --git a/app/containers/MessageComposer/components/Autocomplete/AutocompleteItem.tsx b/app/containers/MessageComposer/components/Autocomplete/AutocompleteItem.tsx index b07277ec248..39ad2a018b6 100644 --- a/app/containers/MessageComposer/components/Autocomplete/AutocompleteItem.tsx +++ b/app/containers/MessageComposer/components/Autocomplete/AutocompleteItem.tsx @@ -1,6 +1,6 @@ import { View } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; +import { RectButton } from '~/containers/GestureButtons'; import i18n from '~/i18n'; import { type IAutocompleteItemProps, type TAutocompleteItem } from '~/containers/MessageComposer/interfaces'; import { AutocompleteUserRoom } from './AutocompleteUserRoom'; diff --git a/app/containers/MessageComposer/components/Autocomplete/AutocompletePreview.tsx b/app/containers/MessageComposer/components/Autocomplete/AutocompletePreview.tsx index ef4cf1981f9..cb6476d1bb4 100644 --- a/app/containers/MessageComposer/components/Autocomplete/AutocompletePreview.tsx +++ b/app/containers/MessageComposer/components/Autocomplete/AutocompletePreview.tsx @@ -1,6 +1,6 @@ -import { RectButton } from 'react-native-gesture-handler'; import { Image } from 'expo-image'; +import { RectButton } from '~/containers/GestureButtons'; import { type IAutocompleteItemProps } from '~/containers/MessageComposer/interfaces'; import { CustomIcon } from '~/containers/CustomIcon'; import { AutocompleteItemLoading } from './AutocompleteItemLoading'; diff --git a/app/containers/MessageComposer/components/Buttons/BaseButton.tsx b/app/containers/MessageComposer/components/Buttons/BaseButton.tsx index e62678de629..4de6290c412 100644 --- a/app/containers/MessageComposer/components/Buttons/BaseButton.tsx +++ b/app/containers/MessageComposer/components/Buttons/BaseButton.tsx @@ -1,6 +1,6 @@ -import { BorderlessButton } from 'react-native-gesture-handler'; import { View, StyleSheet, useWindowDimensions } from 'react-native'; +import { BorderlessButton } from '~/containers/GestureButtons'; import I18n from '~/i18n'; import { CustomIcon, type TIconsName } from '~/containers/CustomIcon'; import { useMessageComposerApi } from '~/containers/MessageComposer/context'; diff --git a/app/containers/MessageComposer/components/RecordAudio/ReviewButton.tsx b/app/containers/MessageComposer/components/RecordAudio/ReviewButton.tsx index 852f48c2080..91ea88ce580 100644 --- a/app/containers/MessageComposer/components/RecordAudio/ReviewButton.tsx +++ b/app/containers/MessageComposer/components/RecordAudio/ReviewButton.tsx @@ -1,7 +1,7 @@ import { StyleSheet, View } from 'react-native'; import { type ReactElement } from 'react'; -import { BorderlessButton } from 'react-native-gesture-handler'; +import { BorderlessButton } from '~/containers/GestureButtons'; import i18n from '~/i18n'; import { useTheme } from '~/theme'; import { CustomIcon } from '~/containers/CustomIcon'; diff --git a/app/containers/MessageComposer/components/SendThreadToChannel.tsx b/app/containers/MessageComposer/components/SendThreadToChannel.tsx index 416cc6e4b23..1ed5aa4fe11 100644 --- a/app/containers/MessageComposer/components/SendThreadToChannel.tsx +++ b/app/containers/MessageComposer/components/SendThreadToChannel.tsx @@ -1,4 +1,4 @@ -import { TouchableWithoutFeedback } from 'react-native-gesture-handler'; +import { Touchable } from 'react-native-gesture-handler'; import { StyleSheet, Text } from 'react-native'; import { useEffect, useRef, type ReactElement } from 'react'; import { type Subscription } from 'rxjs'; @@ -68,7 +68,7 @@ export const SendThreadToChannel = (): ReactElement | null => { } return ( - setAlsoSendThreadToChannel(!alsoSendThreadToChannel)} testID='message-composer-send-to-channel'> @@ -79,7 +79,7 @@ export const SendThreadToChannel = (): ReactElement | null => { color={alsoSendThreadToChannel ? colors.buttonBackgroundPrimaryDefault : colors.fontDefault} /> {I18n.t('Message_composer_Send_to_channel')} - + ); }; diff --git a/app/containers/NewMediaCall/SelectedPeer.tsx b/app/containers/NewMediaCall/SelectedPeer.tsx index 611593265ae..c95bbdb8b0e 100644 --- a/app/containers/NewMediaCall/SelectedPeer.tsx +++ b/app/containers/NewMediaCall/SelectedPeer.tsx @@ -1,6 +1,6 @@ import { View, StyleSheet } from 'react-native'; -import { BorderlessButton } from 'react-native-gesture-handler'; +import { BorderlessButton } from '~/containers/GestureButtons'; import { useTheme } from '~/theme'; import { CustomIcon } from '../CustomIcon'; import I18n from '~/i18n'; diff --git a/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap b/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap index c2250ce3384..bdccb07cec3 100644 --- a/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap +++ b/app/containers/NewMediaCall/__snapshots__/SelectedPeer.test.tsx.snap @@ -192,33 +192,45 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` - @@ -248,7 +260,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` >  - + - @@ -424,7 +448,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` >  - + - @@ -665,7 +701,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` >  - + @@ -863,33 +899,45 @@ exports[`Story Snapshots: LongUsername should match snapshot 1`] = ` - @@ -919,7 +967,7 @@ exports[`Story Snapshots: LongUsername should match snapshot 1`] = ` >  - + @@ -1052,33 +1100,45 @@ exports[`Story Snapshots: Sip should match snapshot 1`] = ` - @@ -1108,7 +1168,7 @@ exports[`Story Snapshots: Sip should match snapshot 1`] = ` >  - + @@ -1306,33 +1366,45 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` - @@ -1362,7 +1434,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` >  - + diff --git a/app/containers/Passcode/Base/Button.tsx b/app/containers/Passcode/Base/Button.tsx index 15c3dccbc2f..cd61ab491a8 100644 --- a/app/containers/Passcode/Base/Button.tsx +++ b/app/containers/Passcode/Base/Button.tsx @@ -9,13 +9,12 @@ import { useTheme } from '~/theme'; interface IPasscodeButton { text?: string; icon?: TIconsName; - disabled?: boolean; onPress?: Function; style?: StyleProp; testID?: string; } -const Button = memo(({ style, text, disabled, onPress, icon, testID }: IPasscodeButton) => { +const Button = memo(({ style, text, onPress, icon, testID }: IPasscodeButton) => { const { colors } = useTheme(); const press = () => onPress && onPress(text); @@ -26,7 +25,6 @@ const Button = memo(({ style, text, disabled, onPress, icon, testID }: IPasscode style={[styles.buttonView, { backgroundColor: 'transparent' }, style]} underlayColor={colors.buttonBackgroundSecondaryDefault} rippleColor={colors.buttonBackgroundSecondaryPress} - enabled={!disabled} onPress={press}> {icon ? ( diff --git a/app/containers/Passcode/Base/__snapshots__/Base.test.tsx.snap b/app/containers/Passcode/Base/__snapshots__/Base.test.tsx.snap index a88d06d121c..e514a45890f 100644 --- a/app/containers/Passcode/Base/__snapshots__/Base.test.tsx.snap +++ b/app/containers/Passcode/Base/__snapshots__/Base.test.tsx.snap @@ -317,60 +317,63 @@ exports[`Story Snapshots: ChooseType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -704,60 +713,63 @@ exports[`Story Snapshots: ChooseType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1091,60 +1109,63 @@ exports[`Story Snapshots: ChooseType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1491,60 +1518,63 @@ exports[`Story Snapshots: ChooseType should match snapshot 1`] = ` ] } > - - - + - - - + @@ -2034,60 +2067,63 @@ exports[`Story Snapshots: ConfirmType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -2421,60 +2463,63 @@ exports[`Story Snapshots: ConfirmType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -2808,60 +2859,63 @@ exports[`Story Snapshots: ConfirmType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -3208,60 +3268,63 @@ exports[`Story Snapshots: ConfirmType should match snapshot 1`] = ` ] } > - - - + - - - + @@ -3751,60 +3817,63 @@ exports[`Story Snapshots: EnterType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -4138,60 +4213,63 @@ exports[`Story Snapshots: EnterType should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -4525,60 +4609,63 @@ exports[`Story Snapshots: EnterType should match snapshot 1`] = ` ] } > - - - + - - + > - + - - - + @@ -4925,60 +5018,63 @@ exports[`Story Snapshots: EnterType should match snapshot 1`] = ` ] } > - - - + - - - + @@ -5508,60 +5607,63 @@ exports[`Story Snapshots: EnterWithSubtitleAndBiometry should match snapshot 1`] ] } > - - - + - - - + - - - + @@ -5895,60 +6003,63 @@ exports[`Story Snapshots: EnterWithSubtitleAndBiometry should match snapshot 1`] ] } > - - - + - - - + - - - + @@ -6282,60 +6399,63 @@ exports[`Story Snapshots: EnterWithSubtitleAndBiometry should match snapshot 1`] ] } > - - - + - - - + - - - + @@ -6669,60 +6795,63 @@ exports[`Story Snapshots: EnterWithSubtitleAndBiometry should match snapshot 1`] ] } > - - - + - - - + - - - + @@ -7342,60 +7477,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -7729,60 +7873,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -8116,60 +8269,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -8503,60 +8665,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -9216,60 +9387,63 @@ exports[`Story Snapshots: WithSubtitle should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -9603,60 +9783,63 @@ exports[`Story Snapshots: WithSubtitle should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -9990,60 +10179,63 @@ exports[`Story Snapshots: WithSubtitle should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -10390,60 +10588,63 @@ exports[`Story Snapshots: WithSubtitle should match snapshot 1`] = ` ] } > - - - + - - - + diff --git a/app/containers/Passcode/PasscodeChoose.tsx b/app/containers/Passcode/PasscodeChoose.tsx index 268809313e3..55587369df4 100644 --- a/app/containers/Passcode/PasscodeChoose.tsx +++ b/app/containers/Passcode/PasscodeChoose.tsx @@ -1,6 +1,5 @@ import { useRef, useState } from 'react'; import * as Haptics from 'expo-haptics'; -import { gestureHandlerRootHOC } from 'react-native-gesture-handler'; import Base, { type IBase } from './Base'; import { TYPE } from './constants'; @@ -62,4 +61,4 @@ const PasscodeChoose = ({ finishProcess, force = false }: IPasscodeChoose) => { ); }; -export default gestureHandlerRootHOC(PasscodeChoose); +export default PasscodeChoose; diff --git a/app/containers/Passcode/PasscodeEnter.tsx b/app/containers/Passcode/PasscodeEnter.tsx index e7a211e1b98..2b5b28e12e8 100644 --- a/app/containers/Passcode/PasscodeEnter.tsx +++ b/app/containers/Passcode/PasscodeEnter.tsx @@ -1,6 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react'; import { useAsyncStorage } from '@react-native-async-storage/async-storage'; -import { gestureHandlerRootHOC } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; import { sha256 } from 'js-sha256'; @@ -136,4 +135,4 @@ const PasscodeEnter = ({ hasBiometry: initialHasBiometry, reason: initialReason, ); }; -export default gestureHandlerRootHOC(PasscodeEnter); +export default PasscodeEnter; diff --git a/app/containers/ReactionsList/AllTab.tsx b/app/containers/ReactionsList/AllTab.tsx index d120a1f5f08..6bb8e909d34 100644 --- a/app/containers/ReactionsList/AllTab.tsx +++ b/app/containers/ReactionsList/AllTab.tsx @@ -5,6 +5,7 @@ import Emoji from '../message/components/Emoji'; import { useTheme } from '~/theme'; import { type IReaction } from '~/definitions'; import I18n from '~/i18n'; +import { isAndroid } from '~/lib/methods/helpers'; import styles from './styles'; import { useAppSelector } from '~/lib/hooks/useAppSelector'; @@ -61,6 +62,7 @@ const AllTab = ({ reactions }: IAllTabProps): ReactElement => ( } keyExtractor={item => item.emoji} /> diff --git a/app/containers/ReactionsList/UsersList.tsx b/app/containers/ReactionsList/UsersList.tsx index 1292bdc9fb0..3390dc4ecde 100644 --- a/app/containers/ReactionsList/UsersList.tsx +++ b/app/containers/ReactionsList/UsersList.tsx @@ -5,6 +5,7 @@ import { useSelector } from 'react-redux'; import { useTheme } from '~/theme'; import { type IApplicationState } from '~/definitions'; import Avatar from '../Avatar'; +import { isAndroid } from '~/lib/methods/helpers'; import styles from './styles'; const UsersList = ({ emoji, usernames, names }: { emoji: string; usernames: string[]; names: string[] }): ReactElement => { @@ -20,6 +21,7 @@ const UsersList = ({ emoji, usernames, names }: { emoji: string; usernames: stri diff --git a/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap b/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap index 9ee970be89c..27dac4757df 100644 --- a/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap +++ b/app/containers/ReactionsList/__snapshots__/ReactionsList.test.tsx.snap @@ -656,6 +656,7 @@ exports[`Story Snapshots: ReactionsListFullName should match snapshot 1`] = ` getItem={[Function]} getItemCount={[Function]} keyExtractor={[Function]} + nestedScrollEnabled={false} onContentSizeChange={[Function]} onLayout={[Function]} onMomentumScrollBegin={[Function]} @@ -1803,6 +1804,7 @@ exports[`Story Snapshots: ReactionsListStory should match snapshot 1`] = ` getItem={[Function]} getItemCount={[Function]} keyExtractor={[Function]} + nestedScrollEnabled={false} onContentSizeChange={[Function]} onLayout={[Function]} onMomentumScrollBegin={[Function]} diff --git a/app/containers/RoomHeader/RoomHeader.tsx b/app/containers/RoomHeader/RoomHeader.tsx index 06b833796c9..df29c682607 100644 --- a/app/containers/RoomHeader/RoomHeader.tsx +++ b/app/containers/RoomHeader/RoomHeader.tsx @@ -1,6 +1,6 @@ import { memo, type ReactElement } from 'react'; import { StyleSheet, Text, useWindowDimensions, View } from 'react-native'; -import { TouchableOpacity } from 'react-native-gesture-handler'; +import { Touchable } from 'react-native-gesture-handler'; import { KeyboardFocusView } from 'react-native-external-keyboard'; import { useResponsiveLayout } from '~/lib/hooks/useResponsiveLayout/useResponsiveLayout'; @@ -234,7 +234,9 @@ const Header = ({ focusable={!disabled} canBeFocused={!disabled} style={[styles.container, { opacity: disabled ? 0.5 : 1, height: 36.9 * fontScale }]}> - - + ); }; diff --git a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap index 05864785722..5a1550ad232 100644 --- a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap +++ b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap @@ -42,13 +42,36 @@ exports[`Story Snapshots: DM_Status should match snapshot 1`] = ` ] } > - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - Online + John Doe - + + Online + + , - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - Away + John Doe - + + Away + + , - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - Busy + John Doe - + + Busy + + , - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - Offline + John Doe - + + Offline + + , - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - In a meeting + John Doe - + + In a meeting + + , - - - -  - - - John Doe - - - - + -  - - + John Doe + + + + - In a meeting - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + In a meeting + - + , - - - -  - - - John Doe - - - - + -  - - + John Doe + + + + - having lunch (clock icon should be visible) - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + having lunch (clock icon should be visible) + - + , - - - -  - - - John Doe - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - In a meeting (past expiry — clock icon should be hidden) + John Doe - + + In a meeting (past expiry — clock icon should be hidden) + + , ] @@ -1697,13 +1753,36 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = ` ] } > - - - -  - - - private channel - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + private channel + - + , - - - -  - - - public channel - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + public channel + - + , - - - -  - - - discussion - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + discussion + - + , - - - -  - - - omnichannel - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + omnichannel + - + , - - - -  - - - private team - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + private team + - + , - - - -  - - - public team - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + public team + - + , - - - -  - - - group dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + group dm + - + , - - - -  - - - online dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + online dm + - + , - - - -  - - - away dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + away dm + - + , - - - -  - - - busy dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + busy dm + - + , - - - -  - - - loading dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + loading dm + - + , - - - -  - - - offline dm - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + offline dm + - + , - - - -  - - - classified - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + classified + - + , - - - -  - - - classified - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + classified + - + , ] @@ -3804,13 +3958,36 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` ] } > - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - subtitle + title - + + subtitle + + , - - - -  - - - title - - - +  + + - subtitle + title - + + subtitle + + , - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - subtitle + title - + + subtitle + + , ] @@ -4373,13 +4548,36 @@ exports[`Story Snapshots: Thread should match snapshot 1`] = ` ] } > - - - - title - - - + + - + -  - - - parent title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + parent title + - + , - - - - markdown preview #3 4 5 - - - - + + + -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + - + , ] @@ -4778,13 +4967,36 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` ] } > - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + title + - + , - - - -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + - + , - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - subtitle + title - + + subtitle + + , - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + title - + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + , - - - -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - + > +  + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + , ] @@ -5646,13 +5870,36 @@ exports[`Story Snapshots: Typing should match snapshot 1`] = ` ] } > - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - - user 1 - - - is typing - ... + title - + + + user 1 + + + is typing + ... + + , - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - - user 1 and user 2 - - - are typing - ... + title - + + + user 1 and user 2 + + + are typing + ... + + , - - - -  - - - title - - + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - - user 1, user 2, user 3, user 4, user 5 - - - are typing - ... + title - + + + user 1, user 2, user 3, user 4, user 5 + + + are typing + ... + + , ] diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index ed14ae1e18a..c215627cfed 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -7,10 +7,10 @@ import Animated, { useAnimatedReaction, useSharedValue } from 'react-native-reanimated'; -import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; import { scheduleOnRN } from 'react-native-worklets'; +import { RectButton } from '~/containers/GestureButtons'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '~/lib/constants/constantDisplayMode'; import styles, { ACTION_WIDTH, LONG_SWIPE } from './styles'; diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 0db3467dc3b..bf828e93013 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,10 +1,11 @@ import { useRef, memo, type ReactElement } from 'react'; import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; import { - Gesture, GestureDetector, - type GestureUpdateEvent, - type PanGestureHandlerEventPayload + type PanGestureActiveEvent, + useCompetingGestures, + useLongPressGesture, + usePanGesture } from 'react-native-gesture-handler'; import { scheduleOnRN } from 'react-native-worklets'; @@ -90,7 +91,7 @@ const Touchable = ({ } }; - const handleRelease = (event: GestureUpdateEvent) => { + const handleRelease = (event: PanGestureActiveEvent) => { const { translationX } = event; valueRef.current += translationX; let toValue = 0; @@ -169,27 +170,29 @@ const Touchable = ({ valueRef.current = toValue; }; - const longPressGesture = Gesture.LongPress() - .minDuration(500) - .onStart(() => { + const longPressGesture = useLongPressGesture({ + minDuration: 500, + onActivate: () => { scheduleOnRN(handleLongPress); - }); + } + }); - const panGesture = Gesture.Pan() - .activeOffsetX([-10, 10]) // More sensitive horizontal detection - .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling - .enabled(swipeEnabled) - .onUpdate(event => { + const panGesture = usePanGesture({ + activeOffsetX: [-10, 10], // More sensitive horizontal detection + failOffsetY: [-20, 20], // Fail on vertical movement to distinguish scrolling + enabled: swipeEnabled, + onUpdate: event => { transX.value = event.translationX + rowOffSet.value; if (transX.value > 2 * width) transX.value = 2 * width; - }) - .onEnd(event => { + }, + onDeactivate: event => { scheduleOnRN(handleRelease, event); - }); + } + }); - // Use Race instead of Simultaneous to prevent conflicts + // Use competing gestures instead of simultaneous to prevent conflicts // Pan gesture will take priority over long press for horizontal swipes - const composedGesture = Gesture.Race(panGesture, longPressGesture); + const composedGesture = useCompetingGestures(panGesture, longPressGesture); const animatedStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] diff --git a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap index cd35cf933d4..ec31857a13f 100644 --- a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap +++ b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap @@ -3,46 +3,41 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` [ - + } + > + @@ -55,563 +50,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + + rocket.cat + + + - 10:00 - + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontVariant": [ + "tabular-nums", + ], + "fontWeight": "600", + "textAlign": "left", + }, + { + "color": "#1D74F5", + }, + ], + ] + } + > + 10:00 + + - - + + , - + } + > + @@ -712,563 +722,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + + + - unread - - + > +  + - 10:00 + unread - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -1413,563 +1438,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - unread - - + > +  + - 10:00 + unread - +999 + 10:00 - - - - - - - - - - , - - + + +999 + + + + + + + + + + + + , + + } + > + + + + + +  + + + + + + @@ -2111,28 +2278,53 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - -  - - - - +  + + + + + - - -  - - - - - - - - - - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - user mentions - - + > +  + - 10:00 + user mentions - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -2815,563 +2870,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - group mentions - - + > +  + - 10:00 + group mentions - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -3516,563 +3586,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - - - - - +  + + + + + - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - thread unread - - + > +  + - 10:00 + thread unread - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -4217,563 +4302,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + + + - thread unread user - - + > +  + - 10:00 + thread unread user - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -4918,563 +5018,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - thread unread group - - + > +  + - 10:00 + thread unread group - 1 + 10:00 - - - - - - - - - - , - - + + 1 + + + + + + + + + + + + , + + } + > + + + + + +  + + + + + + @@ -5616,28 +5858,53 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - -  - - - - +  + + + + + - - -  - - - - - - - - - - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - user mentions priority 1 - - + > +  + - 10:00 + user mentions priority 1 - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -6320,563 +6450,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - group mentions priority 2 - - + > +  + - 10:00 + group mentions priority 2 - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -7021,563 +7166,542 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - - - - - +  + + + + + - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - thread unread priority 3 - - + > +  + - 10:00 + thread unread priority 3 - 1 + 10:00 + + + 1 + + - - + + , ] @@ -7674,46 +7839,168 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` exports[`Story Snapshots: Basic should match snapshot 1`] = ` - + } +> + + + + + +  + + + + + + @@ -7723,28 +8010,53 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - -  - - + +  + + + - - -  - - - - - - - - - - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - -  - - - rocket.cat - - +  + + - 10:00 + rocket.cat + + + 10:00 + + - - + + `; @@ -8314,46 +8494,41 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` [ - + } + > + @@ -8366,563 +8541,542 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={36} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=72", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={36} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -9067,563 +9257,542 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - - - - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + + + - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={36} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=72", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={36} + /> + - + -  - - - unread - - + > +  + - 10:00 + unread - +999 + 10:00 + + + +999 + + - - + + , - + @@ -9768,594 +9973,542 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - - - - - +  + + + + + - - - + - - - - -  - - - rocket.cat - + symbolSize={null} + symbolWeight={null} + transition={null} + width={36} + /> + + - Auto-join +  - - - 10:00 + rocket.cat + + + Auto-join + + + + + 10:00 + + - - + + , ] @@ -10396,46 +10621,41 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1`] = ` [ - + } + > + @@ -10448,412 +10668,416 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - -  - - - rocket.cat - - - 10:00 +  - + rocket.cat + + - 1 + 10:00 + + + 1 + + - - + + , - + } + > + @@ -11090,412 +11325,416 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + + + + + +  + + + + + + @@ -11664,28 +12041,53 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 60, }, + [Function], ] } > - - -  +  - + - - - - - - -  - - + +  + + + - - -  - - - - - - - - - - -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - Auto-join +  - - - 10:00 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + Auto-join + + + + + 10:00 + + - - + + , ] @@ -12236,46 +12506,41 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1`] = ` [ - + } + > + @@ -12288,406 +12553,413 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + +  + + + -  - - - - - - rocket.cat - - - 10:00 - - - - + rocket.cat + + - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + ] + } + > + 10:00 + + - 1 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + 1 + + - - + + , - + @@ -12982,406 +13262,413 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - -  - - - - - rocket.cat +  - + + + - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + ] + } + > + rocket.cat + + + 10:00 + + - 1 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + 1 + + - - + + , - + } + > + @@ -13676,406 +13971,413 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + +  + + + -  - - - - - - rocket.cat - - - 10:00 - - - - + rocket.cat + + + 10:00 + + + - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + - - + + , ] @@ -14279,46 +14594,41 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` [ - + @@ -14331,658 +14641,673 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + +  + + + rocket.cat + + +  + + -  - - - rocket.cat - - -  - - - - 10:00 - + + 10:00 + + - - + + , - + } + > + @@ -14995,583 +15320,542 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 60, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={36} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=72", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={36} + /> + - -  - - - rocket.cat - - -  - - + > +  + - 10:00 + rocket.cat + + +  + + + 10:00 + + - - + + , ] @@ -15612,46 +15957,41 @@ exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ - + } + > + @@ -15664,667 +16004,682 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - - -  - - - rocket.cat - - - 10:00 - + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> - - No message - - - - - - - - - , - - - +  + + + rocket.cat + + + 10:00 + + + + + No message + + + + + + + + + + , + + + @@ -16337,667 +16692,682 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - - -  - - - rocket.cat - - - 10:00 - + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> - + +  + + + rocket.cat + + + 10:00 + + + - 2 - + + 2 + + - - + + , - + } + > + @@ -17010,667 +17380,682 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - - 10:00 - - - - +  + + + rocket.cat + + + 10:00 + + + - You: 1 - + + You: 1 + + - - + + , - + } + > + @@ -17683,667 +18068,1562 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - + +  + + + + + + + -  - - - - - - + + + + + + + +  + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + + + + + + + , + + + + + + + +  + + + + + + + + + +  + + + + + + +  + + + + + + + + + + + + + + + +  + + + rocket.cat + + + 10:00 + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + 1 + + + + + + + + + + + , + + + - - - - - - - - -  - - - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - + } + > +  + - - - - , - - + + @@ -18353,28 +19633,53 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - - - - - +  + + + + + - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - +  + + + rocket.cat + + - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + ] + } + > + 10:00 + + - 1 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + +999 + + - - + + , - + } + > + + + + + + +  + + + + + @@ -19091,28 +20386,53 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - +  + + + rocket.cat + + + 10:00 + + + - rocket.cat - - - 10:00 - - - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - - +999 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + 1 + + - - + + , +] +`; + +exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` +[ - + } + > + + + + + +  + + + + + + @@ -19829,28 +21144,53 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - - - - - -  - - - rocket.cat - - - 10:00 - + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - +  + + - 1 + rocket.cat + + + 10:00 + + - - + + , -] -`; - -exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` -[ - + } + > + @@ -20575,555 +21671,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -21211,555 +22322,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - - -  - - - - - - - - - - -  - - + + +  + + + + - - -  - - - - - - - +  + + + + - - - - - + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + + + + + + - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - - - , - - + + + + , + + + + + + + +  + + + + + @@ -21844,28 +23097,53 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -22483,555 +23624,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - -  - - - rocket.cat - - + +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -23119,555 +24275,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - - - - - - - - - -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + + - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + + + + + + +  + + + + + @@ -23752,28 +25050,53 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -24391,555 +25577,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -25027,555 +26228,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -25663,555 +26879,542 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - - - - - - - - - -  - - + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + + - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , +] +`; + +exports[`Story Snapshots: Tag should match snapshot 1`] = ` +[ - + } + > + + + + + + +  + + + + + @@ -26296,28 +27659,53 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - - - - - +  + + + + + - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + Auto-join + + + + + 10:00 + + - - + + , -] -`; - -exports[`Story Snapshots: Tag should match snapshot 1`] = ` -[ - + } + > + @@ -26940,564 +28225,602 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + - rocket.cat - + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + + +  + + + rocket.cat + + + + Auto-join + + + - Auto-join + 10:00 - 10:00 + No message - - + + , - + } + > + + + + + +  + + + + + + @@ -27612,28 +29077,53 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - - - - - -  - - - rocket.cat - + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + + +  + + - Auto-join + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - - 10:00 - - - - + + Auto-join + + + - No message - + "alignItems": "flex-end", + } + } + > + + 10:00 + + + - - + + , - + } + > + @@ -28328,564 +29643,602 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - - - -  - - - - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + + +  + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + Auto-join + + + - Auto-join + 10:00 - 10:00 + No message - - + + , - +] +`; + +exports[`Story Snapshots: Touch should match snapshot 1`] = ` + + - - - + @@ -29124,54 +30513,54 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - - + } + underlayColor="black" + > - + - - - + - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + rocket.cat - Auto-join - - - - 10:00 - - - - - No message - - - - - - - - - , -] -`; - -exports[`Story Snapshots: Touch should match snapshot 1`] = ` - - - - - - - -  - - - + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + + + + + + + + + +`; + +exports[`Story Snapshots: Type should match snapshot 1`] = ` +[ - - + + - - -  - - - - - - -  - - - - - - - - - - - - - - -  - - - rocket.cat - - - - 10:00 - - - + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + - - - - -`; - -exports[`Story Snapshots: Type should match snapshot 1`] = ` -[ - - + @@ -30357,28 +31154,53 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - - -  - - - - - - - - - +  + + + + + + + + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -31004,555 +31689,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -31640,555 +32340,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - -  - - - - - - - - - - -  - - + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={false} + activeUnderlayOpacity={0.105} + animationDuration={0} + collapsable={false} + focusable={true} + onBlur={[Function]} + onClick={[Function]} + onFocus={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + } + } + underlayColor="black" + > + +  + + + + - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - - - , - - + + + + , + + + + + + + +  + + + + + @@ -32273,28 +33115,53 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - - - - - +  + + + + + - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -32912,555 +33642,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - -  - - - - - +  + + + + - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -33548,555 +34293,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - - - -  - - - - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + + + + + +  + + + + + + @@ -34181,28 +35068,53 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - - + + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -34820,555 +35595,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - - -  - - - - - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , - + } + > + @@ -35456,555 +36246,542 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "right": 0, "top": 0, }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, { "height": 75, }, + [Function], ] } > - - + -  - - + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + + + - - - - - -  - - - - - - -  - - - - - - - +  + + + + - - +  + + + + + + + + - - - - -  - - + + + - rocket.cat - - + > +  + - 10:00 + rocket.cat + + + 10:00 + + - - + + , ] @@ -36045,46 +36855,168 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` exports[`Story Snapshots: User should match snapshot 1`] = ` [ - + } + > + + + + + +  + + + + + + @@ -36094,28 +37026,53 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - -  - - + +  + + + - - -  - - - - - - - - - - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - diego.mello - - + > +  + - 10:00 + diego.mello + + + 10:00 + + - - - - , - - + + + + , + + + + + + + +  + + + + + @@ -36738,28 +37685,53 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + [Function], ] } > - - -  +  - + - - - - - - - -  - - - - - - -  - - + +  + + + - - - - - - + - + - - + height={48} + nativeViewRef={{"current":"NativeComponent"}} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + sfEffect={null} + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + symbolSize={null} + symbolWeight={null} + transition={null} + width={48} + /> + - + -  - - - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries - - + > +  + - 10:00 + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + 10:00 + + - - + + , ] diff --git a/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx b/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx index 5e8cffaac88..d7c245982a9 100644 --- a/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx +++ b/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx @@ -8,10 +8,10 @@ import Animated, { useSharedValue, type SharedValue } from 'react-native-reanimated'; -import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; import { scheduleOnRN } from 'react-native-worklets'; +import { RectButton } from '~/containers/GestureButtons'; import { CustomIcon } from '~/containers/CustomIcon'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; diff --git a/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx b/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx index 1b3b90af205..3b003d77230 100644 --- a/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx +++ b/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx @@ -1,11 +1,6 @@ import { useRef, memo, type ReactElement } from 'react'; import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; -import { - Gesture, - GestureDetector, - type GestureUpdateEvent, - type PanGestureHandlerEventPayload -} from 'react-native-gesture-handler'; +import { GestureDetector, type PanGestureActiveEvent, usePanGesture } from 'react-native-gesture-handler'; import { View, type AccessibilityActionEvent } from 'react-native'; import { scheduleOnRN } from 'react-native-worklets'; @@ -81,7 +76,7 @@ const SwipeableDeleteTouchable = ({ } }; - const handleRelease = (event: GestureUpdateEvent) => { + const handleRelease = (event: PanGestureActiveEvent) => { const { translationX } = event; valueRef.current += translationX; let toValue = 0; @@ -147,10 +142,10 @@ const SwipeableDeleteTouchable = ({ valueRef.current = toValue; }; - const panGesture = Gesture.Pan() - .activeOffsetX([-10, 10]) // More sensitive horizontal detection - .failOffsetY([-20, 20]) // Fail on vertical movement to distinguish scrolling - .onUpdate(event => { + const panGesture = usePanGesture({ + activeOffsetX: [-10, 10], // More sensitive horizontal detection + failOffsetY: [-20, 20], // Fail on vertical movement to distinguish scrolling + onUpdate: event => { const newValue = event.translationX + rowOffSet.value; if (I18n.isRTL) { @@ -171,10 +166,11 @@ const SwipeableDeleteTouchable = ({ // Limit how far left it can stretch if (transX.value < -width) transX.value = -width; } - }) - .onEnd(event => { + }, + onDeactivate: event => { scheduleOnRN(handleRelease, event); - }); + } + }); const animatedStyles = useAnimatedStyle(() => ({ transform: [{ translateX: transX.value }] diff --git a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap index 1a4b92c41a3..1a20d4ca521 100644 --- a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap +++ b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap @@ -24,61 +24,64 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` ] } > - - - + , - - - + , - - - + , ] `; @@ -728,739 +737,777 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` [ - + } + > + - - -  - - + +  + + + - - - - - - - - - Rocket.Chat - - - https://open.rocket.chat/ - - - - + + + Rocket.Chat + + + https://open.rocket.chat/ + + + -  - + +  + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - - - - Another Server - - - https://example.com/ - - - - + + + Another Server + + + https://example.com/ + + + -  - + +  + + - - + + , ] @@ -1490,61 +1537,64 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` ] } > - - - + , - - - + , - - - + , ] `; diff --git a/app/containers/TabView/index.tsx b/app/containers/TabView/index.tsx index cf724e0fc46..c82de5dc7c5 100644 --- a/app/containers/TabView/index.tsx +++ b/app/containers/TabView/index.tsx @@ -1,7 +1,7 @@ import { useCallback, useState, type ReactNode } from 'react'; import { View } from 'react-native'; import { TabView as ReanimatedTabView, type Route, type NavigationState } from 'reanimated-tab-view'; -import { TouchableOpacity } from 'react-native-gesture-handler'; +import { Touchable } from 'react-native-gesture-handler'; import styles from './styles'; import { useTheme } from '~/theme'; @@ -28,9 +28,9 @@ export const TabView = ({ routes, renderTabItem, renderScene }: TabViewProps) => {routes.map((tab: Route, index: number) => ( - jumpTo(tab.key)} hitSlop={10}> + jumpTo(tab.key)} hitSlop={10} activeOpacity={0.2} animationDuration={{ in: 0, out: 150 }}> {renderTabItem(tab, routeIndex === index ? colors.strokeHighlight : colors.fontSecondaryInfo)} - + - - - + @@ -1298,60 +1301,63 @@ exports[`Story Snapshots: SecureTextEntry should match snapshot 1`] = ` ] } > - - - + diff --git a/app/containers/Thumbs.tsx b/app/containers/Thumbs.tsx index 7b2a3ad7099..8c7968d081d 100644 --- a/app/containers/Thumbs.tsx +++ b/app/containers/Thumbs.tsx @@ -1,7 +1,7 @@ import { memo } from 'react'; import { FlatList, Image, StyleSheet, View, type StyleProp, type ViewStyle } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; +import { RectButton } from '~/containers/GestureButtons'; import { BUTTON_HIT_SLOP } from './message/utils'; import { CustomIcon } from './CustomIcon'; import { useTheme } from '../theme'; diff --git a/app/containers/Touch.tsx b/app/containers/Touch.tsx index 10c50bb8dff..1f414232df9 100644 --- a/app/containers/Touch.tsx +++ b/app/containers/Touch.tsx @@ -1,5 +1,5 @@ import { forwardRef, type ReactNode } from 'react'; -import { RectButton, type RectButtonProps } from 'react-native-gesture-handler'; +import { Touchable, type TouchableProps } from 'react-native-gesture-handler'; import { View, StyleSheet, @@ -11,8 +11,10 @@ import { import { withKeyboardFocus } from 'react-native-external-keyboard'; import { useTheme } from '../theme'; +import { isAndroid } from '../lib/methods/helpers/deviceInfo'; -export interface ITouchProps extends RectButtonProps { +export interface ITouchProps extends TouchableProps { + rippleColor?: string; children: ReactNode; accessible?: boolean; accessibilityLabel?: string; @@ -24,7 +26,7 @@ export interface ITouchProps extends RectButtonProps { disabled?: boolean; } -const KeyboardRectButton = withKeyboardFocus(RectButton); +const KeyboardTouchable = withKeyboardFocus(Touchable); const Touch = forwardRef( ( @@ -32,6 +34,7 @@ const Touch = forwardRef( children, onPress, underlayColor, + rippleColor, accessible, accessibilityLabel, accessibilityHint, @@ -77,17 +80,18 @@ const Touch = forwardRef( marginTop }; return ( - + disabled={disabled}> ( style={viewStyle}> {children} - + ); } ); diff --git a/app/containers/UIKit/MultiSelect/Input.tsx b/app/containers/UIKit/MultiSelect/Input.tsx index 893b4520745..fdb5ab206ae 100644 --- a/app/containers/UIKit/MultiSelect/Input.tsx +++ b/app/containers/UIKit/MultiSelect/Input.tsx @@ -25,7 +25,7 @@ const Input = ({ children, onPress, loading, inputStyle, placeholder, disabled, onPress={onPress} testID={testID} style={[{ backgroundColor: colors.surfaceRoom }, styles.inputBorder, inputStyle]} - enabled={!disabled}> + disabled={disabled}> {placeholder ? {placeholder} : children} {loading ? ( diff --git a/app/containers/UIKit/__snapshots__/UiKitMessage.test.tsx.snap b/app/containers/UIKit/__snapshots__/UiKitMessage.test.tsx.snap index 5d55ef5e549..6bdb0962905 100644 --- a/app/containers/UIKit/__snapshots__/UiKitMessage.test.tsx.snap +++ b/app/containers/UIKit/__snapshots__/UiKitMessage.test.tsx.snap @@ -527,56 +527,60 @@ exports[`Story Snapshots: ActionButton should match snapshot 1`] = ` , - - Show more - , + , ] `; @@ -5732,56 +5736,60 @@ exports[`Story Snapshots: SectionDatePicker should match snapshot 1`] = ` - - Select a date - + `; @@ -6753,56 +6761,60 @@ exports[`Story Snapshots: SectionMultiSelect should match snapshot 1`] = ` - - 2 selecteds - + , - - 0 selecteds - + , ] `; @@ -7091,13 +7107,29 @@ exports[`Story Snapshots: SectionOverflow should match snapshot 1`] = ` ] } > - - - + `; diff --git a/app/containers/UIKit/__snapshots__/UiKitModal.test.tsx.snap b/app/containers/UIKit/__snapshots__/UiKitModal.test.tsx.snap index c49be48fe7e..c720f83525b 100644 --- a/app/containers/UIKit/__snapshots__/UiKitModal.test.tsx.snap +++ b/app/containers/UIKit/__snapshots__/UiKitModal.test.tsx.snap @@ -1675,56 +1675,60 @@ exports[`Story Snapshots: ModalActionsWithShowMore should match snapshot 1`] = ` , - - Show more - , + , - - - + , - - - + , - - - + , ] @@ -2697,60 +2710,63 @@ exports[`Story Snapshots: ModalDatePickerWithError should match snapshot 1`] = ` ] } > - - @@ -2823,7 +2839,7 @@ exports[`Story Snapshots: ModalDatePickerWithError should match snapshot 1`] = ` - + - - @@ -3248,7 +3267,7 @@ exports[`Story Snapshots: ModalFormInput should match snapshot 1`] = ` - + , ] @@ -4597,60 +4616,63 @@ exports[`Story Snapshots: ModalMultiSelect should match snapshot 1`] = ` ] } > - - @@ -4728,7 +4750,7 @@ exports[`Story Snapshots: ModalMultiSelect should match snapshot 1`] = ` - + - - @@ -4913,60 +4938,63 @@ exports[`Story Snapshots: ModalMultiSelect should match snapshot 1`] = ` ] } > - - - + - + - - - + @@ -605,60 +608,63 @@ exports[`Story Snapshots: ArchivedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -1071,60 +1077,63 @@ exports[`Story Snapshots: AttachmentWithTextAndLink should match snapshot 1`] = ] } > - - - + @@ -1877,60 +1886,63 @@ exports[`Story Snapshots: AttachmentWithTextAndLinkLargeFont should match snapsh ] } > - - - + @@ -2682,137 +2694,140 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -3589,60 +3607,63 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` ] } > - - - + @@ -4034,60 +4055,63 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` ] } > - - - + @@ -4495,60 +4519,63 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` ] } > - - - + @@ -4969,60 +4996,63 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` ] } > - - - + @@ -5422,60 +5452,63 @@ exports[`Story Snapshots: Basic should match snapshot 1`] = ` ] } > - - - + @@ -5888,60 +5921,63 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -6340,137 +6376,140 @@ exports[`Story Snapshots: BasicLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -7291,137 +7333,140 @@ Testing block quote." undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -8327,137 +8375,140 @@ Testing block quote." undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -9467,137 +9521,140 @@ exports[`Story Snapshots: BroadcastLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -10664,137 +10724,140 @@ exports[`Story Snapshots: CollapsedAttachments should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -12119,137 +12185,140 @@ exports[`Story Snapshots: CollapsedAttachmentsLargeFont should match snapshot 1` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -13576,137 +13648,140 @@ exports[`Story Snapshots: CollapsibleAttachmentWithText should match snapshot 1` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -15189,137 +15267,140 @@ exports[`Story Snapshots: CollapsibleAttachmentWithTextLargeFont should match sn undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -17467,137 +17551,140 @@ exports[`Story Snapshots: ColoredAttachmentsLargeFont should match snapshot 1`] undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -19577,137 +19667,140 @@ exports[`Story Snapshots: CustomFields should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -21545,137 +21641,140 @@ exports[`Story Snapshots: CustomFieldsLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -23199,137 +23301,140 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -24441,137 +24549,140 @@ exports[`Story Snapshots: DateAndUnreadSeparators should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -25428,137 +25542,140 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -26670,137 +26790,140 @@ exports[`Story Snapshots: DateAndUnreadSeparatorsLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -27715,137 +27841,140 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -28877,137 +29009,140 @@ exports[`Story Snapshots: Discussion should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -30050,137 +30188,140 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -31212,137 +31356,140 @@ exports[`Story Snapshots: DiscussionLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -32556,137 +32706,140 @@ exports[`Story Snapshots: EditedLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -33774,137 +33930,140 @@ exports[`Story Snapshots: EditingLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -34692,137 +34854,140 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -35671,137 +35839,140 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -36603,137 +36777,140 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -37587,137 +37767,140 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -38566,137 +38752,140 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -39498,137 +39690,140 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -40763,137 +40961,140 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -42124,137 +42328,140 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -43021,137 +43231,140 @@ exports[`Story Snapshots: Encrypted should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -44386,137 +44602,140 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -46188,60 +46410,63 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -46481,60 +46706,63 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -46972,60 +47200,63 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -47378,60 +47609,63 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -47937,60 +48171,63 @@ exports[`Story Snapshots: EncryptedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -48662,60 +48899,63 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` ] } > - - - + @@ -49106,137 +49346,140 @@ exports[`Story Snapshots: Error should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -50009,137 +50255,140 @@ exports[`Story Snapshots: ErrorLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -51146,137 +51398,140 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -52342,137 +52600,140 @@ exports[`Story Snapshots: FileAttachmentsWithFilenames should match snapshot 1`] undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -54086,137 +54350,140 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -55282,137 +55552,140 @@ exports[`Story Snapshots: FileAttachmentsWithFilenamesLargeFont should match sna undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -57187,137 +57463,140 @@ exports[`Story Snapshots: FullName should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -58119,137 +58401,140 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -59449,137 +59737,140 @@ exports[`Story Snapshots: GroupedMessages should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -60368,137 +60662,140 @@ exports[`Story Snapshots: GroupedMessagesLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -61717,60 +62017,63 @@ exports[`Story Snapshots: Ignored should match snapshot 1`] = ` ] } > - - - + @@ -62035,60 +62338,63 @@ exports[`Story Snapshots: IgnoredLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -62348,60 +62654,63 @@ exports[`Story Snapshots: InlineKatex should match snapshot 1`] = ` ] } > - - - + @@ -62800,60 +63109,63 @@ exports[`Story Snapshots: InlineKatexLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -63244,60 +63556,63 @@ exports[`Story Snapshots: JitsiCall should match snapshot 1`] = ` ] } > - - - + @@ -63772,60 +64087,63 @@ exports[`Story Snapshots: JitsiCallLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -64307,137 +64625,140 @@ exports[`Story Snapshots: Katex should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -65135,137 +65459,140 @@ exports[`Story Snapshots: KatexArrayLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -65965,137 +66295,140 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -67219,137 +67555,140 @@ exports[`Story Snapshots: Lists should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -68648,137 +68990,140 @@ exports[`Story Snapshots: ListsLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -70023,137 +70371,140 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -70965,137 +71319,140 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -71859,137 +72219,140 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -72869,137 +73235,140 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -73882,137 +74254,140 @@ exports[`Story Snapshots: LongNameUser should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -75130,137 +75508,140 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -76072,137 +76456,140 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -76966,137 +77356,140 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -77976,137 +78372,140 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -78989,137 +79391,140 @@ exports[`Story Snapshots: LongNameUserLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -80237,137 +80645,140 @@ exports[`Story Snapshots: Mentions should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -81529,137 +81943,140 @@ exports[`Story Snapshots: MentionsLargeFont should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -82821,137 +83241,140 @@ exports[`Story Snapshots: Message should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -83983,137 +84409,140 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -85424,30 +85856,47 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -85611,137 +86060,140 @@ exports[`Story Snapshots: MessageWithNestedReplyAndFile should match snapshot 1` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -87237,137 +87692,140 @@ exports[`Story Snapshots: MessageWithReadReceipt should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -88704,137 +89165,140 @@ exports[`Story Snapshots: MessageWithReadReceiptLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -90171,137 +90638,140 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -91767,137 +92240,140 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -93466,137 +93945,140 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -94815,137 +95300,140 @@ exports[`Story Snapshots: MessageWithReplyAndFile should match snapshot 1`] = ` undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -96230,137 +96721,140 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -97739,137 +98236,140 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -98557,60 +99074,63 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot ] } > - - - + @@ -99264,137 +99784,140 @@ exports[`Story Snapshots: MessageWithReplyAndFileLargeFont should match snapshot undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -100816,137 +101342,140 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -102308,137 +102840,140 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = undefined, ] } - > - - - - - - - - - - - - + + + + + + + + + + + - - - + @@ -103765,60 +104303,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -104137,60 +104678,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -104569,60 +105113,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -105001,60 +105548,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -105433,60 +105983,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -105865,60 +106418,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -106297,60 +106853,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -106729,60 +107288,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -107161,60 +107723,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -107593,60 +108158,63 @@ exports[`Story Snapshots: MessageWithThread should match snapshot 1`] = ` ] } > - - - + @@ -107911,60 +108479,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -108478,60 +109049,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -108850,60 +109424,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -109282,60 +109859,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -109714,60 +110294,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -110146,60 +110729,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -110578,60 +111164,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -111010,60 +111599,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -111442,60 +112034,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -111874,60 +112469,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -112306,60 +112904,63 @@ exports[`Story Snapshots: MessageWithThreadLargeFont should match snapshot 1`] = ] } > - - - + @@ -112623,60 +113224,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -112995,60 +113599,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -113682,60 +114289,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -114054,60 +114664,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -114741,60 +115354,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -115113,60 +115729,63 @@ exports[`Story Snapshots: Names should match snapshot 1`] = ` ] } > - - - + @@ -115813,60 +116432,63 @@ exports[`Story Snapshots: Pinned should match snapshot 1`] = ` ] } > - - - + @@ -116551,60 +117173,63 @@ exports[`Story Snapshots: PinnedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -117289,60 +117914,63 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` ] } > - - - + @@ -118301,60 +118929,63 @@ exports[`Story Snapshots: Reactions should match snapshot 1`] = ` ] } > - - - + @@ -119800,60 +120431,63 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -120812,60 +121446,63 @@ exports[`Story Snapshots: ReactionsLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -122312,60 +122949,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m ] } > - - - + @@ -122879,60 +123519,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m ] } > - - - + @@ -123128,60 +123771,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m ] } > - - - + @@ -123437,60 +124083,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m ] } > - - - + @@ -123746,60 +124395,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButton should m ] } > - - - + @@ -124064,60 +124716,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont ] } > - - - + @@ -124631,60 +125286,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont ] } > - - - + @@ -124880,60 +125538,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont ] } > - - - + @@ -125189,60 +125850,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont ] } > - - - + @@ -125498,60 +126162,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadButtonLargeFont ] } > - - - + @@ -125943,60 +126610,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma ] } > - - - + @@ -126252,60 +126922,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma ] } > - - - + @@ -126561,60 +127234,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma ] } > - - - + @@ -126870,60 +127546,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReply should ma ] } > - - - + @@ -127315,60 +127994,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont ] } > - - - + @@ -127624,60 +128306,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont ] } > - - - + @@ -127933,60 +128618,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont ] } > - - - + @@ -128242,60 +128930,63 @@ exports[`Story Snapshots: SequentialThreadMessagesFollowingThreadReplyLargeFont ] } > - - - + @@ -128559,60 +129250,63 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` ] } > - - - + @@ -128860,56 +129554,60 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` - - Text button - + @@ -129088,60 +129786,63 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` ] } > - - - + @@ -129614,56 +130315,60 @@ exports[`Story Snapshots: ShowButtonAsAttachment should match snapshot 1`] = ` - - Text button - + @@ -129855,60 +130560,63 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot ] } > - - - + @@ -130156,56 +130864,60 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot - - Text button - + @@ -130384,60 +131096,63 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot ] } > - - - + @@ -130910,56 +131625,60 @@ exports[`Story Snapshots: ShowButtonAsAttachmentLargeFont should match snapshot - - Text button - + @@ -131151,60 +131870,63 @@ exports[`Story Snapshots: StaticAvatar should match snapshot 1`] = ` ] } > - - - + @@ -131617,60 +132339,63 @@ exports[`Story Snapshots: StaticAvatarLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -132009,60 +132734,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -132252,60 +132980,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -132495,60 +133226,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -132741,60 +133475,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -132984,60 +133721,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -133227,60 +133967,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -133470,60 +134213,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -133713,60 +134459,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -133956,60 +134705,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -134199,60 +134951,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -134442,60 +135197,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -134685,60 +135443,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -134928,60 +135689,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -135171,60 +135935,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -135414,60 +136181,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -135657,60 +136427,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -135900,60 +136673,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -136143,60 +136919,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -136386,60 +137165,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -136629,60 +137411,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -136872,60 +137657,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -137115,60 +137903,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -137358,60 +138149,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -137601,60 +138395,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -137844,60 +138641,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -138087,60 +138887,63 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` ] } > - - - + @@ -138318,60 +139121,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -138561,60 +139367,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -138804,60 +139613,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -139050,60 +139862,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -139293,60 +140108,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -139536,60 +140354,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -139779,60 +140600,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -140022,60 +140846,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -140265,60 +141092,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -140508,60 +141338,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -140751,60 +141584,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -140994,60 +141830,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -141237,60 +142076,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -141480,60 +142322,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -141723,60 +142568,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -141966,60 +142814,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -142209,60 +143060,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -142452,60 +143306,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -142695,60 +143552,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -142938,60 +143798,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -143181,60 +144044,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -143424,60 +144290,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -143667,60 +144536,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -143910,60 +144782,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -144153,60 +145028,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -144396,60 +145274,63 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -144693,60 +145574,63 @@ exports[`Story Snapshots: Temp should match snapshot 1`] = ` ] } > - - - + @@ -145155,60 +146039,63 @@ exports[`Story Snapshots: TempLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -145625,60 +146512,63 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` ] } > - - - + @@ -146314,60 +147204,63 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] ] } > - - - + @@ -147003,60 +147896,63 @@ exports[`Story Snapshots: TimeFormat should match snapshot 1`] = ` ] } > - - - + @@ -147469,60 +148365,63 @@ exports[`Story Snapshots: TimeFormatLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -147935,60 +148834,63 @@ exports[`Story Snapshots: Translated should match snapshot 1`] = ` ] } > - - - + @@ -148436,60 +149338,63 @@ exports[`Story Snapshots: TranslatedLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -148937,60 +149842,63 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdown should match snapshot ] } > - - - + @@ -150237,60 +151145,63 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdownLargeFont should match ] } > - - - + @@ -151537,60 +152448,63 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` ] } > - - - + @@ -152132,60 +153046,63 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` ] } > - - - + @@ -152999,60 +153916,63 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` ] } > - - - + @@ -153490,60 +154410,63 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` ] } > - - - + @@ -153931,60 +154854,63 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -154422,60 +155348,63 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -154863,60 +155792,63 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -155458,60 +156390,63 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -156325,60 +157260,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -156697,60 +157635,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -157384,60 +158325,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -157756,60 +158700,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -158443,60 +159390,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -158815,60 +159765,63 @@ exports[`Story Snapshots: Usernames should match snapshot 1`] = ` ] } > - - - + @@ -159515,60 +160468,63 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` ] } > - - - + @@ -159990,60 +160946,63 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` ] } > - - - + @@ -160478,60 +161437,63 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -160953,60 +161915,63 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -161441,60 +162406,63 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` ] } > - - - + @@ -161997,30 +162965,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -162441,30 +163426,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -162897,30 +163899,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -163133,30 +164152,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -163523,30 +164559,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -163867,30 +164920,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -164103,30 +165173,47 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -164306,60 +165393,63 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -164862,30 +165952,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -165518,30 +166625,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -165908,30 +167032,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -166364,30 +167505,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -166708,30 +167866,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -166944,30 +168119,47 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` /> + + "bottom": 12, + "left": 8, + "right": 8, + "top": 12, + } + } + style={ + [ + { + "borderRadius": 6, + "height": 12, + "position": "absolute", + "width": 12, + }, + { + "backgroundColor": "#D1EBFE", + }, + [Function], + ] + } + /> + @@ -167147,60 +168339,63 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` ] } > - - - + @@ -168480,60 +169675,63 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -169556,60 +170754,63 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` ] } > - - - + @@ -170228,60 +171429,63 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` ] } > - - - + @@ -171404,60 +172608,63 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` ] } > - - - + @@ -172187,60 +173394,63 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` ] } > - - - + @@ -172859,60 +174069,63 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -173868,60 +175081,63 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -174651,60 +175867,63 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -175323,60 +176542,63 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` ] } > - - - + @@ -176295,60 +177517,63 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` ] } > - - - + @@ -177023,60 +178248,63 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -177653,60 +178881,63 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` ] } > - - - + @@ -178175,60 +179406,63 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` ] } > - - - + diff --git a/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap b/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap index 7fbe6b02650..f8255beaa5f 100644 --- a/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap +++ b/app/containers/message/components/stories/__tests__/__snapshots__/leaves.test.tsx.snap @@ -1263,60 +1263,63 @@ exports[`Story Snapshots: MessageAvatar should match snapshot 1`] = ` ] } > - - - + @@ -5116,60 +5119,63 @@ exports[`Story Snapshots: Thread should match snapshot 1`] = ` ] } > - - - + diff --git a/app/views/CannedResponsesListView/__snapshots__/CannedResponseItem.test.tsx.snap b/app/views/CannedResponsesListView/__snapshots__/CannedResponseItem.test.tsx.snap index b347ea76688..189ac2f0425 100644 --- a/app/views/CannedResponsesListView/__snapshots__/CannedResponseItem.test.tsx.snap +++ b/app/views/CannedResponsesListView/__snapshots__/CannedResponseItem.test.tsx.snap @@ -24,60 +24,63 @@ exports[`Story Snapshots: Itens should match snapshot 1`] = ` ] } > - - - - Use - + - + , - - - - Use - + - + , ] `; diff --git a/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap b/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap index 5c38e00c82b..12c8d9bd482 100644 --- a/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap +++ b/app/views/DiscussionsView/__snapshots__/Item.test.tsx.snap @@ -38,60 +38,63 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` ] } > - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - - + - - + `; exports[`Story Snapshots: Default should match snapshot 1`] = ` @@ -167,53 +163,48 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` } } > - - - @@ -381,9 +379,9 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` >  - + - + `; @@ -397,52 +395,48 @@ exports[`Story Snapshots: LongName should match snapshot 1`] = ` } } > - - - @@ -610,9 +611,9 @@ exports[`Story Snapshots: LongName should match snapshot 1`] = ` >  - + - + `; @@ -626,52 +627,48 @@ exports[`Story Snapshots: NoVoiceCallPermission should match snapshot 1`] = ` } } > - - - @@ -839,8 +843,8 @@ exports[`Story Snapshots: NoVoiceCallPermission should match snapshot 1`] = ` >  - + - + `; diff --git a/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap b/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap index d90887f8d1c..ae4264989b0 100644 --- a/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap +++ b/app/views/NewServerView/components/ServersHistoryItem/__snapshots__/ServersHistoryItem.test.tsx.snap @@ -3,975 +3,1032 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` [ - + } + > + - - -  - - + +  + + + - - - - - - - - - https://open.rocket.chat - - + - john.doe - + + https://open.rocket.chat + + + john.doe + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - - - - https://superlongservername.tologintoasuperlongservername.rocket.chat - - + - very.long.username.here - + + https://superlongservername.tologintoasuperlongservername.rocket.chat + + + very.long.username.here + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - + - - - - https://stable.rocket.chat - - + - admin - + + https://stable.rocket.chat + + + admin + + - - + + , ] @@ -980,651 +1037,689 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` [ - + } + > + - - -  - - + +  + + + - - - - - - - - - https://open.rocket.chat - - + - john.doe - + + https://open.rocket.chat + + + john.doe + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - - - - https://example.com - - + - user123 - + + https://example.com + + + user123 + + - - + + , ] @@ -1633,975 +1728,1032 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` exports[`Story Snapshots: Themes should match snapshot 1`] = ` [ - + } + > + - - -  - - + +  + + + - - - - - - - - - https://open.rocket.chat - - + - john.doe - + + https://open.rocket.chat + + + john.doe + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - - - - https://open.rocket.chat - - + - john.doe - + + https://open.rocket.chat + + + john.doe + + - - + + , - + } + > + - - -  - - + +  + + + - - - - - - - - - https://open.rocket.chat - - + - john.doe - + + https://open.rocket.chat + + + john.doe + + - - + + , ] diff --git a/app/views/RoomActionsView/components/__snapshots__/CallSection.test.tsx.snap b/app/views/RoomActionsView/components/__snapshots__/CallSection.test.tsx.snap index 240cacd0add..17486017a39 100644 --- a/app/views/RoomActionsView/components/__snapshots__/CallSection.test.tsx.snap +++ b/app/views/RoomActionsView/components/__snapshots__/CallSection.test.tsx.snap @@ -51,60 +51,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - @@ -267,7 +270,7 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` - + - - @@ -555,7 +561,7 @@ exports[`Story Snapshots: Disabled should match snapshot 1`] = ` - + - - @@ -841,7 +850,7 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` - + diff --git a/app/views/RoomInfoView/components/BaseButton.tsx b/app/views/RoomInfoView/components/BaseButton.tsx index 4e0401d5cc1..b4e837688ae 100644 --- a/app/views/RoomInfoView/components/BaseButton.tsx +++ b/app/views/RoomInfoView/components/BaseButton.tsx @@ -1,7 +1,7 @@ import { Text } from 'react-native'; -import { BorderlessButton } from 'react-native-gesture-handler'; import { type ReactElement } from 'react'; +import { BorderlessButton } from '~/containers/GestureButtons'; import { CustomIcon, type TIconsName } from '~/containers/CustomIcon'; import { useTheme } from '~/theme'; import styles from '../styles'; @@ -26,7 +26,7 @@ export function BaseButton({ if (showIcon) return ( - + {label} diff --git a/app/views/RoomInfoView/components/__snapshots__/RoomInfoButtons.test.tsx.snap b/app/views/RoomInfoView/components/__snapshots__/RoomInfoButtons.test.tsx.snap index 635478e56d7..5c1f6caa659 100644 --- a/app/views/RoomInfoView/components/__snapshots__/RoomInfoButtons.test.tsx.snap +++ b/app/views/RoomInfoView/components/__snapshots__/RoomInfoButtons.test.tsx.snap @@ -17,32 +17,45 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` } } > - @@ -87,33 +100,46 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` > Message - - + @@ -158,33 +184,46 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` > Voice call - - + @@ -229,33 +268,46 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` > Video call - - + @@ -300,7 +352,7 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` > More - + `; @@ -322,32 +374,45 @@ exports[`Story Snapshots: ItsMe should match snapshot 1`] = ` } } > - @@ -392,33 +457,46 @@ exports[`Story Snapshots: ItsMe should match snapshot 1`] = ` > Message - - + @@ -463,7 +541,7 @@ exports[`Story Snapshots: ItsMe should match snapshot 1`] = ` > Video call - + `; @@ -485,32 +563,45 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` } } > - @@ -555,33 +646,46 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` > Message - - + @@ -626,33 +730,46 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` > Voice call - - + @@ -697,33 +814,46 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` > Video call - - + @@ -768,7 +898,7 @@ exports[`Story Snapshots: NoVoiceCall should match snapshot 1`] = ` > More - + `; @@ -790,32 +920,45 @@ exports[`Story Snapshots: OlderServer should match snapshot 1`] = ` } } > - @@ -860,33 +1003,46 @@ exports[`Story Snapshots: OlderServer should match snapshot 1`] = ` > Message - - + @@ -931,33 +1087,46 @@ exports[`Story Snapshots: OlderServer should match snapshot 1`] = ` > Voice call - - + @@ -1002,33 +1171,46 @@ exports[`Story Snapshots: OlderServer should match snapshot 1`] = ` > Video call - - + @@ -1073,7 +1255,7 @@ exports[`Story Snapshots: OlderServer should match snapshot 1`] = ` > Block - + `; @@ -1095,32 +1277,45 @@ exports[`Story Snapshots: WithBlockedUser should match snapshot 1`] = ` } } > - @@ -1165,33 +1360,46 @@ exports[`Story Snapshots: WithBlockedUser should match snapshot 1`] = ` > Message - - + @@ -1236,33 +1444,46 @@ exports[`Story Snapshots: WithBlockedUser should match snapshot 1`] = ` > Voice call - - + @@ -1307,33 +1528,46 @@ exports[`Story Snapshots: WithBlockedUser should match snapshot 1`] = ` > Video call - - + @@ -1378,7 +1612,7 @@ exports[`Story Snapshots: WithBlockedUser should match snapshot 1`] = ` > More - + `; @@ -1400,32 +1634,45 @@ exports[`Story Snapshots: WithRoomFromRid should match snapshot 1`] = ` } } > - @@ -1470,33 +1717,46 @@ exports[`Story Snapshots: WithRoomFromRid should match snapshot 1`] = ` > Message - - + @@ -1541,33 +1801,46 @@ exports[`Story Snapshots: WithRoomFromRid should match snapshot 1`] = ` > Voice call - - + @@ -1612,33 +1885,46 @@ exports[`Story Snapshots: WithRoomFromRid should match snapshot 1`] = ` > Block - - + @@ -1683,7 +1969,7 @@ exports[`Story Snapshots: WithRoomFromRid should match snapshot 1`] = ` > Report - + `; diff --git a/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap b/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap index b6b2cbca761..34601700160 100644 --- a/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap +++ b/app/views/RoomInfoView/components/__snapshots__/RoomInfoViewAvatar.test.tsx.snap @@ -143,15 +143,31 @@ exports[`Story Snapshots: WithEdit should match snapshot 1`] = ` width={120} /> - - Edit - + `; diff --git a/app/views/RoomView/LoadMore/index.tsx b/app/views/RoomView/LoadMore/index.tsx index ab6ebbf56be..0b152d97374 100644 --- a/app/views/RoomView/LoadMore/index.tsx +++ b/app/views/RoomView/LoadMore/index.tsx @@ -66,7 +66,7 @@ const LoadMore = memo( return ( <> - + {loading ? ( ) : ( diff --git a/app/views/RoomView/components/Banner.tsx b/app/views/RoomView/components/Banner.tsx index 3db22cc62c1..8d6623c00fe 100644 --- a/app/views/RoomView/components/Banner.tsx +++ b/app/views/RoomView/components/Banner.tsx @@ -1,8 +1,9 @@ import { memo, useState } from 'react'; import { Text } from 'react-native'; -import { BorderlessButton, GestureHandlerRootView, ScrollView } from 'react-native-gesture-handler'; +import { GestureHandlerRootView, ScrollView } from 'react-native-gesture-handler'; import Modal from 'react-native-modal'; +import { BorderlessButton } from '~/containers/GestureButtons'; import Markdown, { MarkdownPreview } from '~/containers/markdown'; import { CustomIcon } from '~/containers/CustomIcon'; import styles from '../styles'; diff --git a/app/views/RoomsListView/components/Header.tsx b/app/views/RoomsListView/components/Header.tsx index 288e581f621..f5eed0fb3b6 100644 --- a/app/views/RoomsListView/components/Header.tsx +++ b/app/views/RoomsListView/components/Header.tsx @@ -1,6 +1,6 @@ import { memo } from 'react'; import { StyleSheet, Text, View, useWindowDimensions } from 'react-native'; -import { TouchableOpacity } from 'react-native-gesture-handler'; +import { Touchable } from 'react-native-gesture-handler'; import { showActionSheetRef } from '~/containers/ActionSheet'; import SearchHeader from '~/containers/SearchHeader'; @@ -65,7 +65,9 @@ const RoomsListHeaderView = ({ search, searchEnabled }: { search: (text: string) } return ( - ) : null} - + ); }; diff --git a/app/views/StatusView/index.test.tsx b/app/views/StatusView/index.test.tsx index eb21fa35be1..0c74d256715 100644 --- a/app/views/StatusView/index.test.tsx +++ b/app/views/StatusView/index.test.tsx @@ -57,6 +57,8 @@ const Wrapper = ({ children }: { children: ReactNode }) => render(, { wrapper: Wrapper }); +const waitForSubmitEnabled = () => waitFor(() => expect(screen.getByTestId('status-view-submit')).not.toBeDisabled()); + describe('StatusView', () => { beforeAll(() => { initStore(mockedStore); @@ -132,12 +134,10 @@ describe('StatusView', () => { renderStatusView(); - const submit = screen.getByTestId('status-view-submit'); - // RectButton uses enabled prop — toBeDisabled() doesn't work with the mock - expect(submit.props.enabled).toBe(false); + expect(screen.getByTestId('status-view-submit')).toBeDisabled(); }); - it('should be enabled when status is changed', () => { + it('should be enabled when status is changed', async () => { mockedStore.dispatch(setUser({ id: 'user-id', username: 'user', status: 'online', statusText: '' })); mockedStore.dispatch(selectServerSuccess({ server: 'https://example.com', version: '6.0.0', name: 'Test' })); mockedStore.dispatch(addSettings({ Accounts_AllowInvisibleStatusOption: true })); @@ -146,10 +146,10 @@ describe('StatusView', () => { fireEvent.press(screen.getByTestId('status-view-busy')); - expect(screen.getByTestId('status-view-submit')).not.toBeDisabled(); + await waitForSubmitEnabled(); }); - it('should be enabled when status text is changed', () => { + it('should be enabled when status text is changed', async () => { mockedStore.dispatch(setUser({ id: 'user-id', username: 'user', status: 'online', statusText: '' })); mockedStore.dispatch(selectServerSuccess({ server: 'https://example.com', version: '6.0.0', name: 'Test' })); mockedStore.dispatch(addSettings({ Accounts_AllowInvisibleStatusOption: true })); @@ -158,12 +158,12 @@ describe('StatusView', () => { fireEvent.changeText(screen.getByTestId('status-view-input'), 'New status'); - expect(screen.getByTestId('status-view-submit')).not.toBeDisabled(); + await waitForSubmitEnabled(); }); }); describe('submit action', () => { - it('should call setUserStatus with status and statusText', () => { + it('should call setUserStatus with status and statusText', async () => { mockedStore.dispatch(setUser({ id: 'user-id', username: 'user', status: 'online', statusText: '' })); mockedStore.dispatch(selectServerSuccess({ server: 'https://example.com', version: '6.0.0', name: 'Test' })); mockedStore.dispatch(addSettings({ Accounts_AllowInvisibleStatusOption: true })); @@ -172,12 +172,13 @@ describe('StatusView', () => { renderStatusView(); fireEvent.press(screen.getByTestId('status-view-busy')); + await waitForSubmitEnabled(); fireEvent.press(screen.getByTestId('status-view-submit')); expect(mockSetUserStatus).toHaveBeenCalledWith('busy', '', undefined); }); - it('should call setUserStatus on modern server with status change', () => { + it('should call setUserStatus on modern server with status change', async () => { mockedStore.dispatch(setUser({ id: 'user-id', username: 'user', status: 'online', statusText: '' })); mockedStore.dispatch(selectServerSuccess({ server: 'https://example.com', version: '8.6.0', name: 'Test' })); mockedStore.dispatch(addSettings({ Accounts_AllowInvisibleStatusOption: true })); @@ -187,6 +188,7 @@ describe('StatusView', () => { fireEvent.press(screen.getByTestId('status-view-busy')); + await waitForSubmitEnabled(); fireEvent.press(screen.getByTestId('status-view-submit')); expect(mockSetUserStatus).toHaveBeenCalledWith('busy', '', undefined); @@ -217,6 +219,7 @@ describe('StatusView', () => { renderStatusView(); fireEvent.press(screen.getByTestId('status-view-busy')); + await waitForSubmitEnabled(); fireEvent.press(screen.getByTestId('status-view-submit')); await waitFor(() => expect(mockShowErrorAlertWithEMessage).toHaveBeenCalledWith(error)); @@ -234,7 +237,7 @@ describe('StatusView', () => { expect(screen.getByTestId('status-view-clear-after')).toBeOnTheScreen(); }); - it('should not pass statusExpiresAt on submit when picker was not touched', () => { + it('should not pass statusExpiresAt on submit when picker was not touched', async () => { mockedStore.dispatch( setUser({ id: 'user-id', @@ -251,12 +254,13 @@ describe('StatusView', () => { renderStatusView(); fireEvent.press(screen.getByTestId('status-view-online')); + await waitForSubmitEnabled(); fireEvent.press(screen.getByTestId('status-view-submit')); expect(mockSetUserStatus).toHaveBeenCalledWith('online', '', undefined); }); - it('should pass expiresAt on submit when picker is interacted with', () => { + it('should pass expiresAt on submit when picker is interacted with', async () => { jest.useFakeTimers(); jest.setSystemTime(new Date('2026-06-22T12:00:00.000Z')); try { @@ -274,6 +278,8 @@ describe('StatusView', () => { const { onConfirm } = children.props; act(() => onConfirm('30', null)); + await act(async () => {}); + expect(screen.getByTestId('status-view-submit')).not.toBeDisabled(); fireEvent.press(screen.getByTestId('status-view-submit')); expect(mockSetUserStatus).toHaveBeenCalledWith('online', '', '2026-06-22T12:30:00.000Z'); diff --git a/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap b/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap index 7c912aaccbd..4b7c813051e 100644 --- a/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap +++ b/app/views/ThreadMessagesView/__snapshots__/Item.test.tsx.snap @@ -38,60 +38,63 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` ] } > - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - - - + - + - - - + - - - + - - - + @@ -807,60 +816,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1194,60 +1212,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1594,60 +1621,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + @@ -1839,60 +1872,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + @@ -2397,60 +2433,63 @@ exports[`Story Snapshots: Forced should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -2784,60 +2829,63 @@ exports[`Story Snapshots: Forced should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -3171,60 +3225,63 @@ exports[`Story Snapshots: Forced should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -3571,60 +3634,63 @@ exports[`Story Snapshots: Forced should match snapshot 1`] = ` ] } > - - - + - - - + diff --git a/app/views/__snapshots__/ScreenLockedView.test.tsx.snap b/app/views/__snapshots__/ScreenLockedView.test.tsx.snap index 6b786124828..730c6d5b776 100644 --- a/app/views/__snapshots__/ScreenLockedView.test.tsx.snap +++ b/app/views/__snapshots__/ScreenLockedView.test.tsx.snap @@ -421,60 +421,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -808,60 +817,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1195,60 +1213,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -1595,60 +1622,63 @@ exports[`Story Snapshots: Default should match snapshot 1`] = ` ] } > - - - + - - - + @@ -2245,60 +2278,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -2632,60 +2674,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -3019,60 +3070,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -3406,60 +3466,63 @@ exports[`Story Snapshots: WithBiometry should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -4186,60 +4255,63 @@ exports[`Story Snapshots: WithBiometryAndClose should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -4573,60 +4651,63 @@ exports[`Story Snapshots: WithBiometryAndClose should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -4960,60 +5047,63 @@ exports[`Story Snapshots: WithBiometryAndClose should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -5347,60 +5443,63 @@ exports[`Story Snapshots: WithBiometryAndClose should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -5722,60 +5827,63 @@ exports[`Story Snapshots: WithBiometryAndClose should match snapshot 1`] = ` ] } > - - - + @@ -6241,60 +6349,63 @@ exports[`Story Snapshots: WithCloseButton should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -6628,60 +6745,63 @@ exports[`Story Snapshots: WithCloseButton should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -7015,60 +7141,63 @@ exports[`Story Snapshots: WithCloseButton should match snapshot 1`] = ` ] } > - - - + - - - + - - - + @@ -7415,60 +7550,63 @@ exports[`Story Snapshots: WithCloseButton should match snapshot 1`] = ` ] } > - - - + - - - + @@ -7660,60 +7801,63 @@ exports[`Story Snapshots: WithCloseButton should match snapshot 1`] = ` ] } > - - - + diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 93a1b65ffb4..26f8830bd9c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2569,7 +2569,7 @@ PODS: - FirebaseCoreExtension - React-Core - RNFBApp - - RNGestureHandler (2.32.0): + - RNGestureHandler (3.3.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2591,6 +2591,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies + - RNWorklets (>= 0.8.0) - Yoga - RNImageCropPicker (0.51.1): - hermes-engine @@ -3604,7 +3605,7 @@ SPEC CHECKSUMS: RNFBAnalytics: 2e8b8ffcd2bb3d59a43ecbe09571c73c56edef7a RNFBApp: a448037d2df74af9d374a0b765be12ff1e844dc0 RNFBCrashlytics: c3bb5533f9957eddc88f3ea383583309a4ce9f89 - RNGestureHandler: 7b07d9192bc65c6883fb37fdecc05dc6b61c814f + RNGestureHandler: 85e32defcf23dd3b023356355c5c1dd1d9d51bde RNImageCropPicker: 5c9c8bef4c72d3f451b499aa0ecd90a644ea1bbd RNKeychain: d57edf101a72acf3ae85fe4d796eed1d951d2a90 RNLocalize: 17bce0556e2d33fe1201c8cef53b3b7786e07612 diff --git a/jest.config.js b/jest.config.js index 04500372058..7894a31d7b2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -24,5 +24,6 @@ module.exports = { '.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/__mocks__/fileMock.js', ...getAliasConfig().jest }, + setupFiles: ['react-native-gesture-handler/jestSetup.js'], setupFilesAfterEnv: ['./jest.setup.js'] }; diff --git a/jest.setup.js b/jest.setup.js index 506242c12db..ae1cffce138 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -67,20 +67,14 @@ jest.mock('expo-haptics', () => ({ } })); -jest.mock('react-native-gesture-handler', () => { - const { forwardRef } = require('react'); - const { View } = require('react-native'); - const GestureHandlerRootView = forwardRef(({ children, ...props }, ref) => ( - - {children} - - )); - GestureHandlerRootView.displayName = 'GestureHandlerRootView'; - return { - ...jest.requireActual('react-native-gesture-handler'), - GestureHandlerRootView, - gestureHandlerRootHOC: Component => Component - }; +jest.mock('react-native-gesture-handler/lib/module/v3/detectors/useEnsureGestureHandlerRootView', () => ({ + useEnsureGestureHandlerRootView: () => {} +})); + +jest.mock('react-native-gesture-handler/lib/module/v3/components/Touchable/Touchable', () => { + const { Pressable } = require('react-native'); + const Touchable = ({ children, ...props }) => {children}; + return { Touchable }; }); jest.mock('expo-font', () => ({ diff --git a/package.json b/package.json index db1b1ad61ff..01d89a1e918 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "react-native-easy-grid": "0.2.2", "react-native-easy-toast": "2.3.0", "react-native-external-keyboard": "^0.9.0", - "react-native-gesture-handler": "~2.32.0", + "react-native-gesture-handler": "~3.3.0", "react-native-image-crop-picker": "RocketChat/react-native-image-crop-picker#47092e8c90550a54d45fe307f7cb2a24c9535ed5", "react-native-incall-manager": "^4.2.1", "react-native-katex": "git+https://github.com/RocketChat/react-native-katex.git", diff --git a/patches/react-native-gesture-handler+2.32.0.patch b/patches/react-native-gesture-handler+3.3.0.patch similarity index 54% rename from patches/react-native-gesture-handler+2.32.0.patch rename to patches/react-native-gesture-handler+3.3.0.patch index 4c16a356879..d5a28998eb6 100644 --- a/patches/react-native-gesture-handler+2.32.0.patch +++ b/patches/react-native-gesture-handler+3.3.0.patch @@ -1,9 +1,35 @@ +diff --git a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +index f964945..8df6494 100644 +--- a/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt ++++ b/node_modules/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +@@ -1459,9 +1459,21 @@ class RNGestureHandlerButtonViewManager : + + override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { + receivedKeyEvent = true ++ if (isActivationKey(keyCode) && isEnabled && event?.isCanceled != true) { ++ performClick() ++ return true ++ } + return super.onKeyUp(keyCode, event) + } + ++ private fun isActivationKey(keyCode: Int) = when (keyCode) { ++ KeyEvent.KEYCODE_DPAD_CENTER, ++ KeyEvent.KEYCODE_ENTER, ++ KeyEvent.KEYCODE_NUMPAD_ENTER, ++ KeyEvent.KEYCODE_SPACE -> true ++ else -> false ++ } ++ + override fun performClick(): Boolean { + // don't perform click when a child button is pressed (mainly to prevent sound effect of + // a parent button from playing) diff --git a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm b/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm -index 6b9fa9c..6d2ccea 100644 +index 994b3d3..c46411b 100644 --- a/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm +++ b/node_modules/react-native-gesture-handler/apple/RNGestureHandlerButton.mm -@@ -83,6 +83,52 @@ - (BOOL)shouldHandleTouch:(RNGHUIView *)view - } +@@ -1274,6 +1274,52 @@ static CATransform3D RNGHCenterScaleTransform(NSRect bounds, CGFloat scale) + #endif #if !TARGET_OS_OSX +- (BOOL)canBecomeFocused diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b97a73ed1b7..ef049482418 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: version: 2.9.11(react-hook-form@7.34.2(react@19.2.3)) '@lodev09/react-native-true-sheet': specifier: ~3.7.0 - version: 3.7.3(559152e7857b125189ca42b7a151d6a4) + version: 3.7.3(4eac27da23d45fdf91d899c57069aba2) '@magrinj/expo-quick-look': specifier: 0.4.0 version: 0.4.0(expo@57.0.23)(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -76,7 +76,7 @@ importers: version: 0.86.3(@babel/core@7.29.7) '@react-navigation/drawer': specifier: ^7.14.1 - version: 7.14.2(dda132b9c8f311fd0053bf630a6001aa) + version: 7.14.2(2bc054b45d80945c6bf73a8ade7ad73e) '@react-navigation/elements': specifier: ^2.9.42 version: 2.9.43(322efc84ae2b5bd2002572a8329e2a5c) @@ -237,8 +237,8 @@ importers: specifier: ^0.9.0 version: 0.9.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-gesture-handler: - specifier: ~2.32.0 - version: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + specifier: ~3.3.0 + version: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-image-crop-picker: specifier: RocketChat/react-native-image-crop-picker#47092e8c90550a54d45fe307f7cb2a24c9535ed5 version: https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/47092e8c90550a54d45fe307f7cb2a24c9535ed5(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -277,7 +277,7 @@ importers: version: 0.37.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-notifier: specifier: 1.6.1 - version: 1.6.1(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + version: 1.6.1(react-native-gesture-handler@3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-picker-select: specifier: 9.0.1 version: 9.0.1(@react-native-picker/picker@2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)) @@ -316,7 +316,7 @@ importers: version: 8.0.5(@types/react@19.2.18)(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(redux@4.2.0) reanimated-tab-view: specifier: ^0.3.0 - version: 0.3.0(435be115736f4209290803c40574d60f) + version: 0.3.0(106987a3d5ae1ef5de78591772a14578) redux: specifier: 4.2.0 version: 4.2.0 @@ -389,7 +389,7 @@ importers: version: 2.3.3 '@gorhom/bottom-sheet': specifier: ^5 - version: 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) + version: 5.2.8(6a38a83ca283ae4d61e53fcd24ae5b68) '@react-native-community/cli': specifier: 20.0.0 version: 20.0.0(typescript@7.0.2) @@ -413,7 +413,7 @@ importers: version: 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native': specifier: ~9.0.9 - version: 9.0.18(abaa9f17cfa3ec17933d2333c1a01a26) + version: 9.0.18(3981ca50ab547f261d3351bbe700d2a7) '@testing-library/react-native': specifier: ^13.2.0 version: 13.3.3(jest@29.7.0(@types/node@25.0.3)(babel-plugin-macros@3.1.0))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react-test-renderer@19.2.3(react@19.2.3))(react@19.2.3) @@ -1369,10 +1369,6 @@ packages: resolution: {integrity: sha512-DCCXhiY1CdCy3Eo6SS/qHnBuyrXY0jyefsJBpXemwI5eXEAR0KrhnhxbGU7Ga/8ysssD1A22J5488BYH1t4pgQ==} hasBin: true - '@egjs/hammerjs@2.0.17': - resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} - engines: {node: '>=0.8.0'} - '@emnapi/core@1.8.0': resolution: {integrity: sha512-ryJnSmj4UhrGLZZPJ6PKVb4wNPAIkW6iyLy+0TRwazd3L1u0wzMe8RfqevAh2HbcSkoeLiSYnOVDOys4JSGYyg==} @@ -2982,9 +2978,6 @@ packages: '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/hammerjs@2.0.46': - resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} - '@types/hast@2.3.10': resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} @@ -6689,8 +6682,8 @@ packages: react: '*' react-native: '*' - react-native-gesture-handler@2.32.0: - resolution: {integrity: sha512-uYIMOKlKENORq2SABE+jIjbPU+h5I/sQKcq2v16zRq848nwEp1fWRVwML4QWqijc8UcXJC25o54S8GQd4Mf2OA==} + react-native-gesture-handler@3.3.0: + resolution: {integrity: sha512-ZCTlJ09nE3GPbm7J74lvwpxmx1TQ/7MDlHZNLARVYTN82k21mJUJ7BmI9eWjEi8eevHiAudI5O1Cpnt0rJfoJA==} peerDependencies: react: '*' react-native: '*' @@ -9221,10 +9214,6 @@ snapshots: glob: 7.2.3 read-pkg-up: 7.0.1 - '@egjs/hammerjs@2.0.17': - dependencies: - '@types/hammerjs': 2.0.46 - '@emnapi/core@1.8.0': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -10049,13 +10038,13 @@ snapshots: '@firebase/webchannel-wrapper@1.0.3': {} - '@gorhom/bottom-sheet@5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e)': + '@gorhom/bottom-sheet@5.2.8(6a38a83ca283ae4d61e53fcd24ae5b68)': dependencies: '@gorhom/portal': 1.0.14(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) invariant: 2.2.4 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) optionalDependencies: '@types/react': 19.2.18 @@ -10332,12 +10321,12 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lodev09/react-native-true-sheet@3.7.3(559152e7857b125189ca42b7a151d6a4)': + '@lodev09/react-native-true-sheet@3.7.3(4eac27da23d45fdf91d899c57069aba2)': dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) + '@gorhom/bottom-sheet': 5.2.8(6a38a83ca283ae4d61e53fcd24ae5b68) '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-worklets: 0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -10919,15 +10908,15 @@ snapshots: use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) - '@react-navigation/drawer@7.14.2(dda132b9c8f311fd0053bf630a6001aa)': + '@react-navigation/drawer@7.14.2(2bc054b45d80945c6bf73a8ade7ad73e)': dependencies: '@react-navigation/elements': 2.9.43(322efc84ae2b5bd2002572a8329e2a5c) '@react-navigation/native': 7.4.1(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-drawer-layout: 4.2.10(435be115736f4209290803c40574d60f) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-drawer-layout: 4.2.10(106987a3d5ae1ef5de78591772a14578) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-screens: 4.28.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -11100,9 +11089,9 @@ snapshots: - react-dom - typescript - '@storybook/react-native-ui@9.1.4(c7e041ee7310df2b401daba6013bd73c)': + '@storybook/react-native-ui@9.1.4(db5a63f8584c69639086fd4f0ebb93bd)': dependencies: - '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) + '@gorhom/bottom-sheet': 5.2.8(6a38a83ca283ae4d61e53fcd24ae5b68) '@storybook/react': 9.1.17(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) @@ -11112,7 +11101,7 @@ snapshots: polished: 4.3.1 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-svg: 15.15.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) @@ -11122,12 +11111,12 @@ snapshots: - react-dom - typescript - '@storybook/react-native@9.0.18(abaa9f17cfa3ec17933d2333c1a01a26)': + '@storybook/react-native@9.0.18(3981ca50ab547f261d3351bbe700d2a7)': dependencies: '@storybook/global': 5.0.0 '@storybook/react': 9.0.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) '@storybook/react-native-theming': 9.1.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) - '@storybook/react-native-ui': 9.1.4(c7e041ee7310df2b401daba6013bd73c) + '@storybook/react-native-ui': 9.1.4(db5a63f8584c69639086fd4f0ebb93bd) '@storybook/react-native-ui-common': 9.1.4(react-dom@19.2.3(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)(storybook@9.0.18(@testing-library/dom@10.4.1)(prettier@3.7.4))(typescript@7.0.2) commander: 8.3.0 dedent: 1.6.0(babel-plugin-macros@3.1.0) @@ -11141,8 +11130,8 @@ snapshots: util: 0.12.5 ws: 8.18.3 optionalDependencies: - '@gorhom/bottom-sheet': 5.2.8(9a24a74e7d311c12f9fcd11ab8b8075e) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + '@gorhom/bottom-sheet': 5.2.8(6a38a83ca283ae4d61e53fcd24ae5b68) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: 5.10.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) transitivePeerDependencies: @@ -11271,8 +11260,6 @@ snapshots: dependencies: '@types/node': 25.0.3 - '@types/hammerjs@2.0.46': {} - '@types/hast@2.3.10': dependencies: '@types/unist': 2.0.11 @@ -15641,12 +15628,12 @@ snapshots: dependencies: react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-drawer-layout@4.2.10(435be115736f4209290803c40574d60f): + react-native-drawer-layout@4.2.10(106987a3d5ae1ef5de78591772a14578): dependencies: color: 4.2.3 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) @@ -15665,11 +15652,9 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-gesture-handler@3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: - '@egjs/hammerjs': 2.0.17 '@types/react-test-renderer': 19.3.0 - hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) @@ -15751,11 +15736,11 @@ snapshots: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-notifier@1.6.1(react-native-gesture-handler@2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): + react-native-notifier@1.6.1(react-native-gesture-handler@3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-picker-select@9.0.1(@react-native-picker/picker@2.11.4(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3)): dependencies: @@ -15936,11 +15921,11 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - reanimated-tab-view@0.3.0(435be115736f4209290803c40574d60f): + reanimated-tab-view@0.3.0(106987a3d5ae1ef5de78591772a14578): dependencies: react: 19.2.3 react-native: 0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3) - react-native-gesture-handler: 2.32.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: 3.3.0(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) react-native-reanimated: 4.6.0(react-native-worklets@0.12.2(@babel/core@7.29.7)(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3))(react-native@0.86.3(@babel/core@7.29.7)(@react-native-community/cli@20.0.0(typescript@7.0.2))(@react-native/jest-preset@0.86.3(@babel/core@7.29.7)(react@19.2.3))(@react-native/metro-config@0.86.3(@babel/core@7.29.7))(@types/react@19.2.18)(react@19.2.3))(react@19.2.3) recast@0.23.11: From e383ca486c293b7420799f0a0df4a9a6487338f6 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 29 Sep 2026 10:41:41 -0300 Subject: [PATCH 51/55] test: refresh audio button snapshots after gesture handler upgrade --- .../__snapshots__/CancelButton.test.tsx.snap | 96 +++++++++++++------ .../__snapshots__/ReviewButton.test.tsx.snap | 46 ++++++--- 2 files changed, 98 insertions(+), 44 deletions(-) diff --git a/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/CancelButton.test.tsx.snap b/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/CancelButton.test.tsx.snap index 75a95c41fb2..57b49fd2283 100644 --- a/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/CancelButton.test.tsx.snap +++ b/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/CancelButton.test.tsx.snap @@ -1,13 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`a11y label is cancel when cancelAndDelete 1`] = ` - - + `; exports[`a11y label is delete otherwise and fires onPress 1`] = ` - - + `; diff --git a/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/ReviewButton.test.tsx.snap b/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/ReviewButton.test.tsx.snap index 0856345019b..f9aa42ffea7 100644 --- a/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/ReviewButton.test.tsx.snap +++ b/app/containers/MessageComposer/components/RecordAudio/__tests__/__snapshots__/ReviewButton.test.tsx.snap @@ -1,13 +1,29 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders and fires onPress 1`] = ` - - + `; From e1fe84c3fd149f56211c9f2c09a5a80a80584377 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 29 Sep 2026 11:03:49 -0300 Subject: [PATCH 52/55] fix: restore React Native Gradle plugin composite build --- android/settings.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/settings.gradle b/android/settings.gradle index 20c52556af3..291937214cc 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -14,4 +14,6 @@ include ':watermelondb-jsi' project(':watermelondb-jsi').projectDir = new File(rootProject.projectDir, '../node_modules/@nozbe/watermelondb/native/android-jsi') include ':app' +includeBuild('../node_modules/@react-native/gradle-plugin') + expoAutolinking.useExpoModules() From c8cc2ee36226cab8439ddbe9dd636518f144be15 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 29 Sep 2026 16:57:34 -0300 Subject: [PATCH 53/55] refactor(RoomItem): settle swipe on the UI thread and mirror it in RTL Derive the open side from the resting offset instead of a separate row state, release and register the row inside the gesture worklet, fire the threshold haptic from the pan update, and flip gesture input and output once for right-to-left layouts. Drop the duplicate long-press gesture and skip the snapshot rebuild on the record's initial emission. --- app/containers/RoomItem/Actions.tsx | 174 ++++++++---------- app/containers/RoomItem/Touchable.tsx | 126 +++++-------- .../__snapshots__/RoomItem.test.tsx.snap | 166 ++++++----------- .../__tests__/RoomItemContainer.test.tsx | 7 +- .../RoomItem/__tests__/Touchable.test.tsx | 42 +++-- .../RoomItem/__tests__/openSwipeItem.test.ts | 54 +++--- .../RoomItem/__tests__/swipeRelease.test.ts | 52 +++--- app/containers/RoomItem/interfaces.ts | 2 - app/containers/RoomItem/openSwipeItem.ts | 38 ++-- app/containers/RoomItem/styles.ts | 26 +-- app/containers/RoomItem/swipeRelease.ts | 56 ++++-- app/containers/RoomItem/useRoomSnapshot.ts | 28 +-- jest.setup.js | 2 +- 13 files changed, 332 insertions(+), 441 deletions(-) diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index bed47ea2fc0..0e45cd6df34 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -4,16 +4,16 @@ import Animated, { type SharedValue, useAnimatedStyle, useAnimatedReaction, + useDerivedValue, useSharedValue, withTiming } from 'react-native-reanimated'; -import * as Haptics from 'expo-haptics'; -import { scheduleOnRN } from 'react-native-worklets'; import { RectButton } from '~/containers/GestureButtons'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '~/lib/constants/constantDisplayMode'; -import styles, { getActionWidth, getFullSwipeThreshold } from './styles'; +import styles from './styles'; +import { getActionWidth, getFullSwipeThreshold } from './swipeRelease'; import { type ILeftActionsProps, type IRightActionsProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; @@ -23,29 +23,15 @@ const CONDENSED_ICON_SIZE = 24; const EXPANDED_ICON_SIZE = 28; const EXPAND_DURATION = 300; -const triggerThresholdHaptic = () => { - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); -}; - -const useFullSwipeProgress = ( - transX: SharedValue, - gestureActive: SharedValue, - width: number, - direction: 1 | -1 -) => { +const useHideExpandProgress = (transX: SharedValue, width: number) => { const fullSwipeThreshold = getFullSwipeThreshold(width); - const crossedThreshold = useSharedValue(false); const expandProgress = useSharedValue(0); useAnimatedReaction( - () => direction * transX.value >= fullSwipeThreshold, - isCrossed => { - if (isCrossed !== crossedThreshold.value) { - crossedThreshold.value = isCrossed; + () => -transX.value >= fullSwipeThreshold, + (isCrossed, wasCrossed) => { + if (isCrossed !== wasCrossed) { expandProgress.value = withTiming(isCrossed ? 1 : 0, { duration: EXPAND_DURATION }); - if (gestureActive.value) { - scheduleOnRN(triggerThresholdHaptic); - } } } ); @@ -53,15 +39,13 @@ const useFullSwipeProgress = ( return expandProgress; }; -export const LeftActions = memo(({ transX, gestureActive, isRead, width, onToggleReadPress, displayMode }: ILeftActionsProps) => { +export const LeftActions = memo(({ transX, isRead, width, onToggleReadPress, displayMode }: ILeftActionsProps) => { const { colors } = useTheme(); const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); const actionWidth = getActionWidth(width); - useFullSwipeProgress(transX, gestureActive, width, 1); - const animatedButtonStyles = useAnimatedStyle(() => ({ width: Math.max(transX.value, 0) })); @@ -78,7 +62,7 @@ export const LeftActions = memo(({ transX, gestureActive, isRead, width, onToggl @@ -100,75 +84,71 @@ export const LeftActions = memo(({ transX, gestureActive, isRead, width, onToggl ); }); -export const RightActions = memo( - ({ transX, gestureActive, favorite, width, toggleFav, onHidePress, displayMode }: IRightActionsProps) => { - const { colors } = useTheme(); - - const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); - - const actionWidth = getActionWidth(width); - const expandProgress = useFullSwipeProgress(transX, gestureActive, width, -1); - - const animatedFavStyles = useAnimatedStyle(() => { - const reveal = Math.max(-transX.value, 0); - const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); - return { width: favoriteWidth, right: reveal - favoriteWidth }; - }); - - const animatedHideStyles = useAnimatedStyle(() => { - const reveal = Math.max(-transX.value, 0); - const favoriteWidth = (reveal / 2) * (1 - expandProgress.value); - return { width: reveal - favoriteWidth }; - }); - - const isCondensed = displayMode === DisplayMode.Condensed; - const viewHeight = { height: isCondensed ? rowHeightCondensed : rowHeight }; - - return ( - - - - - - - - - - - - - - - - - ); - } -); +export const RightActions = memo(({ transX, favorite, width, toggleFav, onHidePress, displayMode }: IRightActionsProps) => { + const { colors } = useTheme(); + + const { rowHeight, rowHeightCondensed } = useResponsiveLayout(); + + const actionWidth = getActionWidth(width); + const expandProgress = useHideExpandProgress(transX, width); + + const buttonWidths = useDerivedValue(() => { + const reveal = Math.max(-transX.value, 0); + const favorite = (reveal / 2) * (1 - expandProgress.value); + return { favorite, hide: reveal - favorite }; + }); + + const animatedFavStyles = useAnimatedStyle(() => ({ + width: buttonWidths.value.favorite, + right: buttonWidths.value.hide + })); + + const animatedHideStyles = useAnimatedStyle(() => ({ + width: buttonWidths.value.hide + })); + + const isCondensed = displayMode === DisplayMode.Condensed; + const viewHeight = { height: isCondensed ? rowHeightCondensed : rowHeight }; + + return ( + + + + + + + + + + + + + + + + + ); +}); diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 32ad3a76070..fac8b6e9a24 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,22 +1,16 @@ -import { useRef, useEffect, useState, memo, type ReactElement } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction, withSpring } from 'react-native-reanimated'; -import { - GestureDetector, - type PanGestureActiveEvent, - useCompetingGestures, - useLongPressGesture, - usePanGesture -} from 'react-native-gesture-handler'; +import { useEffect, useState, memo, type ReactElement } from 'react'; +import { I18nManager } from 'react-native'; +import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction } from 'react-native-reanimated'; +import { GestureDetector, usePanGesture } from 'react-native-gesture-handler'; import { scheduleOnRN } from 'react-native-worklets'; +import * as Haptics from 'expo-haptics'; import Touch from '../Touch'; -import { getOpenWidth, getActionWidth, getFullSwipeThreshold, SWIPE_SPRING_CONFIG } from './styles'; import { LeftActions, RightActions } from './Actions'; -import { getSwipeRelease, type TRowState } from './swipeRelease'; -import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem, resetSwipeRow } from './openSwipeItem'; +import { getFullSwipeThreshold, getSwipeRelease } from './swipeRelease'; +import { unregisterOpenSwipeItem, closeOpenSwipeItem, settleSwipeRow } from './openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; -import I18n from '~/i18n'; import { toggleFav } from '~/lib/methods/toggleFav'; import { toggleRead } from '~/lib/methods/toggleRead'; import { hideRoom } from '~/lib/methods/hideRoom'; @@ -27,6 +21,10 @@ const rubberband = (overshoot: number, dimension: number, constant = 0.55) => { return (overshoot * dimension * constant) / (dimension + constant * Math.abs(overshoot)); }; +const triggerThresholdHaptic = () => { + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); +}; + const Touchable = ({ children, type, @@ -42,30 +40,24 @@ const Touchable = ({ }: ITouchableProps): ReactElement => { const { colors } = useTheme(); const serverVersion = useAppSelector(state => state.server.version); + const direction = I18nManager.isRTL ? -1 : 1; const rowOffSet = useSharedValue(0); const transX = useSharedValue(0); - const rowState = useSharedValue(0); - const gestureActive = useSharedValue(false); - const consumedTouchRef = useRef(false); + const crossedFullSwipe = useSharedValue(false); + const touchClosedOtherRow = useSharedValue(false); const [actionsMounted, setActionsMounted] = useState(false); + const row = { rid, transX, rowOffSet }; useAnimatedReaction( () => transX.value !== 0, (moved, previouslyMoved) => { - if (moved !== previouslyMoved) { + if (previouslyMoved !== null && moved !== previouslyMoved) { scheduleOnRN(setActionsMounted, moved); } } ); - const handleTouchBegin = (closedOtherRow: boolean) => { - consumedTouchRef.current = closedOtherRow; - }; - - const close = () => { - resetSwipeRow({ transX, rowState, rowOffSet }); - unregisterOpenSwipeItem(rid); - }; + const close = () => settleSwipeRow(row, 0); useEffect(() => () => unregisterOpenSwipeItem(rid), [rid]); @@ -89,12 +81,12 @@ const Touchable = ({ }; const guardTouch = (action?: () => void) => () => { - if (rowState.value !== 0) { + if (rowOffSet.value !== 0) { close(); return; } - if (consumedTouchRef.current) { - consumedTouchRef.current = false; + if (touchClosedOtherRow.value) { + touchClosedOtherRow.value = false; return; } action?.(); @@ -104,83 +96,54 @@ const Touchable = ({ const handleLongPress = guardTouch(onLongPress); - const handleRelease = (event: PanGestureActiveEvent) => { - const release = getSwipeRelease({ - rowState: rowState.value, - offset: rowOffSet.value + event.translationX, - actionWidth: getActionWidth(width), - openWidth: getOpenWidth(width), - fullSwipeThreshold: getFullSwipeThreshold(width) - }); - if (release.fullSwipe === (I18n.isRTL ? 'left' : 'right')) { - hideChannel(); - } else if (release.fullSwipe) { - toggleReadRoom(); - } - rowState.value = release.rowState; - transX.value = withSpring(release.toValue, { ...SWIPE_SPRING_CONFIG, velocity: event.velocityX }); - rowOffSet.value = release.toValue; - if (release.rowState !== 0) { - registerOpenSwipeItem({ rid, transX, rowState, rowOffSet }); - } else { - unregisterOpenSwipeItem(rid); - } - }; - - const longPressGesture = useLongPressGesture({ - minDuration: 500, - onActivate: () => { - scheduleOnRN(handleLongPress); - } - }); - const panGesture = usePanGesture({ activeOffsetX: [-10, 10], // More sensitive horizontal detection failOffsetY: [-20, 20], // Fail on vertical movement to distinguish scrolling enabled: swipeEnabled, onBegin: () => { - gestureActive.set(true); - const closedOtherRow = closeOpenSwipeItem(rid); - scheduleOnRN(handleTouchBegin, closedOtherRow); + crossedFullSwipe.value = false; + touchClosedOtherRow.value = closeOpenSwipeItem(rid); }, onActivate: () => { scheduleOnRN(setActionsMounted, true); }, onUpdate: event => { - const next = event.translationX + rowOffSet.value; - const boundary = getFullSwipeThreshold(width); - transX.value = - next > boundary - ? boundary + rubberband(next - boundary, width) - : next < -boundary - ? -boundary - rubberband(-next - boundary, width) - : next; + const next = rowOffSet.value + direction * event.translationX; + const threshold = getFullSwipeThreshold(width); + const overshoot = Math.abs(next) - threshold; + transX.value = overshoot > 0 ? Math.sign(next) * (threshold + rubberband(overshoot, width)) : next; + const crossed = overshoot >= 0; + if (crossed !== crossedFullSwipe.value) { + crossedFullSwipe.value = crossed; + scheduleOnRN(triggerThresholdHaptic); + } }, onDeactivate: event => { - gestureActive.set(false); - scheduleOnRN(handleRelease, event); - }, - onFinalize: () => { - gestureActive.set(false); + const release = getSwipeRelease({ + restingOffset: rowOffSet.value, + offset: rowOffSet.value + direction * event.translationX, + width + }); + settleSwipeRow(row, release.restingOffset, direction * event.velocityX); + if (release.fullSwipe === 'left') { + scheduleOnRN(toggleReadRoom); + } else if (release.fullSwipe === 'right') { + scheduleOnRN(hideChannel); + } } }); - // Use competing gestures instead of simultaneous to prevent conflicts - // Pan gesture will take priority over long press for horizontal swipes - const composedGesture = useCompetingGestures(panGesture, longPressGesture); - const animatedStyles = useAnimatedStyle(() => ({ - transform: [{ translateX: transX.value }] + transform: [{ translateX: direction * transX.value }] })); return ( - + {actionsMounted ? ( <> ({ useActionSheet: () => ({ showActionSheet jest.mock('~/lib/hooks/useAppSelector', () => ({ useAppSelector: () => '7.0.0' })); const createRecord = () => { - const changes = new Subject(); + const changes = new BehaviorSubject(undefined); const record = { rid: 'rid', t: 'c', @@ -25,7 +25,8 @@ const createRecord = () => { alert: true, unread: 3, tunread: [], - observe: () => changes + observe: () => changes, + asPlain: () => ({ ...record }) }; return { record, changes }; }; diff --git a/app/containers/RoomItem/__tests__/Touchable.test.tsx b/app/containers/RoomItem/__tests__/Touchable.test.tsx index 017f67d4832..c0c8e38731d 100644 --- a/app/containers/RoomItem/__tests__/Touchable.test.tsx +++ b/app/containers/RoomItem/__tests__/Touchable.test.tsx @@ -2,11 +2,10 @@ import { act, fireEvent, render } from '@testing-library/react-native'; import { Text } from 'react-native'; import { State, usePanGesture } from 'react-native-gesture-handler'; import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; -import { makeMutable, useSharedValue } from 'react-native-reanimated'; +import { makeMutable } from 'react-native-reanimated'; import Touchable from '../Touchable'; -import { type TRowState } from '../swipeRelease'; -import { registerOpenSwipeItem, unregisterOpenSwipeItem } from '../openSwipeItem'; +import { settleSwipeRow, unregisterOpenSwipeItem } from '../openSwipeItem'; import { SubscriptionType } from '~/definitions'; jest.mock('~/lib/hooks/useAppSelector', () => ({ useAppSelector: () => '7.0.0' })); @@ -16,10 +15,6 @@ jest.mock('react-native-gesture-handler', () => { }); const setup = () => { - jest.mocked(useSharedValue).mockImplementation(init => { - const shared = { value: init, set: (next: typeof init) => (shared.value = next) }; - return shared as unknown as ReturnType; - }); const onPress = jest.fn(); const { getByText } = render( { return { gesture: results[results.length - 1].value, onPress, pressRow: () => fireEvent.press(getByText('row')) }; }; +const openOtherRow = () => settleSwipeRow({ rid: 'roomA', transX: makeMutable(0), rowOffSet: makeMutable(0) }, 80); + const touchWithoutSwipe = [ { state: State.BEGAN, translationX: 0, velocityX: 0 }, { state: State.FAILED, translationX: 0, velocityX: 0 } @@ -51,12 +48,7 @@ afterEach(() => { test('a tap after a touch that closed another row without pressing still opens the room', async () => { const { gesture, onPress, pressRow } = setup(); - registerOpenSwipeItem({ - rid: 'roomA', - transX: makeMutable(80), - rowState: makeMutable(1), - rowOffSet: makeMutable(80) - }); + openOtherRow(); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); @@ -67,15 +59,27 @@ test('a tap after a touch that closed another row without pressing still opens t test('a tap that closed another row does not open the room', async () => { const { gesture, onPress, pressRow } = setup(); - registerOpenSwipeItem({ - rid: 'roomA', - transX: makeMutable(80), - rowState: makeMutable(1), - rowOffSet: makeMutable(80) - }); + openOtherRow(); await act(() => fireGestureHandler(gesture, touchWithoutSwipe)); pressRow(); expect(onPress).not.toHaveBeenCalled(); }); + +test('a tap on a swiped-open row closes it instead of opening the room', async () => { + const { gesture, onPress, pressRow } = setup(); + await act(() => + fireGestureHandler(gesture, [ + { state: State.BEGAN, translationX: 0, velocityX: 0 }, + { state: State.ACTIVE, translationX: 60, velocityX: 0 }, + { state: State.END, translationX: 60, velocityX: 0 } + ]) + ); + + pressRow(); + expect(onPress).not.toHaveBeenCalled(); + + pressRow(); + expect(onPress).toHaveBeenCalledTimes(1); +}); diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts index a13a8cd11e5..6cd2b43fb65 100644 --- a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts +++ b/app/containers/RoomItem/__tests__/openSwipeItem.test.ts @@ -1,56 +1,60 @@ import { makeMutable } from 'react-native-reanimated'; -import { type TRowState } from '../swipeRelease'; -import { registerOpenSwipeItem, unregisterOpenSwipeItem, closeOpenSwipeItem } from '../openSwipeItem'; +import { settleSwipeRow, unregisterOpenSwipeItem, closeOpenSwipeItem } from '../openSwipeItem'; -const createItem = (rid: string) => ({ +const createRow = (rid: string) => ({ rid, - transX: makeMutable(80), - rowState: makeMutable(1), - rowOffSet: makeMutable(80) + transX: makeMutable(0), + rowOffSet: makeMutable(0) }); -describe('closeOpenSwipeItem', () => { +describe('openSwipeItem', () => { afterEach(() => { unregisterOpenSwipeItem('roomA'); unregisterOpenSwipeItem('roomB'); }); - it('closes the open item and reports it was consumed', () => { - const item = createItem('roomA'); - registerOpenSwipeItem(item); + it('closes the open row and reports it was consumed', () => { + const row = createRow('roomA'); + settleSwipeRow(row, 80); const consumed = closeOpenSwipeItem('roomB'); - expect(item.rowState.value).toBe(0); - expect(item.rowOffSet.value).toBe(0); - expect(item.transX.value).toBe(0); + expect(row.rowOffSet.value).toBe(0); + expect(row.transX.value).toBe(0); expect(consumed).toBe(true); }); - it('reports nothing was consumed when no item is open', () => { - const consumed = closeOpenSwipeItem('roomB'); - - expect(consumed).toBe(false); + it('reports nothing was consumed when no row is open', () => { + expect(closeOpenSwipeItem('roomB')).toBe(false); }); it('reports nothing was consumed when closing the same room that is open', () => { - const item = createItem('roomA'); - registerOpenSwipeItem(item); + const row = createRow('roomA'); + settleSwipeRow(row, 80); const consumed = closeOpenSwipeItem('roomA'); - expect(item.rowState.value).toBe(1); + expect(row.rowOffSet.value).toBe(80); expect(consumed).toBe(false); }); - it('closes the previously open item when another one registers', () => { - const previous = createItem('roomA'); - registerOpenSwipeItem(previous); + it('closes the previously open row when another one opens', () => { + const previous = createRow('roomA'); + settleSwipeRow(previous, 80); - registerOpenSwipeItem(createItem('roomB')); + settleSwipeRow(createRow('roomB'), -160); - expect(previous.rowState.value).toBe(0); + expect(previous.rowOffSet.value).toBe(0); expect(previous.transX.value).toBe(0); }); + + it('forgets a row once it settles closed', () => { + const row = createRow('roomA'); + settleSwipeRow(row, 80); + + settleSwipeRow(row, 0); + + expect(closeOpenSwipeItem('roomB')).toBe(false); + }); }); diff --git a/app/containers/RoomItem/__tests__/swipeRelease.test.ts b/app/containers/RoomItem/__tests__/swipeRelease.test.ts index 37325a5e2a1..3799e210739 100644 --- a/app/containers/RoomItem/__tests__/swipeRelease.test.ts +++ b/app/containers/RoomItem/__tests__/swipeRelease.test.ts @@ -1,37 +1,37 @@ -import { getSwipeRelease, type TRowState } from '../swipeRelease'; +import { getActionWidth, getFullSwipeThreshold, getOpenWidth, getSwipeRelease } from '../swipeRelease'; -const actionWidth = 80; -const openWidth = 160; -const fullSwipeThreshold = 240; +const width = 400; +const actionWidth = getActionWidth(width); +const openWidth = getOpenWidth(width); +const fullSwipeThreshold = getFullSwipeThreshold(width); -const release = (rowState: TRowState, offset: number) => - getSwipeRelease({ rowState, offset, actionWidth, openWidth, fullSwipeThreshold }); +const release = (restingOffset: number, offset: number) => getSwipeRelease({ restingOffset, offset, width }); -const closed = { toValue: 0, rowState: 0, fullSwipe: null }; -const leftOpen = { toValue: actionWidth, rowState: -1, fullSwipe: null }; -const rightOpen = { toValue: -openWidth, rowState: 1, fullSwipe: null }; +const closed = { restingOffset: 0, fullSwipe: null }; +const leftOpen = { restingOffset: actionWidth, fullSwipe: null }; +const rightOpen = { restingOffset: -openWidth, fullSwipe: null }; describe('getSwipeRelease', () => { it.each([ - [0, 39, closed], - [0, 40, leftOpen], - [0, -39, closed], - [0, -40, rightOpen], + [0, 37, closed], + [0, 38, leftOpen], + [0, -37, closed], + [0, -38, rightOpen], [0, 0, closed], - [-1, 1, leftOpen], - [-1, 200, leftOpen], - [-1, 0, closed], - [-1, -30, closed], - [1, -1, rightOpen], - [1, -200, rightOpen], - [1, 0, closed], - [1, 30, closed] - ] as [TRowState, number, object][])('from row state %i releasing at %i', (rowState, offset, expected) => { - expect(release(rowState, offset)).toEqual(expected); + [actionWidth, 1, leftOpen], + [actionWidth, 200, leftOpen], + [actionWidth, 0, closed], + [actionWidth, -30, closed], + [-openWidth, -1, rightOpen], + [-openWidth, -200, rightOpen], + [-openWidth, 0, closed], + [-openWidth, 30, closed] + ])('from resting offset %d releasing at %d', (restingOffset, offset, expected) => { + expect(release(restingOffset, offset)).toEqual(expected); }); - it.each([-1, 0, 1] as TRowState[])('commits a full swipe from row state %i and closes', rowState => { - expect(release(rowState, fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'left' }); - expect(release(rowState, -fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'right' }); + it.each([0, actionWidth, -openWidth])('commits a full swipe from resting offset %d and closes', restingOffset => { + expect(release(restingOffset, fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'left' }); + expect(release(restingOffset, -fullSwipeThreshold)).toEqual({ ...closed, fullSwipe: 'right' }); }); }); diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index bcf508cb3be..b748aee603a 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -12,7 +12,6 @@ import { export interface ILeftActionsProps { transX: SharedValue; - gestureActive: SharedValue; isRead: boolean; width: number; onToggleReadPress(): void; @@ -21,7 +20,6 @@ export interface ILeftActionsProps { export interface IRightActionsProps { transX: SharedValue; - gestureActive: SharedValue; favorite: boolean; width: number; toggleFav(): void; diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/openSwipeItem.ts index ace5c3c0c1b..7097e95377b 100644 --- a/app/containers/RoomItem/openSwipeItem.ts +++ b/app/containers/RoomItem/openSwipeItem.ts @@ -1,22 +1,19 @@ import { makeMutable, withSpring, type SharedValue } from 'react-native-reanimated'; -import { SWIPE_SPRING_CONFIG } from './styles'; -import { type TRowState } from './swipeRelease'; +import { SWIPE_SPRING_CONFIG } from './swipeRelease'; -type OpenSwipeItem = { +export type SwipeRow = { rid: string; transX: SharedValue; - rowState: SharedValue; rowOffSet: SharedValue; }; -export const openSwipeItem = makeMutable(null); +export const openSwipeItem = makeMutable(null); -export const resetSwipeRow = ({ transX, rowState, rowOffSet }: Omit) => { +const springRow = ({ transX, rowOffSet }: SwipeRow, restingOffset: number, velocity: number) => { 'worklet'; - rowState.value = 0; - transX.value = withSpring(0, SWIPE_SPRING_CONFIG); - rowOffSet.value = 0; + transX.value = withSpring(restingOffset, { ...SWIPE_SPRING_CONFIG, velocity }); + rowOffSet.value = restingOffset; }; export const unregisterOpenSwipeItem = (rid: string) => { @@ -28,17 +25,22 @@ export const unregisterOpenSwipeItem = (rid: string) => { export const closeOpenSwipeItem = (exceptRid?: string) => { 'worklet'; - const item = openSwipeItem.value; - if (item && item.rid !== exceptRid) { - resetSwipeRow(item); - openSwipeItem.value = null; - return true; + const row = openSwipeItem.value; + if (!row || row.rid === exceptRid) { + return false; } - return false; + springRow(row, 0, 0); + openSwipeItem.value = null; + return true; }; -export const registerOpenSwipeItem = (item: OpenSwipeItem) => { +export const settleSwipeRow = (row: SwipeRow, restingOffset: number, velocity = 0) => { 'worklet'; - closeOpenSwipeItem(item.rid); - openSwipeItem.value = item; + springRow(row, restingOffset, velocity); + if (restingOffset === 0) { + unregisterOpenSwipeItem(row.rid); + return; + } + closeOpenSwipeItem(row.rid); + openSwipeItem.value = row; }; diff --git a/app/containers/RoomItem/styles.ts b/app/containers/RoomItem/styles.ts index ee46621c6c3..cf48a92f842 100644 --- a/app/containers/RoomItem/styles.ts +++ b/app/containers/RoomItem/styles.ts @@ -1,31 +1,7 @@ import { StyleSheet } from 'react-native'; -import { ReduceMotion } from 'react-native-reanimated'; import sharedStyles from '~/views/Styles'; -export const OPEN_RATIO = 0.375; -export const FULL_SWIPE_RATIO = 0.53; - -export const getOpenWidth = (width: number) => { - 'worklet'; - return width * OPEN_RATIO; -}; -export const getActionWidth = (width: number) => { - 'worklet'; - return getOpenWidth(width) / 2; -}; -export const getFullSwipeThreshold = (width: number) => { - 'worklet'; - return width * FULL_SWIPE_RATIO; -}; - -export const SWIPE_SPRING_CONFIG = { - mass: 1, - stiffness: 150, - damping: 24.5, - reduceMotion: ReduceMotion.System -}; - export default StyleSheet.create({ flex: { flex: 1 @@ -100,7 +76,7 @@ export default StyleSheet.create({ position: 'absolute', justifyContent: 'center', top: 0, - right: 0 + left: 0 }, actionRightButtonContainer: { position: 'absolute', diff --git a/app/containers/RoomItem/swipeRelease.ts b/app/containers/RoomItem/swipeRelease.ts index 12a99bc0311..4a942f78630 100644 --- a/app/containers/RoomItem/swipeRelease.ts +++ b/app/containers/RoomItem/swipeRelease.ts @@ -1,38 +1,56 @@ -export type TRowState = -1 | 0 | 1; +import { ReduceMotion } from 'react-native-reanimated'; + +const OPEN_RATIO = 0.375; +const FULL_SWIPE_RATIO = 0.53; + +export const SWIPE_SPRING_CONFIG = { + mass: 1, + stiffness: 150, + damping: 24.5, + reduceMotion: ReduceMotion.System +}; + +export const getOpenWidth = (width: number) => { + 'worklet'; + return width * OPEN_RATIO; +}; + +export const getActionWidth = (width: number) => { + 'worklet'; + return getOpenWidth(width) / 2; +}; + +export const getFullSwipeThreshold = (width: number) => { + 'worklet'; + return width * FULL_SWIPE_RATIO; +}; export interface ISwipeRelease { - toValue: number; - rowState: TRowState; + restingOffset: number; fullSwipe: 'left' | 'right' | null; } interface ISwipeReleaseInput { - rowState: TRowState; + restingOffset: number; offset: number; - actionWidth: number; - openWidth: number; - fullSwipeThreshold: number; + width: number; } -const CLOSED: ISwipeRelease = { toValue: 0, rowState: 0, fullSwipe: null }; +const CLOSED: ISwipeRelease = { restingOffset: 0, fullSwipe: null }; -export const getSwipeRelease = ({ - rowState, - offset, - actionWidth, - openWidth, - fullSwipeThreshold -}: ISwipeReleaseInput): ISwipeRelease => { +export const getSwipeRelease = ({ restingOffset, offset, width }: ISwipeReleaseInput): ISwipeRelease => { + 'worklet'; + const fullSwipeThreshold = getFullSwipeThreshold(width); if (offset >= fullSwipeThreshold) { return { ...CLOSED, fullSwipe: 'left' }; } if (offset <= -fullSwipeThreshold) { return { ...CLOSED, fullSwipe: 'right' }; } - const side: TRowState = offset > 0 ? -1 : 1; - const openThreshold = rowState === 0 ? actionWidth / 2 : Number.MIN_VALUE; - if ((rowState !== 0 && rowState !== side) || Math.abs(offset) < openThreshold) { + const wasOpen = restingOffset !== 0; + const keepsSide = Math.sign(offset) === Math.sign(restingOffset); + if (wasOpen ? !keepsSide : Math.abs(offset) < getActionWidth(width) / 2) { return CLOSED; } - return { toValue: side === -1 ? actionWidth : -openWidth, rowState: side, fullSwipe: null }; + return { restingOffset: offset > 0 ? getActionWidth(width) : -getOpenWidth(width), fullSwipe: null }; }; diff --git a/app/containers/RoomItem/useRoomSnapshot.ts b/app/containers/RoomItem/useRoomSnapshot.ts index f93caefabcf..fb82f445e2b 100644 --- a/app/containers/RoomItem/useRoomSnapshot.ts +++ b/app/containers/RoomItem/useRoomSnapshot.ts @@ -1,18 +1,17 @@ import { useCallback, useRef, useSyncExternalStore } from 'react'; -import { type Observable } from 'rxjs'; +import { skip } from 'rxjs'; -type TObservableRoom = TRoom & { - observe?: () => Observable; - asPlain?: () => TRoom; -}; +import { type IRoomItemContainerProps } from './interfaces'; + +type TRoomItem = IRoomItemContainerProps['item']; -const takeSnapshot = (item: TObservableRoom): TRoom => (item.asPlain ? item.asPlain() : { ...item }); +const takeSnapshot = (item: TRoomItem): TRoomItem => item.asPlain?.() ?? item; -export const useRoomSnapshot = (item: TObservableRoom): TRoom => { - const cache = useRef<{ source: TObservableRoom; room: TRoom } | null>(null); +export const useRoomSnapshot = (item: TRoomItem): TRoomItem => { + const cache = useRef<{ source: TRoomItem; room: TRoomItem } | null>(null); const getSnapshot = () => { - if (cache.current?.source !== item) { + if (!cache.current || cache.current.source !== item) { cache.current = { source: item, room: takeSnapshot(item) }; } return cache.current.room; @@ -20,10 +19,13 @@ export const useRoomSnapshot = (item: TObservableRoom void) => { - const subscription = item.observe?.().subscribe(() => { - cache.current = { source: item, room: takeSnapshot(item) }; - onStoreChange(); - }); + const subscription = item + .observe?.() + .pipe(skip(1)) + .subscribe(() => { + cache.current = { source: item, room: takeSnapshot(item) }; + onStoreChange(); + }); return () => subscription?.unsubscribe(); }, [item] diff --git a/jest.setup.js b/jest.setup.js index cf7ca106bf1..78d01b00d06 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -31,7 +31,7 @@ jest.mock('react-native-reanimated', () => { const actual = jest.requireActual('react-native-reanimated/mock'); return { ...actual, - useSharedValue: jest.fn(init => ({ value: init })), + useSharedValue: jest.fn(init => jest.requireActual('react').useState(() => ({ value: init }))[0]), makeMutable: jest.fn(init => ({ value: init })), useAnimatedReaction: jest.fn(), withTiming: jest.fn(value => value), From d9b95019c73d879554d7d587098689fb19de0246 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 29 Sep 2026 17:22:22 -0300 Subject: [PATCH 54/55] fix(RoomItem): close the open row when a swipe-disabled row is tapped --- app/containers/RoomItem/Touchable.tsx | 4 ++-- .../RoomItem/__tests__/Touchable.test.tsx | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index fac8b6e9a24..0e943398818 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -2,7 +2,7 @@ import { useEffect, useState, memo, type ReactElement } from 'react'; import { I18nManager } from 'react-native'; import Animated, { useSharedValue, useAnimatedStyle, useAnimatedReaction } from 'react-native-reanimated'; import { GestureDetector, usePanGesture } from 'react-native-gesture-handler'; -import { scheduleOnRN } from 'react-native-worklets'; +import { runOnUISync, scheduleOnRN } from 'react-native-worklets'; import * as Haptics from 'expo-haptics'; import Touch from '../Touch'; @@ -85,7 +85,7 @@ const Touchable = ({ close(); return; } - if (touchClosedOtherRow.value) { + if (touchClosedOtherRow.value || runOnUISync(closeOpenSwipeItem, rid)) { touchClosedOtherRow.value = false; return; } diff --git a/app/containers/RoomItem/__tests__/Touchable.test.tsx b/app/containers/RoomItem/__tests__/Touchable.test.tsx index c0c8e38731d..bb65214ea3b 100644 --- a/app/containers/RoomItem/__tests__/Touchable.test.tsx +++ b/app/containers/RoomItem/__tests__/Touchable.test.tsx @@ -14,7 +14,7 @@ jest.mock('react-native-gesture-handler', () => { return { ...actual, usePanGesture: jest.fn(actual.usePanGesture) }; }); -const setup = () => { +const setup = ({ swipeEnabled = true } = {}) => { const onPress = jest.fn(); const { getByText } = render( { isRead rid='roomB' isFocused={false} - swipeEnabled + swipeEnabled={swipeEnabled} displayMode='expanded'> row @@ -83,3 +83,14 @@ test('a tap on a swiped-open row closes it instead of opening the room', async ( pressRow(); expect(onPress).toHaveBeenCalledTimes(1); }); + +test('a tap on a row that cannot swipe closes the open row instead of opening the room', () => { + const { onPress, pressRow } = setup({ swipeEnabled: false }); + openOtherRow(); + + pressRow(); + expect(onPress).not.toHaveBeenCalled(); + + pressRow(); + expect(onPress).toHaveBeenCalledTimes(1); +}); From 54c5b5754ad9ef8d5aa0f2bd2615c8615223ba68 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 30 Sep 2026 14:16:42 -0300 Subject: [PATCH 55/55] refactor(RoomItem): move swipe utils and room snapshot hook into subfolders --- app/containers/RoomItem/Actions.tsx | 2 +- app/containers/RoomItem/Touchable.tsx | 4 ++-- app/containers/RoomItem/__tests__/Touchable.test.tsx | 2 +- app/containers/RoomItem/{ => hooks}/useRoomSnapshot.ts | 2 +- app/containers/RoomItem/index.tsx | 2 +- .../RoomItem/{ => utils}/__tests__/openSwipeItem.test.ts | 0 .../RoomItem/{ => utils}/__tests__/swipeRelease.test.ts | 0 app/containers/RoomItem/{ => utils}/openSwipeItem.ts | 0 app/containers/RoomItem/{ => utils}/swipeRelease.ts | 0 9 files changed, 6 insertions(+), 6 deletions(-) rename app/containers/RoomItem/{ => hooks}/useRoomSnapshot.ts (93%) rename app/containers/RoomItem/{ => utils}/__tests__/openSwipeItem.test.ts (100%) rename app/containers/RoomItem/{ => utils}/__tests__/swipeRelease.test.ts (100%) rename app/containers/RoomItem/{ => utils}/openSwipeItem.ts (100%) rename app/containers/RoomItem/{ => utils}/swipeRelease.ts (100%) diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index 0e45cd6df34..a48f72ca43a 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -13,7 +13,7 @@ import { RectButton } from '~/containers/GestureButtons'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '~/lib/constants/constantDisplayMode'; import styles from './styles'; -import { getActionWidth, getFullSwipeThreshold } from './swipeRelease'; +import { getActionWidth, getFullSwipeThreshold } from './utils/swipeRelease'; import { type ILeftActionsProps, type IRightActionsProps } from './interfaces'; import { useTheme } from '~/theme'; import I18n from '~/i18n'; diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 0e943398818..7bbca19a404 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -7,8 +7,8 @@ import * as Haptics from 'expo-haptics'; import Touch from '../Touch'; import { LeftActions, RightActions } from './Actions'; -import { getFullSwipeThreshold, getSwipeRelease } from './swipeRelease'; -import { unregisterOpenSwipeItem, closeOpenSwipeItem, settleSwipeRow } from './openSwipeItem'; +import { getFullSwipeThreshold, getSwipeRelease } from './utils/swipeRelease'; +import { unregisterOpenSwipeItem, closeOpenSwipeItem, settleSwipeRow } from './utils/openSwipeItem'; import { type ITouchableProps } from './interfaces'; import { useTheme } from '~/theme'; import { toggleFav } from '~/lib/methods/toggleFav'; diff --git a/app/containers/RoomItem/__tests__/Touchable.test.tsx b/app/containers/RoomItem/__tests__/Touchable.test.tsx index bb65214ea3b..82ffb3bac28 100644 --- a/app/containers/RoomItem/__tests__/Touchable.test.tsx +++ b/app/containers/RoomItem/__tests__/Touchable.test.tsx @@ -5,7 +5,7 @@ import { fireGestureHandler } from 'react-native-gesture-handler/jest-utils'; import { makeMutable } from 'react-native-reanimated'; import Touchable from '../Touchable'; -import { settleSwipeRow, unregisterOpenSwipeItem } from '../openSwipeItem'; +import { settleSwipeRow, unregisterOpenSwipeItem } from '../utils/openSwipeItem'; import { SubscriptionType } from '~/definitions'; jest.mock('~/lib/hooks/useAppSelector', () => ({ useAppSelector: () => '7.0.0' })); diff --git a/app/containers/RoomItem/useRoomSnapshot.ts b/app/containers/RoomItem/hooks/useRoomSnapshot.ts similarity index 93% rename from app/containers/RoomItem/useRoomSnapshot.ts rename to app/containers/RoomItem/hooks/useRoomSnapshot.ts index fb82f445e2b..fb06b636a1b 100644 --- a/app/containers/RoomItem/useRoomSnapshot.ts +++ b/app/containers/RoomItem/hooks/useRoomSnapshot.ts @@ -1,7 +1,7 @@ import { useCallback, useRef, useSyncExternalStore } from 'react'; import { skip } from 'rxjs'; -import { type IRoomItemContainerProps } from './interfaces'; +import { type IRoomItemContainerProps } from '../interfaces'; type TRoomItem = IRoomItemContainerProps['item']; diff --git a/app/containers/RoomItem/index.tsx b/app/containers/RoomItem/index.tsx index d7cf597d08f..a23c402770d 100644 --- a/app/containers/RoomItem/index.tsx +++ b/app/containers/RoomItem/index.tsx @@ -10,7 +10,7 @@ import RoomItem from './RoomItem'; import { getRoomActionsOptions } from './getRoomActionsOptions'; import { isInviteSubscription } from '~/lib/methods/isInviteSubscription'; import { isExternalKeyboardConnected } from '~/lib/methods/helpers/externalInput'; -import { useRoomSnapshot } from './useRoomSnapshot'; +import { useRoomSnapshot } from './hooks/useRoomSnapshot'; const RoomItemContainer = memo( ({ diff --git a/app/containers/RoomItem/__tests__/openSwipeItem.test.ts b/app/containers/RoomItem/utils/__tests__/openSwipeItem.test.ts similarity index 100% rename from app/containers/RoomItem/__tests__/openSwipeItem.test.ts rename to app/containers/RoomItem/utils/__tests__/openSwipeItem.test.ts diff --git a/app/containers/RoomItem/__tests__/swipeRelease.test.ts b/app/containers/RoomItem/utils/__tests__/swipeRelease.test.ts similarity index 100% rename from app/containers/RoomItem/__tests__/swipeRelease.test.ts rename to app/containers/RoomItem/utils/__tests__/swipeRelease.test.ts diff --git a/app/containers/RoomItem/openSwipeItem.ts b/app/containers/RoomItem/utils/openSwipeItem.ts similarity index 100% rename from app/containers/RoomItem/openSwipeItem.ts rename to app/containers/RoomItem/utils/openSwipeItem.ts diff --git a/app/containers/RoomItem/swipeRelease.ts b/app/containers/RoomItem/utils/swipeRelease.ts similarity index 100% rename from app/containers/RoomItem/swipeRelease.ts rename to app/containers/RoomItem/utils/swipeRelease.ts