@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (581) hide show
  1. package/ApexNavigation.podspec +2 -1
  2. package/CHANGELOG.md +132 -0
  3. package/README.md +147 -51
  4. package/android/CLAUDE.md +78 -25
  5. package/android/CORE.md +49 -25
  6. package/android/RECIPES.md +13 -6
  7. package/android/consumer-rules.pro +6 -0
  8. package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +85 -10
  9. package/android/src/main/java/dev/apexnative/navigation/NavigationApplication.kt +34 -13
  10. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutChecks.kt +5 -1
  11. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutNode.kt +6 -2
  12. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenContext.kt +2 -2
  13. package/android/src/main/java/dev/apexnative/navigation/options/AnimationsOptions.kt +2 -2
  14. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabOptions.kt +1 -1
  15. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabsOptions.kt +13 -8
  16. package/android/src/main/java/dev/apexnative/navigation/options/ButtonMenuOptions.kt +2 -2
  17. package/android/src/main/java/dev/apexnative/navigation/options/ButtonOptions.kt +3 -3
  18. package/android/src/main/java/dev/apexnative/navigation/options/HardwareBackButtonOptions.kt +9 -1
  19. package/android/src/main/java/dev/apexnative/navigation/options/LargeTitleOptions.kt +1 -1
  20. package/android/src/main/java/dev/apexnative/navigation/options/LayoutAnimation.kt +1 -1
  21. package/android/src/main/java/dev/apexnative/navigation/options/OptionKey.kt +18 -0
  22. package/android/src/main/java/dev/apexnative/navigation/options/OptionPaths.kt +91 -0
  23. package/android/src/main/java/dev/apexnative/navigation/options/OptionsCache.kt +8 -4
  24. package/android/src/main/java/dev/apexnative/navigation/options/SheetOptions.kt +7 -4
  25. package/android/src/main/java/dev/apexnative/navigation/options/SideMenuOptions.kt +6 -1
  26. package/android/src/main/java/dev/apexnative/navigation/options/StackAnimationOptions.kt +40 -2
  27. package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +7 -3
  28. package/android/src/main/java/dev/apexnative/navigation/options/TitleOptions.kt +2 -2
  29. package/android/src/main/java/dev/apexnative/navigation/options/TopBarAppearanceOptions.kt +1 -1
  30. package/android/src/main/java/dev/apexnative/navigation/options/TopBarOptions.kt +16 -7
  31. package/android/src/main/java/dev/apexnative/navigation/options/UserChoices.kt +159 -0
  32. package/android/src/main/java/dev/apexnative/navigation/react/CommandAnswer.kt +29 -36
  33. package/android/src/main/java/dev/apexnative/navigation/react/CommandContract.kt +59 -0
  34. package/android/src/main/java/dev/apexnative/navigation/react/ContentHeights.kt +95 -0
  35. package/android/src/main/java/dev/apexnative/navigation/react/ContentMounts.kt +66 -0
  36. package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +75 -60
  37. package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +35 -23
  38. package/android/src/main/java/dev/apexnative/navigation/react/NavigationTurboModule.kt +12 -7
  39. package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +42 -4
  40. package/android/src/main/java/dev/apexnative/navigation/react/PendingCalls.kt +48 -0
  41. package/android/src/main/java/dev/apexnative/navigation/react/ReactView.kt +54 -20
  42. package/android/src/main/java/dev/apexnative/navigation/react/ReloadCoordinator.kt +7 -6
  43. package/android/src/main/java/dev/apexnative/navigation/react/ScreenEnvironment.kt +177 -0
  44. package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +19 -50
  45. package/android/src/main/java/dev/apexnative/navigation/react/ScrollEvents.kt +49 -128
  46. package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +50 -81
  47. package/android/src/main/java/dev/apexnative/navigation/react/events/EventContract.kt +226 -0
  48. package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +135 -94
  49. package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationState.kt +154 -0
  50. package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +0 -6
  51. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaView.kt +12 -10
  52. package/android/src/main/java/dev/apexnative/navigation/slots/SlotContainers.kt +10 -7
  53. package/android/src/main/java/dev/apexnative/navigation/slots/SlotScreenView.kt +39 -19
  54. package/android/src/main/java/dev/apexnative/navigation/slots/SlotView.kt +16 -4
  55. package/android/src/main/java/dev/apexnative/navigation/slots/SlotViews.kt +40 -0
  56. package/android/src/main/java/dev/apexnative/navigation/utils/ImageKey.kt +66 -0
  57. package/android/src/main/java/dev/apexnative/navigation/utils/ImageLoader.kt +7 -89
  58. package/android/src/main/java/dev/apexnative/navigation/utils/ImageRequests.kt +76 -0
  59. package/android/src/main/java/dev/apexnative/navigation/utils/MaterialTheme.kt +5 -6
  60. package/android/src/main/java/dev/apexnative/navigation/utils/OptionImages.kt +262 -0
  61. package/android/src/main/java/dev/apexnative/navigation/utils/SystemAnimations.kt +36 -0
  62. package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +3 -3
  63. package/android/src/main/java/dev/apexnative/navigation/utils/ViewController.kt +3 -1
  64. package/android/src/main/java/dev/apexnative/navigation/utils/ViewExtensions.kt +0 -13
  65. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementController.kt +10 -7
  66. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementDefinition.kt +9 -3
  67. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementPlanner.kt +20 -15
  68. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +13 -5
  69. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/AppliedTabCalls.kt +49 -0
  70. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsCollapseBehavior.kt +5 -3
  71. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +108 -34
  72. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsPresenter.kt +25 -24
  73. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowGeometry.kt +22 -0
  74. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +3 -3
  75. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsRoom.kt +0 -5
  76. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +28 -7
  77. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentViewController.kt +12 -9
  78. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ContentReadiness.kt +2 -2
  79. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RenderWait.kt +27 -7
  80. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +1 -1
  81. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenReadiness.kt +103 -56
  82. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenSafeArea.kt +29 -11
  83. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentViewController.kt +2 -6
  84. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +22 -24
  85. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +109 -21
  86. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +21 -6
  87. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +476 -73
  88. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +57 -25
  89. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetBack.kt +42 -0
  90. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetStops.kt +83 -0
  91. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackCheck.kt +50 -0
  92. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +49 -14
  93. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +71 -12
  94. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +37 -11
  95. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +10 -8
  96. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/Capabilities.kt +11 -4
  97. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +3 -3
  98. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +6 -6
  99. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +42 -9
  100. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +19 -8
  101. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +16 -7
  102. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +43 -4
  103. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitPanes.kt +23 -0
  104. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +77 -17
  105. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/BackPreview.kt +315 -0
  106. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedFrame.kt +3 -3
  107. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackCommands.kt +30 -20
  108. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +216 -18
  109. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +26 -1
  110. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +149 -41
  111. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +26 -8
  112. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +115 -6
  113. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabMotion.kt +142 -0
  114. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPresenter.kt +222 -48
  115. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/ScreenSearch.kt +3 -5
  116. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/StackSearchPresenter.kt +30 -34
  117. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarComponents.kt +5 -51
  118. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarRowTransition.kt +3 -2
  119. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonPlaces.kt +11 -5
  120. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/MenuChecks.kt +13 -56
  121. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +219 -54
  122. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarVisibility.kt +9 -2
  123. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ScrollEventListener.kt +6 -9
  124. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +75 -21
  125. package/android/src/main/java/dev/apexnative/navigation/views/animations/AnimationLayer.kt +73 -0
  126. package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +29 -11
  127. package/android/src/main/java/dev/apexnative/navigation/views/animations/ValueInterpolation.kt +14 -0
  128. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +9 -7
  129. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsLayout.kt +61 -2
  130. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomBottomTabItemView.kt +0 -5
  131. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomTabRow.kt +72 -10
  132. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStep.kt +31 -0
  133. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +143 -135
  134. package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +13 -5
  135. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionLayer.kt +37 -112
  136. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +9 -6
  137. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionViews.kt +100 -0
  138. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +112 -4
  139. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/FlightGeometry.kt +346 -36
  140. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMorph.kt +199 -0
  141. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +56 -41
  142. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextMorph.kt +176 -0
  143. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewMorph.kt +108 -0
  144. package/android/src/main/java/dev/apexnative/navigation/views/sidemenu/SideMenuView.kt +12 -3
  145. package/android/src/main/java/dev/apexnative/navigation/views/stack/ScreenEdge.kt +45 -0
  146. package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +140 -1
  147. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/Fab.kt +14 -10
  148. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabCopy.kt +85 -0
  149. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabMenu.kt +13 -0
  150. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +5 -17
  151. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +73 -34
  152. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonComponentCell.kt +6 -6
  153. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonView.kt +113 -0
  154. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarMenu.kt +219 -0
  155. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +125 -178
  156. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonMenus.kt +34 -64
  157. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonRow.kt +216 -0
  158. package/android/src/main/jni/ANNContentHeights.cpp +82 -0
  159. package/android/src/main/res/drawable/apex_navigation_ic_arrow_right.xml +14 -0
  160. package/android/src/main/res/layout/apex_navigation_menu_header.xml +19 -0
  161. package/android/src/main/res/layout/apex_navigation_menu_item.xml +68 -0
  162. package/android/src/main/res/values/styles.xml +1 -1
  163. package/android/src/main/res/values-night/styles.xml +1 -1
  164. package/cli/app.js +1 -1
  165. package/cli/doctor/checks/app.js +77 -14
  166. package/cli/doctor/checks/splash.js +4 -22
  167. package/cli/migrate/native.js +18 -0
  168. package/cli/project.js +10 -2
  169. package/cli/setup/index.js +18 -0
  170. package/cli/setup/source.js +2 -1
  171. package/cli/setup/steps/appDelegate.js +66 -11
  172. package/cli/setup/steps/mainApplication.js +134 -19
  173. package/cli/setup/steps/metro.js +46 -0
  174. package/cli/setup/steps/sceneDelegate.js +108 -0
  175. package/cli/splash/index.js +3 -1
  176. package/docs-md/architecture/native-screens.md +4 -0
  177. package/docs-md/architecture/theme-and-context.md +131 -12
  178. package/docs-md/architecture/transitions.md +58 -12
  179. package/docs-md/containers/arrangement.md +17 -1
  180. package/docs-md/containers/modals.md +8 -4
  181. package/docs-md/containers/overlays.md +3 -1
  182. package/docs-md/containers/side-menu.md +19 -2
  183. package/docs-md/containers/tabs.md +5 -1
  184. package/docs-md/flows/bottom-sheets.md +4 -2
  185. package/docs-md/flows/forms-in-a-modal.md +1 -1
  186. package/docs-md/fundamentals/screens-and-props.md +9 -1
  187. package/docs-md/fundamentals/starting-the-app.md +1 -1
  188. package/docs-md/guides/cli.md +4 -3
  189. package/docs-md/guides/deep-links.md +15 -33
  190. package/docs-md/help/glossary.md +4 -4
  191. package/docs-md/help/troubleshooting.md +44 -6
  192. package/docs-md/index.json +61 -1
  193. package/docs-md/migration/from-expo-router.md +1 -1
  194. package/docs-md/migration/from-react-native-navigation.md +9 -3
  195. package/docs-md/migration/from-react-navigation.md +2 -2
  196. package/docs-md/screen-ui/back-and-gestures.md +46 -2
  197. package/docs-md/screen-ui/bar-buttons.md +5 -5
  198. package/docs-md/screen-ui/search.md +1 -1
  199. package/docs-md/screen-ui/system-ui.md +17 -12
  200. package/docs-md/screen-ui/toolbar-and-fab.md +4 -2
  201. package/docs-md/screen-ui/top-bar.md +8 -4
  202. package/docs-md/start/installation.md +21 -3
  203. package/ios/Animations/ANNFrameDriver.h +55 -15
  204. package/ios/Animations/ANNFrameDriver.mm +216 -60
  205. package/ios/Animations/ANNTransitionAnimator.h +26 -5
  206. package/ios/Animations/ANNTransitionAnimator.mm +61 -13
  207. package/ios/Animations/ANNTransitionPlan.h +2 -2
  208. package/ios/Animations/ANNTransitionPlan.mm +10 -0
  209. package/ios/Animations/ANNTransitionWait.mm +6 -7
  210. package/ios/Animations/Elements/ANNElementFinder.h +57 -0
  211. package/ios/Animations/Elements/ANNElementFinder.mm +174 -2
  212. package/ios/Animations/Elements/ANNElementTransition.h +10 -8
  213. package/ios/Animations/Elements/ANNElementTransition.mm +19 -21
  214. package/ios/Animations/Elements/ANNSharedElementFlight.h +16 -11
  215. package/ios/Animations/Elements/ANNSharedElementFlight.mm +308 -69
  216. package/ios/Animations/Interpolators/ANNInterpolate.h +2 -30
  217. package/ios/Animations/Interpolators/ANNTransformParts.h +48 -0
  218. package/ios/Animations/Interpolators/ANNTransformParts.mm +507 -0
  219. package/ios/Animations/Interpolators/ANNViewTracks.h +9 -6
  220. package/ios/Animations/Interpolators/ANNViewTracks.mm +100 -30
  221. package/ios/CLAUDE.md +60 -24
  222. package/ios/CORE.md +44 -34
  223. package/ios/Contract/ANNCommandAnswer.h +13 -5
  224. package/ios/Contract/ANNCommandAnswer.mm +40 -32
  225. package/ios/Contract/ANNCommandContract.h +15 -0
  226. package/ios/Contract/ANNCommandContract.mm +78 -0
  227. package/ios/Contract/ANNCommandRunner.h +10 -9
  228. package/ios/Contract/ANNCommandRunner.mm +22 -28
  229. package/ios/Contract/ANNErrorTexts.h +6 -2
  230. package/ios/Contract/ANNErrorTexts.mm +18 -10
  231. package/ios/Contract/ANNLayoutNode.h +3 -3
  232. package/ios/Contract/ANNLayoutReader.h +3 -3
  233. package/ios/Core/ANNAppDelegate.mm +0 -2
  234. package/ios/Core/ANNAppearanceDispatcher.h +5 -4
  235. package/ios/Core/ANNAppearanceDispatcher.mm +12 -1
  236. package/ios/Core/ANNDeepLinkQueue.h +22 -2
  237. package/ios/Core/ANNDeepLinkQueue.mm +121 -14
  238. package/ios/Core/ANNErrorHandler.h +9 -4
  239. package/ios/Core/ANNErrorHandler.mm +20 -2
  240. package/ios/Core/ANNEventContract.h +246 -0
  241. package/ios/Core/ANNEventContract.mm +225 -0
  242. package/ios/Core/ANNEventEmitter.h +6 -2
  243. package/ios/Core/ANNEventEmitter.mm +117 -80
  244. package/ios/Core/ANNHinge.h +6 -0
  245. package/ios/Core/ANNHinge.mm +15 -4
  246. package/ios/Core/ANNJavaScriptCalls.h +33 -0
  247. package/ios/Core/ANNJavaScriptCalls.mm +52 -0
  248. package/ios/Core/ANNLayoutProtocol.h +5 -5
  249. package/ios/Core/ANNNavigationState.h +7 -5
  250. package/ios/Core/ANNNavigationState.mm +8 -7
  251. package/ios/Core/ANNNodeHelper.h +32 -12
  252. package/ios/Core/ANNNodeHelper.mm +100 -3
  253. package/ios/Core/ANNParking.h +5 -4
  254. package/ios/Core/ANNReloadCoordinator.mm +5 -12
  255. package/ios/Core/ANNRenderWait.h +20 -6
  256. package/ios/Core/ANNRenderWait.mm +143 -56
  257. package/ios/Core/ANNSceneDelegate.mm +25 -15
  258. package/ios/Core/ANNSystemUI.h +3 -2
  259. package/ios/Core/ANNSystemUI.mm +7 -0
  260. package/ios/Core/ANNUtils.h +7 -0
  261. package/ios/Core/ANNUtils.mm +10 -0
  262. package/ios/Core/ApexNavigation+Internal.h +1 -1
  263. package/ios/Core/ApexNavigation.mm +7 -6
  264. package/ios/Core/UIViewController+LayoutProtocol.h +9 -2
  265. package/ios/Core/UIViewController+LayoutProtocol.mm +8 -0
  266. package/ios/Layouts/Arrangement/ANNArrangementState.h +2 -17
  267. package/ios/Layouts/Arrangement/ANNArrangementState.mm +0 -38
  268. package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +195 -21
  269. package/ios/Layouts/Modal/ANNModalCoordinator.h +1 -1
  270. package/ios/Layouts/Modal/ANNModalCoordinator.mm +57 -16
  271. package/ios/Layouts/Modal/ANNModalPresentation.h +8 -5
  272. package/ios/Layouts/Modal/ANNModalPresentation.mm +12 -12
  273. package/ios/Layouts/Modal/ANNSheetPresenter.mm +83 -1
  274. package/ios/Layouts/Overlay/ANNOverlayCoordinator.mm +2 -8
  275. package/ios/Layouts/Root/ANNRootCoordinator.mm +58 -19
  276. package/ios/Layouts/Root/ANNSplashViewController.h +5 -3
  277. package/ios/Layouts/Root/ANNSplashViewController.mm +147 -0
  278. package/ios/Layouts/Screen/ANNComponentPresenter.h +11 -3
  279. package/ios/Layouts/Screen/ANNComponentPresenter.mm +34 -6
  280. package/ios/Layouts/Screen/ANNComponentViewController.h +15 -13
  281. package/ios/Layouts/Screen/ANNComponentViewController.mm +130 -75
  282. package/ios/Layouts/Screen/ANNNativeScreenContext.mm +7 -5
  283. package/ios/Layouts/Screen/ANNPreviewInteraction.h +7 -4
  284. package/ios/Layouts/Screen/ANNPreviewInteraction.mm +72 -10
  285. package/ios/Layouts/Screen/ANNScreenEnvironment.h +63 -0
  286. package/ios/Layouts/Screen/ANNScreenEnvironment.mm +181 -0
  287. package/ios/Layouts/Screen/ANNScreenPlace.h +53 -0
  288. package/ios/Layouts/Screen/ANNScreenPlace.mm +205 -0
  289. package/ios/Layouts/Screen/ANNScreenRegions.h +3 -18
  290. package/ios/Layouts/Screen/ANNScreenRegions.mm +9 -44
  291. package/ios/Layouts/Screen/ANNScreenSafeArea.h +4 -9
  292. package/ios/Layouts/Screen/ANNScreenSafeArea.mm +14 -16
  293. package/ios/Layouts/Screen/ANNScreenSettling.h +34 -0
  294. package/ios/Layouts/Screen/ANNScreenSettling.mm +171 -0
  295. package/ios/Layouts/SideMenu/ANNSideMenuTypes.h +8 -0
  296. package/ios/Layouts/SideMenu/ANNSideMenuViewController.mm +83 -14
  297. package/ios/Layouts/SplitView/ANNSplitViewCommands.h +3 -2
  298. package/ios/Layouts/SplitView/ANNSplitViewCommands.mm +105 -39
  299. package/ios/Layouts/SplitView/ANNSplitViewController.mm +7 -8
  300. package/ios/Layouts/Stack/ANNPreviewPush.h +7 -6
  301. package/ios/Layouts/Stack/ANNPreviewPush.mm +142 -27
  302. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.h +11 -2
  303. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.mm +14 -7
  304. package/ios/Layouts/Stack/ANNStackCommands.mm +1 -0
  305. package/ios/Layouts/Stack/ANNStackController.h +8 -0
  306. package/ios/Layouts/Stack/ANNStackController.mm +184 -16
  307. package/ios/Layouts/Stack/ANNStackQueue.h +5 -2
  308. package/ios/Layouts/Stack/ANNStackQueue.mm +56 -43
  309. package/ios/Layouts/Stack/ANNSwipePopInteraction.h +26 -0
  310. package/ios/Layouts/Stack/ANNSwipePopInteraction.mm +185 -0
  311. package/ios/Layouts/Stack/InteractivePopGestureDelegate.mm +28 -4
  312. package/ios/Layouts/Stack/UINavigationController+ANNCommands.h +4 -2
  313. package/ios/Layouts/Stack/UINavigationController+ANNCommands.mm +2 -3
  314. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.h +4 -0
  315. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.mm +11 -0
  316. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.h +12 -1
  317. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.mm +23 -0
  318. package/ios/Layouts/Tabs/ANNBottomTabsController.h +3 -0
  319. package/ios/Layouts/Tabs/ANNBottomTabsController.mm +237 -57
  320. package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.mm +8 -3
  321. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.h +6 -2
  322. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.mm +232 -43
  323. package/ios/Layouts/Tabs/ANNTabsDesign.h +6 -5
  324. package/ios/Layouts/Tabs/ANNTabsDesign.mm +9 -1
  325. package/ios/Layouts/Tabs/UITabBar+utils.h +5 -5
  326. package/ios/Layouts/Tabs/UITabBar+utils.mm +32 -13
  327. package/ios/Options/ANNAnimationOptions.h +2 -1
  328. package/ios/Options/ANNAnimationOptions.mm +1 -1
  329. package/ios/Options/ANNBottomTabsOptions.h +2 -0
  330. package/ios/Options/ANNBottomTabsOptions.mm +1 -0
  331. package/ios/Options/ANNOptions.h +25 -0
  332. package/ios/Options/ANNOptions.mm +157 -1
  333. package/ios/Options/ANNOptionsCache.h +7 -6
  334. package/ios/Options/ANNOptionsReader.mm +108 -0
  335. package/ios/Options/ANNSearchBarOptions.h +4 -3
  336. package/ios/Options/ANNSheetOptions.h +4 -1
  337. package/ios/Options/ANNSideMenuOptions.h +2 -0
  338. package/ios/Options/ANNSideMenuOptions.mm +2 -0
  339. package/ios/Options/ANNStackPopAnimationOptions.h +13 -0
  340. package/ios/Options/ANNStackPopAnimationOptions.mm +11 -0
  341. package/ios/Options/ANNUserChoice.h +57 -0
  342. package/ios/Options/ANNUserChoice.mm +44 -0
  343. package/ios/Options/Params/ANNImageSource.h +61 -0
  344. package/ios/Options/Params/ANNImageSource.mm +101 -0
  345. package/ios/Options/Params/ANNOptionImages.h +37 -0
  346. package/ios/Options/Params/ANNOptionImages.mm +284 -0
  347. package/ios/Options/Params/ANNParam.h +15 -0
  348. package/ios/Options/Params/ANNParam.mm +61 -0
  349. package/ios/Options/Params/Color.h +3 -0
  350. package/ios/Options/Params/Color.mm +21 -0
  351. package/ios/Options/Params/ColorParser.h +4 -3
  352. package/ios/Options/Params/ColorParser.mm +22 -4
  353. package/ios/Options/Params/Image.h +15 -2
  354. package/ios/Options/Params/Image.mm +35 -2
  355. package/ios/Options/Params/ImageParser.h +5 -5
  356. package/ios/Options/Params/ImageParser.mm +28 -46
  357. package/ios/Public/ApexNavigation/ANNSceneDelegate.h +3 -0
  358. package/ios/Public/ApexNavigation/ApexNavigation.h +1 -1
  359. package/ios/RECIPES.md +13 -6
  360. package/ios/React/ANNReactView.mm +6 -25
  361. package/ios/React/ANNSafeAreaViewComponentView.mm +28 -17
  362. package/ios/React/ANNSurfaceHostingView.h +14 -0
  363. package/ios/React/ANNSurfaceHostingView.mm +144 -1
  364. package/ios/React/Slots/ANNSlotComponentView.mm +24 -17
  365. package/ios/React/Slots/ANNSlotContainers.h +14 -6
  366. package/ios/React/Slots/ANNSlotContainers.mm +75 -2
  367. package/ios/React/Slots/ANNSlotHost.mm +1 -3
  368. package/ios/React/Slots/ANNSlotScreenView.mm +8 -2
  369. package/ios/TopBar/ANNBackButtonPresenter.mm +6 -5
  370. package/ios/TopBar/ANNBarAppearance.h +2 -1
  371. package/ios/TopBar/ANNBarAppearance.mm +111 -30
  372. package/ios/TopBar/ANNBarBackgroundComponent.mm +16 -0
  373. package/ios/TopBar/ANNBarButtonComponentView.h +4 -4
  374. package/ios/TopBar/ANNBarButtonComponentView.mm +1 -1
  375. package/ios/TopBar/ANNBarButtons.h +14 -8
  376. package/ios/TopBar/ANNBarButtons.mm +397 -80
  377. package/ios/TopBar/ANNIconButtonImage.h +1 -0
  378. package/ios/TopBar/ANNIconButtonImage.mm +34 -1
  379. package/ios/TopBar/ANNLargeTitlePresenter.h +13 -0
  380. package/ios/TopBar/ANNLargeTitlePresenter.mm +50 -7
  381. package/ios/TopBar/ANNMainList.h +3 -0
  382. package/ios/TopBar/ANNMainList.mm +4 -0
  383. package/ios/TopBar/ANNScrollEdgeEffects.h +22 -6
  384. package/ios/TopBar/ANNScrollEdgeEffects.mm +123 -16
  385. package/ios/TopBar/ANNSearchPresenter.mm +172 -21
  386. package/ios/TopBar/ANNSearchResultsViewController.mm +29 -6
  387. package/ios/TopBar/ANNTopBarPresenter.h +8 -2
  388. package/ios/TopBar/ANNTopBarPresenter.mm +155 -33
  389. package/ios/TurboModules/ANNTurboEventEmitter.mm +4 -35
  390. package/ios/TurboModules/ANNTurboModule.mm +104 -33
  391. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.cpp +20 -0
  392. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.h +5 -14
  393. package/lib/module/ARCHITECTURE.md +40 -27
  394. package/lib/module/adapters/NativeANNTurboModule.js.map +1 -1
  395. package/lib/module/api/app/AppRegistry.js +14 -2
  396. package/lib/module/api/app/AppRegistry.js.map +1 -1
  397. package/lib/module/api/app/createNavigation.js +190 -66
  398. package/lib/module/api/app/createNavigation.js.map +1 -1
  399. package/lib/module/api/commands/commands.js +54 -6
  400. package/lib/module/api/commands/commands.js.map +1 -1
  401. package/lib/module/api/events/navigationEvents.js +6 -2
  402. package/lib/module/api/events/navigationEvents.js.map +1 -1
  403. package/lib/module/api/hooks/useNavigation.js +8 -3
  404. package/lib/module/api/hooks/useNavigation.js.map +1 -1
  405. package/lib/module/api/hooks/useSafeAreaInsets.js +4 -3
  406. package/lib/module/api/hooks/useSafeAreaInsets.js.map +1 -1
  407. package/lib/module/api/linking/dispatchedLinks.js +23 -0
  408. package/lib/module/api/linking/dispatchedLinks.js.map +1 -0
  409. package/lib/module/api/linking/linking.js +11 -0
  410. package/lib/module/api/linking/linking.js.map +1 -1
  411. package/lib/module/api/navigation.js.map +1 -1
  412. package/lib/module/api/options/OptionsChain.js +2 -2
  413. package/lib/module/api/screens/arrangement.js +5 -2
  414. package/lib/module/api/screens/arrangement.js.map +1 -1
  415. package/lib/module/api/screens/defineScreen.js +45 -3
  416. package/lib/module/api/screens/defineScreen.js.map +1 -1
  417. package/lib/module/api/screens/nativeScreens.js +31 -6
  418. package/lib/module/api/screens/nativeScreens.js.map +1 -1
  419. package/lib/module/api/screens/registerScreens.js +193 -35
  420. package/lib/module/api/screens/registerScreens.js.map +1 -1
  421. package/lib/module/api/theme/theme.js +5 -0
  422. package/lib/module/api/theme/theme.js.map +1 -1
  423. package/lib/module/engine/commands.js +51 -9
  424. package/lib/module/engine/commands.js.map +1 -1
  425. package/lib/module/engine/layout.js +20 -11
  426. package/lib/module/engine/layout.js.map +1 -1
  427. package/lib/module/engine/nativeScreens.js +9 -0
  428. package/lib/module/engine/nativeScreens.js.map +1 -1
  429. package/lib/module/engine/options.js +49 -15
  430. package/lib/module/engine/options.js.map +1 -1
  431. package/lib/module/engine/optionsChange.js +102 -0
  432. package/lib/module/engine/optionsChange.js.map +1 -0
  433. package/lib/module/engine/places.js +52 -7
  434. package/lib/module/engine/places.js.map +1 -1
  435. package/lib/module/engine/props.js +30 -1
  436. package/lib/module/engine/props.js.map +1 -1
  437. package/lib/module/engine/refresh.js +85 -0
  438. package/lib/module/engine/refresh.js.map +1 -0
  439. package/lib/module/engine/rememberedOptions.js +61 -1
  440. package/lib/module/engine/rememberedOptions.js.map +1 -1
  441. package/lib/module/engine/screens.js +77 -16
  442. package/lib/module/engine/screens.js.map +1 -1
  443. package/lib/module/interfaces/contract/commands.json +101 -0
  444. package/lib/module/interfaces/contract/errors.json +275 -0
  445. package/lib/typescript/adapters/NativeANNTurboModule.d.ts +12 -2
  446. package/lib/typescript/adapters/NativeANNTurboModule.d.ts.map +1 -1
  447. package/lib/typescript/api/app/AppRegistry.d.ts.map +1 -1
  448. package/lib/typescript/api/app/createNavigation.d.ts +8 -3
  449. package/lib/typescript/api/app/createNavigation.d.ts.map +1 -1
  450. package/lib/typescript/api/commands/commands.d.ts.map +1 -1
  451. package/lib/typescript/api/commands/presentation.d.ts +4 -3
  452. package/lib/typescript/api/commands/presentation.d.ts.map +1 -1
  453. package/lib/typescript/api/events/navigationEvents.d.ts +3 -3
  454. package/lib/typescript/api/events/navigationEvents.d.ts.map +1 -1
  455. package/lib/typescript/api/hooks/useNavigation.d.ts +1 -1
  456. package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -1
  457. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts +4 -3
  458. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts.map +1 -1
  459. package/lib/typescript/api/index.d.ts +1 -1
  460. package/lib/typescript/api/index.d.ts.map +1 -1
  461. package/lib/typescript/api/linking/dispatchedLinks.d.ts +7 -0
  462. package/lib/typescript/api/linking/dispatchedLinks.d.ts.map +1 -0
  463. package/lib/typescript/api/linking/linking.d.ts +8 -0
  464. package/lib/typescript/api/linking/linking.d.ts.map +1 -1
  465. package/lib/typescript/api/navigation.d.ts +4 -1
  466. package/lib/typescript/api/navigation.d.ts.map +1 -1
  467. package/lib/typescript/api/options/OptionsChain.d.ts +2 -2
  468. package/lib/typescript/api/screens/arrangement.d.ts +12 -2
  469. package/lib/typescript/api/screens/arrangement.d.ts.map +1 -1
  470. package/lib/typescript/api/screens/defineScreen.d.ts +23 -4
  471. package/lib/typescript/api/screens/defineScreen.d.ts.map +1 -1
  472. package/lib/typescript/api/screens/nativeScreens.d.ts +8 -1
  473. package/lib/typescript/api/screens/nativeScreens.d.ts.map +1 -1
  474. package/lib/typescript/api/screens/registerScreens.d.ts.map +1 -1
  475. package/lib/typescript/api/theme/theme.d.ts +2 -0
  476. package/lib/typescript/api/theme/theme.d.ts.map +1 -1
  477. package/lib/typescript/engine/commands.d.ts +5 -0
  478. package/lib/typescript/engine/commands.d.ts.map +1 -1
  479. package/lib/typescript/engine/layout.d.ts.map +1 -1
  480. package/lib/typescript/engine/nativeScreens.d.ts +5 -0
  481. package/lib/typescript/engine/nativeScreens.d.ts.map +1 -1
  482. package/lib/typescript/engine/options.d.ts +5 -2
  483. package/lib/typescript/engine/options.d.ts.map +1 -1
  484. package/lib/typescript/engine/optionsChange.d.ts +28 -0
  485. package/lib/typescript/engine/optionsChange.d.ts.map +1 -0
  486. package/lib/typescript/engine/places.d.ts +7 -2
  487. package/lib/typescript/engine/places.d.ts.map +1 -1
  488. package/lib/typescript/engine/props.d.ts +8 -1
  489. package/lib/typescript/engine/props.d.ts.map +1 -1
  490. package/lib/typescript/engine/refresh.d.ts +35 -0
  491. package/lib/typescript/engine/refresh.d.ts.map +1 -0
  492. package/lib/typescript/engine/rememberedOptions.d.ts +13 -0
  493. package/lib/typescript/engine/rememberedOptions.d.ts.map +1 -1
  494. package/lib/typescript/engine/screens.d.ts +27 -6
  495. package/lib/typescript/engine/screens.d.ts.map +1 -1
  496. package/lib/typescript/interfaces/ComponentEvents.d.ts +4 -4
  497. package/lib/typescript/interfaces/ComponentEvents.d.ts.map +1 -1
  498. package/lib/typescript/interfaces/Events.d.ts +28 -10
  499. package/lib/typescript/interfaces/Events.d.ts.map +1 -1
  500. package/lib/typescript/interfaces/Options.d.ts +1 -1
  501. package/lib/typescript/interfaces/Options.d.ts.map +1 -1
  502. package/lib/typescript/interfaces/options/animations.d.ts +80 -22
  503. package/lib/typescript/interfaces/options/animations.d.ts.map +1 -1
  504. package/lib/typescript/interfaces/options/bottomTabs.d.ts +21 -7
  505. package/lib/typescript/interfaces/options/bottomTabs.d.ts.map +1 -1
  506. package/lib/typescript/interfaces/options/buttons.d.ts +23 -15
  507. package/lib/typescript/interfaces/options/buttons.d.ts.map +1 -1
  508. package/lib/typescript/interfaces/options/modals.d.ts +34 -26
  509. package/lib/typescript/interfaces/options/modals.d.ts.map +1 -1
  510. package/lib/typescript/interfaces/options/sideMenu.d.ts +23 -6
  511. package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -1
  512. package/lib/typescript/interfaces/options/stack.d.ts +17 -3
  513. package/lib/typescript/interfaces/options/stack.d.ts.map +1 -1
  514. package/lib/typescript/interfaces/options/system.d.ts +18 -11
  515. package/lib/typescript/interfaces/options/system.d.ts.map +1 -1
  516. package/lib/typescript/interfaces/options/toolbar.d.ts +2 -2
  517. package/lib/typescript/interfaces/options/topBar.d.ts +68 -38
  518. package/lib/typescript/interfaces/options/topBar.d.ts.map +1 -1
  519. package/metro/acceptPlugin.js +57 -0
  520. package/metro/babelTransformer.js +45 -0
  521. package/metro/index.js +36 -0
  522. package/package.json +3 -1
  523. package/src/ARCHITECTURE.md +40 -27
  524. package/src/adapters/NativeANNTurboModule.ts +12 -2
  525. package/src/api/app/AppRegistry.ts +16 -2
  526. package/src/api/app/createNavigation.ts +203 -69
  527. package/src/api/commands/commands.ts +48 -7
  528. package/src/api/commands/presentation.ts +4 -3
  529. package/src/api/events/navigationEvents.ts +10 -4
  530. package/src/api/hooks/useNavigation.ts +9 -4
  531. package/src/api/hooks/useSafeAreaInsets.ts +4 -3
  532. package/src/api/index.ts +1 -0
  533. package/src/api/linking/dispatchedLinks.ts +18 -0
  534. package/src/api/linking/linking.ts +22 -1
  535. package/src/api/navigation.ts +4 -1
  536. package/src/api/options/OptionsChain.ts +2 -2
  537. package/src/api/screens/arrangement.ts +17 -4
  538. package/src/api/screens/defineScreen.ts +49 -5
  539. package/src/api/screens/nativeScreens.ts +40 -4
  540. package/src/api/screens/registerScreens.tsx +185 -42
  541. package/src/api/theme/theme.ts +5 -0
  542. package/src/engine/commands.ts +70 -13
  543. package/src/engine/layout.ts +27 -11
  544. package/src/engine/nativeScreens.ts +10 -1
  545. package/src/engine/options.ts +45 -19
  546. package/src/engine/optionsChange.ts +107 -0
  547. package/src/engine/places.ts +65 -7
  548. package/src/engine/props.ts +30 -1
  549. package/src/engine/refresh.ts +97 -0
  550. package/src/engine/rememberedOptions.ts +74 -1
  551. package/src/engine/screens.tsx +76 -21
  552. package/src/interfaces/ComponentEvents.ts +4 -4
  553. package/src/interfaces/Events.ts +29 -10
  554. package/src/interfaces/Options.ts +1 -0
  555. package/src/interfaces/contract/commands.json +101 -0
  556. package/src/interfaces/contract/errors.json +275 -0
  557. package/src/interfaces/options/animations.ts +81 -22
  558. package/src/interfaces/options/bottomTabs.ts +21 -7
  559. package/src/interfaces/options/buttons.ts +23 -15
  560. package/src/interfaces/options/modals.ts +34 -26
  561. package/src/interfaces/options/sideMenu.ts +24 -6
  562. package/src/interfaces/options/stack.ts +17 -3
  563. package/src/interfaces/options/system.ts +18 -11
  564. package/src/interfaces/options/toolbar.ts +2 -2
  565. package/src/interfaces/options/topBar.ts +68 -38
  566. package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +0 -41
  567. package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +0 -69
  568. package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationStateReporter.kt +0 -62
  569. package/android/src/main/java/dev/apexnative/navigation/react/events/StateHold.kt +0 -62
  570. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowPlacer.kt +0 -223
  571. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStub.kt +0 -31
  572. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +0 -138
  573. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +0 -88
  574. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PropertyAnimatorCreator.kt +0 -33
  575. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +0 -66
  576. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +0 -179
  577. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +0 -139
  578. package/ios/Layouts/Screen/ANNScreenInsets.h +0 -30
  579. package/ios/Layouts/Screen/ANNScreenInsets.mm +0 -68
  580. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.h +0 -27
  581. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.mm +0 -55
