react-native-screens 3.33.0 → 3.35.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,32 +55,6 @@ def safeAppExtGet(prop, fallback) {
55
55
  appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback
56
56
  }
57
57
 
58
- def resolveReactNativeDirectory() {
59
- def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null)
60
- if (reactNativeLocation != null) {
61
- return file(reactNativeLocation)
62
- }
63
-
64
- def reactNativeFromAppNodeModules = file("${projectDir}/../../react-native")
65
- if (!isRunningInContextOfScreensRepo() && reactNativeFromAppNodeModules.exists()) {
66
- return reactNativeFromAppNodeModules
67
- }
68
-
69
- def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native")
70
- if (reactNativeFromProjectNodeModules.exists()) {
71
- return reactNativeFromProjectNodeModules
72
- }
73
-
74
- throw new GradleException(
75
- "[RNScreens] Unable to resolve react-native location in node_modules. You should add project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native."
76
- )
77
- }
78
-
79
- def reactNativeRootDir = resolveReactNativeDirectory()
80
- def reactProperties = new Properties()
81
- file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
82
- def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME")
83
- def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger()
84
58
  def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled()
85
59
 
86
60
  android {
@@ -118,14 +92,12 @@ android {
118
92
  }
119
93
  }
120
94
  }
121
- if (REACT_NATIVE_MINOR_VERSION >= 71) {
122
- buildFeatures {
123
- prefab true
124
- }
125
- externalNativeBuild {
126
- cmake {
127
- path "CMakeLists.txt"
128
- }
95
+ buildFeatures {
96
+ prefab true
97
+ }
98
+ externalNativeBuild {
99
+ cmake {
100
+ path "CMakeLists.txt"
129
101
  }
130
102
  }
131
103
  lintOptions {
@@ -127,6 +127,8 @@ class Screen(
127
127
  )
128
128
  }
129
129
 
130
+ fun isTransparent(): Boolean = stackPresentation === StackPresentation.TRANSPARENT_MODAL
131
+
130
132
  private fun hasWebView(viewGroup: ViewGroup): Boolean {
131
133
  for (i in 0 until viewGroup.childCount) {
132
134
  val child = viewGroup.getChildAt(i)
@@ -97,14 +97,14 @@ class ScreenStack(
97
97
  var visibleBottom: ScreenFragmentWrapper? = null // this is only set if newTop has TRANSPARENT_MODAL presentation mode
98
98
  isDetachingCurrentScreen = false // we reset it so the previous value is not used by mistake
99
99
  for (i in screenWrappers.indices.reversed()) {
100
- val screen = getScreenFragmentWrapperAt(i)
101
- if (!dismissedWrappers.contains(screen)) {
100
+ val screenWrapper = getScreenFragmentWrapperAt(i)
101
+ if (!dismissedWrappers.contains(screenWrapper)) {
102
102
  if (newTop == null) {
103
- newTop = screen
103
+ newTop = screenWrapper
104
104
  } else {
105
- visibleBottom = screen
105
+ visibleBottom = screenWrapper
106
106
  }
107
- if (!isTransparent(screen)) {
107
+ if (!screenWrapper.screen.isTransparent()) {
108
108
  break
109
109
  }
110
110
  }
@@ -258,7 +258,7 @@ class ScreenStack(
258
258
  private fun turnOffA11yUnderTransparentScreen(visibleBottom: ScreenFragmentWrapper?) {
259
259
  if (screenWrappers.size > 1 && visibleBottom != null) {
260
260
  topScreenWrapper?.let {
261
- if (isTransparent(it)) {
261
+ if (it.screen.isTransparent()) {
262
262
  val screenFragmentsBeneathTop = screenWrappers.slice(0 until screenWrappers.size - 1).asReversed()
263
263
  // go from the top of the stack excluding the top screen
264
264
  for (fragmentWrapper in screenFragmentsBeneathTop) {
@@ -363,9 +363,6 @@ class ScreenStack(
363
363
  }
364
364
 
365
365
  companion object {
366
- private fun isTransparent(fragmentWrapper: ScreenFragmentWrapper): Boolean =
367
- fragmentWrapper.screen.stackPresentation === Screen.StackPresentation.TRANSPARENT_MODAL
368
-
369
366
  private fun needsDrawReordering(fragmentWrapper: ScreenFragmentWrapper): Boolean =
370
367
  // On Android sdk 33 and above the animation is different and requires draw reordering.
371
368
  // For React Native 0.70 and lower versions, `Build.VERSION_CODES.TIRAMISU` is not defined yet.
@@ -154,7 +154,12 @@ class ScreenStackFragment :
154
154
  }
155
155
 
156
156
  override fun onPrepareOptionsMenu(menu: Menu) {
157
- updateToolbarMenu(menu)
157
+ // If the screen is a transparent modal with hidden header we don't want to update the toolbar
158
+ // menu because it may erase the menu of the previous screen (which is still visible in these
159
+ // circumstances). See here: https://github.com/software-mansion/react-native-screens/issues/2271
160
+ if (!screen.isTransparent() || screen.headerConfig?.isHeaderHidden == false) {
161
+ updateToolbarMenu(menu)
162
+ }
158
163
  return super.onPrepareOptionsMenu(menu)
159
164
  }
160
165
 
@@ -296,4 +296,11 @@ class ScreenStackHeaderConfigViewManager :
296
296
  ) {
297
297
  logNotAvailable("backButtonDisplayMode")
298
298
  }
299
+
300
+ override fun setBlurEffect(
301
+ view: ScreenStackHeaderConfig?,
302
+ value: String?,
303
+ ) {
304
+ logNotAvailable("blurEffect")
305
+ }
299
306
  }
@@ -5,6 +5,7 @@ import android.util.Log
5
5
  import android.view.View
6
6
  import androidx.appcompat.widget.Toolbar
7
7
  import androidx.coordinatorlayout.widget.CoordinatorLayout
8
+ import com.facebook.react.bridge.LifecycleEventListener
8
9
  import com.facebook.react.bridge.ReactApplicationContext
9
10
  import com.facebook.react.uimanager.PixelUtil
10
11
  import com.google.android.material.appbar.AppBarLayout
@@ -19,7 +20,7 @@ import java.lang.ref.WeakReference
19
20
  */
20
21
  internal class ScreenDummyLayoutHelper(
21
22
  reactContext: ReactApplicationContext,
22
- ) {
23
+ ) : LifecycleEventListener {
23
24
  // The state required to compute header dimensions. We want this on instance rather than on class
24
25
  // for context access & being tied to instance lifetime.
25
26
  private lateinit var coordinatorLayout: CoordinatorLayout
@@ -39,7 +40,6 @@ internal class ScreenDummyLayoutHelper(
39
40
  WeakReference(reactContext)
40
41
 
41
42
  init {
42
-
43
43
  // We load the library so that we are able to communicate with our C++ code (descriptor & shadow nodes).
44
44
  // Basically we leak this object to C++, as its lifecycle should span throughout whole application
45
45
  // lifecycle anyway.
@@ -50,16 +50,25 @@ internal class ScreenDummyLayoutHelper(
50
50
  }
51
51
 
52
52
  weakInstance = WeakReference(this)
53
- ensureDummyLayoutWithHeader(reactContext)
53
+
54
+ if (!(reactContext.hasCurrentActivity() && maybeInitDummyLayoutWithHeader(reactContext))) {
55
+ reactContext.addLifecycleEventListener(this)
56
+ }
54
57
  }
55
58
 
56
59
  /**
57
60
  * Initializes dummy view hierarchy with CoordinatorLayout, AppBarLayout and dummy View.
58
61
  * We utilize this to compute header height (app bar layout height) from C++ layer when its needed.
62
+ *
63
+ * @return boolean whether the layout was initialised or not
59
64
  */
60
- private fun ensureDummyLayoutWithHeader(reactContext: ReactApplicationContext) {
61
- if (::coordinatorLayout.isInitialized) {
62
- return
65
+ private fun maybeInitDummyLayoutWithHeader(reactContext: ReactApplicationContext): Boolean {
66
+ if (isLayoutInitialized) {
67
+ return true
68
+ }
69
+
70
+ if (!reactContext.hasCurrentActivity()) {
71
+ return false
63
72
  }
64
73
 
65
74
  // We need to use activity here, as react context does not have theme attributes required by
@@ -108,6 +117,9 @@ internal class ScreenDummyLayoutHelper(
108
117
  addView(appBarLayout)
109
118
  addView(dummyContentView)
110
119
  }
120
+
121
+ isLayoutInitialized = true
122
+ return true
111
123
  }
112
124
 
113
125
  /**
@@ -121,12 +133,18 @@ internal class ScreenDummyLayoutHelper(
121
133
  fontSize: Int,
122
134
  isTitleEmpty: Boolean,
123
135
  ): Float {
124
- if (!::coordinatorLayout.isInitialized) {
125
- Log.e(
126
- TAG,
127
- "[RNScreens] Attempt to access dummy view hierarchy before it is initialized",
128
- )
129
- return 0.0f
136
+ if (!isLayoutInitialized) {
137
+ val reactContext =
138
+ requireReactContext { "[RNScreens] Context was null-ed before dummy layout was initialized" }
139
+ if (!maybeInitDummyLayoutWithHeader(reactContext)) {
140
+ // This theoretically might happen at Fabric + "bridgefull" combination, due to race condition where `reactContext.currentActivity`
141
+ // is still null at this execution point. We don't wanna crash in such case, thus returning zeroed height.
142
+ Log.e(
143
+ TAG,
144
+ "[RNScreens] Failed to late-init layout while computing header height. This is a race-condition-bug in react-native-screens, please file an issue at https://github.com/software-mansion/react-native-screens/issues"
145
+ )
146
+ return 0.0f
147
+ }
130
148
  }
131
149
 
132
150
  if (cache.hasKey(CacheKey(fontSize, isTitleEmpty))) {
@@ -168,10 +186,10 @@ internal class ScreenDummyLayoutHelper(
168
186
  return headerHeight
169
187
  }
170
188
 
171
- private fun requireReactContext(): ReactApplicationContext =
172
- requireNotNull(reactContextRef.get()) {
173
- "[RNScreens] Attempt to require missing react context"
174
- }
189
+ private fun requireReactContext(lazyMessage: (() -> Any)? = null): ReactApplicationContext =
190
+ requireNotNull(
191
+ reactContextRef.get(),
192
+ lazyMessage ?: { "[RNScreens] Attempt to require missing react context" })
175
193
 
176
194
  private fun requireActivity(): Activity =
177
195
  requireNotNull(requireReactContext().currentActivity) {
@@ -195,6 +213,19 @@ internal class ScreenDummyLayoutHelper(
195
213
  @JvmStatic
196
214
  fun getInstance(): ScreenDummyLayoutHelper? = weakInstance.get()
197
215
  }
216
+
217
+ private var isLayoutInitialized = false
218
+
219
+ override fun onHostResume() {
220
+ // This is the earliest we have guarantee that the context has a reference to an activity.
221
+ val reactContext = requireReactContext { "[RNScreens] ReactContext missing in onHostResume! This should not happen." }
222
+ check(maybeInitDummyLayoutWithHeader(reactContext)) { "[RNScreens] Failed to initialise dummy layout in onHostResume. This is not expected."}
223
+ reactContext.removeLifecycleEventListener(this)
224
+ }
225
+
226
+ override fun onHostPause() = Unit
227
+
228
+ override fun onHostDestroy() = Unit
198
229
  }
199
230
 
200
231
  private data class CacheKey(
@@ -100,6 +100,9 @@ public class RNSScreenStackHeaderConfigManagerDelegate<T extends View, U extends
100
100
  case "backButtonInCustomView":
101
101
  mViewManager.setBackButtonInCustomView(view, value == null ? false : (boolean) value);
102
102
  break;
103
+ case "blurEffect":
104
+ mViewManager.setBlurEffect(view, (String) value);
105
+ break;
103
106
  case "topInsetEnabled":
104
107
  mViewManager.setTopInsetEnabled(view, value == null ? false : (boolean) value);
105
108
  break;
@@ -39,5 +39,6 @@ public interface RNSScreenStackHeaderConfigManagerInterface<T extends View> {
39
39
  void setBackButtonDisplayMode(T view, @Nullable String value);
40
40
  void setHideBackButton(T view, boolean value);
41
41
  void setBackButtonInCustomView(T view, boolean value);
42
+ void setBlurEffect(T view, @Nullable String value);
42
43
  void setTopInsetEnabled(T view, boolean value);
43
44
  }
package/ios/RNSConvert.h CHANGED
@@ -40,6 +40,8 @@ namespace react = facebook::react;
40
40
 
41
41
  + (RNSSearchBarPlacement)RNSScreenSearchBarPlacementFromCppEquivalent:(react::RNSSearchBarPlacement)placement;
42
42
 
43
+ + (UIBlurEffectStyle)UIBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect;
44
+
43
45
  @end
44
46
 
45
47
  #endif // RCT_NEW_ARCH_ENABLED
package/ios/RNSConvert.mm CHANGED
@@ -177,6 +177,71 @@
177
177
  }
178
178
  }
179
179
 
180
+ + (UIBlurEffectStyle)UIBlurEffectStyleFromCppEquivalent:(react::RNSScreenStackHeaderConfigBlurEffect)blurEffect
181
+ {
182
+ #if !TARGET_OS_TV && defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
183
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
184
+ if (@available(iOS 13.0, *)) {
185
+ switch (blurEffect) {
186
+ case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
187
+ return UIBlurEffectStyleExtraLight;
188
+ case react::RNSScreenStackHeaderConfigBlurEffect::Light:
189
+ return UIBlurEffectStyleLight;
190
+ case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
191
+ return UIBlurEffectStyleDark;
192
+ case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
193
+ return UIBlurEffectStyleRegular;
194
+ case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
195
+ return UIBlurEffectStyleProminent;
196
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterial:
197
+ return UIBlurEffectStyleSystemUltraThinMaterial;
198
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterial:
199
+ return UIBlurEffectStyleSystemThinMaterial;
200
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterial:
201
+ return UIBlurEffectStyleSystemMaterial;
202
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterial:
203
+ return UIBlurEffectStyleSystemThickMaterial;
204
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterial:
205
+ return UIBlurEffectStyleSystemChromeMaterial;
206
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialLight:
207
+ return UIBlurEffectStyleSystemUltraThinMaterialLight;
208
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialLight:
209
+ return UIBlurEffectStyleSystemThinMaterialLight;
210
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialLight:
211
+ return UIBlurEffectStyleSystemMaterialLight;
212
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialLight:
213
+ return UIBlurEffectStyleSystemThickMaterialLight;
214
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialLight:
215
+ return UIBlurEffectStyleSystemChromeMaterialLight;
216
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemUltraThinMaterialDark:
217
+ return UIBlurEffectStyleSystemUltraThinMaterialDark;
218
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThinMaterialDark:
219
+ return UIBlurEffectStyleSystemThinMaterialDark;
220
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemMaterialDark:
221
+ return UIBlurEffectStyleSystemMaterialDark;
222
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemThickMaterialDark:
223
+ return UIBlurEffectStyleSystemThickMaterialDark;
224
+ case react::RNSScreenStackHeaderConfigBlurEffect::SystemChromeMaterialDark:
225
+ return UIBlurEffectStyleSystemChromeMaterialDark;
226
+ }
227
+ }
228
+ #endif
229
+
230
+ switch (blurEffect) {
231
+ case react::RNSScreenStackHeaderConfigBlurEffect::Light:
232
+ return UIBlurEffectStyleLight;
233
+ case react::RNSScreenStackHeaderConfigBlurEffect::Dark:
234
+ return UIBlurEffectStyleDark;
235
+ case react::RNSScreenStackHeaderConfigBlurEffect::Regular:
236
+ return UIBlurEffectStyleRegular;
237
+ case react::RNSScreenStackHeaderConfigBlurEffect::Prominent:
238
+ return UIBlurEffectStyleProminent;
239
+ case react::RNSScreenStackHeaderConfigBlurEffect::ExtraLight:
240
+ default:
241
+ return UIBlurEffectStyleExtraLight;
242
+ }
243
+ }
244
+
180
245
  @end
181
246
 
182
247
  #endif // RCT_NEW_ARCH_ENABLED
package/ios/RNSScreen.mm CHANGED
@@ -514,14 +514,6 @@ namespace react = facebook::react;
514
514
  #endif
515
515
  }
516
516
 
517
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
518
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
519
- - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
520
- {
521
- [self notifyGestureCancel];
522
- }
523
- #endif
524
-
525
517
  - (void)presentationControllerWillDismiss:(UIPresentationController *)presentationController
526
518
  {
527
519
  // We need to call both "cancel" and "reset" here because RN's gesture recognizer
@@ -546,12 +538,24 @@ namespace react = facebook::react;
546
538
  - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
547
539
  {
548
540
  if (_preventNativeDismiss) {
549
- [self notifyDismissCancelledWithDismissCount:1];
550
541
  return NO;
551
542
  }
552
543
  return _gestureEnabled;
553
544
  }
554
545
 
546
+ #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \
547
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
548
+ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
549
+ {
550
+ // NOTE(kkafar): We should consider depracating the use of gesture cancel here & align
551
+ // with usePreventRemove API of react-navigation v7.
552
+ [self notifyGestureCancel];
553
+ if (_preventNativeDismiss) {
554
+ [self notifyDismissCancelledWithDismissCount:1];
555
+ }
556
+ }
557
+ #endif
558
+
555
559
  - (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
556
560
  {
557
561
  if ([_reactSuperview respondsToSelector:@selector(presentationControllerDidDismiss:)]) {
@@ -27,7 +27,6 @@
27
27
  #ifdef RCT_NEW_ARCH_ENABLED
28
28
  @property (nonatomic) BOOL show;
29
29
  #else
30
- @property (nonatomic) UIBlurEffectStyle blurEffect;
31
30
  @property (nonatomic) BOOL hide;
32
31
  #endif
33
32
 
@@ -56,6 +55,7 @@
56
55
  @property (nonatomic) BOOL backButtonInCustomView;
57
56
  @property (nonatomic) UISemanticContentAttribute direction;
58
57
  @property (nonatomic) UINavigationItemBackButtonDisplayMode backButtonDisplayMode;
58
+ @property (nonatomic) UIBlurEffectStyle blurEffect;
59
59
 
60
60
  + (void)willShowViewController:(UIViewController *)vc
61
61
  animated:(BOOL)animated
@@ -383,13 +383,9 @@ namespace react = facebook::react;
383
383
  appearance.backgroundColor = config.backgroundColor;
384
384
  }
385
385
 
386
- // TODO: implement blurEffect on Fabric
387
- #ifdef RCT_NEW_ARCH_ENABLED
388
- #else
389
386
  if (config.blurEffect) {
390
387
  appearance.backgroundEffect = [UIBlurEffect effectWithStyle:config.blurEffect];
391
388
  }
392
- #endif
393
389
 
394
390
  if (config.hideShadow) {
395
391
  appearance.shadowColor = nil;
@@ -904,6 +900,10 @@ static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
904
900
  _color = RCTUIColorFromSharedColor(newScreenProps.color);
905
901
  _backgroundColor = RCTUIColorFromSharedColor(newScreenProps.backgroundColor);
906
902
 
903
+ if (newScreenProps.blurEffect != oldScreenProps.blurEffect) {
904
+ _blurEffect = [RNSConvert UIBlurEffectStyleFromCppEquivalent:newScreenProps.blurEffect];
905
+ }
906
+
907
907
  [self updateViewControllerIfNeeded];
908
908
 
909
909
  if (needsNavigationControllerLayout) {
@@ -1 +1 @@
1
- {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","obj","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["fabric/ScreenStackHeaderConfigNativeComponent.ts"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAU7F;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAsCe,IAAAG,+BAAsB,EACnC,4BAA4B,EAC5B,CAAC,CACH,CAAC"}
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","obj","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["fabric/ScreenStackHeaderConfigNativeComponent.ts"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAU7F;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GA6De,IAAAG,+BAAsB,EACnC,4BAA4B,EAC5B,CAAC,CACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["fabric/ScreenStackHeaderConfigNativeComponent.ts"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAU5F;;AAEA;;AAsCA,eAAeA,sBAAsB,CACnC,4BAA4B,EAC5B,CAAC,CACH,CAAC"}
1
+ {"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["fabric/ScreenStackHeaderConfigNativeComponent.ts"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAU5F;;AAEA;;AA6DA,eAAeA,sBAAsB,CACnC,4BAA4B,EAC5B,CAAC,CACH,CAAC"}
@@ -5,6 +5,7 @@ type DirectionType = 'rtl' | 'ltr';
5
5
  type OnAttachedEvent = Readonly<{}>;
6
6
  type OnDetachedEvent = Readonly<{}>;
7
7
  type BackButtonDisplayMode = 'minimal' | 'default' | 'generic';
8
+ type BlurEffect = 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent' | 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial' | 'systemUltraThinMaterialLight' | 'systemThinMaterialLight' | 'systemMaterialLight' | 'systemThickMaterialLight' | 'systemChromeMaterialLight' | 'systemUltraThinMaterialDark' | 'systemThinMaterialDark' | 'systemMaterialDark' | 'systemThickMaterialDark' | 'systemChromeMaterialDark';
8
9
  export interface NativeProps extends ViewProps {
9
10
  onAttached?: DirectEventHandler<OnAttachedEvent>;
10
11
  onDetached?: DirectEventHandler<OnDetachedEvent>;
@@ -34,6 +35,7 @@ export interface NativeProps extends ViewProps {
34
35
  backButtonDisplayMode?: WithDefault<BackButtonDisplayMode, 'default'>;
35
36
  hideBackButton?: boolean;
36
37
  backButtonInCustomView?: boolean;
38
+ blurEffect?: WithDefault<BlurEffect, 'extraLight'>;
37
39
  topInsetEnabled?: boolean;
38
40
  }
39
41
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenStackHeaderConfigNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/fabric/ScreenStackHeaderConfigNativeComponent.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,KAAK,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAGnC,KAAK,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEpC,KAAK,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEpC,KAAK,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,UAAU,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,gBAAgB,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;AAED,wBAGE"}
1
+ {"version":3,"file":"ScreenStackHeaderConfigNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/fabric/ScreenStackHeaderConfigNativeComponent.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,KAAK,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAGnC,KAAK,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEpC,KAAK,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEpC,KAAK,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/D,KAAK,UAAU,GACX,YAAY,GACZ,OAAO,GACP,MAAM,GACN,SAAS,GACT,WAAW,GACX,yBAAyB,GACzB,oBAAoB,GACpB,gBAAgB,GAChB,qBAAqB,GACrB,sBAAsB,GACtB,8BAA8B,GAC9B,yBAAyB,GACzB,qBAAqB,GACrB,0BAA0B,GAC1B,2BAA2B,GAC3B,6BAA6B,GAC7B,wBAAwB,GACxB,oBAAoB,GACpB,yBAAyB,GACzB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,UAAU,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,KAAK,CAAC;IAC1B,gBAAgB,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,WAAW,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEnD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;AAED,wBAGE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screens",
3
- "version": "3.33.0",
3
+ "version": "3.35.0-rc.0",
4
4
  "description": "Native navigation primitives for your React Native app.",
5
5
  "scripts": {
6
6
  "submodules": "git submodule update --init --recursive && (cd react-navigation && yarn)",
@@ -15,6 +15,28 @@ type OnDetachedEvent = Readonly<{}>;
15
15
 
16
16
  type BackButtonDisplayMode = 'minimal' | 'default' | 'generic';
17
17
 
18
+ type BlurEffect =
19
+ | 'extraLight'
20
+ | 'light'
21
+ | 'dark'
22
+ | 'regular'
23
+ | 'prominent'
24
+ | 'systemUltraThinMaterial'
25
+ | 'systemThinMaterial'
26
+ | 'systemMaterial'
27
+ | 'systemThickMaterial'
28
+ | 'systemChromeMaterial'
29
+ | 'systemUltraThinMaterialLight'
30
+ | 'systemThinMaterialLight'
31
+ | 'systemMaterialLight'
32
+ | 'systemThickMaterialLight'
33
+ | 'systemChromeMaterialLight'
34
+ | 'systemUltraThinMaterialDark'
35
+ | 'systemThinMaterialDark'
36
+ | 'systemMaterialDark'
37
+ | 'systemThickMaterialDark'
38
+ | 'systemChromeMaterialDark';
39
+
18
40
  export interface NativeProps extends ViewProps {
19
41
  onAttached?: DirectEventHandler<OnAttachedEvent>;
20
42
  onDetached?: DirectEventHandler<OnDetachedEvent>;
@@ -44,6 +66,7 @@ export interface NativeProps extends ViewProps {
44
66
  backButtonDisplayMode?: WithDefault<BackButtonDisplayMode, 'default'>;
45
67
  hideBackButton?: boolean;
46
68
  backButtonInCustomView?: boolean;
69
+ blurEffect?: WithDefault<BlurEffect, 'extraLight'>;
47
70
  // TODO: implement this props on iOS
48
71
  topInsetEnabled?: boolean;
49
72
  }