react-native-screens 3.13.0 → 3.14.1

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.
Files changed (141) hide show
  1. package/README.md +2 -2
  2. package/RNScreens.podspec +5 -4
  3. package/android/build.gradle +18 -1
  4. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +8 -4
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +24 -6
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +14 -18
  7. package/android/src/main/jni/Android.mk +1 -2
  8. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +39 -14
  9. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +15 -6
  10. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -3
  11. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +1 -1
  12. package/common/cpp/Android.mk +1 -2
  13. package/createNativeStackNavigator/README.md +4 -0
  14. package/ios/RNSConvert.h +30 -0
  15. package/ios/RNSConvert.mm +120 -0
  16. package/ios/RNSEnums.h +59 -0
  17. package/ios/RNSFullWindowOverlay.h +17 -2
  18. package/ios/RNSFullWindowOverlay.mm +199 -0
  19. package/ios/RNSScreen.h +70 -79
  20. package/ios/{RNSScreen.m → RNSScreen.mm} +679 -302
  21. package/ios/RNSScreenContainer.h +15 -1
  22. package/ios/{RNSScreenContainer.m → RNSScreenContainer.mm} +99 -8
  23. package/ios/{RNSScreenNavigationContainer.m → RNSScreenNavigationContainer.mm} +22 -0
  24. package/ios/RNSScreenStack.h +19 -3
  25. package/ios/{RNSScreenStack.m → RNSScreenStack.mm} +377 -126
  26. package/ios/{RNSScreenStackAnimator.m → RNSScreenStackAnimator.mm} +19 -14
  27. package/ios/RNSScreenStackHeaderConfig.h +20 -21
  28. package/ios/{RNSScreenStackHeaderConfig.m → RNSScreenStackHeaderConfig.mm} +232 -117
  29. package/ios/RNSScreenStackHeaderSubview.h +45 -0
  30. package/ios/RNSScreenStackHeaderSubview.mm +137 -0
  31. package/ios/RNSScreenViewEvent.h +12 -0
  32. package/ios/RNSScreenViewEvent.mm +59 -0
  33. package/ios/{RNSScreenWindowTraits.m → RNSScreenWindowTraits.mm} +3 -2
  34. package/ios/RNSSearchBar.h +14 -1
  35. package/ios/RNSSearchBar.mm +351 -0
  36. package/ios/{UIViewController+RNScreens.m → UIViewController+RNScreens.mm} +0 -0
  37. package/ios/{UIWindow+RNScreens.m → UIWindow+RNScreens.mm} +0 -0
  38. package/lib/commonjs/fabric/FullWindowOverlay.js +26 -0
  39. package/lib/commonjs/fabric/FullWindowOverlay.js.map +1 -0
  40. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +21 -0
  41. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  42. package/lib/commonjs/fabric/Screen.js +10 -8
  43. package/lib/commonjs/fabric/Screen.js.map +1 -1
  44. package/lib/commonjs/fabric/ScreenContainer.js +28 -0
  45. package/lib/commonjs/fabric/ScreenContainer.js.map +1 -0
  46. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +21 -0
  47. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -0
  48. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  49. package/lib/commonjs/fabric/ScreenNavigationContainer.js +28 -0
  50. package/lib/commonjs/fabric/ScreenNavigationContainer.js.map +1 -0
  51. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +21 -0
  52. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  53. package/lib/commonjs/fabric/ScreenStack.js +6 -7
  54. package/lib/commonjs/fabric/ScreenStack.js.map +1 -1
  55. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  56. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +4 -1
  57. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -1
  58. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
  59. package/lib/commonjs/fabric/SearchBar.js +37 -0
  60. package/lib/commonjs/fabric/SearchBar.js.map +1 -0
  61. package/lib/commonjs/fabric/SearchBarNativeComponent.js +25 -0
  62. package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -0
  63. package/lib/commonjs/fabric/index.js +32 -0
  64. package/lib/commonjs/fabric/index.js.map +1 -1
  65. package/lib/commonjs/index.native.js +14 -18
  66. package/lib/commonjs/index.native.js.map +1 -1
  67. package/lib/commonjs/native-stack/views/NativeStackView.js +4 -0
  68. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  69. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +8 -2
  70. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  71. package/lib/module/fabric/FullWindowOverlay.js +15 -0
  72. package/lib/module/fabric/FullWindowOverlay.js.map +1 -0
  73. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +9 -0
  74. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  75. package/lib/module/fabric/Screen.js +8 -3
  76. package/lib/module/fabric/Screen.js.map +1 -1
  77. package/lib/module/fabric/ScreenContainer.js +17 -0
  78. package/lib/module/fabric/ScreenContainer.js.map +1 -0
  79. package/lib/module/fabric/ScreenContainerNativeComponent.js +9 -0
  80. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -0
  81. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  82. package/lib/module/fabric/ScreenNavigationContainer.js +17 -0
  83. package/lib/module/fabric/ScreenNavigationContainer.js.map +1 -0
  84. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +9 -0
  85. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  86. package/lib/module/fabric/ScreenStack.js +5 -2
  87. package/lib/module/fabric/ScreenStack.js.map +1 -1
  88. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  89. package/lib/module/fabric/ScreenStackHeaderSubview.js +4 -1
  90. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -1
  91. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
  92. package/lib/module/fabric/SearchBar.js +24 -0
  93. package/lib/module/fabric/SearchBar.js.map +1 -0
  94. package/lib/module/fabric/SearchBarNativeComponent.js +11 -0
  95. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -0
  96. package/lib/module/fabric/index.js +5 -1
  97. package/lib/module/fabric/index.js.map +1 -1
  98. package/lib/module/index.native.js +15 -20
  99. package/lib/module/index.native.js.map +1 -1
  100. package/lib/module/native-stack/views/NativeStackView.js +4 -0
  101. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  102. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +7 -2
  103. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  104. package/lib/typescript/native-stack/types.d.ts +12 -0
  105. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  106. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  107. package/lib/typescript/types.d.ts +24 -0
  108. package/native-stack/README.md +21 -0
  109. package/package.json +2 -2
  110. package/src/fabric/FullWindowOverlay.js +13 -0
  111. package/src/fabric/FullWindowOverlayNativeComponent.js +19 -0
  112. package/src/fabric/Screen.js +5 -2
  113. package/src/fabric/ScreenContainer.js +16 -0
  114. package/src/fabric/ScreenContainerNativeComponent.js +19 -0
  115. package/src/fabric/ScreenNativeComponent.js +41 -8
  116. package/src/fabric/ScreenNavigationContainer.js +16 -0
  117. package/src/fabric/ScreenNavigationContainerNativeComponent.js +19 -0
  118. package/src/fabric/ScreenStack.js +4 -2
  119. package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +1 -1
  120. package/src/fabric/ScreenStackHeaderSubview.js +3 -1
  121. package/src/fabric/ScreenStackNativeComponent.js +4 -0
  122. package/src/fabric/SearchBar.js +20 -0
  123. package/src/fabric/SearchBarNativeComponent.js +62 -0
  124. package/src/fabric/index.js +8 -0
  125. package/src/index.native.tsx +20 -19
  126. package/src/native-stack/types.tsx +12 -0
  127. package/src/native-stack/views/NativeStackView.tsx +4 -0
  128. package/src/reanimated/ReanimatedNativeStackScreen.tsx +6 -0
  129. package/src/types.tsx +25 -0
  130. package/ios/RNSFullWindowOverlay.m +0 -105
  131. package/ios/RNSScreenComponentView.h +0 -23
  132. package/ios/RNSScreenComponentView.mm +0 -159
  133. package/ios/RNSScreenController.h +0 -10
  134. package/ios/RNSScreenController.mm +0 -79
  135. package/ios/RNSScreenStackComponentView.h +0 -15
  136. package/ios/RNSScreenStackComponentView.mm +0 -295
  137. package/ios/RNSScreenStackHeaderConfigComponentView.h +0 -42
  138. package/ios/RNSScreenStackHeaderConfigComponentView.mm +0 -662
  139. package/ios/RNSScreenStackHeaderSubviewComponentView.h +0 -14
  140. package/ios/RNSScreenStackHeaderSubviewComponentView.mm +0 -77
  141. package/ios/RNSSearchBar.m +0 -198