@@ -0,0 +1,226 @@
1
+ // Made by scripts/contract.mjs from the event types of src/interfaces/: change them and run the script again.
2
+
3
+ package dev.apexnative.navigation.react.events
4
+
5
+ /**
6
+ * The names of the events `ANN.<Name>` ([EVENT]) and the keys of their payloads, as the types of `src/interfaces/` give
7
+ * them; what each field means is its JSDoc there. The object types a field holds have keys of their own. The sender
8
+ * and the builders of payloads take every name and key from here: `EventContract.CommandCompleted.COMMAND_ID`. The
9
+ * events and fields only iOS sends are not here.
10
+ */
11
+ internal object EventContract {
12
+ /** `ANN.AppLaunched`. */
13
+ object AppLaunched {
14
+ const val EVENT = "ANN.AppLaunched"
15
+ }
16
+
17
+ /** `ANN.ArrangementChanged`. */
18
+ object ArrangementChanged {
19
+ const val EVENT = "ANN.ArrangementChanged"
20
+ const val COMPONENT_ID = "componentId"
21
+ const val PLACEMENT = "placement"
22
+ const val LAYOUT = "layout"
23
+ const val FRONT = "front"
24
+ const val HIDDEN = "hidden"
25
+ }
26
+
27
+ /** `ANN.BottomTabLongPressed`. */
28
+ object BottomTabLongPressed {
29
+ const val EVENT = "ANN.BottomTabLongPressed"
30
+ const val SELECTED_TAB_INDEX = "selectedTabIndex"
31
+ const val BOTTOM_TABS_ID = "bottomTabsId"
32
+ }
33
+
34
+ /** `ANN.BottomTabPressed`. */
35
+ object BottomTabPressed {
36
+ const val EVENT = "ANN.BottomTabPressed"
37
+ const val TAB_INDEX = "tabIndex"
38
+ const val BOTTOM_TABS_ID = "bottomTabsId"
39
+ /** Optional. */
40
+ const val SCREEN_ID = "screenId"
41
+ const val WAS_SELECTED = "wasSelected"
42
+ }
43
+
44
+ /** `ANN.BottomTabSelected`. */
45
+ object BottomTabSelected {
46
+ const val EVENT = "ANN.BottomTabSelected"
47
+ const val SELECTED_TAB_INDEX = "selectedTabIndex"
48
+ const val UNSELECTED_TAB_INDEX = "unselectedTabIndex"
49
+ const val BOTTOM_TABS_ID = "bottomTabsId"
50
+ }
51
+
52
+ /** `ANN.CommandCompleted`. */
53
+ object CommandCompleted {
54
+ const val EVENT = "ANN.CommandCompleted"
55
+ const val COMMAND_NAME = "commandName"
56
+ const val COMMAND_ID = "commandId"
57
+ const val COMPLETION_TIME = "completionTime"
58
+ }
59
+
60
+ /** `ANN.ComponentDidAppear`. */
61
+ object ComponentDidAppear {
62
+ const val EVENT = "ANN.ComponentDidAppear"
63
+ const val COMPONENT_ID = "componentId"
64
+ const val COMPONENT_NAME = "componentName"
65
+ const val COMPONENT_TYPE = "componentType"
66
+ }
67
+
68
+ /** `ANN.ComponentDidDisappear`. */
69
+ object ComponentDidDisappear {
70
+ const val EVENT = "ANN.ComponentDidDisappear"
71
+ const val COMPONENT_ID = "componentId"
72
+ const val COMPONENT_NAME = "componentName"
73
+ const val COMPONENT_TYPE = "componentType"
74
+ }
75
+
76
+ /** `ANN.ComponentWillAppear`. */
77
+ object ComponentWillAppear {
78
+ const val EVENT = "ANN.ComponentWillAppear"
79
+ const val COMPONENT_ID = "componentId"
80
+ const val COMPONENT_NAME = "componentName"
81
+ const val COMPONENT_TYPE = "componentType"
82
+ }
83
+
84
+ /** `ANN.HingeChanged`. */
85
+ object HingeChanged {
86
+ const val EVENT = "ANN.HingeChanged"
87
+ /** Optional. */
88
+ const val STATE = "state"
89
+ /** Optional. */
90
+ const val ANGLE = "angle"
91
+ }
92
+
93
+ /** `ANN.ModalAttemptedToDismiss`. */
94
+ object ModalAttemptedToDismiss {
95
+ const val EVENT = "ANN.ModalAttemptedToDismiss"
96
+ const val COMPONENT_ID = "componentId"
97
+ }
98
+
99
+ /** `ANN.ModalDismissed`. */
100
+ object ModalDismissed {
101
+ const val EVENT = "ANN.ModalDismissed"
102
+ const val COMPONENT_ID = "componentId"
103
+ const val COMPONENT_NAME = "componentName"
104
+ const val MODALS_DISMISSED = "modalsDismissed"
105
+ }
106
+
107
+ /** `ANN.NativeScreenCall`. */
108
+ object NativeScreenCall {
109
+ const val EVENT = "ANN.NativeScreenCall"
110
+ const val COMPONENT_ID = "componentId"
111
+ const val CALL_ID = "callId"
112
+ const val KIND = "kind"
113
+ const val NAME = "name"
114
+ const val ARGS = "args"
115
+ }
116
+
117
+ /** `ANN.NativeScreenReleased`. */
118
+ object NativeScreenReleased {
119
+ const val EVENT = "ANN.NativeScreenReleased"
120
+ const val COMPONENT_ID = "componentId"
121
+ }
122
+
123
+ /** `ANN.NavigationButtonPressed`. */
124
+ object NavigationButtonPressed {
125
+ const val EVENT = "ANN.NavigationButtonPressed"
126
+ const val COMPONENT_ID = "componentId"
127
+ const val BUTTON_ID = "buttonId"
128
+ }
129
+
130
+ /** `ANN.NavigationStateChanged`. */
131
+ object NavigationStateChanged {
132
+ const val EVENT = "ANN.NavigationStateChanged"
133
+ const val SCREEN = "screen"
134
+ const val TAB = "tab"
135
+ }
136
+
137
+ /** The object of `ANN.NavigationStateChanged.screen`. */
138
+ object NavigationStateChangedScreen {
139
+ const val ID = "id"
140
+ const val NAME = "name"
141
+ }
142
+
143
+ /** `ANN.ScreenInsetsChanged`. */
144
+ object ScreenInsetsChanged {
145
+ const val EVENT = "ANN.ScreenInsetsChanged"
146
+ const val COMPONENT_ID = "componentId"
147
+ const val TOP = "top"
148
+ const val RIGHT = "right"
149
+ const val BOTTOM = "bottom"
150
+ const val LEFT = "left"
151
+ }
152
+
153
+ /** `ANN.ScreenPopped`. */
154
+ object ScreenPopped {
155
+ const val EVENT = "ANN.ScreenPopped"
156
+ const val COMPONENT_ID = "componentId"
157
+ }
158
+
159
+ /** The object of `ANN.ScreenRegionsChanged.division`. */
160
+ object ScreenRegionRect {
161
+ const val X = "x"
162
+ const val Y = "y"
163
+ const val WIDTH = "width"
164
+ const val HEIGHT = "height"
165
+ }
166
+
167
+ /** `ANN.ScreenRegionsChanged`. */
168
+ object ScreenRegionsChanged {
169
+ const val EVENT = "ANN.ScreenRegionsChanged"
170
+ const val COMPONENT_ID = "componentId"
171
+ const val DIVISION = "division"
172
+ const val OCCLUSION = "occlusion"
173
+ }
174
+
175
+ /** `ANN.SearchBarCancelPressed`. */
176
+ object SearchBarCancelPressed {
177
+ const val EVENT = "ANN.SearchBarCancelPressed"
178
+ const val COMPONENT_ID = "componentId"
179
+ }
180
+
181
+ /** `ANN.SearchBarSubmitted`. */
182
+ object SearchBarSubmitted {
183
+ const val EVENT = "ANN.SearchBarSubmitted"
184
+ const val COMPONENT_ID = "componentId"
185
+ const val TEXT = "text"
186
+ /** Optional. */
187
+ const val SCOPE = "scope"
188
+ }
189
+
190
+ /** `ANN.SearchBarUpdated`. */
191
+ object SearchBarUpdated {
192
+ const val EVENT = "ANN.SearchBarUpdated"
193
+ const val COMPONENT_ID = "componentId"
194
+ const val TEXT = "text"
195
+ const val IS_FOCUSED = "isFocused"
196
+ /** Optional. */
197
+ const val SCOPE = "scope"
198
+ }
199
+
200
+ /** `ANN.SearchSuggestionPicked`. */
201
+ object SearchSuggestionPicked {
202
+ const val EVENT = "ANN.SearchSuggestionPicked"
203
+ const val COMPONENT_ID = "componentId"
204
+ const val SUGGESTION_ID = "suggestionId"
205
+ }
206
+
207
+ /** `ANN.SheetDetentChanged`. */
208
+ object SheetDetentChanged {
209
+ const val EVENT = "ANN.SheetDetentChanged"
210
+ const val COMPONENT_ID = "componentId"
211
+ const val DETENT = "detent"
212
+ }
213
+
214
+ /** `ANN.SlotDestroyed`. */
215
+ object SlotDestroyed {
216
+ const val EVENT = "ANN.SlotDestroyed"
217
+ const val COMPONENT_ID = "componentId"
218
+ }
219
+
220
+ /** `ANN.SplitViewColumnsStacked`. */
221
+ object SplitViewColumnsStacked {
222
+ const val EVENT = "ANN.SplitViewColumnsStacked"
223
+ const val COMPONENT_ID = "componentId"
224
+ const val STACKED = "stacked"
225
+ }
226
+ }
@@ -6,155 +6,184 @@ import com.facebook.react.bridge.ReactContext
6
6
  import com.facebook.react.bridge.WritableMap
