Remove experimental_ and cleanup mixBlendMode experiment (#46650)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/46650

tsia

Changelog: [General] [Added] - Removed `experimental` prefix and fully released `mixBlendMode` prop

Reviewed By: joevilches

Differential Revision: D63407473

fbshipit-source-id: 892ababcfe19b82d3f4c73d3cbc13fb46b7425b6
This commit is contained in:
Jorge Cabiedes Acosta
2024-09-29 22:59:28 -07:00
committed by Facebook GitHub Bot
parent 513e9669e7
commit d2c48f3b1a
30 changed files with 91 additions and 206 deletions
@@ -125,7 +125,7 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
/**
* MixBlendMode
*/
experimental_mixBlendMode: true,
mixBlendMode: true,
/**
* Isolation
@@ -175,7 +175,7 @@ const validAttributesForNonEventProps = {
filter: {
process: require('../StyleSheet/processFilter').default,
},
experimental_mixBlendMode: true,
mixBlendMode: true,
isolation: true,
opacity: true,
elevation: true,
@@ -231,7 +231,7 @@ const validAttributesForNonEventProps = {
boxShadow: {
process: require('../StyleSheet/processBoxShadow').default,
},
experimental_mixBlendMode: true,
mixBlendMode: true,
isolation: true,
borderTopWidth: true,
@@ -794,7 +794,7 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
cursor?: CursorValue,
boxShadow?: $ReadOnlyArray<BoxShadowValue> | string,
filter?: $ReadOnlyArray<FilterFunction> | string,
experimental_mixBlendMode?: ____BlendMode_Internal,
mixBlendMode?: ____BlendMode_Internal,
experimental_backgroundImage?: $ReadOnlyArray<GradientValue> | string,
isolation?: 'auto' | 'isolate',
}>;
@@ -8108,7 +8108,7 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
cursor?: CursorValue,
boxShadow?: $ReadOnlyArray<BoxShadowValue> | string,
filter?: $ReadOnlyArray<FilterFunction> | string,
experimental_mixBlendMode?: ____BlendMode_Internal,
mixBlendMode?: ____BlendMode_Internal,
experimental_backgroundImage?: $ReadOnlyArray<GradientValue> | string,
isolation?: \\"auto\\" | \\"isolate\\",
}>;
@@ -446,7 +446,7 @@ RCT_CUSTOM_VIEW_PROPERTY(boxShadow, BoxShadowArray, RCTView)
// filtered by view configs.
}
RCT_CUSTOM_VIEW_PROPERTY(experimental_mixBlendMode, NSString *, RCTView)
RCT_CUSTOM_VIEW_PROPERTY(mixBlendMode, NSString *, RCTView)
{
// Property is only to be used in the new renderer.
// It is necessary to add it here, otherwise it gets
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<bce0548a9e58299746c75aad95a25275>>
* @generated SignedSource<<70e68165b567734a2609b77656b2c183>>
*/
/**
@@ -70,12 +70,6 @@ public object ReactNativeFeatureFlags {
@JvmStatic
public fun enableAndroidLineHeightCentering(): Boolean = accessor.enableAndroidLineHeightCentering()
/**
* Enables mix-blend-mode prop on Android.
*/
@JvmStatic
public fun enableAndroidMixBlendModeProp(): Boolean = accessor.enableAndroidMixBlendModeProp()
/**
* Use BackgroundStyleApplicator in place of other background/border drawing code
*/
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<19dca512d93d689e927ee5988a43e646>>
* @generated SignedSource<<2f8da8585f1ac040bd26953263b08392>>
*/
/**
@@ -27,7 +27,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null
private var enableAndroidLineHeightCenteringCache: Boolean? = null
private var enableAndroidMixBlendModePropCache: Boolean? = null
private var enableBackgroundStyleApplicatorCache: Boolean? = null
private var enableBridgelessArchitectureCache: Boolean? = null
private var enableCleanTextInputYogaNodeCache: Boolean? = null
@@ -138,15 +137,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
return cached
}
override fun enableAndroidMixBlendModeProp(): Boolean {
var cached = enableAndroidMixBlendModePropCache
if (cached == null) {
cached = ReactNativeFeatureFlagsCxxInterop.enableAndroidMixBlendModeProp()
enableAndroidMixBlendModePropCache = cached
}
return cached
}
override fun enableBackgroundStyleApplicator(): Boolean {
var cached = enableBackgroundStyleApplicatorCache
if (cached == null) {
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<76eebf045692e945d39a4ea27a63ae02>>
* @generated SignedSource<<4055cd2fa9070549fba3eda675e8d6f6>>
*/
/**
@@ -42,8 +42,6 @@ public object ReactNativeFeatureFlagsCxxInterop {
@DoNotStrip @JvmStatic public external fun enableAndroidLineHeightCentering(): Boolean
@DoNotStrip @JvmStatic public external fun enableAndroidMixBlendModeProp(): Boolean
@DoNotStrip @JvmStatic public external fun enableBackgroundStyleApplicator(): Boolean
@DoNotStrip @JvmStatic public external fun enableBridgelessArchitecture(): Boolean
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<8155a9c1309145fefdb19feb33c241db>>
* @generated SignedSource<<340a2b27d0a0281746e3f4b02be5e1bb>>
*/
/**
@@ -37,8 +37,6 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
override fun enableAndroidLineHeightCentering(): Boolean = false
override fun enableAndroidMixBlendModeProp(): Boolean = false
override fun enableBackgroundStyleApplicator(): Boolean = true
override fun enableBridgelessArchitecture(): Boolean = false
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<5e4e474b62996caec15bbf8af9622a0a>>
* @generated SignedSource<<bb25a0d771f0f129ab3f224640053ac3>>
*/
/**
@@ -31,7 +31,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
private var enableAlignItemsBaselineOnFabricIOSCache: Boolean? = null
private var enableAndroidLineHeightCenteringCache: Boolean? = null
private var enableAndroidMixBlendModePropCache: Boolean? = null
private var enableBackgroundStyleApplicatorCache: Boolean? = null
private var enableBridgelessArchitectureCache: Boolean? = null
private var enableCleanTextInputYogaNodeCache: Boolean? = null
@@ -149,16 +148,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
return cached
}
override fun enableAndroidMixBlendModeProp(): Boolean {
var cached = enableAndroidMixBlendModePropCache
if (cached == null) {
cached = currentProvider.enableAndroidMixBlendModeProp()
accessedFeatureFlags.add("enableAndroidMixBlendModeProp")
enableAndroidMixBlendModePropCache = cached
}
return cached
}
override fun enableBackgroundStyleApplicator(): Boolean {
var cached = enableBackgroundStyleApplicatorCache
if (cached == null) {
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<97eddbbd75ff7cfd0f1c905d72e9eafd>>
* @generated SignedSource<<509b61021c01bf47c54724bc9ba81c9c>>
*/
/**
@@ -37,8 +37,6 @@ public interface ReactNativeFeatureFlagsProvider {
@DoNotStrip public fun enableAndroidLineHeightCentering(): Boolean
@DoNotStrip public fun enableAndroidMixBlendModeProp(): Boolean
@DoNotStrip public fun enableBackgroundStyleApplicator(): Boolean
@DoNotStrip public fun enableBridgelessArchitecture(): Boolean
@@ -138,7 +138,7 @@ public object ViewProps {
public const val ON_LAYOUT: String = "onLayout"
public const val BOX_SHADOW: String = "boxShadow"
public const val FILTER: String = "filter"
public const val MIX_BLEND_MODE: String = "experimental_mixBlendMode"
public const val MIX_BLEND_MODE: String = "mixBlendMode"
public const val OUTLINE_COLOR: String = "outlineColor"
public const val OUTLINE_OFFSET: String = "outlineOffset"
public const val OUTLINE_STYLE: String = "outlineStyle"
@@ -36,7 +36,6 @@ import com.facebook.react.bridge.ReactSoftExceptionLogger;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.common.annotations.VisibleForTesting;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
import com.facebook.react.touch.OnInterceptTouchEventListener;
import com.facebook.react.touch.ReactHitSlopView;
import com.facebook.react.touch.ReactInterceptingViewGroup;
@@ -784,10 +783,6 @@ public class ReactViewGroup extends ViewGroup
}
private boolean needsIsolatedLayer() {
if (!ReactNativeFeatureFlags.enableAndroidMixBlendModeProp()) {
return false;
}
for (int i = 0; i < getChildCount(); i++) {
if (getChildAt(i).getTag(R.id.mix_blend_mode) != null) {
return true;
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<383e9749c506bc2326455ef907e06a4c>>
* @generated SignedSource<<8b39b99e91976d5bf63956e6501e180f>>
*/
/**
@@ -81,12 +81,6 @@ class ReactNativeFeatureFlagsProviderHolder
return method(javaProvider_);
}
bool enableAndroidMixBlendModeProp() override {
static const auto method =
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableAndroidMixBlendModeProp");
return method(javaProvider_);
}
bool enableBackgroundStyleApplicator() override {
static const auto method =
getReactNativeFeatureFlagsProviderJavaClass()->getMethod<jboolean()>("enableBackgroundStyleApplicator");
@@ -402,11 +396,6 @@ bool JReactNativeFeatureFlagsCxxInterop::enableAndroidLineHeightCentering(
return ReactNativeFeatureFlags::enableAndroidLineHeightCentering();
}
bool JReactNativeFeatureFlagsCxxInterop::enableAndroidMixBlendModeProp(
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
return ReactNativeFeatureFlags::enableAndroidMixBlendModeProp();
}
bool JReactNativeFeatureFlagsCxxInterop::enableBackgroundStyleApplicator(
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop> /*unused*/) {
return ReactNativeFeatureFlags::enableBackgroundStyleApplicator();
@@ -675,9 +664,6 @@ void JReactNativeFeatureFlagsCxxInterop::registerNatives() {
makeNativeMethod(
"enableAndroidLineHeightCentering",
JReactNativeFeatureFlagsCxxInterop::enableAndroidLineHeightCentering),
makeNativeMethod(
"enableAndroidMixBlendModeProp",
JReactNativeFeatureFlagsCxxInterop::enableAndroidMixBlendModeProp),
makeNativeMethod(
"enableBackgroundStyleApplicator",
JReactNativeFeatureFlagsCxxInterop::enableBackgroundStyleApplicator),
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<293ed423f770e7e0ba95b19eb5c28dc2>>
* @generated SignedSource<<896ca4611f7fa5de92279fbbf2095e3e>>
*/
/**
@@ -51,9 +51,6 @@ class JReactNativeFeatureFlagsCxxInterop
static bool enableAndroidLineHeightCentering(
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
static bool enableAndroidMixBlendModeProp(
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
static bool enableBackgroundStyleApplicator(
facebook::jni::alias_ref<JReactNativeFeatureFlagsCxxInterop>);
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<85cdb5a41317e9671cc23b2c7345c04d>>
* @generated SignedSource<<6e2b92ee7e4fb51de5286792004f649d>>
*/
/**
@@ -49,10 +49,6 @@ bool ReactNativeFeatureFlags::enableAndroidLineHeightCentering() {
return getAccessor().enableAndroidLineHeightCentering();
}
bool ReactNativeFeatureFlags::enableAndroidMixBlendModeProp() {
return getAccessor().enableAndroidMixBlendModeProp();
}
bool ReactNativeFeatureFlags::enableBackgroundStyleApplicator() {
return getAccessor().enableBackgroundStyleApplicator();
}
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<ea2c2d19e83630b549e719057cd1982e>>
* @generated SignedSource<<646023269f07d6ae792b8aad5ef2d3c1>>
*/
/**
@@ -72,11 +72,6 @@ class ReactNativeFeatureFlags {
*/
RN_EXPORT static bool enableAndroidLineHeightCentering();
/**
* Enables mix-blend-mode prop on Android.
*/
RN_EXPORT static bool enableAndroidMixBlendModeProp();
/**
* Use BackgroundStyleApplicator in place of other background/border drawing code
*/
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<daeeaa9fbbc3f9eb9d1b4164f6e8c954>>
* @generated SignedSource<<e35262c26447dec6e71e20f6a4fd8984>>
*/
/**
@@ -155,24 +155,6 @@ bool ReactNativeFeatureFlagsAccessor::enableAndroidLineHeightCentering() {
return flagValue.value();
}
bool ReactNativeFeatureFlagsAccessor::enableAndroidMixBlendModeProp() {
auto flagValue = enableAndroidMixBlendModeProp_.load();
if (!flagValue.has_value()) {
// This block is not exclusive but it is not necessary.
// If multiple threads try to initialize the feature flag, we would only
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(7, "enableAndroidMixBlendModeProp");
flagValue = currentProvider_->enableAndroidMixBlendModeProp();
enableAndroidMixBlendModeProp_ = flagValue;
}
return flagValue.value();
}
bool ReactNativeFeatureFlagsAccessor::enableBackgroundStyleApplicator() {
auto flagValue = enableBackgroundStyleApplicator_.load();
@@ -182,7 +164,7 @@ bool ReactNativeFeatureFlagsAccessor::enableBackgroundStyleApplicator() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(8, "enableBackgroundStyleApplicator");
markFlagAsAccessed(7, "enableBackgroundStyleApplicator");
flagValue = currentProvider_->enableBackgroundStyleApplicator();
enableBackgroundStyleApplicator_ = flagValue;
@@ -200,7 +182,7 @@ bool ReactNativeFeatureFlagsAccessor::enableBridgelessArchitecture() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(9, "enableBridgelessArchitecture");
markFlagAsAccessed(8, "enableBridgelessArchitecture");
flagValue = currentProvider_->enableBridgelessArchitecture();
enableBridgelessArchitecture_ = flagValue;
@@ -218,7 +200,7 @@ bool ReactNativeFeatureFlagsAccessor::enableCleanTextInputYogaNode() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(10, "enableCleanTextInputYogaNode");
markFlagAsAccessed(9, "enableCleanTextInputYogaNode");
flagValue = currentProvider_->enableCleanTextInputYogaNode();
enableCleanTextInputYogaNode_ = flagValue;
@@ -236,7 +218,7 @@ bool ReactNativeFeatureFlagsAccessor::enableDeletionOfUnmountedViews() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(11, "enableDeletionOfUnmountedViews");
markFlagAsAccessed(10, "enableDeletionOfUnmountedViews");
flagValue = currentProvider_->enableDeletionOfUnmountedViews();
enableDeletionOfUnmountedViews_ = flagValue;
@@ -254,7 +236,7 @@ bool ReactNativeFeatureFlagsAccessor::enableEagerRootViewAttachment() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(12, "enableEagerRootViewAttachment");
markFlagAsAccessed(11, "enableEagerRootViewAttachment");
flagValue = currentProvider_->enableEagerRootViewAttachment();
enableEagerRootViewAttachment_ = flagValue;
@@ -272,7 +254,7 @@ bool ReactNativeFeatureFlagsAccessor::enableEventEmitterRetentionDuringGesturesO
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(13, "enableEventEmitterRetentionDuringGesturesOnAndroid");
markFlagAsAccessed(12, "enableEventEmitterRetentionDuringGesturesOnAndroid");
flagValue = currentProvider_->enableEventEmitterRetentionDuringGesturesOnAndroid();
enableEventEmitterRetentionDuringGesturesOnAndroid_ = flagValue;
@@ -290,7 +272,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFabricLogs() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(14, "enableFabricLogs");
markFlagAsAccessed(13, "enableFabricLogs");
flagValue = currentProvider_->enableFabricLogs();
enableFabricLogs_ = flagValue;
@@ -308,7 +290,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFabricRenderer() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(15, "enableFabricRenderer");
markFlagAsAccessed(14, "enableFabricRenderer");
flagValue = currentProvider_->enableFabricRenderer();
enableFabricRenderer_ = flagValue;
@@ -326,7 +308,7 @@ bool ReactNativeFeatureFlagsAccessor::enableFabricRendererExclusively() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(16, "enableFabricRendererExclusively");
markFlagAsAccessed(15, "enableFabricRendererExclusively");
flagValue = currentProvider_->enableFabricRendererExclusively();
enableFabricRendererExclusively_ = flagValue;
@@ -344,7 +326,7 @@ bool ReactNativeFeatureFlagsAccessor::enableGranularShadowTreeStateReconciliatio
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(17, "enableGranularShadowTreeStateReconciliation");
markFlagAsAccessed(16, "enableGranularShadowTreeStateReconciliation");
flagValue = currentProvider_->enableGranularShadowTreeStateReconciliation();
enableGranularShadowTreeStateReconciliation_ = flagValue;
@@ -362,7 +344,7 @@ bool ReactNativeFeatureFlagsAccessor::enableIOSViewClipToPaddingBox() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(18, "enableIOSViewClipToPaddingBox");
markFlagAsAccessed(17, "enableIOSViewClipToPaddingBox");
flagValue = currentProvider_->enableIOSViewClipToPaddingBox();
enableIOSViewClipToPaddingBox_ = flagValue;
@@ -380,7 +362,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLayoutAnimationsOnIOS() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(19, "enableLayoutAnimationsOnIOS");
markFlagAsAccessed(18, "enableLayoutAnimationsOnIOS");
flagValue = currentProvider_->enableLayoutAnimationsOnIOS();
enableLayoutAnimationsOnIOS_ = flagValue;
@@ -398,7 +380,7 @@ bool ReactNativeFeatureFlagsAccessor::enableLongTaskAPI() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(20, "enableLongTaskAPI");
markFlagAsAccessed(19, "enableLongTaskAPI");
flagValue = currentProvider_->enableLongTaskAPI();
enableLongTaskAPI_ = flagValue;
@@ -416,7 +398,7 @@ bool ReactNativeFeatureFlagsAccessor::enableMicrotasks() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(21, "enableMicrotasks");
markFlagAsAccessed(20, "enableMicrotasks");
flagValue = currentProvider_->enableMicrotasks();
enableMicrotasks_ = flagValue;
@@ -434,7 +416,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePreciseSchedulingForPremountItemsOnA
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(22, "enablePreciseSchedulingForPremountItemsOnAndroid");
markFlagAsAccessed(21, "enablePreciseSchedulingForPremountItemsOnAndroid");
flagValue = currentProvider_->enablePreciseSchedulingForPremountItemsOnAndroid();
enablePreciseSchedulingForPremountItemsOnAndroid_ = flagValue;
@@ -452,7 +434,7 @@ bool ReactNativeFeatureFlagsAccessor::enablePropsUpdateReconciliationAndroid() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(23, "enablePropsUpdateReconciliationAndroid");
markFlagAsAccessed(22, "enablePropsUpdateReconciliationAndroid");
flagValue = currentProvider_->enablePropsUpdateReconciliationAndroid();
enablePropsUpdateReconciliationAndroid_ = flagValue;
@@ -470,7 +452,7 @@ bool ReactNativeFeatureFlagsAccessor::enableReportEventPaintTime() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(24, "enableReportEventPaintTime");
markFlagAsAccessed(23, "enableReportEventPaintTime");
flagValue = currentProvider_->enableReportEventPaintTime();
enableReportEventPaintTime_ = flagValue;
@@ -488,7 +470,7 @@ bool ReactNativeFeatureFlagsAccessor::enableSynchronousStateUpdates() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(25, "enableSynchronousStateUpdates");
markFlagAsAccessed(24, "enableSynchronousStateUpdates");
flagValue = currentProvider_->enableSynchronousStateUpdates();
enableSynchronousStateUpdates_ = flagValue;
@@ -506,7 +488,7 @@ bool ReactNativeFeatureFlagsAccessor::enableTextPreallocationOptimisation() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(26, "enableTextPreallocationOptimisation");
markFlagAsAccessed(25, "enableTextPreallocationOptimisation");
flagValue = currentProvider_->enableTextPreallocationOptimisation();
enableTextPreallocationOptimisation_ = flagValue;
@@ -524,7 +506,7 @@ bool ReactNativeFeatureFlagsAccessor::enableUIConsistency() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(27, "enableUIConsistency");
markFlagAsAccessed(26, "enableUIConsistency");
flagValue = currentProvider_->enableUIConsistency();
enableUIConsistency_ = flagValue;
@@ -542,7 +524,7 @@ bool ReactNativeFeatureFlagsAccessor::enableViewRecycling() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(28, "enableViewRecycling");
markFlagAsAccessed(27, "enableViewRecycling");
flagValue = currentProvider_->enableViewRecycling();
enableViewRecycling_ = flagValue;
@@ -560,7 +542,7 @@ bool ReactNativeFeatureFlagsAccessor::excludeYogaFromRawProps() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(29, "excludeYogaFromRawProps");
markFlagAsAccessed(28, "excludeYogaFromRawProps");
flagValue = currentProvider_->excludeYogaFromRawProps();
excludeYogaFromRawProps_ = flagValue;
@@ -578,7 +560,7 @@ bool ReactNativeFeatureFlagsAccessor::fetchImagesInViewPreallocation() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(30, "fetchImagesInViewPreallocation");
markFlagAsAccessed(29, "fetchImagesInViewPreallocation");
flagValue = currentProvider_->fetchImagesInViewPreallocation();
fetchImagesInViewPreallocation_ = flagValue;
@@ -596,7 +578,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMappingOfEventPrioritiesBetweenFabricAn
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(31, "fixMappingOfEventPrioritiesBetweenFabricAndReact");
markFlagAsAccessed(30, "fixMappingOfEventPrioritiesBetweenFabricAndReact");
flagValue = currentProvider_->fixMappingOfEventPrioritiesBetweenFabricAndReact();
fixMappingOfEventPrioritiesBetweenFabricAndReact_ = flagValue;
@@ -614,7 +596,7 @@ bool ReactNativeFeatureFlagsAccessor::fixMountingCoordinatorReportedPendingTrans
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(32, "fixMountingCoordinatorReportedPendingTransactionsOnAndroid");
markFlagAsAccessed(31, "fixMountingCoordinatorReportedPendingTransactionsOnAndroid");
flagValue = currentProvider_->fixMountingCoordinatorReportedPendingTransactionsOnAndroid();
fixMountingCoordinatorReportedPendingTransactionsOnAndroid_ = flagValue;
@@ -632,7 +614,7 @@ bool ReactNativeFeatureFlagsAccessor::forceBatchingMountItemsOnAndroid() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(33, "forceBatchingMountItemsOnAndroid");
markFlagAsAccessed(32, "forceBatchingMountItemsOnAndroid");
flagValue = currentProvider_->forceBatchingMountItemsOnAndroid();
forceBatchingMountItemsOnAndroid_ = flagValue;
@@ -650,7 +632,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledDebug() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(34, "fuseboxEnabledDebug");
markFlagAsAccessed(33, "fuseboxEnabledDebug");
flagValue = currentProvider_->fuseboxEnabledDebug();
fuseboxEnabledDebug_ = flagValue;
@@ -668,7 +650,7 @@ bool ReactNativeFeatureFlagsAccessor::fuseboxEnabledRelease() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(35, "fuseboxEnabledRelease");
markFlagAsAccessed(34, "fuseboxEnabledRelease");
flagValue = currentProvider_->fuseboxEnabledRelease();
fuseboxEnabledRelease_ = flagValue;
@@ -686,7 +668,7 @@ bool ReactNativeFeatureFlagsAccessor::initEagerTurboModulesOnNativeModulesQueueA
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(36, "initEagerTurboModulesOnNativeModulesQueueAndroid");
markFlagAsAccessed(35, "initEagerTurboModulesOnNativeModulesQueueAndroid");
flagValue = currentProvider_->initEagerTurboModulesOnNativeModulesQueueAndroid();
initEagerTurboModulesOnNativeModulesQueueAndroid_ = flagValue;
@@ -704,7 +686,7 @@ bool ReactNativeFeatureFlagsAccessor::lazyAnimationCallbacks() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(37, "lazyAnimationCallbacks");
markFlagAsAccessed(36, "lazyAnimationCallbacks");
flagValue = currentProvider_->lazyAnimationCallbacks();
lazyAnimationCallbacks_ = flagValue;
@@ -722,7 +704,7 @@ bool ReactNativeFeatureFlagsAccessor::loadVectorDrawablesOnImages() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(38, "loadVectorDrawablesOnImages");
markFlagAsAccessed(37, "loadVectorDrawablesOnImages");
flagValue = currentProvider_->loadVectorDrawablesOnImages();
loadVectorDrawablesOnImages_ = flagValue;
@@ -740,7 +722,7 @@ bool ReactNativeFeatureFlagsAccessor::removeNestedCallsToDispatchMountItemsOnAnd
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(39, "removeNestedCallsToDispatchMountItemsOnAndroid");
markFlagAsAccessed(38, "removeNestedCallsToDispatchMountItemsOnAndroid");
flagValue = currentProvider_->removeNestedCallsToDispatchMountItemsOnAndroid();
removeNestedCallsToDispatchMountItemsOnAndroid_ = flagValue;
@@ -758,7 +740,7 @@ bool ReactNativeFeatureFlagsAccessor::setAndroidLayoutDirection() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(40, "setAndroidLayoutDirection");
markFlagAsAccessed(39, "setAndroidLayoutDirection");
flagValue = currentProvider_->setAndroidLayoutDirection();
setAndroidLayoutDirection_ = flagValue;
@@ -776,7 +758,7 @@ bool ReactNativeFeatureFlagsAccessor::traceTurboModulePromiseRejectionsOnAndroid
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(41, "traceTurboModulePromiseRejectionsOnAndroid");
markFlagAsAccessed(40, "traceTurboModulePromiseRejectionsOnAndroid");
flagValue = currentProvider_->traceTurboModulePromiseRejectionsOnAndroid();
traceTurboModulePromiseRejectionsOnAndroid_ = flagValue;
@@ -794,7 +776,7 @@ bool ReactNativeFeatureFlagsAccessor::useFabricInterop() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(42, "useFabricInterop");
markFlagAsAccessed(41, "useFabricInterop");
flagValue = currentProvider_->useFabricInterop();
useFabricInterop_ = flagValue;
@@ -812,7 +794,7 @@ bool ReactNativeFeatureFlagsAccessor::useImmediateExecutorInAndroidBridgeless()
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(43, "useImmediateExecutorInAndroidBridgeless");
markFlagAsAccessed(42, "useImmediateExecutorInAndroidBridgeless");
flagValue = currentProvider_->useImmediateExecutorInAndroidBridgeless();
useImmediateExecutorInAndroidBridgeless_ = flagValue;
@@ -830,7 +812,7 @@ bool ReactNativeFeatureFlagsAccessor::useModernRuntimeScheduler() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(44, "useModernRuntimeScheduler");
markFlagAsAccessed(43, "useModernRuntimeScheduler");
flagValue = currentProvider_->useModernRuntimeScheduler();
useModernRuntimeScheduler_ = flagValue;
@@ -848,7 +830,7 @@ bool ReactNativeFeatureFlagsAccessor::useNativeViewConfigsInBridgelessMode() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(45, "useNativeViewConfigsInBridgelessMode");
markFlagAsAccessed(44, "useNativeViewConfigsInBridgelessMode");
flagValue = currentProvider_->useNativeViewConfigsInBridgelessMode();
useNativeViewConfigsInBridgelessMode_ = flagValue;
@@ -866,7 +848,7 @@ bool ReactNativeFeatureFlagsAccessor::useNewReactImageViewBackgroundDrawing() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(46, "useNewReactImageViewBackgroundDrawing");
markFlagAsAccessed(45, "useNewReactImageViewBackgroundDrawing");
flagValue = currentProvider_->useNewReactImageViewBackgroundDrawing();
useNewReactImageViewBackgroundDrawing_ = flagValue;
@@ -884,7 +866,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimisedViewPreallocationOnAndroid() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(47, "useOptimisedViewPreallocationOnAndroid");
markFlagAsAccessed(46, "useOptimisedViewPreallocationOnAndroid");
flagValue = currentProvider_->useOptimisedViewPreallocationOnAndroid();
useOptimisedViewPreallocationOnAndroid_ = flagValue;
@@ -902,7 +884,7 @@ bool ReactNativeFeatureFlagsAccessor::useOptimizedEventBatchingOnAndroid() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(48, "useOptimizedEventBatchingOnAndroid");
markFlagAsAccessed(47, "useOptimizedEventBatchingOnAndroid");
flagValue = currentProvider_->useOptimizedEventBatchingOnAndroid();
useOptimizedEventBatchingOnAndroid_ = flagValue;
@@ -920,7 +902,7 @@ bool ReactNativeFeatureFlagsAccessor::useRuntimeShadowNodeReferenceUpdate() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(49, "useRuntimeShadowNodeReferenceUpdate");
markFlagAsAccessed(48, "useRuntimeShadowNodeReferenceUpdate");
flagValue = currentProvider_->useRuntimeShadowNodeReferenceUpdate();
useRuntimeShadowNodeReferenceUpdate_ = flagValue;
@@ -938,7 +920,7 @@ bool ReactNativeFeatureFlagsAccessor::useRuntimeShadowNodeReferenceUpdateOnLayou
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(50, "useRuntimeShadowNodeReferenceUpdateOnLayout");
markFlagAsAccessed(49, "useRuntimeShadowNodeReferenceUpdateOnLayout");
flagValue = currentProvider_->useRuntimeShadowNodeReferenceUpdateOnLayout();
useRuntimeShadowNodeReferenceUpdateOnLayout_ = flagValue;
@@ -956,7 +938,7 @@ bool ReactNativeFeatureFlagsAccessor::useStateAlignmentMechanism() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(51, "useStateAlignmentMechanism");
markFlagAsAccessed(50, "useStateAlignmentMechanism");
flagValue = currentProvider_->useStateAlignmentMechanism();
useStateAlignmentMechanism_ = flagValue;
@@ -974,7 +956,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModuleInterop() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(52, "useTurboModuleInterop");
markFlagAsAccessed(51, "useTurboModuleInterop");
flagValue = currentProvider_->useTurboModuleInterop();
useTurboModuleInterop_ = flagValue;
@@ -992,7 +974,7 @@ bool ReactNativeFeatureFlagsAccessor::useTurboModules() {
// be accessing the provider multiple times but the end state of this
// instance and the returned flag value would be the same.
markFlagAsAccessed(53, "useTurboModules");
markFlagAsAccessed(52, "useTurboModules");
flagValue = currentProvider_->useTurboModules();
useTurboModules_ = flagValue;
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<5f2c9b500fc26e68d56efae08b15575f>>
* @generated SignedSource<<261b4e8fae45ad2780f0bd2b17c86d5c>>
*/
/**
@@ -38,7 +38,6 @@ class ReactNativeFeatureFlagsAccessor {
bool destroyFabricSurfacesInReactInstanceManager();
bool enableAlignItemsBaselineOnFabricIOS();
bool enableAndroidLineHeightCentering();
bool enableAndroidMixBlendModeProp();
bool enableBackgroundStyleApplicator();
bool enableBridgelessArchitecture();
bool enableCleanTextInputYogaNode();
@@ -95,7 +94,7 @@ class ReactNativeFeatureFlagsAccessor {
std::unique_ptr<ReactNativeFeatureFlagsProvider> currentProvider_;
bool wasOverridden_;
std::array<std::atomic<const char*>, 54> accessedFeatureFlags_;
std::array<std::atomic<const char*>, 53> accessedFeatureFlags_;
std::atomic<std::optional<bool>> commonTestFlag_;
std::atomic<std::optional<bool>> allowRecursiveCommitsWithSynchronousMountOnAndroid_;
@@ -104,7 +103,6 @@ class ReactNativeFeatureFlagsAccessor {
std::atomic<std::optional<bool>> destroyFabricSurfacesInReactInstanceManager_;
std::atomic<std::optional<bool>> enableAlignItemsBaselineOnFabricIOS_;
std::atomic<std::optional<bool>> enableAndroidLineHeightCentering_;
std::atomic<std::optional<bool>> enableAndroidMixBlendModeProp_;
std::atomic<std::optional<bool>> enableBackgroundStyleApplicator_;
std::atomic<std::optional<bool>> enableBridgelessArchitecture_;
std::atomic<std::optional<bool>> enableCleanTextInputYogaNode_;
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<fb3d7a930222a40e9a8c377989713b07>>
* @generated SignedSource<<c08358e66009eff69107a684681feba9>>
*/
/**
@@ -55,10 +55,6 @@ class ReactNativeFeatureFlagsDefaults : public ReactNativeFeatureFlagsProvider {
return false;
}
bool enableAndroidMixBlendModeProp() override {
return false;
}
bool enableBackgroundStyleApplicator() override {
return true;
}
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<aaa516b2c719cb871f08c65bd7ce072f>>
* @generated SignedSource<<eca1f4ea2447e754c5cfa8998c2e7903>>
*/
/**
@@ -32,7 +32,6 @@ class ReactNativeFeatureFlagsProvider {
virtual bool destroyFabricSurfacesInReactInstanceManager() = 0;
virtual bool enableAlignItemsBaselineOnFabricIOS() = 0;
virtual bool enableAndroidLineHeightCentering() = 0;
virtual bool enableAndroidMixBlendModeProp() = 0;
virtual bool enableBackgroundStyleApplicator() = 0;
virtual bool enableBridgelessArchitecture() = 0;
virtual bool enableCleanTextInputYogaNode() = 0;
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<2b484558d552981e4ec0644d75849dde>>
* @generated SignedSource<<cfb1dc3fb447f3e4b014533a757e6c23>>
*/
/**
@@ -72,11 +72,6 @@ bool NativeReactNativeFeatureFlags::enableAndroidLineHeightCentering(
return ReactNativeFeatureFlags::enableAndroidLineHeightCentering();
}
bool NativeReactNativeFeatureFlags::enableAndroidMixBlendModeProp(
jsi::Runtime& /*runtime*/) {
return ReactNativeFeatureFlags::enableAndroidMixBlendModeProp();
}
bool NativeReactNativeFeatureFlags::enableBackgroundStyleApplicator(
jsi::Runtime& /*runtime*/) {
return ReactNativeFeatureFlags::enableBackgroundStyleApplicator();
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<94afee988401ba2af586ec8fe310cb8b>>
* @generated SignedSource<<3f8b503d5402563b0eb94fe46ffa2814>>
*/
/**
@@ -49,8 +49,6 @@ class NativeReactNativeFeatureFlags
bool enableAndroidLineHeightCentering(jsi::Runtime& runtime);
bool enableAndroidMixBlendModeProp(jsi::Runtime& runtime);
bool enableBackgroundStyleApplicator(jsi::Runtime& runtime);
bool enableBridgelessArchitecture(jsi::Runtime& runtime);
@@ -209,14 +209,13 @@ BaseViewProps::BaseViewProps(
sourceProps.backgroundImage,
{})),
mixBlendMode(
CoreFeatures::enablePropIteratorSetter
? sourceProps.mixBlendMode
: convertRawProp(
context,
rawProps,
"experimental_mixBlendMode",
sourceProps.mixBlendMode,
{})),
CoreFeatures::enablePropIteratorSetter ? sourceProps.mixBlendMode
: convertRawProp(
context,
rawProps,
"mixBlendMode",
sourceProps.mixBlendMode,
{})),
isolation(
CoreFeatures::enablePropIteratorSetter ? sourceProps.isolation
: convertRawProp(
@@ -98,14 +98,6 @@ const definitions: FeatureFlagDefinitions = {
purpose: 'experimentation',
},
},
enableAndroidMixBlendModeProp: {
defaultValue: false,
metadata: {
dateAdded: '2024-08-16',
description: 'Enables mix-blend-mode prop on Android.',
purpose: 'experimentation',
},
},
enableBackgroundStyleApplicator: {
defaultValue: true,
metadata: {
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<c9497d9d49c14ab537fd8b337f1c5836>>
* @generated SignedSource<<1bf690e95da1924a4cae50ec639a95df>>
* @flow strict
*/
@@ -56,7 +56,6 @@ export type ReactNativeFeatureFlags = {
destroyFabricSurfacesInReactInstanceManager: Getter<boolean>,
enableAlignItemsBaselineOnFabricIOS: Getter<boolean>,
enableAndroidLineHeightCentering: Getter<boolean>,
enableAndroidMixBlendModeProp: Getter<boolean>,
enableBackgroundStyleApplicator: Getter<boolean>,
enableBridgelessArchitecture: Getter<boolean>,
enableCleanTextInputYogaNode: Getter<boolean>,
@@ -213,10 +212,6 @@ export const enableAlignItemsBaselineOnFabricIOS: Getter<boolean> = createNative
* When enabled, custom line height calculation will be centered from top to bottom.
*/
export const enableAndroidLineHeightCentering: Getter<boolean> = createNativeFlagGetter('enableAndroidLineHeightCentering', false);
/**
* Enables mix-blend-mode prop on Android.
*/
export const enableAndroidMixBlendModeProp: Getter<boolean> = createNativeFlagGetter('enableAndroidMixBlendModeProp', false);
/**
* Use BackgroundStyleApplicator in place of other background/border drawing code
*/
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<0467a8715892bbeca0a08681c730aeab>>
* @generated SignedSource<<de64240cb68a53f5dc2f97b7ec967eeb>>
* @flow strict
*/
@@ -30,7 +30,6 @@ export interface Spec extends TurboModule {
+destroyFabricSurfacesInReactInstanceManager?: () => boolean;
+enableAlignItemsBaselineOnFabricIOS?: () => boolean;
+enableAndroidLineHeightCentering?: () => boolean;
+enableAndroidMixBlendModeProp?: () => boolean;
+enableBackgroundStyleApplicator?: () => boolean;
+enableBridgelessArchitecture?: () => boolean;
+enableCleanTextInputYogaNode?: () => boolean;
+1 -1
View File
@@ -50,7 +50,7 @@ declare module '.' {
}
export interface ViewStyle {
experimental_mixBlendMode?: BlendMode | undefined;
mixBlendMode?: BlendMode | undefined;
experimental_backgroundImage?:
| ReadonlyArray<GradientValue>
| string
@@ -139,8 +139,8 @@ const examples: Array<RNTesterModuleExample> = mixBlendModes.map(mode => ({
render(): React.Node {
return (
<View style={styles.container} testID={`mix-blend-mode-test-${mode}`}>
<LayeredView style={{experimental_mixBlendMode: mode}} />
<LayeredImage style={{experimental_mixBlendMode: mode}} />
<LayeredView style={{mixBlendMode: mode}} />
<LayeredImage style={{mixBlendMode: mode}} />
</View>
);
},
@@ -164,7 +164,7 @@ examples.push(
fontSize: 20,
fontWeight: 900,
color: 'red',
experimental_mixBlendMode: 'overlay',
mixBlendMode: 'overlay',
}}>
'OVERLAY' BLENDING ON TEXT
</Text>
@@ -182,7 +182,7 @@ examples.push(
style={styles.duckContainer}
testID="mix-blend-mode-test-spec-example-1">
<Image
style={[styles.duck, {experimental_mixBlendMode: 'multiply'}]}
style={[styles.duck, {mixBlendMode: 'multiply'}]}
source={require('../../assets/rubber-ducky.png')}
/>
</View>
@@ -216,7 +216,7 @@ examples.push(
borderRadius: '100%',
position: 'absolute',
left: 55,
experimental_mixBlendMode: 'difference',
mixBlendMode: 'difference',
}}
/>
<View
@@ -228,7 +228,7 @@ examples.push(
position: 'absolute',
top: 40,
left: 26,
experimental_mixBlendMode: 'screen',
mixBlendMode: 'screen',
}}
/>
</View>
@@ -254,7 +254,7 @@ examples.push(
style={[
styles.duck,
{
experimental_mixBlendMode: 'difference',
mixBlendMode: 'difference',
width: 150,
height: 165,
},
@@ -272,12 +272,8 @@ examples.push(
render(): React.Node {
return (
<View style={styles.container}>
<LayeredViewWithState
style={{experimental_mixBlendMode: 'difference'}}
/>
<LayeredImageWithState
style={{experimental_mixBlendMode: 'difference'}}
/>
<LayeredViewWithState style={{mixBlendMode: 'difference'}} />
<LayeredImageWithState style={{mixBlendMode: 'difference'}} />
</View>
);
},
@@ -291,13 +287,13 @@ examples.push(
<View style={styles.container} testID="mix-blend-mode-test-filter">
<LayeredView
style={{
experimental_mixBlendMode: 'luminosity',
mixBlendMode: 'luminosity',
filter: 'blur(3px)',
}}
/>
<LayeredImage
style={{
experimental_mixBlendMode: 'difference',
mixBlendMode: 'difference',
filter: 'hue-rotate(90deg)',
}}
/>