diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java deleted file mode 100644 index 6f93485889..0000000000 --- a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.brentvatne.react; - -import com.brentvatne.exoplayer.DefaultReactExoplayerConfig; -import com.brentvatne.exoplayer.ReactExoplayerConfig; -import com.brentvatne.exoplayer.ReactExoplayerViewManager; -import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.JavaScriptModule; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.uimanager.ViewManager; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class ReactVideoPackage implements ReactPackage { - - private ReactExoplayerConfig config; - - public ReactVideoPackage() { - } - - public ReactVideoPackage(ReactExoplayerConfig config) { - this.config = config; - } - - @Override - public List createNativeModules(ReactApplicationContext reactContext) { - List modules = new ArrayList(); - - modules.add(new VideoDecoderPropertiesModule(reactContext)); - modules.add(new VideoManagerModule(reactContext)); - - return modules; - } - - // Deprecated RN 0.47 - public List> createJSModules() { - return Collections.emptyList(); - } - - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - if (config == null) { - config = new DefaultReactExoplayerConfig(reactContext); - } - return Collections.singletonList(new ReactExoplayerViewManager(config)); - } -} diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoPackage.kt b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.kt new file mode 100644 index 0000000000..99aed98510 --- /dev/null +++ b/android/src/main/java/com/brentvatne/react/ReactVideoPackage.kt @@ -0,0 +1,29 @@ +package com.brentvatne.react + +import com.brentvatne.exoplayer.DefaultReactExoplayerConfig +import com.brentvatne.exoplayer.ReactExoplayerConfig +import com.brentvatne.exoplayer.ReactExoplayerViewManager +import com.facebook.react.ReactPackage +import com.facebook.react.bridge.JavaScriptModule +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.uimanager.ViewManager + +class ReactVideoPackage @JvmOverloads constructor(private var config: ReactExoplayerConfig? = null) : ReactPackage { + + override fun createNativeModules(reactContext: ReactApplicationContext): List = + listOf( + VideoDecoderPropertiesModule(reactContext), + VideoManagerModule(reactContext) + ) + + // Deprecated RN 0.47 + fun createJSModules(): List> = emptyList() + + override fun createViewManagers(reactContext: ReactApplicationContext): List> { + if (config == null) { + config = DefaultReactExoplayerConfig(reactContext) + } + return listOf(ReactExoplayerViewManager(config!!)) + } +} diff --git a/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java b/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java deleted file mode 100644 index d5f25e2fc9..0000000000 --- a/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.brentvatne.react; - -import android.annotation.SuppressLint; -import android.media.MediaCodecInfo; -import android.media.MediaCodecList; -import android.media.MediaDrm; -import android.media.MediaFormat; -import android.media.UnsupportedSchemeException; -import android.os.Build; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; - -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; - -import java.util.UUID; - -@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) -public class VideoDecoderPropertiesModule extends ReactContextBaseJavaModule { - - ReactApplicationContext reactContext; - - @NonNull - @Override - public String getName() { - return "RNVDecoderPropertiesModule"; - } - - @SuppressLint("ObsoleteSdkInt") - @ReactMethod - public void getWidevineLevel(Promise p) { - int widevineLevel = 0; - - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) { - p.resolve(widevineLevel); - return; - } - final UUID WIDEVINE_UUID = new UUID(0xEDEF8BA979D64ACEL, 0xA3C827DCD51D21EDL); - final String WIDEVINE_SECURITY_LEVEL_1 = "L1"; - final String WIDEVINE_SECURITY_LEVEL_2 = "L2"; - final String WIDEVINE_SECURITY_LEVEL_3 = "L3"; - final String SECURITY_LEVEL_PROPERTY = "securityLevel"; - - String securityProperty = null; - try { - MediaDrm mediaDrm = new MediaDrm(WIDEVINE_UUID); - securityProperty = mediaDrm.getPropertyString(SECURITY_LEVEL_PROPERTY); - } catch (UnsupportedSchemeException e) { - e.printStackTrace(); - } - if (securityProperty == null) { - p.resolve(widevineLevel); - return; - } - - switch (securityProperty) { - case WIDEVINE_SECURITY_LEVEL_1: { - widevineLevel = 1; - break; - } - case WIDEVINE_SECURITY_LEVEL_2: { - widevineLevel = 2; - break; - } - case WIDEVINE_SECURITY_LEVEL_3: { - widevineLevel = 3; - break; - } - default: { - // widevineLevel 0 - break; - } - } - p.resolve(widevineLevel); - } - - @SuppressLint("ObsoleteSdkInt") - @ReactMethod - public void isCodecSupported(String mimeType, int width, int height, Promise p) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - p.resolve("unsupported"); - return; - } - - MediaCodecList mRegularCodecs = new MediaCodecList(MediaCodecList.REGULAR_CODECS); - MediaFormat format = MediaFormat.createVideoFormat(mimeType, width, height); - String codecName = mRegularCodecs.findDecoderForFormat(format); - - if (codecName == null) { - p.resolve("unsupported"); - return; - } - - // Fallback for android < 10 - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { - p.resolve("software"); - return; - } - - boolean isHardwareAccelerated = false; - - for (MediaCodecInfo codecInfo : mRegularCodecs.getCodecInfos()) { - if (codecInfo.getName().equalsIgnoreCase(codecName)) { - isHardwareAccelerated = codecInfo.isHardwareAccelerated(); - break; - } - } - - p.resolve(isHardwareAccelerated ? "software" : "hardware"); - } - - - @ReactMethod - public void isHEVCSupported(Promise p) { - isCodecSupported("video/hevc", 1920, 1080, p); - } - - public VideoDecoderPropertiesModule(ReactApplicationContext reactContext) { - super(reactContext); - this.reactContext = reactContext; - } - -} diff --git a/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.kt b/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.kt new file mode 100644 index 0000000000..7b786f5d77 --- /dev/null +++ b/android/src/main/java/com/brentvatne/react/VideoDecoderPropertiesModule.kt @@ -0,0 +1,72 @@ +package com.brentvatne.react + +import android.media.MediaCodecList +import android.media.MediaDrm +import android.media.MediaFormat +import android.media.UnsupportedSchemeException +import android.os.Build +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import java.util.UUID + +class VideoDecoderPropertiesModule(reactContext: ReactApplicationContext?) : ReactContextBaseJavaModule(reactContext) { + override fun getName(): String = REACT_CLASS + + @ReactMethod + fun getWidevineLevel(p: Promise) { + var widevineLevel = 0 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { + p.resolve(widevineLevel) + return + } + try { + val mediaDrm = MediaDrm(WIDEVINE_UUID) + val securityProperty = mediaDrm.getPropertyString(SECURITY_LEVEL_PROPERTY) + widevineLevel = when (securityProperty) { + "L1" -> 1 + "L2" -> 2 + "L3" -> 3 + else -> 0 + } + } catch (e: UnsupportedSchemeException) { + e.printStackTrace() + } + p.resolve(widevineLevel) + } + + @ReactMethod + fun isCodecSupported(mimeType: String?, width: Int, height: Int, p: Promise) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + p.resolve("unsupported") + return + } + val mRegularCodecs = MediaCodecList(MediaCodecList.REGULAR_CODECS) + val format = MediaFormat.createVideoFormat(mimeType!!, width, height) + val codecName = mRegularCodecs.findDecoderForFormat(format) + if (codecName == null) { + p.resolve("unsupported") + return + } + + // Fallback for android < 10 + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + p.resolve("software") + return + } + val isHardwareAccelerated = mRegularCodecs.codecInfos.any { + it.name.equals(codecName, ignoreCase = true) && it.isHardwareAccelerated + } + p.resolve(if (isHardwareAccelerated) "software" else "hardware") + } + + @ReactMethod + fun isHEVCSupported(p: Promise) = isCodecSupported("video/hevc", 1920, 1080, p) + + companion object { + private val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L) + private const val SECURITY_LEVEL_PROPERTY = "securityLevel" + private const val REACT_CLASS = "RNVDecoderPropertiesModule" + } +} diff --git a/examples/FabricExample/.eslintrc.js b/examples/FabricExample/.eslintrc.js index dcf0be0865..9dd57a791b 100644 --- a/examples/FabricExample/.eslintrc.js +++ b/examples/FabricExample/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { root: true, - extends: '@react-native-community', + extends: '@react-native', parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], overrides: [ diff --git a/examples/FabricExample/.gitignore b/examples/FabricExample/.gitignore index 2423126f72..613b9bdc1e 100644 --- a/examples/FabricExample/.gitignore +++ b/examples/FabricExample/.gitignore @@ -62,3 +62,6 @@ buck-out/ # Ruby / CocoaPods /ios/Pods/ /vendor/bundle/ + +# testing +/coverage \ No newline at end of file diff --git a/examples/FabricExample/Gemfile b/examples/FabricExample/Gemfile index 5efda89f45..6a7d5c7a49 100644 --- a/examples/FabricExample/Gemfile +++ b/examples/FabricExample/Gemfile @@ -1,6 +1,7 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '2.7.5' +ruby ">= 2.6.10" -gem 'cocoapods', '~> 1.11', '>= 1.11.2' +gem 'cocoapods', '~> 1.13' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/examples/FabricExample/Gemfile.lock b/examples/FabricExample/Gemfile.lock index be0b95a462..53cd1ea0b5 100644 --- a/examples/FabricExample/Gemfile.lock +++ b/examples/FabricExample/Gemfile.lock @@ -1,26 +1,29 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.6) + CFPropertyList (3.0.7) + base64 + nkf rexml activesupport (7.0.4.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.4) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) json (>= 1.5.1) atomos (0.1.3) + base64 (0.2.0) claide (1.1.0) - cocoapods (1.12.0) + cocoapods (1.15.2) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.12.0) + cocoapods-core (= 1.15.2) cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.6.0, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) cocoapods-plugins (>= 1.0.0, < 2.0) cocoapods-search (>= 1.0.0, < 2.0) cocoapods-trunk (>= 1.6.0, < 2.0) @@ -32,8 +35,8 @@ GEM molinillo (~> 0.8.0) nap (~> 1.0) ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.21.0, < 2.0) - cocoapods-core (1.12.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) @@ -44,7 +47,7 @@ GEM public_suffix (~> 4.0) typhoeus (~> 1.0) cocoapods-deintegrate (1.0.5) - cocoapods-downloader (1.6.3) + cocoapods-downloader (2.1) cocoapods-plugins (1.0.0) nap cocoapods-search (1.0.1) @@ -57,27 +60,30 @@ GEM escape (0.0.4) ethon (0.16.0) ffi (>= 1.15.0) - ffi (1.15.5) + ffi (1.17.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) httpclient (2.8.3) i18n (1.12.0) concurrent-ruby (~> 1.0) - json (2.6.3) + json (2.7.2) minitest (5.18.0) molinillo (0.8.0) nanaimo (0.3.0) nap (1.1.0) netrc (0.11.0) + nkf (0.2.0) public_suffix (4.0.7) - rexml (3.2.5) + rexml (3.2.9) + strscan ruby-macho (2.5.1) - typhoeus (1.4.0) + strscan (3.1.0) + typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - xcodeproj (1.22.0) + xcodeproj (1.24.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) @@ -89,7 +95,8 @@ PLATFORMS ruby DEPENDENCIES - cocoapods (~> 1.11, >= 1.11.2) + activesupport (>= 6.1.7.3, < 7.1.0) + cocoapods (~> 1.13) RUBY VERSION ruby 2.7.5p203 diff --git a/examples/FabricExample/__tests__/App-test.tsx b/examples/FabricExample/__tests__/App-test.tsx index 178476699b..9eac6fbc87 100644 --- a/examples/FabricExample/__tests__/App-test.tsx +++ b/examples/FabricExample/__tests__/App-test.tsx @@ -6,6 +6,9 @@ import 'react-native'; import React from 'react'; import App from '../App'; +// Note: import explicitly to use the types shipped with jest. +import {it} from '@jest/globals'; + // Note: test renderer must be required after react-native. import renderer from 'react-test-renderer'; diff --git a/examples/FabricExample/_node-version b/examples/FabricExample/_node-version deleted file mode 100644 index b6a7d89c68..0000000000 --- a/examples/FabricExample/_node-version +++ /dev/null @@ -1 +0,0 @@ -16 diff --git a/examples/FabricExample/babel.config.js b/examples/FabricExample/babel.config.js index 51c969cf73..bd1f13f222 100644 --- a/examples/FabricExample/babel.config.js +++ b/examples/FabricExample/babel.config.js @@ -2,7 +2,7 @@ const path = require('path'); const pak = require('../../package.json'); module.exports = { - presets: ['module:metro-react-native-babel-preset'], + presets: ['module:@react-native/babel-preset'], plugins: [ [ 'module-resolver', diff --git a/examples/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj b/examples/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj index 8ef48fc2d8..26875e8c76 100644 --- a/examples/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj +++ b/examples/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj @@ -437,7 +437,7 @@ "$(inherited)", ); INFOPLIST_FILE = FabricExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -461,7 +461,7 @@ BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = FabricExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -535,7 +535,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -580,7 +580,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -592,18 +592,25 @@ ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = ( "$(inherited)", - " ", + "-Wl", + "-ld_classic", ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; }; name = Debug; }; @@ -612,7 +619,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++17"; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -653,7 +660,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 13.4; LD_RUNPATH_SEARCH_PATHS = ( /usr/lib/swift, "$(inherited)", @@ -664,18 +671,25 @@ "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; + OTHER_CFLAGS = ( + "$(inherited)", + "-DRN_FABRIC_ENABLED", + ); OTHER_CPLUSPLUSFLAGS = ( "$(OTHER_CFLAGS)", "-DFOLLY_NO_CONFIG", "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", + "-DRN_FABRIC_ENABLED", ); OTHER_LDFLAGS = ( "$(inherited)", - " ", + "-Wl", + "-ld_classic", ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/examples/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/examples/FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/examples/FabricExample/ios/FabricExample/AppDelegate.h b/examples/FabricExample/ios/FabricExample/AppDelegate.h index ef1de86a2a..5d2808256c 100644 --- a/examples/FabricExample/ios/FabricExample/AppDelegate.h +++ b/examples/FabricExample/ios/FabricExample/AppDelegate.h @@ -1,8 +1,6 @@ -#import +#import #import -@interface AppDelegate : UIResponder - -@property (nonatomic, strong) UIWindow *window; +@interface AppDelegate : RCTAppDelegate @end diff --git a/examples/FabricExample/ios/FabricExample/AppDelegate.mm b/examples/FabricExample/ios/FabricExample/AppDelegate.mm index 42eee33f92..a429e31e21 100644 --- a/examples/FabricExample/ios/FabricExample/AppDelegate.mm +++ b/examples/FabricExample/ios/FabricExample/AppDelegate.mm @@ -1,88 +1,25 @@ #import "AppDelegate.h" -#import #import -#import - -#import - -#if RCT_NEW_ARCH_ENABLED -#import -#import -#import -#import -#import -#import - -#import - -static NSString *const kRNConcurrentRoot = @"concurrentRoot"; - -@interface AppDelegate () { - RCTTurboModuleManager *_turboModuleManager; - RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; - std::shared_ptr _reactNativeConfig; - facebook::react::ContextContainer::Shared _contextContainer; -} -@end -#endif @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - RCTAppSetupPrepareApp(application, true); - - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - -#if RCT_NEW_ARCH_ENABLED - _contextContainer = std::make_shared(); - _reactNativeConfig = std::make_shared(); - _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); - _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; - bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; -#endif + self.moduleName = @"FabricExample"; + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; - NSDictionary *initProps = [self prepareInitialProps]; - UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"FabricExample", initProps, true); - - if (@available(iOS 13.0, *)) { - rootView.backgroundColor = [UIColor systemBackgroundColor]; - } else { - rootView.backgroundColor = [UIColor whiteColor]; - } - - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - return YES; -} - -/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. -/// -/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html -/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). -/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`. -- (BOOL)concurrentRootEnabled -{ - // Switch this bool to turn on and off the concurrent root - return true; + return [super application:application didFinishLaunchingWithOptions:launchOptions]; } -- (NSDictionary *)prepareInitialProps +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { - NSMutableDictionary *initProps = [NSMutableDictionary new]; - -#ifdef RCT_NEW_ARCH_ENABLED - initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); -#endif - - return initProps; + return [self getBundleURL]; } -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +- (NSURL *)getBundleURL { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; @@ -91,43 +28,4 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge #endif } -#if RCT_NEW_ARCH_ENABLED - -#pragma mark - RCTCxxBridgeDelegate - -- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge -{ - _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge - delegate:self - jsInvoker:bridge.jsCallInvoker]; - return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); -} - -#pragma mark RCTTurboModuleManagerDelegate - -- (Class)getModuleClassFromName:(const char *)name -{ - return RCTCoreModulesClassProvider(name); -} - -- (std::shared_ptr)getTurboModule:(const std::string &)name - jsInvoker:(std::shared_ptr)jsInvoker -{ - return nullptr; -} - -- (std::shared_ptr)getTurboModule:(const std::string &)name - initParams: - (const facebook::react::ObjCTurboModule::InitParams &)params -{ - return nullptr; -} - -- (id)getModuleInstanceFromClass:(Class)moduleClass -{ - return RCTAppSetupDefaultModuleFromClass(moduleClass); -} - -#endif - @end diff --git a/examples/FabricExample/ios/FabricExample/Info.plist b/examples/FabricExample/ios/FabricExample/Info.plist index 860ea180cb..b0cb3daca6 100644 --- a/examples/FabricExample/ios/FabricExample/Info.plist +++ b/examples/FabricExample/ios/FabricExample/Info.plist @@ -26,17 +26,13 @@ NSAppTransportSecurity - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + NSLocationWhenInUseUsageDescription - + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/examples/FabricExample/ios/Podfile b/examples/FabricExample/ios/Podfile index d39c16451c..eeaebf83d5 100644 --- a/examples/FabricExample/ios/Podfile +++ b/examples/FabricExample/ios/Podfile @@ -1,28 +1,25 @@ ENV['RCT_NEW_ARCH_ENABLED'] = "1" -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, '12.4' +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip + +platform :ios, '13.4' install! 'cocoapods', :deterministic_uuids => false target 'FabricExample' do config = use_native_modules! - # Flags change depending on the env values. - flags = get_default_flags() - use_react_native!( :path => config[:reactNativePath], - # Hermes is now enabled by default. Disable by setting this flag to false. - # Upcoming versions of React Native may rely on get_default_flags(), but - # we make it explicit here to aid in the React Native upgrade process. - :hermes_enabled => true, - :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable the next line. - :flipper_configuration => FlipperConfiguration.enabled, + # :flipper_configuration => FlipperConfiguration.enabled, # An absolute path to your application root. :app_path => "#{Pod::Config.instance.installation_root}/.." ) @@ -35,10 +32,8 @@ target 'FabricExample' do post_install do |installer| react_native_post_install( installer, - # Set `mac_catalyst_enabled` to `true` in order to apply patches - # necessary for Mac Catalyst builds + config[:reactNativePath], :mac_catalyst_enabled => false ) - __apply_Xcode_12_5_M1_post_install_workaround(installer) end end diff --git a/examples/FabricExample/ios/Podfile.lock b/examples/FabricExample/ios/Podfile.lock index cd35a33b95..882f92aabc 100644 --- a/examples/FabricExample/ios/Podfile.lock +++ b/examples/FabricExample/ios/Podfile.lock @@ -1,797 +1,1167 @@ PODS: - - boost (1.76.0) - - CocoaAsyncSocket (7.6.5) + - boost (1.83.0) - DoubleConversion (1.1.6) - - FBLazyVector (0.71.15) - - FBReactNativeSpec (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-Core (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - Flipper (0.125.0): - - Flipper-Folly (~> 2.6) - - Flipper-RSocket (~> 1.4) - - Flipper-Boost-iOSX (1.76.0.1.11) - - Flipper-DoubleConversion (3.2.0.1) - - Flipper-Fmt (7.1.7) - - Flipper-Folly (2.6.10): - - Flipper-Boost-iOSX - - Flipper-DoubleConversion - - Flipper-Fmt (= 7.1.7) - - Flipper-Glog - - libevent (~> 2.1.12) - - OpenSSL-Universal (= 1.1.1100) - - Flipper-Glog (0.5.0.5) - - Flipper-PeerTalk (0.0.4) - - Flipper-RSocket (1.4.3): - - Flipper-Folly (~> 2.6) - - FlipperKit (0.125.0): - - FlipperKit/Core (= 0.125.0) - - FlipperKit/Core (0.125.0): - - Flipper (~> 0.125.0) - - FlipperKit/CppBridge - - FlipperKit/FBCxxFollyDynamicConvert - - FlipperKit/FBDefines - - FlipperKit/FKPortForwarding - - SocketRocket (~> 0.6.0) - - FlipperKit/CppBridge (0.125.0): - - Flipper (~> 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (0.125.0): - - Flipper-Folly (~> 2.6) - - FlipperKit/FBDefines (0.125.0) - - FlipperKit/FKPortForwarding (0.125.0): - - CocoaAsyncSocket (~> 7.6) - - Flipper-PeerTalk (~> 0.0.4) - - FlipperKit/FlipperKitHighlightOverlay (0.125.0) - - FlipperKit/FlipperKitLayoutHelpers (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutTextSearchable - - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutHelpers - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutHelpers - - FlipperKit/FlipperKitLayoutIOSDescriptors - - FlipperKit/FlipperKitLayoutTextSearchable - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitReactPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/SKIOSNetworkPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitNetworkPlugin + - FBLazyVector (0.73.2) - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.71.15): - - hermes-engine/Pre-built (= 0.71.15) - - hermes-engine/Pre-built (0.71.15) + - hermes-engine (0.73.2): + - hermes-engine/Pre-built (= 0.73.2) + - hermes-engine/Pre-built (0.73.2) - libevent (2.1.12) - - OpenSSL-Universal (1.1.1100) - - PromisesObjC (2.2.0) - - PromisesSwift (2.2.0): - - PromisesObjC (= 2.2.0) - - RCT-Folly (2021.07.22.00): + - RCT-Folly (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Default (= 2021.07.22.00) - - RCT-Folly/Default (2021.07.22.00): + - RCT-Folly/Default (= 2022.05.16.00) + - RCT-Folly/Default (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Fabric (2021.07.22.00): + - RCT-Folly/Fabric (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Futures (2021.07.22.00): + - RCT-Folly/Futures (2022.05.16.00): - boost - DoubleConversion - fmt (~> 6.2.1) - glog - libevent - - RCTRequired (0.71.15) - - RCTTypeSafety (0.71.15): - - FBLazyVector (= 0.71.15) - - RCTRequired (= 0.71.15) - - React-Core (= 0.71.15) - - React (0.71.15): - - React-Core (= 0.71.15) - - React-Core/DevSupport (= 0.71.15) - - React-Core/RCTWebSocket (= 0.71.15) - - React-RCTActionSheet (= 0.71.15) - - React-RCTAnimation (= 0.71.15) - - React-RCTBlob (= 0.71.15) - - React-RCTImage (= 0.71.15) - - React-RCTLinking (= 0.71.15) - - React-RCTNetwork (= 0.71.15) - - React-RCTSettings (= 0.71.15) - - React-RCTText (= 0.71.15) - - React-RCTVibration (= 0.71.15) - - React-callinvoker (0.71.15) - - React-Codegen (0.71.15): - - FBReactNativeSpec + - RCTRequired (0.73.2) + - RCTTypeSafety (0.73.2): + - FBLazyVector (= 0.73.2) + - RCTRequired (= 0.73.2) + - React-Core (= 0.73.2) + - React (0.73.2): + - React-Core (= 0.73.2) + - React-Core/DevSupport (= 0.73.2) + - React-Core/RCTWebSocket (= 0.73.2) + - React-RCTActionSheet (= 0.73.2) + - React-RCTAnimation (= 0.73.2) + - React-RCTBlob (= 0.73.2) + - React-RCTImage (= 0.73.2) + - React-RCTLinking (= 0.73.2) + - React-RCTNetwork (= 0.73.2) + - React-RCTSettings (= 0.73.2) + - React-RCTText (= 0.73.2) + - React-RCTVibration (= 0.73.2) + - React-callinvoker (0.73.2) + - React-Codegen (0.73.2): + - DoubleConversion + - glog - hermes-engine - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-debug + - React-Fabric + - React-FabricImage - React-graphics - React-jsi - React-jsiexecutor - - React-rncore + - React-NativeModulesApple + - React-rendererdebug + - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-Core (0.71.15): + - React-Core (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.15) - - React-cxxreact (= 0.71.15) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.2) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/CoreModulesHeaders (0.71.15): + - React-Core/CoreModulesHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/Default (0.71.15): + - React-Core/Default (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.15) + - RCT-Folly (= 2022.05.16.00) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/DevSupport (0.71.15): + - React-Core/DevSupport (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.15) - - React-Core/RCTWebSocket (= 0.71.15) - - React-cxxreact (= 0.71.15) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.2) + - React-Core/RCTWebSocket (= 0.73.2) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-jsinspector (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-jsinspector (= 0.73.2) + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.71.15): + - React-Core/RCTActionSheetHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTAnimationHeaders (0.71.15): + - React-Core/RCTAnimationHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTBlobHeaders (0.71.15): + - React-Core/RCTBlobHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTImageHeaders (0.71.15): + - React-Core/RCTImageHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTLinkingHeaders (0.71.15): + - React-Core/RCTLinkingHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTNetworkHeaders (0.71.15): + - React-Core/RCTNetworkHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTSettingsHeaders (0.71.15): + - React-Core/RCTSettingsHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTTextHeaders (0.71.15): + - React-Core/RCTTextHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTVibrationHeaders (0.71.15): + - React-Core/RCTVibrationHeaders (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) + - RCT-Folly (= 2022.05.16.00) - React-Core/Default - - React-cxxreact (= 0.71.15) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-Core/RCTWebSocket (0.71.15): + - React-Core/RCTWebSocket (0.73.2): - glog - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.15) - - React-cxxreact (= 0.71.15) + - RCT-Folly (= 2022.05.16.00) + - React-Core/Default (= 0.73.2) + - React-cxxreact - React-hermes - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-perflogger (= 0.71.15) + - React-jsi + - React-jsiexecutor + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.6.1) - Yoga - - React-CoreModules (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.15) - - React-Codegen (= 0.71.15) - - React-Core/CoreModulesHeaders (= 0.71.15) - - React-jsi (= 0.71.15) + - React-CoreModules (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety (= 0.73.2) + - React-Codegen + - React-Core/CoreModulesHeaders (= 0.73.2) + - React-jsi (= 0.73.2) + - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-cxxreact (0.71.15): - - boost (= 1.76.0) - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsinspector (= 0.71.15) - - React-logger (= 0.71.15) - - React-perflogger (= 0.71.15) - - React-runtimeexecutor (= 0.71.15) - - React-Fabric (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-Fabric/animations (= 0.71.15) - - React-Fabric/attributedstring (= 0.71.15) - - React-Fabric/butter (= 0.71.15) - - React-Fabric/componentregistry (= 0.71.15) - - React-Fabric/componentregistrynative (= 0.71.15) - - React-Fabric/components (= 0.71.15) - - React-Fabric/config (= 0.71.15) - - React-Fabric/core (= 0.71.15) - - React-Fabric/debug_core (= 0.71.15) - - React-Fabric/debug_renderer (= 0.71.15) - - React-Fabric/imagemanager (= 0.71.15) - - React-Fabric/leakchecker (= 0.71.15) - - React-Fabric/mapbuffer (= 0.71.15) - - React-Fabric/mounting (= 0.71.15) - - React-Fabric/runtimescheduler (= 0.71.15) - - React-Fabric/scheduler (= 0.71.15) - - React-Fabric/telemetry (= 0.71.15) - - React-Fabric/templateprocessor (= 0.71.15) - - React-Fabric/textlayoutmanager (= 0.71.15) - - React-Fabric/uimanager (= 0.71.15) - - React-Fabric/utils (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/animations (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/attributedstring (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/butter (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/componentregistry (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/componentregistrynative (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-Fabric/components/activityindicator (= 0.71.15) - - React-Fabric/components/image (= 0.71.15) - - React-Fabric/components/inputaccessory (= 0.71.15) - - React-Fabric/components/legacyviewmanagerinterop (= 0.71.15) - - React-Fabric/components/modal (= 0.71.15) - - React-Fabric/components/root (= 0.71.15) - - React-Fabric/components/safeareaview (= 0.71.15) - - React-Fabric/components/scrollview (= 0.71.15) - - React-Fabric/components/slider (= 0.71.15) - - React-Fabric/components/text (= 0.71.15) - - React-Fabric/components/textinput (= 0.71.15) - - React-Fabric/components/unimplementedview (= 0.71.15) - - React-Fabric/components/view (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/activityindicator (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/image (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/inputaccessory (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/legacyviewmanagerinterop (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/modal (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/root (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/safeareaview (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/scrollview (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/slider (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/text (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/textinput (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/unimplementedview (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/components/view (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) + - React-RCTImage (= 0.73.2) + - ReactCommon + - SocketRocket (= 0.6.1) + - React-cxxreact (0.73.2): + - boost (= 1.83.0) + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.2) + - React-debug (= 0.73.2) + - React-jsi (= 0.73.2) + - React-jsinspector (= 0.73.2) + - React-logger (= 0.73.2) + - React-perflogger (= 0.73.2) + - React-runtimeexecutor (= 0.73.2) + - React-debug (0.73.2) + - React-Fabric (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.73.2) + - React-Fabric/attributedstring (= 0.73.2) + - React-Fabric/componentregistry (= 0.73.2) + - React-Fabric/componentregistrynative (= 0.73.2) + - React-Fabric/components (= 0.73.2) + - React-Fabric/core (= 0.73.2) + - React-Fabric/imagemanager (= 0.73.2) + - React-Fabric/leakchecker (= 0.73.2) + - React-Fabric/mounting (= 0.73.2) + - React-Fabric/scheduler (= 0.73.2) + - React-Fabric/telemetry (= 0.73.2) + - React-Fabric/templateprocessor (= 0.73.2) + - React-Fabric/textlayoutmanager (= 0.73.2) + - React-Fabric/uimanager (= 0.73.2) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/inputaccessory (= 0.73.2) + - React-Fabric/components/legacyviewmanagerinterop (= 0.73.2) + - React-Fabric/components/modal (= 0.73.2) + - React-Fabric/components/rncore (= 0.73.2) + - React-Fabric/components/root (= 0.73.2) + - React-Fabric/components/safeareaview (= 0.73.2) + - React-Fabric/components/scrollview (= 0.73.2) + - React-Fabric/components/text (= 0.73.2) + - React-Fabric/components/textinput (= 0.73.2) + - React-Fabric/components/unimplementedview (= 0.73.2) + - React-Fabric/components/view (= 0.73.2) + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/inputaccessory (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/modal (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/rncore (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/safeareaview (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/scrollview (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/text (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/textinput (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/unimplementedview (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core - Yoga - - React-Fabric/config (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/core (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/debug_core (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/debug_renderer (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/imagemanager (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - React-RCTImage (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/leakchecker (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/mapbuffer (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/mounting (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/runtimescheduler (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/scheduler (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/telemetry (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/templateprocessor (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/textlayoutmanager (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) + - React-Fabric/core (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/textlayoutmanager (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug - React-Fabric/uimanager - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/uimanager (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-Fabric/utils (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - RCTRequired (= 0.71.15) - - RCTTypeSafety (= 0.71.15) - - React-graphics (= 0.71.15) - - React-jsi (= 0.71.15) - - React-jsiexecutor (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-graphics (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - React-Core/Default (= 0.71.15) - - React-hermes (0.71.15): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.71.15) - - React-jsi - - React-jsiexecutor (= 0.71.15) - - React-jsinspector (= 0.71.15) - - React-perflogger (= 0.71.15) - - React-jsi (0.71.15): - - boost (= 1.76.0) - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.71.15): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.15) - - React-jsi (= 0.71.15) - - React-perflogger (= 0.71.15) - - React-jsinspector (0.71.15) - - React-logger (0.71.15): - - glog - - react-native-video (6.0.0-beta.4): - - React-Core - - react-native-video/Video (= 6.0.0-beta.4) - - react-native-video/Video (6.0.0-beta.4): - - PromisesSwift - - React-Core - - React-perflogger (0.71.15) - - React-RCTActionSheet (0.71.15): - - React-Core/RCTActionSheetHeaders (= 0.71.15) - - React-RCTAnimation (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.15) - - React-Codegen (= 0.71.15) - - React-Core/RCTAnimationHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTAppDelegate (0.71.15): + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricImage (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - RCTRequired (= 0.73.2) + - RCTTypeSafety (= 0.73.2) + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.73.2) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-graphics (0.73.2): + - glog + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-Core/Default (= 0.73.2) + - React-utils + - React-hermes (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCT-Folly/Futures (= 2022.05.16.00) + - React-cxxreact (= 0.73.2) + - React-jsi + - React-jsiexecutor (= 0.73.2) + - React-jsinspector (= 0.73.2) + - React-perflogger (= 0.73.2) + - React-ImageManager (0.73.2): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.73.2): + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-debug + - React-jsi + - React-Mapbuffer + - React-jsi (0.73.2): + - boost (= 1.83.0) + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-jsiexecutor (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-cxxreact (= 0.73.2) + - React-jsi (= 0.73.2) + - React-perflogger (= 0.73.2) + - React-jsinspector (0.73.2) + - React-jsitracing (0.73.2): + - React-jsi + - React-logger (0.73.2): + - glog + - React-Mapbuffer (0.73.2): + - glog + - React-debug + - react-native-video (6.3.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - react-native-video/Video (= 6.3.0) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video/Video (6.3.0): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.73.2) + - React-NativeModulesApple (0.73.2): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.73.2) + - React-RCTActionSheet (0.73.2): + - React-Core/RCTActionSheetHeaders (= 0.73.2) + - React-RCTAnimation (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTAppDelegate (0.73.2): - RCT-Folly - RCTRequired - RCTTypeSafety - React-Core + - React-CoreModules + - React-debug + - React-Fabric + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCommon + - React-RCTBlob (0.73.2): + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTFabric (0.73.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-graphics + - React-ImageManager + - React-jsi + - React-nativeconfig + - React-RCTImage + - React-RCTText + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCommon + - React-RCTLinking (0.73.2): + - React-Codegen + - React-Core/RCTLinkingHeaders (= 0.73.2) + - React-jsi (= 0.73.2) + - React-NativeModulesApple + - ReactCommon + - ReactCommon/turbomodule/core (= 0.73.2) + - React-RCTNetwork (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTSettings (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - RCTTypeSafety + - React-Codegen + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-RCTText (0.73.2): + - React-Core/RCTTextHeaders (= 0.73.2) + - Yoga + - React-RCTVibration (0.73.2): + - RCT-Folly (= 2022.05.16.00) + - React-Codegen + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCommon + - React-rendererdebug (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - RCT-Folly (= 2022.05.16.00) + - React-debug + - React-rncore (0.73.2) + - React-RuntimeApple (0.73.2): + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-utils + - React-RuntimeCore (0.73.2): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-runtimeexecutor + - React-runtimescheduler + - React-runtimeexecutor (0.73.2): + - React-jsi (= 0.73.2) + - React-RuntimeHermes (0.73.2): + - hermes-engine + - RCT-Folly/Fabric (= 2022.05.16.00) + - React-jsi + - React-jsitracing + - React-nativeconfig + - React-utils + - React-runtimescheduler (0.73.2): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-jsi + - React-rendererdebug + - React-runtimeexecutor + - React-utils + - React-utils (0.73.2): + - glog + - RCT-Folly (= 2022.05.16.00) + - React-debug + - ReactCommon (0.73.2): + - React-logger (= 0.73.2) + - ReactCommon/turbomodule (= 0.73.2) + - ReactCommon/turbomodule (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.2) + - React-cxxreact (= 0.73.2) + - React-jsi (= 0.73.2) + - React-logger (= 0.73.2) + - React-perflogger (= 0.73.2) + - ReactCommon/turbomodule/bridging (= 0.73.2) + - ReactCommon/turbomodule/core (= 0.73.2) + - ReactCommon/turbomodule/bridging (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.2) + - React-cxxreact (= 0.73.2) + - React-jsi (= 0.73.2) + - React-logger (= 0.73.2) + - React-perflogger (= 0.73.2) + - ReactCommon/turbomodule/core (0.73.2): + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - React-callinvoker (= 0.73.2) + - React-cxxreact (= 0.73.2) + - React-jsi (= 0.73.2) + - React-logger (= 0.73.2) + - React-perflogger (= 0.73.2) + - RNCPicker (2.7.5): + - glog + - hermes-engine + - RCT-Folly (= 2022.05.16.00) + - RCTRequired + - RCTTypeSafety + - React-Codegen + - React-Core + - React-debug + - React-Fabric - React-graphics + - React-ImageManager + - React-NativeModulesApple - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-RCTBlob (0.71.15): - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.15) - - React-Core/RCTBlobHeaders (= 0.71.15) - - React-Core/RCTWebSocket (= 0.71.15) - - React-jsi (= 0.71.15) - - React-RCTNetwork (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTFabric (0.71.15): - - RCT-Folly/Fabric (= 2021.07.22.00) - - React-Core (= 0.71.15) - - React-Fabric (= 0.71.15) - - React-RCTImage (= 0.71.15) - - React-RCTImage (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.15) - - React-Codegen (= 0.71.15) - - React-Core/RCTImageHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - React-RCTNetwork (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTLinking (0.71.15): - - React-Codegen (= 0.71.15) - - React-Core/RCTLinkingHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTNetwork (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.15) - - React-Codegen (= 0.71.15) - - React-Core/RCTNetworkHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTSettings (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.15) - - React-Codegen (= 0.71.15) - - React-Core/RCTSettingsHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-RCTText (0.71.15): - - React-Core/RCTTextHeaders (= 0.71.15) - - React-RCTVibration (0.71.15): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.15) - - React-Core/RCTVibrationHeaders (= 0.71.15) - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/core (= 0.71.15) - - React-rncore (0.71.15) - - React-runtimeexecutor (0.71.15): - - React-jsi (= 0.71.15) - - ReactCommon/turbomodule/bridging (0.71.15): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.15) - - React-Core (= 0.71.15) - - React-cxxreact (= 0.71.15) - - React-jsi (= 0.71.15) - - React-logger (= 0.71.15) - - React-perflogger (= 0.71.15) - - ReactCommon/turbomodule/core (0.71.15): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.15) - - React-Core (= 0.71.15) - - React-cxxreact (= 0.71.15) - - React-jsi (= 0.71.15) - - React-logger (= 0.71.15) - - React-perflogger (= 0.71.15) - - SocketRocket (0.6.0) + - Yoga + - SocketRocket (0.6.1) - Yoga (1.14.0) - - YogaKit (1.18.1): - - Yoga (~> 1.14) DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - - Flipper (= 0.125.0) - - Flipper-Boost-iOSX (= 1.76.0.1.11) - - Flipper-DoubleConversion (= 3.2.0.1) - - Flipper-Fmt (= 7.1.7) - - Flipper-Folly (= 2.6.10) - - Flipper-Glog (= 0.5.0.5) - - Flipper-PeerTalk (= 0.0.4) - - Flipper-RSocket (= 1.4.3) - - FlipperKit (= 0.125.0) - - FlipperKit/Core (= 0.125.0) - - FlipperKit/CppBridge (= 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0) - - FlipperKit/FBDefines (= 0.125.0) - - FlipperKit/FKPortForwarding (= 0.125.0) - - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0) - - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0) - - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0) - - FlipperKit/FlipperKitReactPlugin (= 0.125.0) - - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - libevent (~> 2.1.12) - - OpenSSL-Universal (= 1.1.1100) - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) @@ -800,18 +1170,25 @@ DEPENDENCIES: - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - - React-Core/DevSupport (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - react-native-video (from `../../..`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) @@ -824,30 +1201,23 @@ DEPENDENCIES: - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: trunk: - - CocoaAsyncSocket - - Flipper - - Flipper-Boost-iOSX - - Flipper-DoubleConversion - - Flipper-Fmt - - Flipper-Folly - - Flipper-Glog - - Flipper-PeerTalk - - Flipper-RSocket - - FlipperKit - fmt - libevent - - OpenSSL-Universal - - PromisesObjC - - PromisesSwift - SocketRocket - - YogaKit EXTERNAL SOURCES: boost: @@ -856,12 +1226,11 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" - FBReactNativeSpec: - :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2023-11-17-RNv0.73.0-21043a3fc062be445e56a2c10ecd8be028dd9cc5 RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: @@ -880,22 +1249,38 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" React-Fabric: :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" React-graphics: :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" React-hermes: :path: "../node_modules/react-native/ReactCommon/hermes" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector" + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" React-logger: :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" react-native-video: :path: "../../.." + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-perflogger: :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: @@ -920,73 +1305,87 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" React-rncore: :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" React-runtimeexecutor: :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" ReactCommon: :path: "../node_modules/react-native/ReactCommon" + RNCPicker: + :path: "../node_modules/@react-native-picker/picker" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 7dcd2de282d72e344012f7d6564d024930a6a440 - CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 - DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - FBLazyVector: d06bbe89e3a89ee90c4deab1c84bf306ffa5ed37 - FBReactNativeSpec: 6fecc43741c2aed59c2bc6ba2c2f486014e03521 - Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 - Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c - Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 - Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b - Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 - Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 - Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 - Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 - FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 + boost: d3f49c53809116a5d38da093a8aa78bf551aed09 + DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953 + FBLazyVector: fbc4957d9aa695250b55d879c1d86f79d7e69ab4 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b - hermes-engine: 04437e4291ede4af0c76c25e7efd0eacb8fd25e5 + glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 + hermes-engine: b361c9ef5ef3cda53f66e195599b47e1f84ffa35 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef - PromisesSwift: cf9eb58666a43bbe007302226e510b16c1e10959 - RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: 4ce9da4fa2f8a134f62c70e4ab9d971b9d640f41 - RCTTypeSafety: decfec2884f0c523f799600d2b6105cdc15e13db - React: ca22a0b3f199b6acac95416ef7eb96cc84a55103 - React-callinvoker: 366d4449bc2901e89da3f30c6d203c491d060350 - React-Codegen: 6fe71a7e025aa51e73b66ebb092d59a2a7701bae - React-Core: 169395096d2c22872e22cd74e3694a4b041cce76 - React-CoreModules: 8c2a970d9fd778e6016b9297f2c2dddbe78b04ec - React-cxxreact: e61b3e92887bb8fc241326b83d667953ff732923 - React-Fabric: f4ddd27dc414581018db9cbdd362c80e77b08eca - React-graphics: 516c3bb35198e4a2531fd52ab6cfc681dad71874 - React-hermes: 476b93736605b457d1bc390336656c94460205b7 - React-jsi: 9fe8766963aa3aea90bbd477ea63255eb847d404 - React-jsiexecutor: e0cde8d57cee18097b3d2b1bf6404ad25dd8d33b - React-jsinspector: 4ade58a6a355d97a53f847543b14f4cb5033cb70 - React-logger: 56699550750c013096a11dce3bc996e7dd583835 - react-native-video: 6078b448c21630b0a2937436527ad54fd2a1fdd8 - React-perflogger: 0cc42978a483a47f3696171dac2e7033936fc82d - React-RCTActionSheet: ea922b476d24f6d40b8e02ac3228412bd3637468 - React-RCTAnimation: 7be2c148398eaa5beac950b2b5ec7102389ec3ad - React-RCTAppDelegate: dc57448e65541509565b59518e8a81e30ae69bd7 - React-RCTBlob: c1e1e53b334f36b3311c3206036c99f4e5406cdf - React-RCTFabric: 42e8e9067f73fdb2e9d12f0b09003cd49d3da139 - React-RCTImage: 4a2cd71dd8c1954cfab50e244b269d47bdcc76da - React-RCTLinking: c8ff9fe7f5741afc05894c7da4a0d2bd1458f247 - React-RCTNetwork: 93c329744baa8c04057a5a29b790618e0c2a6a68 - React-RCTSettings: bcd09cd3ee26967bdfbc8af174404b8ffabfbc3c - React-RCTText: c525eb78cfe9489f130fa69004ff081a5ae33e06 - React-RCTVibration: a97783e3645ddf852e34da2e015656e309f3a083 - React-rncore: 0fc98082b749bad91dbb7a4bca9cb53386477c81 - React-runtimeexecutor: 8f2ddd9db7874ec7de84f5c55d73aeaaf82908e2 - ReactCommon: 309d965cb51f058d07dea65bc04dcf462911f0a4 - SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: 68c9c592c3e80ec37ff28db20eedb13d84aae5df - YogaKit: f782866e155069a2cca2517aafea43200b01fd5a + RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 + RCTRequired: 9b1e7e262745fb671e33c51c1078d093bd30e322 + RCTTypeSafety: a759e3b086eccf3e2cbf2493d22f28e082f958e6 + React: 805f5dd55bbdb92c36b4914c64aaae4c97d358dc + React-callinvoker: 6a697867607c990c2c2c085296ee32cfb5e47c01 + React-Codegen: f3cb992539e5c21675f087e536d64b1f2a448655 + React-Core: 49f66fecc7695464e9b7bc7dc7cd9473d2c60584 + React-CoreModules: 710e7c557a1a8180bd1645f5b4bf79f4bd3f5417 + React-cxxreact: 345857b5e4be000c0527df78be3b41a0677a20ce + React-debug: f1637bce73342b2f6eee4982508fdfb088667a87 + React-Fabric: 4dfcff8f14d8e5a7a60b11b7862dad2a9d99c65b + React-FabricImage: 4a9e9510b7f28bbde6a743b18c0cb941a142e938 + React-graphics: dd5af9d8b1b45171fd6933e19fed522f373bcb10 + React-hermes: a52d183a5cf8ccb7020ce3df4275b89d01e6b53e + React-ImageManager: c5b7db131eff71443d7f3a8d686fd841d18befd3 + React-jserrorhandler: 97a6a12e2344c3c4fdd7ba1edefb005215c732f8 + React-jsi: a182068133f80918cd0eec77875abaf943a0b6be + React-jsiexecutor: dacd00ce8a18fc00a0ae6c25e3015a6437e5d2e8 + React-jsinspector: 03644c063fc3621c9a4e8bf263a8150909129618 + React-jsitracing: 7c77101b38fcc8fa7f198de7e1d834350a85af90 + React-logger: 66b168e2b2bee57bd8ce9e69f739d805732a5570 + React-Mapbuffer: 9ee041e1d7be96da6d76a251f92e72b711c651d6 + react-native-video: 382353af62f6cbf8002a6de8d6633769edd2af07 + React-nativeconfig: d753fbbc8cecc8ae413d615599ac378bbf6999bb + React-NativeModulesApple: 964f4eeab1b4325e8b6a799cf4444c3fd4eb0a9c + React-perflogger: 29efe63b7ef5fbaaa50ef6eaa92482f98a24b97e + React-RCTActionSheet: 69134c62aefd362027b20da01cd5d14ffd39db3f + React-RCTAnimation: 3b5a57087c7a5e727855b803d643ac1d445488f5 + React-RCTAppDelegate: cb1a9a8447ddad006f934988016390f4df472e74 + React-RCTBlob: 26ea660f2be1e6de62f2d2ad9a9c7b9bfabb786f + React-RCTFabric: bb6dbbff2f80b9489f8b2f1d2554aa040aa2e3cd + React-RCTImage: 27b27f4663df9e776d0549ed2f3536213e793f1b + React-RCTLinking: 962880ce9d0e2ea83fd182953538fc4ed757d4da + React-RCTNetwork: 73a756b44d4ad584bae13a5f1484e3ce12accac8 + React-RCTSettings: 6d7f8d807f05de3d01cfb182d14e5f400716faac + React-RCTText: 73006e95ca359595c2510c1c0114027c85a6ddd3 + React-RCTVibration: 599f427f9cbdd9c4bf38959ca020e8fef0717211 + React-rendererdebug: f2946e0a1c3b906e71555a7c4a39aa6a6c0e639b + React-rncore: 6e3139cf51cea08068f008da426821d1deaa24b9 + React-RuntimeApple: 08c29690996ed935e35054965bcfb70ebea67318 + React-RuntimeCore: 5b73f40b46d78a825cf71714e1e5044d389702d6 + React-runtimeexecutor: 2d1f64f58193f00a3ad71d3f89c2bfbfe11cf5a5 + React-RuntimeHermes: 01dcb5a4e9073496f6f981a8648843771e3f6516 + React-runtimescheduler: df8945a656356ff10f58f65a70820478bfcf33ad + React-utils: f5bc61e7ea3325c0732ae2d755f4441940163b85 + ReactCommon: 45b5d4f784e869c44a6f5a8fad5b114ca8f78c53 + RNCPicker: 6ce7e81292cec4ddf1a5eeaeec00c31206e9e134 + SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 + Yoga: e64aa65de36c0832d04e8c7bd614396c77a80047 -PODFILE CHECKSUM: 780eb8fa466e7a1ad2e9200598bc65585b637433 +PODFILE CHECKSUM: cf04724bfafa2ca6f6877a9a65072610a4b6ed7c -COCOAPODS: 1.12.0 +COCOAPODS: 1.15.2 diff --git a/examples/FabricExample/jest.config.js b/examples/FabricExample/jest.config.js new file mode 100644 index 0000000000..8130feaddf --- /dev/null +++ b/examples/FabricExample/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; \ No newline at end of file diff --git a/examples/FabricExample/metro.config.js b/examples/FabricExample/metro.config.js index 46475fb308..b5f681a802 100644 --- a/examples/FabricExample/metro.config.js +++ b/examples/FabricExample/metro.config.js @@ -2,6 +2,7 @@ const path = require('path'); const escape = require('escape-string-regexp'); const exclusionList = require('metro-config/src/defaults/exclusionList'); const pak = require('../../package.json'); +const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); const root = path.resolve(__dirname, '../../'); @@ -9,7 +10,7 @@ const modules = Object.keys({ ...pak.peerDependencies, }); -module.exports = { +const config = { projectRoot: __dirname, watchFolders: [root], @@ -37,4 +38,6 @@ module.exports = { }, }), }, -}; +} + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/examples/FabricExample/package.json b/examples/FabricExample/package.json index bbb234ad45..2fdbd92d70 100644 --- a/examples/FabricExample/package.json +++ b/examples/FabricExample/package.json @@ -11,27 +11,33 @@ "pod-install": "bundle exec npx pod-install --project-directory=ios --verbose" }, "dependencies": { + "@react-native-picker/picker": "2.7.5", "react": "18.1.0", - "react-native": "^0.71.6" + "react-native": "0.73.2" }, "devDependencies": { "@babel/core": "^7.12.9", "@babel/runtime": "^7.12.5", "@react-native-community/eslint-config": "^2.0.0", + "@react-native/babel-preset": "0.73.19", + "@react-native/eslint-config": "0.73.2", + "@react-native/metro-config": "0.73.3", + "@react-native/typescript-config": "0.73.1", "@tsconfig/react-native": "^2.0.2", "@types/jest": "^26.0.23", - "@types/react": "^18.0.21", + "@types/react": "^18.2.6", "@types/react-native": "^0.70.6", "@types/react-test-renderer": "^18.0.0", "@typescript-eslint/eslint-plugin": "^5.37.0", "@typescript-eslint/parser": "^5.37.0", - "babel-jest": "^26.6.3", + "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "^5.0.0", "eslint": "^7.32.0", - "jest": "^26.6.3", + "jest": "^29.6.3", "metro-react-native-babel-preset": "0.72.3", + "prettier": "2.8.8", "react-test-renderer": "18.1.0", - "typescript": "^4.8.3" + "typescript": "5.0.4" }, "jest": { "preset": "react-native", @@ -43,5 +49,8 @@ "json", "node" ] + }, + "engines": { + "node": ">=18" } } diff --git a/examples/FabricExample/src/MultiValueControl.tsx b/examples/FabricExample/src/MultiValueControl.tsx new file mode 100644 index 0000000000..bf58f3a96a --- /dev/null +++ b/examples/FabricExample/src/MultiValueControl.tsx @@ -0,0 +1,75 @@ +import React, {FunctionComponent} from 'react'; + +import { + StyleSheet, + Text, + TextStyle, + TouchableOpacity, + View, +} from 'react-native'; +import {ResizeMode} from 'react-native-video'; + +export type MultiValueControlPropType = number | string | ResizeMode; + +/* + * MultiValueControl displays a list clickable text view + */ + +interface MultiValueControlType { + // a list a string or number to be displayed + values: Array; + // The selected value in values + selected?: T; + // callback to press onPress + onPress: (arg: MultiValueControlPropType) => void; +} + +const MultiValueControl: FunctionComponent< + MultiValueControlType +> = ({values, selected, onPress}) => { + const selectedStyle: TextStyle = StyleSheet.flatten([ + styles.option, + {fontWeight: 'bold'}, + ]); + + const unselectedStyle: TextStyle = StyleSheet.flatten([ + styles.option, + {fontWeight: 'normal'}, + ]); + + return ( + + {values.map((value: MultiValueControlPropType) => { + const _style = value === selected ? selectedStyle : unselectedStyle; + return ( + { + onPress?.(value); + }}> + {value} + + ); + })} + + ); +}; + +const styles = StyleSheet.create({ + option: { + alignSelf: 'center', + fontSize: 11, + color: 'white', + paddingLeft: 2, + paddingRight: 2, + lineHeight: 12, + }, + container: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, +}); + +export default MultiValueControl; diff --git a/examples/FabricExample/src/ToggleControl.tsx b/examples/FabricExample/src/ToggleControl.tsx new file mode 100644 index 0000000000..fd5f83a509 --- /dev/null +++ b/examples/FabricExample/src/ToggleControl.tsx @@ -0,0 +1,73 @@ +import React from 'react'; + +import { + StyleSheet, + Text, + TextStyle, + TouchableOpacity, + View, +} from 'react-native'; + +/* + * ToggleControl displays a 2 states clickable text + */ + +interface ToggleControlType { + // boolean indicating if text is selected state + isSelected?: boolean; + // value of text when selected + selectedText?: string; + // value of text when NOT selected + unselectedText?: string; + // default text if no only one text field is needed + text?: string; + // callback called when pressing the component + onPress: () => void; +} + +const ToggleControl = ({ + isSelected, + selectedText, + unselectedText, + text, + onPress, +}: ToggleControlType) => { + const selectedStyle: TextStyle = StyleSheet.flatten([ + styles.controlOption, + {fontWeight: 'bold'}, + ]); + + const unselectedStyle: TextStyle = StyleSheet.flatten([ + styles.controlOption, + {fontWeight: 'normal'}, + ]); + + const style = isSelected ? selectedStyle : unselectedStyle; + const _text = text ? text : isSelected ? selectedText : unselectedText; + return ( + + + {_text} + + + ); +}; + +const styles = StyleSheet.create({ + controlOption: { + alignSelf: 'center', + fontSize: 11, + color: 'white', + paddingLeft: 2, + paddingRight: 2, + lineHeight: 12, + }, + resizeModeControl: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, +}); + +export default ToggleControl; diff --git a/examples/FabricExample/src/VideoPlayer.tsx b/examples/FabricExample/src/VideoPlayer.tsx index 34a4776b94..ba12f40314 100644 --- a/examples/FabricExample/src/VideoPlayer.tsx +++ b/examples/FabricExample/src/VideoPlayer.tsx @@ -1,557 +1,831 @@ 'use strict'; -import React, {Component, createRef} from 'react'; + +import React, {Component} from 'react'; import { - Alert, - GestureResponderEvent, - Platform, - StyleSheet, Text, TouchableOpacity, View, + ActivityIndicator, + ToastAndroid, + Platform, + Alert, } from 'react-native'; -import Video, {FilterType, VideoRef, ResizeMode, IgnoreSilentSwitchType, MixWithOthersType} from 'react-native-video'; - -const filterTypes = [ - FilterType.NONE, - FilterType.INVERT, - FilterType.MONOCHROME, - FilterType.POSTERIZE, - FilterType.FALSE, - FilterType.MAXIMUMCOMPONENT, - FilterType.MINIMUMCOMPONENT, - FilterType.CHROME, - FilterType.FADE, - FilterType.INSTANT, - FilterType.MONO, - FilterType.NOIR, - FilterType.PROCESS, - FilterType.TONAL, - FilterType.TRANSFER, - FilterType.SEPIA, -]; - -type SkinType = 'custom' | 'native' | 'embed' - -type State = { - rate: number, - volume: number, - muted: boolean, - resizeMode: ResizeMode, - duration: number, - currentTime: number, - controls: boolean, - paused: boolean, - skin: SkinType, - ignoreSilentSwitch: IgnoreSilentSwitchType, - mixWithOthers: MixWithOthersType, - isBuffering: boolean, - filter: FilterType, - filterEnabled: boolean, +import Video, { + AudioTrack, + OnAudioTracksData, + OnLoadData, + OnProgressData, + OnTextTracksData, + OnVideoAspectRatioData, + TextTrack, + VideoDecoderProperties, + OnBufferData, + OnAudioFocusChangedData, + OnVideoErrorData, + VideoRef, + ResizeMode, + SelectedTrack, + DRMType, + OnTextTrackDataChangedData, + TextTrackType, + ISO639_1, + OnSeekData, + OnPlaybackStateChangedData, + OnPlaybackRateChangeData, + OnVideoTracksData, + VideoTrack, + SelectedVideoTrackType, + SelectedVideoTrack, + BufferingStrategyType, + ReactVideoSource, + Drm, + TextTracks, +} from 'react-native-video'; +import ToggleControl from './ToggleControl'; +import MultiValueControl, { + MultiValueControlPropType, +} from './MultiValueControl'; +import styles from './styles'; +import AudioTrackSelector from './components/AudioTracksSelector'; +import TextTrackSelector from './components/TextTracksSelector'; +import VideoTrackSelector from './components/VideoTracksSelector'; +import Seeker from './components/Seeker'; + +type AdditionnalSourceInfo = { + textTracks: TextTracks; + adTagUrl: string; + description: string; + drm: Drm; + noView: boolean; +}; + +type SampleVideoSource = ReactVideoSource | AdditionnalSourceInfo; + +interface StateType { + rate: number; + volume: number; + muted: boolean; + resizeMode: ResizeMode; + duration: number; + currentTime: number; + videoWidth: number; + videoHeight: number; + paused: boolean; + fullscreen: true; + decoration: true; + isLoading: boolean; + audioTracks: Array; + textTracks: Array; + videoTracks: Array; + selectedAudioTrack: SelectedTrack | undefined; + selectedTextTrack: SelectedTrack | undefined; + selectedVideoTrack: SelectedVideoTrack; + srcListId: number; + loop: boolean; + showRNVControls: boolean; + useCache: boolean; + poster?: string; + showNotificationControls: boolean; + isSeeking: boolean; } -class VideoPlayer extends Component<{}, State> { - controlRef: React.RefObject; - videoRef: React.RefObject; - constructor(props: any) { - super(props); - this.onLoad = this.onLoad.bind(this); - this.onProgress = this.onProgress.bind(this); - this.onBuffer = this.onBuffer.bind(this); - this.onTouchControl = this.onTouchControl.bind(this); - this.controlRef = createRef(); - this.videoRef = createRef(); - } - state: State = { +class VideoPlayer extends Component { + state: StateType = { rate: 1, volume: 1, muted: false, resizeMode: ResizeMode.CONTAIN, duration: 0.0, currentTime: 0.0, - controls: false, - paused: true, - skin: 'custom', - ignoreSilentSwitch: IgnoreSilentSwitchType.IGNORE, - mixWithOthers: MixWithOthersType.DUCK, - isBuffering: false, - filter: FilterType.NONE, - filterEnabled: true, + videoWidth: 0, + videoHeight: 0, + paused: false, + fullscreen: true, + decoration: true, + isLoading: false, + audioTracks: [], + textTracks: [], + videoTracks: [], + selectedAudioTrack: undefined, + selectedTextTrack: undefined, + selectedVideoTrack: { + type: SelectedVideoTrackType.AUTO, + }, + srcListId: 0, + loop: false, + showRNVControls: false, + useCache: false, + poster: undefined, + showNotificationControls: false, + isSeeking: false, }; - onLoad(data: any) { - console.log('On load fired!'); - console.log(data.duration); - this.setState({duration: data.duration}); - } + // internal usage change to index if you want to select tracks by index instead of lang + textTracksSelectionBy = 'index'; + + srcAllPlatformList = [ + { + description: 'local file landscape', + uri: require('./broadchurch.mp4'), + }, + { + description: 'local file landscape cropped', + uri: require('./broadchurch.mp4'), + cropStart: 3000, + cropEnd: 10000, + }, + { + description: 'local file portrait', + uri: require('./portrait.mp4'), + metadata: { + title: 'Test Title', + subtitle: 'Test Subtitle', + artist: 'Test Artist', + description: 'Test Description', + imageUri: + 'https://pbs.twimg.com/profile_images/1498641868397191170/6qW2XkuI_400x400.png', + }, + }, + { + description: '(hls|live) red bull tv', + textTracksAllowChunklessPreparation: false, + uri: 'https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_928.m3u8', + metadata: { + title: 'Custom Title', + subtitle: 'Custom Subtitle', + artist: 'Custom Artist', + description: 'Custom Description', + imageUri: + 'https://pbs.twimg.com/profile_images/1498641868397191170/6qW2XkuI_400x400.png', + }, + }, + { + description: 'invalid URL', + uri: 'mmt://www.youtube.com', + type: 'mpd', + }, + {description: '(no url) Stopped playback', uri: undefined}, + { + description: '(no view) no View', + noView: true, + }, + { + description: 'Another live sample', + uri: 'https://live.forstreet.cl/live/livestream.m3u8', + }, + { + description: 'another bunny (can be saved)', + uri: 'https://rawgit.com/mediaelement/mediaelement-files/master/big_buck_bunny.mp4', + headers: {referer: 'www.github.com', 'User-Agent': 'react.native.video'}, + }, + { + description: 'sintel with subtitles', + uri: 'https://bitmovin-a.akamaihd.net/content/sintel/hls/playlist.m3u8', + }, + { + description: 'sintel starts at 20sec', + uri: 'https://bitmovin-a.akamaihd.net/content/sintel/hls/playlist.m3u8', + startPosition: 50000, + }, + { + description: 'BigBugBunny sideLoaded subtitles', + // sideloaded subtitles wont work for streaming like HLS on ios + // mp4 + uri: 'https://d23dyxeqlo5psv.cloudfront.net/big_buck_bunny.mp4', + textTracks: [ + { + title: 'test', + language: 'en' as ISO639_1, + type: TextTrackType.VTT, + uri: 'https://bitdash-a.akamaihd.net/content/sintel/subtitles/subtitles_en.vtt', + }, + ], + }, + ]; + + srcIosList = []; + + srcAndroidList = [ + { + description: 'Another live sample', + uri: 'https://live.forstreet.cl/live/livestream.m3u8', + }, + { + description: 'asset file', + uri: 'asset:///broadchurch.mp4', + }, + { + description: '(dash) sintel subtitles', + uri: 'https://bitmovin-a.akamaihd.net/content/sintel/sintel.mpd', + }, + { + description: '(mp4) big buck bunny', + uri: 'http://d23dyxeqlo5psv.cloudfront.net/big_buck_bunny.mp4', + }, + { + description: '(mp4|subtitles) demo with sintel Subtitles', + uri: 'http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0', + type: 'mpd', + }, + { + description: '(mp4) big buck bunny With Ads', + adTagUrl: + 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/vmap_ad_samples&sz=640x480&cust_params=sample_ar%3Dpremidpostoptimizedpodbumper&ciu_szs=300x250&gdfp_req=1&ad_rule=1&output=vmap&unviewed_position_start=1&env=vp&impl=s&cmsid=496&vid=short_onecue&correlator=', + uri: 'http://d23dyxeqlo5psv.cloudfront.net/big_buck_bunny.mp4', + }, + { + description: 'WV: Secure SD & HD (cbcs,MP4,H264)', + uri: 'https://storage.googleapis.com/wvmedia/cbcs/h264/tears/tears_aes_cbcs.mpd', + drm: { + type: DRMType.WIDEVINE, + licenseServer: + 'https://proxy.uat.widevine.com/proxy?provider=widevine_test', + }, + }, + { + description: 'Secure UHD (cenc)', + uri: 'https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears_uhd.mpd', + drm: { + type: DRMType.WIDEVINE, + licenseServer: + 'https://proxy.uat.widevine.com/proxy?provider=widevine_test', + }, + }, + { + description: 'rtsp big bug bunny', + uri: 'rtsp://rtspstream:3cfa3c36a9c00f4aa38f3cd35816b287@zephyr.rtsp.stream/movie', + type: 'rtsp', + }, + ]; + + // poster which can be displayed + samplePoster = + 'https://upload.wikimedia.org/wikipedia/commons/1/18/React_Native_Logo.png'; + + srcList: SampleVideoSource[] = this.srcAllPlatformList.concat( + Platform.OS === 'android' ? this.srcAndroidList : this.srcIosList, + ); + + video?: VideoRef; + + popupInfo = () => { + VideoDecoderProperties.getWidevineLevel().then((widevineLevel: number) => { + VideoDecoderProperties.isHEVCSupported().then((hevc: string) => { + VideoDecoderProperties.isCodecSupported('video/avc', 1920, 1080).then( + (avc: string) => { + this.toast( + true, + 'Widevine level: ' + + widevineLevel + + '\n hevc: ' + + hevc + + '\n avc: ' + + avc, + ); + }, + ); + }); + }); + }; - onProgress(data: any) { + onLoad = (data: OnLoadData) => { + this.setState({duration: data.duration, loading: false}); + this.onAudioTracks(data); + this.onTextTracks(data); + this.onVideoTracks(data); + }; + + onProgress = (data: OnProgressData) => { this.setState({currentTime: data.currentTime}); - } + }; - onBuffer({isBuffering}: {isBuffering: boolean}) { - this.setState({isBuffering}); - } + onSeek = (data: OnSeekData) => { + this.setState({isSeeking: false}); + this.setState({currentTime: data.currentTime}); + }; - onTouchControl(e: GestureResponderEvent) { - if (!this.controlRef.current || !this.videoRef.current) return; - const videoCommands = this.videoRef.current; - const touchX = e.nativeEvent.pageX; - const duration = this.state.duration; + onVideoLoadStart = () => { + console.log('onVideoLoadStart'); + this.setState({isLoading: true}); + }; - this.controlRef.current.measureInWindow((x, y, width, height) => { - const relativeX = touchX - x; - const nextTime = (relativeX / width) * duration; - videoCommands.seek(nextTime); + onAudioTracks = (data: OnAudioTracksData) => { + const selectedTrack = data.audioTracks?.find((x: AudioTrack) => { + return x.selected; }); - } - - getCurrentTimePercentage() { - if (this.state.currentTime > 0 && this.state.duration !== 0) { - return this.state.currentTime / this.state.duration; + if (selectedTrack?.index) { + this.setState({ + audioTracks: data.audioTracks, + selectedAudioTrack: { + type: SelectedVideoTrackType.INDEX, + value: selectedTrack?.index, + }, + }); } else { - return 0; + this.setState({ + audioTracks: data.audioTracks, + }); } - } + }; + + onVideoTracks = (data: OnVideoTracksData) => { + console.log('onVideoTracks', data.videoTracks); + this.setState({ + videoTracks: data.videoTracks, + }); + }; - setFilter(step: number) { - let index = filterTypes.indexOf(this.state.filter) + step; + onTextTracks = (data: OnTextTracksData) => { + const selectedTrack = data.textTracks?.find((x: TextTrack) => { + return x?.selected; + }); - if (index === filterTypes.length) { - index = 0; - } else if (index === -1) { - index = filterTypes.length - 1; + if (selectedTrack?.language) { + this.setState({ + textTracks: data.textTracks, + selectedTextTrack: + this.textTracksSelectionBy === 'index' + ? { + type: 'index', + value: selectedTrack?.index, + } + : { + type: 'language', + value: selectedTrack?.language, + }, + }); + } else { + this.setState({ + textTracks: data.textTracks, + }); } + }; + onTextTrackDataChanged = (data: OnTextTrackDataChangedData) => { + console.log(`Subtitles: ${JSON.stringify(data, null, 2)}`); + }; + + onAspectRatio = (data: OnVideoAspectRatioData) => { + console.log('onAspectRadio called ' + JSON.stringify(data)); this.setState({ - filter: filterTypes[index], + videoWidth: data.width, + videoHeight: data.height, }); + }; + + onVideoBuffer = (param: OnBufferData) => { + console.log('onVideoBuffer'); + this.setState({isLoading: param.isBuffering}); + }; + + onReadyForDisplay = () => { + console.log('onReadyForDisplay'); + this.setState({isLoading: false}); + }; + + onAudioBecomingNoisy = () => { + this.setState({paused: true}); + }; + + onAudioFocusChanged = (event: OnAudioFocusChangedData) => { + this.setState({paused: !event.hasAudioFocus}); + }; + + toast = (visible: boolean, message: string) => { + if (visible) { + if (Platform.OS === 'android') { + ToastAndroid.showWithGravityAndOffset( + message, + ToastAndroid.LONG, + ToastAndroid.BOTTOM, + 25, + 50, + ); + } else { + Alert.alert(message, message); + } + } + }; + + onError = (err: OnVideoErrorData) => { + console.log(JSON.stringify(err)); + this.toast(true, 'error: ' + JSON.stringify(err)); + }; + + onEnd = () => { + if (!this.state.loop) { + this.channelUp(); + } + }; + + onPlaybackRateChange = (data: OnPlaybackRateChangeData) => { + console.log('onPlaybackRateChange', data); + }; + + onPlaybackStateChanged = (data: OnPlaybackStateChangedData) => { + console.log('onPlaybackStateChanged', data); + }; + + toggleFullscreen() { + this.setState({fullscreen: !this.state.fullscreen}); + } + toggleControls() { + this.setState({showRNVControls: !this.state.showRNVControls}); } - renderSkinControl(skin: 'custom' | 'native' | 'embed') { - const isSelected = this.state.skin == skin; - const selectControls = skin == 'native' || skin == 'embed'; - return ( - { - this.setState({ - controls: selectControls, - skin: skin, - }); - }}> - - {skin} - - - ); + toggleDecoration() { + this.setState({decoration: !this.state.decoration}); + this.video?.setFullScreen(!this.state.decoration); } - renderRateControl(rate: number) { - const isSelected = this.state.rate == rate; + toggleShowNotificationControls() { + this.setState({ + showNotificationControls: !this.state.showNotificationControls, + }); + } - return ( - { - this.setState({rate: rate}); - }}> - - {rate}x - - - ); + goToChannel(channel: number) { + this.setState({ + srcListId: channel, + duration: 0.0, + currentTime: 0.0, + videoWidth: 0, + videoHeight: 0, + isLoading: false, + audioTracks: [], + textTracks: [], + selectedAudioTrack: undefined, + selectedTextTrack: undefined, + selectedVideoTrack: { + type: SelectedVideoTrackType.AUTO, + }, + }); } - renderResizeModeControl(resizeMode: ResizeMode) { - const isSelected = this.state.resizeMode == resizeMode; + channelUp() { + console.log('channel up'); + this.goToChannel((this.state.srcListId + 1) % this.srcList.length); + } - return ( - { - this.setState({resizeMode: resizeMode}); - }}> - - {resizeMode} - - + channelDown() { + console.log('channel down'); + this.goToChannel( + (this.state.srcListId + this.srcList.length - 1) % this.srcList.length, ); } - renderVolumeControl(volume: number) { - const isSelected = this.state.volume == volume; + videoSeek(position: number) { + this.setState({isSeeking: true}); + this.video?.seek(position); + } + renderSeekBar() { return ( - { - this.setState({volume: volume}); - }}> - - {volume * 100}% - - + this.videoSeek(prop)} + isUISeeking={this.state.isSeeking} + /> ); } - renderIgnoreSilentSwitchControl(ignoreSilentSwitch: IgnoreSilentSwitchType) { - const isSelected = this.state.ignoreSilentSwitch == ignoreSilentSwitch; + IndicatorLoadingView() { + if (this.state.isLoading) { + return ( + + ); + } else { + return ; + } + } + renderTopControl() { return ( - { - this.setState({ignoreSilentSwitch: ignoreSilentSwitch}); - }}> - - {ignoreSilentSwitch} + + + {(this.srcList[this.state.srcListId] as AdditionnalSourceInfo) + ?.description || 'local file'} - + + { + this.toggleControls(); + }}> + + {this.state.showRNVControls ? 'Hide controls' : 'Show controls'} + + + + ); } - renderMixWithOthersControl(mixWithOthers: MixWithOthersType) { - const isSelected = this.state.mixWithOthers == mixWithOthers; + onRateSelected = (value: MultiValueControlPropType) => { + this.setState({rate: value}); + }; + onVolumeSelected = (value: MultiValueControlPropType) => { + this.setState({volume: value}); + }; + onResizeModeSelected = (value: MultiValueControlPropType) => { + this.setState({resizeMode: value}); + }; - return ( - { - this.setState({mixWithOthers: mixWithOthers}); - }}> - - {mixWithOthers} - - - ); - } + onSelectedAudioTrackChange = (itemValue: string) => { + console.log('on audio value change ' + itemValue); + if (itemValue === 'none') { + this.setState({ + selectedAudioTrack: SelectedVideoTrackType.DISABLED, + }); + } else { + this.setState({ + selectedAudioTrack: { + type: SelectedVideoTrackType.INDEX, + value: itemValue, + }, + }); + } + }; + + onSelectedTextTrackChange = (itemValue: string) => { + console.log('on value change ' + itemValue); + this.setState({ + selectedTextTrack: { + type: this.textTracksSelectionBy === 'index' ? 'index' : 'language', + value: itemValue, + }, + }); + }; - renderCustomSkin() { - const flexCompleted = this.getCurrentTimePercentage() * 100; - const flexRemaining = (1 - this.getCurrentTimePercentage()) * 100; + onSelectedVideoTrackChange = (itemValue: string) => { + console.log('on value change ' + itemValue); + if (itemValue === undefined || itemValue === 'auto') { + this.setState({ + selectedVideoTrack: { + type: SelectedVideoTrackType.AUTO, + }, + }); + } else { + this.setState({ + selectedVideoTrack: { + type: SelectedVideoTrackType.INDEX, + value: itemValue, + }, + }); + } + }; + renderOverlay() { return ( - - { - this.setState({paused: !this.state.paused}); - }}> - - - - - - {this.renderSkinControl('custom')} - {this.renderSkinControl('native')} - {this.renderSkinControl('embed')} + <> + {this.IndicatorLoadingView()} + + + {this.renderTopControl()} + + + {!this.state.showRNVControls ? ( + <> + + { + this.channelDown(); + }} + text="ChDown" + /> + + + { + this.channelUp(); + }} + text="ChUp" + /> - {this.state.filterEnabled ? ( - - + + {Platform.OS === 'android' ? ( + + { + this.popupInfo(); + }} + text="decoderInfo" + /> + { + this.setState({useCache: !this.state.useCache}); + }} + selectedText="enable cache" + unselectedText="disable cache" + /> + + ) : null} + { - this.setFilter(-1); - }}> - Previous Filter - - + { + this.setState({loop: !this.state.loop}); + }} + selectedText="loop enable" + unselectedText="loop disable" + /> + { - this.setFilter(1); - }}> - Next Filter - + this.toggleFullscreen(); + }} + text="fullscreen" + /> + { + this.toggleDecoration(); + }} + text="decoration" + /> + { + this.setState({ + poster: this.state.poster ? undefined : this.samplePoster, + }); + }} + selectedText="poster" + unselectedText="no poster" + /> + { + this.toggleShowNotificationControls(); + }} + selectedText="hide notification controls" + unselectedText="show notification controls" + /> - ) : null} - - - - {this.renderRateControl(0.5)} - {this.renderRateControl(1.0)} - {this.renderRateControl(2.0)} - - - - {this.renderVolumeControl(0.5)} - {this.renderVolumeControl(1)} - {this.renderVolumeControl(1.5)} - - - - {this.renderResizeModeControl(ResizeMode.COVER)} - {this.renderResizeModeControl(ResizeMode.CONTAIN)} - {this.renderResizeModeControl(ResizeMode.STRETCH)} - - - - {Platform.OS === 'ios' ? ( - <> - - {this.renderIgnoreSilentSwitchControl(IgnoreSilentSwitchType.IGNORE)} - {this.renderIgnoreSilentSwitchControl(IgnoreSilentSwitchType.OBEY)} - - - {this.renderMixWithOthersControl(MixWithOthersType.MIX)} - {this.renderMixWithOthersControl(MixWithOthersType.DUCK)} - - - ) : null} - - - - - + {/* shall be replaced by slider */} + + {/* shall be replaced by slider */} + - + { + this.setState({muted: !this.state.muted}); + }} + text="muted" + /> + {Platform.OS === 'ios' ? ( + { + this.video + ?.save({}) + ?.then(response => { + console.log('Downloaded URI', response); + }) + .catch(error => { + console.log('error during save ', error); + }); + }} + text="save" + /> + ) : null} + + {this.renderSeekBar()} + + + + - - - + + ) : null} + ); } - renderNativeSkin() { - const videoStyle = - this.state.skin == 'embed' - ? styles.nativeVideoControls - : styles.fullScreen; - return ( - - - - - - - {this.renderSkinControl('custom')} - {this.renderSkinControl('native')} - {this.renderSkinControl('embed')} - - {this.state.filterEnabled ? ( - - { - this.setFilter(-1); - }}> - Previous Filter - - { - this.setFilter(1); - }}> - Next Filter - - - ) : null} - - - - {this.renderRateControl(0.5)} - {this.renderRateControl(1.0)} - {this.renderRateControl(2.0)} - + renderVideoView() { + const viewStyle = this.state.fullscreen + ? styles.fullScreen + : styles.halfScreen; - - {this.renderVolumeControl(0.5)} - {this.renderVolumeControl(1)} - {this.renderVolumeControl(1.5)} - + const currentSrc = this.srcList[this.state.srcListId]; + const additionnal = currentSrc as AdditionnalSourceInfo; - - {this.renderResizeModeControl(ResizeMode.COVER)} - {this.renderResizeModeControl(ResizeMode.CONTAIN)} - {this.renderResizeModeControl(ResizeMode.STRETCH)} - - - - {Platform.OS === 'ios' ? ( - <> - - {this.renderIgnoreSilentSwitchControl(IgnoreSilentSwitchType.IGNORE)} - {this.renderIgnoreSilentSwitchControl(IgnoreSilentSwitchType.OBEY)} - - - {this.renderMixWithOthersControl(MixWithOthersType.MIX)} - {this.renderMixWithOthersControl(MixWithOthersType.DUCK)} - - - ) : null} - - - + return ( + + ); } render() { - return this.state.controls - ? this.renderNativeSkin() - : this.renderCustomSkin(); + return ( + + {(this.srcList[this.state.srcListId] as AdditionnalSourceInfo)?.noView + ? null + : this.renderVideoView()} + {this.renderOverlay()} + + ); } } - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'black', - }, - fullScreen: { - position: 'absolute', - top: 0, - left: 0, - bottom: 0, - right: 0, - }, - controls: { - backgroundColor: 'transparent', - borderRadius: 5, - position: 'absolute', - bottom: 44, - left: 4, - right: 4, - }, - progress: { - flex: 1, - flexDirection: 'row', - borderRadius: 3, - overflow: 'hidden', - }, - innerProgressCompleted: { - height: 20, - backgroundColor: '#cccccc', - }, - innerProgressRemaining: { - height: 20, - backgroundColor: '#2C2C2C', - }, - generalControls: { - flex: 1, - flexDirection: 'row', - overflow: 'hidden', - paddingBottom: 10, - }, - skinControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - rateControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - volumeControl: { - flex: 1, - flexDirection: 'row', - justifyContent: 'center', - }, - resizeModeControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - ignoreSilentSwitchControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - mixWithOthersControl: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - controlOption: { - alignSelf: 'center', - fontSize: 11, - color: 'white', - paddingLeft: 2, - paddingRight: 2, - lineHeight: 12, - }, - nativeVideoControls: { - top: 184, - height: 300, - }, - trackingControls: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, -}); export default VideoPlayer; diff --git a/examples/FabricExample/src/components/AudioTracksSelector.tsx b/examples/FabricExample/src/components/AudioTracksSelector.tsx new file mode 100644 index 0000000000..41c5e748c6 --- /dev/null +++ b/examples/FabricExample/src/components/AudioTracksSelector.tsx @@ -0,0 +1,53 @@ +import {Picker} from '@react-native-picker/picker'; +import {Text} from 'react-native'; +import {AudioTrack, SelectedTrack} from 'react-native-video'; +import styles from '../styles'; +import React from 'react'; + +export interface AudioTrackSelectorType { + audioTracks: Array; + selectedAudioTrack: SelectedTrack | undefined; + onValueChange: (arg0: string) => void; +} + +const AudioTrackSelector = ({ + audioTracks, + selectedAudioTrack, + onValueChange, +}: AudioTrackSelectorType) => { + return ( + <> + AudioTrack + { + if (itemValue !== 'empty') { + console.log('on audio value change ' + itemValue); + onValueChange(`${itemValue}`); + } + }}> + {audioTracks?.length <= 0 ? ( + + ) : ( + + )} + {audioTracks.map(track => { + if (!track) { + return; + } + return ( + + ); + })} + + + ); +}; + +export default AudioTrackSelector; diff --git a/examples/FabricExample/src/components/Seeker.tsx b/examples/FabricExample/src/components/Seeker.tsx new file mode 100644 index 0000000000..a74122b0c8 --- /dev/null +++ b/examples/FabricExample/src/components/Seeker.tsx @@ -0,0 +1,154 @@ +import React, {useCallback, useEffect, useState} from 'react'; +import {PanResponder, View} from 'react-native'; +import styles from '../styles'; + +interface SeekerProps { + currentTime: number; + duration: number; + isLoading: boolean; + isUISeeking: boolean; + videoSeek: (arg0: number) => void; +} + +const Seeker = ({ + currentTime, + duration, + isLoading, + isUISeeking, + videoSeek, +}: SeekerProps) => { + const [seeking, setSeeking] = useState(false); + const [seekerPosition, setSeekerPosition] = useState(0); + const [seekerWidth, setSeekerWidth] = useState(0); + + /** + * Set the position of the seekbar's components + * (both fill and handle) according to the + * position supplied. + * + * @param {float} position position in px of seeker handle} + */ + const updateSeekerPosition = useCallback( + (position = 0) => { + if (position <= 0) { + position = 0; + } else if (position >= seekerWidth) { + position = seekerWidth; + } + setSeekerPosition(position); + }, + [seekerWidth], + ); + + /** + * Return the time that the video should be at + * based on where the seeker handle is. + * + * @return {float} time in ms based on seekerPosition. + */ + const calculateTimeFromSeekerPosition = () => { + const percent = seekerPosition / seekerWidth; + return duration * percent; + }; + + /** + * Get our seekbar responder going + */ + + const seekPanResponder = PanResponder.create({ + // Ask to be the responder. + onStartShouldSetPanResponder: (_evt, _gestureState) => true, + onMoveShouldSetPanResponder: (_evt, _gestureState) => true, + + /** + * When we start the pan tell the machine that we're + * seeking. This stops it from updating the seekbar + * position in the onProgress listener. + */ + onPanResponderGrant: (evt, _gestureState) => { + const position = evt.nativeEvent.locationX; + updateSeekerPosition(position); + setSeeking(true); + }, + + /** + * When panning, update the seekbar position, duh. + */ + onPanResponderMove: (evt, _gestureState) => { + const position = evt.nativeEvent.locationX; + updateSeekerPosition(position); + }, + + /** + * On release we update the time and seek to it in the video. + * If you seek to the end of the video we fire the + * onEnd callback + */ + onPanResponderRelease: (_evt, _gestureState) => { + const time = calculateTimeFromSeekerPosition(); + if (time >= duration && !isLoading) { + // FIXME ... + // state.paused = true; + // this.onEnd(); + } else { + videoSeek(time); + setSeeking(false); + } + }, + }); + + useEffect(() => { + if (!isLoading && !seeking && !isUISeeking) { + const percent = currentTime / duration; + const position = seekerWidth * percent; + updateSeekerPosition(position); + } + }, [ + currentTime, + duration, + isLoading, + seekerWidth, + seeking, + isUISeeking, + updateSeekerPosition, + ]); + + if (!seekPanResponder) { + return null; + } + const seekerStyle = [ + styles.seekbarFill, + { + width: seekerPosition > 0 ? seekerPosition : 0, + backgroundColor: '#FFF', + }, + ]; + + const seekerPositionStyle = [ + styles.seekbarHandle, + { + left: seekerPosition > 0 ? seekerPosition : 0, + }, + ]; + + const seekerPointerStyle = [styles.seekbarCircle, {backgroundColor: '#FFF'}]; + + return ( + + setSeekerWidth(event.nativeEvent.layout.width)} + pointerEvents={'none'}> + + + + + + + ); +}; + +export default Seeker; diff --git a/examples/FabricExample/src/components/TextTracksSelector.tsx b/examples/FabricExample/src/components/TextTracksSelector.tsx new file mode 100644 index 0000000000..84faac3dad --- /dev/null +++ b/examples/FabricExample/src/components/TextTracksSelector.tsx @@ -0,0 +1,64 @@ +import {Picker} from '@react-native-picker/picker'; +import {Text} from 'react-native'; +import {TextTrack, SelectedTrack} from 'react-native-video'; +import styles from '../styles'; +import React from 'react'; + +export interface TextTrackSelectorType { + textTracks: Array; + selectedTextTrack: SelectedTrack | undefined; + onValueChange: (arg0: string) => void; + textTracksSelectionBy: string; +} + +const TextTrackSelector = ({ + textTracks, + selectedTextTrack, + onValueChange, + textTracksSelectionBy, +}: TextTrackSelectorType) => { + return ( + <> + TextTrack + { + if (itemValue !== 'empty') { + onValueChange(itemValue); + } + }}> + {textTracks?.length <= 0 ? ( + + ) : ( + + )} + {textTracks.map(track => { + if (!track) { + return; + } + if (textTracksSelectionBy === 'index') { + return ( + + ); + } else { + return ( + + ); + } + })} + + + ); +}; + +export default TextTrackSelector; diff --git a/examples/FabricExample/src/components/VideoTracksSelector.tsx b/examples/FabricExample/src/components/VideoTracksSelector.tsx new file mode 100644 index 0000000000..568953c86d --- /dev/null +++ b/examples/FabricExample/src/components/VideoTracksSelector.tsx @@ -0,0 +1,64 @@ +import {Picker} from '@react-native-picker/picker'; +import {Text} from 'react-native'; +import { + SelectedVideoTrack, + SelectedVideoTrackType, + VideoTrack, +} from 'react-native-video'; +import styles from '../styles'; +import React from 'react'; + +export interface VideoTrackSelectorType { + videoTracks: Array; + selectedVideoTrack: SelectedVideoTrack | undefined; + onValueChange: (arg0: string) => void; +} + +const VideoTrackSelector = ({ + videoTracks, + selectedVideoTrack, + onValueChange, +}: VideoTrackSelectorType) => { + return ( + <> + VideoTrack + { + if (itemValue !== 'empty') { + onValueChange(itemValue); + } + }}> + + {videoTracks?.length <= 0 || videoTracks?.length <= 0 ? ( + + ) : ( + + )} + {videoTracks?.map(track => { + if (!track) { + return; + } + return ( + + ); + })} + + + ); +}; + +export default VideoTrackSelector; diff --git a/examples/FabricExample/src/portrait.mp4 b/examples/FabricExample/src/portrait.mp4 new file mode 100644 index 0000000000..0e4414c6f8 Binary files /dev/null and b/examples/FabricExample/src/portrait.mp4 differ diff --git a/examples/FabricExample/src/styles.tsx b/examples/FabricExample/src/styles.tsx new file mode 100644 index 0000000000..0dd7239090 --- /dev/null +++ b/examples/FabricExample/src/styles.tsx @@ -0,0 +1,167 @@ +import {StyleSheet} from 'react-native'; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'black', + }, + halfScreen: { + position: 'absolute', + top: 50, + left: 50, + bottom: 100, + right: 100, + }, + fullScreen: { + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0, + }, + bottomControls: { + backgroundColor: 'transparent', + borderRadius: 5, + position: 'absolute', + bottom: 20, + left: 20, + right: 20, + }, + leftControls: { + backgroundColor: 'transparent', + borderRadius: 5, + position: 'absolute', + top: 20, + bottom: 20, + left: 20, + }, + rightControls: { + backgroundColor: 'transparent', + borderRadius: 5, + position: 'absolute', + top: 20, + bottom: 20, + right: 20, + }, + topControls: { + backgroundColor: 'transparent', + borderRadius: 4, + position: 'absolute', + top: 20, + left: 20, + right: 20, + flex: 1, + flexDirection: 'row', + overflow: 'hidden', + paddingBottom: 10, + }, + generalControls: { + flex: 1, + flexDirection: 'row', + borderRadius: 4, + overflow: 'hidden', + paddingBottom: 10, + }, + rateControl: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + }, + volumeControl: { + flex: 1, + flexDirection: 'row', + justifyContent: 'center', + }, + resizeModeControl: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + leftRightControlOption: { + alignSelf: 'center', + fontSize: 11, + color: 'white', + padding: 10, + lineHeight: 12, + }, + controlOption: { + alignSelf: 'center', + fontSize: 11, + color: 'white', + paddingLeft: 2, + paddingRight: 2, + lineHeight: 12, + }, + pickerContainer: { + width: 100, + alignSelf: 'center', + color: 'white', + borderWidth: 1, + borderColor: 'red', + }, + IndicatorStyle: { + flex: 1, + justifyContent: 'center', + }, + seekbarContainer: { + flex: 1, + flexDirection: 'row', + borderRadius: 4, + height: 30, + }, + seekbarTrack: { + backgroundColor: '#333', + height: 1, + position: 'relative', + top: 14, + width: '100%', + }, + seekbarFill: { + backgroundColor: '#FFF', + height: 1, + width: '100%', + }, + seekbarHandle: { + position: 'absolute', + marginLeft: -7, + height: 28, + width: 28, + }, + seekbarCircle: { + borderRadius: 12, + position: 'relative', + top: 8, + left: 8, + height: 12, + width: 12, + }, + picker: { + flex: 1, + color: 'white', + flexDirection: 'row', + justifyContent: 'center', + width: 100, + height: 40, + }, + pickerItem: { + color: 'white', + width: 100, + height: 40, + }, + emptyPickerItem: { + color: 'white', + marginTop: 20, + marginLeft: 20, + flex: 1, + width: 100, + height: 40, + }, + topControlsContainer: { + paddingTop: 30, + }, +}); + +export default styles; diff --git a/examples/FabricExample/tsconfig.json b/examples/FabricExample/tsconfig.json index 4ab8fc695b..a47cb9d4b0 100644 --- a/examples/FabricExample/tsconfig.json +++ b/examples/FabricExample/tsconfig.json @@ -1,6 +1,6 @@ // prettier-ignore { - "extends": "@tsconfig/react-native/tsconfig.json", /* Recommended React Native TSConfig base */ + "extends": "@react-native/typescript-config/tsconfig.json", "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ "paths": {