@@ -1,5 +1,12 @@
1
+ #ifdef RN_FABRIC_ENABLED
2
+ #import <React/RCTViewComponentView.h>
3
+ #else
4
+ #endif
5
+
1
6
  #import <React/RCTViewManager.h>
2
7
 
8
+ NS_ASSUME_NONNULL_BEGIN
9
+
3
10
  @protocol RNSScreenContainerDelegate
4
11
 
5
12
  - (void)markChildUpdated;
@@ -21,7 +28,12 @@
21
28
 
22
29
  @end
23
30
 
24
- @interface RNSScreenContainerView : UIView <RNSScreenContainerDelegate, RCTInvalidating>
31
+ @interface RNSScreenContainerView :
32
+ #ifdef RN_FABRIC_ENABLED
33
+ RCTViewComponentView <RNSScreenContainerDelegate>
34
+ #else
35
+ UIView <RNSScreenContainerDelegate, RCTInvalidating>
36
+ #endif
25
37
 
26
38
  @property (nonatomic, retain) UIViewController *controller;
27
39
  @property (nonatomic, retain) NSMutableArray *reactSubviews;
@@ -29,3 +41,5 @@
29
41
  - (void)maybeDismissVC;
30
42
 
31
43
  @end
44
+
45
+ NS_ASSUME_NONNULL_END
@@ -1,6 +1,13 @@
1
1
  #import "RNSScreenContainer.h"
