@apexnative/navigation 0.0.0-stage → 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1372) hide show
  1. package/ApexNavigation.podspec +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +76 -2
  4. package/android/CLAUDE.md +183 -0
  5. package/android/CORE.md +219 -0
  6. package/android/MATERIAL_SYMBOLS_LICENSE.txt +205 -0
  7. package/android/RECIPES.md +39 -0
  8. package/android/build.gradle +108 -0
  9. package/android/consumer-rules.pro +2 -0
  10. package/android/src/main/AndroidManifest.xml +9 -0
  11. package/android/src/main/java/dev/apexnative/navigation/EdgeToEdgeDecision.kt +25 -0
  12. package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +339 -0
  13. package/android/src/main/java/dev/apexnative/navigation/NavigationApplication.kt +90 -0
  14. package/android/src/main/java/dev/apexnative/navigation/NavigationPackage.kt +37 -0
  15. package/android/src/main/java/dev/apexnative/navigation/customrow/BottomTabsCustomRowOptions.kt +85 -0
  16. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutChecks.kt +51 -0
  17. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutException.kt +7 -0
  18. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutNode.kt +118 -0
  19. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutReader.kt +274 -0
  20. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutType.kt +35 -0
  21. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCalls.kt +61 -0
  22. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenContext.kt +84 -0
  23. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCreator.kt +17 -0
  24. package/android/src/main/java/dev/apexnative/navigation/options/AnimationsOptions.kt +54 -0
  25. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabOptions.kt +238 -0
  26. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabsOptions.kt +244 -0
  27. package/android/src/main/java/dev/apexnative/navigation/options/ButtonMenuOptions.kt +70 -0
  28. package/android/src/main/java/dev/apexnative/navigation/options/ButtonOptions.kt +296 -0
  29. package/android/src/main/java/dev/apexnative/navigation/options/ComponentOptions.kt +141 -0
  30. package/android/src/main/java/dev/apexnative/navigation/options/DefaultOptions.kt +21 -0
  31. package/android/src/main/java/dev/apexnative/navigation/options/FabOptions.kt +97 -0
  32. package/android/src/main/java/dev/apexnative/navigation/options/FontOptions.kt +47 -0
  33. package/android/src/main/java/dev/apexnative/navigation/options/HardwareBackButtonOptions.kt +49 -0
  34. package/android/src/main/java/dev/apexnative/navigation/options/InterpolationOptions.kt +203 -0
  35. package/android/src/main/java/dev/apexnative/navigation/options/KeyCommandOptions.kt +49 -0
  36. package/android/src/main/java/dev/apexnative/navigation/options/LargeTitleOptions.kt +78 -0
  37. package/android/src/main/java/dev/apexnative/navigation/options/LayoutAnimation.kt +157 -0
  38. package/android/src/main/java/dev/apexnative/navigation/options/LayoutOptions.kt +94 -0
  39. package/android/src/main/java/dev/apexnative/navigation/options/ModalOptions.kt +87 -0
  40. package/android/src/main/java/dev/apexnative/navigation/options/ModalPlacementOptions.kt +90 -0
  41. package/android/src/main/java/dev/apexnative/navigation/options/NavigationBarOptions.kt +44 -0
  42. package/android/src/main/java/dev/apexnative/navigation/options/Options.kt +167 -0
  43. package/android/src/main/java/dev/apexnative/navigation/options/OptionsCache.kt +21 -0
  44. package/android/src/main/java/dev/apexnative/navigation/options/OptionsReader.kt +133 -0
  45. package/android/src/main/java/dev/apexnative/navigation/options/PreviewOptions.kt +97 -0
  46. package/android/src/main/java/dev/apexnative/navigation/options/ReadableMaps.kt +70 -0
  47. package/android/src/main/java/dev/apexnative/navigation/options/ScrollEdgeEffectOptions.kt +98 -0
  48. package/android/src/main/java/dev/apexnative/navigation/options/SearchBarOptions.kt +151 -0
  49. package/android/src/main/java/dev/apexnative/navigation/options/SharedElementTransitionOptions.kt +57 -0
  50. package/android/src/main/java/dev/apexnative/navigation/options/SheetOptions.kt +108 -0
  51. package/android/src/main/java/dev/apexnative/navigation/options/SideMenuOptions.kt +130 -0
  52. package/android/src/main/java/dev/apexnative/navigation/options/SplitViewGroupOptions.kt +190 -0
  53. package/android/src/main/java/dev/apexnative/navigation/options/SplitViewOptions.kt +28 -0
  54. package/android/src/main/java/dev/apexnative/navigation/options/StackAnimationOptions.kt +270 -0
  55. package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +75 -0
  56. package/android/src/main/java/dev/apexnative/navigation/options/TitleOptions.kt +167 -0
  57. package/android/src/main/java/dev/apexnative/navigation/options/ToolbarOptions.kt +60 -0
  58. package/android/src/main/java/dev/apexnative/navigation/options/TopBarAppearanceOptions.kt +223 -0
  59. package/android/src/main/java/dev/apexnative/navigation/options/TopBarOptions.kt +381 -0
  60. package/android/src/main/java/dev/apexnative/navigation/options/ViewAnimationOptions.kt +225 -0
  61. package/android/src/main/java/dev/apexnative/navigation/options/WindowOptions.kt +36 -0
  62. package/android/src/main/java/dev/apexnative/navigation/options/params/Bool.kt +23 -0
  63. package/android/src/main/java/dev/apexnative/navigation/options/params/Fraction.kt +12 -0
  64. package/android/src/main/java/dev/apexnative/navigation/options/params/LayoutDirection.kt +26 -0
  65. package/android/src/main/java/dev/apexnative/navigation/options/params/Param.kt +24 -0
  66. package/android/src/main/java/dev/apexnative/navigation/options/params/Text.kt +24 -0
  67. package/android/src/main/java/dev/apexnative/navigation/options/params/ThemeColour.kt +259 -0
  68. package/android/src/main/java/dev/apexnative/navigation/options/params/Variant.kt +36 -0
  69. package/android/src/main/java/dev/apexnative/navigation/options/parsers/BoolParser.kt +15 -0
  70. package/android/src/main/java/dev/apexnative/navigation/options/parsers/FontParser.kt +28 -0
  71. package/android/src/main/java/dev/apexnative/navigation/options/parsers/FractionParser.kt +24 -0
  72. package/android/src/main/java/dev/apexnative/navigation/options/parsers/IconParser.kt +48 -0
  73. package/android/src/main/java/dev/apexnative/navigation/options/parsers/StringListParser.kt +27 -0
  74. package/android/src/main/java/dev/apexnative/navigation/options/parsers/TextParser.kt +32 -0
  75. package/android/src/main/java/dev/apexnative/navigation/options/parsers/TypefaceLoader.kt +42 -0
  76. package/android/src/main/java/dev/apexnative/navigation/options/parsers/VariantParser.kt +34 -0
  77. package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +41 -0
  78. package/android/src/main/java/dev/apexnative/navigation/react/CommandAnswer.kt +111 -0
  79. package/android/src/main/java/dev/apexnative/navigation/react/CommandListener.kt +27 -0
  80. package/android/src/main/java/dev/apexnative/navigation/react/CommandRunner.kt +131 -0
  81. package/android/src/main/java/dev/apexnative/navigation/react/DeveloperReload.kt +69 -0
  82. package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +123 -0
  83. package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +154 -0
  84. package/android/src/main/java/dev/apexnative/navigation/react/LaunchLink.kt +37 -0
  85. package/android/src/main/java/dev/apexnative/navigation/react/NavigationTurboModule.kt +311 -0
  86. package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +89 -0
  87. package/android/src/main/java/dev/apexnative/navigation/react/ReactGateway.kt +67 -0
  88. package/android/src/main/java/dev/apexnative/navigation/react/ReactView.kt +197 -0
  89. package/android/src/main/java/dev/apexnative/navigation/react/ReadableJson.kt +60 -0
  90. package/android/src/main/java/dev/apexnative/navigation/react/ReloadCoordinator.kt +130 -0
  91. package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +69 -0
  92. package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +87 -0
  93. package/android/src/main/java/dev/apexnative/navigation/react/ScrollEvents.kt +160 -0
  94. package/android/src/main/java/dev/apexnative/navigation/react/StartInfo.kt +44 -0
  95. package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +507 -0
  96. package/android/src/main/java/dev/apexnative/navigation/react/events/ComponentType.kt +13 -0
  97. package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +199 -0
  98. package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationStateReporter.kt +62 -0
  99. package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +87 -0
  100. package/android/src/main/java/dev/apexnative/navigation/react/events/StateHold.kt +62 -0
  101. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaReadyEvent.kt +16 -0
  102. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaView.kt +140 -0
  103. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaViewManager.kt +45 -0
  104. package/android/src/main/java/dev/apexnative/navigation/slots/SlotContainers.kt +44 -0
  105. package/android/src/main/java/dev/apexnative/navigation/slots/SlotHost.kt +91 -0
  106. package/android/src/main/java/dev/apexnative/navigation/slots/SlotScreenView.kt +158 -0
  107. package/android/src/main/java/dev/apexnative/navigation/slots/SlotView.kt +141 -0
  108. package/android/src/main/java/dev/apexnative/navigation/slots/SlotViewManager.kt +50 -0
  109. package/android/src/main/java/dev/apexnative/navigation/splash/SplashHold.kt +67 -0
  110. package/android/src/main/java/dev/apexnative/navigation/splash/SplashTheme.kt +81 -0
  111. package/android/src/main/java/dev/apexnative/navigation/splash/SplashView.kt +77 -0
  112. package/android/src/main/java/dev/apexnative/navigation/system/AppDirection.kt +92 -0
  113. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiLayers.kt +126 -0
  114. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiOwner.kt +229 -0
  115. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiRules.kt +302 -0
  116. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiState.kt +58 -0
  117. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiWindow.kt +405 -0
  118. package/android/src/main/java/dev/apexnative/navigation/utils/ColorUtils.kt +22 -0
  119. package/android/src/main/java/dev/apexnative/navigation/utils/DevelopmentLog.kt +45 -0
  120. package/android/src/main/java/dev/apexnative/navigation/utils/DimensionExtensions.kt +16 -0
  121. package/android/src/main/java/dev/apexnative/navigation/utils/ImageLoader.kt +112 -0
  122. package/android/src/main/java/dev/apexnative/navigation/utils/MaterialTheme.kt +148 -0
  123. package/android/src/main/java/dev/apexnative/navigation/utils/NavigationLog.kt +6 -0
  124. package/android/src/main/java/dev/apexnative/navigation/utils/ScrollToTop.kt +33 -0
  125. package/android/src/main/java/dev/apexnative/navigation/utils/SystemUiUtils.kt +41 -0
  126. package/android/src/main/java/dev/apexnative/navigation/utils/TestIds.kt +89 -0
  127. package/android/src/main/java/dev/apexnative/navigation/utils/TextViewUtils.kt +10 -0
  128. package/android/src/main/java/dev/apexnative/navigation/utils/UiThread.kt +31 -0
  129. package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +43 -0
  130. package/android/src/main/java/dev/apexnative/navigation/utils/ViewController.kt +124 -0
  131. package/android/src/main/java/dev/apexnative/navigation/utils/ViewExtensions.kt +41 -0
  132. package/android/src/main/java/dev/apexnative/navigation/utils/ViewUtils.kt +15 -0
  133. package/android/src/main/java/dev/apexnative/navigation/utils/WindowFolds.kt +107 -0
  134. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementController.kt +258 -0
  135. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementDefinition.kt +57 -0
  136. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementLayout.kt +225 -0
  137. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementPlanner.kt +120 -0
  138. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +31 -0
  139. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsCollapseBehavior.kt +54 -0
  140. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +664 -0
  141. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsPresenter.kt +367 -0
  142. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowGeometry.kt +81 -0
  143. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowPlacer.kt +223 -0
  144. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarLook.kt +74 -0
  145. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarMotion.kt +83 -0
  146. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabCellState.kt +27 -0
  147. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabHistory.kt +38 -0
  148. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +172 -0
  149. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabSelection.kt +65 -0
  150. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsAttach.kt +42 -0
  151. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsRoom.kt +72 -0
  152. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildController.kt +45 -0
  153. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildControllersRegistry.kt +29 -0
  154. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +90 -0
  155. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentViewController.kt +254 -0
  156. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ContentReadiness.kt +65 -0
  157. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RenderWait.kt +231 -0
  158. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RestPlace.kt +28 -0
  159. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenContentFactory.kt +28 -0
  160. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFocus.kt +22 -0
  161. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +154 -0
  162. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenReadiness.kt +104 -0
  163. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenSafeArea.kt +148 -0
  164. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentCreator.kt +18 -0
  165. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentViewController.kt +187 -0
  166. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/NativeScreens.kt +25 -0
  167. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +40 -0
  168. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalContainer.kt +20 -0
  169. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +1269 -0
  170. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +186 -0
  171. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +342 -0
  172. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +398 -0
  173. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetContainer.kt +67 -0
  174. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +78 -0
  175. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/FirstRootDraw.kt +58 -0
  176. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/LayoutFactory.kt +203 -0
  177. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +562 -0
  178. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigators.kt +53 -0
  179. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +514 -0
  180. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/WaitingLayer.kt +18 -0
  181. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayContainer.kt +33 -0
  182. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +383 -0
  183. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayTouches.kt +44 -0
  184. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayViews.kt +117 -0
  185. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/Capabilities.kt +62 -0
  186. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +43 -0
  187. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +218 -0
  188. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ShownChildren.kt +82 -0
  189. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +283 -0
  190. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +276 -0
  191. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +92 -0
  192. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +107 -0
  193. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitPanes.kt +59 -0
  194. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +509 -0
  195. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewLayout.kt +61 -0
  196. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewPresenter.kt +25 -0
  197. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedFrame.kt +19 -0
  198. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedPushes.kt +114 -0
  199. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackCommands.kt +387 -0
  200. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +635 -0
  201. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +167 -0
  202. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackPresenter.kt +24 -0
  203. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +1274 -0
  204. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +82 -0
  205. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +222 -0
  206. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlacement.kt +47 -0
  207. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlan.kt +44 -0
  208. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPresenter.kt +279 -0
  209. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/ScreenSearch.kt +450 -0
  210. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/SearchPanel.kt +176 -0
  211. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/StackSearchPresenter.kt +243 -0
  212. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarComponents.kt +211 -0
  213. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarRowTransition.kt +122 -0
  214. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonCells.kt +30 -0
  215. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonPlaces.kt +65 -0
  216. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/LargeTitleCollapse.kt +71 -0
  217. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/MenuChecks.kt +72 -0
  218. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarCollapseBehavior.kt +104 -0
  219. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +1085 -0
  220. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarRoom.kt +95 -0
  221. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarVisibility.kt +122 -0
  222. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/IReactView.kt +89 -0
  223. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/Presenter.kt +51 -0
  224. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ScrollEventListener.kt +194 -0
  225. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +320 -0
  226. package/android/src/main/java/dev/apexnative/navigation/views/animations/AnimationRules.kt +141 -0
  227. package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +193 -0
  228. package/android/src/main/java/dev/apexnative/navigation/views/animations/FadeThrough.kt +57 -0
  229. package/android/src/main/java/dev/apexnative/navigation/views/animations/SideAnimator.kt +143 -0
  230. package/android/src/main/java/dev/apexnative/navigation/views/animations/SystemTransition.kt +26 -0
  231. package/android/src/main/java/dev/apexnative/navigation/views/animations/ValueInterpolation.kt +93 -0
  232. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabItem.kt +13 -0
  233. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +550 -0
  234. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsContainer.kt +135 -0
  235. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsLayout.kt +89 -0
  236. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomBottomTabItemView.kt +91 -0
  237. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomTabRow.kt +165 -0
  238. package/android/src/main/java/dev/apexnative/navigation/views/component/ComponentLayout.kt +89 -0
  239. package/android/src/main/java/dev/apexnative/navigation/views/component/Renderable.kt +6 -0
  240. package/android/src/main/java/dev/apexnative/navigation/views/element/DrawOrder.kt +44 -0
  241. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStub.kt +31 -0
  242. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +281 -0
  243. package/android/src/main/java/dev/apexnative/navigation/views/element/ImageLoads.kt +103 -0
  244. package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +112 -0
  245. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionLayer.kt +152 -0
  246. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +53 -0
  247. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +46 -0
  248. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/FlightGeometry.kt +53 -0
  249. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +138 -0
  250. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +88 -0
  251. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PropertyAnimatorCreator.kt +33 -0
  252. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +66 -0
  253. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +70 -0
  254. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +179 -0
  255. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +139 -0
  256. package/android/src/main/java/dev/apexnative/navigation/views/externalcomponent/ExternalComponentLayout.kt +44 -0
  257. package/android/src/main/java/dev/apexnative/navigation/views/sidemenu/SideMenuView.kt +183 -0
  258. package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +137 -0
  259. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/Fab.kt +125 -0
  260. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabAnimator.kt +8 -0
  261. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabCollapseBehaviour.kt +34 -0
  262. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabMenu.kt +133 -0
  263. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/LargeTitleView.kt +45 -0
  264. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +211 -0
  265. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +407 -0
  266. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBarDefaults.kt +35 -0
  267. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/ScopeRow.kt +82 -0
  268. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchField.kt +130 -0
  269. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchStyle.kt +29 -0
  270. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SuggestionList.kt +77 -0
  271. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonComponentCell.kt +80 -0
  272. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +334 -0
  273. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonMenus.kt +106 -0
  274. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/IconBackgroundDrawable.kt +93 -0
  275. package/android/src/main/jni/ApexNavigationSpec.h +18 -0
  276. package/android/src/main/jni/CMakeLists.txt +33 -0
  277. package/android/src/main/res/color/apex_navigation_highlight_inverse.xml +5 -0
  278. package/android/src/main/res/color/apex_navigation_text_primary.xml +6 -0
  279. package/android/src/main/res/color/apex_navigation_text_primary_inverse.xml +6 -0
  280. package/android/src/main/res/color/apex_navigation_text_secondary.xml +6 -0
  281. package/android/src/main/res/color/apex_navigation_text_secondary_inverse.xml +6 -0
  282. package/android/src/main/res/drawable/apex_navigation_ic_arrow_back.xml +13 -0
  283. package/android/src/main/res/drawable/apex_navigation_ic_close.xml +12 -0
  284. package/android/src/main/res/drawable/ic_fab_add_24dp.xml +12 -0
  285. package/android/src/main/res/values/attrs.xml +13 -0
  286. package/android/src/main/res/values/dimens.xml +5 -0
  287. package/android/src/main/res/values/dimens_splash.xml +9 -0
  288. package/android/src/main/res/values/ids.xml +12 -0
  289. package/android/src/main/res/values/styles.xml +18 -0
  290. package/android/src/main/res/values/themes.xml +75 -0
  291. package/android/src/main/res/values-night/styles.xml +6 -0
  292. package/android/src/main/res/values-night/themes.xml +67 -0
  293. package/cli/app.js +113 -0
  294. package/cli/changes.js +235 -0
  295. package/cli/codegen/commands.js +356 -0
  296. package/cli/codegen/index.js +211 -0
  297. package/cli/codegen/kotlin.js +396 -0
  298. package/cli/codegen/names.js +99 -0
  299. package/cli/codegen/read.js +602 -0
  300. package/cli/codegen/swift.js +342 -0
  301. package/cli/config.js +78 -0
  302. package/cli/diff.js +139 -0
  303. package/cli/doctor/checks/android.js +217 -0
  304. package/cli/doctor/checks/app.js +305 -0
  305. package/cli/doctor/checks/conflicts.js +42 -0
  306. package/cli/doctor/checks/devices.js +98 -0
  307. package/cli/doctor/checks/icons.js +69 -0
  308. package/cli/doctor/checks/ios.js +187 -0
  309. package/cli/doctor/checks/navigation.js +285 -0
  310. package/cli/doctor/checks/splash.js +102 -0
  311. package/cli/doctor/fix.js +66 -0
  312. package/cli/doctor/index.js +136 -0
  313. package/cli/doctor/types.js +30 -0
  314. package/cli/exec.js +34 -0
  315. package/cli/gradle.js +142 -0
  316. package/cli/icons/android.js +173 -0
  317. package/cli/icons/images.js +202 -0
  318. package/cli/icons/index.js +97 -0
  319. package/cli/icons/ios.js +113 -0
  320. package/cli/icons/settings.js +116 -0
  321. package/cli/images.js +67 -0
  322. package/cli/index.js +307 -0
  323. package/cli/info/index.js +290 -0
  324. package/cli/init/index.js +426 -0
  325. package/cli/init/packageManager.js +48 -0
  326. package/cli/init/starter.js +440 -0
  327. package/cli/links/files.js +109 -0
  328. package/cli/links/identity.js +75 -0
  329. package/cli/links/index.js +532 -0
  330. package/cli/links/native.js +396 -0
  331. package/cli/links/open.js +120 -0
  332. package/cli/links/prefixes.js +89 -0
  333. package/cli/mcp/appMap.js +128 -0
  334. package/cli/mcp/docs.js +175 -0
  335. package/cli/mcp/index.js +153 -0
  336. package/cli/mcp/markdown.js +210 -0
  337. package/cli/mcp/protocol.js +151 -0
  338. package/cli/mcp/tools.js +389 -0
  339. package/cli/migrate/entry.js +451 -0
  340. package/cli/migrate/index.js +305 -0
  341. package/cli/migrate/native.js +250 -0
  342. package/cli/migrate/report.js +238 -0
  343. package/cli/pods.js +56 -0
  344. package/cli/project.js +189 -0
  345. package/cli/screen/index.js +383 -0
  346. package/cli/screen/templates/compose.js +46 -0
  347. package/cli/screen/templates/native.js +40 -0
  348. package/cli/screen/templates/react.js +47 -0
  349. package/cli/screen/templates/swiftui.js +30 -0
  350. package/cli/screen/templates/uikit.js +48 -0
  351. package/cli/screen/templates/views.js +46 -0
  352. package/cli/setup/index.js +240 -0
  353. package/cli/setup/source.js +58 -0
  354. package/cli/setup/steps/app.js +76 -0
  355. package/cli/setup/steps/appDelegate.js +98 -0
  356. package/cli/setup/steps/entry.js +68 -0
  357. package/cli/setup/steps/env.js +245 -0
  358. package/cli/setup/steps/infoPlist.js +39 -0
  359. package/cli/setup/steps/mainActivity.js +60 -0
  360. package/cli/setup/steps/mainApplication.js +58 -0
  361. package/cli/setup/steps/manifest.js +38 -0
  362. package/cli/setup/steps/styles.js +29 -0
  363. package/cli/setup/steps/types.js +14 -0
  364. package/cli/splash/android.js +239 -0
  365. package/cli/splash/files.js +50 -0
  366. package/cli/splash/images.js +117 -0
  367. package/cli/splash/index.js +109 -0
  368. package/cli/splash/ios.js +349 -0
  369. package/cli/splash/settings.js +143 -0
  370. package/cli/typescript.js +473 -0
  371. package/cli/ui.js +268 -0
  372. package/cli/upgrade/changelog.js +45 -0
  373. package/cli/upgrade/index.js +347 -0
  374. package/cli/upgrade/versions.js +105 -0
  375. package/cli/workspace.js +60 -0
  376. package/cli/xcode/pbxproj.js +327 -0
  377. package/docs-md/architecture/errors-and-loading.md +138 -0
  378. package/docs-md/architecture/native-screens.md +290 -0
  379. package/docs-md/architecture/one-tree.md +164 -0
  380. package/docs-md/architecture/theme-and-context.md +368 -0
  381. package/docs-md/architecture/transitions.md +191 -0
  382. package/docs-md/containers/arrangement.md +320 -0
  383. package/docs-md/containers/modals.md +195 -0
  384. package/docs-md/containers/overlays.md +109 -0
  385. package/docs-md/containers/side-menu.md +138 -0
  386. package/docs-md/containers/split-view.md +155 -0
  387. package/docs-md/containers/stack.md +156 -0
  388. package/docs-md/containers/tabs.md +187 -0
  389. package/docs-md/flows/a-search-screen.md +311 -0
  390. package/docs-md/flows/an-app-with-tabs.md +380 -0
  391. package/docs-md/flows/bottom-sheets.md +326 -0
  392. package/docs-md/flows/forms-in-a-modal.md +420 -0
  393. package/docs-md/flows/list-and-details.md +428 -0
  394. package/docs-md/flows/onboarding.md +454 -0
  395. package/docs-md/flows/sign-in-and-sign-out.md +693 -0
  396. package/docs-md/fundamentals/lifecycle-and-events.md +224 -0
  397. package/docs-md/fundamentals/moving-between-screens.md +267 -0
  398. package/docs-md/fundamentals/screen-options.md +197 -0
  399. package/docs-md/fundamentals/screens-and-props.md +314 -0
  400. package/docs-md/fundamentals/starting-the-app.md +317 -0
  401. package/docs-md/fundamentals/switching-roots.md +166 -0
  402. package/docs-md/guides/analytics.md +377 -0
  403. package/docs-md/guides/app-context.md +554 -0
  404. package/docs-md/guides/building-a-screen.md +350 -0
  405. package/docs-md/guides/cli.md +421 -0
  406. package/docs-md/guides/data-fetching.md +492 -0
  407. package/docs-md/guides/deep-links.md +694 -0
  408. package/docs-md/guides/error-reporting.md +290 -0
  409. package/docs-md/guides/gestures-and-animations.md +381 -0
  410. package/docs-md/guides/notifications.md +548 -0
  411. package/docs-md/guides/overview.md +65 -0
  412. package/docs-md/guides/right-to-left.md +273 -0
  413. package/docs-md/guides/splash-screen.md +30 -0
  414. package/docs-md/guides/state-management.md +1050 -0
  415. package/docs-md/guides/testing.md +293 -0
  416. package/docs-md/help/glossary.md +433 -0
  417. package/docs-md/help/troubleshooting.md +709 -0
  418. package/docs-md/index.json +4205 -0
  419. package/docs-md/migration/from-expo-router.md +446 -0
  420. package/docs-md/migration/from-react-native-navigation.md +789 -0
  421. package/docs-md/migration/from-react-navigation.md +628 -0
  422. package/docs-md/screen-ui/back-and-gestures.md +178 -0
  423. package/docs-md/screen-ui/bar-buttons.md +312 -0
  424. package/docs-md/screen-ui/search.md +181 -0
  425. package/docs-md/screen-ui/system-ui.md +337 -0
  426. package/docs-md/screen-ui/toolbar-and-fab.md +146 -0
  427. package/docs-md/screen-ui/top-bar.md +247 -0
  428. package/docs-md/start/installation.md +233 -0
  429. package/docs-md/start/introduction.md +46 -0
  430. package/docs-md/start/quick-start.md +124 -0
  431. package/ios/Animations/ANNAnimationRules.h +72 -0
  432. package/ios/Animations/ANNAnimationRules.mm +122 -0
  433. package/ios/Animations/ANNFrameDriver.h +46 -0
  434. package/ios/Animations/ANNFrameDriver.mm +126 -0
  435. package/ios/Animations/ANNTransitionAnimator.h +34 -0
  436. package/ios/Animations/ANNTransitionAnimator.mm +293 -0
  437. package/ios/Animations/ANNTransitionPlan.h +115 -0
  438. package/ios/Animations/ANNTransitionPlan.mm +130 -0
  439. package/ios/Animations/ANNTransitionWait.h +29 -0
  440. package/ios/Animations/ANNTransitionWait.mm +135 -0
  441. package/ios/Animations/Elements/ANNElementFinder.h +26 -0
  442. package/ios/Animations/Elements/ANNElementFinder.mm +37 -0
  443. package/ios/Animations/Elements/ANNElementTransition.h +30 -0
  444. package/ios/Animations/Elements/ANNElementTransition.mm +75 -0
  445. package/ios/Animations/Elements/ANNSharedElementFlight.h +42 -0
  446. package/ios/Animations/Elements/ANNSharedElementFlight.mm +340 -0
  447. package/ios/Animations/Elements/ANNZoomAnchor.h +33 -0
  448. package/ios/Animations/Elements/ANNZoomAnchor.mm +133 -0
  449. package/ios/Animations/Interpolators/ANNCurve.h +61 -0
  450. package/ios/Animations/Interpolators/ANNCurve.mm +301 -0
  451. package/ios/Animations/Interpolators/ANNInterpolate.h +69 -0
  452. package/ios/Animations/Interpolators/ANNTrack.h +52 -0
  453. package/ios/Animations/Interpolators/ANNTrack.mm +77 -0
  454. package/ios/Animations/Interpolators/ANNViewTracks.h +57 -0
  455. package/ios/Animations/Interpolators/ANNViewTracks.mm +261 -0
  456. package/ios/ApexNavigation-prefix.h +6 -0
  457. package/ios/CLAUDE.md +151 -0
  458. package/ios/CORE.md +177 -0
  459. package/ios/Contract/ANNCommandAnswer.h +38 -0
  460. package/ios/Contract/ANNCommandAnswer.mm +99 -0
  461. package/ios/Contract/ANNCommandRunner.h +42 -0
  462. package/ios/Contract/ANNCommandRunner.mm +89 -0
  463. package/ios/Contract/ANNErrorTexts.h +86 -0
  464. package/ios/Contract/ANNErrorTexts.mm +230 -0
  465. package/ios/Contract/ANNLayoutNode.h +64 -0
  466. package/ios/Contract/ANNLayoutNode.mm +153 -0
  467. package/ios/Contract/ANNLayoutReader.h +34 -0
  468. package/ios/Contract/ANNLayoutReader.mm +282 -0
  469. package/ios/Contract/ANNLayoutRoot.h +26 -0
  470. package/ios/Contract/ANNLayoutRoot.mm +21 -0
  471. package/ios/Contract/ANNLayoutTreeOptions.h +22 -0
  472. package/ios/Contract/ANNLayoutTreeOptions.mm +32 -0
  473. package/ios/Contract/ANNLayoutType.h +44 -0
  474. package/ios/Contract/ANNLayoutValidator.h +23 -0
  475. package/ios/Contract/ANNLayoutValidator.mm +28 -0
  476. package/ios/Core/ANNAppDelegate.mm +122 -0
  477. package/ios/Core/ANNAppDirection.h +43 -0
  478. package/ios/Core/ANNAppDirection.mm +194 -0
  479. package/ios/Core/ANNAppearanceDispatcher.h +117 -0
  480. package/ios/Core/ANNAppearanceDispatcher.mm +433 -0
  481. package/ios/Core/ANNAssert.h +7 -0
  482. package/ios/Core/ANNDeepLinkQueue.h +35 -0
  483. package/ios/Core/ANNDeepLinkQueue.mm +136 -0
  484. package/ios/Core/ANNErrorHandler.h +17 -0
  485. package/ios/Core/ANNErrorHandler.mm +14 -0
  486. package/ios/Core/ANNEventEmitter.h +174 -0
  487. package/ios/Core/ANNEventEmitter.mm +337 -0
  488. package/ios/Core/ANNHinge.h +26 -0
  489. package/ios/Core/ANNHinge.mm +116 -0
  490. package/ios/Core/ANNKeyCommands.h +12 -0
  491. package/ios/Core/ANNKeyCommands.mm +74 -0
  492. package/ios/Core/ANNLayoutInfo.h +18 -0
  493. package/ios/Core/ANNLayoutInfo.mm +13 -0
  494. package/ios/Core/ANNLayoutProtocol.h +155 -0
  495. package/ios/Core/ANNNavigationState.h +38 -0
  496. package/ios/Core/ANNNavigationState.mm +127 -0
  497. package/ios/Core/ANNNodeHelper.h +114 -0
  498. package/ios/Core/ANNNodeHelper.mm +260 -0
  499. package/ios/Core/ANNNodePresenter.h +86 -0
  500. package/ios/Core/ANNNodePresenter.mm +92 -0
  501. package/ios/Core/ANNNodeRegistry.h +30 -0
  502. package/ios/Core/ANNNodeRegistry.mm +48 -0
  503. package/ios/Core/ANNOptionsRepaint.h +19 -0
  504. package/ios/Core/ANNOptionsRepaint.mm +59 -0
  505. package/ios/Core/ANNParking.h +34 -0
  506. package/ios/Core/ANNParking.mm +117 -0
  507. package/ios/Core/ANNPendingLayers.h +31 -0
  508. package/ios/Core/ANNPendingLayers.mm +57 -0
  509. package/ios/Core/ANNReloadCoordinator.h +26 -0
  510. package/ios/Core/ANNReloadCoordinator.mm +211 -0
  511. package/ios/Core/ANNRenderWait.h +105 -0
  512. package/ios/Core/ANNRenderWait.mm +496 -0
  513. package/ios/Core/ANNSceneDelegate.mm +92 -0
  514. package/ios/Core/ANNScreenAppearance+Internal.h +29 -0
  515. package/ios/Core/ANNScreenAppearance.h +60 -0
  516. package/ios/Core/ANNScreenAppearance.mm +44 -0
  517. package/ios/Core/ANNShownScreens.h +27 -0
  518. package/ios/Core/ANNShownScreens.mm +16 -0
  519. package/ios/Core/ANNSystemUI.h +95 -0
  520. package/ios/Core/ANNSystemUI.mm +401 -0
  521. package/ios/Core/ANNSystemUIRules.h +35 -0
  522. package/ios/Core/ANNSystemUIRules.mm +139 -0
  523. package/ios/Core/ANNUtils.h +35 -0
  524. package/ios/Core/ANNUtils.mm +111 -0
  525. package/ios/Core/ApexNavigation+Internal.h +26 -0
  526. package/ios/Core/ApexNavigation.mm +177 -0
  527. package/ios/Core/UIViewController+LayoutProtocol.h +102 -0
  528. package/ios/Core/UIViewController+LayoutProtocol.mm +253 -0
  529. package/ios/Layouts/Arrangement/ANNArrangementScreenDelegate.h +18 -0
  530. package/ios/Layouts/Arrangement/ANNArrangementState.h +30 -0
  531. package/ios/Layouts/Arrangement/ANNArrangementState.mm +53 -0
  532. package/ios/Layouts/Arrangement/ANNArrangementViewController.h +38 -0
  533. package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +573 -0
  534. package/ios/Layouts/External/ANNExternalViewController.h +28 -0
  535. package/ios/Layouts/External/ANNExternalViewController.mm +118 -0
  536. package/ios/Layouts/External/ANNNativeScreenCalls.h +27 -0
  537. package/ios/Layouts/External/ANNNativeScreenCalls.mm +77 -0
  538. package/ios/Layouts/Modal/ANNModal.h +121 -0
  539. package/ios/Layouts/Modal/ANNModal.mm +64 -0
  540. package/ios/Layouts/Modal/ANNModalCoordinator.h +99 -0
  541. package/ios/Layouts/Modal/ANNModalCoordinator.mm +1965 -0
  542. package/ios/Layouts/Modal/ANNModalHostViewComponentView.h +13 -0
  543. package/ios/Layouts/Modal/ANNModalHostViewComponentView.mm +24 -0
  544. package/ios/Layouts/Modal/ANNModalPresentation.h +73 -0
  545. package/ios/Layouts/Modal/ANNModalPresentation.mm +189 -0
  546. package/ios/Layouts/Modal/ANNModalSizePresenter.h +13 -0
  547. package/ios/Layouts/Modal/ANNModalSizePresenter.mm +65 -0
  548. package/ios/Layouts/Modal/ANNModalTransitions.h +29 -0
  549. package/ios/Layouts/Modal/ANNModalTransitions.mm +40 -0
  550. package/ios/Layouts/Modal/ANNPopoverPresenter.h +29 -0
  551. package/ios/Layouts/Modal/ANNPopoverPresenter.mm +158 -0
  552. package/ios/Layouts/Modal/ANNPresentationGate.h +52 -0
  553. package/ios/Layouts/Modal/ANNPresentationGate.mm +153 -0
  554. package/ios/Layouts/Modal/ANNSheetPresenter.h +31 -0
  555. package/ios/Layouts/Modal/ANNSheetPresenter.mm +247 -0
  556. package/ios/Layouts/Overlay/ANNOverlayCoordinator.h +66 -0
  557. package/ios/Layouts/Overlay/ANNOverlayCoordinator.mm +604 -0
  558. package/ios/Layouts/Overlay/ANNOverlayWindow.h +10 -0
  559. package/ios/Layouts/Overlay/ANNOverlayWindow.mm +71 -0
  560. package/ios/Layouts/Root/ANNLayoutFactory.h +31 -0
  561. package/ios/Layouts/Root/ANNLayoutFactory.mm +349 -0
  562. package/ios/Layouts/Root/ANNRootCoordinator.h +42 -0
  563. package/ios/Layouts/Root/ANNRootCoordinator.mm +847 -0
  564. package/ios/Layouts/Root/ANNSplashViewController.h +30 -0
  565. package/ios/Layouts/Root/ANNSplashViewController.mm +138 -0
  566. package/ios/Layouts/Screen/ANNComponentPresenter.h +32 -0
  567. package/ios/Layouts/Screen/ANNComponentPresenter.mm +136 -0
  568. package/ios/Layouts/Screen/ANNComponentViewController.h +100 -0
  569. package/ios/Layouts/Screen/ANNComponentViewController.mm +652 -0
  570. package/ios/Layouts/Screen/ANNNativeScreenContext+Internal.h +19 -0
  571. package/ios/Layouts/Screen/ANNNativeScreenContext.mm +84 -0
  572. package/ios/Layouts/Screen/ANNPreviewInteraction.h +38 -0
  573. package/ios/Layouts/Screen/ANNPreviewInteraction.mm +252 -0
  574. package/ios/Layouts/Screen/ANNScreenBars.h +29 -0
  575. package/ios/Layouts/Screen/ANNScreenBars.mm +47 -0
  576. package/ios/Layouts/Screen/ANNScreenInsets.h +30 -0
  577. package/ios/Layouts/Screen/ANNScreenInsets.mm +68 -0
  578. package/ios/Layouts/Screen/ANNScreenReadiness.h +92 -0
  579. package/ios/Layouts/Screen/ANNScreenReadiness.mm +186 -0
  580. package/ios/Layouts/Screen/ANNScreenRegions.h +33 -0
  581. package/ios/Layouts/Screen/ANNScreenRegions.mm +105 -0
  582. package/ios/Layouts/Screen/ANNScreenSafeArea.h +38 -0
  583. package/ios/Layouts/Screen/ANNScreenSafeArea.mm +58 -0
  584. package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.h +41 -0
  585. package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.mm +113 -0
  586. package/ios/Layouts/SideMenu/ANNSideMenuPresenter.h +28 -0
  587. package/ios/Layouts/SideMenu/ANNSideMenuPresenter.mm +260 -0
  588. package/ios/Layouts/SideMenu/ANNSideMenuTypes.h +19 -0
  589. package/ios/Layouts/SideMenu/ANNSideMenuViewController.h +46 -0
  590. package/ios/Layouts/SideMenu/ANNSideMenuViewController.mm +891 -0
  591. package/ios/Layouts/SplitView/ANNSplitViewCommands.h +39 -0
  592. package/ios/Layouts/SplitView/ANNSplitViewCommands.mm +612 -0
  593. package/ios/Layouts/SplitView/ANNSplitViewController.h +52 -0
  594. package/ios/Layouts/SplitView/ANNSplitViewController.mm +494 -0
  595. package/ios/Layouts/SplitView/ANNSplitViewPresenter.h +18 -0
  596. package/ios/Layouts/SplitView/ANNSplitViewPresenter.mm +181 -0
  597. package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.h +32 -0
  598. package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.mm +133 -0
  599. package/ios/Layouts/Stack/ANNPreviewPush.h +46 -0
  600. package/ios/Layouts/Stack/ANNPreviewPush.mm +298 -0
  601. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.h +32 -0
  602. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.mm +92 -0
  603. package/ios/Layouts/Stack/ANNStackCommands.h +51 -0
  604. package/ios/Layouts/Stack/ANNStackCommands.mm +403 -0
  605. package/ios/Layouts/Stack/ANNStackController.h +161 -0
  606. package/ios/Layouts/Stack/ANNStackController.mm +1597 -0
  607. package/ios/Layouts/Stack/ANNStackPresenter.h +44 -0
  608. package/ios/Layouts/Stack/ANNStackPresenter.mm +181 -0
  609. package/ios/Layouts/Stack/ANNStackQueue.h +194 -0
  610. package/ios/Layouts/Stack/ANNStackQueue.mm +1300 -0
  611. package/ios/Layouts/Stack/InteractivePopGestureDelegate.h +53 -0
  612. package/ios/Layouts/Stack/InteractivePopGestureDelegate.mm +228 -0
  613. package/ios/Layouts/Stack/UINavigationController+ANNCommands.h +19 -0
  614. package/ios/Layouts/Stack/UINavigationController+ANNCommands.mm +29 -0
  615. package/ios/Layouts/Tabs/ANNBottomTabCellView.h +33 -0
  616. package/ios/Layouts/Tabs/ANNBottomTabCellView.mm +100 -0
  617. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.h +49 -0
  618. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.mm +153 -0
  619. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.h +17 -0
  620. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.mm +56 -0
  621. package/ios/Layouts/Tabs/ANNBottomTabsController.h +121 -0
  622. package/ios/Layouts/Tabs/ANNBottomTabsController.mm +1404 -0
  623. package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.h +47 -0
  624. package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.mm +280 -0
  625. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.h +81 -0
  626. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.mm +1026 -0
  627. package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.h +24 -0
  628. package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.mm +58 -0
  629. package/ios/Layouts/Tabs/ANNScrollToTop.h +23 -0
  630. package/ios/Layouts/Tabs/ANNScrollToTop.mm +55 -0
  631. package/ios/Layouts/Tabs/ANNTabDotView.h +19 -0
  632. package/ios/Layouts/Tabs/ANNTabDotView.mm +46 -0
  633. package/ios/Layouts/Tabs/ANNTabLongPress.h +28 -0
  634. package/ios/Layouts/Tabs/ANNTabLongPress.mm +98 -0
  635. package/ios/Layouts/Tabs/ANNTabsDesign.h +26 -0
  636. package/ios/Layouts/Tabs/ANNTabsDesign.mm +34 -0
  637. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.h +27 -0
  638. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.mm +55 -0
  639. package/ios/Layouts/Tabs/UITabBar+utils.h +24 -0
  640. package/ios/Layouts/Tabs/UITabBar+utils.mm +103 -0
  641. package/ios/Options/ANNAnimationOptions.h +22 -0
  642. package/ios/Options/ANNAnimationOptions.mm +16 -0
  643. package/ios/Options/ANNAnimationPropertyOptions.h +17 -0
  644. package/ios/Options/ANNAnimationPropertyOptions.mm +15 -0
  645. package/ios/Options/ANNBottomTabDotIndicatorOptions.h +14 -0
  646. package/ios/Options/ANNBottomTabDotIndicatorOptions.mm +13 -0
  647. package/ios/Options/ANNBottomTabOptions.h +51 -0
  648. package/ios/Options/ANNBottomTabOptions.mm +47 -0
  649. package/ios/Options/ANNBottomTabsAccessoryOptions.h +19 -0
  650. package/ios/Options/ANNBottomTabsAccessoryOptions.mm +25 -0
  651. package/ios/Options/ANNBottomTabsAnimationOptions.h +12 -0
  652. package/ios/Options/ANNBottomTabsAnimationOptions.mm +11 -0
  653. package/ios/Options/ANNBottomTabsCustomRowOptions.h +19 -0
  654. package/ios/Options/ANNBottomTabsCustomRowOptions.mm +17 -0
  655. package/ios/Options/ANNBottomTabsOptions.h +51 -0
  656. package/ios/Options/ANNBottomTabsOptions.mm +48 -0
  657. package/ios/Options/ANNBottomTabsShadowOptions.h +14 -0
  658. package/ios/Options/ANNBottomTabsShadowOptions.mm +13 -0
  659. package/ios/Options/ANNButtonComponentOptions.h +13 -0
  660. package/ios/Options/ANNButtonComponentOptions.mm +12 -0
  661. package/ios/Options/ANNButtonOptions.h +56 -0
  662. package/ios/Options/ANNButtonOptions.mm +53 -0
  663. package/ios/Options/ANNButtonsParser.h +13 -0
  664. package/ios/Options/ANNButtonsParser.mm +18 -0
  665. package/ios/Options/ANNComponentOptions.h +14 -0
  666. package/ios/Options/ANNComponentOptions.mm +12 -0
  667. package/ios/Options/ANNDefaultOptions.h +18 -0
  668. package/ios/Options/ANNDefaultOptions.mm +22 -0
  669. package/ios/Options/ANNElementAnimationOptions.h +18 -0
  670. package/ios/Options/ANNElementAnimationOptions.mm +15 -0
  671. package/ios/Options/ANNElementTransitionOptions.h +26 -0
  672. package/ios/Options/ANNElementTransitionOptions.mm +28 -0
  673. package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.h +14 -0
  674. package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.mm +12 -0
  675. package/ios/Options/ANNEnterExitScreenAnimationOptions.h +14 -0
  676. package/ios/Options/ANNEnterExitScreenAnimationOptions.mm +12 -0
  677. package/ios/Options/ANNEnterExitTopBarAnimationOptions.h +14 -0
  678. package/ios/Options/ANNEnterExitTopBarAnimationOptions.mm +12 -0
  679. package/ios/Options/ANNFabOptions.h +26 -0
  680. package/ios/Options/ANNFabOptions.mm +23 -0
  681. package/ios/Options/ANNFontOptions.h +24 -0
  682. package/ios/Options/ANNFontOptions.mm +65 -0
  683. package/ios/Options/ANNHardwareBackButtonOptions.h +15 -0
  684. package/ios/Options/ANNHardwareBackButtonOptions.mm +13 -0
  685. package/ios/Options/ANNIconBackgroundOptions.h +16 -0
  686. package/ios/Options/ANNIconBackgroundOptions.mm +15 -0
  687. package/ios/Options/ANNIconInsetsOptions.h +16 -0
  688. package/ios/Options/ANNIconInsetsOptions.mm +14 -0
  689. package/ios/Options/ANNInterpolationOptions.h +22 -0
  690. package/ios/Options/ANNInterpolationOptions.mm +22 -0
  691. package/ios/Options/ANNLayoutOptions.h +26 -0
  692. package/ios/Options/ANNLayoutOptions.mm +25 -0
  693. package/ios/Options/ANNMenuOptions.h +37 -0
  694. package/ios/Options/ANNMenuOptions.mm +136 -0
  695. package/ios/Options/ANNModalAnimationOptions.h +17 -0
  696. package/ios/Options/ANNModalAnimationOptions.mm +15 -0
  697. package/ios/Options/ANNModalContentSizeOptions.h +14 -0
  698. package/ios/Options/ANNModalContentSizeOptions.mm +15 -0
  699. package/ios/Options/ANNModalOptions.h +19 -0
  700. package/ios/Options/ANNModalOptions.mm +15 -0
  701. package/ios/Options/ANNNavigationBarOptions.h +14 -0
  702. package/ios/Options/ANNNavigationBarOptions.mm +13 -0
  703. package/ios/Options/ANNNavigationOptions.h +60 -0
  704. package/ios/Options/ANNNavigationOptions.mm +54 -0
  705. package/ios/Options/ANNOptionField.h +91 -0
  706. package/ios/Options/ANNOptionField.mm +173 -0
  707. package/ios/Options/ANNOptions.h +62 -0
  708. package/ios/Options/ANNOptions.mm +329 -0
  709. package/ios/Options/ANNOptionsCache.h +22 -0
  710. package/ios/Options/ANNOptionsCache.mm +17 -0
  711. package/ios/Options/ANNOptionsReader.h +33 -0
  712. package/ios/Options/ANNOptionsReader.mm +63 -0
  713. package/ios/Options/ANNOverlayOptions.h +14 -0
  714. package/ios/Options/ANNOverlayOptions.mm +12 -0
  715. package/ios/Options/ANNPopoverOptions.h +17 -0
  716. package/ios/Options/ANNPopoverOptions.mm +31 -0
  717. package/ios/Options/ANNPreviewOptions.h +17 -0
  718. package/ios/Options/ANNPreviewOptions.mm +15 -0
  719. package/ios/Options/ANNScreenAnimationOptions.h +13 -0
  720. package/ios/Options/ANNScreenAnimationOptions.mm +12 -0
  721. package/ios/Options/ANNScrollEdgeEffectOptions.h +20 -0
  722. package/ios/Options/ANNScrollEdgeEffectOptions.mm +16 -0
  723. package/ios/Options/ANNScrollEdgeOptions.h +14 -0
  724. package/ios/Options/ANNScrollEdgeOptions.mm +12 -0
  725. package/ios/Options/ANNSearchBarOptions.h +49 -0
  726. package/ios/Options/ANNSearchBarOptions.mm +41 -0
  727. package/ios/Options/ANNSearchScopeOptions.h +15 -0
  728. package/ios/Options/ANNSearchScopeOptions.mm +13 -0
  729. package/ios/Options/ANNSearchSuggestionOptions.h +19 -0
  730. package/ios/Options/ANNSearchSuggestionOptions.mm +16 -0
  731. package/ios/Options/ANNSearchTokenOptions.h +18 -0
  732. package/ios/Options/ANNSearchTokenOptions.mm +15 -0
  733. package/ios/Options/ANNSetStackRootAnimationOptions.h +12 -0
  734. package/ios/Options/ANNSetStackRootAnimationOptions.mm +11 -0
  735. package/ios/Options/ANNSharedElementTransitionOptions.h +17 -0
  736. package/ios/Options/ANNSharedElementTransitionOptions.mm +15 -0
  737. package/ios/Options/ANNSheetOptions.h +25 -0
  738. package/ios/Options/ANNSheetOptions.mm +41 -0
  739. package/ios/Options/ANNSideMenuOptions.h +19 -0
  740. package/ios/Options/ANNSideMenuOptions.mm +16 -0
  741. package/ios/Options/ANNSideMenuSideOptions.h +23 -0
  742. package/ios/Options/ANNSideMenuSideOptions.mm +20 -0
  743. package/ios/Options/ANNSplitViewColumnOptions.h +14 -0
  744. package/ios/Options/ANNSplitViewColumnOptions.mm +13 -0
  745. package/ios/Options/ANNSplitViewInspectorOptions.h +13 -0
  746. package/ios/Options/ANNSplitViewInspectorOptions.mm +9 -0
  747. package/ios/Options/ANNSplitViewOptions.h +29 -0
  748. package/ios/Options/ANNSplitViewOptions.mm +26 -0
  749. package/ios/Options/ANNStackAnimationOptions.h +23 -0
  750. package/ios/Options/ANNStackAnimationOptions.mm +20 -0
  751. package/ios/Options/ANNStackPushAnimationOptions.h +13 -0
  752. package/ios/Options/ANNStackPushAnimationOptions.mm +11 -0
  753. package/ios/Options/ANNStatusBarOptions.h +20 -0
  754. package/ios/Options/ANNStatusBarOptions.mm +18 -0
  755. package/ios/Options/ANNToolbarOptions.h +14 -0
  756. package/ios/Options/ANNToolbarOptions.mm +27 -0
  757. package/ios/Options/ANNTopBarAnimationOptions.h +12 -0
  758. package/ios/Options/ANNTopBarAnimationOptions.mm +11 -0
  759. package/ios/Options/ANNTopBarBackButtonOptions.h +31 -0
  760. package/ios/Options/ANNTopBarBackButtonOptions.mm +35 -0
  761. package/ios/Options/ANNTopBarBackgroundComponentOptions.h +13 -0
  762. package/ios/Options/ANNTopBarBackgroundComponentOptions.mm +11 -0
  763. package/ios/Options/ANNTopBarBackgroundOptions.h +17 -0
  764. package/ios/Options/ANNTopBarBackgroundOptions.mm +15 -0
  765. package/ios/Options/ANNTopBarLargeTitleOptions.h +19 -0
  766. package/ios/Options/ANNTopBarLargeTitleOptions.mm +15 -0
  767. package/ios/Options/ANNTopBarOptions.h +62 -0
  768. package/ios/Options/ANNTopBarOptions.mm +49 -0
  769. package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.h +14 -0
  770. package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.mm +12 -0
  771. package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.h +19 -0
  772. package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.mm +16 -0
  773. package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.h +16 -0
  774. package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.mm +12 -0
  775. package/ios/Options/ANNTopBarSubtitleOptions.h +18 -0
  776. package/ios/Options/ANNTopBarSubtitleOptions.mm +14 -0
  777. package/ios/Options/ANNTopBarTitleComponentOptions.h +15 -0
  778. package/ios/Options/ANNTopBarTitleComponentOptions.mm +12 -0
  779. package/ios/Options/ANNTopBarTitleDocumentOptions.h +12 -0
  780. package/ios/Options/ANNTopBarTitleDocumentOptions.mm +11 -0
  781. package/ios/Options/ANNTopBarTitleOptions.h +29 -0
  782. package/ios/Options/ANNTopBarTitleOptions.mm +21 -0
  783. package/ios/Options/ANNViewAnimationOptions.h +26 -0
  784. package/ios/Options/ANNViewAnimationOptions.mm +58 -0
  785. package/ios/Options/ANNWindowOptions.h +12 -0
  786. package/ios/Options/ANNWindowOptions.mm +9 -0
  787. package/ios/Options/ANNZoomTransitionOptions.h +13 -0
  788. package/ios/Options/ANNZoomTransitionOptions.mm +12 -0
  789. package/ios/Options/Params/ANNIntegerParam.h +14 -0
  790. package/ios/Options/Params/ANNIntegerParam.mm +13 -0
  791. package/ios/Options/Params/ANNParam.h +28 -0
  792. package/ios/Options/Params/ANNParam.mm +29 -0
  793. package/ios/Options/Params/Bool.h +17 -0
  794. package/ios/Options/Params/Bool.mm +17 -0
  795. package/ios/Options/Params/BoolParser.h +12 -0
  796. package/ios/Options/Params/BoolParser.mm +10 -0
  797. package/ios/Options/Params/Color.h +43 -0
  798. package/ios/Options/Params/Color.mm +65 -0
  799. package/ios/Options/Params/ColorParser.h +14 -0
  800. package/ios/Options/Params/ColorParser.mm +95 -0
  801. package/ios/Options/Params/Double.h +14 -0
  802. package/ios/Options/Params/Double.mm +13 -0
  803. package/ios/Options/Params/DoubleParser.h +16 -0
  804. package/ios/Options/Params/DoubleParser.mm +16 -0
  805. package/ios/Options/Params/Image.h +15 -0
  806. package/ios/Options/Params/Image.mm +13 -0
  807. package/ios/Options/Params/ImageParser.h +16 -0
  808. package/ios/Options/Params/ImageParser.mm +103 -0
  809. package/ios/Options/Params/Number.h +14 -0
  810. package/ios/Options/Params/Number.mm +13 -0
  811. package/ios/Options/Params/NumberParser.h +13 -0
  812. package/ios/Options/Params/NumberParser.mm +10 -0
  813. package/ios/Options/Params/Param.h +16 -0
  814. package/ios/Options/Params/Param.mm +13 -0
  815. package/ios/Options/Params/Text.h +17 -0
  816. package/ios/Options/Params/Text.mm +17 -0
  817. package/ios/Options/Params/TextParser.h +17 -0
  818. package/ios/Options/Params/TextParser.mm +17 -0
  819. package/ios/Package.swift +58 -0
  820. package/ios/Public/ApexNavigation/ANNAppDelegate.h +66 -0
  821. package/ios/Public/ApexNavigation/ANNSceneDelegate.h +19 -0
  822. package/ios/Public/ApexNavigation/ApexNavigation.h +92 -0
  823. package/ios/Public/module.modulemap +8 -0
  824. package/ios/RECIPES.md +41 -0
  825. package/ios/React/ANNComponentType.h +22 -0
  826. package/ios/React/ANNComponentViewCreator.h +18 -0
  827. package/ios/React/ANNReactComponentRegistry.h +53 -0
  828. package/ios/React/ANNReactComponentRegistry.mm +153 -0
  829. package/ios/React/ANNReactView.h +104 -0
  830. package/ios/React/ANNReactView.mm +374 -0
  831. package/ios/React/ANNReactViewCreator.h +20 -0
  832. package/ios/React/ANNReactViewCreator.mm +42 -0
  833. package/ios/React/ANNSafeAreaViewComponentView.h +13 -0
  834. package/ios/React/ANNSafeAreaViewComponentView.mm +153 -0
  835. package/ios/React/ANNSurfaceHostingView.h +17 -0
  836. package/ios/React/ANNSurfaceHostingView.mm +68 -0
  837. package/ios/React/Slots/ANNSlotComponentView.h +10 -0
  838. package/ios/React/Slots/ANNSlotComponentView.mm +122 -0
  839. package/ios/React/Slots/ANNSlotContainers.h +34 -0
  840. package/ios/React/Slots/ANNSlotContainers.mm +39 -0
  841. package/ios/React/Slots/ANNSlotContentView.h +12 -0
  842. package/ios/React/Slots/ANNSlotContentView.mm +18 -0
  843. package/ios/React/Slots/ANNSlotHost.h +29 -0
  844. package/ios/React/Slots/ANNSlotHost.mm +59 -0
  845. package/ios/React/Slots/ANNSlotScreenView.h +38 -0
  846. package/ios/React/Slots/ANNSlotScreenView.mm +254 -0
  847. package/ios/TopBar/ANNBackButtonPresenter.h +35 -0
  848. package/ios/TopBar/ANNBackButtonPresenter.mm +187 -0
  849. package/ios/TopBar/ANNBarAppearance.h +53 -0
  850. package/ios/TopBar/ANNBarAppearance.mm +278 -0
  851. package/ios/TopBar/ANNBarBackgroundComponent.h +46 -0
  852. package/ios/TopBar/ANNBarBackgroundComponent.mm +163 -0
  853. package/ios/TopBar/ANNBarButtonComponentView.h +30 -0
  854. package/ios/TopBar/ANNBarButtonComponentView.mm +110 -0
  855. package/ios/TopBar/ANNBarButtons.h +65 -0
  856. package/ios/TopBar/ANNBarButtons.mm +1125 -0
  857. package/ios/TopBar/ANNBarComponentsWait.h +37 -0
  858. package/ios/TopBar/ANNBarComponentsWait.mm +116 -0
  859. package/ios/TopBar/ANNIconButtonImage.h +25 -0
  860. package/ios/TopBar/ANNIconButtonImage.mm +94 -0
  861. package/ios/TopBar/ANNLargeTitlePresenter.h +117 -0
  862. package/ios/TopBar/ANNLargeTitlePresenter.mm +402 -0
  863. package/ios/TopBar/ANNMainList.h +28 -0
  864. package/ios/TopBar/ANNMainList.mm +72 -0
  865. package/ios/TopBar/ANNScrollEdgeEffects.h +29 -0
  866. package/ios/TopBar/ANNScrollEdgeEffects.mm +122 -0
  867. package/ios/TopBar/ANNSearchPresenter.h +29 -0
  868. package/ios/TopBar/ANNSearchPresenter.mm +637 -0
  869. package/ios/TopBar/ANNSearchResultsViewController.h +16 -0
  870. package/ios/TopBar/ANNSearchResultsViewController.mm +56 -0
  871. package/ios/TopBar/ANNShowTextButton.h +22 -0
  872. package/ios/TopBar/ANNShowTextButton.mm +63 -0
  873. package/ios/TopBar/ANNTitleComponentView.h +37 -0
  874. package/ios/TopBar/ANNTitleComponentView.mm +86 -0
  875. package/ios/TopBar/ANNTitleGlassView.h +33 -0
  876. package/ios/TopBar/ANNTitleGlassView.mm +126 -0
  877. package/ios/TopBar/ANNTitleView.h +18 -0
  878. package/ios/TopBar/ANNTitleView.mm +63 -0
  879. package/ios/TopBar/ANNToolbarPresenter.h +26 -0
  880. package/ios/TopBar/ANNToolbarPresenter.mm +24 -0
  881. package/ios/TopBar/ANNTopBarPresenter.h +120 -0
  882. package/ios/TopBar/ANNTopBarPresenter.mm +1252 -0
  883. package/ios/TopBar/ANNUIBarButtonItem.h +16 -0
  884. package/ios/TopBar/ANNUIBarButtonItem.mm +5 -0
  885. package/ios/TurboModules/ANNTurboEventEmitter.h +31 -0
  886. package/ios/TurboModules/ANNTurboEventEmitter.mm +129 -0
  887. package/ios/TurboModules/ANNTurboModule.h +11 -0
  888. package/ios/TurboModules/ANNTurboModule.mm +626 -0
  889. package/ios/Utils/UIColor+ANNLuminance.h +13 -0
  890. package/ios/Utils/UIColor+ANNLuminance.mm +32 -0
  891. package/ios/Utils/UIView+Utils.h +12 -0
  892. package/ios/Utils/UIView+Utils.mm +21 -0
  893. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewComponentDescriptor.h +19 -0
  894. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewShadowNode.h +60 -0
  895. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewState.h +33 -0
  896. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotComponentDescriptor.h +22 -0
  897. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotShadowNode.h +87 -0
  898. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.h +101 -0
  899. package/lib/module/ARCHITECTURE.md +289 -0
  900. package/lib/module/adapters/NativeANNTurboEventEmitter.js +12 -0
  901. package/lib/module/adapters/NativeANNTurboEventEmitter.js.map +1 -0
  902. package/lib/module/adapters/NativeANNTurboModule.js +13 -0
  903. package/lib/module/adapters/NativeANNTurboModule.js.map +1 -0
  904. package/lib/module/api/app/AppRegistry.js +52 -0
  905. package/lib/module/api/app/AppRegistry.js.map +1 -0
  906. package/lib/module/api/app/activeApp.js +12 -0
  907. package/lib/module/api/app/activeApp.js.map +1 -0
  908. package/lib/module/api/app/createNavigation.js +365 -0
  909. package/lib/module/api/app/createNavigation.js.map +1 -0
  910. package/lib/module/api/app/roots.js +20 -0
  911. package/lib/module/api/app/roots.js.map +1 -0
  912. package/lib/module/api/app/splash.js +124 -0
  913. package/lib/module/api/app/splash.js.map +1 -0
  914. package/lib/module/api/app/startFailure.js +38 -0
  915. package/lib/module/api/app/startFailure.js.map +1 -0
  916. package/lib/module/api/arrangement/arrangementState.js +86 -0
  917. package/lib/module/api/arrangement/arrangementState.js.map +1 -0
  918. package/lib/module/api/commands/commands.js +375 -0
  919. package/lib/module/api/commands/commands.js.map +1 -0
  920. package/lib/module/api/commands/errors.js +94 -0
  921. package/lib/module/api/commands/errors.js.map +1 -0
  922. package/lib/module/api/commands/presentation.js +4 -0
  923. package/lib/module/api/commands/presentation.js.map +1 -0
  924. package/lib/module/api/commands/sideMenus.js +134 -0
  925. package/lib/module/api/commands/sideMenus.js.map +1 -0
  926. package/lib/module/api/commands/transitions.js +245 -0
  927. package/lib/module/api/commands/transitions.js.map +1 -0
  928. package/lib/module/api/context/appContext.js +22 -0
  929. package/lib/module/api/context/appContext.js.map +1 -0
  930. package/lib/module/api/events/navigationEvents.js +69 -0
  931. package/lib/module/api/events/navigationEvents.js.map +1 -0
  932. package/lib/module/api/events/screenLifecycle.js +30 -0
  933. package/lib/module/api/events/screenLifecycle.js.map +1 -0
  934. package/lib/module/api/events/tabPresses.js +32 -0
  935. package/lib/module/api/events/tabPresses.js.map +1 -0
  936. package/lib/module/api/hinge/hinge.js +73 -0
  937. package/lib/module/api/hinge/hinge.js.map +1 -0
  938. package/lib/module/api/hooks/appHooks.js +26 -0
  939. package/lib/module/api/hooks/appHooks.js.map +1 -0
  940. package/lib/module/api/hooks/screenHooks.js +250 -0
  941. package/lib/module/api/hooks/screenHooks.js.map +1 -0
  942. package/lib/module/api/hooks/useArrangement.js +24 -0
  943. package/lib/module/api/hooks/useArrangement.js.map +1 -0
  944. package/lib/module/api/hooks/useHinge.js +29 -0
  945. package/lib/module/api/hooks/useHinge.js.map +1 -0
  946. package/lib/module/api/hooks/useNavigation.js +117 -0
  947. package/lib/module/api/hooks/useNavigation.js.map +1 -0
  948. package/lib/module/api/hooks/usePendingLink.js +12 -0
  949. package/lib/module/api/hooks/usePendingLink.js.map +1 -0
  950. package/lib/module/api/hooks/usePreview.js +97 -0
  951. package/lib/module/api/hooks/usePreview.js.map +1 -0
  952. package/lib/module/api/hooks/useReservedRegions.js +24 -0
  953. package/lib/module/api/hooks/useReservedRegions.js.map +1 -0
  954. package/lib/module/api/hooks/useSafeAreaInsets.js +25 -0
  955. package/lib/module/api/hooks/useSafeAreaInsets.js.map +1 -0
  956. package/lib/module/api/index.js +26 -0
  957. package/lib/module/api/index.js.map +1 -0
  958. package/lib/module/api/layout/Root.js +121 -0
  959. package/lib/module/api/layout/Root.js.map +1 -0
  960. package/lib/module/api/layout/Screen.js +52 -0
  961. package/lib/module/api/layout/Screen.js.map +1 -0
  962. package/lib/module/api/layout/SideMenu.js +85 -0
  963. package/lib/module/api/layout/SideMenu.js.map +1 -0
  964. package/lib/module/api/layout/SplitView.js +137 -0
  965. package/lib/module/api/layout/SplitView.js.map +1 -0
  966. package/lib/module/api/layout/Stack.js +36 -0
  967. package/lib/module/api/layout/Stack.js.map +1 -0
  968. package/lib/module/api/layout/Tabs.js +326 -0
  969. package/lib/module/api/layout/Tabs.js.map +1 -0
  970. package/lib/module/api/layout/element.js +100 -0
  971. package/lib/module/api/layout/element.js.map +1 -0
  972. package/lib/module/api/linking/linkPaths.js +132 -0
  973. package/lib/module/api/linking/linkPaths.js.map +1 -0
  974. package/lib/module/api/linking/linking.js +244 -0
  975. package/lib/module/api/linking/linking.js.map +1 -0
  976. package/lib/module/api/linking/pendingLinks.js +34 -0
  977. package/lib/module/api/linking/pendingLinks.js.map +1 -0
  978. package/lib/module/api/linking/types.js +4 -0
  979. package/lib/module/api/linking/types.js.map +1 -0
  980. package/lib/module/api/navigation.js +105 -0
  981. package/lib/module/api/navigation.js.map +1 -0
  982. package/lib/module/api/options/OptionsChain.js +158 -0
  983. package/lib/module/api/options/OptionsChain.js.map +1 -0
  984. package/lib/module/api/options/ScreenOptions.js +83 -0
  985. package/lib/module/api/options/ScreenOptions.js.map +1 -0
  986. package/lib/module/api/options/buttons.js +4 -0
  987. package/lib/module/api/options/buttons.js.map +1 -0
  988. package/lib/module/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
  989. package/lib/module/api/safeArea/screenInsets.js +86 -0
  990. package/lib/module/api/safeArea/screenInsets.js.map +1 -0
  991. package/lib/module/api/safeArea/screenRegions.js +84 -0
  992. package/lib/module/api/safeArea/screenRegions.js.map +1 -0
  993. package/lib/module/api/screens/ScreenBoundary.js +44 -0
  994. package/lib/module/api/screens/ScreenBoundary.js.map +1 -0
  995. package/lib/module/api/screens/arrangement.js +63 -0
  996. package/lib/module/api/screens/arrangement.js.map +1 -0
  997. package/lib/module/api/screens/defineScreen.js +29 -0
  998. package/lib/module/api/screens/defineScreen.js.map +1 -0
  999. package/lib/module/api/screens/nativeScreenCalls.js +34 -0
  1000. package/lib/module/api/screens/nativeScreenCalls.js.map +1 -0
  1001. package/lib/module/api/screens/nativeScreens.js +43 -0
  1002. package/lib/module/api/screens/nativeScreens.js.map +1 -0
  1003. package/lib/module/api/screens/registerScreens.js +305 -0
  1004. package/lib/module/api/screens/registerScreens.js.map +1 -0
  1005. package/lib/module/api/slots/ANNSlotNativeComponent.ts +23 -0
  1006. package/lib/module/api/slots/SlotHost.js +92 -0
  1007. package/lib/module/api/slots/SlotHost.js.map +1 -0
  1008. package/lib/module/api/state/navigationState.js +98 -0
  1009. package/lib/module/api/state/navigationState.js.map +1 -0
  1010. package/lib/module/api/testIDs.js +14 -0
  1011. package/lib/module/api/testIDs.js.map +1 -0
  1012. package/lib/module/api/theme/theme.js +180 -0
  1013. package/lib/module/api/theme/theme.js.map +1 -0
  1014. package/lib/module/api/types.js +4 -0
  1015. package/lib/module/api/types.js.map +1 -0
  1016. package/lib/module/engine/backListeners.js +39 -0
  1017. package/lib/module/engine/backListeners.js.map +1 -0
  1018. package/lib/module/engine/buttons.js +105 -0
  1019. package/lib/module/engine/buttons.js.map +1 -0
  1020. package/lib/module/engine/commands.js +388 -0
  1021. package/lib/module/engine/commands.js.map +1 -0
  1022. package/lib/module/engine/events.js +30 -0
  1023. package/lib/module/engine/events.js.map +1 -0
  1024. package/lib/module/engine/ids.js +10 -0
  1025. package/lib/module/engine/ids.js.map +1 -0
  1026. package/lib/module/engine/launchState.js +34 -0
  1027. package/lib/module/engine/launchState.js.map +1 -0
  1028. package/lib/module/engine/layout.js +202 -0
  1029. package/lib/module/engine/layout.js.map +1 -0
  1030. package/lib/module/engine/mergeOptions.js +23 -0
  1031. package/lib/module/engine/mergeOptions.js.map +1 -0
  1032. package/lib/module/engine/native.js +45 -0
  1033. package/lib/module/engine/native.js.map +1 -0
  1034. package/lib/module/engine/nativeScreens.js +265 -0
  1035. package/lib/module/engine/nativeScreens.js.map +1 -0
  1036. package/lib/module/engine/options.js +170 -0
  1037. package/lib/module/engine/options.js.map +1 -0
  1038. package/lib/module/engine/places.js +178 -0
  1039. package/lib/module/engine/places.js.map +1 -0
  1040. package/lib/module/engine/props.js +44 -0
  1041. package/lib/module/engine/props.js.map +1 -0
  1042. package/lib/module/engine/reactMeasures.js +23 -0
  1043. package/lib/module/engine/reactMeasures.js.map +1 -0
  1044. package/lib/module/engine/rememberedOptions.js +118 -0
  1045. package/lib/module/engine/rememberedOptions.js.map +1 -0
  1046. package/lib/module/engine/screens.js +194 -0
  1047. package/lib/module/engine/screens.js.map +1 -0
  1048. package/lib/module/engine/slots.js +200 -0
  1049. package/lib/module/engine/slots.js.map +1 -0
  1050. package/lib/module/engine/tabs.js +79 -0
  1051. package/lib/module/engine/tabs.js.map +1 -0
  1052. package/lib/module/index.js +5 -0
  1053. package/lib/module/index.js.map +1 -0
  1054. package/lib/module/interfaces/ComponentEvents.js +2 -0
  1055. package/lib/module/interfaces/ComponentEvents.js.map +1 -0
  1056. package/lib/module/interfaces/Events.js +2 -0
  1057. package/lib/module/interfaces/Events.js.map +1 -0
  1058. package/lib/module/interfaces/Layout.js +4 -0
  1059. package/lib/module/interfaces/Layout.js.map +1 -0
  1060. package/lib/module/interfaces/Options.js +4 -0
  1061. package/lib/module/interfaces/Options.js.map +1 -0
  1062. package/lib/module/interfaces/options/animations.js +2 -0
  1063. package/lib/module/interfaces/options/animations.js.map +1 -0
  1064. package/lib/module/interfaces/options/bottomTabs.js +4 -0
  1065. package/lib/module/interfaces/options/bottomTabs.js.map +1 -0
  1066. package/lib/module/interfaces/options/buttons.js +4 -0
  1067. package/lib/module/interfaces/options/buttons.js.map +1 -0
  1068. package/lib/module/interfaces/options/common.js +4 -0
  1069. package/lib/module/interfaces/options/common.js.map +1 -0
  1070. package/lib/module/interfaces/options/modals.js +2 -0
  1071. package/lib/module/interfaces/options/modals.js.map +1 -0
  1072. package/lib/module/interfaces/options/preview.js +2 -0
  1073. package/lib/module/interfaces/options/preview.js.map +1 -0
  1074. package/lib/module/interfaces/options/sideMenu.js +2 -0
  1075. package/lib/module/interfaces/options/sideMenu.js.map +1 -0
  1076. package/lib/module/interfaces/options/splitView.js +2 -0
  1077. package/lib/module/interfaces/options/splitView.js.map +1 -0
  1078. package/lib/module/interfaces/options/stack.js +4 -0
  1079. package/lib/module/interfaces/options/stack.js.map +1 -0
  1080. package/lib/module/interfaces/options/system.js +4 -0
  1081. package/lib/module/interfaces/options/system.js.map +1 -0
  1082. package/lib/module/interfaces/options/toolbar.js +4 -0
  1083. package/lib/module/interfaces/options/toolbar.js.map +1 -0
  1084. package/lib/module/interfaces/options/topBar.js +4 -0
  1085. package/lib/module/interfaces/options/topBar.js.map +1 -0
  1086. package/lib/module/package.json +1 -0
  1087. package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts +14 -0
  1088. package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts.map +1 -0
  1089. package/lib/typescript/adapters/NativeANNTurboModule.d.ts +77 -0
  1090. package/lib/typescript/adapters/NativeANNTurboModule.d.ts.map +1 -0
  1091. package/lib/typescript/api/app/AppRegistry.d.ts +14 -0
  1092. package/lib/typescript/api/app/AppRegistry.d.ts.map +1 -0
  1093. package/lib/typescript/api/app/activeApp.d.ts +12 -0
  1094. package/lib/typescript/api/app/activeApp.d.ts.map +1 -0
  1095. package/lib/typescript/api/app/createNavigation.d.ts +182 -0
  1096. package/lib/typescript/api/app/createNavigation.d.ts.map +1 -0
  1097. package/lib/typescript/api/app/roots.d.ts +15 -0
  1098. package/lib/typescript/api/app/roots.d.ts.map +1 -0
  1099. package/lib/typescript/api/app/splash.d.ts +81 -0
  1100. package/lib/typescript/api/app/splash.d.ts.map +1 -0
  1101. package/lib/typescript/api/app/startFailure.d.ts +15 -0
  1102. package/lib/typescript/api/app/startFailure.d.ts.map +1 -0
  1103. package/lib/typescript/api/arrangement/arrangementState.d.ts +21 -0
  1104. package/lib/typescript/api/arrangement/arrangementState.d.ts.map +1 -0
  1105. package/lib/typescript/api/commands/commands.d.ts +57 -0
  1106. package/lib/typescript/api/commands/commands.d.ts.map +1 -0
  1107. package/lib/typescript/api/commands/errors.d.ts +24 -0
  1108. package/lib/typescript/api/commands/errors.d.ts.map +1 -0
  1109. package/lib/typescript/api/commands/presentation.d.ts +69 -0
  1110. package/lib/typescript/api/commands/presentation.d.ts.map +1 -0
  1111. package/lib/typescript/api/commands/sideMenus.d.ts +14 -0
  1112. package/lib/typescript/api/commands/sideMenus.d.ts.map +1 -0
  1113. package/lib/typescript/api/commands/transitions.d.ts +33 -0
  1114. package/lib/typescript/api/commands/transitions.d.ts.map +1 -0
  1115. package/lib/typescript/api/context/appContext.d.ts +4 -0
  1116. package/lib/typescript/api/context/appContext.d.ts.map +1 -0
  1117. package/lib/typescript/api/events/navigationEvents.d.ts +70 -0
  1118. package/lib/typescript/api/events/navigationEvents.d.ts.map +1 -0
  1119. package/lib/typescript/api/events/screenLifecycle.d.ts +5 -0
  1120. package/lib/typescript/api/events/screenLifecycle.d.ts.map +1 -0
  1121. package/lib/typescript/api/events/tabPresses.d.ts +5 -0
  1122. package/lib/typescript/api/events/tabPresses.d.ts.map +1 -0
  1123. package/lib/typescript/api/hinge/hinge.d.ts +21 -0
  1124. package/lib/typescript/api/hinge/hinge.d.ts.map +1 -0
  1125. package/lib/typescript/api/hooks/appHooks.d.ts +15 -0
  1126. package/lib/typescript/api/hooks/appHooks.d.ts.map +1 -0
  1127. package/lib/typescript/api/hooks/screenHooks.d.ts +74 -0
  1128. package/lib/typescript/api/hooks/screenHooks.d.ts.map +1 -0
  1129. package/lib/typescript/api/hooks/useArrangement.d.ts +13 -0
  1130. package/lib/typescript/api/hooks/useArrangement.d.ts.map +1 -0
  1131. package/lib/typescript/api/hooks/useHinge.d.ts +16 -0
  1132. package/lib/typescript/api/hooks/useHinge.d.ts.map +1 -0
  1133. package/lib/typescript/api/hooks/useNavigation.d.ts +108 -0
  1134. package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -0
  1135. package/lib/typescript/api/hooks/usePendingLink.d.ts +7 -0
  1136. package/lib/typescript/api/hooks/usePendingLink.d.ts.map +1 -0
  1137. package/lib/typescript/api/hooks/usePreview.d.ts +29 -0
  1138. package/lib/typescript/api/hooks/usePreview.d.ts.map +1 -0
  1139. package/lib/typescript/api/hooks/useReservedRegions.d.ts +13 -0
  1140. package/lib/typescript/api/hooks/useReservedRegions.d.ts.map +1 -0
  1141. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts +14 -0
  1142. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts.map +1 -0
  1143. package/lib/typescript/api/index.d.ts +60 -0
  1144. package/lib/typescript/api/index.d.ts.map +1 -0
  1145. package/lib/typescript/api/layout/Root.d.ts +47 -0
  1146. package/lib/typescript/api/layout/Root.d.ts.map +1 -0
  1147. package/lib/typescript/api/layout/Screen.d.ts +32 -0
  1148. package/lib/typescript/api/layout/Screen.d.ts.map +1 -0
  1149. package/lib/typescript/api/layout/SideMenu.d.ts +33 -0
  1150. package/lib/typescript/api/layout/SideMenu.d.ts.map +1 -0
  1151. package/lib/typescript/api/layout/SplitView.d.ts +48 -0
  1152. package/lib/typescript/api/layout/SplitView.d.ts.map +1 -0
  1153. package/lib/typescript/api/layout/Stack.d.ts +21 -0
  1154. package/lib/typescript/api/layout/Stack.d.ts.map +1 -0
  1155. package/lib/typescript/api/layout/Tabs.d.ts +120 -0
  1156. package/lib/typescript/api/layout/Tabs.d.ts.map +1 -0
  1157. package/lib/typescript/api/layout/element.d.ts +52 -0
  1158. package/lib/typescript/api/layout/element.d.ts.map +1 -0
  1159. package/lib/typescript/api/linking/linkPaths.d.ts +31 -0
  1160. package/lib/typescript/api/linking/linkPaths.d.ts.map +1 -0
  1161. package/lib/typescript/api/linking/linking.d.ts +37 -0
  1162. package/lib/typescript/api/linking/linking.d.ts.map +1 -0
  1163. package/lib/typescript/api/linking/pendingLinks.d.ts +8 -0
  1164. package/lib/typescript/api/linking/pendingLinks.d.ts.map +1 -0
  1165. package/lib/typescript/api/linking/types.d.ts +105 -0
  1166. package/lib/typescript/api/linking/types.d.ts.map +1 -0
  1167. package/lib/typescript/api/navigation.d.ts +115 -0
  1168. package/lib/typescript/api/navigation.d.ts.map +1 -0
  1169. package/lib/typescript/api/options/OptionsChain.d.ts +47 -0
  1170. package/lib/typescript/api/options/OptionsChain.d.ts.map +1 -0
  1171. package/lib/typescript/api/options/ScreenOptions.d.ts +32 -0
  1172. package/lib/typescript/api/options/ScreenOptions.d.ts.map +1 -0
  1173. package/lib/typescript/api/options/buttons.d.ts +35 -0
  1174. package/lib/typescript/api/options/buttons.d.ts.map +1 -0
  1175. package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts +20 -0
  1176. package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts.map +1 -0
  1177. package/lib/typescript/api/safeArea/screenInsets.d.ts +20 -0
  1178. package/lib/typescript/api/safeArea/screenInsets.d.ts.map +1 -0
  1179. package/lib/typescript/api/safeArea/screenRegions.d.ts +24 -0
  1180. package/lib/typescript/api/safeArea/screenRegions.d.ts.map +1 -0
  1181. package/lib/typescript/api/screens/ScreenBoundary.d.ts +34 -0
  1182. package/lib/typescript/api/screens/ScreenBoundary.d.ts.map +1 -0
  1183. package/lib/typescript/api/screens/arrangement.d.ts +70 -0
  1184. package/lib/typescript/api/screens/arrangement.d.ts.map +1 -0
  1185. package/lib/typescript/api/screens/defineScreen.d.ts +41 -0
  1186. package/lib/typescript/api/screens/defineScreen.d.ts.map +1 -0
  1187. package/lib/typescript/api/screens/nativeScreenCalls.d.ts +3 -0
  1188. package/lib/typescript/api/screens/nativeScreenCalls.d.ts.map +1 -0
  1189. package/lib/typescript/api/screens/nativeScreens.d.ts +47 -0
  1190. package/lib/typescript/api/screens/nativeScreens.d.ts.map +1 -0
  1191. package/lib/typescript/api/screens/registerScreens.d.ts +61 -0
  1192. package/lib/typescript/api/screens/registerScreens.d.ts.map +1 -0
  1193. package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts +15 -0
  1194. package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts.map +1 -0
  1195. package/lib/typescript/api/slots/SlotHost.d.ts +8 -0
  1196. package/lib/typescript/api/slots/SlotHost.d.ts.map +1 -0
  1197. package/lib/typescript/api/state/navigationState.d.ts +26 -0
  1198. package/lib/typescript/api/state/navigationState.d.ts.map +1 -0
  1199. package/lib/typescript/api/testIDs.d.ts +12 -0
  1200. package/lib/typescript/api/testIDs.d.ts.map +1 -0
  1201. package/lib/typescript/api/theme/theme.d.ts +70 -0
  1202. package/lib/typescript/api/theme/theme.d.ts.map +1 -0
  1203. package/lib/typescript/api/types.d.ts +64 -0
  1204. package/lib/typescript/api/types.d.ts.map +1 -0
  1205. package/lib/typescript/engine/backListeners.d.ts +8 -0
  1206. package/lib/typescript/engine/backListeners.d.ts.map +1 -0
  1207. package/lib/typescript/engine/buttons.d.ts +11 -0
  1208. package/lib/typescript/engine/buttons.d.ts.map +1 -0
  1209. package/lib/typescript/engine/commands.d.ts +38 -0
  1210. package/lib/typescript/engine/commands.d.ts.map +1 -0
  1211. package/lib/typescript/engine/events.d.ts +17 -0
  1212. package/lib/typescript/engine/events.d.ts.map +1 -0
  1213. package/lib/typescript/engine/ids.d.ts +3 -0
  1214. package/lib/typescript/engine/ids.d.ts.map +1 -0
  1215. package/lib/typescript/engine/launchState.d.ts +25 -0
  1216. package/lib/typescript/engine/launchState.d.ts.map +1 -0
  1217. package/lib/typescript/engine/layout.d.ts +32 -0
  1218. package/lib/typescript/engine/layout.d.ts.map +1 -0
  1219. package/lib/typescript/engine/mergeOptions.d.ts +6 -0
  1220. package/lib/typescript/engine/mergeOptions.d.ts.map +1 -0
  1221. package/lib/typescript/engine/native.d.ts +22 -0
  1222. package/lib/typescript/engine/native.d.ts.map +1 -0
  1223. package/lib/typescript/engine/nativeScreens.d.ts +49 -0
  1224. package/lib/typescript/engine/nativeScreens.d.ts.map +1 -0
  1225. package/lib/typescript/engine/options.d.ts +12 -0
  1226. package/lib/typescript/engine/options.d.ts.map +1 -0
  1227. package/lib/typescript/engine/places.d.ts +57 -0
  1228. package/lib/typescript/engine/places.d.ts.map +1 -0
  1229. package/lib/typescript/engine/props.d.ts +10 -0
  1230. package/lib/typescript/engine/props.d.ts.map +1 -0
  1231. package/lib/typescript/engine/reactMeasures.d.ts +3 -0
  1232. package/lib/typescript/engine/reactMeasures.d.ts.map +1 -0
  1233. package/lib/typescript/engine/rememberedOptions.d.ts +28 -0
  1234. package/lib/typescript/engine/rememberedOptions.d.ts.map +1 -0
  1235. package/lib/typescript/engine/screens.d.ts +90 -0
  1236. package/lib/typescript/engine/screens.d.ts.map +1 -0
  1237. package/lib/typescript/engine/slots.d.ts +71 -0
  1238. package/lib/typescript/engine/slots.d.ts.map +1 -0
  1239. package/lib/typescript/engine/tabs.d.ts +24 -0
  1240. package/lib/typescript/engine/tabs.d.ts.map +1 -0
  1241. package/lib/typescript/index.d.ts +3 -0
  1242. package/lib/typescript/index.d.ts.map +1 -0
  1243. package/lib/typescript/interfaces/ComponentEvents.d.ts +189 -0
  1244. package/lib/typescript/interfaces/ComponentEvents.d.ts.map +1 -0
  1245. package/lib/typescript/interfaces/Events.d.ts +199 -0
  1246. package/lib/typescript/interfaces/Events.d.ts.map +1 -0
  1247. package/lib/typescript/interfaces/Layout.d.ts +150 -0
  1248. package/lib/typescript/interfaces/Layout.d.ts.map +1 -0
  1249. package/lib/typescript/interfaces/Options.d.ts +93 -0
  1250. package/lib/typescript/interfaces/Options.d.ts.map +1 -0
  1251. package/lib/typescript/interfaces/options/animations.d.ts +452 -0
  1252. package/lib/typescript/interfaces/options/animations.d.ts.map +1 -0
  1253. package/lib/typescript/interfaces/options/bottomTabs.d.ts +462 -0
  1254. package/lib/typescript/interfaces/options/bottomTabs.d.ts.map +1 -0
  1255. package/lib/typescript/interfaces/options/buttons.d.ts +331 -0
  1256. package/lib/typescript/interfaces/options/buttons.d.ts.map +1 -0
  1257. package/lib/typescript/interfaces/options/common.d.ts +51 -0
  1258. package/lib/typescript/interfaces/options/common.d.ts.map +1 -0
  1259. package/lib/typescript/interfaces/options/modals.d.ts +202 -0
  1260. package/lib/typescript/interfaces/options/modals.d.ts.map +1 -0
  1261. package/lib/typescript/interfaces/options/preview.d.ts +40 -0
  1262. package/lib/typescript/interfaces/options/preview.d.ts.map +1 -0
  1263. package/lib/typescript/interfaces/options/sideMenu.d.ts +130 -0
  1264. package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -0
  1265. package/lib/typescript/interfaces/options/splitView.d.ts +118 -0
  1266. package/lib/typescript/interfaces/options/splitView.d.ts.map +1 -0
  1267. package/lib/typescript/interfaces/options/stack.d.ts +109 -0
  1268. package/lib/typescript/interfaces/options/stack.d.ts.map +1 -0
  1269. package/lib/typescript/interfaces/options/system.d.ts +238 -0
  1270. package/lib/typescript/interfaces/options/system.d.ts.map +1 -0
  1271. package/lib/typescript/interfaces/options/toolbar.d.ts +45 -0
  1272. package/lib/typescript/interfaces/options/toolbar.d.ts.map +1 -0
  1273. package/lib/typescript/interfaces/options/topBar.d.ts +804 -0
  1274. package/lib/typescript/interfaces/options/topBar.d.ts.map +1 -0
  1275. package/lib/typescript/package.json +1 -0
  1276. package/package.json +189 -4
  1277. package/react-native.config.js +22 -0
  1278. package/src/ARCHITECTURE.md +289 -0
  1279. package/src/adapters/NativeANNTurboEventEmitter.ts +15 -0
  1280. package/src/adapters/NativeANNTurboModule.ts +100 -0
  1281. package/src/api/app/AppRegistry.ts +57 -0
  1282. package/src/api/app/activeApp.ts +20 -0
  1283. package/src/api/app/createNavigation.ts +566 -0
  1284. package/src/api/app/roots.ts +40 -0
  1285. package/src/api/app/splash.ts +154 -0
  1286. package/src/api/app/startFailure.tsx +39 -0
  1287. package/src/api/arrangement/arrangementState.ts +98 -0
  1288. package/src/api/commands/commands.ts +371 -0
  1289. package/src/api/commands/errors.ts +99 -0
  1290. package/src/api/commands/presentation.ts +78 -0
  1291. package/src/api/commands/sideMenus.ts +122 -0
  1292. package/src/api/commands/transitions.ts +133 -0
  1293. package/src/api/context/appContext.ts +23 -0
  1294. package/src/api/events/navigationEvents.ts +175 -0
  1295. package/src/api/events/screenLifecycle.ts +27 -0
  1296. package/src/api/events/tabPresses.ts +35 -0
  1297. package/src/api/hinge/hinge.ts +84 -0
  1298. package/src/api/hooks/appHooks.ts +37 -0
  1299. package/src/api/hooks/screenHooks.ts +272 -0
  1300. package/src/api/hooks/useArrangement.ts +26 -0
  1301. package/src/api/hooks/useHinge.ts +26 -0
  1302. package/src/api/hooks/useNavigation.ts +267 -0
  1303. package/src/api/hooks/usePendingLink.ts +11 -0
  1304. package/src/api/hooks/usePreview.ts +111 -0
  1305. package/src/api/hooks/useReservedRegions.ts +26 -0
  1306. package/src/api/hooks/useSafeAreaInsets.ts +23 -0
  1307. package/src/api/index.ts +139 -0
  1308. package/src/api/layout/Root.ts +113 -0
  1309. package/src/api/layout/Screen.ts +55 -0
  1310. package/src/api/layout/SideMenu.ts +87 -0
  1311. package/src/api/layout/SplitView.ts +146 -0
  1312. package/src/api/layout/Stack.ts +48 -0
  1313. package/src/api/layout/Tabs.ts +339 -0
  1314. package/src/api/layout/element.ts +114 -0
  1315. package/src/api/linking/linkPaths.ts +159 -0
  1316. package/src/api/linking/linking.ts +242 -0
  1317. package/src/api/linking/pendingLinks.ts +37 -0
  1318. package/src/api/linking/types.ts +130 -0
  1319. package/src/api/navigation.ts +269 -0
  1320. package/src/api/options/OptionsChain.ts +142 -0
  1321. package/src/api/options/ScreenOptions.ts +81 -0
  1322. package/src/api/options/buttons.ts +43 -0
  1323. package/src/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
  1324. package/src/api/safeArea/screenInsets.ts +86 -0
  1325. package/src/api/safeArea/screenRegions.ts +99 -0
  1326. package/src/api/screens/ScreenBoundary.tsx +52 -0
  1327. package/src/api/screens/arrangement.ts +106 -0
  1328. package/src/api/screens/defineScreen.ts +57 -0
  1329. package/src/api/screens/nativeScreenCalls.ts +59 -0
  1330. package/src/api/screens/nativeScreens.ts +58 -0
  1331. package/src/api/screens/registerScreens.tsx +364 -0
  1332. package/src/api/slots/ANNSlotNativeComponent.ts +23 -0
  1333. package/src/api/slots/SlotHost.tsx +64 -0
  1334. package/src/api/state/navigationState.ts +95 -0
  1335. package/src/api/testIDs.ts +11 -0
  1336. package/src/api/theme/theme.ts +184 -0
  1337. package/src/api/types.ts +95 -0
  1338. package/src/engine/backListeners.ts +36 -0
  1339. package/src/engine/buttons.ts +91 -0
  1340. package/src/engine/commands.ts +469 -0
  1341. package/src/engine/events.ts +24 -0
  1342. package/src/engine/ids.ts +7 -0
  1343. package/src/engine/launchState.ts +35 -0
  1344. package/src/engine/layout.ts +247 -0
  1345. package/src/engine/mergeOptions.ts +20 -0
  1346. package/src/engine/native.ts +51 -0
  1347. package/src/engine/nativeScreens.ts +263 -0
  1348. package/src/engine/options.ts +165 -0
  1349. package/src/engine/places.ts +205 -0
  1350. package/src/engine/props.ts +45 -0
  1351. package/src/engine/reactMeasures.ts +24 -0
  1352. package/src/engine/rememberedOptions.ts +111 -0
  1353. package/src/engine/screens.tsx +239 -0
  1354. package/src/engine/slots.ts +191 -0
  1355. package/src/engine/tabs.ts +95 -0
  1356. package/src/index.ts +3 -0
  1357. package/src/interfaces/ComponentEvents.ts +214 -0
  1358. package/src/interfaces/Events.ts +227 -0
  1359. package/src/interfaces/Layout.ts +161 -0
  1360. package/src/interfaces/Options.ts +175 -0
  1361. package/src/interfaces/options/animations.ts +480 -0
  1362. package/src/interfaces/options/bottomTabs.ts +481 -0
  1363. package/src/interfaces/options/buttons.ts +364 -0
  1364. package/src/interfaces/options/common.ts +76 -0
  1365. package/src/interfaces/options/modals.ts +217 -0
  1366. package/src/interfaces/options/preview.ts +40 -0
  1367. package/src/interfaces/options/sideMenu.ts +132 -0
  1368. package/src/interfaces/options/splitView.ts +127 -0
  1369. package/src/interfaces/options/stack.ts +110 -0
  1370. package/src/interfaces/options/system.ts +252 -0
  1371. package/src/interfaces/options/toolbar.ts +47 -0
  1372. package/src/interfaces/options/topBar.ts +828 -0
