react-native-screens 4.12.0 → 4.13.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.
Files changed (235) hide show
  1. package/RNScreens.podspec +29 -2
  2. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +4 -0
  3. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +9 -1
  4. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +0 -1
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +4 -4
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +1 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +4 -4
  8. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingViewManager.kt +8 -2
  9. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt +1 -2
  10. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenEventEmitter.kt +16 -13
  11. package/android/src/main/java/com/swmansion/rnscreens/gamma/common/BaseEventEmitter.kt +22 -0
  12. package/android/src/main/java/com/swmansion/rnscreens/gamma/common/FragmentProviding.kt +11 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/gamma/common/NamingAwareEventType.kt +13 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/EventHelpers.kt +6 -0
  15. package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/FragmentManagerHelper.kt +76 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/gamma/helpers/SystemDrawable.kt +33 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreen.kt +101 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenDelegate.kt +17 -0
  19. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenEventEmitter.kt +46 -0
  20. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenFragment.kt +37 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt +178 -0
  22. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +433 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostEventEmitter.kt +14 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt +177 -0
  25. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenDidAppearEvent.kt +30 -0
  26. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenDidDisappearEvent.kt +30 -0
  27. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenWillAppearEvent.kt +30 -0
  28. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabScreenWillDisappearEvent.kt +30 -0
  29. package/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/event/TabsHostNativeFocusChangeEvent.kt +36 -0
  30. package/android/src/main/java/com/swmansion/rnscreens/stack/views/ChildDrawingOrderStrategyImpl.kt +0 -1
  31. package/android/src/main/java/com/swmansion/rnscreens/transition/ExternalBoundaryValuesEvaluator.kt +9 -2
  32. package/android/src/main/java/com/swmansion/rnscreens/utils/FragmentTransactionKt.kt +4 -1
  33. package/android/src/main/jni/rnscreens.h +1 -0
  34. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsManagerDelegate.java +76 -0
  35. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsManagerInterface.java +33 -0
  36. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java +97 -0
  37. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java +40 -0
  38. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +2 -2
  39. package/android/src/versioned/backgroundcolor/76/ViewBackgroundUtils.kt +0 -1
  40. package/android/src/versioned/backgroundcolor/latest/ViewBackgroundUtils.kt +0 -3
  41. package/android/src/versioned/pointerevents/77/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt +1 -1
  42. package/android/src/versioned/pointerevents/latest/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt +1 -1
  43. package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsComponentDescriptor.h +31 -0
  44. package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsShadowNode.cpp +20 -0
  45. package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsShadowNode.h +32 -0
  46. package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsState.cpp +22 -0
  47. package/common/cpp/react/renderer/components/rnscreens/RNSBottomTabsState.h +44 -0
  48. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +8 -0
  49. package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenComponentDescriptor.h +40 -0
  50. package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenShadowNode.cpp +13 -0
  51. package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenShadowNode.h +36 -0
  52. package/common/cpp/react/renderer/components/rnscreens/RNSSplitViewScreenState.h +32 -0
  53. package/cpp/RNScreensTurboModule.h +5 -0
  54. package/ios/RNSEnums.h +6 -0
  55. package/ios/RNSScreen.h +2 -1
  56. package/ios/RNSScreen.mm +48 -1
  57. package/ios/RNSScreenContainer.mm +6 -0
  58. package/ios/RNSScreenStack.h +3 -1
  59. package/ios/RNSScreenStack.mm +39 -2
  60. package/ios/RNSScreenStackHeaderConfig.mm +1 -1
  61. package/ios/RNSScrollViewBehaviorOverriding.h +24 -0
  62. package/ios/RNSScrollViewFinder.h +13 -0
  63. package/ios/RNSScrollViewFinder.mm +22 -0
  64. package/ios/RNSScrollViewHelper.h +10 -0
  65. package/ios/RNSScrollViewHelper.mm +15 -0
  66. package/ios/RNScreens-Bridging-Header.h +4 -0
  67. package/ios/UIScrollView+RNScreens.h +14 -0
  68. package/ios/UIScrollView+RNScreens.mm +15 -0
  69. package/ios/bottom-tabs/RCTConvert+RNSBottomTabs.h +18 -0
  70. package/ios/bottom-tabs/RCTConvert+RNSBottomTabs.mm +25 -0
  71. package/ios/bottom-tabs/RNSBottomTabsHostComponentView.h +80 -0
  72. package/ios/bottom-tabs/RNSBottomTabsHostComponentView.mm +486 -0
  73. package/ios/bottom-tabs/RNSBottomTabsHostComponentViewManager.h +11 -0
  74. package/ios/bottom-tabs/RNSBottomTabsHostComponentViewManager.mm +48 -0
  75. package/ios/bottom-tabs/RNSBottomTabsHostEventEmitter.h +53 -0
  76. package/ios/bottom-tabs/RNSBottomTabsHostEventEmitter.mm +57 -0
  77. package/ios/bottom-tabs/RNSBottomTabsScreenComponentView.h +95 -0
  78. package/ios/bottom-tabs/RNSBottomTabsScreenComponentView.mm +492 -0
  79. package/ios/bottom-tabs/RNSBottomTabsScreenComponentViewManager.h +9 -0
  80. package/ios/bottom-tabs/RNSBottomTabsScreenComponentViewManager.mm +55 -0
  81. package/ios/bottom-tabs/RNSBottomTabsScreenEventEmitter.h +53 -0
  82. package/ios/bottom-tabs/RNSBottomTabsScreenEventEmitter.mm +106 -0
  83. package/ios/bottom-tabs/RNSBottomTabsSpecialEffectsSupporting.h +17 -0
  84. package/ios/bottom-tabs/RNSTabBarAppearanceCoordinator.h +34 -0
  85. package/ios/bottom-tabs/RNSTabBarAppearanceCoordinator.mm +243 -0
  86. package/ios/bottom-tabs/RNSTabBarAppearanceProvider.h +23 -0
  87. package/ios/bottom-tabs/RNSTabBarController.h +132 -0
  88. package/ios/bottom-tabs/RNSTabBarController.mm +206 -0
  89. package/ios/bottom-tabs/RNSTabBarControllerDelegate.h +9 -0
  90. package/ios/bottom-tabs/RNSTabBarControllerDelegate.mm +63 -0
  91. package/ios/bottom-tabs/RNSTabsScreenViewController.h +42 -0
  92. package/ios/bottom-tabs/RNSTabsScreenViewController.mm +105 -0
  93. package/ios/bottom-tabs/extensions/RNSBottomTabsHostComponentView+RNSImageLoader.h +21 -0
  94. package/ios/bottom-tabs/extensions/RNSBottomTabsHostComponentView+RNSImageLoader.mm +22 -0
  95. package/ios/bridging/RNSReactBaseView.h +31 -0
  96. package/ios/bridging/RNSReactBaseView.mm +5 -0
  97. package/ios/bridging/Swift-Bridging.h +7 -0
  98. package/ios/conversion/RNSConversions-BottomTabs.mm +216 -0
  99. package/ios/conversion/RNSConversions-SplitView.mm +63 -0
  100. package/ios/conversion/RNSConversions.h +53 -0
  101. package/ios/gamma/ReactMountingTransactionObserving.swift +7 -0
  102. package/ios/gamma/split-view/RNSSplitViewHostComponentView.h +29 -0
  103. package/ios/gamma/split-view/RNSSplitViewHostComponentView.mm +209 -0
  104. package/ios/gamma/split-view/RNSSplitViewHostComponentViewManager.h +11 -0
  105. package/ios/gamma/split-view/RNSSplitViewHostComponentViewManager.mm +7 -0
  106. package/ios/gamma/split-view/RNSSplitViewHostController.swift +98 -0
  107. package/ios/gamma/split-view/RNSSplitViewNavigationController.swift +31 -0
  108. package/ios/gamma/split-view/RNSSplitViewScreenComponentView.h +24 -0
  109. package/ios/gamma/split-view/RNSSplitViewScreenComponentView.mm +106 -0
  110. package/ios/gamma/split-view/RNSSplitViewScreenComponentViewManager.h +11 -0
  111. package/ios/gamma/split-view/RNSSplitViewScreenComponentViewManager.mm +7 -0
  112. package/ios/gamma/split-view/RNSSplitViewScreenController.swift +86 -0
  113. package/ios/gamma/split-view/RNSSplitViewScreenShadowStateProxy.h +35 -0
  114. package/ios/gamma/split-view/RNSSplitViewScreenShadowStateProxy.mm +56 -0
  115. package/ios/gamma/stack/RNSScreenStackHostComponentView.h +16 -0
  116. package/ios/gamma/stack/RNSScreenStackHostComponentView.mm +143 -0
  117. package/ios/gamma/stack/RNSScreenStackHostComponentViewManager.h +11 -0
  118. package/ios/gamma/stack/RNSScreenStackHostComponentViewManager.mm +7 -0
  119. package/ios/gamma/stack/RNSStackController.swift +65 -0
  120. package/ios/gamma/stack/RNSStackScreenComponentEventEmitter.h +37 -0
  121. package/ios/gamma/stack/RNSStackScreenComponentEventEmitter.mm +60 -0
  122. package/ios/gamma/stack/RNSStackScreenComponentView.h +36 -0
  123. package/ios/gamma/stack/RNSStackScreenComponentView.mm +124 -0
  124. package/ios/gamma/stack/RNSStackScreenComponentViewManager.h +11 -0
  125. package/ios/gamma/stack/RNSStackScreenComponentViewManager.mm +7 -0
  126. package/ios/gamma/stack/RNSStackScreenController.swift +56 -0
  127. package/ios/utils/NSString+RNSUtility.h +17 -0
  128. package/ios/utils/NSString+RNSUtility.mm +37 -0
  129. package/lib/commonjs/components/BottomTabs.js +54 -0
  130. package/lib/commonjs/components/BottomTabs.js.map +1 -0
  131. package/lib/commonjs/components/BottomTabsScreen.js +149 -0
  132. package/lib/commonjs/components/BottomTabsScreen.js.map +1 -0
  133. package/lib/commonjs/components/gamma/ScreenStackHost.js +27 -0
  134. package/lib/commonjs/components/gamma/ScreenStackHost.js.map +1 -0
  135. package/lib/commonjs/components/gamma/SplitViewHost.js +57 -0
  136. package/lib/commonjs/components/gamma/SplitViewHost.js.map +1 -0
  137. package/lib/commonjs/components/gamma/SplitViewScreen.js +22 -0
  138. package/lib/commonjs/components/gamma/SplitViewScreen.js.map +1 -0
  139. package/lib/commonjs/components/gamma/StackScreen.js +51 -0
  140. package/lib/commonjs/components/gamma/StackScreen.js.map +1 -0
  141. package/lib/commonjs/fabric/BottomTabsNativeComponent.js +19 -0
  142. package/lib/commonjs/fabric/BottomTabsNativeComponent.js.map +1 -0
  143. package/lib/commonjs/fabric/BottomTabsScreenNativeComponent.js +14 -0
  144. package/lib/commonjs/fabric/BottomTabsScreenNativeComponent.js.map +1 -0
  145. package/lib/commonjs/fabric/gamma/ScreenStackHostNativeComponent.js +11 -0
  146. package/lib/commonjs/fabric/gamma/ScreenStackHostNativeComponent.js.map +1 -0
  147. package/lib/commonjs/fabric/gamma/SplitViewHostNativeComponent.js +11 -0
  148. package/lib/commonjs/fabric/gamma/SplitViewHostNativeComponent.js.map +1 -0
  149. package/lib/commonjs/fabric/gamma/SplitViewScreenNativeComponent.js +13 -0
  150. package/lib/commonjs/fabric/gamma/SplitViewScreenNativeComponent.js.map +1 -0
  151. package/lib/commonjs/fabric/gamma/StackScreenNativeComponent.js +12 -0
  152. package/lib/commonjs/fabric/gamma/StackScreenNativeComponent.js.map +1 -0
  153. package/lib/commonjs/flags.js +70 -0
  154. package/lib/commonjs/flags.js.map +1 -0
  155. package/lib/commonjs/index.js +66 -3
  156. package/lib/commonjs/index.js.map +1 -1
  157. package/lib/commonjs/utils.js +0 -28
  158. package/lib/commonjs/utils.js.map +1 -1
  159. package/lib/module/components/BottomTabs.js +48 -0
  160. package/lib/module/components/BottomTabs.js.map +1 -0
  161. package/lib/module/components/BottomTabsScreen.js +144 -0
  162. package/lib/module/components/BottomTabsScreen.js.map +1 -0
  163. package/lib/module/components/gamma/ScreenStackHost.js +20 -0
  164. package/lib/module/components/gamma/ScreenStackHost.js.map +1 -0
  165. package/lib/module/components/gamma/SplitViewHost.js +50 -0
  166. package/lib/module/components/gamma/SplitViewHost.js.map +1 -0
  167. package/lib/module/components/gamma/SplitViewScreen.js +15 -0
  168. package/lib/module/components/gamma/SplitViewScreen.js.map +1 -0
  169. package/lib/module/components/gamma/StackScreen.js +44 -0
  170. package/lib/module/components/gamma/StackScreen.js.map +1 -0
  171. package/lib/module/fabric/BottomTabsNativeComponent.js +15 -0
  172. package/lib/module/fabric/BottomTabsNativeComponent.js.map +1 -0
  173. package/lib/module/fabric/BottomTabsScreenNativeComponent.js +12 -0
  174. package/lib/module/fabric/BottomTabsScreenNativeComponent.js.map +1 -0
  175. package/lib/module/fabric/gamma/ScreenStackHostNativeComponent.js +5 -0
  176. package/lib/module/fabric/gamma/ScreenStackHostNativeComponent.js.map +1 -0
  177. package/lib/module/fabric/gamma/SplitViewHostNativeComponent.js +5 -0
  178. package/lib/module/fabric/gamma/SplitViewHostNativeComponent.js.map +1 -0
  179. package/lib/module/fabric/gamma/SplitViewScreenNativeComponent.js +7 -0
  180. package/lib/module/fabric/gamma/SplitViewScreenNativeComponent.js.map +1 -0
  181. package/lib/module/fabric/gamma/StackScreenNativeComponent.js +8 -0
  182. package/lib/module/fabric/gamma/StackScreenNativeComponent.js.map +1 -0
  183. package/lib/module/flags.js +64 -0
  184. package/lib/module/flags.js.map +1 -0
  185. package/lib/module/index.js +16 -1
  186. package/lib/module/index.js.map +1 -1
  187. package/lib/module/utils.js +0 -27
  188. package/lib/module/utils.js.map +1 -1
  189. package/lib/typescript/components/BottomTabs.d.ts +30 -0
  190. package/lib/typescript/components/BottomTabs.d.ts.map +1 -0
  191. package/lib/typescript/components/BottomTabsScreen.d.ts +56 -0
  192. package/lib/typescript/components/BottomTabsScreen.d.ts.map +1 -0
  193. package/lib/typescript/components/gamma/ScreenStackHost.d.ts +13 -0
  194. package/lib/typescript/components/gamma/ScreenStackHost.d.ts.map +1 -0
  195. package/lib/typescript/components/gamma/SplitViewHost.d.ts +13 -0
  196. package/lib/typescript/components/gamma/SplitViewHost.d.ts.map +1 -0
  197. package/lib/typescript/components/gamma/SplitViewScreen.d.ts +13 -0
  198. package/lib/typescript/components/gamma/SplitViewScreen.d.ts.map +1 -0
  199. package/lib/typescript/components/gamma/StackScreen.d.ts +21 -0
  200. package/lib/typescript/components/gamma/StackScreen.d.ts.map +1 -0
  201. package/lib/typescript/fabric/BottomTabsNativeComponent.d.ts +31 -0
  202. package/lib/typescript/fabric/BottomTabsNativeComponent.d.ts.map +1 -0
  203. package/lib/typescript/fabric/BottomTabsScreenNativeComponent.d.ts +51 -0
  204. package/lib/typescript/fabric/BottomTabsScreenNativeComponent.d.ts.map +1 -0
  205. package/lib/typescript/fabric/gamma/ScreenStackHostNativeComponent.d.ts +7 -0
  206. package/lib/typescript/fabric/gamma/ScreenStackHostNativeComponent.d.ts.map +1 -0
  207. package/lib/typescript/fabric/gamma/SplitViewHostNativeComponent.d.ts +16 -0
  208. package/lib/typescript/fabric/gamma/SplitViewHostNativeComponent.d.ts.map +1 -0
  209. package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts +7 -0
  210. package/lib/typescript/fabric/gamma/SplitViewScreenNativeComponent.d.ts.map +1 -0
  211. package/lib/typescript/fabric/gamma/StackScreenNativeComponent.d.ts +15 -0
  212. package/lib/typescript/fabric/gamma/StackScreenNativeComponent.d.ts.map +1 -0
  213. package/lib/typescript/flags.d.ts +45 -0
  214. package/lib/typescript/flags.d.ts.map +1 -0
  215. package/lib/typescript/index.d.ts +14 -1
  216. package/lib/typescript/index.d.ts.map +1 -1
  217. package/lib/typescript/utils.d.ts +0 -26
  218. package/lib/typescript/utils.d.ts.map +1 -1
  219. package/package.json +34 -6
  220. package/react-native.config.js +2 -1
  221. package/src/components/BottomTabs.tsx +115 -0
  222. package/src/components/BottomTabsScreen.tsx +291 -0
  223. package/src/components/gamma/ScreenStackHost.tsx +32 -0
  224. package/src/components/gamma/SplitViewHost.tsx +84 -0
  225. package/src/components/gamma/SplitViewScreen.tsx +26 -0
  226. package/src/components/gamma/StackScreen.tsx +64 -0
  227. package/src/fabric/BottomTabsNativeComponent.ts +82 -0
  228. package/src/fabric/BottomTabsScreenNativeComponent.ts +107 -0
  229. package/src/fabric/gamma/ScreenStackHostNativeComponent.ts +8 -0
  230. package/src/fabric/gamma/SplitViewHostNativeComponent.ts +39 -0
  231. package/src/fabric/gamma/SplitViewScreenNativeComponent.ts +10 -0
  232. package/src/fabric/gamma/StackScreenNativeComponent.ts +25 -0
  233. package/src/flags.ts +72 -0
  234. package/src/index.tsx +18 -1
  235. package/src/utils.ts +0 -28
