react-native-screens 3.10.1 → 3.12.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 (128) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +13 -7
  3. package/RNScreens.podspec +36 -6
  4. package/android/build.gradle +74 -3
  5. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +28 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +11 -2
  8. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +52 -21
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +64 -33
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +9 -31
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +0 -30
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +12 -5
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +83 -18
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +17 -5
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +14 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +41 -14
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
  19. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +18 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +7 -2
  21. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +29 -2
  22. package/android/src/main/jni/Android.mk +45 -0
  23. package/android/src/main/jni/OnLoad.cpp +9 -0
  24. package/android/src/main/jni/RNScreensComponentsRegistry.cpp +66 -0
  25. package/android/src/main/jni/RNScreensComponentsRegistry.h +34 -0
  26. package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
  27. package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
  28. package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
  29. package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
  30. package/android/src/main/res/anim/rns_fade_in.xml +7 -0
  31. package/android/src/main/res/anim/rns_fade_out.xml +7 -0
  32. package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
  33. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +71 -0
  34. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +30 -0
  35. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +104 -0
  36. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +41 -0
  37. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
  38. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
  39. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
  40. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
  41. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +16 -0
  42. package/common/cpp/Android.mk +38 -0
  43. package/common/cpp/rnscreens/RNSScreenComponentDescriptor.h +41 -0
  44. package/common/cpp/rnscreens/RNSScreenShadowNode.cpp +9 -0
  45. package/common/cpp/rnscreens/RNSScreenShadowNode.h +29 -0
  46. package/common/cpp/rnscreens/RNSScreenState.cpp +14 -0
  47. package/common/cpp/rnscreens/RNSScreenState.h +46 -0
  48. package/createNativeStackNavigator/README.md +12 -0
  49. package/ios/RNSScreen.h +10 -0
  50. package/ios/RNSScreen.m +34 -0
  51. package/ios/RNSScreenComponentView.h +23 -0
  52. package/ios/RNSScreenComponentView.mm +159 -0
  53. package/ios/RNSScreenContainer.m +5 -0
  54. package/ios/RNSScreenController.h +10 -0
  55. package/ios/RNSScreenController.mm +79 -0
  56. package/ios/RNSScreenStack.m +22 -7
  57. package/ios/RNSScreenStackAnimator.m +45 -14
  58. package/ios/RNSScreenStackComponentView.h +15 -0
  59. package/ios/RNSScreenStackComponentView.mm +295 -0
  60. package/ios/RNSScreenStackHeaderConfig.m +4 -1
  61. package/ios/RNSScreenStackHeaderConfigComponentView.h +42 -0
  62. package/ios/RNSScreenStackHeaderConfigComponentView.mm +662 -0
  63. package/ios/RNSScreenStackHeaderSubviewComponentView.h +14 -0
  64. package/ios/RNSScreenStackHeaderSubviewComponentView.mm +77 -0
  65. package/ios/RNSScreenWindowTraits.h +1 -0
  66. package/ios/RNSScreenWindowTraits.m +20 -0
  67. package/ios/UIViewController+RNScreens.m +10 -0
  68. package/ios/utils/RNSUIBarButtonItem.h +5 -0
  69. package/ios/utils/RNSUIBarButtonItem.mm +22 -0
  70. package/lib/commonjs/fabric/Screen.js +27 -0
  71. package/lib/commonjs/fabric/Screen.js.map +1 -0
  72. package/lib/commonjs/fabric/ScreenNativeComponent.js +23 -0
  73. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
  74. package/lib/commonjs/fabric/ScreenStack.js +27 -0
  75. package/lib/commonjs/fabric/ScreenStack.js.map +1 -0
  76. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +27 -0
  77. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  78. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +34 -0
  79. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -0
  80. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +27 -0
  81. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  82. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +21 -0
  83. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
  84. package/lib/commonjs/fabric/index.js +40 -0
  85. package/lib/commonjs/fabric/index.js.map +1 -0
  86. package/lib/commonjs/index.native.js +32 -15
  87. package/lib/commonjs/index.native.js.map +1 -1
  88. package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
  89. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  90. package/lib/module/fabric/Screen.js +11 -0
  91. package/lib/module/fabric/Screen.js.map +1 -0
  92. package/lib/module/fabric/ScreenNativeComponent.js +11 -0
  93. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
  94. package/lib/module/fabric/ScreenStack.js +12 -0
  95. package/lib/module/fabric/ScreenStack.js.map +1 -0
  96. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -0
  97. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  98. package/lib/module/fabric/ScreenStackHeaderSubview.js +21 -0
  99. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -0
  100. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +10 -0
  101. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  102. package/lib/module/fabric/ScreenStackNativeComponent.js +9 -0
  103. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
  104. package/lib/module/fabric/index.js +6 -0
  105. package/lib/module/fabric/index.js.map +1 -0
  106. package/lib/module/index.native.js +32 -15
  107. package/lib/module/index.native.js.map +1 -1
  108. package/lib/module/native-stack/views/NativeStackView.js +33 -4
  109. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  110. package/lib/typescript/native-stack/types.d.ts +34 -0
  111. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  112. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  113. package/lib/typescript/types.d.ts +60 -5
  114. package/native-stack/README.md +39 -3
  115. package/package.json +17 -3
  116. package/reanimated/package.json +6 -0
  117. package/src/fabric/Screen.js +12 -0
  118. package/src/fabric/ScreenNativeComponent.js +64 -0
  119. package/src/fabric/ScreenStack.js +8 -0
  120. package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +54 -0
  121. package/src/fabric/ScreenStackHeaderSubview.js +20 -0
  122. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.js +31 -0
  123. package/src/fabric/ScreenStackNativeComponent.js +19 -0
  124. package/src/fabric/index.js +11 -0
  125. package/src/index.native.tsx +35 -14
  126. package/src/native-stack/types.tsx +34 -0
  127. package/src/native-stack/views/NativeStackView.tsx +33 -4
  128. package/src/types.tsx +60 -5
