react-native-navigation 7.24.3 → 7.25.0-snapshot.543

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/lib/android/app/build.gradle +12 -9
  2. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +7 -9
  3. package/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +4 -0
  4. package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +2 -0
  5. package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.java +3 -2
  6. package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.kt +31 -0
  7. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt +44 -0
  8. package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt +71 -0
  9. package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/JSONParser.java +0 -2
  10. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/PrimitiveExt.kt +9 -0
  11. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +2 -1
  12. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +31 -4
  13. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +6 -13
  14. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +32 -10
  15. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +4 -0
  16. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +25 -6
  17. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +104 -33
  18. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +86 -9
  19. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +12 -0
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +18 -1
  21. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +51 -0
  22. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +7 -1
  23. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +23 -7
  24. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/RootPresenter.java +0 -1
  25. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +24 -3
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabs.java +29 -1
  27. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -0
  28. package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +10 -1
  29. package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +10 -2
  30. package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/AttachedOverlayContainer.kt +69 -0
  31. package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/ViewTooltip.java +921 -0
  32. package/lib/android/app/src/main/java/com/reactnativenavigation/views/sidemenu/SideMenuRoot.java +9 -1
  33. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackLayout.java +14 -4
  34. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +0 -1
  35. package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsStyleHelper.java +0 -1
  36. package/lib/dist/src/interfaces/Options.d.ts +34 -0
  37. package/lib/ios/RNNBasePresenter.m +17 -0
  38. package/lib/ios/RNNBottomTabsController.m +1 -0
  39. package/lib/ios/RNNComponentViewController.m +5 -0
  40. package/lib/ios/RNNLayoutOptions.h +2 -1
  41. package/lib/ios/RNNLayoutOptions.m +4 -0
  42. package/lib/ios/RNNStackPresenter.m +1 -0
  43. package/lib/src/interfaces/Options.ts +38 -0
  44. package/package.json +3 -1
  45. package/.buildkite/pipeline.yml +0 -59
  46. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
  47. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
  48. package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
  49. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
  50. package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
  51. package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
  52. package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
  53. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
  54. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
  55. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
  56. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
  57. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
  58. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
  59. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
  60. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
  61. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
  62. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
  63. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
  64. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
  65. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
  66. package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
  101. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
  102. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
  103. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
  104. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
  105. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
  106. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
  107. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
  108. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
  109. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
  110. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
  111. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
  112. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
  113. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
  114. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
  115. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
  116. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
  117. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
  118. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
  119. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
  120. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
  121. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
  122. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
  123. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
  124. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
  125. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
  126. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
  127. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
  128. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
  129. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
  130. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
  131. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
  132. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
  133. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
  134. package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
  135. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
  136. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
  137. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
  138. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
  139. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
  140. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
  141. package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
@@ -12,6 +12,7 @@ import com.reactnativenavigation.options.SideMenuOptions;
12
12
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
13
13
  import com.reactnativenavigation.views.BehaviourAdapter;
14
14
  import com.reactnativenavigation.views.BehaviourDelegate;
15
+ import com.reactnativenavigation.views.overlay.AttachedOverlayContainer;
15
16
 
16
17
  import androidx.annotation.RestrictTo;
17
18
  import androidx.coordinatorlayout.widget.CoordinatorLayout;
@@ -23,9 +24,16 @@ import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParent
23
24
 
