@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
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { onNativeEvent } from "./native.js";
4
+ import { forgetProps } from "./props.js";
4
5
  import { screenNameOf } from "./slots.js";
5
6
 
6
7
  // Where each screen is, noted as the engine builds the layouts of the commands: what it shows in and its place in its
@@ -28,6 +29,11 @@ const stackedSplits = new Set();
28
29
  let listeningToSplitViews = false;
29
30
  // The primaries of pairs shown alone, noted as their node is built, until their place is noted.
30
31
  const alone = new Set();
32
+ // The layouts each screen shows in (its stack, pair, tabs, menu, split view, and the root of its layer), and how many
33
+ // live screens each layout holds. A layout whose last screen went is gone, and with it the props of the components the
34
+ // library named in its options: they stay as long as any of its screens may show them again.
35
+ const layoutsOfScreen = new Map();
36
+ const screensInLayout = new Map();
31
37
  // The last screens that went, so a command from one of them can say so; a screen the engine never saw is not one.
32
38
  const gone = new Set();
33
39
  const GONE_KEPT = 200;
@@ -35,6 +41,14 @@ export function placeOf(screenId) {
35
41
  return places.get(screenId);
36
42
  }
37
43
 
44
+ /** The first screen of a stack, as the engine noted it; with a pair first, its primary. */
45
+ export function firstScreenOf(stack) {
46
+ for (const [id, place] of places) {
47
+ if (place.stack === stack && place.index === 0 && place.arrangement?.placement !== 'secondary') return id;
48
+ }
49
+ return undefined;
50
+ }
51
+
38
52
  /** Notes that a screen is the primary of a pair shown alone, where the native side shows no pairs. */