@@ -0,0 +1,104 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ColorPropConverter;
15
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
17
+
18
+ public class RNSScreenStackHeaderConfigManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNSScreenStackHeaderConfigManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
19
+ public RNSScreenStackHeaderConfigManagerDelegate(U viewManager) {
20
+ super(viewManager);
21
+ }
22
+ @Override
23
+ public void setProperty(T view, String propName, @Nullable Object value) {
24
+ switch (propName) {
25
+ case "backgroundColor":
26
+ mViewManager.setBackgroundColor(view, ColorPropConverter.getColor(value, view.getContext()));
27
+ break;
28
+ case "backTitle":
29
+ mViewManager.setBackTitle(view, value == null ? null : (String) value);
30
+ break;
31
+ case "backTitleFontFamily":
32
+ mViewManager.setBackTitleFontFamily(view, value == null ? null : (String) value);
33
+ break;
34
+ case "backTitleFontSize":
35
+ mViewManager.setBackTitleFontSize(view, value == null ? 0 : ((Double) value).intValue());
36
+ break;
37
+ case "color":
38
+ mViewManager.setColor(view, ColorPropConverter.getColor(value, view.getContext()));
39
+ break;
40
+ case "direction":
41
+ mViewManager.setDirection(view, (String) value);
42
+ break;
43
+ case "hidden":
44
+ mViewManager.setHidden(view, value == null ? false : (boolean) value);
45
+ break;
46
+ case "hideShadow":
47
+ mViewManager.setHideShadow(view, value == null ? false : (boolean) value);
48
+ break;
49
+ case "largeTitle":
50
+ mViewManager.setLargeTitle(view, value == null ? false : (boolean) value);
51
+ break;
52
+ case "largeTitleFontFamily":
53
+ mViewManager.setLargeTitleFontFamily(view, value == null ? null : (String) value);
54
+ break;
55
+ case "largeTitleFontSize":
56
+ mViewManager.setLargeTitleFontSize(view, value == null ? 0 : ((Double) value).intValue());
57
+ break;
58
+ case "largeTitleFontWeight":
59
+ mViewManager.setLargeTitleFontWeight(view, value == null ? null : (String) value);
60
+ break;
61
+ case "largeTitleBackgroundColor":
62
+ mViewManager.setLargeTitleBackgroundColor(view, ColorPropConverter.getColor(value, view.getContext()));
63
+ break;
64
+ case "largeTitleHideShadow":
65
+ mViewManager.setLargeTitleHideShadow(view, value == null ? false : (boolean) value);
66
+ break;
67
+ case "largeTitleColor":
68
+ mViewManager.setLargeTitleColor(view, ColorPropConverter.getColor(value, view.getContext()));
69
+ break;
70
+ case "translucent":
71
+ mViewManager.setTranslucent(view, value == null ? false : (boolean) value);
72
+ break;
73
+ case "title":
74
+ mViewManager.setTitle(view, value == null ? null : (String) value);
75
+ break;
76
+ case "titleFontFamily":
77
+ mViewManager.setTitleFontFamily(view, value == null ? null : (String) value);
78
+ break;
79
+ case "titleFontSize":
80
+ mViewManager.setTitleFontSize(view, value == null ? 0 : ((Double) value).intValue());
81
+ break;
82
+ case "titleFontWeight":
83
+ mViewManager.setTitleFontWeight(view, value == null ? null : (String) value);
84
+ break;
85
+ case "titleColor":
86
+ mViewManager.setTitleColor(view, ColorPropConverter.getColor(value, view.getContext()));
87
+ break;
88
+ case "disableBackButtonMenu":
89
+ mViewManager.setDisableBackButtonMenu(view, value == null ? false : (boolean) value);
90
+ break;
91
+ case "hideBackButton":
92
+ mViewManager.setHideBackButton(view, value == null ? false : (boolean) value);
93
+ break;
94
+ case "topInsetEnabled":
95
+ mViewManager.setTopInsetEnabled(view, value == null ? false : (boolean) value);
96
+ break;
97
+ case "backButtonInCustomView":
98
+ mViewManager.setBackButtonInCustomView(view, value == null ? false : (boolean) value);
99
+ break;
100
+ default:
101
+ super.setProperty(view, propName, value);
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public interface RNSScreenStackHeaderConfigManagerInterface<T extends View> {
16
+ void setBackgroundColor(T view, @Nullable Integer value);
17
+ void setBackTitle(T view, @Nullable String value);
18
+ void setBackTitleFontFamily(T view, @Nullable String value);
19
+ void setBackTitleFontSize(T view, int value);
20
+ void setColor(T view, @Nullable Integer value);
21
+ void setDirection(T view, @Nullable String value);
22
+ void setHidden(T view, boolean value);
23
+ void setHideShadow(T view, boolean value);
24
+ void setLargeTitle(T view, boolean value);
25
+ void setLargeTitleFontFamily(T view, @Nullable String value);
26
+ void setLargeTitleFontSize(T view, int value);
27
+ void setLargeTitleFontWeight(T view, @Nullable String value);
28
+ void setLargeTitleBackgroundColor(T view, @Nullable Integer value);
29
+ void setLargeTitleHideShadow(T view, boolean value);
30
+ void setLargeTitleColor(T view, @Nullable Integer value);
31
+ void setTranslucent(T view, boolean value);
32
+ void setTitle(T view, @Nullable String value);
33
+ void setTitleFontFamily(T view, @Nullable String value);
34
+ void setTitleFontSize(T view, int value);
35
+ void setTitleFontWeight(T view, @Nullable String value);
36
+ void setTitleColor(T view, @Nullable Integer value);
37
+ void setDisableBackButtonMenu(T view, boolean value);
38
+ void setHideBackButton(T view, boolean value);
39
+ void setTopInsetEnabled(T view, boolean value);
40
+ void setBackButtonInCustomView(T view, boolean value);
41
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
15
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
16
+
17
+ public class RNSScreenStackHeaderSubviewManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNSScreenStackHeaderSubviewManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
18
+ public RNSScreenStackHeaderSubviewManagerDelegate(U viewManager) {
19
+ super(viewManager);
20
+ }
21
+ @Override
22
+ public void setProperty(T view, String propName, @Nullable Object value) {
23
+ switch (propName) {
24
+ case "type":
25
+ mViewManager.setType(view, (String) value);
26
+ break;
27
+ default:
28
+ super.setProperty(view, propName, value);
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public interface RNSScreenStackHeaderSubviewManagerInterface<T extends View> {
16
+ void setType(T view, @Nullable String value);
17
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
15
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
16
+
17
+ public class RNSScreenStackManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNSScreenStackManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
18
+ public RNSScreenStackManagerDelegate(U viewManager) {
19
+ super(viewManager);
20
+ }
21
+ @Override
22
+ public void setProperty(T view, String propName, @Nullable Object value) {
23
+ super.setProperty(view, propName, value);
24
+ }
25
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+
14
+ public interface RNSScreenStackManagerInterface<T extends View> {
15
+ // No props
16
+ }
@@ -0,0 +1,16 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import android.view.ViewGroup
4
+ import com.facebook.react.bridge.ReactContext
5
+ import androidx.annotation.UiThread
6
+ import com.facebook.react.uimanager.PixelUtil
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.facebook.react.bridge.WritableMap
9
+ import com.facebook.react.bridge.WritableNativeMap
10
+ import kotlin.math.abs
11
+
12
+ abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context) {
13
+ protected fun updateScreenSizeFabric(width: Int, height: Int) {
14
+ // do nothing
15
+ }
16
+ }
@@ -0,0 +1,38 @@
1
+ SCREENS_COMMON_THIS_DIR := $(call my-dir)
2
+
3
+ include $(CLEAR_VARS)
4
+
5
+ LOCAL_PATH := $(SCREENS_COMMON_THIS_DIR)
6
+ LOCAL_MODULE := rnscreens_common
7
+
8
+ LOCAL_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
9
+ LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*.cpp)
10
+ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
11
+
12
+ # Please note as one of the library listed is libreact_codegen_samplelibrary
13
+ # This name will be generated as libreact_codegen_<library-name>
14
+ # where <library-name> is the one you specified in the Gradle configuration
15
+ LOCAL_SHARED_LIBRARIES := libjsi \
16
+ libfbjni \
17
+ libglog \
18
+ libfolly_json \
19
+ libyoga \
20
+ libreact_nativemodule_core \
21
+ libturbomodulejsijni \
22
+ librrc_view \
23
+ libreact_render_core \
24
+ libreact_render_graphics \
25
+ libfabricjni \
26
+ libfolly_futures \
27
+ libreact_debug \
28
+ libreact_render_componentregistry \
29
+ libreact_render_debug \
30
+ libruntimeexecutor \
31
+ libreact_codegen_rncore \
32
+ libreact_codegen_rnscreens
33
+
34
+ LOCAL_CFLAGS := \
35
+ -DLOG_TAG=\"ReactNative\"
36
+ LOCAL_CFLAGS += -fexceptions -frtti -std=c++17 -Wall
37
+
38
+ include $(BUILD_SHARED_LIBRARY)
@@ -0,0 +1,41 @@
1
+ #pragma once
2
+
3
+ #include <react/debug/react_native_assert.h>
4
+ #include "RNSScreenShadowNode.h"
5
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
6
+
7
+ namespace facebook {
8
+ namespace react {
9
+
10
+ class RNSScreenComponentDescriptor final
11
+ : public ConcreteComponentDescriptor<RNSScreenShadowNode> {
12
+ public:
13
+ using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
14
+
15
+ void adopt(ShadowNode::Unshared const &shadowNode) const override {
16
+ react_native_assert(
17
+ std::dynamic_pointer_cast<RNSScreenShadowNode>(shadowNode));
18
+ auto screenShadowNode =
19
+ std::static_pointer_cast<RNSScreenShadowNode>(shadowNode);
20
+
21
+ react_native_assert(
22
+ std::dynamic_pointer_cast<YogaLayoutableShadowNode>(screenShadowNode));
23
+ auto layoutableShadowNode =
24
+ std::static_pointer_cast<YogaLayoutableShadowNode>(screenShadowNode);
25
+
26
+ auto state =
27
+ std::static_pointer_cast<const RNSScreenShadowNode::ConcreteState>(
28
+ shadowNode->getState());
29
+ auto stateData = state->getData();
30
+
31
+ if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
32
+ layoutableShadowNode->setSize(
33
+ Size{stateData.frameSize.width, stateData.frameSize.height});
34
+ }
35
+
36
+ ConcreteComponentDescriptor::adopt(shadowNode);
37
+ }
38
+ };
39
+
40
+ } // namespace react
41
+ } // namespace facebook
@@ -0,0 +1,9 @@
1
+ #include "RNSScreenShadowNode.h"
2
+
3
+ namespace facebook {
4
+ namespace react {
5
+
6
+ extern const char RNSScreenComponentName[] = "RNSScreen";
7
+
8
+ } // namespace react
9
+ } // namespace facebook
@@ -0,0 +1,29 @@
1
+ #pragma once
2
+
3
+ #include "RNSScreenState.h"
4
+ #include <react/renderer/components/rnscreens/EventEmitters.h>
5
+ #include <react/renderer/components/rnscreens/Props.h>
6
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
7
+
8
+ namespace facebook {
9
+ namespace react {
10
+
11
+ extern const char RNSScreenComponentName[];
12
+
13
+ class RNSScreenShadowNode final : public ConcreteViewShadowNode<
14
+ RNSScreenComponentName,
15
+ RNSScreenProps,
16
+ RNSScreenEventEmitter,
17
+ RNSScreenState> {
18
+ public:
19
+ using ConcreteViewShadowNode::ConcreteViewShadowNode;
20
+
21
+ static ShadowNodeTraits BaseTraits() {
22
+ auto traits = ConcreteViewShadowNode::BaseTraits();
23
+ traits.set(ShadowNodeTraits::Trait::RootNodeKind);
24
+ return traits;
25
+ }
26
+ };
27
+
28
+ } // namespace react
29
+ } // namespace facebook
@@ -0,0 +1,14 @@
1
+ #include "RNSScreenState.h"
2
+
3
+ namespace facebook {
4
+ namespace react {
5
+
6
+ #ifdef ANDROID
7
+ folly::dynamic RNSScreenState::getDynamic() const {
8
+ return folly::dynamic::object("frameWidth", frameSize.width)(
9
+ "frameHeight", frameSize.height);
10
+ }
11
+ #endif
12
+
13
+ } // namespace react
14
+ } // namespace facebook
@@ -0,0 +1,46 @@
1
+ #pragma once
2
+
3
+ #include <react/renderer/graphics/Float.h>
4
+ #include <react/renderer/graphics/Geometry.h>
5
+ #include <react/renderer/graphics/conversions.h>
6
+
7
+ #ifdef ANDROID
8
+ #include <folly/dynamic.h>
9
+ #include <react/renderer/mapbuffer/MapBuffer.h>
10
+ #include <react/renderer/mapbuffer/MapBufferBuilder.h>
11
+ #endif
12
+
13
+ namespace facebook {
14
+ namespace react {
15
+
16
+ class RNSScreenState final {
17
+ public:
18
+ using Shared = std::shared_ptr<const RNSScreenState>;
19
+
20
+ RNSScreenState(){};
21
+ RNSScreenState(Size frameSize_) : frameSize(frameSize_){};
22
+
23
+ #ifdef ANDROID
24
+ RNSScreenState(
25
+ RNSScreenState const &previousState,
26
+ folly::dynamic data)
27
+ : frameSize(Size{
28
+ (Float)data["frameWidth"].getDouble(),
29
+ (Float)data["frameHeight"].getDouble()}){};
30
+ #endif
31
+
32
+ const Size frameSize{};
33
+
34
+ #ifdef ANDROID
35
+ folly::dynamic getDynamic() const;
36
+ MapBuffer getMapBuffer() const {
37
+ return MapBufferBuilder::EMPTY();
38
+ };
39
+
40
+ #endif
41
+
42
+ #pragma mark - Getters
43
+ };
44
+
45
+ } // namespace react
46
+ } // namespace facebook
@@ -464,6 +464,18 @@ Defaults to an empty string.
464
464
 
465
465
  The search field text color.
466
466
 
467
+ #### `hintTextColor`
468
+
469
+ The search hint text color. (Android only)
470
+
471
+ #### `headerIconColor`
472
+
473
+ The search and close icon color shown in the header. (Android only)
474
+
475
+ #### `shouldShowHintSearchIcon`
476
+
477
+ Show the search hint icon when search bar is focused. (Android only)
478
+
467
479
  ### Helpers
468
480
 
469
481
  The stack navigator adds the following methods to the navigation prop:
package/ios/RNSScreen.h CHANGED
@@ -29,6 +29,11 @@ typedef NS_ENUM(NSInteger, RNSScreenReplaceAnimation) {
29
29
  RNSScreenReplaceAnimationPush,
30
30
  };
31
31
 
32
+ typedef NS_ENUM(NSInteger, RNSScreenSwipeDirection) {
33
+ RNSScreenSwipeDirectionHorizontal,
34
+ RNSScreenSwipeDirectionVertical,
35
+ };
36
+
32
37
  typedef NS_ENUM(NSInteger, RNSActivityState) {
33
38
  RNSActivityStateInactive = 0,
34
39
  RNSActivityStateTransitioningOrBelowTop = 1,
@@ -47,6 +52,7 @@ typedef NS_ENUM(NSInteger, RNSWindowTrait) {
47
52
  RNSWindowTraitAnimation,
48
53
  RNSWindowTraitHidden,
49
54
  RNSWindowTraitOrientation,
55
+ RNSWindowTraitHomeIndicatorHidden,
50
56
  };
51
57
 
52
58
  @interface RCTConvert (RNSScreen)
@@ -91,19 +97,23 @@ typedef NS_ENUM(NSInteger, RNSWindowTrait) {
91
97
  @property (nonatomic) RNSScreenStackAnimation stackAnimation;
92
98
  @property (nonatomic) RNSScreenStackPresentation stackPresentation;
93
99
  @property (nonatomic) RNSScreenReplaceAnimation replaceAnimation;
100
+ @property (nonatomic) RNSScreenSwipeDirection swipeDirection;
94
101
  @property (nonatomic) BOOL preventNativeDismiss;
95
102
  @property (nonatomic) BOOL hasOrientationSet;
96
103
  @property (nonatomic) BOOL hasStatusBarStyleSet;
97
104
  @property (nonatomic) BOOL hasStatusBarAnimationSet;
98
105
  @property (nonatomic) BOOL hasStatusBarHiddenSet;
106
+ @property (nonatomic) BOOL hasHomeIndicatorHiddenSet;
99
107
  @property (nonatomic) BOOL customAnimationOnSwipe;
100
108
  @property (nonatomic) BOOL fullScreenSwipeEnabled;
109
+ @property (nonatomic, retain) NSNumber *transitionDuration;
101
110
 
102
111
  #if !TARGET_OS_TV
103
112
  @property (nonatomic) RNSStatusBarStyle statusBarStyle;
104
113
  @property (nonatomic) UIStatusBarAnimation statusBarAnimation;
105
114
  @property (nonatomic) BOOL statusBarHidden;
106
115
  @property (nonatomic) UIInterfaceOrientationMask screenOrientation;
116
+ @property (nonatomic) BOOL homeIndicatorHidden;
107
117
  #endif
108
118
 
109
119
  - (void)notifyFinishTransitioning;
package/ios/RNSScreen.m CHANGED
@@ -34,6 +34,7 @@
34
34
  _hasStatusBarAnimationSet = NO;
35
35
  _hasStatusBarHiddenSet = NO;
36
36
  _hasOrientationSet = NO;
37
+ _hasHomeIndicatorHiddenSet = NO;
37
38
  }
38
39
 
39
40
  return self;
@@ -206,6 +207,13 @@
206
207
  _screenOrientation = screenOrientation;
207
208
  [RNSScreenWindowTraits enforceDesiredDeviceOrientation];
208
209
  }
210
+
211
+ - (void)setHomeIndicatorHidden:(BOOL)homeIndicatorHidden
212
+ {
213
+ _hasHomeIndicatorHiddenSet = YES;
214
+ _homeIndicatorHidden = homeIndicatorHidden;
215
+ [RNSScreenWindowTraits updateHomeIndicatorAutoHidden];
216
+ }
209
217
  #endif
210
218
 
211
219
  - (UIView *)reactSuperview
@@ -436,6 +444,17 @@
436
444
  return UIInterfaceOrientationMaskAllButUpsideDown;
437
445
  }
438
446
 
447
+ - (UIViewController *)childViewControllerForHomeIndicatorAutoHidden
448
+ {
449
+ UIViewController *vc = [self findChildVCForConfigAndTrait:RNSWindowTraitHomeIndicatorHidden includingModals:YES];
450
+ return vc == self ? nil : vc;
451
+ }
452
+
453
+ - (BOOL)prefersHomeIndicatorAutoHidden
454
+ {
455
+ return ((RNSScreenView *)self.view).homeIndicatorHidden;
456
+ }
457
+
439
458
  // if the returned vc is a child, it means that it can provide config;
440
459
  // if the returned vc is self, it means that there is no child for config and self has config to provide,
441
460
  // so we return self which results in asking self for preferredStatusBarStyle/Animation etc.;
@@ -495,6 +514,9 @@
495
514
  case RNSWindowTraitOrientation: {
496
515
  return ((RNSScreenView *)self.view).hasOrientationSet;
497
516
  }
517
+ case RNSWindowTraitHomeIndicatorHidden: {
518
+ return ((RNSScreenView *)self.view).hasHomeIndicatorHiddenSet;
519
+ }
498
520
  default: {
499
521
  RCTLogError(@"Unknown trait passed: %d", (int)trait);
500
522
  }
@@ -771,6 +793,8 @@ RCT_EXPORT_VIEW_PROPERTY(preventNativeDismiss, BOOL)
771
793
  RCT_EXPORT_VIEW_PROPERTY(replaceAnimation, RNSScreenReplaceAnimation)
772
794
  RCT_EXPORT_VIEW_PROPERTY(stackPresentation, RNSScreenStackPresentation)
773
795
  RCT_EXPORT_VIEW_PROPERTY(stackAnimation, RNSScreenStackAnimation)
796
+ RCT_EXPORT_VIEW_PROPERTY(swipeDirection, RNSScreenSwipeDirection)
797
+ RCT_EXPORT_VIEW_PROPERTY(transitionDuration, NSNumber)
774
798
 
775
799
  RCT_EXPORT_VIEW_PROPERTY(onAppear, RCTDirectEventBlock);
776
800
  RCT_EXPORT_VIEW_PROPERTY(onDisappear, RCTDirectEventBlock);
@@ -785,6 +809,7 @@ RCT_EXPORT_VIEW_PROPERTY(screenOrientation, UIInterfaceOrientationMask)
785
809
  RCT_EXPORT_VIEW_PROPERTY(statusBarAnimation, UIStatusBarAnimation)
786
810
  RCT_EXPORT_VIEW_PROPERTY(statusBarHidden, BOOL)
787
811
  RCT_EXPORT_VIEW_PROPERTY(statusBarStyle, RNSStatusBarStyle)
812
+ RCT_EXPORT_VIEW_PROPERTY(homeIndicatorHidden, BOOL)
788
813
  #endif
789
814
 
790
815
  - (UIView *)view
@@ -835,6 +860,15 @@ RCT_ENUM_CONVERTER(
835
860
  RNSScreenReplaceAnimationPop,
836
861
  integerValue)
837
862
 
863
+ RCT_ENUM_CONVERTER(
864
+ RNSScreenSwipeDirection,
865
+ (@{
866
+ @"vertical" : @(RNSScreenSwipeDirectionVertical),
867
+ @"horizontal" : @(RNSScreenSwipeDirectionHorizontal),
868
+ }),
869
+ RNSScreenSwipeDirectionHorizontal,
870
+ integerValue)
871
+
838
872
  #if !TARGET_OS_TV
839
873
  RCT_ENUM_CONVERTER(
840
874
  RNSStatusBarStyle,
@@ -0,0 +1,23 @@
1
+ #import <UIKit/UIKit.h>
2
+
3
+ #import <React/RCTViewComponentView.h>
4
+ #import "RNSScreenController.h"
5
+
6
+ NS_ASSUME_NONNULL_BEGIN
7
+
8
+ @interface RNSScreenComponentView : RCTViewComponentView
9
+
10
+ @property (weak, nonatomic) UIView *reactSuperview;
11
+ @property (weak, nonatomic) UIView *config;
12
+ @property (nonatomic, retain) RNSScreenController *controller;
13
+
14
+ - (void)notifyWillAppear;
15
+ - (void)notifyWillDisappear;
16
+ - (void)notifyAppear;
17
+ - (void)notifyDisappear;
18
+ - (void)updateBounds;
19
+ - (void)notifyDismissedWithCount:(int)dismissCount;
20
+
21
+ @end
22
+
23
+ NS_ASSUME_NONNULL_END