@@ -0,0 +1,1300 @@
1
+ #import "ANNStackQueue.h"
2
+ #import "ANNAnimationRules.h"
3
+ #import "ANNAppearanceDispatcher.h"
4
+ #import "ANNAssert.h"
5
+ #import "ANNBarComponentsWait.h"
6
+ #import "ANNCommandRunner.h"
7
+ #import "ANNComponentViewController.h"
8
+ #import "ANNErrorTexts.h"
9
+ #import "ANNReloadCoordinator.h"
10
+ #import "ANNRenderWait.h"
11
+ #import "ANNTransitionPlan.h"
12
+ #import "UIViewController+LayoutProtocol.h"
13
+ #import <QuartzCore/QuartzCore.h>
14
+ #import <React/RCTLog.h>
15
+
16
+ // How long the new top of a `setStackRoot` waits for its first content when `waitForRender` is not set.
17
+ static const NSTimeInterval ANNStackRootRenderLimit = 0.5;
18
+
19
+ // The limits of the bar components of a push: title and background 1 s, buttons 0.5 s, together from the wait's start.
20
+ static const ANNBarWaitLimits ANNPushBarLimits = {1, 0.5};
21
+
22
+ // The bar components of a `setStackRoot` within its 0.5 s.
23
+ static const ANNBarWaitLimits ANNStackRootBarLimits = {0.5, 0.5};
24
+
25
+ typedef NS_ENUM(NSInteger, ANNStackOperationKind) {
26
+ ANNStackOperationPush,
27
+ ANNStackOperationCut,
28
+ ANNStackOperationReplace,
29
+ ANNStackOperationNone,
30
+ ANNStackOperationSwipe,
31
+ };
32
+
33
+ // One command or action of the user in the queue: what it moves, its answer, and how far it got.
34
+ @interface ANNStackOperation : NSObject
35
+ @property(nonatomic) ANNStackOperationKind kind;
36
+ // The JavaScript it belongs to: a step of another one does nothing (reload).
37
+ @property(nonatomic) NSUInteger generation;
38
+ @property(nonatomic, strong, nullable) ANNCommandAnswer *answer;
39
+ @property(nonatomic, strong, nullable) id value;
40
+ @property(nonatomic, copy) NSString *what;
41
+ @property(nonatomic, copy, nullable) NSString *componentId;
42
+ // The node the command came from; a completed swipe that took it (or the target) away marks `sourceGone`.
43
+ @property(nonatomic, weak, nullable) UIViewController *source;
44
+ @property(nonatomic) BOOL sourceGone;
45
+ // push
46
+ @property(nonatomic, strong, nullable) UIViewController *node;
47
+ // cut, swipe: the entry that stays on top
48
+ @property(nonatomic, strong, nullable) UIViewController *target;
49
+ @property(nonatomic) BOOL silent;
50
+ // replace
51
+ @property(nonatomic, copy, nullable) NSArray<UIViewController *> *nodes;
52
+ // replace, push: a push with `animated` NO has no animation, with `waits` NO no wait before its transition.
53
+ @property(nonatomic) BOOL animated;
54
+ @property(nonatomic) BOOL waits;
55
+ @property(nonatomic) BOOL atOnce;
56
+ // When the replace's own wait for its new top started (`waitForRender` unset): the custom transition's wait takes what
57
+ // is left of the 0.5 s. 0 when it didn't wait so.
58
+ @property(nonatomic) CFTimeInterval waitStarted;
59
+ @property(nonatomic, copy, nullable) dispatch_block_t completion;
60
+ @property(nonatomic, copy, nullable) ANNTransitionRejectionBlock rejection;
61
+ // The run.
62
+ @property(nonatomic) BOOL done;
63
+ // The operation's render wait: its content, then or together with its bar components.
64
+ @property(nonatomic, strong, nullable) ANNRenderWait *wait;
65
+ @property(nonatomic, readonly) BOOL waiting;
66
+ // The entry that waits in the stack's view while the wait runs.
67
+ @property(nonatomic, strong, nullable) UIViewController *waited;
68
+ @property(nonatomic) BOOL parked;
69
+ @property(nonatomic, copy, nullable) NSArray<UIViewController *> *driven;
70
+ // The entries the transition takes away, top first; the entry a push covers.
71
+ @property(nonatomic, copy, nullable) NSArray<UIViewController *> *leaving;
72
+ @property(nonatomic, strong, nullable) UIViewController *covered;
73
+ @end
74
+
75
+ @implementation ANNStackOperation
76
+
77
+ - (BOOL)isCurrent {
78
+ return _generation == ANNReloadCoordinator.generation;
79
+ }
80
+
81
+ // The operation waits for a screen to render (either phase of its wait).
82
+ - (BOOL)waiting {
83
+ return _wait.isWaiting;
84
+ }
85
+
86
+ @end
87
+
88
+ static NSString *ANNIdOf(UIViewController *node) {
89
+ return node.layoutInfo.componentId ?: @"";
90
+ }
91
+
92
+ UIViewController *ANNStackOptionsScreen(UIViewController *entry) {
93
+ if ([entry respondsToSelector:@selector(optionsScreen)]) {
94
+ UIViewController *screen = [(id<ANNLayoutProtocol>)entry optionsScreen];
95
+ if (screen) {
96
+ return screen;
97
+ }
98
+ }
99
+ return entry;
100
+ }
101
+
102
+ NSString *ANNStackAnswerIdOf(UIViewController *entry, ANNStackAnswerCommand command) {
103
+ switch (command) {
104
+ case ANNStackAnswerCommandPush:
105
+ return ANNIdOf(entry);
106
+ case ANNStackAnswerCommandReplace:
107
+ case ANNStackAnswerCommandPop:
108
+ case ANNStackAnswerCommandPopToRoot:
109
+ case ANNStackAnswerCommandKey:
110
+ case ANNStackAnswerCommandShowInColumn:
111
+ return ANNIdOf(ANNStackOptionsScreen(entry));
112
+ }
113
+ return ANNIdOf(ANNStackOptionsScreen(entry));
114
+ }
115
+
116
+ NSArray<ANNComponentViewController *> *ANNStackScreensOfEntry(UIViewController *entry) {
117
+ if ([entry isKindOfClass:ANNComponentViewController.class]) {
118
+ return @[ (ANNComponentViewController *)entry ];
119
+ }
120
+ NSMutableArray<ANNComponentViewController *> *screens = [NSMutableArray new];
121
+ for (UIViewController *child in entry.layoutChildren) {
122
+ if ([child isKindOfClass:ANNComponentViewController.class]) {
123
+ [screens addObject:(ANNComponentViewController *)child];
124
+ }
125
+ }
126
+ return screens;
127
+ }
128
+
129
+ BOOL ANNStackEntryIsReady(UIViewController *entry) {
130
+ for (ANNComponentViewController *screen in ANNStackScreensOfEntry(entry)) {
131
+ if (screen.reactView && !screen.reactView.isReady) {
132
+ return NO;
133
+ }
134
+ }
135
+ return YES;
136
+ }
137
+
138
+ // A screen renders once by itself; another entry (a pair) renders only while its view never loaded.
139
+ static void ANNRenderIfNeeded(UIViewController *entry) {
140
+ if ([entry isKindOfClass:ANNComponentViewController.class] || !entry.isViewLoaded) {
141
+ [entry render];
142
+ }
143
+ }
144
+
145
+ // The node an operation shows renders right before its transition. A caller that waited itself (`waits` NO: a
146
+ // preview, `showInColumn`, the split view's replace) rendered it already: only a screen, which renders once, is asked
147
+ // again; a pair's `render` would start its count again.
148
+ static void ANNRenderBeforeTransition(UIViewController *node, BOOL waits) {
149
+ if (waits || [node isKindOfClass:ANNComponentViewController.class]) {
150
+ [node render];
151
+ }
152
+ }
153
+
154
+ static NSArray<UIViewController *> *ANNTopFirst(NSArray<UIViewController *> *entries) {
155
+ return entries.reverseObjectEnumerator.allObjects;
156
+ }
157
+
158
+ @implementation ANNStackQueue {
159
+ __weak id<ANNStackDisplay> _display;
160
+ NSMutableArray<UIViewController *> *_entries;
161
+ NSMutableArray<UIViewController *> *_shown;
162
+ NSMutableArray<ANNStackOperation *> *_pending;
163
+ // The operation that waits or runs its transition (iOS runs one at a time).
164
+ ANNStackOperation *_current;
165
+ BOOL _running;
166
+ BOOL _runScheduled;
167
+ // UIKit runs a transition the queue didn't start: the next operation waits for its end.
168
+ BOOL _waitingForUIKit;
169
+ BOOL _destroyed;
170
+ }
171
+
172
+ - (instancetype)initWithDisplay:(id<ANNStackDisplay>)display {
173
+ if (self = [super init]) {
174
+ _display = display;
175
+ _entries = [NSMutableArray new];
176
+ _shown = [NSMutableArray new];
177
+ _pending = [NSMutableArray new];
178
+ }
179
+ return self;
180
+ }
181
+
182
+ #pragma mark - The lists
183
+
184
+ - (NSArray<UIViewController *> *)entries {
185
+ return [_entries copy];
186
+ }
187
+
188
+ - (NSArray<UIViewController *> *)shown {
189
+ return [_shown copy];
190
+ }
191
+
192
+ - (BOOL)isAtRest {
193
+ return !_current && _pending.count == 0 && !_waitingForUIKit && !_destroyed &&
194
+ ![_display stackRunningTransition];
195
+ }
196
+
197
+ - (NSArray<UIViewController *> *)heldNodes {
198
+ NSMutableOrderedSet<UIViewController *> *nodes =
199
+ [NSMutableOrderedSet orderedSetWithArray:_shown];
200
+ [nodes addObjectsFromArray:_entries];
201
+ NSMutableArray<ANNStackOperation *> *operations = [_pending mutableCopy];
202
+ if (_current) {
203
+ [operations insertObject:_current atIndex:0];
204
+ }
205
+ for (ANNStackOperation *operation in operations) {
206
+ if (operation.node) {
207
+ [nodes addObject:operation.node];
208
+ }
209
+ if (operation.nodes) {
210
+ [nodes addObjectsFromArray:operation.nodes];
211
+ }
212
+ if (operation.leaving) {
213
+ [nodes addObjectsFromArray:operation.leaving];
214
+ }
215
+ }
216
+ return nodes.array;
217
+ }
218
+
219
+ - (void)setInitialEntries:(NSArray<UIViewController *> *)entries {
220
+ UIViewController *stack = [_display stackViewController];
221
+ for (UIViewController *entry in entries) {
222
+ [entry setLayoutParentFallback:stack];
223
+ }
224
+ [_entries setArray:entries];
225
+ [_shown setArray:entries];
226
+ }
227
+
228
+ #pragma mark - Accepting an operation (`entries` changes now)
229
+
230
+ - (ANNStackOperation *)operationOfKind:(ANNStackOperationKind)kind
231
+ answer:(ANNCommandAnswer *)answer
232
+ what:(NSString *)what
233
+ componentId:(NSString *)componentId
234
+ source:(UIViewController *)source {
235
+ ANNStackOperation *operation = [ANNStackOperation new];
236
+ operation.kind = kind;
237
+ operation.answer = answer;
238
+ operation.generation = answer ? answer.generation : ANNReloadCoordinator.generation;
239
+ operation.what = what ?: @"go back";
240
+ operation.componentId = componentId;
241
+ operation.source = source;
242
+ return operation;
243
+ }
244
+
245
+ - (void)push:(UIViewController *)node
246
+ answer:(ANNCommandAnswer *)answer
247
+ what:(NSString *)what
248
+ componentId:(NSString *)componentId
249
+ source:(UIViewController *)source {
250
+ [self push:node
251
+ answer:answer
252
+ what:what
253
+ componentId:componentId
254
+ source:source
255
+ animated:YES
256
+ waits:YES];
257
+ }
258
+
259
+ - (void)push:(UIViewController *)node
260
+ answer:(ANNCommandAnswer *)answer
261
+ what:(NSString *)what
262
+ componentId:(NSString *)componentId
263
+ source:(UIViewController *)source
264
+ animated:(BOOL)animated
265
+ waits:(BOOL)waits {
266
+ ANNAssertMainQueue();
267
+ ANNStackOperation *operation = [self operationOfKind:ANNStackOperationPush
268
+ answer:answer
269
+ what:what
270
+ componentId:componentId
271
+ source:source];
272
+ operation.node = node;
273
+ operation.value = ANNStackAnswerIdOf(node, ANNStackAnswerCommandPush);
274
+ operation.animated = animated;
275
+ operation.waits = waits;
276
+ if (_destroyed) {
277
+ [self reject:operation text:[ANNErrorTexts screenNotShown:componentId]];
278
+ [node destroy];
279
+ return;
280
+ }
281
+ // A push over a waiting `setStackRoot` completes it now: its screens lie under the push.
282
+ [self completeWaitingReplace];
283
+ [node setLayoutParentFallback:[_display stackViewController]];
284
+ [_entries addObject:node];
285
+ [_pending addObject:operation];
286
+ [self runNext];
287
+ }
288
+
289
+ - (void)cutTo:(UIViewController *)target
290
+ answer:(ANNCommandAnswer *)answer
291
+ value:(id)value
292
+ what:(NSString *)what
293
+ componentId:(NSString *)componentId
294
+ source:(UIViewController *)source
295
+ silent:(BOOL)silent {
296
+ ANNAssertMainQueue();
297
+ ANNStackOperation *operation = [self operationOfKind:ANNStackOperationCut
298
+ answer:answer
299
+ what:what
300
+ componentId:componentId
301
+ source:source];
302
+ operation.target = target;
303
+ operation.value = value;
304
+ operation.silent = silent;
305
+ if (_destroyed) {
306
+ [self reject:operation text:[ANNErrorTexts screenNotShown:componentId ?: ANNIdOf(target)]];
307
+ return;
308
+ }
309
+ // A cut while a `setStackRoot` waits completes it first and runs on its list: a back never waits for a render that
310
+ // may take long.
311
+ [self completeWaitingReplace];
312
+ NSUInteger index = [_entries indexOfObjectIdenticalTo:target];
313
+ if (index == NSNotFound) {
314
+ [self reject:operation text:[ANNErrorTexts screenNotShown:componentId ?: ANNIdOf(target)]];
315
+ return;
316
+ }
317
+ NSRange above = NSMakeRange(index + 1, _entries.count - index - 1);
318
+ NSArray<UIViewController *> *removed = [_entries subarrayWithRange:above];
319
+ [_entries removeObjectsInRange:above];
320
+ // The pushes it takes away that haven't shown are interrupted now (C1): a back never waits behind a screen the user
321
+ // hasn't seen. When nothing else goes, it moves nothing: a `none` in its turn.
322
+ if (![self interruptPushesOf:removed]) {
323
+ if (!answer) {
324
+ return;
325
+ }
326
+ operation.kind = ANNStackOperationNone;
327
+ }
328
+ [_pending addObject:operation];
329
+ [self runNext];
330
+ }
331
+
332
+ - (void)replaceWith:(NSArray<UIViewController *> *)nodes
333
+ animated:(BOOL)animated
334
+ waits:(BOOL)waits
335
+ answer:(ANNCommandAnswer *)answer
336
+ what:(NSString *)what
337
+ componentId:(NSString *)componentId
338
+ source:(UIViewController *)source
339
+ completion:(dispatch_block_t)completion
340
+ rejection:(ANNTransitionRejectionBlock)rejection {
341
+ ANNAssertMainQueue();
342
+ ANNStackOperation *operation = [self operationOfKind:ANNStackOperationReplace
343
+ answer:answer
344
+ what:what
345
+ componentId:componentId
346
+ source:source];
347
+ operation.nodes = nodes;
348
+ operation.animated = animated;
349
+ operation.waits = waits;
350
+ operation.completion = completion;
351
+ operation.rejection = rejection;
352
+ operation.value = ANNStackAnswerIdOf(nodes.lastObject, ANNStackAnswerCommandReplace);
353
+ if (_destroyed) {
354
+ [self reject:operation text:[ANNErrorTexts screenNotShown:componentId]];
355
+ for (UIViewController *node in nodes) {
356
+ [node destroy];
357
+ }
358
+ return;
359
+ }
360
+ // A second `setStackRoot` completes a waiting one and runs from its state; the pushes not shown yet go.
361
+ [self completeWaitingReplace];
362
+ [self interruptPushesOf:[_entries copy]];
363
+ UIViewController *stack = [_display stackViewController];
364
+ for (UIViewController *node in nodes) {
365
+ [node setLayoutParentFallback:stack];
366
+ }
367
+ [_entries setArray:nodes];
368
+ [_pending addObject:operation];
369
+ [self runNext];
370
+ }
371
+
372
+ - (void)noneWithValue:(id)value
373
+ answer:(ANNCommandAnswer *)answer
374
+ componentId:(NSString *)componentId
375
+ source:(UIViewController *)source {
376
+ ANNAssertMainQueue();
377
+ ANNStackOperation *operation = [self operationOfKind:ANNStackOperationNone
378
+ answer:answer
379
+ what:@"pop"
380
+ componentId:componentId
381
+ source:source];
382
+ operation.value = value;
383
+ if (_destroyed) {
384
+ [self reject:operation text:[ANNErrorTexts screenNotShown:componentId]];
385
+ return;
386
+ }
387
+ [_pending addObject:operation];
388
+ [self runNext];
389
+ }
390
+
391
+ // Every push whose node `removed` holds and that hasn't started its transition (waiting for its render, or queued)
392
+ // is interrupted, oldest first. Whether anything else of `removed` is left to move.
393
+ - (BOOL)interruptPushesOf:(NSArray<UIViewController *> *)removed {
394
+ NSMutableArray<UIViewController *> *left = [removed mutableCopy];
395
+ ANNStackOperation *current = _current;
396
+ if (current.kind == ANNStackOperationPush && current.waiting &&
397
+ [removed indexOfObjectIdenticalTo:current.node] != NSNotFound) {
398
+ [left removeObjectIdenticalTo:current.node];
399
+ [self interrupt:current];
400
+ }
401
+ for (ANNStackOperation *operation in [_pending copy]) {
402
+ if (operation.kind == ANNStackOperationPush && operation.node &&
403
+ [removed indexOfObjectIdenticalTo:operation.node] != NSNotFound) {
404
+ [_pending removeObjectIdenticalTo:operation];
405
+ [left removeObjectIdenticalTo:operation.node];
406
+ [self interrupt:operation];
407
+ }
408
+ }
409
+ return left.count > 0;
410
+ }
411
+
412
+ // An interrupted push: it resolves with its node's id, which never appeared, and the node is destroyed without
413
+ // appearance events and without `ScreenPopped` (its destroy's own `SlotDestroyed` or `NativeScreenReleased` go). The
414
+ // screen under it is not touched.
415
+ - (void)interrupt:(ANNStackOperation *)operation {
416
+ [self endWaitOf:operation];
417
+ [self unparkOf:operation];
418
+ [self stopDrivingOf:operation];
419
+ operation.done = YES;
420
+ operation.wait.ended = nil;
421
+ if (_current == operation) {
422
+ _current = nil;
423
+ }
424
+ if (!operation.isCurrent) {
425
+ return;
426
+ }
427
+ [operation.answer resolve:operation.value];
428
+ [self destroyNodes:@[ operation.node ]];
429
+ }
430
+
431
+ // A waiting `setStackRoot` completed at once: its end steps now, without an animation and without an appearance of its
432
+ // new top, which lies under what comes next. YES when it completed.
433
+ - (BOOL)completeWaitingReplace {
434
+ ANNStackOperation *operation = _current;
435
+ if (operation.kind != ANNStackOperationReplace || !operation.waiting || !operation.isCurrent) {
436
+ return NO;
437
+ }
438
+ [self endWaitOf:operation];
439
+ operation.atOnce = YES;
440
+ [self protect:operation
441
+ step:^{
442
+ [self startReplaceTransition:operation];
443
+ }];
444
+ return _current != operation;
445
+ }
446
+
447
+ #pragma mark - Running
448
+
449
+ - (void)runNext {
450
+ if (_running || _destroyed || _waitingForUIKit) {
451
+ return;
452
+ }
453
+ _running = YES;
454
+ while (!_destroyed && !_waitingForUIKit) {
455
+ ANNStackOperation *head = _pending.firstObject;
456
+ if (!head) {
457
+ break;
458
+ }
459
+ if (_current) {
460
+ // A waiting `setStackRoot` is completed at once by what changes the list after it; a `none` waits until
461
+ // it starts its transition (C6).
462
+ if (_current.kind == ANNStackOperationReplace && head.kind != ANNStackOperationNone &&
463
+ [self completeWaitingReplace]) {
464
+ continue;
465
+ }
466
+ break;
467
+ }
468
+ [_pending removeObjectAtIndex:0];
469
+ if (!head.isCurrent) {
470
+ continue;
471
+ }
472
+ id<UIViewControllerTransitionCoordinator> coordinator = [_display stackRunningTransition];
473
+ if (coordinator) {
474
+ [_pending insertObject:head atIndex:0];
475
+ [self waitForUIKit:coordinator];
476
+ break;
477
+ }
478
+ _current = head;
479
+ [self protect:head
480
+ step:^{
481
+ [self start:head];
482
+ }];
483
+ }
484
+ _running = NO;
485
+ }
486
+
487
+ // The operation that ended asked for the next one: the loop takes it when it runs, else on the next turn of the main
488
+ // queue, once UIKit finished its own part of the transition that ended.
489
+ - (void)scheduleRunNext {
490
+ if (_running || _runScheduled || _destroyed) {
491
+ return;
492
+ }
493
+ _runScheduled = YES;
494
+ __weak ANNStackQueue *weakSelf = self;
495
+ dispatch_async(dispatch_get_main_queue(), ^{
496
+ ANNStackQueue *queue = weakSelf;
497
+ if (!queue) {
498
+ return;
499
+ }
500
+ queue->_runScheduled = NO;
501
+ [queue runNext];
502
+ });
503
+ }
504
+
505
+ // UIKit drops a push or a pop asked for during a transition of its own: the queue goes on once it ended.
506
+ - (void)waitForUIKit:(id<UIViewControllerTransitionCoordinator>)coordinator {
507
+ _waitingForUIKit = YES;
508
+ __weak ANNStackQueue *weakSelf = self;
509
+ dispatch_block_t resume = ^{
510
+ dispatch_async(dispatch_get_main_queue(), ^{
511
+ ANNStackQueue *queue = weakSelf;
512
+ if (!queue || !queue->_waitingForUIKit) {
513
+ return;
514
+ }
515
+ queue->_waitingForUIKit = NO;
516
+ [queue runNext];
517
+ });
518
+ };
519
+ void (^completion)(id<UIViewControllerTransitionCoordinatorContext>) =
520
+ ^(id<UIViewControllerTransitionCoordinatorContext> context) {
521
+ resume();
522
+ };
523
+ if (![coordinator animateAlongsideTransition:nil completion:completion]) {
524
+ resume();
525
+ }
526
+ }
527
+
528
+ - (void)start:(ANNStackOperation *)operation {
529
+ switch (operation.kind) {
530
+ case ANNStackOperationPush:
531
+ [self startPush:operation];
532
+ break;
533
+ case ANNStackOperationCut:
534
+ [self startCut:operation];
535
+ break;
536
+ case ANNStackOperationReplace:
537
+ [self startReplace:operation];
538
+ break;
539
+ case ANNStackOperationNone:
540
+ if (operation.sourceGone) {
541
+ [self rejectInTurn:operation];
542
+ return;
543
+ }
544
+ [operation.answer resolve:operation.value];
545
+ [self finish:operation];
546
+ break;
547
+ case ANNStackOperationSwipe:
548
+ break;
549
+ }
550
+ }
551
+
552
+ #pragma mark - push
553
+
554
+ - (void)startPush:(ANNStackOperation *)operation {
555
+ UIViewController *node = operation.node;
556
+ // Its node went before its turn (a swipe that completed took the screen it came from, C8): interrupted.
557
+ if ([_entries indexOfObjectIdenticalTo:node] == NSNotFound) {
558
+ [self interrupt:operation];
559
+ [self scheduleRunNext];
560
+ return;
561
+ }
562
+ // `waitForRender: true` waits for the content as long as it takes, then for the bar components (their limits from
563
+ // the content's end); unset (also with `enabled: false`), only for the bar components, each kind to its own limit,
564
+ // without parking (bar roots render out of a window); `false`, for nothing. The content comes during the
565
+ // transition. A stack that isn't seen never waits.
566
+ Bool *waitForRender = [node resolveOptionsWithDefault].animations.push.waitForRender;
567
+ // A push whose caller waited already (a preview, `showInColumn`) waits for nothing here.
568
+ BOOL onScreen = operation.waits && [_display stackIsOnScreen];
569
+ __weak ANNStackQueue *weakSelf = self;
570
+ __weak ANNStackOperation *weakOperation = operation;
571
+ if (onScreen && waitForRender.hasValue && waitForRender.get) {
572
+ [self waitFor:operation
573
+ entry:node
574
+ content:ANNRenderWaitContentNode
575
+ limit:0
576
+ unknownLimit:YES
577
+ bar:ANNRenderWaitBarAfterContent
578
+ barLimits:ANNPushBarLimits
579
+ then:^{
580
+ [weakSelf startPushTransition:weakOperation];
581
+ }];
582
+ return;
583
+ }
584
+ if (onScreen && !waitForRender.hasValue) {
585
+ [self waitFor:operation
586
+ entry:node
587
+ content:ANNRenderWaitContentNone
588
+ limit:0
589
+ unknownLimit:NO
590
+ bar:ANNRenderWaitBarAfterContent
591
+ barLimits:ANNPushBarLimits
592
+ then:^{
593
+ // UIKit sizes the screen inside the push: it makes its content right before.
594
+ [weakOperation.node render];
595
+ [weakSelf startPushTransition:weakOperation];
596
+ }];
597
+ return;
598
+ }
599
+ // UIKit sizes the screen inside the push: it makes its content right before.
600
+ ANNRenderBeforeTransition(node, operation.waits);
601
+ [self startPushTransition:operation];
602
+ }
603
+
604
+ - (void)startPushTransition:(ANNStackOperation *)operation {
605
+ if (!operation) {
606
+ return;
607
+ }
608
+ UIViewController *node = operation.node;
609
+ [self unparkOf:operation];
610
+ BOOL onScreen = [_display stackIsOnScreen];
611
+ // The arriving screen's `animations.push`: its own transition when it has one, else UIKit's push (or the zoom);
612
+ // none with `enabled: false`.
613
+ ANNStackPushAnimationOptions *push = [node resolveOptionsWithDefault].animations.push;
614
+ BOOL animated = onScreen && operation.animated && [push.enabled withDefault:YES];
615
+ UIViewController *covered = _shown.lastObject;
616
+ operation.covered = covered;
617
+ ANNTransitionPlan *plan = nil;
618
+ if (animated) {
619
+ plan = [ANNTransitionPlan stackPlanOfKind:ANNTransitionKindPush
620
+ animation:push
621
+ waitForRender:push.waitForRender
622
+ waitLimit:ANNCustomTransitionWaitLimit
623
+ from:covered
624
+ to:node];
625
+ }
626
+ [self drive:operation nodes:covered ? @[ covered, node ] : @[ node ]];
627
+ [_display stackEntryJoins:node first:_shown.count == 0];
628
+ [_shown addObject:node];
629
+ if (onScreen) {
630
+ [ANNAppearanceDispatcher beginTransitionShowing:@[ node ]];
631
+ }
632
+ [_display stackChange:ANNStackChangePush toEntries:[_shown copy] animated:animated plan:plan];
633
+ [self whenTransitionOf:operation
634
+ ends:^(BOOL cancelled) {
635
+ [self endPush:operation];
636
+ }];
637
+ }
638
+
639
+ - (void)endPush:(ANNStackOperation *)operation {
640
+ UIViewController *node = operation.node;
641
+ UIViewController *covered = operation.covered;
642
+ BOOL showing = [_display stackIsOnScreen] && _shown.lastObject == node;
643
+ [ANNAppearanceDispatcher endTransitionHiding:covered ? @[ covered ] : @[]
644
+ showing:showing ? @[ node ] : @[]
645
+ events:nil
646
+ answer:operation.answer
647
+ value:operation.value];
648
+ [self finish:operation];
649
+ }
650
+
651
+ #pragma mark - cut (`pop`, `popTo`, `popToRoot`, the user's back)
652
+
653
+ - (void)startCut:(ANNStackOperation *)operation {
654
+ UIViewController *target = operation.target;
655
+ NSUInteger index = [_shown indexOfObjectIdenticalTo:target];
656
+ if (operation.sourceGone || index == NSNotFound) {
657
+ [self rejectInTurn:operation];
658
+ return;
659
+ }
660
+ NSArray<UIViewController *> *above =
661
+ [_shown subarrayWithRange:NSMakeRange(index + 1, _shown.count - index - 1)];
662
+ // What it would remove went already (a swipe that completed): nothing moves, and no second `ScreenPopped`.
663
+ if (above.count == 0) {
664
+ [operation.answer resolve:operation.value];
665
+ [self finish:operation];
666
+ return;
667
+ }
668
+ NSArray<UIViewController *> *leaving = ANNTopFirst(above);
669
+ operation.leaving = leaving;
670
+ for (UIViewController *entry in leaving) {
671
+ [ANNComponentViewController nodeWillLeave:entry];
672
+ }
673
+ [_display stackEntriesWillMove];
674
+ BOOL onScreen = !operation.silent && [_display stackIsOnScreen];
675
+ // The pop transition is the leaving top's `animations.pop` (`pop` step 3); the screens between it and the target go
676
+ // without one. Whether it is animated is read from the screen the command came from (`popTo`: its target), and from
677
+ // the top for the user's back and a command by the stack's id.
678
+ UIViewController *top = leaving.firstObject;
679
+ ANNStackAnimationOptions *pop = [top resolveOptionsWithDefault].animations.pop;
680
+ UIViewController *enabledFrom = operation.source ?: top;
681
+ Bool *enabled = enabledFrom == top
682
+ ? pop.enabled
683
+ : [enabledFrom resolveOptionsWithDefault].animations.pop.enabled;
684
+ BOOL animated = onScreen && [enabled withDefault:YES];
685
+ ANNTransitionPlan *plan = animated ? [ANNTransitionPlan stackPlanOfKind:ANNTransitionKindPop
686
+ animation:pop
687
+ waitForRender:nil
688
+ waitLimit:0
689
+ from:top
690
+ to:target]
691
+ : nil;
692
+ plan.overridesZoom = operation.answer != nil;
693
+ [self drive:operation nodes:[leaving arrayByAddingObject:target]];
694
+ [_shown removeObjectsInRange:NSMakeRange(index + 1, _shown.count - index - 1)];
695
+ // A lower screen that never rendered makes its content now, so that its `WillAppear` has content to report.
696
+ ANNRenderIfNeeded(target);
697
+ if (onScreen) {
698
+ [ANNAppearanceDispatcher beginTransitionShowing:@[ target ]];
699
+ }
700
+ [_display stackChange:ANNStackChangePop toEntries:[_shown copy] animated:animated plan:plan];
701
+ [self whenTransitionOf:operation
702
+ ends:^(BOOL cancelled) {
703
+ [self endCut:operation];
704
+ }];
705
+ }
706
+
707
+ // The order: `DidDisappear` of the visible top (the others never showed), `DidAppear` of the target, the state,
708
+ // `ScreenPopped` of each entry that left, top to bottom, then their destroys, then the answer.
709
+ - (void)endCut:(ANNStackOperation *)operation {
710
+ UIViewController *target = operation.target;
711
+ NSArray<UIViewController *> *leaving = operation.leaving;
712
+ BOOL showing =
713
+ !operation.silent && [_display stackIsOnScreen] && _shown.lastObject == target;
714
+ __weak ANNStackQueue *weakSelf = self;
715
+ [ANNAppearanceDispatcher endTransitionHiding:operation.silent ? @[] : leaving
716
+ showing:showing ? @[ target ] : @[]
717
+ events:^{
718
+ [weakSelf poppedEntries:leaving reused:@[]];
719
+ }
720
+ answer:operation.answer
721
+ value:operation.value];
722
+ [self finish:operation];
723
+ }
724
+
725
+ #pragma mark - replace (`setStackRoot`, the split view's call)
726
+
727
+ - (void)startReplace:(ANNStackOperation *)operation {
728
+ if (operation.sourceGone) {
729
+ [self rejectInTurn:operation];
730
+ return;
731
+ }
732
+ UIViewController *top = operation.nodes.lastObject;
733
+ // Like a root: the new top waits unseen for its first content and its bar components together at most 0.5 s; with
734
+ // `waitForRender: true` the content as long as it takes, then the bar components at most 0.5 s; with `false` not at
735
+ // all. The split view's call never waits.
736
+ if (operation.waits && [_display stackIsOnScreen]) {
737
+ Bool *waitForRender = [top resolveOptionsWithDefault].animations.setStackRoot.waitForRender;
738
+ __weak ANNStackQueue *weakSelf = self;
739
+ __weak ANNStackOperation *weakOperation = operation;
740
+ if (!waitForRender.hasValue) {
741
+ operation.waitStarted = CACurrentMediaTime();
742
+ [self waitFor:operation
743
+ entry:top
744
+ content:ANNRenderWaitContentNode
745
+ limit:ANNStackRootRenderLimit
746
+ unknownLimit:NO
747
+ bar:ANNRenderWaitBarWithContent
748
+ barLimits:ANNStackRootBarLimits
749
+ then:^{
750
+ [weakSelf startReplaceTransition:weakOperation];
751
+ }];
752
+ return;
753
+ }
754
+ if (waitForRender.get) {
755
+ [self waitFor:operation
756
+ entry:top
757
+ content:ANNRenderWaitContentNode
758
+ limit:0
759
+ unknownLimit:YES
760
+ bar:ANNRenderWaitBarAfterContent
761
+ barLimits:ANNStackRootBarLimits
762
+ then:^{
763
+ [weakSelf startReplaceTransition:weakOperation];
764
+ }];
765
+ return;
766
+ }
767
+ }
768
+ ANNRenderBeforeTransition(top, operation.waits);
769
+ [self startReplaceTransition:operation];
770
+ }
771
+
772
+ - (void)startReplaceTransition:(ANNStackOperation *)operation {
773
+ if (!operation) {
774
+ return;
775
+ }
776
+ [self unparkOf:operation];
777
+ NSArray<UIViewController *> *nodes = operation.nodes;
778
+ UIViewController *top = nodes.lastObject;
779
+ NSMutableArray<UIViewController *> *leaving = [NSMutableArray new];
780
+ for (UIViewController *entry in _shown.reverseObjectEnumerator) {
781
+ if ([nodes indexOfObjectIdenticalTo:entry] == NSNotFound) {
782
+ [leaving addObject:entry];
783
+ }
784
+ }
785
+ operation.leaving = leaving;
786
+ for (UIViewController *entry in leaving) {
787
+ [ANNComponentViewController nodeWillLeave:entry];
788
+ }
789
+ [_display stackEntriesWillMove];
790
+ BOOL onScreen = !operation.atOnce && [_display stackIsOnScreen];
791
+ BOOL animated = onScreen && operation.animated;
792
+ ANNTransitionPlan *plan = animated && operation.waits
793
+ ? [self replacePlanOf:operation from:_shown.lastObject]
794
+ : nil;
795
+ [self drive:operation nodes:[leaving arrayByAddingObject:top]];
796
+ for (NSUInteger index = 0; index < nodes.count; index++) {
797
+ [_display stackEntryJoins:nodes[index] first:index == 0];
798
+ }
799
+ [_shown setArray:nodes];
800
+ if (onScreen) {
801
+ [ANNAppearanceDispatcher beginTransitionShowing:@[ top ]];
802
+ }
803
+ [_display stackChange:ANNStackChangeReplace toEntries:nodes animated:animated plan:plan];
804
+ if (operation.atOnce) {
805
+ [self endReplace:operation];
806
+ return;
807
+ }
808
+ [self whenTransitionOf:operation
809
+ ends:^(BOOL cancelled) {
810
+ [self endReplace:operation];
811
+ }];
812
+ }
813
+
814
+ // The new top's own `animations.setStackRoot`, else its own `animations.push`, else none (UIKit's
815
+ // `setViewControllers:animated:`); iOS doesn't read `asPush`. Only a `setStackRoot` command: the split view's call
816
+ // keeps UIKit's. The wait is the `setStackRoot`'s `waitForRender`.
817
+ - (ANNTransitionPlan *)replacePlanOf:(ANNStackOperation *)operation
818
+ from:(UIViewController *)oldTop {
819
+ UIViewController *top = operation.nodes.lastObject;
820
+ if (!top) {
821
+ return nil;
822
+ }
823
+ ANNAnimationOptions *animations = [top resolveOptionsWithDefault].animations;
824
+ Bool *waitForRender = animations.setStackRoot.waitForRender;
825
+ // With `waitForRender: true` the targets 0.5 s; unset, what the `setStackRoot`'s own wait left.
826
+ NSTimeInterval limit =
827
+ waitForRender.hasValue
828
+ ? ANNCustomTransitionWaitLimit
829
+ : [ANNAnimationRules customWaitLimitAfterWaitStartedAt:operation.waitStarted
830
+ commandLimit:ANNStackRootRenderLimit];
831
+ ANNStackAnimationOptions *animation = animations.setStackRoot;
832
+ if (![ANNAnimationRules stackIsOwn:animation]) {
833
+ animation = animations.push;
834
+ }
835
+ return [ANNTransitionPlan stackPlanOfKind:ANNTransitionKindReplace
836
+ animation:animation
837
+ waitForRender:waitForRender
838
+ waitLimit:limit
839
+ from:oldTop
840
+ to:top];
841
+ }
842
+
843
+ // `ScreenPopped` of each old entry whose id no new node takes, top to bottom, then their destroys; an old entry whose
844
+ // id a new node took gets no `ScreenPopped` and is destroyed after the others.
845
+ - (void)endReplace:(ANNStackOperation *)operation {
846
+ NSArray<UIViewController *> *nodes = operation.nodes;
847
+ UIViewController *top = nodes.lastObject;
848
+ NSMutableSet<NSString *> *newIds = [NSMutableSet new];
849
+ for (UIViewController *node in nodes) {
850
+ [newIds addObject:ANNIdOf(node)];
851
+ for (ANNComponentViewController *screen in ANNStackScreensOfEntry(node)) {
852
+ [newIds addObject:ANNIdOf(screen)];
853
+ }
854
+ }
855
+ NSMutableArray<UIViewController *> *popped = [NSMutableArray new];
856
+ NSMutableArray<UIViewController *> *reused = [NSMutableArray new];
857
+ for (UIViewController *entry in operation.leaving) {
858
+ [([newIds containsObject:ANNIdOf(entry)] ? reused : popped) addObject:entry];
859
+ }
860
+ BOOL showing = !operation.atOnce && [_display stackIsOnScreen] && _shown.lastObject == top;
861
+ __weak ANNStackQueue *weakSelf = self;
862
+ [ANNAppearanceDispatcher endTransitionHiding:operation.leaving
863
+ showing:showing ? @[ top ] : @[]
864
+ events:^{
865
+ [weakSelf poppedEntries:popped reused:reused];
866
+ }
867
+ answer:operation.answer
868
+ value:operation.value];
869
+ // One answer: a failure after this rejects nothing.
870
+ dispatch_block_t completion = operation.completion;
871
+ operation.completion = nil;
872
+ operation.rejection = nil;
873
+ if (completion && operation.isCurrent) {
874
+ completion();
875
+ }
876
+ // The lower new screens make their content now, under the top.
877
+ if (nodes.count > 1) {
878
+ NSRange lower = NSMakeRange(0, nodes.count - 1);
879
+ [_display stackRenderLowerEntries:[nodes subarrayWithRange:lower]];
880
+ }
881
+ [self finish:operation];
882
+ }
883
+
884
+ #pragma mark - The swipe back
885
+
886
+ - (BOOL)swipeBeganFrom:(UIViewController *)top revealing:(UIViewController *)revealed {
887
+ ANNAssertMainQueue();
888
+ if (_current || _destroyed || _shown.lastObject != top ||
889
+ [_shown indexOfObjectIdenticalTo:revealed] == NSNotFound) {
890
+ return NO;
891
+ }
892
+ ANNStackOperation *operation = [self operationOfKind:ANNStackOperationSwipe
893
+ answer:nil
894
+ what:@"go back"
895
+ componentId:nil
896
+ source:nil];
897
+ operation.target = revealed;
898
+ operation.leaving = @[ top ];
899
+ _current = operation;
900
+ // The stack reports the swipe itself, as a command: UIKit's appearance callbacks of the two screens send nothing
901
+ // meanwhile.
902
+ // The lower screens still rendering in the stack's view leave it before UIKit moves the revealed one.
903
+ [_display stackEntriesWillMove];
904
+ [self drive:operation nodes:@[ top, revealed ]];
905
+ ANNRenderIfNeeded(revealed);
906
+ [ANNAppearanceDispatcher beginTransitionShowing:@[ revealed ]];
907
+ [self whenTransitionOf:operation
908
+ ends:^(BOOL cancelled) {
909
+ [self endSwipe:operation cancelled:cancelled];
910
+ }];
911
+ return YES;
912
+ }
913
+
914
+ - (void)endSwipe:(ANNStackOperation *)operation cancelled:(BOOL)cancelled {
915
+ UIViewController *top = operation.leaving.firstObject;
916
+ UIViewController *revealed = operation.target;
917
+ // A cancelled swipe: the screen under goes again; the top never left.
918
+ if (cancelled) {
919
+ [ANNAppearanceDispatcher endTransitionHiding:@[ revealed ]
920
+ showing:@[]
921
+ events:nil
922
+ answer:nil
923
+ value:nil];
924
+ [self finish:operation];
925
+ return;
926
+ }
927
+ [_shown removeObjectIdenticalTo:top];
928
+ // The top and what was accepted over it leave `entries` now: a push from it is interrupted, a command from it or to
929
+ // it rejects in its turn.
930
+ [self removeEntriesFrom:top];
931
+ [ANNComponentViewController nodeWillLeave:top];
932
+ BOOL showing = [_display stackIsOnScreen] && _shown.lastObject == revealed;
933
+ __weak ANNStackQueue *weakSelf = self;
934
+ // No `NavigationButtonPressed` on a finished swipe.
935
+ [ANNAppearanceDispatcher endTransitionHiding:@[ top ]
936
+ showing:showing ? @[ revealed ] : @[]
937
+ events:^{
938
+ [weakSelf poppedEntries:@[ top ] reused:@[]];
939
+ }
940
+ answer:nil
941
+ value:nil];
942
+ [self finish:operation];
943
+ }
944
+
945
+ #pragma mark - UIKit's own changes
946
+
947
+ - (void)uikitShows:(NSArray<UIViewController *> *)viewControllers {
948
+ ANNAssertMainQueue();
949
+ // The queue's own transition reports itself.
950
+ if (_destroyed || (_current && !_current.waiting)) {
951
+ return;
952
+ }
953
+ NSUInteger kept = 0;
954
+ while (kept < _shown.count &&
955
+ [viewControllers indexOfObjectIdenticalTo:_shown[kept]] != NSNotFound) {
956
+ kept++;
957
+ }
958
+ if (kept == _shown.count) {
959
+ return;
960
+ }
961
+ NSRange range = NSMakeRange(kept, _shown.count - kept);
962
+ NSArray<UIViewController *> *gone = ANNTopFirst([_shown subarrayWithRange:range]);
963
+ [_shown removeObjectsInRange:range];
964
+ [self removeEntriesFrom:gone.lastObject];
965
+ for (UIViewController *entry in gone) {
966
+ [ANNComponentViewController nodeWillLeave:entry];
967
+ }
968
+ // UIKit reported the appearance of its own transition; what left gets its `ScreenPopped` and goes.
969
+ __weak ANNStackQueue *weakSelf = self;
970
+ [ANNAppearanceDispatcher endTransitionHiding:gone
971
+ showing:@[]
972
+ events:^{
973
+ [weakSelf poppedEntries:gone reused:@[]];
974
+ }
975
+ answer:nil
976
+ value:nil];
977
+ [_display stackOperationEnded];
978
+ [self scheduleRunNext];
979
+ }
980
+
981
+ // `entry` and everything over it leave `entries`: a push of them is interrupted, a queued command from them or to them
982
+ // rejects in its turn.
983
+ - (void)removeEntriesFrom:(UIViewController *)entry {
984
+ NSUInteger index = entry ? [_entries indexOfObjectIdenticalTo:entry] : NSNotFound;
985
+ if (index == NSNotFound) {
986
+ return;
987
+ }
988
+ NSRange range = NSMakeRange(index, _entries.count - index);
989
+ NSArray<UIViewController *> *removed = [_entries subarrayWithRange:range];
990
+ [_entries removeObjectsInRange:range];
991
+ [self interruptPushesOf:removed];
992
+ for (ANNStackOperation *pending in _pending) {
993
+ UIViewController *source = pending.source;
994
+ UIViewController *target = pending.target;
995
+ if ((source && [removed indexOfObjectIdenticalTo:source] != NSNotFound) ||
996
+ (target && [removed indexOfObjectIdenticalTo:target] != NSNotFound)) {
997
+ pending.sourceGone = YES;
998
+ }
999
+ }
1000
+ }
1001
+
1002
+ #pragma mark - The stack
1003
+
1004
+ - (void)stackWentOffScreen {
1005
+ ANNStackOperation *operation = _current;
1006
+ if (operation.waiting) {
1007
+ // The wait's phase ends without `markReady`: the operation runs as in a stack off screen, and its top appears
1008
+ // when the stack shows.
1009
+ [operation.wait endPhase];
1010
+ }
1011
+ }
1012
+
1013
+ - (NSArray<UIViewController *> *)destroyQueue {
1014
+ ANNAssertMainQueue();
1015
+ NSArray<UIViewController *> *nodes = self.heldNodes;
1016
+ _destroyed = YES;
1017
+ _waitingForUIKit = NO;
1018
+ NSMutableArray<ANNStackOperation *> *operations = [_pending mutableCopy];
1019
+ if (_current) {
1020
+ [operations insertObject:_current atIndex:0];
1021
+ }
1022
+ _current = nil;
1023
+ [_pending removeAllObjects];
1024
+ for (ANNStackOperation *operation in operations) {
1025
+ [self endWaitOf:operation];
1026
+ [self unparkOf:operation];
1027
+ [self stopDrivingOf:operation];
1028
+ if (operation.done) {
1029
+ continue;
1030
+ }
1031
+ operation.done = YES;
1032
+ operation.wait.ended = nil;
1033
+ if (operation.isCurrent) {
1034
+ [self answerRejection:operation
1035
+ text:[ANNErrorTexts screenNotShown:operation.componentId ?: @""]];
1036
+ }
1037
+ }
1038
+ [_entries removeAllObjects];
1039
+ [_shown removeAllObjects];
1040
+ return nodes;
1041
+ }
1042
+
1043
+ #pragma mark - Waits
1044
+
1045
+ // The operation's render wait (`ANNRenderWait`), its token, limits and bar components. With content, the entry waits
1046
+ // for it in the stack's view, its appearance driven: the wait ends at the entry's ready handler (set first, then the
1047
+ // park and `render`, then the test of 16.1), at `limit` with `markReady`, or with `unknownLimit` for a screen whose
1048
+ // rendered state stays unknown after 1 s. Without content, only the bar components, without parking (bar roots render
1049
+ // out of a window). A wait that would end does nothing once its operation ended or belongs to an old JavaScript; its
1050
+ // end runs protected (the end steps of the operation, `then`).
1051
+ - (void)waitFor:(ANNStackOperation *)operation
1052
+ entry:(UIViewController *)entry
1053
+ content:(ANNRenderWaitContent)content
1054
+ limit:(NSTimeInterval)limit
1055
+ unknownLimit:(BOOL)unknownLimit
1056
+ bar:(ANNRenderWaitBar)bar
1057
+ barLimits:(ANNBarWaitLimits)barLimits
1058
+ then:(dispatch_block_t)then {
1059
+ __weak ANNStackQueue *weakSelf = self;
1060
+ __weak ANNStackOperation *weakOperation = operation;
1061
+ // The screens the wait is about are those the entry waits for (a pair: the ones it puts in the window).
1062
+ NSArray<UIViewController *> * (^screens)(void) = ^NSArray<UIViewController *> * {
1063
+ return entry.waitedComponentViewControllers;
1064
+ };
1065
+ ANNRenderWait *wait = [[ANNRenderWait alloc] initWithContent:content
1066
+ node:entry
1067
+ screens:screens
1068
+ limit:limit
1069
+ bar:bar
1070
+ barLimits:barLimits];
1071
+ wait.unknownContentRule = unknownLimit;
1072
+ wait.canEnd = ^BOOL {
1073
+ ANNStackQueue *queue = weakSelf;
1074
+ ANNStackOperation *waiting = weakOperation;
1075
+ return queue && waiting && !waiting.done && waiting.isCurrent && !queue->_destroyed;
1076
+ };
1077
+ wait.protect = ^(dispatch_block_t step) {
1078
+ [weakSelf protect:weakOperation step:step];
1079
+ };
1080
+ wait.ended = then;
1081
+ if (content != ANNRenderWaitContentNone) {
1082
+ wait.setUp = ^{
1083
+ ANNStackQueue *queue = weakSelf;
1084
+ ANNStackOperation *waiting = weakOperation;
1085
+ if (!queue || !waiting) {
1086
+ return;
1087
+ }
1088
+ // A pair is ready once the screens it shows are only when it waits for them.
1089
+ if (![entry isKindOfClass:ANNComponentViewController.class]) {
1090
+ [entry setWaitForRender:YES];
1091
+ }
1092
+ // The place in the window loads the view, which renders a screen nobody rendered. A native screen is ready
1093
+ // inside the load that parking makes: the wait's test after the setup ends its wait.
1094
+ waiting.waited = entry;
1095
+ waiting.parked = YES;
1096
+ [queue->_display stackPark:entry];
1097
+ [entry render];
1098
+ for (ANNComponentViewController *screen in ANNStackScreensOfEntry(entry)) {
1099
+ [screen updateRootLayout];
1100
+ }
1101
+ };
1102
+ }
1103
+ operation.wait = wait;
1104
+ [wait start];
1105
+ }
1106
+
1107
+ - (void)endWaitOf:(ANNStackOperation *)operation {
1108
+ [operation.wait cancel];
1109
+ }
1110
+
1111
+ - (void)unparkOf:(ANNStackOperation *)operation {
1112
+ if (!operation.parked) {
1113
+ return;
1114
+ }
1115
+ operation.parked = NO;
1116
+ [_display stackUnpark:operation.waited];
1117
+ }
1118
+
1119
+ #pragma mark - The end steps
1120
+
1121
+ // From its start to its end a command drives the appearance of the screens it moves: UIKit's callbacks of those screens
1122
+ // send nothing, whenever UIKit calls them against the coordinator's completion.
1123
+ - (void)drive:(ANNStackOperation *)operation nodes:(NSArray<UIViewController *> *)nodes {
1124
+ [self stopDrivingOf:operation];
1125
+ operation.driven = nodes;
1126
+ [ANNAppearanceDispatcher driveAppearanceOf:nodes];
1127
+ }
1128
+
1129
+ - (void)stopDrivingOf:(ANNStackOperation *)operation {
1130
+ NSArray<UIViewController *> *driven = operation.driven;
1131
+ if (driven) {
1132
+ operation.driven = nil;
1133
+ [ANNAppearanceDispatcher stopDrivingAppearanceOf:driven];
1134
+ }
1135
+ }
1136
+
1137
+ // The end of the transition, guarded: a completion of an operation that ended already, or of a JavaScript that went,
1138
+ // does nothing (a reload's old stack stays as it is until its destroy).
1139
+ - (void)whenTransitionOf:(ANNStackOperation *)operation ends:(void (^)(BOOL cancelled))ended {
1140
+ __weak ANNStackQueue *weakSelf = self;
1141
+ [_display stackWhenTransitionEnds:^(BOOL cancelled) {
1142
+ ANNStackQueue *queue = weakSelf;
1143
+ if (!queue || operation.done || !operation.isCurrent || queue->_destroyed) {
1144
+ return;
1145
+ }
1146
+ [queue protect:operation
1147
+ step:^{
1148
+ ended(cancelled);
1149
+ }];
1150
+ }];
1151
+ }
1152
+
1153
+ // Every `ScreenPopped` first, then the destroys in the same order: the content of each stops only after all the events.
1154
+ - (void)poppedEntries:(NSArray<UIViewController *> *)popped
1155
+ reused:(NSArray<UIViewController *> *)reused {
1156
+ for (UIViewController *entry in popped) {
1157
+ [ANNAppearanceDispatcher screenPopped:entry];
1158
+ }
1159
+ [self destroyNodes:popped];
1160
+ [self destroyNodes:reused];
1161
+ }
1162
+
1163
+ - (void)destroyNodes:(NSArray<UIViewController *> *)nodes {
1164
+ for (UIViewController *node in nodes) {
1165
+ @try {
1166
+ [node destroy];
1167
+ } @catch (NSException *exception) {
1168
+ RCTLogWarn(@"[ApexNavigation] could not destroy the screen '%@': %@", ANNIdOf(node),
1169
+ exception.reason ?: exception.name);
1170
+ }
1171
+ }
1172
+ }
1173
+
1174
+ - (void)finish:(ANNStackOperation *)operation {
1175
+ operation.done = YES;
1176
+ operation.wait.ended = nil;
1177
+ [self stopDrivingOf:operation];
1178
+ if (_current == operation) {
1179
+ _current = nil;
1180
+ }
1181
+ @try {
1182
+ [_display stackOperationEnded];
1183
+ } @catch (NSException *exception) {
1184
+ RCTLogWarn(@"[ApexNavigation] %@",
1185
+ [ANNCommandRunner rejectionOf:exception what:@"show the top of the stack"]);
1186
+ }
1187
+ [self scheduleRunNext];
1188
+ }
1189
+
1190
+ #pragma mark - Failures
1191
+
1192
+ // The steps after a command's body run outside the runner's protection: a failure rejects that operation with its error
1193
+ // text, ends what it holds, destroys what it made and never showed, and the queue goes on.
1194
+ - (void)protect:(ANNStackOperation *)operation step:(dispatch_block_t)step {
1195
+ @try {
1196
+ step();
1197
+ } @catch (NSException *exception) {
1198
+ [self operation:operation failed:exception];
1199
+ }
1200
+ }
1201
+
1202
+ - (void)operation:(ANNStackOperation *)operation failed:(NSException *)exception {
1203
+ NSString *text = [ANNCommandRunner rejectionOf:exception what:operation.what];
1204
+ if (operation.done) {
1205
+ RCTLogWarn(@"[ApexNavigation] %@", text);
1206
+ return;
1207
+ }
1208
+ [self endWaitOf:operation];
1209
+ [self unparkOf:operation];
1210
+ [self stopDrivingOf:operation];
1211
+ if (operation.answer || operation.rejection) {
1212
+ [self answerRejection:operation text:text];
1213
+ } else {
1214
+ RCTLogWarn(@"[ApexNavigation] %@", text);
1215
+ }
1216
+ [self destroyUnshownNodesOf:operation];
1217
+ [self rebuildEntries];
1218
+ [self finish:operation];
1219
+ }
1220
+
1221
+ // An operation whose screen went before its turn: it rejects with its command's id and destroys silently what it made.
1222
+ - (void)rejectInTurn:(ANNStackOperation *)operation {
1223
+ [self answerRejection:operation
1224
+ text:[ANNErrorTexts screenNotShown:operation.componentId ?: @""]];
1225
+ [self destroyUnshownNodesOf:operation];
1226
+ [self rebuildEntries];
1227
+ [self finish:operation];
1228
+ }
1229
+
1230
+ - (void)reject:(ANNStackOperation *)operation text:(NSString *)text {
1231
+ operation.done = YES;
1232
+ [self answerRejection:operation text:text];
1233
+ }
1234
+
1235
+ - (void)answerRejection:(ANNStackOperation *)operation text:(NSString *)text {
1236
+ if (operation.answer) {
1237
+ [operation.answer reject:text];
1238
+ return;
1239
+ }
1240
+ ANNTransitionRejectionBlock rejection = operation.rejection;
1241
+ operation.rejection = nil;
1242
+ operation.completion = nil;
1243
+ if (rejection && operation.isCurrent) {
1244
+ rejection(text, nil);
1245
+ }
1246
+ }
1247
+
1248
+ - (void)destroyUnshownNodesOf:(ANNStackOperation *)operation {
1249
+ NSMutableArray<UIViewController *> *made = [NSMutableArray new];
1250
+ if (operation.kind == ANNStackOperationPush && operation.node) {
1251
+ [made addObject:operation.node];
1252
+ } else if (operation.kind == ANNStackOperationReplace && operation.nodes) {
1253
+ [made addObjectsFromArray:operation.nodes];
1254
+ }
1255
+ // A cut or a replace that failed after it took entries off what shows leaves them in no list: they go too.
1256
+ for (UIViewController *entry in operation.leaving ?: @[]) {
1257
+ if ([_entries indexOfObjectIdenticalTo:entry] == NSNotFound) {
1258
+ [made addObject:entry];
1259
+ }
1260
+ }
1261
+ NSMutableArray<UIViewController *> *unshown = [NSMutableArray new];
1262
+ for (UIViewController *node in made) {
1263
+ if ([_shown indexOfObjectIdenticalTo:node] == NSNotFound &&
1264
+ [unshown indexOfObjectIdenticalTo:node] == NSNotFound) {
1265
+ [unshown addObject:node];
1266
+ }
1267
+ }
1268
+ operation.leaving = nil;
1269
+ [self destroyNodes:unshown];
1270
+ }
1271
+
1272
+ // `entries` after an operation that failed: what shows, with what the queued operations accepted over it.
1273
+ - (void)rebuildEntries {
1274
+ NSMutableArray<UIViewController *> *rebuilt = [_shown mutableCopy];
1275
+ for (ANNStackOperation *operation in _pending) {
1276
+ switch (operation.kind) {
1277
+ case ANNStackOperationPush:
1278
+ if (operation.node) {
1279
+ [rebuilt addObject:operation.node];
1280
+ }
1281
+ break;
1282
+ case ANNStackOperationReplace:
1283
+ [rebuilt setArray:operation.nodes ?: @[]];
1284
+ break;
1285
+ case ANNStackOperationCut: {
1286
+ NSUInteger index = [rebuilt indexOfObjectIdenticalTo:operation.target];
1287
+ if (index != NSNotFound) {
1288
+ NSRange above = NSMakeRange(index + 1, rebuilt.count - index - 1);
1289
+ [rebuilt removeObjectsInRange:above];
1290
+ }
1291
+ break;
1292
+ }
1293
+ default:
1294
+ break;
1295
+ }
1296
+ }
1297
+ [_entries setArray:rebuilt];
1298
+ }
1299
+
1300
+ @end