39
53
  export function noteAlone(screenId) {
40
54
  alone.add(screenId);
@@ -45,15 +59,22 @@ export function isGone(screenId) {
45
59
  return gone.has(screenId);
46
60
  }
47
61
 
62
+ /** The layouts the screen shows in, outermost first: those whose screens come with it in a command go in it too. */
63
+ export function layoutsOf(screenId) {
64
+ return layoutsOfScreen.get(screenId) ?? [];
65
+ }
66
+
48
67
  /**
49
68
  * Notes the screens of a layout, the first of a stack at `index`. A modal or an overlay given as a whole is a layer of
50
- * its own; screens added to one, such as a push, take the layer of the screen they come from.
69
+ * its own; screens added to one, such as a push, take the layer of the screen they come from, and `within`, the
70
+ * layouts they show in (`layoutsOf` that screen).
51
71
  */
52
- export function notePlaces(node, container, stack = null, index = 0, menu, layer = container === 'root' ? 'root' : node.id) {
72
+ export function notePlaces(node, container, stack = null, index = 0, menu, layer = container === 'root' ? 'root' : node.id, within = []) {
53
73
  if (node.type === 'Component' || node.type === 'ExternalComponent') {
54
74
  const name = node.data.name ?? '';
55
75
  gone.delete(node.id);
56
76
  columnOfScreen.delete(node.id);
77
+ noteLayouts(node.id, within);
57
78
  places.set(node.id, {
58
79
  name: screenNameOf(name),
59
80
  container,
@@ -74,7 +95,7 @@ export function notePlaces(node, container, stack = null, index = 0, menu, layer
74
95
  } else if (node.type === 'Arrangement') {
75
96
  // One entry of its stack: both screens have its place there, and each knows the pair.
76
97
  node.children.forEach((child, childIndex) => {
77
- notePlaces(child, container, stack, index, menu, layer);
98
+ notePlaces(child, container, stack, index, menu, layer, [...within, node.id]);
78
99
  const place = places.get(child.id);
79
100
  if (place) {
80
101
  const placement = childIndex === 0 ? 'primary' : 'secondary';
@@ -89,7 +110,7 @@ export function notePlaces(node, container, stack = null, index = 0, menu, layer
89
110
  });
90
111
  } else if (node.type === 'Stack') {
91
112
  columnOfStack.delete(node.id);
92
- node.children.forEach((child, childIndex) => notePlaces(child, container, node.id, childIndex, menu, layer));
113
+ node.children.forEach((child, childIndex) => notePlaces(child, container, node.id, childIndex, menu, layer, [...within, node.id]));
93
114
  } else if (node.type === 'SplitView') {
94
115
  // A split view sent again with its id starts anew: its columns are noted again, and it isn't one stack until the
95
116
  // native side says so.
@@ -97,7 +118,7 @@ export function notePlaces(node, container, stack = null, index = 0, menu, layer
97
118
  const columns = node.data.columns ?? [];
98
119
  const stacks = {};
99
120
  node.children.forEach((child, childIndex) => {
100
- notePlaces(child, container, null, 0, menu, layer);
121
+ notePlaces(child, container, null, 0, menu, layer, [...within, node.id]);
101
122
  const column = columns[childIndex];
102
123
  if (!column) return;
103
124
  if (child.type === 'Stack') stacks[column] = child.id;
@@ -110,13 +131,36 @@ export function notePlaces(node, container, stack = null, index = 0, menu, layer
110
131
  } else if (node.type === 'SideMenuRoot') {
111
132
  for (const part of node.children) {
112
133
  const side = MENU_PARTS[part.type];
134
+ const parts = [...within, node.id, part.id];
113
135
  part.children.forEach(child => notePlaces(child, container, null, 0, side ? {
114
136
  id: node.id,
115
137
  part: side
116
- } : menu, layer));
138
+ } : menu, layer, parts));
117
139
  }
118
140
  } else {
119
- node.children.forEach(child => notePlaces(child, container, null, 0, menu, layer));
141
+ node.children.forEach(child => notePlaces(child, container, null, 0, menu, layer, [...within, node.id]));
142
+ }
143
+ }
144
+
145
+ // A screen noted again under its id (a layout sent again) leaves the layouts it was in before.
146
+ function noteLayouts(screenId, within) {
147
+ leaveLayouts(screenId);
148
+ const layouts = [...new Set(within)];
149
+ layoutsOfScreen.set(screenId, layouts);
150
+ for (const layout of layouts) screensInLayout.set(layout, (screensInLayout.get(layout) ?? 0) + 1);
151
+ }
152
+ function leaveLayouts(screenId) {
153
+ const layouts = layoutsOfScreen.get(screenId);
154
+ if (!layouts) return;
155
+ layoutsOfScreen.delete(screenId);
156
+ for (const layout of layouts) {
157
+ const count = (screensInLayout.get(layout) ?? 1) - 1;
158
+ if (count > 0) {
159
+ screensInLayout.set(layout, count);
160
+ continue;
161
+ }
162
+ screensInLayout.delete(layout);
163
+ forgetProps(layout);
120
164
  }
121
165
  }
122
166
 
@@ -170,6 +214,7 @@ export function listenToSplitViews() {
170
214
 
171
215
  /** The screen is gone. */
172
216
  export function forgetPlace(screenId) {
217
+ leaveLayouts(screenId);
173
218
  places.delete(screenId);
174
219
  columnOfScreen.delete(screenId);
175
220
  gone.add(screenId);
@@ -1 +1 @@
1
- {"version":3,"names":["onNativeEvent","screenNameOf","MENU_PARTS","SideMenuLeft","SideMenuCenter","SideMenuRight","places","Map","columnOfStack","columnOfScreen","stacksOfSplit","stackedSplits","Set","listeningToSplitViews","alone","gone","GONE_KEPT","placeOf","screenId","get","noteAlone","add","isGone","has","notePlaces","node","container","stack","index","menu","layer","id","type","name","data","delete","set","arrangement","placement","children","forEach","child","childIndex","place","forgetSplit","columns","stacks","column","noteColumn","split","part","side","columnOf","undefined","stackOfColumn","coversColumn","listenToSplitViews","componentId","stacked","forgetPlace","size","values","next","value"],"sourceRoot":"../../../src","sources":["engine/places.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["onNativeEvent","forgetProps","screenNameOf","MENU_PARTS","SideMenuLeft","SideMenuCenter","SideMenuRight","places","Map","columnOfStack","columnOfScreen","stacksOfSplit","stackedSplits","Set","listeningToSplitViews","alone","layoutsOfScreen","screensInLayout","gone","GONE_KEPT","placeOf","screenId","get","firstScreenOf","stack","id","place","index","arrangement","placement","undefined","noteAlone","add","isGone","has","layoutsOf","notePlaces","node","container","menu","layer","within","type","name","data","delete","noteLayouts","set","children","forEach","child","childIndex","forgetSplit","columns","stacks","column","noteColumn","split","part","side","parts","leaveLayouts","layouts","layout","count","columnOf","stackOfColumn","coversColumn","listenToSplitViews","componentId","stacked","forgetPlace","size","values","next","value"],"sourceRoot":"../../../src","sources":["engine/places.ts"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,11 @@ const watchers = new Map();
9
9
  const none = {};
10
10
  // The roots that are the components of bar buttons: their wrapper centers the content in the button's slot.
11
11
  const buttonRoots = new Set();
12
+ // The ids the library gave components in options, by the node whose options they are in. Such an id stays the same
13
+ // for every show of the node and may have several roots at once (a component of the default or a stack's options):
14
+ // its props go with the node, not with a root.
15
+ const optionComponents = new Map();
16
+ const optionComponentIds = new Set();
12
17
  export function setProps(id, props) {
13
18
  if (props === undefined) byId.delete(id);else byId.set(id, props);
14
19
  watchers.get(id)?.forEach(watcher => watcher());
@@ -36,9 +41,33 @@ export function isButtonRoot(id) {
36
41
  return buttonRoots.has(id);
37
42
  }
38
43
 
39
- /** The view is gone: its props, and whether it is a button's root, are not needed again. */
44
+ /** Notes an id the library gave a component in the options of the node `owner`. */
45
+ export function rememberOptionsComponent(owner, id) {
46
+ let ids = optionComponents.get(owner);
47
+ if (!ids) optionComponents.set(owner, ids = new Set());
48
+ ids.add(id);
49
+ optionComponentIds.add(id);
50
+ }
51
+
52
+ /** Whether the library gave the id to a component in options: its props go with the node, not with a root. */
53
+ export function isOptionsComponent(id) {
54
+ return optionComponentIds.has(id);
55
+ }
56
+
57
+ /**
58
+ * The view is gone: its props, and whether it is a button's root, are not needed again; nor are those of the
59
+ * components the library named in its options.
60
+ */
40
61
  export function forgetProps(id) {
41
62
  byId.delete(id);
42
63
  buttonRoots.delete(id);
64
+ const ids = optionComponents.get(id);
65
+ if (!ids) return;
66
+ optionComponents.delete(id);
67
+ for (const component of ids) {
68
+ byId.delete(component);
69
+ buttonRoots.delete(component);
70
+ optionComponentIds.delete(component);
71
+ }
43
72
  }
44
73
  //# sourceMappingURL=props.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["byId","Map","watchers","none","buttonRoots","Set","setProps","id","props","undefined","delete","set","get","forEach","watcher","propsOf","watchProps","add","size","rememberButtonRoot","isButtonRoot","has","forgetProps"],"sourceRoot":"../../../src","sources":["engine/props.ts"],"mappings":";;AAAA;AACA;AACA;AACA,MAAMA,IAAI,GAAG,IAAIC,GAAG,CAAiB,CAAC;AACtC,MAAMC,QAAQ,GAAG,IAAID,GAAG,CAA0B,CAAC;AACnD;AACA,MAAME,IAAI,GAAG,CAAC,CAAC;AACf;AACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;AAErC,OAAO,SAASC,QAAQA,CAACC,EAAU,EAAEC,KAAyB,EAAQ;EACpE,IAAIA,KAAK,KAAKC,SAAS,EAAET,IAAI,CAACU,MAAM,CAACH,EAAE,CAAC,CAAC,KACpCP,IAAI,CAACW,GAAG,CAACJ,EAAE,EAAEC,KAAK,CAAC;EACxBN,QAAQ,CAACU,GAAG,CAACL,EAAE,CAAC,EAAEM,OAAO,CAAEC,OAAO,IAAKA,OAAO,CAAC,CAAC,CAAC;AACnD;AAEA,OAAO,SAASC,OAAOA,CAACR,EAAU,EAAU;EAC1C,OAAOP,IAAI,CAACY,GAAG,CAACL,EAAE,CAAC,IAAIJ,IAAI;AAC7B;;AAEA;AACA,OAAO,SAASa,UAAUA,CAACT,EAAU,EAAEO,OAAmB,EAAc;EACtE,IAAIH,GAAG,GAAGT,QAAQ,CAACU,GAAG,CAACL,EAAE,CAAC;EAC1B,IAAI,CAACI,GAAG,EAAET,QAAQ,CAACS,GAAG,CAACJ,EAAE,EAAGI,GAAG,GAAG,IAAIN,GAAG,CAAC,CAAE,CAAC;EAC7CM,GAAG,CAACM,GAAG,CAACH,OAAO,CAAC;EAChB,OAAO,MAAM;IACXH,GAAG,CAACD,MAAM,CAACI,OAAO,CAAC;IACnB,IAAIH,GAAG,CAACO,IAAI,KAAK,CAAC,EAAEhB,QAAQ,CAACQ,MAAM,CAACH,EAAE,CAAC;EACzC,CAAC;AACH;AAEA,OAAO,SAASY,kBAAkBA,CAACZ,EAAU,EAAQ;EACnDH,WAAW,CAACa,GAAG,CAACV,EAAE,CAAC;AACrB;;AAEA;AACA,OAAO,SAASa,YAAYA,CAACb,EAAU,EAAW;EAChD,OAAOH,WAAW,CAACiB,GAAG,CAACd,EAAE,CAAC;AAC5B;;AAEA;AACA,OAAO,SAASe,WAAWA,CAACf,EAAU,EAAQ;EAC5CP,IAAI,CAACU,MAAM,CAACH,EAAE,CAAC;EACfH,WAAW,CAACM,MAAM,CAACH,EAAE,CAAC;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["byId","Map","watchers","none","buttonRoots","Set","optionComponents","optionComponentIds","setProps","id","props","undefined","delete","set","get","forEach","watcher","propsOf","watchProps","add","size","rememberButtonRoot","isButtonRoot","has","rememberOptionsComponent","owner","ids","isOptionsComponent","forgetProps","component"],"sourceRoot":"../../../src","sources":["engine/props.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ // Fast Refresh runs an edited module again, and every component it exports is a new function. React Refresh keeps
4
+ // the versions of one component in a family: Metro registers each export under its module and name, and React renders
5
+ // the newest version of the family in place of the old one. What the library keeps of a screen (its options, its key,
6
+ // its pair) is read through the same family, so an edit reaches it without a reload.
7
+
8
+ /** The versions of one component React Refresh keeps, `current` the newest. */
9
+
10
+ // React Native puts React Refresh where Metro's module system finds it, in development only.
11
+ function reactRefresh() {
12
+ if (!__DEV__) return undefined;
13
+ const global = globalThis;
14
+ return global[`${global.__METRO_GLOBAL_PREFIX__ ?? ''}__ReactRefresh`];
15
+ }
16
+
17
+ /** Whether React Refresh runs: development with Metro. */
18
+ export function refreshRuns() {
19
+ return reactRefresh()?.getFamilyByType !== undefined;
20
+ }
21
+
22
+ /** The family a component's versions are kept in; undefined in a release build or for a value Metro didn't export. */
23
+ export function familyOf(type) {
24
+ return reactRefresh()?.getFamilyByType?.(type);
25
+ }
26
+
27
+ /**
28
+ * The newest version of a component after Fast Refresh ran its module again; the component itself when there is none
29
+ * newer, and in a release build.
30
+ */
31
+ export function newestType(type) {
32
+ return familyOf(type)?.current ?? type;
33
+ }
34
+ let redefinedListener;
35
+
36
+ /** Sets what runs when a module makes a screen again: Fast Refresh ran it after an edit. */
37
+ export function onRedefined(listener) {
38
+ redefinedListener = listener;
39
+ }
40
+
41
+ /**
42
+ * Tells about a screen a module made, once the module ran: Metro registers its exports after it, so the family of the
43
+ * screen is known by then, and a new version of a screen that shows is found by it. Development only.
44
+ */
45
+ export function redefined(screen) {
46
+ if (!__DEV__ || !redefinedListener) return;
47
+ const listener = redefinedListener;
48
+ Promise.resolve().then(() => listener(screen));
49
+ }
50
+
51
+ // The id each family of screens gives the components they render, so their versions join one family too.
52
+ const innerIds = new WeakMap();
53
+ let innerCount = 0;
54
+
55
+ /**
56
+ * Puts a component a screen or the app renders (`owner`: the screen, or the app made by createNavigation; `role`: which
57
+ * of its components) in a family of its own, once the owner's module ran and Metro has given the owner its family: the
58
+ * next version of the owner registers its component under the same id, so React Refresh keeps the component's state
59
+ * when the module runs again, also when the module doesn't export it. A component React Refresh knows already (its
60
+ * module exports it, or Babel registered it) keeps its own family. Development only.
61
+ */
62
+ export function keepStateOf(owner, component, role = 'component') {
63
+ const refresh = reactRefresh();
64
+ if (!refresh?.register || component === undefined) return;
65
+ const register = refresh.register;
66
+ Promise.resolve().then(() => {
67
+ const family = familyOf(owner);
68
+ if (!family) return;
69
+ let id = innerIds.get(family);
70
+ if (id === undefined) {
71
+ id = `apexnative.navigation#${++innerCount}`;
72
+ innerIds.set(family, id);
73
+ }
74
+ register(component, `${id}.${role}`);
75
+ });
76
+ }
77
+
78
+ /**
79
+ * Makes React Refresh mount a component of the library again, not keep its state, when a new version of it comes: its
80
+ * hooks are the app's, which may have changed, and the library's code has no signature of them. Development only.
81
+ */
82
+ export function resetOnEdit(type) {
83
+ reactRefresh()?.createSignatureFunctionForTransform?.()(type, 'apexnative.navigation', true);
84
+ }
85
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["reactRefresh","__DEV__","undefined","global","globalThis","__METRO_GLOBAL_PREFIX__","refreshRuns","getFamilyByType","familyOf","type","newestType","current","redefinedListener","onRedefined","listener","redefined","screen","Promise","resolve","then","innerIds","WeakMap","innerCount","keepStateOf","owner","component","role","refresh","register","family","id","get","set","resetOnEdit","createSignatureFunctionForTransform"],"sourceRoot":"../../../src","sources":["engine/refresh.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;;AAeA;AACA,SAASA,YAAYA,CAAA,EAA6B;EAChD,IAAI,CAACC,OAAO,EAAE,OAAOC,SAAS;EAC9B,MAAMC,MAAM,GAAGC,UAA4E;EAC3F,OAAOD,MAAM,CAAC,GAAGA,MAAM,CAACE,uBAAuB,IAAI,EAAE,gBAAgB,CAAC;AAExE;;AAEA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAY;EACrC,OAAON,YAAY,CAAC,CAAC,EAAEO,eAAe,KAAKL,SAAS;AACtD;;AAEA;AACA,OAAO,SAASM,QAAQA,CAACC,IAAa,EAAsB;EAC1D,OAAOT,YAAY,CAAC,CAAC,EAAEO,eAAe,GAAGE,IAAI,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAmBD,IAAO,EAAK;EACvD,OAAQD,QAAQ,CAACC,IAAI,CAAC,EAAEE,OAAO,IAAsBF,IAAI;AAC3D;AAEA,IAAIG,iBAAyD;;AAE7D;AACA,OAAO,SAASC,WAAWA,CAACC,QAAkC,EAAQ;EACpEF,iBAAiB,GAAGE,QAAQ;AAC9B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,MAAc,EAAQ;EAC9C,IAAI,CAACf,OAAO,IAAI,CAACW,iBAAiB,EAAE;EACpC,MAAME,QAAQ,GAAGF,iBAAiB;EAClCK,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,MAAML,QAAQ,CAACE,MAAM,CAAC,CAAC;AAChD;;AAEA;AACA,MAAMI,QAAQ,GAAG,IAAIC,OAAO,CAAiB,CAAC;AAC9C,IAAIC,UAAU,GAAG,CAAC;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,KAAa,EAAEC,SAAkB,EAAEC,IAAI,GAAG,WAAW,EAAQ;EACvF,MAAMC,OAAO,GAAG3B,YAAY,CAAC,CAAC;EAC9B,IAAI,CAAC2B,OAAO,EAAEC,QAAQ,IAAIH,SAAS,KAAKvB,SAAS,EAAE;EACnD,MAAM0B,QAAQ,GAAGD,OAAO,CAACC,QAAQ;EACjCX,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM;IAC3B,MAAMU,MAAM,GAAGrB,QAAQ,CAACgB,KAAK,CAAC;IAC9B,IAAI,CAACK,MAAM,EAAE;IACb,IAAIC,EAAE,GAAGV,QAAQ,CAACW,GAAG,CAACF,MAAM,CAAC;IAC7B,IAAIC,EAAE,KAAK5B,SAAS,EAAE;MACpB4B,EAAE,GAAG,yBAAyB,EAAER,UAAU,EAAE;MAC5CF,QAAQ,CAACY,GAAG,CAACH,MAAM,EAAEC,EAAE,CAAC;IAC1B;IACAF,QAAQ,CAACH,SAAS,EAAE,GAAGK,EAAE,IAAIJ,IAAI,EAAE,CAAC;EACtC,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASO,WAAWA,CAACxB,IAAY,EAAQ;EAC9CT,YAAY,CAAC,CAAC,EAAEkC,mCAAmC,GAAG,CAAC,CAACzB,IAAI,EAAE,uBAAuB,EAAE,IAAI,CAAC;AAC9F","ignoreList":[]}
@@ -25,9 +25,67 @@ export function rememberMergedOptions(id, options) {
25
25
  remembered.set(id, before ? mergeOptions(before, kept) : kept);
26
26
  }
27
27
 
28
+ /** Takes the options at the paths, such as `['topBar', 'subtitle']`, out of those remembered for the node with the id. */
29
+ export function forgetMergedPaths(id, paths) {
30
+ const own = ownOptions.get(id);
31
+ if (own) own.options = withoutPaths(own.options, paths);
32
+ const options = remembered.get(id);
33
+ if (options) remembered.set(id, withoutPaths(options, paths));
34
+ }
35
+
36
+ // A copy of the options without the values at the paths.
37
+ function withoutPaths(options, paths) {
38
+ const kept = structuredCopy(options);
39
+ for (const path of paths) {
40
+ const parent = path.slice(0, -1).reduce((group, key) => group?.[key], kept);
41
+ if (parent) delete parent[path[path.length - 1]];
42
+ }
43
+ return kept;
44
+ }
45
+
46
+ // A copy of the plain objects of options, the other values shared.
47
+ function structuredCopy(options) {
48
+ return Object.fromEntries(Object.entries(options).map(([key, value]) => [key, isGroup(value) ? structuredCopy(value) : value]));
49
+ }
50
+ function isGroup(value) {
51
+ return typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === Object.prototype;
52
+ }
53
+
28
54
  /** Forgets the merged options of a node that went; a node of the last root keeps them until another root goes out. */
29
55
  export function forgetMergedOptions(id) {
30
56
  if (!lastRoot?.ids.has(id)) remembered.delete(id);
57
+ ownOptions.delete(id);
58
+ }
59
+
60
+ // The own options of each screen as JavaScript sent them, in development: those it showed with, and every merge and
61
+ // clear since. An edit of a screen's options (Fast Refresh) changes only what still has the old definition's value.
62
+ const ownOptions = new Map();
63
+
64
+ /** Notes the own options a screen of the name shows with (development). */
65
+ export function noteOwnOptions(id, name, options) {
66
+ if (__DEV__) ownOptions.set(id, {
67
+ name,
68
+ options
69
+ });
70
+ }
71
+
72
+ /** Notes a merge into a screen's own options (development). */
73
+ export function noteMergedOwnOptions(id, options) {
74
+ const noted = __DEV__ ? ownOptions.get(id) : undefined;
75
+ if (noted) noted.options = mergeOptions(noted.options, options);
76
+ }
77
+
78
+ /** The own options of a screen as JavaScript sent them (development); undefined for a screen it didn't note. */
79
+ export function ownOptionsOf(id) {
80
+ return ownOptions.get(id)?.options;
81
+ }
82
+
83
+ /**
84
+ * The ids of the screens of the name the native side has, mounted in React or not yet (a tab not selected yet), as
85
+ * development notes them.
86
+ */
87
+ export function notedScreens(name) {
88
+ return [...ownOptions].filter(([, noted]) => noted.name === name).map(([id]) => id);
31
89
  }
32
90
 
33
91
  /** The options merged into the node with the id, as remembered; undefined without any. */
@@ -54,12 +112,14 @@ export function rootGoesOut(nodes, again) {
54
112
  ids: new Set(nodes.flatMap(idsOf))
55
113
  };
56
114
  if (!before) return;
115
+ // The screens of the root before go with it, the tabs React never mounted too.
116
+ for (const id of before.ids) if (!lastRoot.ids.has(id)) ownOptions.delete(id);
57
117
  const moved = new Map();
58
118
  if (again === before) {
59
119
  pairNodes(before.nodes, nodes, (old, node) => {
60
120
  const options = remembered.get(old.id);
61
121
  if (!options) return;
62
- node.data.options = mergeNativeOptions(node.data.options ?? {}, toNativeOptions(options));
122
+ node.data.options = mergeNativeOptions(node.data.options ?? {}, toNativeOptions(options, node.id));
63
123
  moved.set(node.id, options);
64
124
  });
65
125
  }
@@ -1 +1 @@
1
- {"version":3,"names":["mergeOptions","mergeNativeOptions","toNativeOptions","remembered","Map","lastRoot","rememberMergedOptions","id","options","ids","has","kept","withoutOneTimeOptions","before","get","set","forgetMergedOptions","delete","mergedOptionsOf","sentRoot","rootGoesOut","nodes","again","Set","flatMap","idsOf","moved","pairNodes","old","node","data","forEach","children","after","pair","index","type","name","result","bottomTabs","currentTabIndex","currentTabId","sideMenu","side","settings","visible"],"sourceRoot":"../../../src","sources":["engine/rememberedOptions.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mergeOptions","mergeNativeOptions","toNativeOptions","remembered","Map","lastRoot","rememberMergedOptions","id","options","ids","has","kept","withoutOneTimeOptions","before","get","set","forgetMergedPaths","paths","own","ownOptions","withoutPaths","structuredCopy","path","parent","slice","reduce","group","key","length","Object","fromEntries","entries","map","value","isGroup","getPrototypeOf","prototype","forgetMergedOptions","delete","noteOwnOptions","name","__DEV__","noteMergedOwnOptions","noted","undefined","ownOptionsOf","notedScreens","filter","mergedOptionsOf","sentRoot","rootGoesOut","nodes","again","Set","flatMap","idsOf","moved","pairNodes","old","node","data","forEach","children","after","pair","index","type","result","bottomTabs","currentTabIndex","currentTabId","sideMenu","side","settings","visible"],"sourceRoot":"../../../src","sources":["engine/rememberedOptions.ts"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  import React, { useCallback, useEffect, useSyncExternalStore } from 'react';
4
4
  import { AppRegistry } from 'react-native';
5
5
  import { forgetPlace } from "./places.js";
6
- import { forgetProps, propsOf, watchProps } from "./props.js";
6
+ import { forgetProps, isOptionsComponent, propsOf, watchProps } from "./props.js";
7
7
  import { forgetMergedOptions } from "./rememberedOptions.js";
8
8
  import { hasSlot } from "./slots.js";
9
9
 
@@ -15,15 +15,52 @@ import { hasSlot } from "./slots.js";
15
15
  */
16
16
 
17
17
  /** What the root of a React screen renders: the screen's id, and the props the command gave it. */
18
+
19
+ /**
20
+ * What React Native gives the root of a React screen: the screen's id, its root tag (none in a slot of the app's one
21
+ * tree), and the props the native side gives that root, a tab cell's `tabIndex`, `selected`, `badge`, `dot` and
22
+ * `dotColor`.
23
+ */
18
24
  import { jsx as _jsx } from "react/jsx-runtime";
19
25
  const screens = new Map();
20
26
  const roots = new Map();
21
27
  let unmounted;
22
- // The React root that shows each screen, by its root tag. After a JavaScript reload React Native starts the roots of
23
- // the old screens again in the new runtime, under the ids the new screens get too, and unmounts them once the new ones
24
- // show; their root tags are older, as the native side counts them up for as long as the app runs. A slot of the app's
25
- // one tree has no tag: while the one tree shows a screen with the id, no root of that id lets it go.
28
+ // The React roots mounted under each id, by their root tags. One id can have several: after a JavaScript reload React
29
+ // Native starts the roots of the old screens again in the new runtime, under the ids the new screens get too, and
30
+ // unmounts them once the new ones show; a component of the default or a stack's options has one id and a root in the
31
+ // bar of every screen that shows it. The id lets its props go only with the last of them. A slot of the app's one tree
32
+ // has no tag: while the one tree shows a screen with the id, no root of that id lets it go.
26
33
  const owners = new Map();
34
+ // The screens that show by their ids: the name, and how many roots or slots of the id are mounted (a component of the
35
+ // options has a root in the bar of every screen that shows it).
36
+ const shown = new Map();
37
+
38
+ /**
39
+ * Notes a screen as shown, a React root or slot of it or the controller of a native screen, until the function it
40
+ * gives is called.
41
+ */
42
+ export function noteShown(componentId, name) {
43
+ const entry = shown.get(componentId);
44
+ if (entry?.name === name) entry.mounts++;else shown.set(componentId, {
45
+ name,
46
+ mounts: 1
47
+ });
48
+ return () => {
49
+ const current = shown.get(componentId);
50
+ if (current?.name !== name) return;
51
+ if (--current.mounts === 0) shown.delete(componentId);
52
+ };
53
+ }
54
+
55
+ /** The ids of the screens with the name that show now. */
56
+ export function shownScreens(name) {
57
+ return [...shown].filter(([, entry]) => entry.name === name).map(([id]) => id);
58
+ }
59
+
60
+ /** Whether a React root of the screen with the id is mounted now (a slot of the app's one tree doesn't count). */
61
+ export function hasRoot(componentId) {
62
+ return owners.has(componentId);
63
+ }
27
64
 
28
65
  /** What runs when the root of a screen unmounts: the screen is gone. */
29
66
  export function onScreenUnmounted(listener) {
@@ -145,10 +182,25 @@ export function isReactScreen(name) {
145
182
  return screen !== undefined && 'component' in screen;
146
183
  }
147
184
 
185
+ /**
186
+ * The props a screen's component renders with: those a command left under its id ([stored]), the props the native side
187
+ * gave its root over them ([root]: a tab cell's state, which the docs promise arrives on top of `passProps`), and its
188
+ * id. The root tag stays with the root.
189
+ */
190
+ export function screenProps(stored, root) {
191
+ const props = {
192
+ ...stored,
193
+ ...root,
194
+ componentId: root.componentId
195
+ };
196
+ delete props.rootTag;
197
+ return props;
198
+ }
199
+
148
200
  /**
149
201
  * The root a React screen runs in: the screen with the props a command left for it under its id, and the new ones when
150
- * options give its id new props. React Native gives a root only its id (and its own root props, which stay here); the
151
- * slot of the app's one tree renders the same root.
202
+ * options give its id new props, under the props the native side gives the root ([screenProps]). The slot of the app's
203
+ * one tree renders the same root.
152
204
  */
153
205
  export function screenRoot(name) {
154
206
  const screen = screens.get(name);
@@ -164,26 +216,35 @@ export function screenRoot(name) {
164
216
  } = rootProps;
165
217
  const watch = useCallback(watcher => watchProps(componentId, watcher), [componentId]);
166
218
  const props = useSyncExternalStore(watch, () => propsOf(componentId));
219
+ useEffect(() => noteShown(componentId, name), [componentId]);
167
220
  useEffect(() => {
168
- if (rootTag !== undefined && rootTag > (owners.get(componentId) ?? -1)) {
169
- owners.set(componentId, rootTag);
221
+ if (rootTag !== undefined) {
222
+ const tags = owners.get(componentId) ?? new Set();
223
+ tags.add(rootTag);
224
+ owners.set(componentId, tags);
170
225
  }
171
226
  return () => {
172
- // An old root of the same id leaves the screen alone, and so does any root while the one tree still has a slot
173
- // with the id: a later screen under the id, the restarted root of a screen after a reload into the one tree
174
- // (its slot may mount only once the app's provider lets it), the screen rendering again under the provider.
175
- if (rootTag !== undefined && owners.get(componentId) !== rootTag) return;
227
+ // A root while another root of the id is mounted leaves the screen alone, and so does any root while the one
228
+ // tree still has a slot with the id: a later screen under the id, the restarted root of a screen after a
229
+ // reload into the one tree (its slot may mount only once the app's provider lets it), the screen rendering
230
+ // again under the provider.
231
+ const tags = owners.get(componentId);
232
+ if (rootTag !== undefined && tags) {
233
+ tags.delete(rootTag);
234
+ if (tags.size > 0) return;
235
+ }
176
236
  if (hasSlot(componentId)) return;
177
237
  owners.delete(componentId);
178
- forgetProps(componentId);
238
+ // A component the library named in options keeps its props for the next root under its id (the node shows
239
+ // it again, or another screen shows the same default): they go with the node.
240
+ if (!isOptionsComponent(componentId)) forgetProps(componentId);
179
241
  forgetPlace(componentId);
180
242
  forgetMergedOptions(componentId);
181
243
  unmounted?.(componentId);
182
244
  };
183
245
  }, [componentId, rootTag]);
184
246
  return /*#__PURE__*/_jsx(Screen, {
185
- ...props,
186
- componentId: componentId
247
+ ...screenProps(props, rootProps)
187
248
  });
188
249
  };
189
250
  root.displayName = `ScreenRoot(${name})`;