24
25
  public class SideMenuRoot extends CoordinatorLayout {
25
26
  private SideMenu sideMenu;
27
+ final private AttachedOverlayContainer attachedOverlayContainer ;
26
28
 
27
29
  public SideMenuRoot(Context context) {
28
30
  super(context);
31
+ attachedOverlayContainer = new AttachedOverlayContainer(context);
32
+ addView(attachedOverlayContainer,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
33
+ }
34
+
35
+ public AttachedOverlayContainer getAttachedOverlayContainer() {
36
+ return attachedOverlayContainer;
29
37
  }
30
38
 
31
39
  public void addSideMenu(SideMenu sideMenu, BehaviourAdapter behaviourAdapter) {
@@ -89,4 +97,4 @@ public class SideMenuRoot extends CoordinatorLayout {
89
97
  public SideMenu getSideMenu() {
90
98
  return sideMenu;
91
99
  }
92
- }
100
+ }
@@ -9,6 +9,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController;
9
9
  import com.reactnativenavigation.views.component.Component;
10
10
  import com.reactnativenavigation.views.component.Renderable;
11
11
  import com.reactnativenavigation.views.stack.topbar.ScrollDIsabledBehavior;
12
+ import com.reactnativenavigation.views.overlay.AttachedOverlayContainer;
12
13
 
13
14
  import androidx.coordinatorlayout.widget.CoordinatorLayout;
14
15
 
@@ -17,18 +18,27 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
17
18
  @SuppressLint("ViewConstructor")
18
19
  public class StackLayout extends CoordinatorLayout implements Component {
19
20
  private String stackId;
21
+ final private AttachedOverlayContainer attachedOverlayContainer ;
20
22
 
21
23
  public StackLayout(Context context, TopBarController topBarController, String stackId) {
22
24
  super(context);
23
25
  this.stackId = stackId;
26
+ attachedOverlayContainer = new AttachedOverlayContainer(getContext());
24
27
  createLayout(topBarController);
25
28
  }
26
29
 
30
+ public AttachedOverlayContainer getAttachedOverlayContainer() {
31
+ return attachedOverlayContainer;
32
+ }
33
+
27
34
  private void createLayout(TopBarController topBarController) {
28
35
  View topBar = topBarController.createView(getContext(), this);
36
+
29
37
  CoordinatorLayout.LayoutParams lp = new LayoutParams(MATCH_PARENT, UiUtils.getTopBarHeight(getContext()));
30
38
  lp.setBehavior(new ScrollDIsabledBehavior());
31
39
  addView(topBar, lp);
40
+ addView(attachedOverlayContainer,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
41
+
32
42
  }
33
43
 
34
44
  public String getStackId() {
@@ -37,8 +47,8 @@ public class StackLayout extends CoordinatorLayout implements Component {
37
47
 
38
48
  @Override
39
49
  public boolean isRendered() {
40
- return getChildCount() >= 2 &&
41
- getChildAt(1) instanceof Renderable &&
42
- ((Renderable) getChildAt(1)).isRendered();
50
+ return getChildCount() >= 3 &&
51
+ getChildAt(2) instanceof Renderable &&
52
+ ((Renderable) getChildAt(2)).isRendered();
43
53
  }
44
- }
54
+ }
@@ -31,7 +31,6 @@ import com.reactnativenavigation.options.params.Number;
31
31
  import com.reactnativenavigation.options.params.ThemeColour;
32
32
  import com.reactnativenavigation.options.parsers.TypefaceLoader;
33
33
  import com.reactnativenavigation.utils.CompatUtils;
34
- import com.reactnativenavigation.utils.ContextKt;
35
34
  import com.reactnativenavigation.utils.UiUtils;
36
35
  import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarCollapseBehavior;
37
36
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonController;
@@ -5,7 +5,6 @@ import android.graphics.Typeface;
5
5
  import android.view.ViewGroup;
6
6
  import android.widget.TextView;
7
7
 
8
- import com.reactnativenavigation.options.params.Colour;
9
8
  import com.reactnativenavigation.options.params.Number;
10
9
  import com.reactnativenavigation.options.params.ThemeColour;
11
10
  import com.reactnativenavigation.utils.Functions.Func1;
@@ -133,6 +133,16 @@ export interface OptionsLayout {
133
133
  * #### (iOS specific)
134
134
  */
135
135
  autoHideHomeIndicator?: boolean;
136
+ /**
137
+ * Add insets to the top layout
138
+ */
139
+ insets?: Insets;
140
+ /**
141
+ * Resizes the layout when keyboard is visible
142
+ * @default true
143
+ * #### (Android specific)
144
+ */
145
+ adjustResize?: boolean;
136
146
  }
137
147
  export declare enum OptionsModalPresentationStyle {
138
148
  formSheet = "formSheet",
@@ -840,6 +850,10 @@ export interface ImageSystemSource {
840
850
  }
841
851
  export declare type ImageResource = ImageSourcePropType | string | ImageSystemSource;
842
852
  export interface OptionsBottomTab {
853
+ /**
854
+ * Unique id in order to be found in the view hierarchy
855
+ */
856
+ id?: string;
843
857
  dotIndicator?: DotIndicatorOptions;
844
858
  /**
845
859
  * Set the text to display below the icon
@@ -1005,6 +1019,26 @@ export interface OverlayOptions {
1005
1019
  * Set this to true if your Overlay contains a TextInput.
1006
1020
  */
1007
1021
  handleKeyboardEvents?: boolean;
1022
+ /**
1023
+ * Attach overlay to anchor view in a certain layer of layout as a tooltip
1024
+ */
1025
+ attach?: {
1026
+ /**
1027
+ * layout id to look for to add as a layer
1028
+ * which can be componentId or stackId or bottomTabsId.
1029
+ */
1030
+ layoutId: string;
1031
+ anchor?: {
1032
+ /**
1033
+ * Anchor view id, TopBar Button, Title Component, BottomTab.
1034
+ */
1035
+ id: string;
1036
+ /**
1037
+ * The anchor view side that the tooltip will be displayed.
1038
+ */
1039
+ gravity: 'top' | 'left' | 'right' | 'bottom';
1040
+ };
1041
+ };
1008
1042
  }
1009
1043
  export interface ModalOptions {
1010
1044
  /**
@@ -58,6 +58,15 @@
58
58
  }
59
59
 
60
60
  - (void)applyOptions:(RNNNavigationOptions *)options {
61
+ UIViewController *viewController = self.boundViewController;
62
+ RNNNavigationOptions *withDefault = [options withDefault:[self defaultOptions]];
63
+ if (withDefault.layout.insets.hasValue) {
64
+ viewController.topMostViewController.additionalSafeAreaInsets =
65
+ UIEdgeInsetsMake([withDefault.layout.insets.top withDefault:0],
66
+ [withDefault.layout.insets.left withDefault:0],
67
+ [withDefault.layout.insets.bottom withDefault:0],
68
+ [withDefault.layout.insets.right withDefault:0]);
69
+ }
61
70
  }
62
71
 
63
72
  - (void)mergeOptions:(RNNNavigationOptions *)mergeOptions
@@ -83,6 +92,14 @@
83
92
  _prefersHomeIndicatorAutoHidden = mergeOptions.layout.autoHideHomeIndicator.get;
84
93
  [self.boundViewController setNeedsUpdateOfHomeIndicatorAutoHidden];
85
94
  }
95
+
96
+ if (mergeOptions.layout.insets.hasValue) {
97
+ self.boundViewController.topMostViewController.additionalSafeAreaInsets =
98
+ UIEdgeInsetsMake([withDefault.layout.insets.top withDefault:0],
99
+ [withDefault.layout.insets.left withDefault:0],
100
+ [withDefault.layout.insets.bottom withDefault:0],
101
+ [withDefault.layout.insets.right withDefault:0]);
102
+ }
86
103
  }
87
104
 
88
105
  - (void)renderComponents:(RNNNavigationOptions *)options
@@ -88,6 +88,7 @@
88
88
  }
89
89
 
90
90
  - (void)viewDidLayoutSubviews {
91
+ [super viewDidLayoutSubviews];
91
92
  [self.presenter viewDidLayoutSubviews];
92
93
  [_dotIndicatorPresenter bottomTabsDidLayoutSubviews:self];
93
94
  }
@@ -111,6 +111,11 @@
111
111
  [self updateReactViewConstraints];
112
112
  }
113
113
 
114
+ - (void)viewDidLayoutSubviews {
115
+ [super viewDidLayoutSubviews];
116
+ [self.presenter applyOptionsOnViewDidLayoutSubviews:self.resolveOptions];
117
+ }
118
+
114
119
  - (void)updateReactViewConstraints {
115
120
  if (self.isViewLoaded && self.reactView) {
116
121
  [NSLayoutConstraint deactivateConstraints:_reactViewConstraints];
@@ -1,5 +1,5 @@
1
+ #import "RNNInsetsOptions.h"
1
2
  #import "RNNOptions.h"
2
-
3
3
  @interface RNNLayoutOptions : RNNOptions
4
4
 
5
5
  @property(nonatomic, strong) Color *backgroundColor;
@@ -7,6 +7,7 @@
7
7
  @property(nonatomic, strong) Text *direction;
8
8
  @property(nonatomic, strong) id orientation;
9
9
  @property(nonatomic, strong) Bool *autoHideHomeIndicator;
10
+ @property(nonatomic, strong) RNNInsetsOptions *insets;
10
11
 
11
12
  - (UIInterfaceOrientationMask)supportedOrientations;
12
13
 
@@ -11,6 +11,7 @@
11
11
  self.direction = [TextParser parse:dict key:@"direction"];
12
12
  self.orientation = dict[@"orientation"];
13
13
  self.autoHideHomeIndicator = [BoolParser parse:dict key:@"autoHideHomeIndicator"];
14
+ self.insets = [[RNNInsetsOptions alloc] initWithDict:dict[@"insets"]];
14
15
  return self;
15
16
  }
16
17
 
@@ -25,6 +26,9 @@
25
26
  self.orientation = options.orientation;
26
27
  if (options.autoHideHomeIndicator)
27
28
  self.autoHideHomeIndicator = options.autoHideHomeIndicator;
29
+ if (options.insets.hasValue) {
30
+ self.insets = options.insets;
31
+ }
28
32
  }
29
33
 
30
34
  - (UIInterfaceOrientationMask)supportedOrientations {
@@ -88,6 +88,7 @@
88
88
  }
89
89
 
90
90
  - (void)applyOptionsOnViewDidLayoutSubviews:(RNNNavigationOptions *)options {
91
+ [super applyOptionsOnViewDidLayoutSubviews:options];
91
92
  RNNNavigationOptions *withDefault = [options withDefault:[self defaultOptions]];
92
93
  if (withDefault.topBar.background.component.name.hasValue) {
93
94
  [self presentBackgroundComponent];
@@ -180,6 +180,18 @@ export interface OptionsLayout {
180
180
  * #### (iOS specific)
181
181
  */
182
182
  autoHideHomeIndicator?: boolean;
183
+
184
+ /**
185
+ * Add insets to the top layout
186
+ */
187
+ insets?: Insets;
188
+
189
+ /**
190
+ * Resizes the layout when keyboard is visible
191
+ * @default true
192
+ * #### (Android specific)
193
+ */
194
+ adjustResize?: boolean;
183
195
  }
184
196
 
185
197
  export enum OptionsModalPresentationStyle {
@@ -920,6 +932,11 @@ export interface ImageSystemSource {
920
932
  export type ImageResource = ImageSourcePropType | string | ImageSystemSource;
921
933
 
922
934
  export interface OptionsBottomTab {
935
+ /**
936
+ * Unique id in order to be found in the view hierarchy
937
+ */
938
+ id?: string;
939
+
923
940
  dotIndicator?: DotIndicatorOptions;
924
941
 
925
942
  /**
@@ -1089,6 +1106,27 @@ export interface OverlayOptions {
1089
1106
  * Set this to true if your Overlay contains a TextInput.
1090
1107
  */
1091
1108
  handleKeyboardEvents?: boolean;
1109
+
1110
+ /**
1111
+ * Attach overlay to anchor view in a certain layer of layout as a tooltip
1112
+ */
1113
+ attach?: {
1114
+ /**
1115
+ * layout id to look for to add as a layer
1116
+ * which can be componentId or stackId or bottomTabsId.
1117
+ */
1118
+ layoutId: string;
1119
+ anchor?: {
1120
+ /**
1121
+ * Anchor view id, TopBar Button, Title Component, BottomTab.
1122
+ */
1123
+ id: string;
1124
+ /**
1125
+ * The anchor view side that the tooltip will be displayed.
1126
+ */
1127
+ gravity: 'top' | 'left' | 'right' | 'bottom';
1128
+ };
1129
+ };
1092
1130
  }
1093
1131
 
1094
1132
  export interface ModalOptions {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-navigation",
3
- "version": "7.24.3",
3
+ "version": "7.25.0-snapshot.543",
4
4
  "description": "React Native Navigation - truly native navigation for iOS and Android",
5
5
  "license": "MIT",
6
6
  "nativePackage": true,
@@ -66,6 +66,8 @@
66
66
  "tslib": "1.9.3"
67
67
  },
68
68
  "devDependencies": {
69
+ "pixelmatch": "^5.2.1",
70
+ "pngjs": "^6.0.0",
69
71
  "@babel/plugin-proposal-export-default-from": "7.10.1",
70
72
  "@babel/plugin-proposal-export-namespace-from": "7.10.1",
71
73
  "@babel/types": "7.15.6",
@@ -1,59 +0,0 @@
1
- steps:
2
- - block: ":rocket: Release!"
3
- prompt: "Fill out the details for release"
4
- if: 'build.message =~ /^release\$/i'
5
- fields:
6
- - text: "VERSION"
7
- key: "version"
8
- - text: "NPM_TAG"
9
- key: "npm-tag"
10
- default: 'null'
11
- required: false
12
- - text: "BUILD_DOCUMENTATION_VERSION"
13
- key: "build-documentation-version"
14
- default: 'null'
15
- hint: 'Leave NULL if no version is specified'
16
- - text: "REMOVE_DOCUMENTATION_VERSION"
17
- key: "remove-documentation-version"
18
- default: 'null'
19
- hint: 'Leave NULL if no version is specified'
20
-
21
- - label: ":android: Android"
22
- command:
23
- - "nvm install"
24
- - "npm install"
25
- - "npm run test-js"
26
- - "npm run test-unit-android -- --release"
27
- - "npm run test-e2e-android-multi -- --release --headless --verbose --ci"
28
- key: "android_build"
29
- timeout_in_minutes: 90
30
-
31
- - label: ":ios: iOS - Unit"
32
- command:
33
- - "nvm install"
34
- - "npm install"
35
- - "npm run test-unit-ios -- --release"
36
- key: "ios_unit"
37
- timeout_in_minutes: 90
38
-
39
- - label: ":ios: iOS - E2E"
40
- command:
41
- - "nvm install"
42
- - "npm install"
43
- - "npm run test-snapshot-ios -- --release"
44
- - "npm run test-e2e-ios -- --release --multi --ci"
45
- key: "ios_e2e"
46
- timeout_in_minutes: 90
47
-
48
- - label: ":package: Publish"
49
- env:
50
- if: "build.pull_request.id == null"
51
- command:
52
- - "nvm install"
53
- - "npm install"
54
- - "npm run release"
55
- depends_on:
56
- - "android_build"
57
- - "ios_unit"
58
- - "ios_e2e"
59
- timeout_in_minutes: 90
@@ -1,48 +0,0 @@
1
- package com.reactnativenavigation.options;
2
-
3
- import android.content.Context;
4
-
5
- import com.reactnativenavigation.options.params.NullNumber;
6
- import com.reactnativenavigation.options.params.Number;
7
- import com.reactnativenavigation.options.params.ThemeColour;
8
- import com.reactnativenavigation.options.params.NullThemeColour;
9
- import com.reactnativenavigation.options.parsers.NumberParser;
10
-
11
- import org.json.JSONObject;
12
-
13
- public class LayoutOptions {
14
- public static LayoutOptions parse(Context context, JSONObject json) {
15
- LayoutOptions result = new LayoutOptions();
16
- if (json == null) return result;
17
-
18
- result.backgroundColor = ThemeColour.parse(context, json.optJSONObject("backgroundColor"));
19
- result.componentBackgroundColor = ThemeColour.parse(context, json.optJSONObject("componentBackgroundColor"));
20
- result.topMargin = NumberParser.parse(json, "topMargin");
21
- result.orientation = OrientationOptions.parse(json);
22
- result.direction = LayoutDirection.fromString(json.optString("direction", ""));
23
-
24
- return result;
25
- }
26
-
27
- public ThemeColour backgroundColor = new NullThemeColour();
28
- public ThemeColour componentBackgroundColor = new NullThemeColour();
29
- public Number topMargin = new NullNumber();
30
- public OrientationOptions orientation = new OrientationOptions();
31
- public LayoutDirection direction = LayoutDirection.DEFAULT;
32
-
33
- public void mergeWith(LayoutOptions other) {
34
- if (other.backgroundColor.hasValue()) backgroundColor = other.backgroundColor;
35
- if (other.componentBackgroundColor.hasValue()) componentBackgroundColor = other.componentBackgroundColor;
36
- if (other.topMargin.hasValue()) topMargin = other.topMargin;
37
- if (other.orientation.hasValue()) orientation = other.orientation;
38
- if (other.direction.hasValue()) direction = other.direction;
39
- }
40
-
41
- public void mergeWithDefault(LayoutOptions defaultOptions) {
42
- if (!backgroundColor.hasValue()) backgroundColor = defaultOptions.backgroundColor;
43
- if (!componentBackgroundColor.hasValue()) componentBackgroundColor = defaultOptions.componentBackgroundColor;
44
- if (!topMargin.hasValue()) topMargin = defaultOptions.topMargin;
45
- if (!orientation.hasValue()) orientation = defaultOptions.orientation;
46
- if (!direction.hasValue()) direction = defaultOptions.direction;
47
- }
48
- }
@@ -1,178 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import static com.reactnativenavigation.utils.CollectionUtils.forEach;
4
- import static org.assertj.core.api.Java6Assertions.assertThat;
5
- import static org.mockito.ArgumentMatchers.any;
6
- import static org.mockito.Mockito.mock;
7
- import static org.mockito.Mockito.when;
8
-
9
- import android.app.Activity;
10
- import android.content.Context;
11
- import android.content.res.Configuration;
12
- import android.content.res.Resources;
13
- import android.os.Handler;
14
- import android.os.Looper;
15
- import android.view.View;
16
- import android.view.ViewGroup;
17
-
18
- import androidx.annotation.CallSuper;
19
- import androidx.appcompat.app.AppCompatActivity;
20
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
21
-
22
- import com.reactnativenavigation.options.params.Bool;
23
- import com.reactnativenavigation.utils.Functions;
24
- import com.reactnativenavigation.utils.SystemUiUtils;
25
- import com.reactnativenavigation.utils.ViewUtils;
26
- import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
27
-
28
- import org.junit.After;
29
- import org.junit.Before;
30
- import org.junit.runner.RunWith;
31
- import org.mockito.ArgumentMatchers;
32
- import org.mockito.MockedStatic;
33
- import org.mockito.Mockito;
34
- import org.robolectric.Robolectric;
35
- import org.robolectric.RobolectricTestRunner;
36
- import org.robolectric.Shadows;
37
- import org.robolectric.android.controller.ActivityController;
38
- import org.robolectric.annotation.Config;
39
- import org.robolectric.shadows.ShadowLooper;
40
-
41
- import java.util.Arrays;
42
-
43
- @RunWith(RobolectricTestRunner.class)
44
- @Config(sdk = 28, application = TestApplication.class)
45
- public abstract class BaseTest {
46
- private final Handler handler = new Handler(Looper.getMainLooper());
47
- private final ShadowLooper shadowMainLooper = Shadows.shadowOf(Looper.getMainLooper());
48
- protected Configuration mockConfiguration;
49
-
50
- @Before
51
- public void beforeEach() {
52
- NavigationApplication.instance = Mockito.mock(NavigationApplication.class);
53
- mockConfiguration = Mockito.mock(Configuration.class);
54
- Resources res = mock(Resources.class);
55
- mockConfiguration.uiMode = Configuration.UI_MODE_NIGHT_NO;
56
- when(res.getConfiguration()).thenReturn(mockConfiguration);
57
- when(NavigationApplication.instance.getResources()).thenReturn(res);
58
- when(res.getColor(ArgumentMatchers.anyInt())).thenReturn(0x00000);
59
- when(res.getColor(ArgumentMatchers.anyInt(),any())).thenReturn(0x00000);
60
- }
61
-
62
-
63
- public void mockSystemUiUtils(int statusBarHeight, int statusBarHeightDp, Functions.Func1<MockedStatic<SystemUiUtils>> mockedBlock) {
64
- try (MockedStatic<SystemUiUtils> theMock = Mockito.mockStatic(SystemUiUtils.class)) {
65
- theMock.when(() -> {
66
- SystemUiUtils.getStatusBarHeight(any());
67
- }).thenReturn(statusBarHeight);
68
- theMock.when(() -> {
69
- SystemUiUtils.getStatusBarHeightDp(any());
70
- }).thenReturn(statusBarHeightDp);
71
- mockedBlock.run(theMock);
72
- }
73
- }
74
-
75
- @After
76
- @CallSuper
77
- public void afterEach() {
78
- idleMainLooper();
79
- }
80
-
81
- public Activity newActivity() {
82
- return Robolectric.setupActivity(AppCompatActivity.class);
83
- }
84
-
85
- public <T extends AppCompatActivity> ActivityController<T> newActivityController(Class<T> clazz) {
86
- return Robolectric.buildActivity(clazz);
87
- }
88
-
89
- public void assertIsChild(ViewGroup parent, ViewController<?>... children) {
90
- forEach(Arrays.asList(children), c -> assertIsChild(parent, c.getView()));
91
- }
92
-
93
- public void assertIsChild(ViewGroup parent, View child) {
94
- assertThat(parent).isNotNull();
95
- assertThat(child).isNotNull();
96
- assertThat(ViewUtils.isChildOf(parent, child)).isTrue();
97
- }
98
-
99
- public void assertNotChildOf(ViewGroup parent, ViewController<?>... children) {
100
- forEach(Arrays.asList(children), c -> assertNotChildOf(parent, c.getView()));
101
- }
102
-
103
- public void assertNotChildOf(ViewGroup parent, View child) {
104
- assertThat(parent).isNotNull();
105
- assertThat(child).isNotNull();
106
- assertThat(ViewUtils.isChildOf(parent, child)).isFalse();
107
- }
108
-
109
- public void assertMatchParent(View view) {
110
- assertThat(view.getLayoutParams().width).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT);
111
- assertThat(view.getLayoutParams().height).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT);
112
- }
113
-
114
- protected void disablePushAnimation(ViewController<?>... controllers) {
115
- for (ViewController<?> controller : controllers) {
116
- controller.options.animations.push.enabled = new Bool(false);
117
- }
118
- }
119
-
120
- protected void disablePopAnimation(ViewController<?>... controllers) {
121
- for (ViewController<?> controller : controllers) {
122
- controller.options.animations.pop.enabled = new Bool(false);
123
- }
124
- }
125
-
126
- protected void disableModalAnimations(ViewController<?>... modals) {
127
- disableShowModalAnimation(modals);
128
- disableDismissModalAnimation(modals);
129
- }
130
-
131
- protected void disableShowModalAnimation(ViewController<?>... modals) {
132
- for (ViewController<?> modal : modals) {
133
- modal.options.animations.showModal.toggle(new Bool(false));
134
- }
135
- }
136
-
137
- protected void disableDismissModalAnimation(ViewController<?>... modals) {
138
- for (ViewController<?> modal : modals) {
139
- modal.options.animations.dismissModal.toggle(new Bool(false));
140
- }
141
- }
142
-
143
- protected void dispatchPreDraw(View view) {
144
- view.getViewTreeObserver().dispatchOnPreDraw();
145
- }
146
-
147
- protected void dispatchOnGlobalLayout(View view) {
148
- view.getViewTreeObserver().dispatchOnGlobalLayout();
149
- }
150
-
151
- protected void addToParent(Context context, ViewController<?>... controllers) {
152
- for (ViewController<?> controller : controllers) {
153
- new CoordinatorLayout(context).addView(controller.getView());
154
- }
155
- }
156
-
157
- protected View mockView(Activity activity) {
158
- View mock = Mockito.mock(View.class);
159
- when(mock.getContext()).thenReturn(activity);
160
- return mock;
161
- }
162
-
163
- protected void assertVisible(View view) {
164
- assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
165
- }
166
-
167
- protected void assertGone(View view) {
168
- assertThat(view.getVisibility()).isEqualTo(View.GONE);
169
- }
170
-
171
- protected void post(Runnable runnable) {
172
- handler.post(runnable);
173
- }
174
-
175
- protected void idleMainLooper() {
176
- shadowMainLooper.idle();
177
- }
178
- }
@@ -1,43 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import com.google.android.material.floatingactionbutton.FloatingActionButton;
4
- import androidx.appcompat.app.AppCompatActivity;
5
-
6
- import com.facebook.react.common.*;
7
-
8
- import org.junit.*;
9
- import org.robolectric.*;
10
-
11
- import static org.assertj.core.api.Java6Assertions.*;
12
-
13
- public class EnvironmentTest extends BaseTest {
14
- @Test
15
- public void assertJ() {
16
- assertThat(1 + 2).isEqualTo(3).isGreaterThan(2).isLessThan(4).isNotNegative().isPositive().isNotZero();
17
- }
18
-
19
- @Test
20
- public void react() {
21
- assertThat(ReactConstants.TAG).isNotEmpty();
22
- }
23
-
24
- @Test
25
- public void supportV7AppCompat() {
26
- assertThat(AppCompatActivity.class).isNotNull();
27
- }
28
-
29
- @Test
30
- public void supportDesign() {
31
- assertThat(FloatingActionButton.class).isNotNull();
32
- }
33
-
34
- @Test
35
- public void androidR() {
36
- assertThat(R.string.bottom_sheet_behavior).isNotZero();
37
- }
38
-
39
- @Test
40
- public void ableToLoadApplication() throws Exception {
41
- assertThat(RuntimeEnvironment.application).isNotNull();
42
- }
43
- }
@@ -1,23 +0,0 @@
1
- package com.reactnativenavigation;
2
-
3
- import com.reactnativenavigation.react.ReactGateway;
4
- import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
5
-
6
- import org.mockito.Mockito;
7
-
8
- public class TestActivity extends NavigationActivity {
9
-
10
- @Override
11
- public ReactGateway getReactGateway() {
12
- return Mockito.mock(ReactGateway.class);
13
- }
14
-
15
- public void setNavigator(Navigator navigator) {
16
- this.navigator = navigator;
17
- }
18
-
19
- @Override
20
- public void onBackPressed() {
21
- super.onBackPressed();
22
- }
23
- }