7
7
  import dev.apexnative.navigation.NavigationApplication
8
8
  import dev.apexnative.navigation.nativescreen.NativeScreenCalls
9
+ import dev.apexnative.navigation.react.ReloadCoordinator
9
10
  import dev.apexnative.navigation.utils.NavigationLog
10
11
  import org.json.JSONArray
11
12
 
12
13
  /**
13
14
  * Sends the events `ANN.<Name>` to the JavaScript of [reactContext] through React Native's device event emitter, in
14
15
  * the order they are sent: sent from the main thread only. Without a context, or when its React instance is gone, an
15
- * event is dropped with one line in the log. The names and the fields are the contract. The core sends through
16
- * [current]; modules keep making their own.
16
+ * event is dropped with one line in the log. The names and the keys come from [EventContract], made from the types of
17
+ * `src/interfaces/`.
18
+ *
19
+ * An emitter belongs to one JavaScript, as on iOS (`ANNEventEmitter`): it takes the number of the JavaScript
20
+ * ([generation], `ReloadCoordinator`) when it is made and drops every event silently once that number moved. React
21
+ * Native keeps one context across a reload (bridgeless), so without it an event of a screen of the JavaScript that
22
+ * went would reach the new one, which may have a screen with the same id. The core and its modules send through
23
+ * [current], or [of] with the number of the JavaScript a node was made for.
17
24
  */
