@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,1252 @@
1
+ #import "ANNTopBarPresenter.h"
2
+ #import "ANNBackButtonPresenter.h"
3
+ #import "ANNBarAppearance.h"
4
+ #import "ANNComponentPresenter.h"
5
+ #import "ANNExternalViewController.h"
6
+ #import "ANNLargeTitlePresenter.h"
7
+ #import "ANNMainList.h"
8
+ #import "ANNScreenBars.h"
9
+ #import "ANNScrollEdgeEffects.h"
10
+ #import "ANNSearchPresenter.h"
11
+ #import "ANNStackController.h"
12
+ #import "ANNTitleComponentView.h"
13
+ #import "ANNTitleGlassView.h"
14
+ #import "ANNTitleView.h"
15
+ #import "ANNToolbarPresenter.h"
16
+ #import "UIViewController+LayoutProtocol.h"
17
+
18
+ // The key of the bar's handler on the screen's content mounts.
19
+ static NSString *const ANNTopBarMountKey = @"ANNTopBarPresenter";
20
+
21
+ // The offset of the main list, observed while the React background sits in it.
22
+ static void *ANNTopBarListOffsetContext = &ANNTopBarListOffsetContext;
23
+
24
+ // The row of the bar a `fill` title takes: 44 pt, 50 pt on iPad before iOS 26.
25
+ static const CGFloat ANNTitleRowHeight = 44;
26
+ static const CGFloat ANNTitleRowHeightPad = 50;
27
+
28
+ // Where the screen's appearance stands, for the bar components set onto it.
29
+ typedef NS_ENUM(NSInteger, ANNBarPhase) {
30
+ ANNBarPhaseHidden,
31
+ ANNBarPhaseWillAppear,
32
+ ANNBarPhaseDidAppear,
33
+ };
34
+
35
+ static BOOL ANNIsIOS26(void) {
36
+ if (@available(iOS 26.0, *)) {
37
+ return YES;
38
+ }
39
+ return NO;
40
+ }
41
+
42
+ static BOOL ANNHasComponentName(ANNComponentOptions *component) {
43
+ return [component.name withDefault:nil].length > 0 &&
44
+ [component.componentId withDefault:nil].length > 0;
45
+ }
46
+
47
+ // The suggested actions of the title menu without all but Rename.
48
+ static NSArray<UIMenuElement *> *ANNRenameElementsOf(NSArray<UIMenuElement *> *elements) {
49
+ NSMutableArray<UIMenuElement *> *kept = [NSMutableArray new];
50
+ SEL rename = NSSelectorFromString(@"rename:");
51
+ for (UIMenuElement *element in elements) {
52
+ if ([element isKindOfClass:UICommand.class] && ((UICommand *)element).action == rename) {
53
+ [kept addObject:element];
54
+ } else if ([element isKindOfClass:UIMenu.class]) {
55
+ NSArray<UIMenuElement *> *inner = ANNRenameElementsOf(((UIMenu *)element).children);
56
+ [kept addObjectsFromArray:inner];
57
+ }
58
+ }
59
+ return kept;
60
+ }
61
+
62
+ @interface ANNTopBarPresenter () <UINavigationItemRenameDelegate>
63
+ @end
64
+
65
+ @implementation ANNTopBarPresenter {
66
+ __weak UIViewController *_screen;
67
+ BOOL _native;
68
+ ANNBarButtons *_buttons;
69
+ ANNSearchPresenter *_search;
70
+ ANNLargeTitlePresenter *_largeTitle;
71
+ ANNScrollEdgeEffects *_edgeEffects;
72
+ ANNMainList *_mainList;
73
+ ANNTitleComponentView *_titleComponent;
74
+ UIView *_titleGlass;
75
+ // The title view the core set on the item: only that one is taken away again (a native screen's own stays).
76
+ __weak UIView *_coreTitleView;
77
+ ANNBarPhase _phase;
78
+ // The bar components shown with the screen, by id: they hear its appearance moments.
79
+ NSMutableDictionary<NSString *, UIView<ANNComponentProtocol> *> *_inBar;
80
+ __weak UIScrollView *_observedList;
81
+ // iOS 26, a push showing the screen: the traits its title color is resolved with until the push ends, nil
82
+ // otherwise; every look applied meanwhile keeps it. The token tells the push that set it from a later one.
83
+ UITraitCollection *_pinnedTraits;
84
+ NSUInteger _pinToken;
85
+ // A pop's band under the title keeps the bar's look as it is (the screen leaves for one without a band of its own).
86
+ BOOL _bandKeepsLook;
87
+ }
88
+
89
+ - (instancetype)initWithScreen:(UIViewController *)screen {
90
+ if (self = [super init]) {
91
+ _screen = screen;
92
+ _native = [screen isKindOfClass:ANNExternalViewController.class];
93
+ _registry = [[ANNReactComponentRegistry alloc] initWithCreator:screen.creator];
94
+ _buttons = [[ANNBarButtons alloc] initWithScreen:screen registry:_registry];
95
+ _search = [[ANNSearchPresenter alloc] initWithComponentRegistry:_registry];
96
+ [_search bindViewController:(UIViewController<ANNLayoutProtocol> *)screen];
97
+ _largeTitle = [[ANNLargeTitlePresenter alloc] initWithScreen:screen];
98
+ _inBar = [NSMutableDictionary new];
99
+ }
100
+ return self;
101
+ }
102
+
103
+ - (void)dealloc {
104
+ [self stopObservingList];
105
+ }
106
+
107
+ + (ANNTopBarPresenter *)presenterOfScreen:(UIViewController *)screen {
108
+ ANNNodePresenter *presenter = screen.presenter;
109
+ if (![presenter isKindOfClass:ANNComponentPresenter.class]) {
110
+ return nil;
111
+ }
112
+ return ((ANNComponentPresenter *)presenter).topBar;
113
+ }
114
+
115
+ #pragma mark - Places
116
+
117
+ - (nullable ANNStackController *)stack {
118
+ UINavigationController *stack = _screen.stack;
119
+ return [stack isKindOfClass:ANNStackController.class] ? (ANNStackController *)stack : nil;
120
+ }
121
+
122
+ // The screen is what UIKit shows on top of its stack now: the screen's appearance applies the parts the stack shares
123
+ // (also the screen a swipe reveals; never a screen that appears late under the top).
124
+ - (BOOL)isUIKitTop {
125
+ UIViewController *screen = _screen;
126
+ ANNStackController *stack = [self stack];
127
+ UIViewController *entry = [stack entryOf:screen];
128
+ return entry && stack.shownNavigationController.topViewController == entry &&
129
+ ANNStackOptionsScreen(entry) == screen;
130
+ }
131
+
132
+ // The bar that shows the screen's stack: the stack's own, or the More navigation's while a tab of More holds the
133
+ // screens.
134
+ - (nullable UINavigationBar *)shownBar {
135
+ return [self stack].shownNavigationController.navigationBar;
136
+ }
137
+
138
+ - (BOOL)isShownTop {
139
+ return _phase != ANNBarPhaseHidden && [self isUIKitTop];
140
+ }
141
+
142
+ // `inline` in the row: a screen without a back button, by the options.
143
+ - (BOOL)inlineInRow:(ANNNavigationOptions *)options {
144
+ return [ANNLargeTitleDisplayMode(options) isEqualToString:@"inline"] &&
145
+ ![ANNBackButtonPresenter screenHasBackButton:_screen options:options];
146
+ }
147
+
148
+ - (ANNBarAppearanceContext)appearanceContextOf:(ANNNavigationOptions *)options {
149
+ ANNBarAppearanceContext context;
150
+ BOOL canShow = ANNLargeTitleCanShow(options);
151
+ BOOL collapses = [ANNLargeTitlePresenter collapsesIntoList:options];
152
+ BOOL inlineInRow = [self inlineInRow:options];
153
+ BOOL ownEdge = [options.topBar.scrollEdgeAppearance.active withDefault:NO];
154
+ context.transparentEdge = ANNIsIOS26() && collapses && !inlineInRow && !ownEdge;
155
+ // While a pop draws the band behind the title in the title's own place, the bar's edge stays clear: UIKit grows
156
+ // the bar's background with an interactive pop, over the screen's top where the title is.
157
+ if ([_largeTitle drawsTitleBand] && !_bandKeepsLook && !ownEdge) {
158
+ context.transparentEdge = YES;
159
+ }
160
+ context.largeTitleNeedsBackground = ANNIsIOS26() && canShow && !collapses && !inlineInRow;
161
+ return context;
162
+ }
163
+
164
+ #pragma mark - The moments of the options
165
+
166
+ // A native screen's item is the app's view controller's, which it doesn't have at its creation: nothing goes there
167
+ // then.
168
+ - (void)applyOptionsOnInit:(ANNNavigationOptions *)options {
169
+ if (_native) {
170
+ return;
171
+ }
172
+ [self applyLook:options];
173
+ [self applyTitle:options textWins:NO];
174
+ [self applyTitleMenu:options];
175
+ [self applyItemOptions:options];
176
+ [_largeTitle applyMode:options shownTop:NO];
177
+ [self applyAllButtons:options animated:NO];
178
+ [self applyBackgroundComponent:options];
179
+ [self updateComponentsInBar:options];
180
+ }
181
+
182
+ - (void)applyOptions:(ANNNavigationOptions *)options {
183
+ UIViewController *screen = _screen;
184
+ if (!screen) {
185
+ return;
186
+ }
187
+ [self watchContentMounts];
188
+ [self applyLook:options];
189
+ [self applyTitle:options textWins:NO];
190
+ [self applyTitleMenu:options];
191
+ [ANNBackButtonPresenter applyOptions:options ofScreen:screen];
192
+ // The back action follows the back button's visibility, also on a native screen without left buttons.
193
+ [self updateBackAction];
194
+ [self applyItemOptions:options];
195
+ [self applyAllButtons:options animated:NO];
196
+ [self applyToolbar:options animated:NO];
197
+ [_search applyOptions:options.topBar.searchBar];
198
+ if (!_native || options.topBar.largeTitle.hasValue) {
199
+ [_largeTitle applyMode:options shownTop:[self isShownTop]];
200
+ }
201
+ [_largeTitle applyCollapse:options list:[self followedList]];
202
+ [self applyBackgroundComponent:options];
203
+ [[self edgeEffects] applyToAllWithOptions:options];
204
+ [self updateListFill:options];
205
+ [self updateComponentsInBar:options];
206
+ // The parts the stack shares follow the screen UIKit shows on top, along the transition that shows it.
207
+ if ([self isUIKitTop]) {
208
+ [[self stack] applySharedBarAnimated:YES visibility:ANNSharedBarVisibilityAll];
209
+ }
210
+ }
211
+
212
+ - (void)mergeOptions:(ANNNavigationOptions *)mergeOptions
213
+ resolvedOptions:(ANNNavigationOptions *)resolvedOptions {
214
+ [self mergeOptions:mergeOptions resolvedOptions:resolvedOptions own:YES];
215
+ }
216
+
217
+ - (void)mergeParentOptions:(ANNNavigationOptions *)mergeOptions
218
+ resolvedOptions:(ANNNavigationOptions *)resolvedOptions {
219
+ [self mergeOptions:mergeOptions resolvedOptions:resolvedOptions own:NO];
220
+ }
221
+
222
+ - (void)mergeOptions:(ANNNavigationOptions *)mergeOptions
223
+ resolvedOptions:(ANNNavigationOptions *)resolvedOptions
224
+ own:(BOOL)own {
225
+ UIViewController *screen = _screen;
226
+ if (!screen) {
227
+ return;
228
+ }
229
+ ANNTopBarOptions *topBar = mergeOptions.topBar;
230
+ ANNNavigationOptions *options = resolvedOptions;
231
+ // What a merge writes into the screen's own options, shown or not: a merged text takes the React title out of them,
232
+ // so it doesn't come back at the next appearance (a merged component leaves the text alone); a side color goes into
233
+ // the own buttons.
234
+ BOOL textWins = own && topBar.title.text.hasValue && !topBar.title.component.hasValue;
235
+ if (textWins && [screen.options.topBar.title.component hasValue]) {
236
+ [screen changeOwnOptions:^(ANNNavigationOptions *ownOptions) {
237
+ ownOptions.topBar.title.component = [ANNTopBarTitleComponentOptions new];
238
+ }];
239
+ options = [screen resolveOptionsWithDefault];
240
+ }
241
+ if (own && [self writeSideColorsOf:topBar]) {
242
+ options = [screen resolveOptionsWithDefault];
243
+ }
244
+ // The search takes every merge, shown or not: it waits for the appearance itself for what needs it (a focus,
245
+ // `hideOnScroll`), and `visible: false` must close it before the screen shows again.
246
+ if (topBar.searchBar.hasValue) {
247
+ [_search mergeOptions:topBar.searchBar resolvedOptions:options.topBar.searchBar];
248
+ }
249
+ // A screen not shown only keeps the merge in its options: the bar takes it at its appearance.
250
+ if (_phase == ANNBarPhaseHidden) {
251
+ return;
252
+ }
253
+ if (topBar.hasValue) {
254
+ [self applyLook:options];
255
+ }
256
+ if (topBar.title.hasValue || topBar.subtitle.hasValue || topBar.largeTitle.hasValue ||
257
+ textWins || topBar.testID.hasValue) {
258
+ [self applyTitle:options textWins:textWins];
259
+ }
260
+ ANNTopBarTitleOptions *title = topBar.title;
261
+ if (title.menu.items != nil || title.rename.hasValue || title.document.hasValue) {
262
+ [self applyTitleMenu:options];
263
+ }
264
+ if (topBar.backButton.hasValue) {
265
+ [ANNBackButtonPresenter applyOptions:options ofScreen:screen];
266
+ [self updateBackAction];
267
+ // The shown back button takes a new look (its font, color and arrow) only when UIKit builds it again.
268
+ ANNTopBarBackButtonOptions *backButton = topBar.backButton;
269
+ if (backButton.font.hasValue || backButton.color.hasValue || backButton.icon.hasValue ||
270
+ backButton.sfSymbol.hasValue || backButton.iconBackground.hasValue) {
271
+ [ANNBackButtonPresenter rebuildBackButtonOfScreen:screen];
272
+ }
273
+ }
274
+ [self mergeItemOptions:topBar options:options];
275
+ [self mergeButtons:topBar options:options];
276
+ if ([ANNToolbarPresenter mergeChangesToolbar:mergeOptions]) {
277
+ [self applyToolbar:options animated:YES];
278
+ }
279
+ if (topBar.largeTitle.displayMode.hasValue || topBar.largeTitle.visible.hasValue) {
280
+ [_largeTitle applyMode:options shownTop:[self isShownTop]];
281
+ }
282
+ if (topBar.largeTitle.hasValue) {
283
+ [_largeTitle applyCollapse:options list:[self followedList]];
284
+ }
285
+ if (topBar.background.component.hasValue) {
286
+ [self applyBackgroundComponent:options];
287
+ [self updateBackgroundPlacement];
288
+ }
289
+ // The edge effect again whole when the merge changes it or what it depends on.
290
+ if (mergeOptions.scrollEdgeEffect.hasValue || topBar.background.color.hasValue ||
291
+ topBar.background.component.hasValue) {
292
+ [[self edgeEffects] applyToAllWithOptions:options];
293
+ }
294
+ [self updateListFill:options];
295
+ [self updateComponentsInBar:options];
296
+ }
297
+
298
+ - (void)applyDefaultOptionsChange:(ANNNavigationOptions *)resolvedOptions {
299
+ if (!_screen) {
300
+ return;
301
+ }
302
+ [self applyLook:resolvedOptions];
303
+ [self applyTitle:resolvedOptions textWins:NO];
304
+ [self applyAllButtons:resolvedOptions animated:NO];
305
+ [self applyToolbar:resolvedOptions animated:NO];
306
+ // The search keeps what was typed: the module sets the text of the options only once.
307
+ [_search applyOptions:resolvedOptions.topBar.searchBar];
308
+ [self updateListFill:resolvedOptions];
309
+ [self updateComponentsInBar:resolvedOptions];
310
+ }
311
+
312
+ #pragma mark - The toolbar
313
+
314
+ // The screen's toolbar items. UIKit places the search bar where it goes only when the search controller is set, not
315
+ // when `toolbar.buttons` puts its `searchField` among the items or takes it out: the search places it again then, both
316
+ // ways.
317
+ - (void)applyToolbar:(ANNNavigationOptions *)options animated:(BOOL)animated {
318
+ UIViewController *screen = _screen;
319
+ BOOL hadSearchField = [self toolbarHasSearchField];
320
+ [ANNToolbarPresenter applyOptions:options ofScreen:screen buttons:_buttons animated:animated];
321
+ if (@available(iOS 26.0, *)) {
322
+ if (hadSearchField != [self toolbarHasSearchField]) {
323
+ [_search placeSearchBarAgain];
324
+ }
325
+ }
326
+ }
327
+
328
+ - (BOOL)toolbarHasSearchField {
329
+ if (@available(iOS 26.0, *)) {
330
+ UIViewController *screen = _screen;
331
+ UINavigationItem *item = screen.navigationItem;
332
+ // Without a search controller UIKit ignores the item; asking for it would only create it.
333
+ if (!item.searchController || screen.toolbarItems.count == 0) {
334
+ return NO;
335
+ }
336
+ UIBarButtonItem *field = item.searchBarPlacementBarButtonItem;
337
+ return [screen.toolbarItems indexOfObjectIdenticalTo:field] != NSNotFound;
338
+ }
339
+ return NO;
340
+ }
341
+
342
+ #pragma mark - The look
343
+
344
+ - (void)applyLook:(ANNNavigationOptions *)options {
345
+ UIViewController *screen = _screen;
346
+ UINavigationItem *item = screen.navigationItem;
347
+ // The screen's own looks, filled whole and set again (the item copies them).
348
+ UINavigationBarAppearance *standard =
349
+ [item.standardAppearance copy] ?: [UINavigationBarAppearance new];
350
+ UINavigationBarAppearance *edge =
351
+ [item.scrollEdgeAppearance copy] ?: [UINavigationBarAppearance new];
352
+ UITraitCollection *traits =
353
+ screen.viewIfLoaded.window.traitCollection ?: screen.traitCollection;
354
+ [ANNBarAppearance fillStandard:standard
355
+ scrollEdge:edge
356
+ withOptions:options
357
+ context:[self appearanceContextOf:options]
358
+ traits:traits];
359
+ if (_pinnedTraits && ANNIsIOS26()) {
360
+ [self pinTitleColorsOf:standard edge:edge options:options traits:_pinnedTraits];
361
+ }
362
+ item.standardAppearance = standard;
363
+ item.scrollEdgeAppearance = edge;
364
+ }
365
+
366
+ // The title colors resolved for `traits`: fixed colors that don't follow the glass's style.
367
+ - (void)pinTitleColorsOf:(UINavigationBarAppearance *)standard
368
+ edge:(UINavigationBarAppearance *)edge
369
+ options:(ANNNavigationOptions *)options
370
+ traits:(UITraitCollection *)traits {
371
+ ANNTopBarOptions *topBar = options.topBar;
372
+ NSMutableDictionary<NSAttributedStringKey, id> *title =
373
+ [standard.titleTextAttributes mutableCopy];
374
+ title[NSForegroundColorAttributeName] =
375
+ [ANNBarAppearance pinnedTitleColor:topBar.title.color traits:traits];
376
+ standard.titleTextAttributes = title;
377
+ ANNTopBarScrollEdgeAppearanceTitleOptions *edgeOptions = topBar.scrollEdgeAppearance.title;
378
+ Color *edgeColor = edgeOptions.hasValue ? edgeOptions.color : topBar.title.color;
379
+ NSMutableDictionary<NSAttributedStringKey, id> *edgeTitle =
380
+ [edge.titleTextAttributes mutableCopy];
381
+ edgeTitle[NSForegroundColorAttributeName] =
382
+ [ANNBarAppearance pinnedTitleColor:edgeColor traits:traits];
383
+ edge.titleTextAttributes = edgeTitle;
384
+ }
385
+
386
+ // The pin holds through every look applied during the push (a merge, a change of the defaults) and goes at its end,
387
+ // unless a later push pinned again.
388
+ - (void)pinTitleColorAlong:(id<UIViewControllerTransitionCoordinator>)coordinator
389
+ traits:(UITraitCollection *)traits {
390
+ UIViewController *screen = _screen;
391
+ if (!screen || !ANNIsIOS26()) {
392
+ return;
393
+ }
394
+ NSUInteger token = ++_pinToken;
395
+ _pinnedTraits = traits;
396
+ [self applyLook:[screen resolveOptionsWithDefault]];
397
+ __weak ANNTopBarPresenter *weakSelf = self;
398
+ void (^restore)(id<UIViewControllerTransitionCoordinatorContext>) =
399
+ ^(id<UIViewControllerTransitionCoordinatorContext> context) {
400
+ [weakSelf endTitleColorPin:token];
401
+ };
402
+ BOOL along = [coordinator animateAlongsideTransition:nil completion:restore];
403
+ if (!along) {
404
+ [self endTitleColorPin:token];
405
+ }
406
+ }
407
+
408
+ - (void)endTitleColorPin:(NSUInteger)token {
409
+ if (token != _pinToken || !_pinnedTraits) {
410
+ return;
411
+ }
412
+ _pinnedTraits = nil;
413
+ UIViewController *screen = _screen;
414
+ if (!screen) {
415
+ return;
416
+ }
417
+ [self applyLook:[screen resolveOptionsWithDefault]];
418
+ // A stack merge during the push copied the pinned look into the bar's own copy (iOS 26): it takes the item's again.
419
+ if ([self isUIKitTop]) {
420
+ [[self stack] applySharedBarAnimated:NO visibility:ANNSharedBarVisibilityNone];
421
+ }
422
+ }
423
+
424
+ #pragma mark - The title area
425
+
426
+ - (void)applyTitle:(ANNNavigationOptions *)options textWins:(BOOL)textWins {
427
+ UIViewController *screen = _screen;
428
+ UINavigationItem *item = screen.navigationItem;
429
+ ANNTopBarOptions *topBar = options.topBar;
430
+ ANNTopBarTitleOptions *title = topBar.title;
431
+ if (!_native || title.text.hasValue) {
432
+ item.title = [title.text withDefault:nil];
433
+ }
434
+ NSString *subtitle = [topBar.subtitle.text withDefault:nil];
435
+ NSString *glass = [title.glass withDefault:nil];
436
+ BOOL glassShows = NO;
437
+ if (@available(iOS 26.0, *)) {
438
+ glassShows = [ANNTitleGlassView isGlass:glass];
439
+ }
440
+ [self applySubtitle:options glass:glassShows];
441
+
442
+ // A React title (without a name there is none, and the current one goes; the text stays).
443
+ UIView<ANNComponentProtocol> *root = nil;
444
+ if (!textWins && ![self ownTextHidesComponent] && ANNHasComponentName(title.component)) {
445
+ root = [_registry componentView:title.component type:ANNComponentTypeTopBarTitle];
446
+ }
447
+ if (root && _titleComponent.content != root) {
448
+ _titleComponent = [[ANNTitleComponentView alloc] initWithContent:root];
449
+ __weak ANNTopBarPresenter *weakSelf = self;
450
+ _titleComponent.sizeDidChange = ^{
451
+ [weakSelf titleSizeDidChange];
452
+ };
453
+ } else if (!root) {
454
+ _titleComponent = nil;
455
+ }
456
+ NSString *alignment = [title.component.alignment withDefault:@"center"];
457
+ _titleComponent.fills = [alignment isEqualToString:@"fill"];
458
+ // A `fill` title takes its row before the capsule and the item take it, so both see its final size.
459
+ BOOL fillMoved = [self placeFillTitle];
460
+
461
+ UIView *titleView = nil;
462
+ if (glassShows) {
463
+ if (@available(iOS 26.0, *)) {
464
+ if (_titleComponent) {
465
+ titleView = [[ANNTitleGlassView alloc] initWithGlass:glass
466
+ component:_titleComponent
467
+ options:options];
468
+ } else {
469
+ titleView = [[ANNTitleGlassView alloc] initWithGlass:glass options:options];
470
+ }
471
+ }
472
+ } else if (_titleComponent) {
473
+ titleView = _titleComponent;
474
+ } else if (!ANNIsIOS26() && subtitle.length > 0 && !ANNLargeTitleCanShow(options)) {
475
+ // Before iOS 26 a subtitle is a two-label title, without a large title that can show.
476
+ titleView = [[ANNTitleView alloc] initWithOptions:options];
477
+ }
478
+ _titleGlass = glassShows ? titleView : nil;
479
+ // A title view the app's own item has (a native screen) stays while the core shows none; one the core set goes
480
+ // (a stopped React title, a capsule turned off).
481
+ UIView *current = item.titleView;
482
+ if (!titleView && current && current != _coreTitleView) {
483
+ return;
484
+ }
485
+ if (current != titleView) {
486
+ item.titleView = titleView;
487
+ }
488
+ _coreTitleView = titleView;
489
+ // The view the item already had changed its row: UIKit measures it only as it is set.
490
+ if (fillMoved && current == titleView) {
491
+ [self titleSizeDidChange];
492
+ }
493
+ }
494
+
495
+ // The layers of the title: the screen's own text hides a component of its stack or of the defaults; a component in the
496
+ // screen's own options shows over its own text.
497
+ - (BOOL)ownTextHidesComponent {
498
+ ANNTopBarTitleOptions *own = _screen.options.topBar.title;
499
+ return own.text.hasValue && !own.text.isNull && !ANNHasComponentName(own.component);
500
+ }
501
+
502
+ // iOS 26: the system subtitle under the title and under the large title, with only the attributes given (a color, or
503
+ // a whole font of `fontSize` or the place's size, 12 / 11 pt); on the glass the small one is a line of the capsule.
504
+ - (void)applySubtitle:(ANNNavigationOptions *)options glass:(BOOL)glass {
505
+ if (@available(iOS 26.0, *)) {
506
+ UINavigationItem *item = _screen.navigationItem;
507
+ ANNTopBarSubtitleOptions *subtitle = options.topBar.subtitle;
508
+ NSString *text = [subtitle.text withDefault:nil];
509
+ if (_native && !subtitle.text.hasValue) {
510
+ return;
511
+ }
512
+ if (text.length == 0) {
513
+ item.attributedSubtitle = nil;
514
+ item.largeAttributedSubtitle = nil;
515
+ return;
516
+ }
517
+ item.attributedSubtitle =
518
+ glass ? nil : [self subtitle:text options:subtitle placeSize:12];
519
+ item.largeAttributedSubtitle = [self subtitle:text options:subtitle placeSize:11];
520
+ }
521
+ }
522
+
523
+ - (NSAttributedString *)subtitle:(NSString *)text
524
+ options:(ANNTopBarSubtitleOptions *)subtitle
525
+ placeSize:(CGFloat)placeSize {
526
+ NSMutableDictionary<NSAttributedStringKey, id> *attributes = [NSMutableDictionary new];
527
+ UIFont *font = [subtitle.font fontWithPlaceFont:[UIFont systemFontOfSize:placeSize]];
528
+ if (font) {
529
+ attributes[NSFontAttributeName] = font;
530
+ }
531
+ Color *color = subtitle.color;
532
+ if (color.hasValue && !color.isNoColor) {
533
+ attributes[NSForegroundColorAttributeName] =
534
+ [color withDefault:UIColor.secondaryLabelColor];
535
+ }
536
+ return [[NSAttributedString alloc] initWithString:text attributes:attributes];
537
+ }
538
+
539
+ // A centred React title changed its size: UIKit measures the view only as it is set.
540
+ - (void)titleSizeDidChange {
541
+ UINavigationItem *item = _screen.navigationItem;
542
+ UIView *titleView = item.titleView;
543
+ if (@available(iOS 26.0, *)) {
544
+ if ([titleView isKindOfClass:ANNTitleGlassView.class]) {
545
+ [(ANNTitleGlassView *)titleView componentSizeDidChange];
546
+ }
547
+ }
548
+ if (titleView == _titleComponent || titleView == _titleGlass) {
549
+ item.titleView = nil;
550
+ item.titleView = titleView;
551
+ }
552
+ }
553
+
554
+ // A `fill` React title takes the row of the bar, once the screen is in its stack: the bar's width, 44 pt on iOS 26;
555
+ // before it 44 pt (50 pt on iPad), never taller than the bar (the compact landscape bar is shorter). YES when the row
556
+ // changed. The row placed last is the measure, not the frame: UIKit narrows that between the buttons.
557
+ - (BOOL)placeFillTitle {
558
+ ANNTitleComponentView *title = _titleComponent;
559
+ UINavigationBar *bar = [self shownBar];
560
+ if (!title.fills || !bar) {
561
+ return NO;
562
+ }
563
+ CGFloat height = ANNTitleRowHeight;
564
+ if (!ANNIsIOS26()) {
565
+ if (_screen.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
566
+ height = ANNTitleRowHeightPad;
567
+ }
568
+ if (bar.bounds.size.height > 0) {
569
+ height = MIN(height, bar.bounds.size.height);
570
+ }
571
+ }
572
+ CGSize row = CGSizeMake(bar.bounds.size.width, height);
573
+ if (CGSizeEqualToSize(title.rowSize, row)) {
574
+ return NO;
575
+ }
576
+ title.rowSize = row;
577
+ title.frame = CGRectMake(0, 0, row.width, row.height);
578
+ [title invalidateIntrinsicContentSize];
579
+ return YES;
580
+ }
581
+
582
+ // At an appearance and at a layout of the screen the row may have changed (the screen is in its stack now, a
583
+ // rotation): the item then gets its title view again, the capsule resized around it.
584
+ - (void)layOutFillTitle {
585
+ if ([self placeFillTitle]) {
586
+ [self titleSizeDidChange];
587
+ }
588
+ }
589
+
590
+ // The title menu (iOS 16+): built from the screen's resolved options at each open — Rename first, then the items;
591
+ // `items: []` removes it unless `rename` or `document` is set.
592
+ - (void)applyTitleMenu:(ANNNavigationOptions *)options {
593
+ if (@available(iOS 16.0, *)) {
594
+ UINavigationItem *item = _screen.navigationItem;
595
+ ANNTopBarTitleOptions *title = options.topBar.title;
596
+ if (_native && !title.menu.hasValue && !title.rename.hasValue && !title.document.hasValue) {
597
+ return;
598
+ }
599
+ BOOL rename = [title.rename withDefault:NO];
600
+ NSURL *documentURL =
601
+ [ANNTopBarPresenter documentURLOf:[title.document.url withDefault:nil]];
602
+ item.renameDelegate = rename ? self : nil;
603
+ item.documentProperties =
604
+ documentURL ? [[UIDocumentProperties alloc] initWithURL:documentURL] : nil;
605
+ if (title.menu.items.count == 0 && !rename && !documentURL) {
606
+ item.titleMenuProvider = nil;
607
+ return;
608
+ }
609
+ __weak ANNTopBarPresenter *weakSelf = self;
610
+ item.titleMenuProvider = ^UIMenu *(NSArray<UIMenuElement *> *suggestedActions) {
611
+ return [weakSelf titleMenuWithSuggestedActions:suggestedActions];
612
+ };
613
+ }
614
+ }
615
+
616
+ + (nullable NSURL *)documentURLOf:(nullable NSString *)url {
617
+ if (url.length == 0) {
618
+ return nil;
619
+ }
620
+ NSURL *parsed = [NSURL URLWithString:url];
621
+ if (parsed.scheme.length > 0) {
622
+ return parsed;
623
+ }
624
+ return [NSURL fileURLWithPath:[url stringByExpandingTildeInPath]];
625
+ }
626
+
627
+ - (UIMenu *)titleMenuWithSuggestedActions:(NSArray<UIMenuElement *> *)suggestedActions
628
+ API_AVAILABLE(ios(16.0)) {
629
+ ANNNavigationOptions *options = [_screen resolveOptionsWithDefault];
630
+ ANNTopBarTitleOptions *title = options.topBar.title;
631
+ NSMutableArray<UIMenuElement *> *children = [NSMutableArray new];
632
+ if ([title.rename withDefault:NO]) {
633
+ NSArray<UIMenuElement *> *rename = ANNRenameElementsOf(suggestedActions);
634
+ if (rename.count > 0) {
635
+ [children addObject:[UIMenu menuWithTitle:@""
636
+ image:nil
637
+ identifier:nil
638
+ options:UIMenuOptionsDisplayInline
639
+ children:rename]];
640
+ }
641
+ }
642
+ NSString *menuTitle = @"";
643
+ if (title.menu.items.count > 0) {
644
+ __weak ANNBarButtons *buttons = _buttons;
645
+ UIMenu *menu = [title.menu menuWithPickHandler:^(NSString *itemId) {
646
+ [buttons menuItemPicked:itemId
647
+ menuOf:^ANNMenuOptions *(ANNNavigationOptions *resolved) {
648
+ return resolved.topBar.title.menu;
649
+ }
650
+ setMenu:^(ANNNavigationOptions *own, ANNMenuOptions *copy) {
651
+ own.topBar.title.menu = copy;
652
+ }];
653
+ }];
654
+ menuTitle = menu.title;
655
+ [children addObjectsFromArray:menu.children];
656
+ }
657
+ return [UIMenu menuWithTitle:menuTitle children:children];
658
+ }
659
+
660
+ #pragma mark - UINavigationItemRenameDelegate
661
+
662
+ // Empty or blank: the old title back, no event; the same: nothing; new: the screen's own `title.text`, the title drawn
663
+ // again, then `ANN.TitleRenamed`.
664
+ - (void)navigationItem:(UINavigationItem *)navigationItem
665
+ didEndRenamingWithTitle:(NSString *)title {
666
+ UIViewController *screen = _screen;
667
+ if (!screen) {
668
+ return;
669
+ }
670
+ NSString *old = [[screen resolveOptionsWithDefault].topBar.title.text withDefault:nil] ?: @"";
671
+ NSString *trimmed =
672
+ [title stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
673
+ if (trimmed.length == 0) {
674
+ navigationItem.title = old;
675
+ return;
676
+ }
677
+ if ([title isEqualToString:old]) {
678
+ return;
679
+ }
680
+ [screen changeOwnOptions:^(ANNNavigationOptions *own) {
681
+ own.topBar.title.text = [Text withValue:title];
682
+ }];
683
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
684
+ [self applyTitle:options textWins:NO];
685
+ NSString *componentId = screen.layoutInfo.componentId;
686
+ if (componentId.length > 0) {
687
+ [screen.eventEmitter sendTitleRenamed:componentId text:title];
688
+ }
689
+ }
690
+
691
+ #pragma mark - The item's other options
692
+
693
+ - (void)applyItemOptions:(ANNNavigationOptions *)options {
694
+ UINavigationItem *item = _screen.navigationItem;
695
+ ANNTopBarOptions *topBar = options.topBar;
696
+ if (@available(iOS 16.0, *)) {
697
+ // Without the option UIKit's style is left.
698
+ NSString *style = [topBar.style withDefault:nil];
699
+ if ([style isEqualToString:@"browser"]) {
700
+ item.style = UINavigationItemStyleBrowser;
701
+ } else if ([style isEqualToString:@"editor"]) {
702
+ item.style = UINavigationItemStyleEditor;
703
+ } else if ([style isEqualToString:@"navigator"]) {
704
+ item.style = UINavigationItemStyleNavigator;
705
+ }
706
+ }
707
+ [self applyMinimization:topBar];
708
+ [self applyVerticalBarKeeps:topBar];
709
+ }
710
+
711
+ - (void)mergeItemOptions:(ANNTopBarOptions *)merge options:(ANNNavigationOptions *)options {
712
+ if (merge.style.hasValue) {
713
+ [self applyItemOptions:options];
714
+ return;
715
+ }
716
+ if (merge.hideOnScroll.hasValue) {
717
+ [self applyMinimization:options.topBar];
718
+ }
719
+ if (merge.verticalBarKeeps.hasValue) {
720
+ [self applyVerticalBarKeeps:options.topBar];
721
+ }
722
+ }
723
+
724
+ // iOS 27: the bar minimizes as the content scrolls down only with `hideOnScroll`; otherwise never by itself.
725
+ - (void)applyMinimization:(ANNTopBarOptions *)topBar {
726
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 270000
727
+ if (@available(iOS 27.0, *)) {
728
+ UINavigationItem *item = _screen.navigationItem;
729
+ UIBarMinimization *minimization =
730
+ [item.navigationBarMinimization copy] ?: [UIBarMinimization new];
731
+ minimization.minimizationBehavior = [topBar.hideOnScroll withDefault:NO]
732
+ ? UIBarMinimizationBehaviorOnScrollDown
733
+ : UIBarMinimizationBehaviorNever;
734
+ item.navigationBarMinimization = minimization;
735
+ }
736
+ #endif
737
+ }
738
+
739
+ // iOS 27.1: which of the tabs and the bar's buttons keep their place in the vertical bar.
740
+ - (void)applyVerticalBarKeeps:(ANNTopBarOptions *)topBar {
741
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 270100
742
+ if (@available(iOS 27.1, *)) {
743
+ NSString *keeps = [topBar.verticalBarKeeps withDefault:nil];
744
+ UIVerticalBarCompressionBehavior behavior = UIVerticalBarCompressionBehaviorAutomatic;
745
+ if ([keeps isEqualToString:@"tabs"]) {
746
+ behavior = UIVerticalBarCompressionBehaviorPrefersTabBar;
747
+ } else if ([keeps isEqualToString:@"buttons"]) {
748
+ behavior = UIVerticalBarCompressionBehaviorPrefersBarItems;
749
+ }
750
+ _screen.navigationItem.verticalBarCompressionBehavior = behavior;
751
+ }
752
+ #endif
753
+ }
754
+
755
+ #pragma mark - Buttons
756
+
757
+ - (void)applyAllButtons:(ANNNavigationOptions *)options animated:(BOOL)animated {
758
+ ANNTopBarOptions *topBar = options.topBar;
759
+ // A native screen keeps the buttons its app set where the options have none.
760
+ if (!_native || topBar.leftButtons) {
761
+ [_buttons applySide:ANNBarButtonsSideLeft options:options animated:animated];
762
+ [self updateBackAction];
763
+ }
764
+ if (!_native || topBar.rightButtons) {
765
+ [_buttons applySide:ANNBarButtonsSideRight options:options animated:animated];
766
+ }
767
+ if (!_native || topBar.centerButtons) {
768
+ [_buttons applySide:ANNBarButtonsSideCenter options:options animated:NO];
769
+ }
770
+ if (!_native || topBar.overflowMenu.hasValue) {
771
+ [_buttons applyOverflowMenu:options];
772
+ }
773
+ }
774
+
775
+ // From iOS 26 UIKit animates a change of the bar's items by itself, also with `animated:NO` (no public switch turns it
776
+ // off): `animate…Buttons: false` changes them without the core's own animation only.
777
+ - (void)mergeButtons:(ANNTopBarOptions *)merge options:(ANNNavigationOptions *)options {
778
+ ANNTopBarOptions *topBar = options.topBar;
779
+ if (merge.leftButtons || merge.leftButtonColor.hasValue ||
780
+ merge.leftButtonDisabledColor.hasValue || merge.leftButtonBackgroundColor.hasValue) {
781
+ [_buttons applySide:ANNBarButtonsSideLeft
782
+ options:options
783
+ animated:[topBar.animateLeftButtons withDefault:NO]];
784
+ [self updateBackAction];
785
+ }
786
+ if (merge.rightButtons || merge.rightButtonColor.hasValue ||
787
+ merge.rightButtonDisabledColor.hasValue || merge.rightButtonBackgroundColor.hasValue) {
788
+ [_buttons applySide:ANNBarButtonsSideRight
789
+ options:options
790
+ animated:[topBar.animateRightButtons withDefault:NO]];
791
+ }
792
+ if (merge.centerButtons || merge.centerButtonColor.hasValue ||
793
+ merge.centerButtonDisabledColor.hasValue || merge.customizationId.hasValue) {
794
+ [_buttons applySide:ANNBarButtonsSideCenter options:options animated:NO];
795
+ }
796
+ if (merge.overflowMenu.hasValue || merge.overflowMenu.items) {
797
+ [_buttons applyOverflowMenu:options];
798
+ }
799
+ }
800
+
801
+ // A side color from a merge goes into the screen's own buttons, their own colors included, so it survives a new
802
+ // appearance and a theme change; a side background color into the own image buttons. Buttons from the defaults or the
803
+ // parents never get it. YES when the own options changed.
804
+ - (BOOL)writeSideColorsOf:(ANNTopBarOptions *)merge {
805
+ UIViewController *screen = _screen;
806
+ ANNTopBarOptions *own = screen.options.topBar;
807
+ BOOL left = (merge.leftButtonColor.hasValue || merge.leftButtonBackgroundColor.hasValue) &&
808
+ own.leftButtons;
809
+ BOOL right = (merge.rightButtonColor.hasValue || merge.rightButtonBackgroundColor.hasValue) &&
810
+ own.rightButtons;
811
+ BOOL center = merge.centerButtonColor.hasValue && own.centerButtons;
812
+ if (!left && !right && !center) {
813
+ return NO;
814
+ }
815
+ [screen changeOwnOptions:^(ANNNavigationOptions *options) {
816
+ ANNTopBarOptions *topBar = options.topBar;
817
+ if (left) {
818
+ topBar.leftButtons = [ANNTopBarPresenter buttons:topBar.leftButtons
819
+ withColor:merge.leftButtonColor
820
+ background:merge.leftButtonBackgroundColor];
821
+ }
822
+ if (right) {
823
+ topBar.rightButtons = [ANNTopBarPresenter buttons:topBar.rightButtons
824
+ withColor:merge.rightButtonColor
825
+ background:merge.rightButtonBackgroundColor];
826
+ }
827
+ if (center) {
828
+ topBar.centerButtons = [ANNTopBarPresenter buttons:topBar.centerButtons
829
+ withColor:merge.centerButtonColor
830
+ background:nil];
831
+ }
832
+ }];
833
+ return YES;
834
+ }
835
+
836
+ + (NSArray<ANNButtonOptions *> *)buttons:(NSArray<ANNButtonOptions *> *)buttons
837
+ withColor:(Color *)color
838
+ background:(nullable Color *)background {
839
+ NSMutableArray<ANNButtonOptions *> *changed = [NSMutableArray arrayWithCapacity:buttons.count];
840
+ for (ANNButtonOptions *button in buttons) {
841
+ ANNButtonOptions *copy = [button copy];
842
+ if (button.menu.items.count > 0) {
843
+ copy.menu = [ANNBarButtons deepCopyOfMenu:button.menu];
844
+ }
845
+ if (color.hasValue) {
846
+ copy.color = color;
847
+ }
848
+ // Only image buttons (`icon`, not SF Symbols) take a side's background.
849
+ BOOL imageIcon =
850
+ [button.icon withDefault:nil] && [button.sfSymbol withDefault:nil].length == 0;
851
+ if (background.hasValue && imageIcon) {
852
+ copy.iconBackground.color = background;
853
+ }
854
+ [changed addObject:copy];
855
+ }
856
+ return changed;
857
+ }
858
+
859
+ // Left buttons replace the back button, `backButton.visible: false` hides it: the stack's back action, which would make
860
+ // UIKit show one anyway, goes then.
861
+ - (void)updateBackAction {
862
+ UIViewController *screen = _screen;
863
+ ANNStackController *stack = [self stack];
864
+ UIViewController *entry = [stack entryOf:screen];
865
+ if (entry && ANNStackOptionsScreen(entry) == screen) {
866
+ [stack updateBackActionOf:entry];
867
+ }
868
+ }
869
+
870
+ #pragma mark - The React components of the bar
871
+
872
+ - (void)applyBackgroundComponent:(ANNNavigationOptions *)options {
873
+ ANNTopBarBackgroundComponentOptions *component = options.topBar.background.component;
874
+ UIView<ANNComponentProtocol> *root = nil;
875
+ if (ANNHasComponentName(component)) {
876
+ root = [_registry componentView:component type:ANNComponentTypeTopBarBackground];
877
+ }
878
+ if (!root) {
879
+ _background = nil;
880
+ return;
881
+ }
882
+ if (_background.content != root) {
883
+ _background = [[ANNBarBackgroundComponent alloc] initWithContent:root];
884
+ }
885
+ }
886
+
887
+ - (void)collectWaitedComponents:(void (^)(NSString *componentId, BOOL isButton))collect {
888
+ UIViewController *screen = _screen;
889
+ if (!screen) {
890
+ return;
891
+ }
892
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
893
+ ANNTopBarOptions *topBar = options.topBar;
894
+ ANNTopBarTitleComponentOptions *title = topBar.title.component;
895
+ if (ANNHasComponentName(title) && [title.waitForRender withDefault:YES] &&
896
+ ![self ownTextHidesComponent]) {
897
+ UIView<ANNComponentProtocol> *root =
898
+ [_registry componentView:title type:ANNComponentTypeTopBarTitle];
899
+ if (root && ![_registry isComponentReady:root.componentId]) {
900
+ collect(root.componentId, NO);
901
+ }
902
+ }
903
+ ANNTopBarBackgroundComponentOptions *background = topBar.background.component;
904
+ if (ANNHasComponentName(background) && [background.waitForRender withDefault:YES]) {
905
+ UIView<ANNComponentProtocol> *root =
906
+ [_registry componentView:background type:ANNComponentTypeTopBarBackground];
907
+ if (root && ![_registry isComponentReady:root.componentId]) {
908
+ collect(root.componentId, NO);
909
+ }
910
+ }
911
+ for (UIView<ANNComponentProtocol> *root in [_buttons componentButtonsOf:options]) {
912
+ if (![_registry isComponentReady:root.componentId]) {
913
+ collect(root.componentId, YES);
914
+ }
915
+ }
916
+ }
917
+
918
+ // What the bar shows of the screen's components now: those that came hear the screen's moment as it stands, those that
919
+ // went hear `DidDisappear` and stop at once.
920
+ - (void)updateComponentsInBar:(ANNNavigationOptions *)options {
921
+ NSMutableDictionary<NSString *, UIView<ANNComponentProtocol> *> *current =
922
+ [NSMutableDictionary new];
923
+ UIView<ANNComponentProtocol> *title = _titleComponent.content;
924
+ if (title) {
925
+ current[title.componentId] = title;
926
+ }
927
+ UIView<ANNComponentProtocol> *background = _background.content;
928
+ if (background) {
929
+ current[background.componentId] = background;
930
+ }
931
+ NSMutableSet<NSString *> *buttonIds = [NSMutableSet new];
932
+ for (UIView<ANNComponentProtocol> *button in [_buttons componentButtonsOf:options]) {
933
+ current[button.componentId] = button;
934
+ [buttonIds addObject:button.componentId];
935
+ }
936
+ [_buttons keepSlotsOf:buttonIds];
937
+ for (NSString *componentId in _inBar.allKeys) {
938
+ UIView<ANNComponentProtocol> *shown = _inBar[componentId];
939
+ if (current[componentId] != shown) {
940
+ [shown componentDidDisappear];
941
+ }
942
+ }
943
+ // Roots of the bar nobody names any more stop now (the search's results are the module's).
944
+ for (UIView<ANNComponentProtocol> *root in _registry.allComponents) {
945
+ if (root.componentType != ANNComponentTypeComponent && current[root.componentId] != root) {
946
+ [_registry removeChildComponent:root.componentId];
947
+ }
948
+ }
949
+ for (NSString *componentId in current) {
950
+ UIView<ANNComponentProtocol> *component = current[componentId];
951
+ if (_inBar[componentId] == component) {
952
+ continue;
953
+ }
954
+ if (_phase != ANNBarPhaseHidden) {
955
+ [component componentWillAppear];
956
+ }
957
+ if (_phase == ANNBarPhaseDidAppear) {
958
+ [component componentDidAppear];
959
+ }
960
+ }
961
+ _inBar = current;
962
+ }
963
+
964
+ #pragma mark - The screen's moments
965
+
966
+ - (void)screenWillAppear {
967
+ _phase = ANNBarPhaseWillAppear;
968
+ for (UIView<ANNComponentProtocol> *component in _inBar.allValues) {
969
+ [component componentWillAppear];
970
+ }
971
+ }
972
+
973
+ - (void)screenDidAppear {
974
+ _phase = ANNBarPhaseDidAppear;
975
+ for (UIView<ANNComponentProtocol> *component in _inBar.allValues) {
976
+ [component componentDidAppear];
977
+ }
978
+ [_search componentDidAppear];
979
+ UIViewController *screen = _screen;
980
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
981
+ BOOL band = [_largeTitle drawsTitleBand];
982
+ [_largeTitle screenDidAppear:options list:[self followedList]];
983
+ [_largeTitle removeTitlePlaceFill];
984
+ // The bar's own look again, now that the title is in the bar.
985
+ if (band) {
986
+ [self applyLook:options];
987
+ }
988
+ [self layOutFillTitle];
989
+ [self updateBackgroundPlacement];
990
+ }
991
+
992
+ - (void)screenDidDisappear {
993
+ _phase = ANNBarPhaseHidden;
994
+ for (UIView<ANNComponentProtocol> *component in _inBar.allValues) {
995
+ [component componentDidDisappear];
996
+ }
997
+ [_search componentDidDisappear];
998
+ UIViewController *screen = _screen;
999
+ BOOL band = [_largeTitle drawsTitleBand];
1000
+ if (screen) {
1001
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1002
+ [_largeTitle screenDidDisappear:options list:[self followedList]];
1003
+ }
1004
+ // The lists the screen set leave with it; its color and its React background leave the main list.
1005
+ [self releaseLists];
1006
+ _bandKeepsLook = NO;
1007
+ // A swipe back given up: the screen keeps the bar's own look for its next appearance.
1008
+ if (band && screen) {
1009
+ [self applyLook:[screen resolveOptionsWithDefault]];
1010
+ }
1011
+ }
1012
+
1013
+ - (void)releaseLists {
1014
+ [_edgeEffects reset];
1015
+ [_largeTitle removeListFill];
1016
+ [_largeTitle removeTitlePlaceFill];
1017
+ [_largeTitle removeTitleHost];
1018
+ [self stopObservingList];
1019
+ [_background returnFromListToBar:[self shownBar]];
1020
+ }
1021
+
1022
+ - (void)stopComponents {
1023
+ [self stopObservingList];
1024
+ [_registry stopAll];
1025
+ [_inBar removeAllObjects];
1026
+ _titleComponent = nil;
1027
+ _background = nil;
1028
+ }
1029
+
1030
+ #pragma mark - Lists
1031
+
1032
+ - (nullable ANNScrollEdgeEffects *)edgeEffects {
1033
+ UIView *view = _screen.viewIfLoaded;
1034
+ if (!_edgeEffects && view) {
1035
+ _edgeEffects = [[ANNScrollEdgeEffects alloc] initWithScreenView:view];
1036
+ }
1037
+ return _edgeEffects;
1038
+ }
1039
+
1040
+ - (nullable ANNMainList *)mainList {
1041
+ UIView *view = _screen.viewIfLoaded;
1042
+ if (!_mainList && view) {
1043
+ _mainList = [[ANNMainList alloc] initWithScreenView:view];
1044
+ }
1045
+ return _mainList;
1046
+ }
1047
+
1048
+ // The screen's content tells each of its mounts (the work only for a screen in a window).
1049
+ - (void)watchContentMounts {
1050
+ UIView<ANNComponentProtocol> *content = _screen.reactView;
1051
+ if (!content) {
1052
+ return;
1053
+ }
1054
+ __weak ANNTopBarPresenter *weakSelf = self;
1055
+ [content setContentDidMount:^{
1056
+ [weakSelf contentDidMount];
1057
+ }
1058
+ forKey:ANNTopBarMountKey];
1059
+ }
1060
+
1061
+ // The list the bar follows at the top edge under a large title that folds into it: the main list of a React screen;
1062
+ // a native screen's views are the app's, the bar chooses there by itself.
1063
+ - (nullable UIScrollView *)followedList {
1064
+ return _native ? nil : [[self mainList] list];
1065
+ }
1066
+
1067
+ - (void)contentDidMount {
1068
+ UIViewController *screen = _screen;
1069
+ if (!screen.viewIfLoaded.window || _phase == ANNBarPhaseHidden) {
1070
+ // Lists React took out of the screen get the system edge effect back, in a window or not.
1071
+ [_edgeEffects applyToList:nil options:[screen resolveOptionsWithDefault]];
1072
+ return;
1073
+ }
1074
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1075
+ [[self edgeEffects] applyToList:[[self mainList] list] options:options];
1076
+ [_largeTitle applyCollapse:options list:[self followedList]];
1077
+ [self updateListFill:options];
1078
+ [self updateBackgroundPlacement];
1079
+ }
1080
+
1081
+ - (void)screenDidLayOut {
1082
+ UIViewController *screen = _screen;
1083
+ if (!screen.viewIfLoaded.window || _phase == ANNBarPhaseHidden) {
1084
+ return;
1085
+ }
1086
+ if (_phase == ANNBarPhaseDidAppear) {
1087
+ [_largeTitle noteTopAtRest];
1088
+ }
1089
+ [self updateListFill:[screen resolveOptionsWithDefault]];
1090
+ [self layOutFillTitle];
1091
+ [self updateBackgroundPlacement];
1092
+ }
1093
+
1094
+ - (void)shownFromLowerBarWithBottom:(CGFloat)oldBarBottom {
1095
+ UIViewController *screen = _screen;
1096
+ if (!screen) {
1097
+ return;
1098
+ }
1099
+ [_largeTitle fillTitlePlaceFrom:oldBarBottom
1100
+ list:[[self mainList] list]
1101
+ options:[screen resolveOptionsWithDefault]];
1102
+ }
1103
+
1104
+ // A native screen's views are the app's: the core lays nothing into them. The band behind the title is filled where
1105
+ // the title is, and the look follows it, before UIKit lays the screen out for the transition.
1106
+ - (BOOL)revealedByPop {
1107
+ UIViewController *screen = _screen;
1108
+ if (!screen || _native) {
1109
+ return NO;
1110
+ }
1111
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1112
+ [_largeTitle screenInPop:options list:[self followedList] inlineInRow:[self inlineInRow:options]];
1113
+ return _largeTitle.hostsTitle;
1114
+ }
1115
+
1116
+ - (void)revealedByPopFrom:(ANNPopBar)bar {
1117
+ UIViewController *screen = _screen;
1118
+ if (!screen) {
1119
+ return;
1120
+ }
1121
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1122
+ [_largeTitle fillTitlePlaceOfPopFrom:bar list:[[self mainList] list] options:options];
1123
+ if ([_largeTitle drawsTitleBand]) {
1124
+ [self applyLook:options];
1125
+ }
1126
+ }
1127
+
1128
+ - (void)leavesByPopClearingEdge:(BOOL)clearsEdge {
1129
+ UIViewController *screen = _screen;
1130
+ if (!screen || _native) {
1131
+ return;
1132
+ }
1133
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1134
+ [_largeTitle screenInPop:options list:[self followedList] inlineInRow:[self inlineInRow:options]];
1135
+ if (_largeTitle.hostsTitle) {
1136
+ [_largeTitle fillTitlePlaceFrom:0 list:[[self mainList] list] options:options];
1137
+ }
1138
+ _bandKeepsLook = !clearsEdge;
1139
+ if (clearsEdge && [_largeTitle drawsTitleBand]) {
1140
+ [self applyLook:options];
1141
+ }
1142
+ }
1143
+
1144
+ - (void)popGivenUp {
1145
+ UIViewController *screen = _screen;
1146
+ if (!screen) {
1147
+ return;
1148
+ }
1149
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1150
+ BOOL band = [_largeTitle drawsTitleBand];
1151
+ [_largeTitle popEnded:options list:[self followedList]];
1152
+ [_largeTitle removeTitlePlaceFill];
1153
+ _bandKeepsLook = NO;
1154
+ if (band) {
1155
+ [self applyLook:options];
1156
+ }
1157
+ }
1158
+
1159
+ - (BOOL)clearsBarAtEdge {
1160
+ UIViewController *screen = _screen;
1161
+ return screen && [self appearanceContextOf:[screen resolveOptionsWithDefault]].transparentEdge;
1162
+ }
1163
+
1164
+ #pragma mark - The React background in the list (iOS 26)
1165
+
1166
+ // With a large title that folds into the list, the shown top screen's React background is a fill at the bottom of the
1167
+ // main list while its rows are below the bar — from the screen's top (the bar's top with `clipToBounds`) to the bar's
1168
+ // bottom, to the first row when pulled — and in the bar's background otherwise; again at every move of the list.
1169
+ - (void)updateBackgroundPlacement {
1170
+ ANNBarBackgroundComponent *background = _background;
1171
+ UIViewController *screen = _screen;
1172
+ UINavigationBar *bar = [self shownBar];
1173
+ if (!background || !screen || !bar) {
1174
+ [self stopObservingList];
1175
+ return;
1176
+ }
1177
+ ANNNavigationOptions *options = [screen resolveOptionsWithDefault];
1178
+ BOOL eligible = ANNIsIOS26() && [self isShownTop] && screen.viewIfLoaded.window != nil &&
1179
+ [background isShownInBar:bar] &&
1180
+ [ANNLargeTitlePresenter collapsesIntoList:options] &&
1181
+ ![self inlineInRow:options];
1182
+ UIScrollView *list = eligible ? [[self mainList] list] : nil;
1183
+ if (!list) {
1184
+ [self stopObservingList];
1185
+ [background returnFromListToBar:bar];
1186
+ return;
1187
+ }
1188
+ [self observeList:list];
1189
+ CGFloat barTop = [bar convertPoint:CGPointZero toView:list].y;
1190
+ CGFloat barBottom = [bar convertPoint:CGPointMake(0, CGRectGetMaxY(bar.bounds)) toView:list].y;
1191
+ // The first row is the content's origin.
1192
+ if (barBottom > 0.5) {
1193
+ [background returnFromListToBar:bar];
1194
+ return;
1195
+ }
1196
+ CGFloat top = [options.topBar.background.clipToBounds withDefault:NO]
1197
+ ? barTop
1198
+ : [screen.view convertPoint:CGPointZero toView:list].y;
1199
+ CGFloat bottom = MAX(barBottom, 0);
1200
+ if (bottom <= top) {
1201
+ [background returnFromListToBar:bar];
1202
+ return;
1203
+ }
1204
+ [background placeInList:list frame:CGRectMake(0, top, list.bounds.size.width, bottom - top)];
1205
+ }
1206
+
1207
+ - (void)observeList:(UIScrollView *)list {
1208
+ if (_observedList == list) {
1209
+ return;
1210
+ }
1211
+ [self stopObservingList];
1212
+ [list addObserver:self
1213
+ forKeyPath:@"contentOffset"
1214
+ options:0
1215
+ context:ANNTopBarListOffsetContext];
1216
+ _observedList = list;
1217
+ }
1218
+
1219
+ - (void)stopObservingList {
1220
+ UIScrollView *list = _observedList;
1221
+ if (list) {
1222
+ [list removeObserver:self forKeyPath:@"contentOffset" context:ANNTopBarListOffsetContext];
1223
+ }
1224
+ _observedList = nil;
1225
+ }
1226
+
1227
+ - (void)observeValueForKeyPath:(NSString *)keyPath
1228
+ ofObject:(id)object
1229
+ change:(NSDictionary<NSKeyValueChangeKey, id> *)change
1230
+ context:(void *)context {
1231
+ if (context != ANNTopBarListOffsetContext) {
1232
+ [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
1233
+ return;
1234
+ }
1235
+ [self updateBackgroundPlacement];
1236
+ }
1237
+
1238
+ - (void)updateListFill:(ANNNavigationOptions *)options {
1239
+ UIViewController *screen = _screen;
1240
+ if (!screen.viewIfLoaded.window) {
1241
+ return;
1242
+ }
1243
+ UIScrollView *list = [[self mainList] list];
1244
+ [_largeTitle updateListFill:options
1245
+ list:list
1246
+ inlineInRow:[self inlineInRow:options]
1247
+ backgroundComponent:_background != nil];
1248
+ // The fill of a push from a lower bar follows the list, which may mount only during the push.
1249
+ [_largeTitle updateTitlePlaceFill:options list:list];
1250
+ }
1251
+
1252
+ @end