2
2
  #import "RNSScreen.h"
3
3
 
4
+ #ifdef RN_FABRIC_ENABLED
5
+ #import <React/RCTConversions.h>
6
+ #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
7
+ #import <react/renderer/components/rnscreens/Props.h>
8
+ #import "RCTFabricComponentsPlugins.h"
9
+ #endif
10
+
4
11
  @implementation RNScreensViewController
5
12
 
6
13
  #if !TARGET_OS_TV
@@ -34,7 +41,7 @@
34
41
  {
35
42
  for (UIViewController *childVC in self.childViewControllers) {
36
43
  if ([childVC isKindOfClass:[RNSScreen class]] &&
37
- ((RNSScreenView *)((RNSScreen *)childVC.view)).activityState == RNSActivityStateOnTop) {
44
+ ((RNSScreen *)childVC).screenView.activityState == RNSActivityStateOnTop) {
38
45
  return childVC;
39
46
  }
40
47
  }
@@ -51,6 +58,10 @@
51
58
  - (instancetype)init
52
59
  {
53
60
  if (self = [super init]) {
61
+ #ifdef RN_FABRIC_ENABLED
62
+ static const auto defaultProps = std::make_shared<const facebook::react::RNSScreenContainerProps>();
63
+ _props = defaultProps;
64
+ #endif
54
65
  _activeScreens = [NSMutableSet new];
55
66
  _reactSubviews = [NSMutableArray new];
56
67
  [self setupController];
@@ -218,25 +229,105 @@
218
229
  }
219
230
  }
220
231
 
221
- - (void)invalidate
222
- {
223
- _invalidated = YES;
224
- [_controller willMoveToParentViewController:nil];
225
- [_controller removeFromParentViewController];
226
- }
227
-
228
232
  - (void)layoutSubviews
229
233
  {
230
234
  [super layoutSubviews];
231
235
  _controller.view.frame = self.bounds;
232
236
  for (RNSScreenView *subview in _reactSubviews) {
237
+ #ifdef RN_FABRIC_ENABLED
238
+ facebook::react::LayoutMetrics screenLayoutMetrics = subview.newLayoutMetrics;
239
+ screenLayoutMetrics.frame = RCTRectFromCGRect(CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height));
240
+ [subview updateLayoutMetrics:screenLayoutMetrics oldLayoutMetrics:subview.oldLayoutMetrics];
241
+ #else
233
242
  [subview reactSetFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)];
243
+ #endif
234
244
  [subview setNeedsLayout];
235
245
  }
236
246
  }
237
247
 