18
- class EventEmitter(private val reactContext: ReactContext?) {
19
- /** Whether an event sent now reaches JavaScript. */
25
+ class EventEmitter @JvmOverloads constructor(
26
+ private val reactContext: ReactContext?,
27
+ /** The number of the JavaScript this emitter sends to: by default the one that runs as it is made. */
28
+ val generation: Int = ReloadCoordinator.generation,
29
+ ) {
30
+ /** Whether the JavaScript of this emitter still runs: its events go only then. Any thread. */
31
+ val isCurrent: Boolean
32
+ get() = ReloadCoordinator.isCurrent(generation)
33
+
34
+ /** Whether an event sent now reaches JavaScript: its JavaScript still runs, in a live React instance. */
20
35
  val canSend: Boolean
21
- get() = reactContext?.hasActiveReactInstance() == true
36
+ get() = isCurrent && reactContext?.hasActiveReactInstance() == true
22
37
 
23
- fun emitAppLaunched() = emit(APP_LAUNCHED, Arguments.createMap())
38
+ fun emitAppLaunched() = emit(EventContract.AppLaunched.EVENT, Arguments.createMap())
24
39
 
25
40
  fun emitCommandCompleted(commandName: String, commandId: String, completionTime: Long) =
26
- emit(COMMAND_COMPLETED, Arguments.createMap().apply {
27
- putString("commandName", commandName)
28
- putString("commandId", commandId)
29
- putDouble("completionTime", completionTime.toDouble())
41
+ emit(EventContract.CommandCompleted.EVENT, Arguments.createMap().apply {
42
+ putString(EventContract.CommandCompleted.COMMAND_NAME, commandName)
43
+ putString(EventContract.CommandCompleted.COMMAND_ID, commandId)
44
+ putDouble(EventContract.CommandCompleted.COMPLETION_TIME, completionTime.toDouble())
30
45
  })
31
46
 
32
47
  fun emitComponentWillAppear(componentId: String, componentName: String, type: ComponentType) =
33
- emit(COMPONENT_WILL_APPEAR, component(componentId, componentName, type))
48
+ emit(EventContract.ComponentWillAppear.EVENT, component(componentId, componentName, type))
34
49
 
35
50
  fun emitComponentDidAppear(componentId: String, componentName: String, type: ComponentType) =
36
- emit(COMPONENT_DID_APPEAR, component(componentId, componentName, type))
51
+ emit(EventContract.ComponentDidAppear.EVENT, component(componentId, componentName, type))
37
52
 
38
53
  fun emitComponentDidDisappear(componentId: String, componentName: String, type: ComponentType) =
39
- emit(COMPONENT_DID_DISAPPEAR, component(componentId, componentName, type))
54
+ emit(EventContract.ComponentDidDisappear.EVENT, component(componentId, componentName, type))
40
55
 
41
56
  /** The screen the user sees (`null` for none) and the selected tab of the tabs it is in (`null` out of tabs). */
42
57
  fun emitNavigationStateChanged(screenId: String?, screenName: String?, tab: Int?) =
43
- emit(NAVIGATION_STATE_CHANGED, Arguments.createMap().apply {
58
+ emit(EventContract.NavigationStateChanged.EVENT, Arguments.createMap().apply {
59
+ val keys = EventContract.NavigationStateChanged
44
60
  if (screenId == null) {
45
- putNull("screen")
61
+ putNull(keys.SCREEN)
46
62
  } else {
47
- putMap("screen", Arguments.createMap().apply {
48
- putString("id", screenId)
49
- putString("name", screenName)
63
+ putMap(keys.SCREEN, Arguments.createMap().apply {
64
+ putString(EventContract.NavigationStateChangedScreen.ID, screenId)
65
+ putString(EventContract.NavigationStateChangedScreen.NAME, screenName)
50
66
  })
51
67
  }
52
- if (tab == null) putNull("tab") else putInt("tab", tab)
68
+ if (tab == null) putNull(keys.TAB) else putInt(keys.TAB, tab)
53
69
  })
54
70
 
55
- fun emitScreenPopped(componentId: String) = emit(SCREEN_POPPED, withId(componentId))
71
+ fun emitScreenPopped(componentId: String) = emit(EventContract.ScreenPopped.EVENT, withId(componentId))
56
72
 
57
73
  fun emitNavigationButtonPressed(componentId: String, buttonId: String) =
58
- emit(NAVIGATION_BUTTON_PRESSED, withId(componentId).apply { putString("buttonId", buttonId) })
74
+ emit(EventContract.NavigationButtonPressed.EVENT, withId(componentId).apply {
75
+ putString(EventContract.NavigationButtonPressed.BUTTON_ID, buttonId)
76
+ })
59
77
 
60
78
  fun emitBottomTabSelected(selectedTabIndex: Int, unselectedTabIndex: Int, bottomTabsId: String) =
61
- emit(BOTTOM_TAB_SELECTED, Arguments.createMap().apply {
62
- putInt("selectedTabIndex", selectedTabIndex)
63
- putInt("unselectedTabIndex", unselectedTabIndex)
64
- putString("bottomTabsId", bottomTabsId)
79
+ emit(EventContract.BottomTabSelected.EVENT, Arguments.createMap().apply {
80
+ putInt(EventContract.BottomTabSelected.SELECTED_TAB_INDEX, selectedTabIndex)
81
+ putInt(EventContract.BottomTabSelected.UNSELECTED_TAB_INDEX, unselectedTabIndex)
82
+ putString(EventContract.BottomTabSelected.BOTTOM_TABS_ID, bottomTabsId)
65
83
  })
66
84
 
67
85
  fun emitBottomTabPressed(tabIndex: Int, bottomTabsId: String, screenId: String?, wasSelected: Boolean) =
68
- emit(BOTTOM_TAB_PRESSED, Arguments.createMap().apply {
69
- putInt("tabIndex", tabIndex)
70
- putString("bottomTabsId", bottomTabsId)
71
- screenId?.let { putString("screenId", it) }
72
- putBoolean("wasSelected", wasSelected)
86
+ emit(EventContract.BottomTabPressed.EVENT, Arguments.createMap().apply {
87
+ putInt(EventContract.BottomTabPressed.TAB_INDEX, tabIndex)
88
+ putString(EventContract.BottomTabPressed.BOTTOM_TABS_ID, bottomTabsId)
89
+ screenId?.let { putString(EventContract.BottomTabPressed.SCREEN_ID, it) }
90
+ putBoolean(EventContract.BottomTabPressed.WAS_SELECTED, wasSelected)
73
91
  })
74
92
 
75
93
  fun emitBottomTabLongPressed(selectedTabIndex: Int, bottomTabsId: String) =
76
- emit(BOTTOM_TAB_LONG_PRESSED, Arguments.createMap().apply {
77
- putInt("selectedTabIndex", selectedTabIndex)
78
- putString("bottomTabsId", bottomTabsId)
94
+ emit(EventContract.BottomTabLongPressed.EVENT, Arguments.createMap().apply {
95
+ putInt(EventContract.BottomTabLongPressed.SELECTED_TAB_INDEX, selectedTabIndex)
96
+ putString(EventContract.BottomTabLongPressed.BOTTOM_TABS_ID, bottomTabsId)
79
97
  })
80
98
 
81
99
  /** The id and the name (without `slot:`) of the screen the modal showed, and how many modals went. */
82
100
  fun emitModalDismissed(componentId: String, componentName: String, modalsDismissed: Int) =
83
- emit(MODAL_DISMISSED, withId(componentId).apply {
84
- putString("componentName", componentName)
85
- putInt("modalsDismissed", modalsDismissed)
101
+ emit(EventContract.ModalDismissed.EVENT, withId(componentId).apply {
102
+ putString(EventContract.ModalDismissed.COMPONENT_NAME, componentName)
103
+ putInt(EventContract.ModalDismissed.MODALS_DISMISSED, modalsDismissed)
86
104
  })
87
105
 
88
- fun emitModalAttemptedToDismiss(componentId: String) = emit(MODAL_ATTEMPTED_TO_DISMISS, withId(componentId))
106
+ fun emitModalAttemptedToDismiss(componentId: String) =
107
+ emit(EventContract.ModalAttemptedToDismiss.EVENT, withId(componentId))
89
108
 
90
109
  /** [detent]: `medium`, `large`, or a height in dp. */
91
110
  fun emitSheetDetentChanged(componentId: String, detent: Any) =
92
- emit(SHEET_DETENT_CHANGED, withId(componentId).apply {
111
+ emit(EventContract.SheetDetentChanged.EVENT, withId(componentId).apply {
93
112
  when (detent) {
94
- is Number -> putDouble("detent", detent.toDouble())
95
- else -> putString("detent", detent.toString())
113
+ is Number -> putDouble(EventContract.SheetDetentChanged.DETENT, detent.toDouble())
114
+ else -> putString(EventContract.SheetDetentChanged.DETENT, detent.toString())
96
115
  }
97
116
  })
98
117
 
99
118
  fun emitSearchBarUpdated(componentId: String, text: String, isFocused: Boolean, scope: String?) =
100
- emit(SEARCH_BAR_UPDATED, withId(componentId).apply {
101
- putString("text", text)
102
- putBoolean("isFocused", isFocused)
103
- scope?.let { putString("scope", it) }
119
+ emit(EventContract.SearchBarUpdated.EVENT, withId(componentId).apply {
120
+ putString(EventContract.SearchBarUpdated.TEXT, text)
121
+ putBoolean(EventContract.SearchBarUpdated.IS_FOCUSED, isFocused)
122
+ scope?.let { putString(EventContract.SearchBarUpdated.SCOPE, it) }
104
123
  })
105
124
 
106
125
  fun emitSearchBarSubmitted(componentId: String, text: String, scope: String?) =
107
- emit(SEARCH_BAR_SUBMITTED, withId(componentId).apply {
108
- putString("text", text)
109
- scope?.let { putString("scope", it) }
126
+ emit(EventContract.SearchBarSubmitted.EVENT, withId(componentId).apply {
127
+ putString(EventContract.SearchBarSubmitted.TEXT, text)
128
+ scope?.let { putString(EventContract.SearchBarSubmitted.SCOPE, it) }
110
129
  })
111
130
 
112
- fun emitSearchBarCancelPressed(componentId: String) = emit(SEARCH_BAR_CANCEL_PRESSED, withId(componentId))
131
+ fun emitSearchBarCancelPressed(componentId: String) =
132
+ emit(EventContract.SearchBarCancelPressed.EVENT, withId(componentId))
113
133
 
114
134
  fun emitSearchSuggestionPicked(componentId: String, suggestionId: String) =
115
- emit(SEARCH_SUGGESTION_PICKED, withId(componentId).apply { putString("suggestionId", suggestionId) })
135
+ emit(EventContract.SearchSuggestionPicked.EVENT, withId(componentId).apply {
136
+ putString(EventContract.SearchSuggestionPicked.SUGGESTION_ID, suggestionId)
137
+ })
116
138
 
117
139
  fun emitSplitViewColumnsStacked(componentId: String, stacked: Boolean) =
118
- emit(SPLIT_VIEW_COLUMNS_STACKED, withId(componentId).apply { putBoolean("stacked", stacked) })
140
+ emit(EventContract.SplitViewColumnsStacked.EVENT, withId(componentId).apply {
141
+ putBoolean(EventContract.SplitViewColumnsStacked.STACKED, stacked)
142
+ })
119
143
 
120
- fun emitSlotDestroyed(componentId: String) = emit(SLOT_DESTROYED, withId(componentId))
144
+ fun emitSlotDestroyed(componentId: String) = emit(EventContract.SlotDestroyed.EVENT, withId(componentId))
121
145
 
122
146
  /** [insets]: `{ top, right, bottom, left }`. */
123
147
  fun emitScreenInsetsChanged(componentId: String, insets: WritableMap) =
124
- emit(SCREEN_INSETS_CHANGED, withId(componentId).apply { merge(insets) })
148
+ emit(EventContract.ScreenInsetsChanged.EVENT, withId(componentId).apply { merge(insets) })
125
149
 
126
150
  /** [regions]: `{ division, occlusion }`. */
127
151
  fun emitScreenRegionsChanged(componentId: String, regions: WritableMap) =
128
- emit(SCREEN_REGIONS_CHANGED, withId(componentId).apply { merge(regions) })
152
+ emit(EventContract.ScreenRegionsChanged.EVENT, withId(componentId).apply { merge(regions) })
129
153
 
130
154
  /** [state]: `{ placement, layout, front, hidden }`. */
131
155
  fun emitArrangementChanged(componentId: String, state: WritableMap) =
132
- emit(ARRANGEMENT_CHANGED, withId(componentId).apply { merge(state) })
156
+ emit(EventContract.ArrangementChanged.EVENT, withId(componentId).apply { merge(state) })
133
157
 
134
158
  /** [value]: `{ state, angle? }`, or `{}` without a hinge. */
135
- fun emitHingeChanged(value: WritableMap) = emit(HINGE_CHANGED, value)
159
+ fun emitHingeChanged(value: WritableMap) = emit(EventContract.HingeChanged.EVENT, value)
136
160
 
137
161
  /** [kind]: `function` or `command`; [arguments] as JSON, which JavaScript gets as `args`. */
138
162
  fun emitNativeScreenCall(componentId: String, callId: String, kind: String, name: String, arguments: JSONArray) =
139
- emit(NATIVE_SCREEN_CALL, withId(componentId).apply {
140
- putString("callId", callId)
141
- putString("kind", kind)
142
- putString("name", name)
143
- putArray("args", NativeScreenCalls.toArguments(arguments))
163
+ emit(EventContract.NativeScreenCall.EVENT, withId(componentId).apply {
164
+ putString(EventContract.NativeScreenCall.CALL_ID, callId)
165
+ putString(EventContract.NativeScreenCall.KIND, kind)
166
+ putString(EventContract.NativeScreenCall.NAME, name)
167
+ putArray(EventContract.NativeScreenCall.ARGS, NativeScreenCalls.toArguments(arguments))
144
168
  })
145
169
 
146
- fun emitNativeScreenReleased(componentId: String) = emit(NATIVE_SCREEN_RELEASED, withId(componentId))
170
+ fun emitNativeScreenReleased(componentId: String) =
171
+ emit(EventContract.NativeScreenReleased.EVENT, withId(componentId))
147
172
 
173
+ // The three appearance events have the same keys.
148
174
  private fun component(componentId: String, componentName: String, type: ComponentType): WritableMap =
149
175
  withId(componentId).apply {
150
- putString("componentName", componentName)
151
- putString("componentType", type.jsName)
176
+ putString(EventContract.ComponentDidAppear.COMPONENT_NAME, componentName)
177
+ putString(EventContract.ComponentDidAppear.COMPONENT_TYPE, type.jsName)
152
178
  }
153
179
 
180
+ // The events of a screen carry its id under the same key.
154
181
  private fun withId(componentId: String): WritableMap =
155
- Arguments.createMap().apply { putString("componentId", componentId) }
182
+ Arguments.createMap().apply { putString(EventContract.ScreenPopped.COMPONENT_ID, componentId) }
156
183
 
157
184
  private fun emit(name: String, data: WritableMap) {
185
+ // The JavaScript of this emitter went: the new one never had its screens.
186
+ if (!isCurrent) return
158
187
  val context = reactContext
159
188
  if (context == null || !context.hasActiveReactInstance()) {
160
189
  Log.w(NavigationLog.TAG, "Could not send event $name. React context is null!")
@@ -164,36 +193,48 @@ class EventEmitter(private val reactContext: ReactContext?) {
164
193
  }
165
194
 
166
195
  companion object {
167
- /** The sender to the JavaScript that runs now: the React context of the app's `ReactGateway`. */
196
+ /**
197
+ * The sender to the JavaScript that runs now: the React context of the app's `ReactGateway`. It goes silent
198
+ * once that JavaScript goes (a reload): one kept for later sends nothing to the next.
199
+ */
168
200
  @JvmStatic
169
- fun current(): EventEmitter =
170
- EventEmitter(NavigationApplication.instanceOrNull?.reactGatewayOrNull?.currentReactContext)
171
-
172
- const val APP_LAUNCHED = "ANN.AppLaunched"
173
- const val COMMAND_COMPLETED = "ANN.CommandCompleted"
174
- const val COMPONENT_WILL_APPEAR = "ANN.ComponentWillAppear"
175
- const val COMPONENT_DID_APPEAR = "ANN.ComponentDidAppear"
176
- const val COMPONENT_DID_DISAPPEAR = "ANN.ComponentDidDisappear"
177
- const val NAVIGATION_STATE_CHANGED = "ANN.NavigationStateChanged"
178
- const val SCREEN_POPPED = "ANN.ScreenPopped"
179
- const val NAVIGATION_BUTTON_PRESSED = "ANN.NavigationButtonPressed"
180
- const val BOTTOM_TAB_SELECTED = "ANN.BottomTabSelected"
181
- const val BOTTOM_TAB_PRESSED = "ANN.BottomTabPressed"
182
- const val BOTTOM_TAB_LONG_PRESSED = "ANN.BottomTabLongPressed"
183
- const val MODAL_DISMISSED = "ANN.ModalDismissed"
184
- const val MODAL_ATTEMPTED_TO_DISMISS = "ANN.ModalAttemptedToDismiss"
185
- const val SHEET_DETENT_CHANGED = "ANN.SheetDetentChanged"
186
- const val SEARCH_BAR_UPDATED = "ANN.SearchBarUpdated"
187
- const val SEARCH_BAR_SUBMITTED = "ANN.SearchBarSubmitted"
188
- const val SEARCH_BAR_CANCEL_PRESSED = "ANN.SearchBarCancelPressed"
189
- const val SEARCH_SUGGESTION_PICKED = "ANN.SearchSuggestionPicked"
190
- const val SPLIT_VIEW_COLUMNS_STACKED = "ANN.SplitViewColumnsStacked"
191
- const val SLOT_DESTROYED = "ANN.SlotDestroyed"
192
- const val SCREEN_INSETS_CHANGED = "ANN.ScreenInsetsChanged"
193
- const val SCREEN_REGIONS_CHANGED = "ANN.ScreenRegionsChanged"
194
- const val ARRANGEMENT_CHANGED = "ANN.ArrangementChanged"
195
- const val HINGE_CHANGED = "ANN.HingeChanged"
196
- const val NATIVE_SCREEN_CALL = "ANN.NativeScreenCall"
197
- const val NATIVE_SCREEN_RELEASED = "ANN.NativeScreenReleased"
201
+ fun current(): EventEmitter = of(ReloadCoordinator.generation)
202
+
203
+ /**
204
+ * The sender to the JavaScript [generation] (a node's `jsGeneration`): the React context of the app's
205
+ * `ReactGateway` while that JavaScript runs, silent once it went, so an event of a screen made for the
206
+ * JavaScript that went never reaches the new one.
207
+ */
208
+ internal fun of(generation: Int): EventEmitter =
209
+ EventEmitter(NavigationApplication.instanceOrNull?.reactGatewayOrNull?.currentReactContext, generation)
210
+
211
+ // The names of the events, for modules outside the library; inside it, [EventContract] has them with their
212
+ // keys.
213
+ const val APP_LAUNCHED = EventContract.AppLaunched.EVENT
214
+ const val COMMAND_COMPLETED = EventContract.CommandCompleted.EVENT
215
+ const val COMPONENT_WILL_APPEAR = EventContract.ComponentWillAppear.EVENT
216
+ const val COMPONENT_DID_APPEAR = EventContract.ComponentDidAppear.EVENT
217
+ const val COMPONENT_DID_DISAPPEAR = EventContract.ComponentDidDisappear.EVENT
218
+ const val NAVIGATION_STATE_CHANGED = EventContract.NavigationStateChanged.EVENT
219
+ const val SCREEN_POPPED = EventContract.ScreenPopped.EVENT
220
+ const val NAVIGATION_BUTTON_PRESSED = EventContract.NavigationButtonPressed.EVENT
221
+ const val BOTTOM_TAB_SELECTED = EventContract.BottomTabSelected.EVENT
222
+ const val BOTTOM_TAB_PRESSED = EventContract.BottomTabPressed.EVENT
223
+ const val BOTTOM_TAB_LONG_PRESSED = EventContract.BottomTabLongPressed.EVENT
224
+ const val MODAL_DISMISSED = EventContract.ModalDismissed.EVENT
225
+ const val MODAL_ATTEMPTED_TO_DISMISS = EventContract.ModalAttemptedToDismiss.EVENT
226
+ const val SHEET_DETENT_CHANGED = EventContract.SheetDetentChanged.EVENT
227
+ const val SEARCH_BAR_UPDATED = EventContract.SearchBarUpdated.EVENT
228
+ const val SEARCH_BAR_SUBMITTED = EventContract.SearchBarSubmitted.EVENT
229
+ const val SEARCH_BAR_CANCEL_PRESSED = EventContract.SearchBarCancelPressed.EVENT
230
+ const val SEARCH_SUGGESTION_PICKED = EventContract.SearchSuggestionPicked.EVENT
231
+ const val SPLIT_VIEW_COLUMNS_STACKED = EventContract.SplitViewColumnsStacked.EVENT
232
+ const val SLOT_DESTROYED = EventContract.SlotDestroyed.EVENT
233
+ const val SCREEN_INSETS_CHANGED = EventContract.ScreenInsetsChanged.EVENT
234
+ const val SCREEN_REGIONS_CHANGED = EventContract.ScreenRegionsChanged.EVENT
235
+ const val ARRANGEMENT_CHANGED = EventContract.ArrangementChanged.EVENT
236
+ const val HINGE_CHANGED = EventContract.HingeChanged.EVENT
237
+ const val NATIVE_SCREEN_CALL = EventContract.NativeScreenCall.EVENT
238
+ const val NATIVE_SCREEN_RELEASED = EventContract.NativeScreenReleased.EVENT
198
239
  }
199
240
  }