diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 141c2899..5e443e34 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -4,14 +4,14 @@ PODS: - React-Core - DoubleConversion (1.1.6) - fast_float (8.0.0) - - FBLazyVector (0.81.0) + - FBLazyVector (0.81.1) - fmt (11.0.2) - glog (0.3.5) - google-cast-sdk (4.8.3): - Protobuf (~> 3.13) - - hermes-engine (0.81.0): - - hermes-engine/Pre-built (= 0.81.0) - - hermes-engine/Pre-built (0.81.0) + - hermes-engine (0.81.1): + - hermes-engine/Pre-built (= 0.81.1) + - hermes-engine/Pre-built (0.81.1) - libwebp (1.5.0): - libwebp/demux (= 1.5.0) - libwebp/mux (= 1.5.0) @@ -45,27 +45,27 @@ PODS: - fast_float (= 8.0.0) - fmt (= 11.0.2) - glog - - RCTDeprecation (0.81.0) - - RCTRequired (0.81.0) - - RCTTypeSafety (0.81.0): - - FBLazyVector (= 0.81.0) - - RCTRequired (= 0.81.0) - - React-Core (= 0.81.0) - - React (0.81.0): - - React-Core (= 0.81.0) - - React-Core/DevSupport (= 0.81.0) - - React-Core/RCTWebSocket (= 0.81.0) - - React-RCTActionSheet (= 0.81.0) - - React-RCTAnimation (= 0.81.0) - - React-RCTBlob (= 0.81.0) - - React-RCTImage (= 0.81.0) - - React-RCTLinking (= 0.81.0) - - React-RCTNetwork (= 0.81.0) - - React-RCTSettings (= 0.81.0) - - React-RCTText (= 0.81.0) - - React-RCTVibration (= 0.81.0) - - React-callinvoker (0.81.0) - - React-Core (0.81.0): + - RCTDeprecation (0.81.1) + - RCTRequired (0.81.1) + - RCTTypeSafety (0.81.1): + - FBLazyVector (= 0.81.1) + - RCTRequired (= 0.81.1) + - React-Core (= 0.81.1) + - React (0.81.1): + - React-Core (= 0.81.1) + - React-Core/DevSupport (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-RCTActionSheet (= 0.81.1) + - React-RCTAnimation (= 0.81.1) + - React-RCTBlob (= 0.81.1) + - React-RCTImage (= 0.81.1) + - React-RCTLinking (= 0.81.1) + - React-RCTNetwork (= 0.81.1) + - React-RCTSettings (= 0.81.1) + - React-RCTText (= 0.81.1) + - React-RCTVibration (= 0.81.1) + - React-callinvoker (0.81.1) + - React-Core (0.81.1): - boost - DoubleConversion - fast_float @@ -75,7 +75,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) + - React-Core/Default (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -90,7 +90,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/CoreModulesHeaders (0.81.0): + - React-Core/CoreModulesHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -115,7 +115,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/Default (0.81.0): + - React-Core/Default (0.81.1): - boost - DoubleConversion - fast_float @@ -139,7 +139,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/DevSupport (0.81.0): + - React-Core/DevSupport (0.81.1): - boost - DoubleConversion - fast_float @@ -149,8 +149,8 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) - - React-Core/RCTWebSocket (= 0.81.0) + - React-Core/Default (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -165,7 +165,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTActionSheetHeaders (0.81.0): + - React-Core/RCTActionSheetHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -190,7 +190,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTAnimationHeaders (0.81.0): + - React-Core/RCTAnimationHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -215,7 +215,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTBlobHeaders (0.81.0): + - React-Core/RCTBlobHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -240,7 +240,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTImageHeaders (0.81.0): + - React-Core/RCTImageHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -265,7 +265,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTLinkingHeaders (0.81.0): + - React-Core/RCTLinkingHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -290,7 +290,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTNetworkHeaders (0.81.0): + - React-Core/RCTNetworkHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -315,7 +315,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTSettingsHeaders (0.81.0): + - React-Core/RCTSettingsHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -340,7 +340,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTTextHeaders (0.81.0): + - React-Core/RCTTextHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -365,7 +365,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTVibrationHeaders (0.81.0): + - React-Core/RCTVibrationHeaders (0.81.1): - boost - DoubleConversion - fast_float @@ -390,7 +390,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-Core/RCTWebSocket (0.81.0): + - React-Core/RCTWebSocket (0.81.1): - boost - DoubleConversion - fast_float @@ -400,7 +400,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - RCTDeprecation - - React-Core/Default (= 0.81.0) + - React-Core/Default (= 0.81.1) - React-cxxreact - React-featureflags - React-hermes @@ -415,7 +415,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-CoreModules (0.81.0): + - React-CoreModules (0.81.1): - boost - DoubleConversion - fast_float @@ -423,20 +423,20 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.0) - - React-Core/CoreModulesHeaders (= 0.81.0) - - React-jsi (= 0.81.0) + - RCTTypeSafety (= 0.81.1) + - React-Core/CoreModulesHeaders (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.0) + - React-RCTImage (= 0.81.1) - React-runtimeexecutor - ReactCommon - SocketRocket - - React-cxxreact (0.81.0): + - React-cxxreact (0.81.1): - boost - DoubleConversion - fast_float @@ -445,19 +445,19 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-debug (= 0.81.0) - - React-jsi (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-debug (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - - React-timing (= 0.81.0) + - React-timing (= 0.81.1) - SocketRocket - - React-debug (0.81.0) - - React-defaultsnativemodule (0.81.0): + - React-debug (0.81.1) + - React-defaultsnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -474,7 +474,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - SocketRocket - - React-domnativemodule (0.81.0): + - React-domnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -494,7 +494,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric (0.81.0): + - React-Fabric (0.81.1): - boost - DoubleConversion - fast_float @@ -508,23 +508,23 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.0) - - React-Fabric/attributedstring (= 0.81.0) - - React-Fabric/bridging (= 0.81.0) - - React-Fabric/componentregistry (= 0.81.0) - - React-Fabric/componentregistrynative (= 0.81.0) - - React-Fabric/components (= 0.81.0) - - React-Fabric/consistency (= 0.81.0) - - React-Fabric/core (= 0.81.0) - - React-Fabric/dom (= 0.81.0) - - React-Fabric/imagemanager (= 0.81.0) - - React-Fabric/leakchecker (= 0.81.0) - - React-Fabric/mounting (= 0.81.0) - - React-Fabric/observers (= 0.81.0) - - React-Fabric/scheduler (= 0.81.0) - - React-Fabric/telemetry (= 0.81.0) - - React-Fabric/templateprocessor (= 0.81.0) - - React-Fabric/uimanager (= 0.81.0) + - React-Fabric/animations (= 0.81.1) + - React-Fabric/attributedstring (= 0.81.1) + - React-Fabric/bridging (= 0.81.1) + - React-Fabric/componentregistry (= 0.81.1) + - React-Fabric/componentregistrynative (= 0.81.1) + - React-Fabric/components (= 0.81.1) + - React-Fabric/consistency (= 0.81.1) + - React-Fabric/core (= 0.81.1) + - React-Fabric/dom (= 0.81.1) + - React-Fabric/imagemanager (= 0.81.1) + - React-Fabric/leakchecker (= 0.81.1) + - React-Fabric/mounting (= 0.81.1) + - React-Fabric/observers (= 0.81.1) + - React-Fabric/scheduler (= 0.81.1) + - React-Fabric/telemetry (= 0.81.1) + - React-Fabric/templateprocessor (= 0.81.1) + - React-Fabric/uimanager (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -536,7 +536,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/animations (0.81.0): + - React-Fabric/animations (0.81.1): - boost - DoubleConversion - fast_float @@ -561,7 +561,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/attributedstring (0.81.0): + - React-Fabric/attributedstring (0.81.1): - boost - DoubleConversion - fast_float @@ -586,7 +586,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/bridging (0.81.0): + - React-Fabric/bridging (0.81.1): - boost - DoubleConversion - fast_float @@ -611,7 +611,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistry (0.81.0): + - React-Fabric/componentregistry (0.81.1): - boost - DoubleConversion - fast_float @@ -636,7 +636,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/componentregistrynative (0.81.0): + - React-Fabric/componentregistrynative (0.81.1): - boost - DoubleConversion - fast_float @@ -661,7 +661,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components (0.81.0): + - React-Fabric/components (0.81.1): - boost - DoubleConversion - fast_float @@ -675,10 +675,10 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.0) - - React-Fabric/components/root (= 0.81.0) - - React-Fabric/components/scrollview (= 0.81.0) - - React-Fabric/components/view (= 0.81.0) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) + - React-Fabric/components/root (= 0.81.1) + - React-Fabric/components/scrollview (= 0.81.1) + - React-Fabric/components/view (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -690,7 +690,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.0): + - React-Fabric/components/legacyviewmanagerinterop (0.81.1): - boost - DoubleConversion - fast_float @@ -715,7 +715,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/root (0.81.0): + - React-Fabric/components/root (0.81.1): - boost - DoubleConversion - fast_float @@ -740,7 +740,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/scrollview (0.81.0): + - React-Fabric/components/scrollview (0.81.1): - boost - DoubleConversion - fast_float @@ -765,7 +765,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/components/view (0.81.0): + - React-Fabric/components/view (0.81.1): - boost - DoubleConversion - fast_float @@ -792,7 +792,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-Fabric/consistency (0.81.0): + - React-Fabric/consistency (0.81.1): - boost - DoubleConversion - fast_float @@ -817,7 +817,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/core (0.81.0): + - React-Fabric/core (0.81.1): - boost - DoubleConversion - fast_float @@ -842,7 +842,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/dom (0.81.0): + - React-Fabric/dom (0.81.1): - boost - DoubleConversion - fast_float @@ -867,7 +867,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/imagemanager (0.81.0): + - React-Fabric/imagemanager (0.81.1): - boost - DoubleConversion - fast_float @@ -892,7 +892,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/leakchecker (0.81.0): + - React-Fabric/leakchecker (0.81.1): - boost - DoubleConversion - fast_float @@ -917,7 +917,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/mounting (0.81.0): + - React-Fabric/mounting (0.81.1): - boost - DoubleConversion - fast_float @@ -942,7 +942,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers (0.81.0): + - React-Fabric/observers (0.81.1): - boost - DoubleConversion - fast_float @@ -956,7 +956,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.0) + - React-Fabric/observers/events (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -968,7 +968,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/observers/events (0.81.0): + - React-Fabric/observers/events (0.81.1): - boost - DoubleConversion - fast_float @@ -993,7 +993,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/scheduler (0.81.0): + - React-Fabric/scheduler (0.81.1): - boost - DoubleConversion - fast_float @@ -1020,7 +1020,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/telemetry (0.81.0): + - React-Fabric/telemetry (0.81.1): - boost - DoubleConversion - fast_float @@ -1045,7 +1045,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/templateprocessor (0.81.0): + - React-Fabric/templateprocessor (0.81.1): - boost - DoubleConversion - fast_float @@ -1070,7 +1070,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager (0.81.0): + - React-Fabric/uimanager (0.81.1): - boost - DoubleConversion - fast_float @@ -1084,7 +1084,7 @@ PODS: - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.0) + - React-Fabric/uimanager/consistency (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1097,7 +1097,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-Fabric/uimanager/consistency (0.81.0): + - React-Fabric/uimanager/consistency (0.81.1): - boost - DoubleConversion - fast_float @@ -1123,7 +1123,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - SocketRocket - - React-FabricComponents (0.81.0): + - React-FabricComponents (0.81.1): - boost - DoubleConversion - fast_float @@ -1138,8 +1138,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.0) - - React-FabricComponents/textlayoutmanager (= 0.81.0) + - React-FabricComponents/components (= 0.81.1) + - React-FabricComponents/textlayoutmanager (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1152,7 +1152,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components (0.81.0): + - React-FabricComponents/components (0.81.1): - boost - DoubleConversion - fast_float @@ -1167,16 +1167,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.0) - - React-FabricComponents/components/iostextinput (= 0.81.0) - - React-FabricComponents/components/modal (= 0.81.0) - - React-FabricComponents/components/rncore (= 0.81.0) - - React-FabricComponents/components/safeareaview (= 0.81.0) - - React-FabricComponents/components/scrollview (= 0.81.0) - - React-FabricComponents/components/text (= 0.81.0) - - React-FabricComponents/components/textinput (= 0.81.0) - - React-FabricComponents/components/unimplementedview (= 0.81.0) - - React-FabricComponents/components/virtualview (= 0.81.0) + - React-FabricComponents/components/inputaccessory (= 0.81.1) + - React-FabricComponents/components/iostextinput (= 0.81.1) + - React-FabricComponents/components/modal (= 0.81.1) + - React-FabricComponents/components/rncore (= 0.81.1) + - React-FabricComponents/components/safeareaview (= 0.81.1) + - React-FabricComponents/components/scrollview (= 0.81.1) + - React-FabricComponents/components/switch (= 0.81.1) + - React-FabricComponents/components/text (= 0.81.1) + - React-FabricComponents/components/textinput (= 0.81.1) + - React-FabricComponents/components/unimplementedview (= 0.81.1) + - React-FabricComponents/components/virtualview (= 0.81.1) - React-featureflags - React-graphics - React-jsi @@ -1189,7 +1190,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/inputaccessory (0.81.0): + - React-FabricComponents/components/inputaccessory (0.81.1): - boost - DoubleConversion - fast_float @@ -1216,7 +1217,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/iostextinput (0.81.0): + - React-FabricComponents/components/iostextinput (0.81.1): - boost - DoubleConversion - fast_float @@ -1243,7 +1244,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/modal (0.81.0): + - React-FabricComponents/components/modal (0.81.1): - boost - DoubleConversion - fast_float @@ -1270,7 +1271,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/rncore (0.81.0): + - React-FabricComponents/components/rncore (0.81.1): - boost - DoubleConversion - fast_float @@ -1297,7 +1298,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/safeareaview (0.81.0): + - React-FabricComponents/components/safeareaview (0.81.1): - boost - DoubleConversion - fast_float @@ -1324,7 +1325,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/scrollview (0.81.0): + - React-FabricComponents/components/scrollview (0.81.1): - boost - DoubleConversion - fast_float @@ -1351,7 +1352,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/text (0.81.0): + - React-FabricComponents/components/switch (0.81.1): - boost - DoubleConversion - fast_float @@ -1378,7 +1379,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/textinput (0.81.0): + - React-FabricComponents/components/text (0.81.1): - boost - DoubleConversion - fast_float @@ -1405,7 +1406,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/unimplementedview (0.81.0): + - React-FabricComponents/components/textinput (0.81.1): - boost - DoubleConversion - fast_float @@ -1432,7 +1433,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/components/virtualview (0.81.0): + - React-FabricComponents/components/unimplementedview (0.81.1): - boost - DoubleConversion - fast_float @@ -1459,7 +1460,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricComponents/textlayoutmanager (0.81.0): + - React-FabricComponents/components/virtualview (0.81.1): - boost - DoubleConversion - fast_float @@ -1486,7 +1487,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - React-FabricImage (0.81.0): + - React-FabricComponents/textlayoutmanager (0.81.1): - boost - DoubleConversion - fast_float @@ -1495,21 +1496,48 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - RCTRequired (= 0.81.0) - - RCTTypeSafety (= 0.81.0) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.1) + - RCTTypeSafety (= 0.81.1) - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.0) + - React-jsiexecutor (= 0.81.1) - React-logger - React-rendererdebug - React-utils - ReactCommon - SocketRocket - Yoga - - React-featureflags (0.81.0): + - React-featureflags (0.81.1): - boost - DoubleConversion - fast_float @@ -1518,7 +1546,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-featureflagsnativemodule (0.81.0): + - React-featureflagsnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -1533,7 +1561,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - SocketRocket - - React-graphics (0.81.0): + - React-graphics (0.81.1): - boost - DoubleConversion - fast_float @@ -1546,7 +1574,7 @@ PODS: - React-jsiexecutor - React-utils - SocketRocket - - React-hermes (0.81.0): + - React-hermes (0.81.1): - boost - DoubleConversion - fast_float @@ -1555,16 +1583,16 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) + - React-cxxreact (= 0.81.1) - React-jsi - - React-jsiexecutor (= 0.81.0) + - React-jsiexecutor (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-idlecallbacksnativemodule (0.81.0): + - React-idlecallbacksnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -1580,7 +1608,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - SocketRocket - - React-ImageManager (0.81.0): + - React-ImageManager (0.81.1): - boost - DoubleConversion - fast_float @@ -1595,7 +1623,7 @@ PODS: - React-rendererdebug - React-utils - SocketRocket - - React-jserrorhandler (0.81.0): + - React-jserrorhandler (0.81.1): - boost - DoubleConversion - fast_float @@ -1610,7 +1638,7 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - SocketRocket - - React-jsi (0.81.0): + - React-jsi (0.81.1): - boost - DoubleConversion - fast_float @@ -1620,7 +1648,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsiexecutor (0.81.0): + - React-jsiexecutor (0.81.1): - boost - DoubleConversion - fast_float @@ -1629,15 +1657,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.0) + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-jsinspector (0.81.0): + - React-jsinspector (0.81.1): - boost - DoubleConversion - fast_float @@ -1651,10 +1679,11 @@ PODS: - React-jsinspectorcdp - React-jsinspectornetwork - React-jsinspectortracing - - React-perflogger (= 0.81.0) + - React-oscompat + - React-perflogger (= 0.81.1) - React-runtimeexecutor - SocketRocket - - React-jsinspectorcdp (0.81.0): + - React-jsinspectorcdp (0.81.1): - boost - DoubleConversion - fast_float @@ -1663,7 +1692,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-jsinspectornetwork (0.81.0): + - React-jsinspectornetwork (0.81.1): - boost - DoubleConversion - fast_float @@ -1676,7 +1705,7 @@ PODS: - React-performancetimeline - React-timing - SocketRocket - - React-jsinspectortracing (0.81.0): + - React-jsinspectortracing (0.81.1): - boost - DoubleConversion - fast_float @@ -1687,7 +1716,7 @@ PODS: - React-oscompat - React-timing - SocketRocket - - React-jsitooling (0.81.0): + - React-jsitooling (0.81.1): - boost - DoubleConversion - fast_float @@ -1695,16 +1724,16 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - SocketRocket - - React-jsitracing (0.81.0): + - React-jsitracing (0.81.1): - React-jsi - - React-logger (0.81.0): + - React-logger (0.81.1): - boost - DoubleConversion - fast_float @@ -1713,7 +1742,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-Mapbuffer (0.81.0): + - React-Mapbuffer (0.81.1): - boost - DoubleConversion - fast_float @@ -1723,7 +1752,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-microtasksnativemodule (0.81.0): + - React-microtasksnativemodule (0.81.1): - boost - DoubleConversion - fast_float @@ -2009,7 +2038,7 @@ PODS: - SwiftAudioEx (= 1.1.0) - Yoga - react-native-vector-icons-material-design-icons (12.3.0) - - React-NativeModulesApple (0.81.0): + - React-NativeModulesApple (0.81.1): - boost - DoubleConversion - fast_float @@ -2029,8 +2058,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - React-oscompat (0.81.0) - - React-perflogger (0.81.0): + - React-oscompat (0.81.1) + - React-perflogger (0.81.1): - boost - DoubleConversion - fast_float @@ -2039,7 +2068,7 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - SocketRocket - - React-performancetimeline (0.81.0): + - React-performancetimeline (0.81.1): - boost - DoubleConversion - fast_float @@ -2052,9 +2081,9 @@ PODS: - React-perflogger - React-timing - SocketRocket - - React-RCTActionSheet (0.81.0): - - React-Core/RCTActionSheetHeaders (= 0.81.0) - - React-RCTAnimation (0.81.0): + - React-RCTActionSheet (0.81.1): + - React-Core/RCTActionSheetHeaders (= 0.81.1) + - React-RCTAnimation (0.81.1): - boost - DoubleConversion - fast_float @@ -2070,7 +2099,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTAppDelegate (0.81.0): + - React-RCTAppDelegate (0.81.1): - boost - DoubleConversion - fast_float @@ -2104,7 +2133,7 @@ PODS: - React-utils - ReactCommon - SocketRocket - - React-RCTBlob (0.81.0): + - React-RCTBlob (0.81.1): - boost - DoubleConversion - fast_float @@ -2123,7 +2152,7 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTFabric (0.81.0): + - React-RCTFabric (0.81.1): - boost - DoubleConversion - fast_float @@ -2158,7 +2187,7 @@ PODS: - React-utils - SocketRocket - Yoga - - React-RCTFBReactNativeSpec (0.81.0): + - React-RCTFBReactNativeSpec (0.81.1): - boost - DoubleConversion - fast_float @@ -2172,10 +2201,10 @@ PODS: - React-Core - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.0) + - React-RCTFBReactNativeSpec/components (= 0.81.1) - ReactCommon - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.0): + - React-RCTFBReactNativeSpec/components (0.81.1): - boost - DoubleConversion - fast_float @@ -2198,7 +2227,7 @@ PODS: - ReactCommon - SocketRocket - Yoga - - React-RCTImage (0.81.0): + - React-RCTImage (0.81.1): - boost - DoubleConversion - fast_float @@ -2214,14 +2243,14 @@ PODS: - React-RCTNetwork - ReactCommon - SocketRocket - - React-RCTLinking (0.81.0): - - React-Core/RCTLinkingHeaders (= 0.81.0) - - React-jsi (= 0.81.0) + - React-RCTLinking (0.81.1): + - React-Core/RCTLinkingHeaders (= 0.81.1) + - React-jsi (= 0.81.1) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.0) - - React-RCTNetwork (0.81.0): + - ReactCommon/turbomodule/core (= 0.81.1) + - React-RCTNetwork (0.81.1): - boost - DoubleConversion - fast_float @@ -2239,7 +2268,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTRuntime (0.81.0): + - React-RCTRuntime (0.81.1): - boost - DoubleConversion - fast_float @@ -2259,7 +2288,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - SocketRocket - - React-RCTSettings (0.81.0): + - React-RCTSettings (0.81.1): - boost - DoubleConversion - fast_float @@ -2274,10 +2303,10 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-RCTText (0.81.0): - - React-Core/RCTTextHeaders (= 0.81.0) + - React-RCTText (0.81.1): + - React-Core/RCTTextHeaders (= 0.81.1) - Yoga - - React-RCTVibration (0.81.0): + - React-RCTVibration (0.81.1): - boost - DoubleConversion - fast_float @@ -2291,11 +2320,11 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - SocketRocket - - React-rendererconsistency (0.81.0) - - React-renderercss (0.81.0): + - React-rendererconsistency (0.81.1) + - React-renderercss (0.81.1): - React-debug - React-utils - - React-rendererdebug (0.81.0): + - React-rendererdebug (0.81.1): - boost - DoubleConversion - fast_float @@ -2305,7 +2334,7 @@ PODS: - RCT-Folly/Fabric - React-debug - SocketRocket - - React-RuntimeApple (0.81.0): + - React-RuntimeApple (0.81.1): - boost - DoubleConversion - fast_float @@ -2334,7 +2363,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-RuntimeCore (0.81.0): + - React-RuntimeCore (0.81.1): - boost - DoubleConversion - fast_float @@ -2356,7 +2385,7 @@ PODS: - React-runtimescheduler - React-utils - SocketRocket - - React-runtimeexecutor (0.81.0): + - React-runtimeexecutor (0.81.1): - boost - DoubleConversion - fast_float @@ -2366,10 +2395,10 @@ PODS: - RCT-Folly/Fabric - React-debug - React-featureflags - - React-jsi (= 0.81.0) + - React-jsi (= 0.81.1) - React-utils - SocketRocket - - React-RuntimeHermes (0.81.0): + - React-RuntimeHermes (0.81.1): - boost - DoubleConversion - fast_float @@ -2390,7 +2419,7 @@ PODS: - React-runtimeexecutor - React-utils - SocketRocket - - React-runtimescheduler (0.81.0): + - React-runtimescheduler (0.81.1): - boost - DoubleConversion - fast_float @@ -2412,8 +2441,9 @@ PODS: - React-timing - React-utils - SocketRocket - - React-timing (0.81.0) - - React-utils (0.81.0): + - React-timing (0.81.1): + - React-debug + - React-utils (0.81.1): - boost - DoubleConversion - fast_float @@ -2423,11 +2453,11 @@ PODS: - RCT-Folly - RCT-Folly/Fabric - React-debug - - React-jsi (= 0.81.0) + - React-jsi (= 0.81.1) - SocketRocket - - ReactAppDependencyProvider (0.81.0): + - ReactAppDependencyProvider (0.81.1): - ReactCodegen - - ReactCodegen (0.81.0): + - ReactCodegen (0.81.1): - boost - DoubleConversion - fast_float @@ -2453,7 +2483,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - ReactCommon (0.81.0): + - ReactCommon (0.81.1): - boost - DoubleConversion - fast_float @@ -2461,9 +2491,9 @@ PODS: - glog - RCT-Folly - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.0) + - ReactCommon/turbomodule (= 0.81.1) - SocketRocket - - ReactCommon/turbomodule (0.81.0): + - ReactCommon/turbomodule (0.81.1): - boost - DoubleConversion - fast_float @@ -2472,15 +2502,15 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) - - ReactCommon/turbomodule/bridging (= 0.81.0) - - ReactCommon/turbomodule/core (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - ReactCommon/turbomodule/bridging (= 0.81.1) + - ReactCommon/turbomodule/core (= 0.81.1) - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.0): + - ReactCommon/turbomodule/bridging (0.81.1): - boost - DoubleConversion - fast_float @@ -2489,13 +2519,13 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) - SocketRocket - - ReactCommon/turbomodule/core (0.81.0): + - ReactCommon/turbomodule/core (0.81.1): - boost - DoubleConversion - fast_float @@ -2504,14 +2534,14 @@ PODS: - hermes-engine - RCT-Folly - RCT-Folly/Fabric - - React-callinvoker (= 0.81.0) - - React-cxxreact (= 0.81.0) - - React-debug (= 0.81.0) - - React-featureflags (= 0.81.0) - - React-jsi (= 0.81.0) - - React-logger (= 0.81.0) - - React-perflogger (= 0.81.0) - - React-utils (= 0.81.0) + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-debug (= 0.81.1) + - React-featureflags (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-utils (= 0.81.1) - SocketRocket - RNCMaskedView (0.3.2): - boost @@ -3231,47 +3261,47 @@ SPEC CHECKSUMS: BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: a867936a67af0d09c37935a1b900a1a3c795b6d1 + FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 google-cast-sdk: 1fb6724e94cc5ff23b359176e0cf6360586bb97a - hermes-engine: e7491a2038f2618c8cd444ed411a6deb350a3742 + hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 Protobuf: 164aea2ae380c3951abdc3e195220c01d17400e0 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 0735ab4f6b3ec93a7f98187b5da74d7916e2cf4c - RCTRequired: 8fcc7801bfc433072287b0f24a662e2816e89d0c - RCTTypeSafety: 2b2be515d6b968bcba7a68c4179d8199bd8c9b58 - React: 1000c0e96d8fb9fbdaf13f7d31d0b09db3cbb4ac - React-callinvoker: 7e52661bfaf5d8881a9cee049792627a00001fbe - React-Core: 949b436ddfe76cf47ac96375152de2f3506a8421 - React-CoreModules: 0f27580d0d82d430fa4f2cf4d970b6ad1120d63a - React-cxxreact: 48754f11f47a29ea4800cbdd694c10f874a26b9b - React-debug: 7a23d96f709f437c5e08973d6e06d0a54dd180a1 - React-defaultsnativemodule: 569d9222a701ed3dc60a60b2ce066b5bd88da059 - React-domnativemodule: 34474bda3973bfd0ca2ea9f1b3db20db5d504cc7 - React-Fabric: 45c3e9b112075451e592f0e008cabd4b82575355 - React-FabricComponents: a428f23938c27a073baacc069d484b3478df85f3 - React-FabricImage: 4375129ba8a26e8a7074af1c2468870fb8aab723 - React-featureflags: ed973a134993f3be204d0b2d385d386603c9a0af - React-featureflagsnativemodule: aa3e1dc86bc185344d4875e7cb40cce0bd28de76 - React-graphics: b5b8709a8216075bb6a5f9e7bb68881212d924ee - React-hermes: c543ffa2866304c582bdcb135c184e0f776f0d0b - React-idlecallbacksnativemodule: f19c4060b12fffc3ad33ce5de190338751b462ef - React-ImageManager: ecaf317aa5dff5eebba178b0813ef998c62547ea - React-jserrorhandler: 92eea1ee4f8c56b466b34e0065def59805e5d3a9 - React-jsi: 7336786a4a14c473d104e6b37df935620d218fcd - React-jsiexecutor: 7c750f5b63fbc071d0f0e56e86f1a1589914f7b1 - React-jsinspector: da5f336c1aa174a05885d061559a92e1d07b8a80 - React-jsinspectorcdp: 0e807e4c2dc8ae8a07f0a6bfe50377f442079ba3 - React-jsinspectornetwork: 3399384f2b6b70b287d8b9675452af4cec21dc65 - React-jsinspectortracing: 030af0e9dca9a4eaa1d0ba258c7bd859fb90f61d - React-jsitooling: f8ed67814b17ebb124c48fccdf587ee1e02f16f4 - React-jsitracing: 5cf6b84d46a4653895e30956a0ce3a315244c10a - React-logger: 04ce9229cb57db2c2a8164eaec1105f89da7fb22 - React-Mapbuffer: e402e7a0535b2213c50727553621480fe8cd8ade - React-microtasksnativemodule: a63ce5595016996a9bac1f10c70a7a7fe6506649 + RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 + RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a + RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 + React: f1486d005993b0af01943af1850d3d4f3b597545 + React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe + React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 + React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e + React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b + React-debug: e01581e1589f329e61c95b332bf7f4969b10564b + React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa + React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb + React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e + React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d + React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 + React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 + React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 + React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 + React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e + React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 + React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 + React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 + React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e + React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 + React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b + React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 + React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee + React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 + React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 + React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d + React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 + React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e + React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb react-native-background-actions: 48e6bad9e2a47e3b04858634c5a05ea11062f680 react-native-blob-util: e2162ce4757849682559754bca954b65dc7eeb2f react-native-blurhash: c1721deafe7a685088ea14ab4712a1c460be9fe4 @@ -3285,36 +3315,36 @@ SPEC CHECKSUMS: react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 react-native-track-player: 89d8e641c83a89bea5dee43c381be743282553e9 react-native-vector-icons-material-design-icons: c502df5b988ce85d6c7d2b7ee909818315760b82 - React-NativeModulesApple: b3766e1f87b08064ebc459b9e1538da2447ca874 - React-oscompat: 34f3d3c06cadcbc470bc4509c717fb9b919eaa8b - React-perflogger: a1edb025fd5d44f61bf09307e248f7608d7b2dcf - React-performancetimeline: 1f86dc9782e3fe78727c5fbb3e2178b9fd1aa6fd - React-RCTActionSheet: 550c9c6c2e7dcd85a51954dc08e2f3837a148e7c - React-RCTAnimation: 19d4bb6d2190983d1354b096b7b65dbd591924da - React-RCTAppDelegate: 6c71d16eef920831a312ff363355fc3b99c02a98 - React-RCTBlob: b81a0cffe1a083bcf9d8aa9f27f4d37864579e90 - React-RCTFabric: 01005d2fa799bba6e21aae18820498f56fe0be5f - React-RCTFBReactNativeSpec: 5adb84a81c4ed7a1f2661835d166e4b2c4320cd4 - React-RCTImage: 607e5e373fb56d72417464bd82e8046af81ab502 - React-RCTLinking: 301434c7bf1100458be5a3866326ba33491e3687 - React-RCTNetwork: a118a47bd123ac96c9877e04f5731a1d6545aba5 - React-RCTRuntime: 85fdbf469fe8a12c4db6c836731b190efc33d11d - React-RCTSettings: 5a5aa2cf9ac40f7a8897cc0f9d945ac803886604 - React-RCTText: e6e00bee9847a8af1218079b73c8bfed16c75b8d - React-RCTVibration: 5a05fa0ef05ee73d074a3314e57586afc969f1ba - React-rendererconsistency: c2cb23365f4a7b511893748fe8cad1830bbae637 - React-renderercss: 0c1472d6572c05e493aee476598c3ed6234b6c33 - React-rendererdebug: d6335da9730fa5a151537aa976a16d48de6135e2 - React-RuntimeApple: 5684c2a5d8768e5728a5817c21e5dba798d54c58 - React-RuntimeCore: 52428a1b48fb3c50ddf4dd5eee494486e4ecffc6 - React-runtimeexecutor: 1b4e99e5c27d2cb8bdeca9773ff5f1a8eac7709c - React-RuntimeHermes: a688639233a3ea44b4f8e4d448f51943d7e00815 - React-runtimescheduler: b833f0fc8c788329a497e93f55ce30508f56307a - React-timing: 25e8229ad1cf6874e9f0711515213cb2bc322215 - React-utils: 068cec677032ba78ca0700f2dcbe6d08a0939647 - ReactAppDependencyProvider: c91900fa724baee992f01c05eeb4c9e01a807f78 - ReactCodegen: a55799cae416c387aeaae3aabc1bc0289ac19cee - ReactCommon: 116d6ee71679243698620d8cd9a9042541e44aa6 + React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac + React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 + React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 + React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e + React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 + React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 + React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 + React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a + React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a + React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf + React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add + React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 + React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b + React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a + React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 + React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 + React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b + React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd + React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 + React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b + React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 + React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e + React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 + React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac + React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 + React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 + React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a + ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 + ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b + ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 RNCMaskedView: 5ef8c95cbab95334a32763b72896a7b7d07e6299 RNCPicker: 66c392786945ecee5275242c148e6a4601221d3a RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 @@ -3333,7 +3363,7 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SwiftAudioEx: f6aa653770f3a0d3851edaf8d834a30aee4a7646 - Yoga: 00013dd9cde63a2d98e8002fcc4f5ddb66c10782 + Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 PODFILE CHECKSUM: 531be4f3bdf91c9e2b2a6f2444e455020f218a20 diff --git a/package.json b/package.json index 2a391e4d..bf84a9a9 100644 --- a/package.json +++ b/package.json @@ -48,10 +48,10 @@ "@sentry/react-native": "6.17.0", "@shopify/flash-list": "^2.0.3", "@tamagui/config": "^1.132.23", - "@tanstack/query-async-storage-persister": "^5.85.5", - "@tanstack/react-query": "^5.85.5", - "@tanstack/react-query-persist-client": "^5.85.5", - "@testing-library/react-native": "^13.2.2", + "@tanstack/query-async-storage-persister": "^5.85.6", + "@tanstack/react-query": "^5.85.6", + "@tanstack/react-query-persist-client": "^5.85.6", + "@testing-library/react-native": "^13.2.3", "@typedigital/telemetrydeck-react": "^0.4.1", "axios": "^1.11.0", "bundle": "^2.1.0", @@ -59,10 +59,10 @@ "gem": "^2.4.3", "invert-color": "^2.0.0", "lodash": "^4.17.21", - "openai": "^5.12.2", + "openai": "^5.16.0", "react": "19.1.0", "react-freeze": "^1.0.4", - "react-native": "0.81.0", + "react-native": "0.81.1", "react-native-background-actions": "^4.0.1", "react-native-blob-util": "^0.22.2", "react-native-blurhash": "2.1.1", diff --git a/src/api/queries/album.ts b/src/api/queries/album.ts deleted file mode 100644 index f59a0c24..00000000 --- a/src/api/queries/album.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - BaseItemDto, - BaseItemKind, - ItemSortBy, - SortOrder, -} from '@jellyfin/sdk/lib/generated-client/models' -import { JellifyLibrary } from '../../types/JellifyLibrary' -import { Api } from '@jellyfin/sdk' -import { fetchItem, fetchItems } from './item' -import { JellifyUser } from '../../types/JellifyUser' -export function fetchAlbums( - api: Api | undefined, - user: JellifyUser | undefined, - library: JellifyLibrary | undefined, - page: string, - isFavorite: boolean | undefined, - sortBy: ItemSortBy[] = [ItemSortBy.SortName], - sortOrder: SortOrder[] = [SortOrder.Ascending], -): Promise<{ title: string | number; data: BaseItemDto[] }> { - console.debug('Fetching albums', page) - - return fetchItems( - api, - user, - library, - [BaseItemKind.MusicAlbum], - page, - sortBy, - sortOrder, - isFavorite, - ) -} - -export function fetchAlbumById(api: Api | undefined, albumId: string): Promise { - return new Promise((resolve, reject) => { - fetchItem(api, albumId) - .then((item) => { - resolve(item) - }) - .catch((error) => { - reject(error) - }) - }) -} diff --git a/src/api/queries/album/index.ts b/src/api/queries/album/index.ts new file mode 100644 index 00000000..aa73f92e --- /dev/null +++ b/src/api/queries/album/index.ts @@ -0,0 +1,79 @@ +import { useLibrarySortAndFilterContext } from '../../../providers/Library' +import { QueryKeys } from '../../../enums/query-keys' +import { useJellifyContext } from '../../../providers' +import { InfiniteData, useInfiniteQuery, UseInfiniteQueryResult } from '@tanstack/react-query' +import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by' +import { SortOrder } from '@jellyfin/sdk/lib/generated-client/models/sort-order' +import { fetchAlbums } from './utils/album' +import { RefObject, useCallback, useRef } from 'react' +import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client' +import flattenInfiniteQueryPages from '../../../utils/query-selectors' +import { ApiLimits } from '../query.config' +import { fetchRecentlyAdded } from '../recents' +import { queryClient } from '../../../constants/query-client' + +const useAlbums: () => [ + RefObject>, + UseInfiniteQueryResult<(string | number | BaseItemDto)[]>, +] = () => { + const { api, user, library } = useJellifyContext() + + const { isFavorites, sortDescending } = useLibrarySortAndFilterContext() + + const albumPageParams = useRef>(new Set()) + + // Memize the expensive albums select function + const selectAlbums = useCallback( + (data: InfiniteData) => + flattenInfiniteQueryPages(data, albumPageParams), + [], + ) + + const albumsInfiniteQuery = useInfiniteQuery({ + queryKey: [QueryKeys.InfiniteAlbums, isFavorites, library?.musicLibraryId], + queryFn: ({ pageParam }) => + fetchAlbums( + api, + user, + library, + pageParam, + isFavorites, + [ItemSortBy.SortName], + [SortOrder.Ascending], + ), + initialPageParam: 0, + select: selectAlbums, + getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) => { + return lastPage.length === ApiLimits.Library ? lastPageParam + 1 : undefined + }, + getPreviousPageParam: (firstPage, allPages, firstPageParam, allPageParams) => { + return firstPageParam === 0 ? null : firstPageParam - 1 + }, + }) + + return [albumPageParams, albumsInfiniteQuery] +} + +export default useAlbums + +export const useRecentlyAddedAlbums = () => { + const { api, user, library } = useJellifyContext() + + return useInfiniteQuery({ + queryKey: [QueryKeys.RecentlyAddedAlbums, library?.musicLibraryId], + queryFn: ({ pageParam }) => fetchRecentlyAdded(api, library, pageParam), + select: (data) => data.pages.flatMap((page) => page), + getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) => + lastPage.length > 0 ? lastPageParam + 1 : undefined, + initialPageParam: 0, + }) +} + +export const useRefetchRecentlyAdded: () => () => void = () => { + const { library } = useJellifyContext() + + return () => + queryClient.invalidateQueries({ + queryKey: [QueryKeys.RecentlyAddedAlbums, library?.musicLibraryId], + }) +} diff --git a/src/api/queries/album/utils/album.ts b/src/api/queries/album/utils/album.ts new file mode 100644 index 00000000..225f9292 --- /dev/null +++ b/src/api/queries/album/utils/album.ts @@ -0,0 +1,61 @@ +import { + BaseItemDto, + BaseItemKind, + ItemFields, + ItemSortBy, + SortOrder, +} from '@jellyfin/sdk/lib/generated-client/models' +import { JellifyLibrary } from '../../../../types/JellifyLibrary' +import { Api } from '@jellyfin/sdk' +import { fetchItem, fetchItems } from '../../item' +import { JellifyUser } from '../../../../types/JellifyUser' +import { getItemsApi } from '@jellyfin/sdk/lib/utils/api' +import { ApiLimits } from '../../query.config' +export function fetchAlbums( + api: Api | undefined, + user: JellifyUser | undefined, + library: JellifyLibrary | undefined, + page: number, + isFavorite: boolean | undefined, + sortBy: ItemSortBy[] = [ItemSortBy.SortName], + sortOrder: SortOrder[] = [SortOrder.Ascending], +): Promise { + console.debug('Fetching albums', page) + + return new Promise((resolve, reject) => { + if (!api) return reject('No API instance provided') + if (!user) return reject('No user provided') + if (!library) return reject('Library has not been set') + + getItemsApi(api) + .getItems({ + parentId: library.musicLibraryId, + includeItemTypes: [BaseItemKind.MusicAlbum], + userId: user.id, + enableUserData: false, // This data is fetched lazily on component render + sortBy, + sortOrder, + startIndex: page * ApiLimits.Library, + limit: ApiLimits.Library, + isFavorite, + fields: [ItemFields.SortName], + recursive: true, + }) + .then(({ data }) => { + console.debug('Albums Response receieved') + return data.Items ? resolve(data.Items) : resolve([]) + }) + }) +} + +export function fetchAlbumById(api: Api | undefined, albumId: string): Promise { + return new Promise((resolve, reject) => { + fetchItem(api, albumId) + .then((item) => { + resolve(item) + }) + .catch((error) => { + reject(error) + }) + }) +} diff --git a/src/api/queries/artist/index.ts b/src/api/queries/artist/index.ts index 8e0fea29..1f3a2573 100644 --- a/src/api/queries/artist/index.ts +++ b/src/api/queries/artist/index.ts @@ -10,7 +10,9 @@ import { isString, isUndefined } from 'lodash' import { fetchArtistAlbums, fetchArtistFeaturedOn, fetchArtists } from './utils/artist' import { useJellifyContext } from '../../../providers' import { ApiLimits } from '../query.config' -import { useCallback, useRef } from 'react' +import { RefObject, useCallback, useRef } from 'react' +import { useLibrarySortAndFilterContext } from '../../../providers/Library' +import flattenInfiniteQueryPages from '../../../utils/query-selectors' export const useArtistAlbums = (artist: BaseItemDto) => { const { api, library } = useJellifyContext() @@ -32,60 +34,22 @@ export const useArtistFeaturedOn = (artist: BaseItemDto) => { }) } -interface AlbumArtistQueryParams { - isFavorites: boolean | undefined - sortDescending: boolean -} - -export const useAlbumArtists: ( - params: AlbumArtistQueryParams, -) => [ - React.RefObject>, +export const useAlbumArtists: () => [ + RefObject>, UseInfiniteQueryResult<(string | number | BaseItemDto)[], Error>, -] = ({ isFavorites, sortDescending }: AlbumArtistQueryParams) => { +] = () => { const { api, user, library } = useJellifyContext() + const { isFavorites, sortDescending } = useLibrarySortAndFilterContext() + const artistPageParams = useRef>(new Set()) // Memoize the expensive artists select function - const selectArtists = useCallback((data: InfiniteData) => { - /** - * A flattened array of all artists derived from the infinite query - */ - const flattenedArtistPages = data.pages.flatMap((page) => page) - - /** - * A set of letters we've seen so we can add them to the alphabetical selector - */ - const seenLetters = new Set() - - /** - * The final array that will be provided to and rendered by the {@link Artists} component - */ - const flashArtistList: (string | number | BaseItemDto)[] = [] - - flattenedArtistPages.forEach((artist: BaseItemDto) => { - const rawLetter = isString(artist.SortName) - ? artist.SortName.trim().charAt(0).toUpperCase() - : '#' - - /** - * An alpha character or a hash if the artist's name doesn't start with a letter - */ - const letter = rawLetter.match(/[A-Z]/) ? rawLetter : '#' - - if (!seenLetters.has(letter)) { - seenLetters.add(letter) - flashArtistList.push(letter) - } - - flashArtistList.push(artist) - }) - - artistPageParams.current = seenLetters - - return flashArtistList - }, []) + const selectArtists = useCallback( + (data: InfiniteData) => + flattenInfiniteQueryPages(data, artistPageParams), + [], + ) const artistsInfiniteQuery = useInfiniteQuery({ queryKey: [QueryKeys.InfiniteArtists, isFavorites, sortDescending, library?.musicLibraryId], diff --git a/src/api/queries/query.config.ts b/src/api/queries/query.config.ts index 6bfa0020..1d2b9e5f 100644 --- a/src/api/queries/query.config.ts +++ b/src/api/queries/query.config.ts @@ -1,7 +1,7 @@ import { ImageFormat } from '@jellyfin/sdk/lib/generated-client/models' export enum ApiLimits { - Library = 100, + Library = 200, } const QueryConfig = { diff --git a/src/components/Albums/component.tsx b/src/components/Albums/component.tsx index f9ddb461..0159543b 100644 --- a/src/components/Albums/component.tsx +++ b/src/components/Albums/component.tsx @@ -1,9 +1,9 @@ import { ActivityIndicator, RefreshControl } from 'react-native' import { getToken, Separator, XStack, YStack } from 'tamagui' -import React, { useRef } from 'react' +import React, { RefObject, useEffect, useRef } from 'react' import { Text } from '../Global/helpers/text' -import { FlashList, ViewToken } from '@shopify/flash-list' -import { FetchNextPageOptions } from '@tanstack/react-query' +import { FlashList, FlashListRef, ViewToken } from '@shopify/flash-list' +import { UseInfiniteQueryResult } from '@tanstack/react-query' import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models' import ItemRow from '../Global/components/item-row' import { useNavigation } from '@react-navigation/native' @@ -12,21 +12,18 @@ import { NativeStackNavigationProp } from '@react-navigation/native-stack' import { warmItemContext } from '../../hooks/use-item-context' import { useJellifyContext } from '../../providers' import useStreamingDeviceProfile from '../../stores/device-profile' +import AZScroller, { useAlphabetSelector } from '../Global/components/alphabetical-selector' +import { isString } from 'lodash' interface AlbumsProps { - albums: (string | number | BaseItemDto)[] | undefined - fetchNextPage: (options?: FetchNextPageOptions | undefined) => void - hasNextPage: boolean - isPending: boolean - isFetchingNextPage: boolean + albumsInfiniteQuery: UseInfiniteQueryResult<(string | number | BaseItemDto)[], Error> showAlphabeticalSelector: boolean + albumPageParams?: RefObject> } export default function Albums({ - albums, - fetchNextPage, - hasNextPage, - isPending, + albumsInfiniteQuery, + albumPageParams, showAlphabeticalSelector, }: AlbumsProps): React.JSX.Element { const navigation = useNavigation>() @@ -35,6 +32,10 @@ export default function Albums({ const deviceProfile = useStreamingDeviceProfile() + const sectionListRef = useRef>(null) + + const pendingLetterRef = useRef(null) + const onViewableItemsChangedRef = useRef( ({ viewableItems }: { viewableItems: ViewToken[] }) => { viewableItems.forEach(({ isViewable, item }) => { @@ -46,21 +47,63 @@ export default function Albums({ // Memoize expensive stickyHeaderIndices calculation to prevent unnecessary re-computations const stickyHeaderIndices = React.useMemo(() => { - if (!showAlphabeticalSelector || !albums) return [] + if (!showAlphabeticalSelector || !albumsInfiniteQuery.data) return [] - return albums + return albumsInfiniteQuery.data .map((album, index) => (typeof album === 'string' ? index : 0)) .filter((value, index, indices) => indices.indexOf(value) === index) - }, [showAlphabeticalSelector, albums]) + }, [showAlphabeticalSelector, albumsInfiniteQuery.data]) + + const { mutate: alphabetSelectorMutate } = useAlphabetSelector( + (letter) => (pendingLetterRef.current = letter.toUpperCase()), + ) + + // Effect for handling the pending alphabet selector letter + useEffect(() => { + if (isString(pendingLetterRef.current) && albumsInfiniteQuery.data) { + const upperLetters = albumsInfiniteQuery.data + .filter((item): item is string => typeof item === 'string') + .map((letter) => letter.toUpperCase()) + .sort() + + const index = upperLetters.findIndex((letter) => letter >= pendingLetterRef.current!) + + if (index !== -1) { + const letterToScroll = upperLetters[index] + const scrollIndex = albumsInfiniteQuery.data.indexOf(letterToScroll) + if (scrollIndex !== -1) { + sectionListRef.current?.scrollToIndex({ + index: scrollIndex, + viewPosition: 0.1, + animated: true, + }) + } + } else { + // fallback: scroll to last section + const lastLetter = upperLetters[upperLetters.length - 1] + const scrollIndex = albumsInfiniteQuery.data.indexOf(lastLetter) + if (scrollIndex !== -1) { + sectionListRef.current?.scrollToIndex({ + index: scrollIndex, + viewPosition: 0.1, + animated: true, + }) + } + } + + pendingLetterRef.current = null + } + }, [pendingLetterRef.current, albumsInfiniteQuery.data]) return ( typeof item === 'string' ? item @@ -89,7 +132,7 @@ export default function Albums({ ) : null } ListEmptyComponent={ - isPending ? ( + albumsInfiniteQuery.isPending ? ( ) : ( @@ -98,15 +141,34 @@ export default function Albums({ ) } onEndReached={() => { - if (hasNextPage) fetchNextPage() + if (albumsInfiniteQuery.hasNextPage) albumsInfiniteQuery.fetchNextPage() }} - ListFooterComponent={isPending ? : null} + ListFooterComponent={ + albumsInfiniteQuery.isFetchingNextPage ? : null + } ItemSeparatorComponent={() => } - refreshControl={} + refreshControl={ + + } stickyHeaderIndices={stickyHeaderIndices} removeClippedSubviews onViewableItemsChanged={onViewableItemsChangedRef.current} /> + + {showAlphabeticalSelector && albumPageParams && ( + + alphabetSelectorMutate({ + letter, + infiniteQuery: albumsInfiniteQuery, + pageParams: albumPageParams, + }) + } + /> + )} ) } diff --git a/src/components/Artists/component.tsx b/src/components/Artists/component.tsx index 3c922c7b..bbef1af8 100644 --- a/src/components/Artists/component.tsx +++ b/src/components/Artists/component.tsx @@ -1,14 +1,13 @@ -import React, { useEffect, useRef } from 'react' +import React, { RefObject, useEffect, useMemo, useRef } from 'react' import { getToken, Separator, useTheme, XStack } from 'tamagui' import { Text } from '../Global/helpers/text' import { RefreshControl } from 'react-native' -import { ArtistsProps } from '../../screens/types' import ItemRow from '../Global/components/item-row' import { useLibrarySortAndFilterContext } from '../../providers/Library' import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto' import { FlashList, FlashListRef, ViewToken } from '@shopify/flash-list' -import { AZScroller } from '../Global/components/alphabetical-selector' -import { useMutation } from '@tanstack/react-query' +import AZScroller, { useAlphabetSelector } from '../Global/components/alphabetical-selector' +import { UseInfiniteQueryResult, useMutation } from '@tanstack/react-query' import { isString } from 'lodash' import { useNavigation } from '@react-navigation/native' import { NativeStackNavigationProp } from '@react-navigation/native-stack' @@ -17,6 +16,15 @@ import { warmItemContext } from '../../hooks/use-item-context' import { useJellifyContext } from '../../providers' import useStreamingDeviceProfile from '../../stores/device-profile' +export interface ArtistsProps { + artistsInfiniteQuery: UseInfiniteQueryResult< + BaseItemDto[] | (string | number | BaseItemDto)[], + Error + > + showAlphabeticalSelector: boolean + artistPageParams?: RefObject> +} + /** * @param artistsInfiniteQuery - The infinite query for artists * @param navigation - The navigation object @@ -53,30 +61,20 @@ export default function Artists({ }, ) - const alphabeticalSelectorCallback = async (letter: string) => { - console.debug(`Alphabetical Selector Callback: ${letter}`) + const { mutate: alphabetSelectorMutate, isPending: isAlphabetSelectorPending } = + useAlphabetSelector((letter) => (pendingLetterRef.current = letter.toUpperCase())) - while ( - !artistPageParams!.current.has(letter.toUpperCase()) && - artistsInfiniteQuery.hasNextPage - ) { - if (!artistsInfiniteQuery.isPending) { - await artistsInfiniteQuery.fetchNextPage() - } - } - console.debug(`Alphabetical Selector Callback: ${letter} complete`) - } + const stickyHeaderIndices = useMemo(() => { + if (!showAlphabeticalSelector || !artists) return [] - const { mutate: alphabetSelectorMutate, isPending: isAlphabetSelectorPending } = useMutation({ - mutationFn: (letter: string) => alphabeticalSelectorCallback(letter), - onSuccess: (data: void, letter: string) => { - pendingLetterRef.current = letter.toUpperCase() - }, - }) + return artists + .map((artist, index, artists) => (typeof artist === 'string' ? index : 0)) + .filter((value, index, indices) => indices.indexOf(value) === index) + }, [showAlphabeticalSelector, artists]) // Effect for handling the pending alphabet selector letter useEffect(() => { - if (isString(pendingLetterRef.current) && artistsInfiniteQuery.data) { + if (isString(pendingLetterRef.current) && artists) { const upperLetters = artists .filter((item): item is string => typeof item === 'string') .map((letter) => letter.toUpperCase()) @@ -168,15 +166,7 @@ export default function Artists({ /> ) : null } - stickyHeaderIndices={ - showAlphabeticalSelector - ? artists - ?.map((artist, index, artists) => - typeof artist === 'string' ? index : 0, - ) - .filter((value, index, indices) => indices.indexOf(value) === index) - : [] - } + stickyHeaderIndices={stickyHeaderIndices} onStartReached={() => { if (artistsInfiniteQuery.hasPreviousPage) artistsInfiniteQuery.fetchPreviousPage() @@ -191,7 +181,15 @@ export default function Artists({ /> {showAlphabeticalSelector && artistPageParams && ( - + + alphabetSelectorMutate({ + letter, + infiniteQuery: artistsInfiniteQuery, + pageParams: artistPageParams, + }) + } + /> )} ) diff --git a/src/components/Artists/screen.tsx b/src/components/Artists/screen.tsx index 78f6b5b2..d5156576 100644 --- a/src/components/Artists/screen.tsx +++ b/src/components/Artists/screen.tsx @@ -1,14 +1,15 @@ import React from 'react' -import Artists from './component' -import { ArtistsProps } from '../../screens/types' +import Artists, { ArtistsProps } from './component' export default function ArtistsScreen({ artistsInfiniteQuery: artistInfiniteQuery, + artistPageParams, showAlphabeticalSelector, }: ArtistsProps): React.JSX.Element { return ( ) diff --git a/src/components/Discover/component.tsx b/src/components/Discover/component.tsx index fc8bdd67..5c0f94c6 100644 --- a/src/components/Discover/component.tsx +++ b/src/components/Discover/component.tsx @@ -8,7 +8,7 @@ import SuggestedArtists from './helpers/suggested-artists' import { SafeAreaView } from 'react-native-safe-area-context' export default function Index(): React.JSX.Element { - const { refreshing, refresh, recentlyAdded, publicPlaylists, suggestedArtistsInfiniteQuery } = + const { refreshing, refresh, publicPlaylists, suggestedArtistsInfiniteQuery } = useDiscoverContext() return ( @@ -23,12 +23,10 @@ export default function Index(): React.JSX.Element { paddingBottom={'$15'} refreshControl={} > - {recentlyAdded && ( - - - - - )} + + + + {publicPlaylists && ( diff --git a/src/components/Discover/helpers/just-added.tsx b/src/components/Discover/helpers/just-added.tsx index adaf0c26..8b16c65d 100644 --- a/src/components/Discover/helpers/just-added.tsx +++ b/src/components/Discover/helpers/just-added.tsx @@ -8,15 +8,10 @@ import Icon from '../../Global/components/icon' import { useNavigation } from '@react-navigation/native' import DiscoverStackParamList from '../../../screens/Discover/types' import navigationRef from '../../../../navigation' +import { useRecentlyAddedAlbums } from '../../../api/queries/album' export default function RecentlyAdded(): React.JSX.Element { - const { - recentlyAdded, - fetchNextRecentlyAdded, - hasNextRecentlyAdded, - isPendingRecentlyAdded, - isFetchingNextRecentlyAdded, - } = useDiscoverContext() + const recentlyAddedAlbumsInfinityQuery = useRecentlyAddedAlbums() const navigation = useNavigation>() @@ -26,12 +21,7 @@ export default function RecentlyAdded(): React.JSX.Element { alignItems='center' onPress={() => { navigation.navigate('RecentlyAdded', { - albums: recentlyAdded, - navigation: navigation, - fetchNextPage: fetchNextRecentlyAdded, - hasNextPage: hasNextRecentlyAdded, - isPending: isPendingRecentlyAdded, - isFetchingNextPage: isFetchingNextRecentlyAdded, + albumsInfiniteQuery: recentlyAddedAlbumsInfinityQuery, }) }} > @@ -40,7 +30,7 @@ export default function RecentlyAdded(): React.JSX.Element { ( void }) { +export default function AZScroller({ + onLetterSelect, +}: { + onLetterSelect: (letter: string) => void +}) { const { width, height } = useSafeAreaFrame() const theme = useTheme() const [reducedHaptics] = useReducedHapticsSetting() @@ -197,3 +203,37 @@ export function AZScroller({ onLetterSelect }: { onLetterSelect: (letter: string ) } + +export const alphabeticalSelectorCallback = async ( + letter: string, + pageParams: RefObject>, + { + hasNextPage, + fetchNextPage, + isPending, + }: UseInfiniteQueryResult, +) => { + while (!pageParams.current.has(letter.toUpperCase()) && hasNextPage) { + console.debug(`Fetching next page for alphabet selection`) + await fetchNextPage() + } + console.debug(`Alphabetical Selector Callback: ${letter} complete`) +} + +interface AlphabetSelectorMutation { + letter: string + pageParams: RefObject> + infiniteQuery: UseInfiniteQueryResult +} + +export const useAlphabetSelector = (onSuccess: (letter: string) => void) => { + return useMutation({ + onMutate: ({ letter }) => + console.debug(`Alphabet selector callback started, fetching pages for ${letter}`), + mutationFn: ({ letter, pageParams, infiniteQuery }: AlphabetSelectorMutation) => + alphabeticalSelectorCallback(letter, pageParams, infiniteQuery), + onSuccess: (data: void, { letter }: AlphabetSelectorMutation) => onSuccess(letter), + onError: (error, { letter }) => + console.error(`Unable to paginate to letter ${letter}`, error), + }) +} diff --git a/src/components/Library/components/albums-tab.tsx b/src/components/Library/components/albums-tab.tsx index ad6c041a..d3699652 100644 --- a/src/components/Library/components/albums-tab.tsx +++ b/src/components/Library/components/albums-tab.tsx @@ -1,17 +1,14 @@ +import useAlbums from '../../../api/queries/album' import Albums from '../../Albums/component' -import { useAlbumsInfiniteQueryContext } from '../../../providers/Library' function AlbumsTab(): React.JSX.Element { - const albumsInfiniteQuery = useAlbumsInfiniteQueryContext() + const [albumPageParams, albumsInfiniteQuery] = useAlbums() return ( ) } diff --git a/src/components/Library/components/artists-tab.tsx b/src/components/Library/components/artists-tab.tsx index 20418f04..bec49ff8 100644 --- a/src/components/Library/components/artists-tab.tsx +++ b/src/components/Library/components/artists-tab.tsx @@ -1,14 +1,8 @@ import { useAlbumArtists } from '../../../api/queries/artist' import Artists from '../../Artists/component' -import { useLibrarySortAndFilterContext } from '../../../providers/Library' function ArtistsTab(): React.JSX.Element { - const { isFavorites, sortDescending } = useLibrarySortAndFilterContext() - - const [artistPageParams, artistsInfiniteQuery] = useAlbumArtists({ - isFavorites, - sortDescending, - }) + const [artistPageParams, artistsInfiniteQuery] = useAlbumArtists() return ( `${pickRandomItemFromArray(INFO_CAPTIONS)}!`, + queryFn: () => `${pickRandomItemFromArray(INFO_CAPTIONS)}`, staleTime: ONE_HOUR, initialData: 'Live and in stereo', }) diff --git a/src/components/Settings/utils/info-caption.ts b/src/components/Settings/utils/info-caption.ts index 656a848c..45aa1d23 100644 --- a/src/components/Settings/utils/info-caption.ts +++ b/src/components/Settings/utils/info-caption.ts @@ -7,6 +7,8 @@ const INFO_CAPTIONS = [ // Inside Jokes (that the internal Jellify team will get) 'Thank you, Pikachu', + 'Now with 100% more nitro!', // since we use nitro modules + 'git blame violet', // lol // Movie Quotes 'Groovy, baby!', // Austin Powers diff --git a/src/providers/Discover/index.tsx b/src/providers/Discover/index.tsx index 72c673b2..ac245fd9 100644 --- a/src/providers/Discover/index.tsx +++ b/src/providers/Discover/index.tsx @@ -4,30 +4,26 @@ import { useInfiniteQuery, UseInfiniteQueryResult, } from '@tanstack/react-query' -import { fetchRecentlyAdded, fetchRecentlyPlayed } from '../../api/queries/recents' +import { fetchRecentlyPlayed } from '../../api/queries/recents' import { QueryKeys } from '../../enums/query-keys' import { createContext, ReactNode, useContext, useState } from 'react' import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models' import { useJellifyContext } from '..' import { fetchPublicPlaylists } from '../../api/queries/playlists' import { fetchArtistSuggestions } from '../../api/queries/suggestions' +import { useRefetchRecentlyAdded } from '../../api/queries/album' interface DiscoverContext { refreshing: boolean refresh: () => void - recentlyAdded: BaseItemDto[] | undefined recentlyPlayed: InfiniteData | undefined publicPlaylists: BaseItemDto[] | undefined - fetchNextRecentlyAdded: () => void fetchNextRecentlyPlayed: () => void fetchNextPublicPlaylists: () => void - hasNextRecentlyAdded: boolean hasNextRecentlyPlayed: boolean hasNextPublicPlaylists: boolean - isPendingRecentlyAdded: boolean isPendingRecentlyPlayed: boolean isPendingPublicPlaylists: boolean - isFetchingNextRecentlyAdded: boolean isFetchingNextRecentlyPlayed: boolean isFetchingNextPublicPlaylists: boolean refetchPublicPlaylists: () => void @@ -38,21 +34,7 @@ const DiscoverContextInitializer = () => { const { api, library, user } = useJellifyContext() const [refreshing, setRefreshing] = useState(false) - const { - data: recentlyAdded, - refetch: refetchRecentlyAdded, - fetchNextPage: fetchNextRecentlyAdded, - hasNextPage: hasNextRecentlyAdded, - isPending: isPendingRecentlyAdded, - isFetchingNextPage: isFetchingNextRecentlyAdded, - } = useInfiniteQuery({ - queryKey: [QueryKeys.RecentlyAddedAlbums, library?.musicLibraryId], - queryFn: ({ pageParam }) => fetchRecentlyAdded(api, library, pageParam), - select: (data) => data.pages.flatMap((page) => page), - getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) => - lastPage.length > 0 ? lastPageParam + 1 : undefined, - initialPageParam: 0, - }) + const refetchRecentlyAdded = useRefetchRecentlyAdded() const { data: publicPlaylists, @@ -111,19 +93,14 @@ const DiscoverContextInitializer = () => { return { refreshing, refresh, - recentlyAdded, recentlyPlayed, publicPlaylists, - fetchNextRecentlyAdded, fetchNextRecentlyPlayed, fetchNextPublicPlaylists, - hasNextRecentlyAdded, hasNextRecentlyPlayed, hasNextPublicPlaylists, - isPendingRecentlyAdded, isPendingRecentlyPlayed, isPendingPublicPlaylists, - isFetchingNextRecentlyAdded, isFetchingNextRecentlyPlayed, isFetchingNextPublicPlaylists, refetchPublicPlaylists, @@ -134,19 +111,14 @@ const DiscoverContextInitializer = () => { const DiscoverContext = createContext({ refreshing: false, refresh: () => {}, - recentlyAdded: undefined, recentlyPlayed: undefined, publicPlaylists: undefined, - fetchNextRecentlyAdded: () => {}, fetchNextRecentlyPlayed: () => {}, fetchNextPublicPlaylists: () => {}, - hasNextRecentlyAdded: false, hasNextRecentlyPlayed: false, hasNextPublicPlaylists: false, - isPendingRecentlyAdded: false, isPendingRecentlyPlayed: false, isPendingPublicPlaylists: false, - isFetchingNextRecentlyAdded: false, isFetchingNextRecentlyPlayed: false, isFetchingNextPublicPlaylists: false, refetchPublicPlaylists: () => {}, diff --git a/src/providers/Library/index.tsx b/src/providers/Library/index.tsx index d120d4f6..e38c3de2 100644 --- a/src/providers/Library/index.tsx +++ b/src/providers/Library/index.tsx @@ -1,10 +1,9 @@ import { QueryKeys } from '../../enums/query-keys' import { BaseItemDto, ItemSortBy, SortOrder } from '@jellyfin/sdk/lib/generated-client/models' import { useJellifyContext } from '..' -import { RefObject, useMemo, useRef } from 'react' +import { useMemo } from 'react' import QueryConfig from '../../api/queries/query.config' import { fetchTracks } from '../../api/queries/tracks' -import { fetchAlbums } from '../../api/queries/album' import { useLibrarySortAndFilterContext } from './sorting-filtering' import { fetchUserPlaylists } from '../../api/queries/playlists' import { createContext, useContextSelector } from 'use-context-selector' @@ -17,12 +16,9 @@ import { export const alphabet = '#abcdefghijklmnopqrstuvwxyz'.split('') interface LibraryContext { - albumsInfiniteQuery: UseInfiniteQueryResult<(string | number | BaseItemDto)[], Error> tracksInfiniteQuery: UseInfiniteQueryResult<(string | number | BaseItemDto)[], Error> // genres: BaseItemDto[] | undefined playlistsInfiniteQuery: UseInfiniteQueryResult - - albumPageParams: RefObject } type LibraryPage = { @@ -35,8 +31,6 @@ const LibraryContextInitializer = () => { const { sortDescending, isFavorites } = useLibrarySortAndFilterContext() - const albumPageParams = useRef([]) - const tracksInfiniteQuery = useInfiniteQuery({ queryKey: [QueryKeys.AllTracks, isFavorites, sortDescending, library?.musicLibraryId], queryFn: ({ pageParam }) => @@ -59,45 +53,6 @@ const LibraryContextInitializer = () => { select: (data) => data.pages.flatMap((page) => page), }) - const albumsInfiniteQuery = useInfiniteQuery({ - queryKey: [QueryKeys.AllAlbumsAlphabetical, isFavorites, library?.musicLibraryId], - queryFn: ({ pageParam }) => - fetchAlbums( - api, - user, - library, - pageParam, - isFavorites, - [ItemSortBy.SortName], - [SortOrder.Ascending], - ), - initialPageParam: alphabet[0], - select: (data) => data.pages.flatMap((page) => [page.title, ...page.data]), - maxPages: alphabet.length, - getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) => { - console.debug(`Albums last page length: ${lastPage.data.length}`) - if (lastPageParam !== alphabet[alphabet.length - 1]) { - albumPageParams.current = [ - ...allPageParams, - alphabet[alphabet.indexOf(lastPageParam) + 1], - ] - return alphabet[alphabet.indexOf(lastPageParam) + 1] - } - - return undefined - }, - getPreviousPageParam: (firstPage, allPages, firstPageParam, allPageParams) => { - console.debug(`Albums first page: ${firstPage.title}`) - albumPageParams.current = allPageParams - if (firstPageParam !== alphabet[0]) { - albumPageParams.current = allPageParams - return alphabet[alphabet.indexOf(firstPageParam) - 1] - } - - return undefined - }, - }) - const playlistsInfiniteQuery = useInfiniteQuery({ queryKey: [QueryKeys.Playlists, library?.playlistLibraryId], queryFn: () => fetchUserPlaylists(api, user, library), @@ -110,59 +65,11 @@ const LibraryContextInitializer = () => { return { tracksInfiniteQuery, - albumsInfiniteQuery, - albumPageParams, playlistsInfiniteQuery, } } const LibraryContext = createContext({ - albumPageParams: { current: [] }, - albumsInfiniteQuery: { - data: undefined, - error: null, - isEnabled: true, - isStale: false, - isRefetching: false, - isError: false, - isLoading: true, - isPending: true, - isFetching: true, - isSuccess: false, - isFetched: false, - hasPreviousPage: false, - refetch: async () => - Promise.resolve( - {} as InfiniteQueryObserverResult<(string | number | BaseItemDto)[], Error>, - ), - fetchNextPage: async () => - Promise.resolve( - {} as InfiniteQueryObserverResult<(string | number | BaseItemDto)[], Error>, - ), - hasNextPage: false, - isFetchingNextPage: false, - isFetchPreviousPageError: false, - isFetchNextPageError: false, - isFetchingPreviousPage: false, - isLoadingError: false, - isRefetchError: false, - isPlaceholderData: false, - status: 'pending', - fetchStatus: 'idle', - dataUpdatedAt: 0, - errorUpdatedAt: 0, - failureCount: 0, - failureReason: null, - errorUpdateCount: 0, - isFetchedAfterMount: false, - isInitialLoading: false, - isPaused: false, - fetchPreviousPage: async () => - Promise.resolve( - {} as InfiniteQueryObserverResult<(string | number | BaseItemDto)[], Error>, - ), - promise: Promise.resolve([]), - }, tracksInfiniteQuery: { data: undefined, error: null, @@ -257,8 +164,6 @@ export const LibraryProvider = ({ children }: { children: React.ReactNode }) => [ context.tracksInfiniteQuery.data, context.tracksInfiniteQuery.isPending, - context.albumsInfiniteQuery.data, - context.albumsInfiniteQuery.isPending, context.playlistsInfiniteQuery.data, context.playlistsInfiniteQuery.isPending, ], @@ -268,10 +173,6 @@ export const LibraryProvider = ({ children }: { children: React.ReactNode }) => export const useTracksInfiniteQueryContext = () => useContextSelector(LibraryContext, (context) => context.tracksInfiniteQuery) -export const useAlbumsInfiniteQueryContext = () => - useContextSelector(LibraryContext, (context) => context.albumsInfiniteQuery) -export const useAlbumPageParamsContext = () => - useContextSelector(LibraryContext, (context) => context.albumPageParams) export const usePlaylistsInfiniteQueryContext = () => useContextSelector(LibraryContext, (context) => context.playlistsInfiniteQuery) diff --git a/src/screens/Discover/albums.tsx b/src/screens/Discover/albums.tsx index 53214926..10c58c47 100644 --- a/src/screens/Discover/albums.tsx +++ b/src/screens/Discover/albums.tsx @@ -2,18 +2,10 @@ import { RouteProp } from '@react-navigation/native' import Albums from '../../components/Albums/component' import DiscoverStackParamList, { RecentlyAddedProps } from './types' -export default function RecentlyAdded({ - route, -}: { - route: RouteProp -}): React.JSX.Element { +export default function RecentlyAdded({ route }: RecentlyAddedProps): React.JSX.Element { return ( ) diff --git a/src/screens/Discover/types.d.ts b/src/screens/Discover/types.d.ts index 37965e28..253aec11 100644 --- a/src/screens/Discover/types.d.ts +++ b/src/screens/Discover/types.d.ts @@ -6,12 +6,7 @@ import { UseInfiniteQueryResult } from '@tanstack/react-query' type DiscoverStackParamList = BaseStackParamList & { Discover: undefined RecentlyAdded: { - albums: BaseItemDto[] | undefined - navigation: NativeStackNavigationProp - fetchNextPage: () => void - hasNextPage: boolean - isPending: boolean - isFetchingNextPage: boolean + albumsInfiniteQuery: UseInfiniteQueryResult } PublicPlaylists: { playlists: BaseItemDto[] | undefined diff --git a/src/screens/types.d.ts b/src/screens/types.d.ts index c81c7321..8e8f3667 100644 --- a/src/screens/types.d.ts +++ b/src/screens/types.d.ts @@ -83,15 +83,6 @@ export type ContextProps = NativeStackScreenProps export type AddToPlaylistProps = NativeStackScreenProps export type AudioSpecsProps = NativeStackScreenProps -export type ArtistsProps = { - artistsInfiniteQuery: UseInfiniteQueryResult< - BaseItemDto[] | (string | number | BaseItemDto)[], - Error - > - showAlphabeticalSelector: boolean - artistPageParams?: RefObject> -} - export type GenresProps = { genres: InfiniteData | undefined fetchNextPage: (options?: FetchNextPageOptions | undefined) => void diff --git a/src/utils/query-selectors.ts b/src/utils/query-selectors.ts new file mode 100644 index 00000000..4a7a2257 --- /dev/null +++ b/src/utils/query-selectors.ts @@ -0,0 +1,44 @@ +import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto' +import { InfiniteData } from '@tanstack/react-query' +import { isString } from 'lodash' +import { RefObject } from 'react' + +export default function flattenInfiniteQueryPages( + data: InfiniteData, + pageParams: RefObject>, +) { + /** + * A flattened array of all artists derived from the infinite query + */ + const flattenedItemPages = data.pages.flatMap((page) => page) + + /** + * A set of letters we've seen so we can add them to the alphabetical selector + */ + const seenLetters = new Set() + + /** + * The final array that will be provided to and rendered by the {@link Artists} component + */ + const flashListItems: (string | number | BaseItemDto)[] = [] + + flattenedItemPages.forEach((item: BaseItemDto) => { + const rawLetter = isString(item.SortName) ? item.SortName.charAt(0).toUpperCase() : '#' + + /** + * An alpha character or a hash if the artist's name doesn't start with a letter + */ + const letter = rawLetter.match(/[A-Z]/) ? rawLetter : '#' + + if (!seenLetters.has(letter)) { + seenLetters.add(letter.toUpperCase()) + flashListItems.push(letter.toUpperCase()) + } + + flashListItems.push(item) + }) + + pageParams.current = seenLetters + + return flashListItems +} diff --git a/yarn.lock b/yarn.lock index eb4a9341..44a9eb90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1420,6 +1420,11 @@ resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.0.1.tgz#0d32f1bbfba511948ad247ab01b9007724fc9f52" integrity sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw== +"@jest/get-type@30.1.0": + version "30.1.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.1.0.tgz#4fcb4dc2ebcf0811be1c04fd1cb79c2dba431cbc" + integrity sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA== + "@jest/globals@30.0.5": version "30.0.5" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.0.5.tgz#ca70e0ac08ab40417cf8cd92bcb76116c2ccca63" @@ -1924,10 +1929,10 @@ dependencies: "@react-native-vector-icons/common" "^12.3.0" -"@react-native/assets-registry@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.81.0.tgz#ff28654b6e64164137d10de7333da05b3d994f2c" - integrity sha512-rZs8ziQ1YRV3Z5Mw5AR7YcgI3q1Ya9NIx6nyuZAT9wDSSjspSi+bww+Hargh/a4JfV2Ajcxpn9X9UiFJr1ddPw== +"@react-native/assets-registry@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.81.1.tgz#94993d165b79feeec09432f867ea2edc8a307e60" + integrity sha512-o/AeHeoiPW8x9MzxE1RSnKYc+KZMW9b7uaojobEz0G8fKgGD1R8n5CJSOiQ/0yO2fJdC5wFxMMOgy2IKwRrVgw== "@react-native/babel-plugin-codegen@0.81.0": version "0.81.0" @@ -1999,12 +2004,25 @@ nullthrows "^1.1.1" yargs "^17.6.2" -"@react-native/community-cli-plugin@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.0.tgz#16407f0eb71fd251ec08536085e4dbda83279d56" - integrity sha512-n04ACkCaLR54NmA/eWiDpjC16pHr7+yrbjQ6OEdRoXbm5EfL8FEre2kDAci7pfFdiSMpxdRULDlKpfQ+EV/GAQ== +"@react-native/codegen@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.81.1.tgz#6cbe4dbe0c85a260c1fb7dce301234f527771cd6" + integrity sha512-8KoUE1j65fF1PPHlAhSeUHmcyqpE+Z7Qv27A89vSZkz3s8eqWSRu2hZtCl0D3nSgS0WW0fyrIsFaRFj7azIiPw== dependencies: - "@react-native/dev-middleware" "0.81.0" + "@babel/core" "^7.25.2" + "@babel/parser" "^7.25.3" + glob "^7.1.1" + hermes-parser "0.29.1" + invariant "^2.2.4" + nullthrows "^1.1.1" + yargs "^17.6.2" + +"@react-native/community-cli-plugin@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.81.1.tgz#83110c7e839e9385b8ac5108f3c5600ce9db4f94" + integrity sha512-FuIpZcjBiiYcVMNx+1JBqTPLs2bUIm6X4F5enYGYcetNE2nfSMUVO8SGUtTkBdbUTfKesXYSYN8wungyro28Ag== + dependencies: + "@react-native/dev-middleware" "0.81.1" debug "^4.4.0" invariant "^2.2.4" metro "^0.83.1" @@ -2012,18 +2030,18 @@ metro-core "^0.83.1" semver "^7.1.3" -"@react-native/debugger-frontend@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.81.0.tgz#a032e98896371095919fa04b8ac93a1d1fe96f72" - integrity sha512-N/8uL2CGQfwiQRYFUNfmaYxRDSoSeOmFb56rb0PDnP3XbS5+X9ee7X4bdnukNHLGfkRdH7sVjlB8M5zE8XJOhw== +"@react-native/debugger-frontend@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.81.1.tgz#db71318e9cfe973cd731c59d2361700b8422a304" + integrity sha512-dwKv1EqKD+vONN4xsfyTXxn291CNl1LeBpaHhNGWASK1GO4qlyExMs4TtTjN57BnYHikR9PzqPWcUcfzpVRaLg== -"@react-native/dev-middleware@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.81.0.tgz#5f4018bdca027feb903cb2902d48204c0703587c" - integrity sha512-J/HeC/+VgRyGECPPr9rAbe5S0OL6MCIrvrC/kgNKSME5+ZQLCiTpt3pdAoAMXwXiF9a02Nmido0DnyM1acXTIA== +"@react-native/dev-middleware@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.81.1.tgz#3a14f416a2fc80d4f993e22bcb84ad781ac4e638" + integrity sha512-hy3KlxNOfev3O5/IuyZSstixWo7E9FhljxKGHdvVtZVNjQdM+kPMh66mxeJbB2TjdJGAyBT4DjIwBaZnIFOGHQ== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.81.0" + "@react-native/debugger-frontend" "0.81.1" chrome-launcher "^0.15.2" chromium-edge-launcher "^0.2.0" connect "^3.6.5" @@ -2057,16 +2075,21 @@ resolved "https://registry.yarnpkg.com/@react-native/eslint-plugin/-/eslint-plugin-0.81.0.tgz#5a236c92394f44f4cbfe400d7b87a7e25599dd54" integrity sha512-kNSraBk1BuW21raXRJp8+BlTJwnpU96kRNQ9YNxfcY78k9zOH2YXiYsK0SfrDrdcl5kspiXRSj3Rueh6jvDRHw== -"@react-native/gradle-plugin@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.81.0.tgz#6a9b0583f5f21142ddaeca72ef3e81160a8e3ce8" - integrity sha512-LGNtPXO1RKLws5ORRb4Q4YULi2qxM4qZRuARtwqM/1f2wyZVggqapoV0OXlaXaz+GiEd2ll3ROE4CcLN6J93jg== +"@react-native/gradle-plugin@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.81.1.tgz#a7afdc962c298acf6a99142e6db78b554aba6006" + integrity sha512-RpRxs/LbWVM9Zi5jH1qBLgTX746Ei+Ui4vj3FmUCd9EXUSECM5bJpphcsvqjxM5Vfl/o2wDLSqIoFkVP/6Te7g== "@react-native/js-polyfills@0.81.0": version "0.81.0" resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.81.0.tgz#81900a25b626e9bca8b38b545b6987695d469d59" integrity sha512-whXZWIogzoGpqdyTjqT89M6DXmlOkWqNpWoVOAwVi8XFCMO+L7WTk604okIgO6gdGZcP1YtFpQf9JusbKrv/XA== +"@react-native/js-polyfills@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.81.1.tgz#066343aca3d3aaf846335492c7114e08e9a0e975" + integrity sha512-w093OkHFfCnJKnkiFizwwjgrjh5ra53BU0ebPM3uBLkIQ6ZMNSCTZhG8ZHIlAYeIGtEinvmnSUi3JySoxuDCAQ== + "@react-native/metro-babel-transformer@0.81.0": version "0.81.0" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.81.0.tgz#f17f104f53d9976ba8a3f26c3d13dfc4f3800b54" @@ -2092,20 +2115,20 @@ resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.1.0.tgz#939b87a9849e81687d3640c5efa2a486ac266f91" integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== -"@react-native/normalize-colors@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.81.0.tgz#538db4d0b9378b73d3be009e99d44cf78c12baf7" - integrity sha512-3gEu/29uFgz+81hpUgdlOojM4rjHTIPwxpfygFNY60V6ywZih3eLDTS8kAjNZfPFHQbcYrNorJzwnL5yFF/uLw== +"@react-native/normalize-colors@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.81.1.tgz#bf290526e1bcbb8d14e20b509ca1030d5df71585" + integrity sha512-TsaeZlE8OYFy3PSWc+1VBmAzI2T3kInzqxmwXoGU4w1d4XFkQFg271Ja9GmDi9cqV3CnBfqoF9VPwRxVlc/l5g== "@react-native/typescript-config@0.81.0": version "0.81.0" resolved "https://registry.yarnpkg.com/@react-native/typescript-config/-/typescript-config-0.81.0.tgz#d25dd746ac320293cd10bb8302489ec383bdabe2" integrity sha512-BnmmXHafGitDBD5naQF1wwaJ2LY1CLMABs009tVTF4ZOPK9/IrGdoNjuiI+tjHAeug6S68MlSNyVxknZ2JBIvw== -"@react-native/virtualized-lists@0.81.0": - version "0.81.0" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.81.0.tgz#962ea39af006e58bfe898bb54c164b52075d491f" - integrity sha512-p14QC5INHkbMZ96158sUxkSwN6zp138W11G+CRGoLJY4Q9WRJBCe7wHR5Owyy3XczQXrIih/vxAXwgYeZ2XByg== +"@react-native/virtualized-lists@0.81.1": + version "0.81.1" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.81.1.tgz#b550d54a0762e85b88ba9be0b32a1675664f92ed" + integrity sha512-yG+zcMtyApW1yRwkNFvlXzEg3RIFdItuwr/zEvPCSdjaL+paX4rounpL0YX5kS9MsDIE5FXfcqINXg7L0xuwPg== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" @@ -3379,52 +3402,52 @@ resolved "https://registry.yarnpkg.com/@tamagui/z-index-stack/-/z-index-stack-1.132.23.tgz#a74f06f3b6a6191951f396105f39a10aec0144aa" integrity sha512-djbRW7FWzuc9bCIVXG00pVa6McM8/H8R4JOL+szxSy1iAo0P2k0OzWfBb+ZbbjTye068fBPGIniq4X7+3huS1Q== -"@tanstack/query-async-storage-persister@^5.85.5": - version "5.85.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-async-storage-persister/-/query-async-storage-persister-5.85.5.tgz#4e12cea74665088e9e5f70c0046e51e7b5baba0e" - integrity sha512-E1N+eMPWfV0PwTNa8tRqyOgIzFJSGvrC5hVIxNehLL/jucPvLi0QUlIG/KC4Vg6jVarONSLhONCM4dkSugEUFw== +"@tanstack/query-async-storage-persister@^5.85.6": + version "5.85.6" + resolved "https://registry.yarnpkg.com/@tanstack/query-async-storage-persister/-/query-async-storage-persister-5.85.6.tgz#a215d1a78fe23efab45b6f31d942cfe4515c5c36" + integrity sha512-f2C0tMVEo6oFdcNE1xOYGJ5KB02cIEDPjbWuqEivJfrlWDqsPlnHnfxTYkuMcddTHTClDf/sqtjuB95zggeEsQ== dependencies: - "@tanstack/query-persist-client-core" "5.85.5" + "@tanstack/query-persist-client-core" "5.85.6" -"@tanstack/query-core@5.85.5": - version "5.85.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.85.5.tgz#c4adc126bb3a927e4d60280bf3cf62210700147c" - integrity sha512-KO0WTob4JEApv69iYp1eGvfMSUkgw//IpMnq+//cORBzXf0smyRwPLrUvEe5qtAEGjwZTXrjxg+oJNP/C00t6w== +"@tanstack/query-core@5.85.6": + version "5.85.6" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.85.6.tgz#2af90f3c56c38fd2194e0ed1996122373c4bfca5" + integrity sha512-hCj0TktzdCv2bCepIdfwqVwUVWb+GSHm1Jnn8w+40lfhQ3m7lCO7ADRUJy+2unxQ/nzjh2ipC6ye69NDW3l73g== -"@tanstack/query-persist-client-core@5.85.5": - version "5.85.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-persist-client-core/-/query-persist-client-core-5.85.5.tgz#04ba995509d5e279771b37c0e0a21879476f3576" - integrity sha512-2JQiyiTVaaUu8pwPqOp6tjNa64ZN+0T9eZ3lfksV4le1VuG99fTcAYmZFIydvzwWlSM7GEF/1kpl5bwW2Y1qfQ== +"@tanstack/query-persist-client-core@5.85.6": + version "5.85.6" + resolved "https://registry.yarnpkg.com/@tanstack/query-persist-client-core/-/query-persist-client-core-5.85.6.tgz#92f9d3ac83f51b0bd452fe3b65047f4196c3f56a" + integrity sha512-wUdoEurIC0YCNZzR020Xcg3OsJeF4SXmEPqlNwZ6EaGKgWeNjU17hVdK+X4ZeirUm+h0muiEQx+aIQU1lk7roQ== dependencies: - "@tanstack/query-core" "5.85.5" + "@tanstack/query-core" "5.85.6" -"@tanstack/react-query-persist-client@^5.85.5": - version "5.85.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.85.5.tgz#0fa1e581b3a7564a49e097a26c69dea009b33724" - integrity sha512-KzISZPtJtWZAwH/Ln1FclaiHVwdeV04WX7wUYLe1vw7zyfcPljHeyXlmVf8nxhFm8ujMBdGQVzP2iNn6ehzjQA== +"@tanstack/react-query-persist-client@^5.85.6": + version "5.85.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.85.6.tgz#40c59526f55dc4ee5ac8ddb5bc777e27e2256627" + integrity sha512-zLUfm8JlI6/s0AqvX5l5CcazdHwj5gwcv0mWYOaJJvADyFzl2wwQKqB/H4nYSeygUtrepBgPwVQKNqH9ZwlZpQ== dependencies: - "@tanstack/query-persist-client-core" "5.85.5" + "@tanstack/query-persist-client-core" "5.85.6" -"@tanstack/react-query@^5.85.5": - version "5.85.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.85.5.tgz#50a1c02b50a59f93eba8f0d91d54d39c6c534c5e" - integrity sha512-/X4EFNcnPiSs8wM2v+b6DqS5mmGeuJQvxBglmDxl6ZQb5V26ouD2SJYAcC3VjbNwqhY2zjxVD15rDA5nGbMn3A== +"@tanstack/react-query@^5.85.6": + version "5.85.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.85.6.tgz#0885cd9e02f8a5aa228f6b5dc2122d22ba597d68" + integrity sha512-VUAag4ERjh+qlmg0wNivQIVCZUrYndqYu3/wPCVZd4r0E+1IqotbeyGTc+ICroL/PqbpSaGZg02zSWYfcvxbdA== dependencies: - "@tanstack/query-core" "5.85.5" + "@tanstack/query-core" "5.85.6" "@telemetrydeck/sdk@^2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@telemetrydeck/sdk/-/sdk-2.0.4.tgz#f846151784fbc165280c74db830a91865b1381c1" integrity sha512-x4S83AqSo6wvLJ6nRYdyJEqd9qmblUdBgsTRrjH5z++b9pnf2NMc8NpVAa48KIB1pRuP/GTGzXxVYdNoie/DVg== -"@testing-library/react-native@^13.2.2": - version "13.2.2" - resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-13.2.2.tgz#8de8e6e145b8a10338f997ff7b739b79eb0b7c98" - integrity sha512-QALF+nZ4BSXBOtUs5ljLnaHKuyR+ykakYB3RYwciSrllhgZkbUjXeGkugCxrmEtQ2BUZnYVRY7AEGboMP/hucg== +"@testing-library/react-native@^13.2.3": + version "13.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-13.3.3.tgz#4bf02911c4e18075df40b5de0e029c209fb45bda" + integrity sha512-k6Mjsd9dbZgvY4Bl7P1NIpePQNi+dfYtlJ5voi9KQlynxSyQkfOgJmYGCYmw/aSgH/rUcFvG8u5gd4npzgRDyg== dependencies: - chalk "^4.1.2" - jest-matcher-utils "^30.0.2" - pretty-format "^30.0.2" + jest-matcher-utils "^30.0.5" + picocolors "^1.1.1" + pretty-format "^30.0.5" redent "^3.0.0" "@tybys/wasm-util@^0.9.0": @@ -6617,6 +6640,16 @@ jest-diff@30.0.5: chalk "^4.1.2" pretty-format "30.0.5" +jest-diff@30.1.1: + version "30.1.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.1.1.tgz#cfe8327c059178affac17d4c003e7096ad19583c" + integrity sha512-LUU2Gx8EhYxpdzTR6BmjL1ifgOAQJQELTHOiPv9KITaKjZvJ9Jmgigx01tuZ49id37LorpGc9dPBPlXTboXScw== + dependencies: + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + pretty-format "30.0.5" + jest-docblock@30.0.1: version "30.0.1" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.0.1.tgz#545ff59f2fa88996bd470dba7d3798a8421180b1" @@ -6720,7 +6753,7 @@ jest-matcher-utils@30.0.4: jest-diff "30.0.4" pretty-format "30.0.2" -jest-matcher-utils@30.0.5, jest-matcher-utils@^30.0.2: +jest-matcher-utils@30.0.5: version "30.0.5" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz#dff3334be58faea4a5e1becc228656fbbfc2467d" integrity sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ== @@ -6730,6 +6763,16 @@ jest-matcher-utils@30.0.5, jest-matcher-utils@^30.0.2: jest-diff "30.0.5" pretty-format "30.0.5" +jest-matcher-utils@^30.0.5: + version "30.1.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.1.1.tgz#e45419d966cd2e5e7d7ade6da747035c6a3b8afc" + integrity sha512-SuH2QVemK48BNTqReti6FtjsMPFsSOD/ZzRxU1TttR7RiRsRSe78d03bb4Cx6D4bQC/80Q8U4VnaaAH9FlbZ9w== + dependencies: + "@jest/get-type" "30.1.0" + chalk "^4.1.2" + jest-diff "30.1.1" + pretty-format "30.0.5" + jest-message-util@30.0.2: version "30.0.2" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.0.2.tgz#9dfdc37570d172f0ffdc42a0318036ff4008837f" @@ -7942,10 +7985,10 @@ open@^7.0.3, open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -openai@^5.12.2: - version "5.12.2" - resolved "https://registry.yarnpkg.com/openai/-/openai-5.12.2.tgz#512ab6b80eb8414837436e208f1b951442b97761" - integrity sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ== +openai@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-5.16.0.tgz#a302d4ca92954598c79c72dd199c58994708130d" + integrity sha512-hoEH8ZNvg1HXjU9mp88L/ZH8O082Z8r6FHCXGiWAzVRrEv443aI57qhch4snu07yQydj+AUAWLenAiBXhu89Tw== optionator@^0.9.3: version "0.9.4" @@ -8252,7 +8295,7 @@ pretty-format@30.0.2, pretty-format@^30.0.0: ansi-styles "^5.2.0" react-is "^18.3.1" -pretty-format@30.0.5, pretty-format@^30.0.2: +pretty-format@30.0.5, pretty-format@^30.0.5: version "30.0.5" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.0.5.tgz#e001649d472800396c1209684483e18a4d250360" integrity sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw== @@ -8594,19 +8637,19 @@ react-native-worklets@0.4.1: "@babel/preset-typescript" "^7.16.7" convert-source-map "^2.0.0" -react-native@0.81.0: - version "0.81.0" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.81.0.tgz#ebb645f3fb2fc2ffb222d2f294ca4e81e6568f15" - integrity sha512-RDWhewHGsAa5uZpwIxnJNiv5tW2y6/DrQUjEBdAHPzGMwuMTshern2s4gZaWYeRU3SQguExVddCjiss9IBhxqA== +react-native@0.81.1: + version "0.81.1" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.81.1.tgz#0825cde0cc00d569cbec7d2fa1abd38a66885250" + integrity sha512-k2QJzWc/CUOwaakmD1SXa4uJaLcwB2g2V9BauNIjgtXYYAeyFjx9jlNz/+wAEcHLg9bH5mgMdeAwzvXqjjh9Hg== dependencies: "@jest/create-cache-key-function" "^29.7.0" - "@react-native/assets-registry" "0.81.0" - "@react-native/codegen" "0.81.0" - "@react-native/community-cli-plugin" "0.81.0" - "@react-native/gradle-plugin" "0.81.0" - "@react-native/js-polyfills" "0.81.0" - "@react-native/normalize-colors" "0.81.0" - "@react-native/virtualized-lists" "0.81.0" + "@react-native/assets-registry" "0.81.1" + "@react-native/codegen" "0.81.1" + "@react-native/community-cli-plugin" "0.81.1" + "@react-native/gradle-plugin" "0.81.1" + "@react-native/js-polyfills" "0.81.1" + "@react-native/normalize-colors" "0.81.1" + "@react-native/virtualized-lists" "0.81.1" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0"