248
+ #pragma mark-- Fabric specific
249
+ #ifdef RN_FABRIC_ENABLED
250
+
251
+ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
252
+ {
253
+ if (![childComponentView isKindOfClass:[RNSScreenView class]]) {
254
+ RCTLogError(@"ScreenContainer only accepts children of type Screen");
255
+ return;
256
+ }
257
+
258
+ RNSScreenView *screenView = (RNSScreenView *)childComponentView;
259
+
260
+ RCTAssert(
261
+ childComponentView.reactSuperview == nil,
262
+ @"Attempt to mount already mounted component view. (parent: %@, child: %@, index: %@, existing parent: %@)",
263
+ self,
264
+ childComponentView,
265
+ @(index),
266
+ @([childComponentView.superview tag]));
267
+
268
+ [_reactSubviews insertObject:screenView atIndex:index];
269
+ screenView.reactSuperview = self;
270
+ facebook::react::LayoutMetrics screenLayoutMetrics = screenView.newLayoutMetrics;
271
+ screenLayoutMetrics.frame = RCTRectFromCGRect(CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height));
272
+ [screenView updateLayoutMetrics:screenLayoutMetrics oldLayoutMetrics:screenView.oldLayoutMetrics];
273
+ [self markChildUpdated];
274
+ }
275
+
276
+ - (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
277
+ {
278
+ RCTAssert(
279
+ childComponentView.reactSuperview == self,
280
+ @"Attempt to unmount a view which is mounted inside different view. (parent: %@, child: %@, index: %@)",
281
+ self,
282
+ childComponentView,
283
+ @(index));
284
+ RCTAssert(
285
+ (_reactSubviews.count > index) && [_reactSubviews objectAtIndex:index] == childComponentView,
286
+ @"Attempt to unmount a view which has a different index. (parent: %@, child: %@, index: %@, actual index: %@, tag at index: %@)",
287
+ self,
288
+ childComponentView,
289
+ @(index),
290
+ @([_reactSubviews indexOfObject:childComponentView]),
291
+ @([[_reactSubviews objectAtIndex:index] tag]));
292
+ ((RNSScreenView *)childComponentView).reactSuperview = nil;
293
+ [_reactSubviews removeObject:childComponentView];
294
+ [childComponentView removeFromSuperview];
295
+ [self markChildUpdated];
296
+ }
297
+
298
+ + (facebook::react::ComponentDescriptorProvider)componentDescriptorProvider
299
+ {
300
+ return facebook::react::concreteComponentDescriptorProvider<facebook::react::RNSScreenContainerComponentDescriptor>();
301
+ }
302
+
303
+ - (void)prepareForRecycle
304
+ {
305
+ [super prepareForRecycle];
306
+ [_controller willMoveToParentViewController:nil];
307
+ [_controller removeFromParentViewController];
308
+ }
309
+
310
+ #pragma mark-- Paper specific
311
+ #else
312
+
313
+ - (void)invalidate
314
+ {
315
+ _invalidated = YES;
316
+ [_controller willMoveToParentViewController:nil];
317
+ [_controller removeFromParentViewController];
318
+ }
319
+
320
+ #endif
321
+
238
322
  @end
239
323
 
324
+ #ifdef RN_FABRIC_ENABLED
325
+ Class<RCTComponentViewProtocol> RNSScreenContainerCls(void)
326
+ {
327
+ return RNSScreenContainerView.class;
328
+ }
329
+ #endif
330
+
240
331
  @implementation RNSScreenContainerManager
241
332
 
242
333
  RCT_EXPORT_MODULE()
@@ -2,6 +2,12 @@
2
2
  #import "RNSScreen.h"
3
3
  #import "RNSScreenContainer.h"
4
4
 
5
+ #ifdef RN_FABRIC_ENABLED
6
+ #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
7
+ #import <react/renderer/components/rnscreens/Props.h>
8
+ #import "RCTFabricComponentsPlugins.h"
9
+ #endif
10
+
5
11
  @implementation RNScreensContainerNavigationController
6
12
 
7
13
  @end
@@ -29,8 +35,24 @@
29
35
  [self maybeDismissVC];
30
36
  }
31
37
 
38
+ #pragma mark-- Fabric specific
39
+ #ifdef RN_FABRIC_ENABLED
40
+ + (facebook::react::ComponentDescriptorProvider)componentDescriptorProvider
41
+ {
42
+ return facebook::react::concreteComponentDescriptorProvider<
43
+ facebook::react::RNSScreenNavigationContainerComponentDescriptor>();
44
+ }
45
+ #endif
46
+
32
47
  @end
33
48
 
49
+ #ifdef RN_FABRIC_ENABLED
50
+ Class<RCTComponentViewProtocol> RNSScreenNavigationContainerCls(void)
51
+ {
52
+ return RNSScreenNavigationContainerView.class;
53
+ }
54
+ #endif
55
+
34
56
  @implementation RNSScreenNavigationContainerManager
35
57
 
36
58
  RCT_EXPORT_MODULE()
@@ -1,21 +1,37 @@
1
+ #ifdef RN_FABRIC_ENABLED
2
+ #import <React/RCTViewComponentView.h>
3
+ #else
1
4
  #import <React/RCTUIManagerObserverCoordinator.h>
2
5
  #import <React/RCTViewManager.h>
6
+ #endif
3
7
 
4
8
  #import "RNSScreenContainer.h"
5
9
 
10
+ NS_ASSUME_NONNULL_BEGIN
11
+
6
12
  @interface RNScreensNavigationController : UINavigationController <RNScreensViewControllerDelegate>
7
13
 
8
14
  @end
9
15
 
10
- @interface RNSScreenStackView : UIView <RNSScreenContainerDelegate, RCTInvalidating>
11
-
12
- @property (nonatomic, copy) RCTDirectEventBlock onFinishTransitioning;
16
+ @interface RNSScreenStackView :
17
+ #ifdef RN_FABRIC_ENABLED
18
+ RCTViewComponentView <RNSScreenContainerDelegate>
19
+ #else
20
+ UIView <RNSScreenContainerDelegate, RCTInvalidating>
21
+ #endif
13
22
 
14
23
  - (void)markChildUpdated;
15
24
  - (void)didUpdateChildren;
16
25
 
26
+ #ifdef RN_FABRIC_ENABLED
27
+ #else
28
+ @property (nonatomic, copy) RCTDirectEventBlock onFinishTransitioning;
29
+ #endif // RN_FABRIC_ENABLED
30
+
17
31
  @end
18
32
 
19
33
  @interface RNSScreenStackManager : RCTViewManager <RCTInvalidating>
20
34
 
21
35
  @end
36
+
37
+ NS_ASSUME_NONNULL_END