@@ -0,0 +1,60 @@
1
+ #import "RNSStackScreenComponentEventEmitter.h"
2
+
3
+ #import <React/RCTConversions.h>
4
+ #import <React/RCTLog.h>
5
+ #import <react/renderer/components/rnscreens/EventEmitters.h>
6
+
7
+ @implementation RNSStackScreenComponentEventEmitter {
8
+ std::shared_ptr<const react::RNSStackScreenEventEmitter> _reactEventEmitter;
9
+ }
10
+
11
+ - (BOOL)emitOnWillAppear
12
+ {
13
+ if (_reactEventEmitter != nullptr) {
14
+ _reactEventEmitter->onWillAppear({});
15
+ return YES;
16
+ } else {
17
+ RCTLogWarn(@"[RNScreens] Skipped OnWillAppear event emission due to nullish emitter");
18
+ return NO;
19
+ }
20
+ }
21
+
22
+ - (BOOL)emitOnDidAppear
23
+ {
24
+ if (_reactEventEmitter != nullptr) {
25
+ _reactEventEmitter->onDidAppear({});
26
+ return YES;
27
+ } else {
28
+ RCTLogWarn(@"[RNScreens] Skipped OnDidAppear event emission due to nullish emitter");
29
+ return NO;
30
+ }
31
+ }
32
+
33
+ - (BOOL)emitOnWillDisappear
34
+ {
35
+ if (_reactEventEmitter != nullptr) {
36
+ _reactEventEmitter->onWillDisappear({});
37
+ return YES;
38
+ } else {
39
+ RCTLogWarn(@"[RNScreens] Skipped OnWillDisappear event emission due to nullish emitter");
40
+ return NO;
41
+ }
42
+ }
43
+
44
+ - (BOOL)emitOnDidDisappear
45
+ {
46
+ if (_reactEventEmitter != nullptr) {
47
+ _reactEventEmitter->onDidDisappear({});
48
+ return YES;
49
+ } else {
50
+ RCTLogWarn(@"[RNScreens] Skipped OnDidDisappear event emission due to nullish emitter");
51
+ return NO;
52
+ }
53
+ }
54
+
55
+ - (void)updateEventEmitter:(const std::shared_ptr<const react::RNSStackScreenEventEmitter> &)emitter
56
+ {
57
+ _reactEventEmitter = emitter;
58
+ }
59
+
60
+ @end
@@ -0,0 +1,36 @@
1
+ #import "RNSReactBaseView.h"
2
+ #import "RNSStackScreenComponentEventEmitter.h"
3
+
4
+ NS_ASSUME_NONNULL_BEGIN
5
+
6
+ @class RNSStackScreenController;
7
+ @class RNSScreenStackHostComponentView;
8
+
9
+ typedef NS_ENUM(int, RNSScreenStackLifecycleState) {
10
+ RNSScreenStackLifecycleInitial = 0,
11
+ RNSScreenStackLifecycleDetached = 1,
12
+ RNSScreenStackLifecycleAttached = 2,
13
+ };
14
+
15
+ @interface RNSStackScreenComponentView : RNSReactBaseView
16
+
17
+ @property (nonatomic, weak, readwrite, nullable) RNSScreenStackHostComponentView *stackHost;
18
+ @property (nonatomic, strong, readonly, nonnull) RNSStackScreenController *controller;
19
+
20
+ @property (nonatomic, strong, readonly, nullable) NSString *screenKey;
21
+ @property (nonatomic, readonly) RNSScreenStackLifecycleState maxLifecycleState;
22
+
23
+ @end
24
+
25
+ #pragma mark - Events
26
+
27
+ @interface RNSStackScreenComponentView ()
28
+
29
+ /**
30
+ * Use returned object to emit appropriate React Events to Element Tree.
31
+ */
32
+ - (nonnull RNSStackScreenComponentEventEmitter *)reactEventEmitter;
33
+
34
+ @end
35
+
36
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,124 @@
1
+ #import "RNSStackScreenComponentView.h"
2
+ #import <React/RCTConversions.h>
3
+ #import <React/RCTMountingTransactionObserving.h>
4
+ #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
5
+ #import <react/renderer/components/rnscreens/EventEmitters.h>
6
+ #import <react/renderer/components/rnscreens/Props.h>
7
+ #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
8
+
9
+ #import "Swift-Bridging.h"
10
+
11
+ namespace react = facebook::react;
12
+
13
+ @interface RNSStackScreenComponentView () <RCTMountingTransactionObserving>
14
+ @end
15
+
16
+ #pragma mark - View implementation
17
+
18
+ @implementation RNSStackScreenComponentView {
19
+ RNSStackScreenController *_Nonnull _controller;
20
+ RNSStackScreenComponentEventEmitter *_Nonnull _reactEventEmitter;
21
+
22
+ // Flags
23
+ BOOL _needsLifecycleStateUpdate;
24
+ }
25
+
26
+ - (instancetype)initWithFrame:(CGRect)frame
27
+ {
28
+ if (self = [super initWithFrame:frame]) {
29
+ [self initState];
30
+ }
31
+
32
+ return self;
33
+ }
34
+
35
+ - (void)initState
36
+ {
37
+ [self resetProps];
38
+ [self setupController];
39
+
40
+ _reactEventEmitter = [RNSStackScreenComponentEventEmitter new];
41
+
42
+ _needsLifecycleStateUpdate = NO;
43
+ }
44
+
45
+ - (void)resetProps
46
+ {
47
+ static const auto defaultProps = std::make_shared<const react::RNSScreenStackProps>();
48
+ _props = defaultProps;
49
+
50
+ // container state
51
+ _screenKey = nil;
52
+ _maxLifecycleState = RNSScreenStackLifecycleInitial;
53
+ }
54
+
55
+ - (void)setupController
56
+ {
57
+ _controller = [[RNSStackScreenController alloc] initWithComponentView:self];
58
+ _controller.view = self;
59
+ }
60
+
61
+ #pragma mark - Events
62
+
63
+ - (nonnull RNSStackScreenComponentEventEmitter *)reactEventEmitter
64
+ {
65
+ RCTAssert(_reactEventEmitter != nil, @"[RNScreens] Attempt to access uninitialized _reactEventEmitter");
66
+ return _reactEventEmitter;
67
+ }
68
+
69
+ #pragma mark - RCTViewComponentViewProtocol
70
+
71
+ - (void)updateProps:(const facebook::react::Props::Shared &)props
72
+ oldProps:(const facebook::react::Props::Shared &)oldProps
73
+ {
74
+ const auto &oldComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(_props);
75
+ const auto &newComponentProps = *std::static_pointer_cast<const react::RNSStackScreenProps>(props);
76
+
77
+ if (oldComponentProps.maxLifecycleState != newComponentProps.maxLifecycleState) {
78
+ _maxLifecycleState = static_cast<RNSScreenStackLifecycleState>(newComponentProps.maxLifecycleState);
79
+ _needsLifecycleStateUpdate = YES;
80
+ }
81
+
82
+ if (oldComponentProps.screenKey != newComponentProps.screenKey) {
83
+ RCTAssert(_screenKey == nil, @"[RNScreens] ScreenController cannot change its screenKey");
84
+ _screenKey = RCTNSStringFromStringNilIfEmpty(newComponentProps.screenKey);
85
+ }
86
+
87
+ [super updateProps:props oldProps:oldProps];
88
+ }
89
+
90
+ - (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask
91
+ {
92
+ if (_needsLifecycleStateUpdate) {
93
+ _needsLifecycleStateUpdate = NO;
94
+ [_controller setNeedsLifecycleStateUpdate];
95
+ }
96
+
97
+ [super finalizeUpdates:updateMask];
98
+ }
99
+
100
+ - (void)updateEventEmitter:(const facebook::react::EventEmitter::Shared &)eventEmitter
101
+ {
102
+ [super updateEventEmitter:eventEmitter];
103
+ [_reactEventEmitter
104
+ updateEventEmitter:std::static_pointer_cast<const react::RNSStackScreenEventEmitter>(eventEmitter)];
105
+ }
106
+
107
+ + (react::ComponentDescriptorProvider)componentDescriptorProvider
108
+ {
109
+ return react::concreteComponentDescriptorProvider<react::RNSStackScreenComponentDescriptor>();
110
+ }
111
+
112
+ + (BOOL)shouldBeRecycled
113
+ {
114
+ // There won't be tens of instances of this component usually & it's easier for now.
115
+ // We could consider enabling it someday though.
116
+ return NO;
117
+ }
118
+
119
+ @end
120
+
121
+ Class<RCTComponentViewProtocol> RNSStackScreenCls(void)
122
+ {
123
+ return RNSStackScreenComponentView.class;
124
+ }
@@ -0,0 +1,11 @@
1
+ #pragma once
2
+
3
+ #import <React/RCTViewManager.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @interface RNSStackScreenComponentViewManager : RCTViewManager
8
+
9
+ @end
10
+
11
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,7 @@
1
+ #import "RNSStackScreenComponentViewManager.h"
2
+
3
+ @implementation RNSStackScreenComponentViewManager
4
+
5
+ RCT_EXPORT_MODULE(RNSStackScreenViewManager)
6
+
7
+ @end
@@ -0,0 +1,56 @@
1
+ import Foundation
2
+ import UIKit
3
+
4
+ @objc
5
+ public class RNSStackScreenController: UIViewController {
6
+ let screenStackComponentView: RNSStackScreenComponentView
7
+ private var reactEventEmitter: RNSStackScreenComponentEventEmitter {
8
+ return screenStackComponentView.reactEventEmitter()
9
+ }
10
+
11
+ @objc public required init(componentView: RNSStackScreenComponentView) {
12
+ self.screenStackComponentView = componentView
13
+ super.init(nibName: nil, bundle: nil)
14
+ }
15
+
16
+ required init?(coder aDecoder: NSCoder) {
17
+ return nil
18
+ }
19
+
20
+ func findStackController() -> RNSStackController? {
21
+ if let navCtrl = self.navigationController {
22
+ return navCtrl as? RNSStackController
23
+ }
24
+
25
+ if let stackHost = self.screenStackComponentView.stackHost {
26
+ return stackHost.stackController
27
+ }
28
+
29
+ return nil
30
+ }
31
+
32
+ // MARK: Signals
33
+
34
+ @objc
35
+ public func setNeedsLifecycleStateUpdate() {
36
+ findStackController()?.setNeedsUpdateOfChildViewControllers()
37
+ }
38
+
39
+ // MARK: Events
40
+
41
+ public override func viewWillAppear(_ animated: Bool) {
42
+ reactEventEmitter.emitOnWillAppear()
43
+ }
44
+
45
+ public override func viewDidAppear(_ animated: Bool) {
46
+ reactEventEmitter.emitOnDidAppear()
47
+ }
48
+
49
+ public override func viewWillDisappear(_ animated: Bool) {
50
+ reactEventEmitter.emitOnWillDisappear()
51
+ }
52
+
53
+ public override func viewDidDisappear(_ animated: Bool) {
54
+ reactEventEmitter.emitOnDidDisappear()
55
+ }
56
+ }
@@ -0,0 +1,17 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ @interface NSString (RNSUtility)
6
+
7
+ + (BOOL)rnscreens_isBlankOrNull:(NSString *)string;
8
+
9
+ + (nullable NSString *)rnscreens_stringOrNilIfBlank:(NSString *)string;
10
+
11
+ + (BOOL)rnscreens_isEmptyOrNull:(NSString *)string;
12
+
13
+ + (nullable NSString *)rnscreens_stringOrNilIfEmpty:(NSString *)string;
14
+
15
+ @end
16
+
17
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,37 @@
1
+ #import "NSString+RNSUtility.h"
2
+
3
+ @implementation NSString (RNSUtility)
4
+
5
+ + (BOOL)rnscreens_isBlankOrNull:(NSString *)string
6
+ {
7
+ if (string == nil) {
8
+ return YES;
9
+ }
10
+ return [[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0;
11
+ }
12
+
13
+ + (BOOL)rnscreens_isEmptyOrNull:(NSString *)string
14
+ {
15
+ if (string == nil) {
16
+ return YES;
17
+ }
18
+ return [string length] == 0;
19
+ }
20
+
21
+ + (nullable NSString *)rnscreens_stringOrNilIfBlank:(NSString *)string
22
+ {
23
+ if ([NSString rnscreens_isBlankOrNull:string]) {
24
+ return nil;
25
+ }
26
+ return string;
27
+ }
28
+
29
+ + (nullable NSString *)rnscreens_stringOrNilIfEmpty:(NSString *)string
30
+ {
31
+ if ([NSString rnscreens_isEmptyOrNull:string]) {
32
+ return nil;
33
+ }
34
+ return string;
35
+ }
36
+
37
+ @end
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _BottomTabsNativeComponent = _interopRequireDefault(require("../fabric/BottomTabsNativeComponent"));
10
+ var _reactNative = require("react-native");
11
+ var _flags = _interopRequireDefault(require("../flags"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
14
+ /**
15
+ * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
16
+ */
17
+ function BottomTabs(props) {
18
+ console.info(`BottomTabs render`);
19
+ const {
20
+ onNativeFocusChange,
21
+ experimentalControlNavigationStateInJS = _flags.default.experiment.controlledBottomTabs,
22
+ ...filteredProps
23
+ } = props;
24
+ const componentNodeRef = _react.default.useRef(null);
25
+ const componentNodeHandle = _react.default.useRef(-1);
26
+ _react.default.useEffect(() => {
27
+ if (componentNodeRef.current != null) {
28
+ componentNodeHandle.current = (0, _reactNative.findNodeHandle)(componentNodeRef.current) ?? -1;
29
+ } else {
30
+ componentNodeHandle.current = -1;
31
+ }
32
+ }, []);
33
+ const onNativeFocusChangeCallback = _react.default.useCallback(event => {
34
+ console.log(`BottomTabs [${componentNodeHandle.current ?? -1}] onNativeFocusChange: ${JSON.stringify(event.nativeEvent)}`);
35
+ onNativeFocusChange?.(event);
36
+ }, [onNativeFocusChange]);
37
+ return /*#__PURE__*/_react.default.createElement(_BottomTabsNativeComponent.default, _extends({
38
+ style: styles.fillParent,
39
+ onNativeFocusChange: onNativeFocusChangeCallback,
40
+ controlNavigationStateInJS: experimentalControlNavigationStateInJS
41
+ // @ts-ignore suppress ref - debug only
42
+ ,
43
+ ref: componentNodeRef
44
+ }, filteredProps), filteredProps.children);
45
+ }
46
+ var _default = exports.default = BottomTabs;
47
+ const styles = _reactNative.StyleSheet.create({
48
+ fillParent: {
49
+ flex: 1,
50
+ width: '100%',
51
+ height: '100%'
52
+ }
53
+ });
54
+ //# sourceMappingURL=BottomTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Object","defineProperty","exports","value","default","_react","_interopRequireDefault","require","_BottomTabsNativeComponent","_reactNative","_flags","e","__esModule","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BottomTabs","props","console","info","onNativeFocusChange","experimentalControlNavigationStateInJS","featureFlags","experiment","controlledBottomTabs","filteredProps","componentNodeRef","React","useRef","componentNodeHandle","useEffect","current","findNodeHandle","onNativeFocusChangeCallback","useCallback","event","log","JSON","stringify","nativeEvent","createElement","style","styles","fillParent","controlNavigationStateInJS","ref","children","_default","StyleSheet","create","flex","width","height"],"sourceRoot":"../../../src","sources":["components/BottomTabs.tsx"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AAEb,IAAAC,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAF,sBAAA,CAAAC,OAAA;AAKA,IAAAE,YAAA,GAAAF,OAAA;AAQA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAoC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAP,OAAA,EAAAO,CAAA;AAAA,SAAAE,SAAA,WAAAA,QAAA,GAAAb,MAAA,CAAAc,MAAA,GAAAd,MAAA,CAAAc,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAL,CAAA,MAAAA,CAAA,GAAAM,SAAA,CAAAC,MAAA,EAAAP,CAAA,UAAAQ,CAAA,GAAAF,SAAA,CAAAN,CAAA,YAAAS,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAH,QAAA,CAAAU,KAAA,OAAAN,SAAA;AAuCpC;AACA;AACA;AACA,SAASO,UAAUA,CAACC,KAAsB,EAAE;EAC1CC,OAAO,CAACC,IAAI,CAAC,mBAAmB,CAAC;EAEjC,MAAM;IACJC,mBAAmB;IACnBC,sCAAsC,GAAGC,cAAY,CAACC,UAAU,CAC7DC,oBAAoB;IACvB,GAAGC;EACL,CAAC,GAAGR,KAAK;EAET,MAAMS,gBAAgB,GACpBC,cAAK,CAACC,MAAM,CAAkD,IAAI,CAAC;EACrE,MAAMC,mBAAmB,GAAGF,cAAK,CAACC,MAAM,CAAS,CAAC,CAAC,CAAC;EAEpDD,cAAK,CAACG,SAAS,CAAC,MAAM;IACpB,IAAIJ,gBAAgB,CAACK,OAAO,IAAI,IAAI,EAAE;MACpCF,mBAAmB,CAACE,OAAO,GACzB,IAAAC,2BAAc,EAACN,gBAAgB,CAACK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,MAAM;MACLF,mBAAmB,CAACE,OAAO,GAAG,CAAC,CAAC;IAClC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,2BAA2B,GAAGN,cAAK,CAACO,WAAW,CAClDC,KAAmD,IAAK;IACvDjB,OAAO,CAACkB,GAAG,CACT,eACEP,mBAAmB,CAACE,OAAO,IAAI,CAAC,CAAC,0BACTM,IAAI,CAACC,SAAS,CAACH,KAAK,CAACI,WAAW,CAAC,EAC7D,CAAC;IACDnB,mBAAmB,GAAGe,KAAK,CAAC;EAC9B,CAAC,EACD,CAACf,mBAAmB,CACtB,CAAC;EAED,oBACEvB,MAAA,CAAAD,OAAA,CAAA4C,aAAA,CAACxC,0BAAA,CAAAJ,OAAyB,EAAAS,QAAA;IACxBoC,KAAK,EAAEC,MAAM,CAACC,UAAW;IACzBvB,mBAAmB,EAAEa,2BAA4B;IACjDW,0BAA0B,EAAEvB;IAC5B;IAAA;IACAwB,GAAG,EAAEnB;EAAiB,GAClBD,aAAa,GAChBA,aAAa,CAACqB,QACU,CAAC;AAEhC;AAAC,IAAAC,QAAA,GAAArD,OAAA,CAAAE,OAAA,GAEcoB,UAAU;AAEzB,MAAM0B,MAAM,GAAGM,uBAAU,CAACC,MAAM,CAAC;EAC/BN,UAAU,EAAE;IACVO,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _BottomTabsScreenNativeComponent = _interopRequireDefault(require("../fabric/BottomTabsScreenNativeComponent"));
10
+ var _reactNative = require("react-native");
11
+ var _reactFreeze = require("react-freeze");
12
+ var _core = require("../core");
13
+ var _flags = require("../flags");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16
+ // iOS-specific: SFSymbol usage
17
+
18
+ // iOS-specific: image as a template usage
19
+
20
+ // iOS-specific: SFSymbol, image as a template usage
21
+
22
+ /**
23
+ * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
24
+ */
25
+ function BottomTabsScreen(props) {
26
+ const componentNodeRef = _react.default.useRef(null);
27
+ const componentNodeHandle = _react.default.useRef(-1);
28
+ _react.default.useEffect(() => {
29
+ if (componentNodeRef.current != null) {
30
+ componentNodeHandle.current = (0, _reactNative.findNodeHandle)(componentNodeRef.current) ?? -1;
31
+ } else {
32
+ componentNodeHandle.current = -1;
33
+ }
34
+ }, []);
35
+ const [nativeViewIsVisible, setNativeViewIsVisible] = _react.default.useState(false);
36
+ const {
37
+ onWillAppear,
38
+ onDidAppear,
39
+ onWillDisappear,
40
+ onDidDisappear,
41
+ isFocused = false,
42
+ icon,
43
+ selectedIcon,
44
+ ...rest
45
+ } = props;
46
+ let shouldFreeze = (0, _core.freezeEnabled)();
47
+ if (_flags.featureFlags.experiment.controlledBottomTabs) {
48
+ // If the tabs are JS controlled, we want to freeze only when given view is not focused && it is not currently visible
49
+ shouldFreeze = shouldFreeze && !nativeViewIsVisible && !isFocused;
50
+ } else {
51
+ shouldFreeze = shouldFreeze && !nativeViewIsVisible;
52
+ }
53
+ const onWillAppearCallback = _react.default.useCallback(event => {
54
+ console.log(`TabsScreen [${componentNodeHandle.current}] onWillAppear received`);
55
+ setNativeViewIsVisible(true);
56
+ onWillAppear?.(event);
57
+ }, [onWillAppear]);
58
+ const onDidAppearCallback = _react.default.useCallback(event => {
59
+ console.log(`TabsScreen [${componentNodeHandle.current}] onDidAppear received`);
60
+ onDidAppear?.(event);
61
+ }, [onDidAppear]);
62
+ const onWillDisappearCallback = _react.default.useCallback(event => {
63
+ console.log(`TabsScreen [${componentNodeHandle.current}] onWillDisappear received`);
64
+ onWillDisappear?.(event);
65
+ }, [onWillDisappear]);
66
+ const onDidDisappearCallback = _react.default.useCallback(event => {
67
+ console.log(`TabsScreen [${componentNodeHandle.current}] onDidDisappear received`);
68
+ setNativeViewIsVisible(false);
69
+ onDidDisappear?.(event);
70
+ }, [onDidDisappear]);
71
+ console.info(`TabsScreen [${componentNodeHandle.current ?? -1}] render; tabKey: ${rest.tabKey} shouldFreeze: ${shouldFreeze}, isFocused: ${isFocused} nativeViewIsVisible: ${nativeViewIsVisible}`);
72
+ const iconProps = parseIconsToNativeProps(icon, selectedIcon);
73
+ return /*#__PURE__*/_react.default.createElement(_BottomTabsScreenNativeComponent.default, _extends({
74
+ collapsable: false,
75
+ style: styles.fillParent,
76
+ onWillAppear: onWillAppearCallback,
77
+ onDidAppear: onDidAppearCallback,
78
+ onWillDisappear: onWillDisappearCallback,
79
+ onDidDisappear: onDidDisappearCallback,
80
+ isFocused: isFocused
81
+ }, iconProps, {
82
+ // @ts-ignore - This is debug only anyway
83
+ ref: componentNodeRef
84
+ }, rest), /*#__PURE__*/_react.default.createElement(_reactFreeze.Freeze, {
85
+ freeze: shouldFreeze,
86
+ placeholder: rest.placeholder
87
+ }, rest.children));
88
+ }
89
+ function parseIconToNativeProps(icon) {
90
+ if (!icon) {
91
+ return {};
92
+ }
93
+ if ('sfSymbolName' in icon) {
94
+ // iOS-specific: SFSymbol usage
95
+ return {
96
+ iconType: 'sfSymbol',
97
+ iconSfSymbolName: icon.sfSymbolName
98
+ };
99
+ } else if ('imageSource' in icon) {
100
+ return {
101
+ iconType: 'image',
102
+ iconImageSource: icon.imageSource
103
+ };
104
+ } else if ('templateSource' in icon) {
105
+ // iOS-specifig: image as a template usage
106
+ return {
107
+ iconType: 'template',
108
+ iconImageSource: icon.templateSource
109
+ };
110
+ } else {
111
+ // iOS-specific: SFSymbol, image as a template usage
112
+ throw new Error('[RNScreens] Incorrect icon format. You must provide sfSymbolName, imageSource or templateSource.');
113
+ }
114
+ }
115
+ function parseIconsToNativeProps(icon, selectedIcon) {
116
+ const {
117
+ iconImageSource,
118
+ iconSfSymbolName,
119
+ iconType
120
+ } = parseIconToNativeProps(icon);
121
+ const {
122
+ iconImageSource: selectedIconImageSource,
123
+ iconSfSymbolName: selectedIconSfSymbolName,
124
+ iconType: selectedIconType
125
+ } = parseIconToNativeProps(selectedIcon);
126
+ if (iconType !== undefined && selectedIconType !== undefined && iconType !== selectedIconType) {
127
+ throw new Error('[RNScreens] icon and selectedIcon must be same type.');
128
+ } else if (iconType === undefined && selectedIconType !== undefined) {
129
+ // iOS-specific: UIKit requirement
130
+ throw new Error('[RNScreens] To use selectedIcon prop, the icon prop must also be provided.');
131
+ }
132
+ return {
133
+ iconType,
134
+ iconImageSource,
135
+ iconSfSymbolName,
136
+ selectedIconImageSource,
137
+ selectedIconSfSymbolName
138
+ };
139
+ }
140
+ var _default = exports.default = BottomTabsScreen;
141
+ const styles = _reactNative.StyleSheet.create({
142
+ fillParent: {
143
+ position: 'absolute',
144
+ flex: 1,
145
+ width: '100%',
146
+ height: '100%'
147
+ }
148
+ });
149
+ //# sourceMappingURL=BottomTabsScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Object","defineProperty","exports","value","default","_react","_interopRequireDefault","require","_BottomTabsScreenNativeComponent","_reactNative","_reactFreeze","_core","_flags","e","__esModule","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BottomTabsScreen","props","componentNodeRef","React","useRef","componentNodeHandle","useEffect","current","findNodeHandle","nativeViewIsVisible","setNativeViewIsVisible","useState","onWillAppear","onDidAppear","onWillDisappear","onDidDisappear","isFocused","icon","selectedIcon","rest","shouldFreeze","freezeEnabled","featureFlags","experiment","controlledBottomTabs","onWillAppearCallback","useCallback","event","console","log","onDidAppearCallback","onWillDisappearCallback","onDidDisappearCallback","info","tabKey","iconProps","parseIconsToNativeProps","createElement","collapsable","style","styles","fillParent","ref","Freeze","freeze","placeholder","children","parseIconToNativeProps","iconType","iconSfSymbolName","sfSymbolName","iconImageSource","imageSource","templateSource","Error","selectedIconImageSource","selectedIconSfSymbolName","selectedIconType","undefined","_default","StyleSheet","create","position","flex","width","height"],"sourceRoot":"../../../src","sources":["components/BottomTabsScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _ScreenStackHostNativeComponent = _interopRequireDefault(require("../../fabric/gamma/ScreenStackHostNativeComponent"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
13
+ */
14
+ function ScreenStackHost({
15
+ children
16
+ }) {
17
+ return /*#__PURE__*/_react.default.createElement(_ScreenStackHostNativeComponent.default, {
18
+ style: styles.container
19
+ }, children);
20
+ }
21
+ const styles = _reactNative.StyleSheet.create({
22
+ container: {
23
+ flex: 1
24
+ }
25
+ });
26
+ var _default = exports.default = ScreenStackHost;
27
+ //# sourceMappingURL=ScreenStackHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ScreenStackHostNativeComponent","e","__esModule","default","ScreenStackHost","children","createElement","style","styles","container","StyleSheet","create","flex","_default","exports"],"sourceRoot":"../../../../src","sources":["components/gamma/ScreenStackHost.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,+BAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA+F,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAU/F;AACA;AACA;AACA,SAASG,eAAeA,CAAC;EAAEC;AAA+B,CAAC,EAAE;EAC3D,oBACET,MAAA,CAAAO,OAAA,CAAAG,aAAA,CAACN,+BAAA,CAAAG,OAA8B;IAACI,KAAK,EAAEC,MAAM,CAACC;EAAU,GACrDJ,QAC6B,CAAC;AAErC;AAEA,MAAMG,MAAM,GAAGE,uBAAU,CAACC,MAAM,CAAC;EAC/BF,SAAS,EAAE;IACTG,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAX,OAAA,GAEYC,eAAe","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _SplitViewHostNativeComponent = _interopRequireDefault(require("../../fabric/gamma/SplitViewHostNativeComponent"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
12
+ // According to the UIKit documentation: https://developer.apple.com/documentation/uikit/uisplitviewcontroller/displaymode-swift.enum
13
+ // Only specific pairs for displayMode - splitBehavior are valid and others may lead to unexpected results.
14
+ // Therefore, we're adding check on the JS side to return a feedback to the client when that pairing isn't valid.
15
+ // However, we're not blocking these props to be set on the native side, because it doesn't crash, just the result or transitions may not work as expected.
16
+ const displayModeForSplitViewCompatibilityMap = {
17
+ tile: ['secondaryOnly', 'oneBesideSecondary', 'twoBesideSecondary'],
18
+ overlay: ['secondaryOnly', 'oneOverSecondary', 'twoOverSecondary'],
19
+ displace: ['secondaryOnly', 'oneBesideSecondary', 'twoDisplaceSecondary'],
20
+ automatic: [] // placeholder for satisfying types; we'll handle it specially in logic
21
+ };
22
+ const isValidDisplayModeForSplitBehavior = (displayMode, splitBehavior) => {
23
+ if (splitBehavior === 'automatic') {
24
+ // for automatic we cannot easily verify the compatibility, because it depends on the system preference for display mode, therefore we're assuming that 'automatic' has only valid combinations
25
+ return true;
26
+ }
27
+ return displayModeForSplitViewCompatibilityMap[splitBehavior].includes(displayMode);
28
+ };
29
+
30
+ /**
31
+ * EXPERIMENTAL API, MIGHT CHANGE W/O ANY NOTICE
32
+ */
33
+ function SplitViewHost(props) {
34
+ const {
35
+ displayMode,
36
+ splitBehavior
37
+ } = props;
38
+ _react.default.useEffect(() => {
39
+ if (displayMode && splitBehavior) {
40
+ const isValid = isValidDisplayModeForSplitBehavior(displayMode, splitBehavior);
41
+ if (!isValid) {
42
+ const validDisplayModes = displayModeForSplitViewCompatibilityMap[splitBehavior];
43
+ console.warn(`Invalid display mode "${displayMode}" for split behavior "${splitBehavior}".` + `\nValid modes for "${splitBehavior}" are: ${validDisplayModes.join(', ')}.`);
44
+ }
45
+ }
46
+ }, [displayMode, splitBehavior]);
47
+ return /*#__PURE__*/_react.default.createElement(_SplitViewHostNativeComponent.default, _extends({}, props, {
48
+ style: styles.container
49
+ }), props.children);
50
+ }
51
+ const styles = _reactNative.StyleSheet.create({
52
+ container: {
53
+ flex: 1
54
+ }
55
+ });
56
+ var _default = exports.default = SplitViewHost;
57
+ //# sourceMappingURL=SplitViewHost.js.map