@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,1125 @@
1
+ #import "ANNBarButtons.h"
2
+ #import "ANNBarButtonComponentView.h"
3
+ #import "ANNIconButtonImage.h"
4
+ #import "ANNShowTextButton.h"
5
+ #import "ANNUIBarButtonItem.h"
6
+ #import "UIViewController+LayoutProtocol.h"
7
+ #import <React/RCTLog.h>
8
+
9
+ // What a button is, by the first of its fields that gives a kind.
10
+ typedef NS_ENUM(NSInteger, ANNBarButtonKind) {
11
+ ANNBarButtonKindNone,
12
+ ANNBarButtonKindComponent,
13
+ ANNBarButtonKindShowText,
14
+ ANNBarButtonKindImageButton,
15
+ ANNBarButtonKindSymbol,
16
+ ANNBarButtonKindImage,
17
+ ANNBarButtonKindText,
18
+ ANNBarButtonKindSystemItem,
19
+ };
20
+
21
+ static const CGFloat ANNBarButtonFontSize = 17;
22
+
23
+ static NSArray<ANNButtonOptions *> *ANNButtonsOfSide(ANNNavigationOptions *options,
24
+ ANNBarButtonsSide side) {
25
+ switch (side) {
26
+ case ANNBarButtonsSideLeft:
27
+ return options.topBar.leftButtons;
28
+ case ANNBarButtonsSideRight:
29
+ return options.topBar.rightButtons;
30
+ case ANNBarButtonsSideCenter:
31
+ return options.topBar.centerButtons;
32
+ case ANNBarButtonsSideToolbar:
33
+ return options.toolbar.buttons;
34
+ }
35
+ return nil;
36
+ }
37
+
38
+ // A new list in the own options (never the one in place: lists of copies share it).
39
+ static void ANNSetButtonsOfSide(ANNNavigationOptions *options, ANNBarButtonsSide side,
40
+ NSArray<ANNButtonOptions *> *buttons) {
41
+ switch (side) {
42
+ case ANNBarButtonsSideLeft:
43
+ options.topBar.leftButtons = buttons;
44
+ break;
45
+ case ANNBarButtonsSideRight:
46
+ options.topBar.rightButtons = buttons;
47
+ break;
48
+ case ANNBarButtonsSideCenter:
49
+ options.topBar.centerButtons = buttons;
50
+ break;
51
+ case ANNBarButtonsSideToolbar:
52
+ options.toolbar.buttons = buttons;
53
+ break;
54
+ }
55
+ }
56
+
57
+ static UIColor *ANNColorOf(Color *color) {
58
+ if (!color.hasValue || color.isNoColor) {
59
+ return nil;
60
+ }
61
+ return [color withDefault:UIColor.tintColor];
62
+ }
63
+
64
+ static Color *ANNSideColor(ANNTopBarOptions *topBar, ANNBarButtonsSide side) {
65
+ switch (side) {
66
+ case ANNBarButtonsSideLeft:
67
+ return topBar.leftButtonColor;
68
+ case ANNBarButtonsSideRight:
69
+ return topBar.rightButtonColor;
70
+ case ANNBarButtonsSideCenter:
71
+ return topBar.centerButtonColor;
72
+ case ANNBarButtonsSideToolbar:
73
+ return nil;
74
+ }
75
+ return nil;
76
+ }
77
+
78
+ static Color *ANNSideDisabledColor(ANNTopBarOptions *topBar, ANNBarButtonsSide side) {
79
+ switch (side) {
80
+ case ANNBarButtonsSideLeft:
81
+ return topBar.leftButtonDisabledColor;
82
+ case ANNBarButtonsSideRight:
83
+ return topBar.rightButtonDisabledColor;
84
+ case ANNBarButtonsSideCenter:
85
+ return topBar.centerButtonDisabledColor;
86
+ case ANNBarButtonsSideToolbar:
87
+ return nil;
88
+ }
89
+ return nil;
90
+ }
91
+
92
+ static Color *ANNSideBackgroundColor(ANNTopBarOptions *topBar, ANNBarButtonsSide side) {
93
+ switch (side) {
94
+ case ANNBarButtonsSideLeft:
95
+ return topBar.leftButtonBackgroundColor;
96
+ case ANNBarButtonsSideRight:
97
+ return topBar.rightButtonBackgroundColor;
98
+ default:
99
+ return nil;
100
+ }
101
+ }
102
+
103
+ static NSString *ANNSymbolOf(ANNButtonOptions *button) {
104
+ NSString *symbol = [button.sfSymbol withDefault:nil];
105
+ return symbol.length > 0 && [UIImage systemImageNamed:symbol] ? symbol : nil;
106
+ }
107
+
108
+ static UIImage *ANNImageOf(ANNButtonOptions *button) {
109
+ return [button.icon withDefault:nil];
110
+ }
111
+
112
+ static NSString *ANNTextOf(ANNButtonOptions *button) {
113
+ NSString *text = [button.text withDefault:nil];
114
+ return text.length > 0 ? text : nil;
115
+ }
116
+
117
+ static BOOL ANNHasComponent(ANNButtonOptions *button) {
118
+ return [button.component.name withDefault:nil].length > 0 &&
119
+ [button.component.componentId withDefault:nil].length > 0;
120
+ }
121
+
122
+ // The image button's background: its own `iconBackground.color`, else (only for an image icon) the side's.
123
+ static UIColor *ANNIconBackgroundOf(ANNButtonOptions *button, Color *sideBackground) {
124
+ UIColor *own = ANNColorOf(button.iconBackground.color);
125
+ if (own) {
126
+ return own;
127
+ }
128
+ return ANNImageOf(button) && !ANNSymbolOf(button) ? ANNColorOf(sideBackground) : nil;
129
+ }
130
+
131
+ static ANNBarButtonKind ANNKindOf(ANNButtonOptions *button, Color *sideBackground) {
132
+ if (ANNHasComponent(button)) {
133
+ return ANNBarButtonKindComponent;
134
+ }
135
+ UIImage *image = ANNImageOf(button);
136
+ NSString *symbol = ANNSymbolOf(button);
137
+ if ([button.showText withDefault:NO] && (image || symbol) && ANNTextOf(button)) {
138
+ return ANNBarButtonKindShowText;
139
+ }
140
+ if (image && (ANNIconBackgroundOf(button, sideBackground) || button.iconInsets.hasValue)) {
141
+ return ANNBarButtonKindImageButton;
142
+ }
143
+ if (symbol) {
144
+ return ANNBarButtonKindSymbol;
145
+ }
146
+ if (image) {
147
+ return ANNBarButtonKindImage;
148
+ }
149
+ if (ANNTextOf(button)) {
150
+ return ANNBarButtonKindText;
151
+ }
152
+ if ([button.systemItem withDefault:nil].length > 0) {
153
+ return ANNBarButtonKindSystemItem;
154
+ }
155
+ return ANNBarButtonKindNone;
156
+ }
157
+
158
+ static UIBarButtonSystemItem ANNSystemItemOf(NSString *name) {
159
+ static NSDictionary<NSString *, NSNumber *> *items;
160
+ static dispatch_once_t once;
161
+ dispatch_once(&once, ^{
162
+ items = @{
163
+ @"done" : @(UIBarButtonSystemItemDone),
164
+ @"cancel" : @(UIBarButtonSystemItemCancel),
165
+ @"edit" : @(UIBarButtonSystemItemEdit),
166
+ @"save" : @(UIBarButtonSystemItemSave),
167
+ @"add" : @(UIBarButtonSystemItemAdd),
168
+ @"flexibleSpace" : @(UIBarButtonSystemItemFlexibleSpace),
169
+ @"fixedSpace" : @(UIBarButtonSystemItemFixedSpace),
170
+ @"compose" : @(UIBarButtonSystemItemCompose),
171
+ @"reply" : @(UIBarButtonSystemItemReply),
172
+ @"action" : @(UIBarButtonSystemItemAction),
173
+ @"organize" : @(UIBarButtonSystemItemOrganize),
174
+ @"bookmarks" : @(UIBarButtonSystemItemBookmarks),
175
+ @"search" : @(UIBarButtonSystemItemSearch),
176
+ @"refresh" : @(UIBarButtonSystemItemRefresh),
177
+ @"stop" : @(UIBarButtonSystemItemStop),
178
+ @"camera" : @(UIBarButtonSystemItemCamera),
179
+ @"trash" : @(UIBarButtonSystemItemTrash),
180
+ @"play" : @(UIBarButtonSystemItemPlay),
181
+ @"pause" : @(UIBarButtonSystemItemPause),
182
+ @"rewind" : @(UIBarButtonSystemItemRewind),
183
+ @"fastForward" : @(UIBarButtonSystemItemFastForward),
184
+ @"undo" : @(UIBarButtonSystemItemUndo),
185
+ @"redo" : @(UIBarButtonSystemItemRedo),
186
+ @"close" : @(UIBarButtonSystemItemClose),
187
+ };
188
+ });
189
+ NSNumber *item = items[name];
190
+ return item ? (UIBarButtonSystemItem)item.integerValue : UIBarButtonSystemItemDone;
191
+ }
192
+
193
+ // One built button: its item and the group it joins (iOS 26 capsules).
194
+ @interface ANNBuiltButton : NSObject
195
+ @property(nonatomic, strong) ANNUIBarButtonItem *item;
196
+ @property(nonatomic, strong) ANNButtonOptions *options;
197
+ @property(nonatomic, copy, nullable) NSString *group;
198
+ @property(nonatomic) BOOL pinned;
199
+ @end
200
+
201
+ @implementation ANNBuiltButton
202
+ @end
203
+
204
+ // What a press of an item or of its own view needs.
205
+ @interface ANNButtonPress : NSObject
206
+ @property(nonatomic, copy) NSString *buttonId;
207
+ @property(nonatomic) ANNBarButtonsSide side;
208
+ @property(nonatomic) BOOL toggle;
209
+ @property(nonatomic, weak, nullable) ANNUIBarButtonItem *item;
210
+ @end
211
+
212
+ @implementation ANNButtonPress
213
+ @end
214
+
215
+ @implementation ANNBarButtons {
216
+ __weak UIViewController *_screen;
217
+ ANNReactComponentRegistry *_registry;
218
+ NSMutableDictionary<NSString *, ANNBarButtonComponentView *> *_slots;
219
+ // The state of each toggle by its id: a button given again without `selected` keeps it.
220
+ NSMutableDictionary<NSString *, NSNumber *> *_selected;
221
+ // What a press of each sender (an item, a button of an item) means.
222
+ NSMapTable<id, ANNButtonPress *> *_presses;
223
+ }
224
+
225
+ - (instancetype)initWithScreen:(UIViewController *)screen
226
+ registry:(ANNReactComponentRegistry *)registry {
227
+ if (self = [super init]) {
228
+ _screen = screen;
229
+ _registry = registry;
230
+ _slots = [NSMutableDictionary new];
231
+ _selected = [NSMutableDictionary new];
232
+ _presses = [NSMapTable weakToStrongObjectsMapTable];
233
+ }
234
+ return self;
235
+ }
236
+
237
+ #pragma mark - The sides
238
+
239
+ - (void)applySide:(ANNBarButtonsSide)side
240
+ options:(ANNNavigationOptions *)options
241
+ animated:(BOOL)animated {
242
+ UIViewController *screen = _screen;
243
+ if (!screen) {
244
+ return;
245
+ }
246
+ UINavigationItem *navigationItem = screen.navigationItem;
247
+ NSArray<ANNBuiltButton *> *built = [self buildSide:side options:options];
248
+ if (side == ANNBarButtonsSideCenter) {
249
+ if (@available(iOS 16.0, *)) {
250
+ [self setCenter:built options:options item:navigationItem];
251
+ }
252
+ return;
253
+ }
254
+ NSMutableArray<ANNBuiltButton *> *placed = [built mutableCopy];
255
+ if (side == ANNBarButtonsSideRight) {
256
+ if (@available(iOS 16.0, *)) {
257
+ [self setPinned:placed item:navigationItem];
258
+ }
259
+ }
260
+ if (@available(iOS 26.0, *)) {
261
+ if ([self hasGroupOfSeveral:placed]) {
262
+ NSArray<UIBarButtonItemGroup *> *groups = [self groupsOf:placed];
263
+ if (side == ANNBarButtonsSideLeft) {
264
+ navigationItem.leadingItemGroups = groups;
265
+ } else {
266
+ navigationItem.trailingItemGroups = groups.reverseObjectEnumerator.allObjects;
267
+ }
268
+ return;
269
+ }
270
+ }
271
+ NSMutableArray<UIBarButtonItem *> *items = [NSMutableArray new];
272
+ for (ANNBuiltButton *button in placed) {
273
+ if (@available(iOS 26.0, *)) {
274
+ // Each button its own capsule: a zero-width space between neighbours, and the right ones never share the
275
+ // capsule of "•••".
276
+ if (items.count > 0) {
277
+ [items addObject:[UIBarButtonItem fixedSpaceItemOfWidth:0]];
278
+ }
279
+ if (side == ANNBarButtonsSideRight) {
280
+ button.item.sharesBackground = NO;
281
+ }
282
+ }
283
+ [items addObject:button.item];
284
+ }
285
+ if (side == ANNBarButtonsSideLeft) {
286
+ [navigationItem setLeftBarButtonItems:items animated:animated];
287
+ } else {
288
+ [navigationItem setRightBarButtonItems:items animated:animated];
289
+ }
290
+ }
291
+
292
+ - (NSArray<ANNBuiltButton *> *)buildSide:(ANNBarButtonsSide)side
293
+ options:(ANNNavigationOptions *)options {
294
+ NSMutableArray<ANNBuiltButton *> *built = [NSMutableArray new];
295
+ for (ANNButtonOptions *button in ANNButtonsOfSide(options, side) ?: @[]) {
296
+ ANNUIBarButtonItem *item = [self itemFor:button side:side options:options];
297
+ if (!item) {
298
+ continue;
299
+ }
300
+ ANNBuiltButton *entry = [ANNBuiltButton new];
301
+ entry.item = item;
302
+ entry.options = button;
303
+ NSString *group = [button.group withDefault:nil];
304
+ entry.group = group.length > 0 ? group : nil;
305
+ entry.pinned = side == ANNBarButtonsSideRight && [button.pinned withDefault:NO];
306
+ [built addObject:entry];
307
+ }
308
+ return built;
309
+ }
310
+
311
+ - (BOOL)hasGroupOfSeveral:(NSArray<ANNBuiltButton *> *)buttons {
312
+ for (NSUInteger index = 1; index < buttons.count; index++) {
313
+ NSString *group = buttons[index].group;
314
+ if (group && [group isEqualToString:buttons[index - 1].group]) {
315
+ return YES;
316
+ }
317
+ }
318
+ return NO;
319
+ }
320
+
321
+ // Neighbours with one `group` share a capsule; every other button is a group of its own.
322
+ - (NSArray<NSArray<ANNBuiltButton *> *> *)runsOf:(NSArray<ANNBuiltButton *> *)buttons {
323
+ NSMutableArray<NSArray<ANNBuiltButton *> *> *runs = [NSMutableArray new];
324
+ NSMutableArray<ANNBuiltButton *> *run = nil;
325
+ for (ANNBuiltButton *button in buttons) {
326
+ if (run && button.group && [button.group isEqualToString:run.lastObject.group]) {
327
+ [run addObject:button];
328
+ continue;
329
+ }
330
+ run = [NSMutableArray arrayWithObject:button];
331
+ [runs addObject:run];
332
+ }
333
+ return runs;
334
+ }
335
+
336
+ - (NSArray<UIBarButtonItemGroup *> *)groupsOf:(NSArray<ANNBuiltButton *> *)buttons
337
+ API_AVAILABLE(ios(16.0)) {
338
+ NSMutableArray<UIBarButtonItemGroup *> *groups = [NSMutableArray new];
339
+ for (NSArray<ANNBuiltButton *> *run in [self runsOf:buttons]) {
340
+ NSMutableArray<UIBarButtonItem *> *items = [NSMutableArray new];
341
+ for (ANNBuiltButton *button in run) {
342
+ [items addObject:button.item];
343
+ }
344
+ [groups addObject:[[UIBarButtonItemGroup alloc] initWithBarButtonItems:items
345
+ representativeItem:nil]];
346
+ }
347
+ return groups;
348
+ }
349
+
350
+ // Right `pinned` buttons stay at the edge behind "•••", several in one capsule.
351
+ - (void)setPinned:(NSMutableArray<ANNBuiltButton *> *)buttons
352
+ item:(UINavigationItem *)navigationItem API_AVAILABLE(ios(16.0)) {
353
+ NSMutableArray<UIBarButtonItem *> *pinned = [NSMutableArray new];
354
+ for (ANNBuiltButton *button in [buttons copy]) {
355
+ if (button.pinned) {
356
+ [pinned addObject:button.item];
357
+ [buttons removeObjectIdenticalTo:button];
358
+ }
359
+ }
360
+ navigationItem.pinnedTrailingGroup =
361
+ pinned.count > 0 ? [[UIBarButtonItemGroup alloc] initWithBarButtonItems:pinned
362
+ representativeItem:nil]
363
+ : nil;
364
+ }
365
+
366
+ // Each button, or neighbours with one `group`, a group of the middle; with `customizationId` the group can be moved or
367
+ // taken out by its `group` name (several buttons) or the button's `id`; a group without a name or with a name already
368
+ // taken is fixed.
369
+ - (void)setCenter:(NSArray<ANNBuiltButton *> *)buttons
370
+ options:(ANNNavigationOptions *)options
371
+ item:(UINavigationItem *)navigationItem API_AVAILABLE(ios(16.0)) {
372
+ NSString *customizationId = [options.topBar.customizationId withDefault:nil];
373
+ BOOL customizes = customizationId.length > 0;
374
+ NSMutableSet<NSString *> *taken = [NSMutableSet new];
375
+ NSMutableArray<UIBarButtonItemGroup *> *groups = [NSMutableArray new];
376
+ for (NSArray<ANNBuiltButton *> *run in [self runsOf:buttons]) {
377
+ NSMutableArray<UIBarButtonItem *> *items = [NSMutableArray new];
378
+ for (ANNBuiltButton *button in run) {
379
+ if (@available(iOS 26.0, *)) {
380
+ if (run.count == 1) {
381
+ button.item.sharesBackground = NO;
382
+ }
383
+ }
384
+ [items addObject:button.item];
385
+ }
386
+ ANNButtonOptions *first = run.firstObject.options;
387
+ NSString *groupId =
388
+ run.count > 1 ? run.firstObject.group : [first.identifier withDefault:nil];
389
+ NSString *customization = [first.customization withDefault:@"movable"];
390
+ UIBarButtonItemGroup *group = nil;
391
+ if (!customizes) {
392
+ group = [[UIBarButtonItemGroup alloc] initWithBarButtonItems:items
393
+ representativeItem:nil];
394
+ } else if (groupId.length == 0 || [taken containsObject:groupId] ||
395
+ [customization isEqualToString:@"fixed"]) {
396
+ group = [UIBarButtonItemGroup fixedGroupWithRepresentativeItem:nil items:items];
397
+ } else if ([customization isEqualToString:@"optional"]) {
398
+ [taken addObject:groupId];
399
+ group = [UIBarButtonItemGroup
400
+ optionalGroupWithCustomizationIdentifier:groupId
401
+ inDefaultCustomization:[first.shownByDefault withDefault:YES]
402
+ representativeItem:nil
403
+ items:items];
404
+ } else {
405
+ [taken addObject:groupId];
406
+ group = [UIBarButtonItemGroup movableGroupWithCustomizationIdentifier:groupId
407
+ representativeItem:nil
408
+ items:items];
409
+ }
410
+ [groups addObject:group];
411
+ }
412
+ navigationItem.customizationIdentifier = customizes ? customizationId : nil;
413
+ navigationItem.centerItemGroups = groups;
414
+ }
415
+
416
+ #pragma mark - The overflow menu
417
+
418
+ - (void)applyOverflowMenu:(ANNNavigationOptions *)options {
419
+ if (@available(iOS 16.0, *)) {
420
+ UIViewController *screen = _screen;
421
+ ANNMenuOptions *menu = options.topBar.overflowMenu;
422
+ if (!screen || menu.items.count == 0) {
423
+ screen.navigationItem.additionalOverflowItems = nil;
424
+ return;
425
+ }
426
+ __weak ANNBarButtons *weakSelf = self;
427
+ __weak UIViewController *weakScreen = screen;
428
+ // Built from the screen's options at each open, so a check picked last time shows.
429
+ screen.navigationItem.additionalOverflowItems =
430
+ [UIDeferredMenuElement elementWithUncachedProvider:^(
431
+ void (^completion)(NSArray<UIMenuElement *> *)) {
432
+ ANNBarButtons *buttons = weakSelf;
433
+ UIViewController *shown = weakScreen;
434
+ ANNMenuOptions *current = [shown resolveOptionsWithDefault].topBar.overflowMenu;
435
+ if (!buttons || current.items.count == 0) {
436
+ completion(@[]);
437
+ return;
438
+ }
439
+ UIMenu *built = [current menuWithPickHandler:^(NSString *itemId) {
440
+ [weakSelf menuItemPicked:itemId
441
+ menuOf:^ANNMenuOptions *(ANNNavigationOptions *resolved) {
442
+ return resolved.topBar.overflowMenu;
443
+ }
444
+ setMenu:^(ANNNavigationOptions *own, ANNMenuOptions *copy) {
445
+ own.topBar.overflowMenu = copy;
446
+ }];
447
+ }];
448
+ UIMenu *section = [UIMenu menuWithTitle:built.title
449
+ image:nil
450
+ identifier:nil
451
+ options:UIMenuOptionsDisplayInline
452
+ children:built.children];
453
+ completion(@[ section ]);
454
+ }];
455
+ }
456
+ }
457
+
458
+ #pragma mark - The toolbar (`toolbar.buttons`)
459
+
460
+ - (NSArray<UIBarButtonItem *> *)toolbarItemsWithOptions:(ANNNavigationOptions *)options {
461
+ NSMutableArray<UIBarButtonItem *> *items = [NSMutableArray new];
462
+ // The kind of the previous element: an explicit space, an icon of a group, or another button.
463
+ BOOL previousIsSpace = YES;
464
+ NSString *previousIconGroup = nil;
465
+ for (ANNButtonOptions *button in options.toolbar.buttons ?: @[]) {
466
+ UIBarButtonItem *space = [self spaceFor:button];
467
+ if (space) {
468
+ [items addObject:space];
469
+ previousIsSpace = YES;
470
+ previousIconGroup = nil;
471
+ continue;
472
+ }
473
+ if ([[button.systemItem withDefault:nil] isEqualToString:@"searchField"] &&
474
+ [button.identifier withDefault:nil].length == 0) {
475
+ continue;
476
+ }
477
+ ANNUIBarButtonItem *item = [self itemFor:button
478
+ side:ANNBarButtonsSideToolbar
479
+ options:options];
480
+ if (!item) {
481
+ continue;
482
+ }
483
+ ANNBarButtonKind kind = ANNKindOf(button, nil);
484
+ BOOL icon = kind == ANNBarButtonKindSymbol || kind == ANNBarButtonKindImage ||
485
+ kind == ANNBarButtonKindImageButton || kind == ANNBarButtonKindShowText;
486
+ NSString *group = icon ? [button.group withDefault:nil] : nil;
487
+ if (@available(iOS 26.0, *)) {
488
+ // Only icons of one group share a capsule (the toolbar has no groups): any other neighbours get a
489
+ // zero-width space, unless a space of the options is there already.
490
+ BOOL sameGroup = group.length > 0 && [group isEqualToString:previousIconGroup];
491
+ if (!previousIsSpace && !sameGroup) {
492
+ [items addObject:[UIBarButtonItem fixedSpaceItemOfWidth:0]];
493
+ }
494
+ }
495
+ [items addObject:item];
496
+ previousIsSpace = NO;
497
+ previousIconGroup = group;
498
+ }
499
+ return items;
500
+ }
501
+
502
+ // An element without an id, text, icon and component is a space of the toolbar: flexible, a zero-width fixed one,
503
+ // or the search field (iOS 26+; skipped before).
504
+ - (nullable UIBarButtonItem *)spaceFor:(ANNButtonOptions *)button {
505
+ if ([button.identifier withDefault:nil].length > 0 || ANNTextOf(button) || ANNImageOf(button) ||
506
+ ANNSymbolOf(button) || ANNHasComponent(button)) {
507
+ return nil;
508
+ }
509
+ NSString *systemItem = [button.systemItem withDefault:nil];
510
+ if ([systemItem isEqualToString:@"flexibleSpace"]) {
511
+ return [UIBarButtonItem flexibleSpaceItem];
512
+ }
513
+ if ([systemItem isEqualToString:@"fixedSpace"]) {
514
+ return [UIBarButtonItem fixedSpaceItemOfWidth:0];
515
+ }
516
+ if ([systemItem isEqualToString:@"searchField"]) {
517
+ if (@available(iOS 26.0, *)) {
518
+ UIViewController *screen = _screen;
519
+ ANNSearchBarOptions *searchBar = [screen resolveOptionsWithDefault].topBar.searchBar;
520
+ if (screen && [searchBar.visible withDefault:NO]) {
521
+ return screen.navigationItem.searchBarPlacementBarButtonItem;
522
+ }
523
+ }
524
+ return nil;
525
+ }
526
+ return nil;
527
+ }
528
+
529
+ #pragma mark - One button
530
+
531
+ - (nullable ANNUIBarButtonItem *)itemFor:(ANNButtonOptions *)button
532
+ side:(ANNBarButtonsSide)side
533
+ options:(ANNNavigationOptions *)options {
534
+ NSString *buttonId = [button.identifier withDefault:nil];
535
+ if (buttonId.length == 0) {
536
+ // A button the app can't tell apart is not placed.
537
+ RCTLogError(@"[ApexNavigation] a bar button without an id is not placed: give every "
538
+ @"button an `id`");
539
+ return nil;
540
+ }
541
+ ANNTopBarOptions *topBar = options.topBar;
542
+ Color *sideBackground = ANNSideBackgroundColor(topBar, side);
543
+ ANNBarButtonKind kind = ANNKindOf(button, sideBackground);
544
+ if (kind == ANNBarButtonKindNone) {
545
+ return nil;
546
+ }
547
+ UIColor *color = ANNColorOf(button.color) ?: ANNColorOf(ANNSideColor(topBar, side));
548
+ UIColor *disabledColor =
549
+ ANNColorOf(button.disabledColor) ?: ANNColorOf(ANNSideDisabledColor(topBar, side));
550
+ BOOL enabled = [button.enabled withDefault:YES];
551
+ ANNUIBarButtonItem *item = nil;
552
+ switch (kind) {
553
+ case ANNBarButtonKindComponent:
554
+ item = [self componentItemFor:button];
555
+ break;
556
+ case ANNBarButtonKindShowText:
557
+ item = [self showTextItemFor:button color:color disabledColor:disabledColor side:side];
558
+ break;
559
+ case ANNBarButtonKindImageButton:
560
+ item = [self imageButtonItemFor:button
561
+ color:color
562
+ disabledColor:disabledColor
563
+ background:ANNIconBackgroundOf(button, sideBackground)
564
+ side:side];
565
+ break;
566
+ case ANNBarButtonKindSymbol:
567
+ case ANNBarButtonKindImage:
568
+ case ANNBarButtonKindText:
569
+ case ANNBarButtonKindSystemItem:
570
+ item = [self plainItemFor:button
571
+ kind:kind
572
+ color:color
573
+ disabledColor:disabledColor
574
+ side:side];
575
+ break;
576
+ case ANNBarButtonKindNone:
577
+ break;
578
+ }
579
+ if (!item) {
580
+ return nil;
581
+ }
582
+ item.buttonId = buttonId;
583
+ item.enabled = enabled;
584
+ NSString *testID = [button.testID withDefault:nil];
585
+ item.accessibilityIdentifier = testID.length > 0 ? testID : nil;
586
+ NSString *label = [button.accessibilityLabel withDefault:nil];
587
+ if (label.length > 0) {
588
+ item.accessibilityLabel = label;
589
+ }
590
+ [self applyBadgeOf:button to:item side:side];
591
+ [self applyLayoutOf:button kind:kind to:item];
592
+ return item;
593
+ }
594
+
595
+ - (ANNUIBarButtonItem *)plainItemFor:(ANNButtonOptions *)button
596
+ kind:(ANNBarButtonKind)kind
597
+ color:(UIColor *)color
598
+ disabledColor:(UIColor *)disabledColor
599
+ side:(ANNBarButtonsSide)side {
600
+ ANNUIBarButtonItem *item = nil;
601
+ NSString *text = ANNTextOf(button);
602
+ switch (kind) {
603
+ case ANNBarButtonKindSymbol: {
604
+ NSString *symbol = ANNSymbolOf(button);
605
+ UIImage *image = [UIImage systemImageNamed:symbol];
606
+ // A symbol without a color is a template in the bar's color and dims when disabled; `disableIconTint` keeps
607
+ // its own colors (multicolor).
608
+ if ([button.disableIconTint withDefault:NO]) {
609
+ UIImageSymbolConfiguration *multicolor =
610
+ [UIImageSymbolConfiguration configurationPreferringMulticolor];
611
+ image = [[UIImage systemImageNamed:symbol withConfiguration:multicolor]
612
+ imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
613
+ }
614
+ item = [[ANNUIBarButtonItem alloc] initWithImage:image
615
+ style:UIBarButtonItemStylePlain
616
+ target:nil
617
+ action:nil];
618
+ break;
619
+ }
620
+ case ANNBarButtonKindImage: {
621
+ // An image without a color as it is, with one tinted.
622
+ UIImage *image = ANNImageOf(button);
623
+ BOOL tinted = color && ![button.disableIconTint withDefault:NO];
624
+ image = [image imageWithRenderingMode:tinted ? UIImageRenderingModeAlwaysTemplate
625
+ : UIImageRenderingModeAlwaysOriginal];
626
+ item = [[ANNUIBarButtonItem alloc] initWithImage:image
627
+ style:UIBarButtonItemStylePlain
628
+ target:nil
629
+ action:nil];
630
+ break;
631
+ }
632
+ case ANNBarButtonKindText:
633
+ item = [[ANNUIBarButtonItem alloc] initWithTitle:text
634
+ style:UIBarButtonItemStylePlain
635
+ target:nil
636
+ action:nil];
637
+ break;
638
+ case ANNBarButtonKindSystemItem:
639
+ // An unknown name is `done` (`close` is UIKit's close button).
640
+ item = [[ANNUIBarButtonItem alloc]
641
+ initWithBarButtonSystemItem:ANNSystemItemOf([button.systemItem withDefault:@""])
642
+ target:nil
643
+ action:nil];
644
+ break;
645
+ default:
646
+ return nil;
647
+ }
648
+ // The icon button's text is its title: only the icon shows, the text in "•••", in the customization panel and for
649
+ // VoiceOver.
650
+ if (text && kind != ANNBarButtonKindText) {
651
+ item.title = text;
652
+ }
653
+ BOOL prominent = [[button.style withDefault:nil] isEqualToString:@"prominent"];
654
+ if (prominent) {
655
+ if (@available(iOS 26.0, *)) {
656
+ item.style = UIBarButtonItemStyleProminent;
657
+ } else {
658
+ item.style = UIBarButtonItemStyleDone;
659
+ }
660
+ }
661
+ // The color: the tint, and for a plain button also the text's; `prominent` takes it only into the tint, and a font
662
+ // only from the font options.
663
+ if (color) {
664
+ item.tintColor = color;
665
+ }
666
+ UIFont *font = [button.font fontWithPlaceFont:[UIFont systemFontOfSize:ANNBarButtonFontSize]];
667
+ NSMutableDictionary<NSAttributedStringKey, id> *normal = [NSMutableDictionary new];
668
+ NSMutableDictionary<NSAttributedStringKey, id> *disabled = [NSMutableDictionary new];
669
+ if (font) {
670
+ normal[NSFontAttributeName] = font;
671
+ disabled[NSFontAttributeName] = font;
672
+ }
673
+ if (color && !prominent) {
674
+ normal[NSForegroundColorAttributeName] = color;
675
+ }
676
+ if (disabledColor) {
677
+ disabled[NSForegroundColorAttributeName] = disabledColor;
678
+ }
679
+ if (normal.count > 0) {
680
+ [item setTitleTextAttributes:normal forState:UIControlStateNormal];
681
+ [item setTitleTextAttributes:normal forState:UIControlStateHighlighted];
682
+ }
683
+ if (disabled.count > 0) {
684
+ [item setTitleTextAttributes:disabled forState:UIControlStateDisabled];
685
+ }
686
+ if (disabledColor && ![button.enabled withDefault:YES] && kind != ANNBarButtonKindText) {
687
+ item.tintColor = disabledColor;
688
+ }
689
+ [self wirePressOf:item button:button side:side];
690
+ [self applyMenuOf:button to:item side:side];
691
+ [self applyToggleOf:button to:item];
692
+ return item;
693
+ }
694
+
695
+ // The image drawn on its background or with its insets, as the view of its own (no menu, toggle or style): two
696
+ // images, light and dark, the disabled one with the disabled color.
697
+ - (ANNUIBarButtonItem *)imageButtonItemFor:(ANNButtonOptions *)button
698
+ color:(UIColor *)color
699
+ disabledColor:(UIColor *)disabledColor
700
+ background:(UIColor *)background
701
+ side:(ANNBarButtonsSide)side {
702
+ ANNIconBackgroundOptions *iconBackground = button.iconBackground;
703
+ ANNIconInsetsOptions *insets = button.iconInsets;
704
+ UIEdgeInsets padding =
705
+ UIEdgeInsetsMake([insets.top withDefault:0], [insets.left withDefault:0],
706
+ [insets.bottom withDefault:0], [insets.right withDefault:0]);
707
+ CGSize size =
708
+ CGSizeMake([iconBackground.width withDefault:0], [iconBackground.height withDefault:0]);
709
+ CGFloat radius = [iconBackground.cornerRadius withDefault:0];
710
+ UIImage *icon = ANNImageOf(button);
711
+ UIColor *tint = [button.disableIconTint withDefault:NO] ? nil : color;
712
+ UIImage *normal = [ANNIconButtonImage imageWithIcon:icon
713
+ tint:tint
714
+ background:background
715
+ cornerRadius:radius
716
+ size:size
717
+ insets:padding];
718
+ UIColor *disabledBackground = ANNColorOf(iconBackground.disabledColor) ?: background;
719
+ UIImage *disabledImage = [ANNIconButtonImage imageWithIcon:icon
720
+ tint:disabledColor ?: tint
721
+ background:disabledBackground
722
+ cornerRadius:radius
723
+ size:size
724
+ insets:padding];
725
+ UIButton *view = [UIButton buttonWithType:UIButtonTypeCustom];
726
+ [view setImage:normal forState:UIControlStateNormal];
727
+ [view setImage:disabledImage forState:UIControlStateDisabled];
728
+ [view sizeToFit];
729
+ view.enabled = [button.enabled withDefault:YES];
730
+ NSString *testID = [button.testID withDefault:nil];
731
+ view.accessibilityIdentifier = testID.length > 0 ? testID : nil;
732
+ NSString *text = ANNTextOf(button);
733
+ view.accessibilityLabel = [button.accessibilityLabel withDefault:nil] ?: text;
734
+ ANNUIBarButtonItem *item = [[ANNUIBarButtonItem alloc] initWithCustomView:view];
735
+ if (text) {
736
+ item.title = text;
737
+ }
738
+ [view addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchUpInside];
739
+ [self rememberPressOf:view button:button side:side item:item];
740
+ return item;
741
+ }
742
+
743
+ - (ANNUIBarButtonItem *)showTextItemFor:(ANNButtonOptions *)button
744
+ color:(UIColor *)color
745
+ disabledColor:(UIColor *)disabledColor
746
+ side:(ANNBarButtonsSide)side {
747
+ NSString *symbol = ANNSymbolOf(button);
748
+ UIImage *image = symbol ? [UIImage systemImageNamed:symbol] : ANNImageOf(button);
749
+ ANNShowTextButton *view = [ANNShowTextButton buttonWithOptions:button
750
+ image:image
751
+ isSymbol:symbol != nil
752
+ color:color
753
+ disabledColor:disabledColor];
754
+ ANNUIBarButtonItem *item = [[ANNUIBarButtonItem alloc] initWithCustomView:view];
755
+ NSString *text = ANNTextOf(button);
756
+ item.title = text;
757
+ item.image = image;
758
+ [view addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchUpInside];
759
+ [self rememberPressOf:view button:button side:side item:item];
760
+ // In "•••" an item with its text and icon that presses.
761
+ if (@available(iOS 16.0, *)) {
762
+ __weak ANNBarButtons *weakSelf = self;
763
+ __weak ANNShowTextButton *weakView = view;
764
+ item.menuRepresentation = [UIAction actionWithTitle:text ?: @""
765
+ image:image
766
+ identifier:nil
767
+ handler:^(__kindof UIAction *action) {
768
+ [weakSelf pressed:weakView];
769
+ }];
770
+ }
771
+ return item;
772
+ }
773
+
774
+ // A React button: the item's custom view is the root's slot, kept by the component id. Its presses are its own: no
775
+ // event, no menu, toggle or style.
776
+ - (nullable ANNUIBarButtonItem *)componentItemFor:(ANNButtonOptions *)button {
777
+ ANNBarButtonComponentView *slot = [self slotFor:button];
778
+ if (!slot) {
779
+ return nil;
780
+ }
781
+ [slot removeFromSuperview];
782
+ ANNUIBarButtonItem *item = [[ANNUIBarButtonItem alloc] initWithCustomView:slot];
783
+ item.componentId = slot.content.componentId;
784
+ NSString *testID = [button.testID withDefault:nil];
785
+ slot.accessibilityIdentifier = testID.length > 0 ? testID : nil;
786
+ return item;
787
+ }
788
+
789
+ - (nullable ANNBarButtonComponentView *)slotFor:(ANNButtonOptions *)button {
790
+ UIView<ANNComponentProtocol> *content = [_registry componentView:button.component
791
+ type:ANNComponentTypeTopBarButton];
792
+ if (!content) {
793
+ return nil;
794
+ }
795
+ NSString *componentId = content.componentId;
796
+ ANNBarButtonComponentView *slot = _slots[componentId];
797
+ if (!slot || slot.content != content) {
798
+ slot = [[ANNBarButtonComponentView alloc] initWithContent:content];
799
+ _slots[componentId] = slot;
800
+ }
801
+ return slot;
802
+ }
803
+
804
+ #pragma mark - The parts of a button
805
+
806
+ // iOS 26: a number, a short text, or `true` for the dot; `0`, `''`, `false` and `null` none. Not in the toolbar.
807
+ - (void)applyBadgeOf:(ANNButtonOptions *)button
808
+ to:(UIBarButtonItem *)item
809
+ side:(ANNBarButtonsSide)side {
810
+ if (@available(iOS 26.0, *)) {
811
+ if (side == ANNBarButtonsSideToolbar) {
812
+ return;
813
+ }
814
+ id value = [button.badge get];
815
+ UIBarButtonItemBadge *badge = nil;
816
+ if (ANNJSONIsBoolean(value)) {
817
+ badge = [value boolValue] ? [UIBarButtonItemBadge indicatorBadge] : nil;
818
+ } else if (ANNJSONIsNumber(value)) {
819
+ NSInteger count = [value integerValue];
820
+ badge = count > 0 ? [UIBarButtonItemBadge badgeWithCount:(NSUInteger)count] : nil;
821
+ } else if ([value isKindOfClass:NSString.class] && [value length] > 0) {
822
+ badge = [UIBarButtonItemBadge badgeWithString:value];
823
+ }
824
+ UIColor *badgeColor = ANNColorOf(button.badgeColor);
825
+ UIColor *badgeTextColor = ANNColorOf(button.badgeTextColor);
826
+ if (badge && badgeColor) {
827
+ badge.backgroundColor = badgeColor;
828
+ }
829
+ if (badge && badgeTextColor) {
830
+ badge.foregroundColor = badgeTextColor;
831
+ }
832
+ item.badge = badge;
833
+ }
834
+ }
835
+
836
+ // The capsule (iOS 26), and the places of iOS 27 (`priority`) and 27.1 (`vertical`).
837
+ - (void)applyLayoutOf:(ANNButtonOptions *)button
838
+ kind:(ANNBarButtonKind)kind
839
+ to:(UIBarButtonItem *)item {
840
+ if (@available(iOS 26.0, *)) {
841
+ BOOL ownBackground =
842
+ kind == ANNBarButtonKindComponent || kind == ANNBarButtonKindImageButton;
843
+ item.hidesSharedBackground = [button.hideSharedBackground withDefault:ownBackground];
844
+ }
845
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 270000
846
+ if (@available(iOS 27.0, *)) {
847
+ NSString *priority = [button.priority withDefault:nil];
848
+ if ([priority isEqualToString:@"high"]) {
849
+ item.visibilityPriority = UIBarButtonItemVisibilityPriorityHigh;
850
+ } else if ([priority isEqualToString:@"low"]) {
851
+ item.visibilityPriority = UIBarButtonItemVisibilityPriorityLow;
852
+ } else {
853
+ item.visibilityPriority = UIBarButtonItemVisibilityPriorityStandard;
854
+ }
855
+ }
856
+ #endif
857
+ #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 270100
858
+ if (@available(iOS 27.1, *)) {
859
+ if (button.vertical.hasValue) {
860
+ item.axisBehavior = button.vertical.get ? UIBarButtonItemAxisBehaviorVerticalPreferred
861
+ : UIBarButtonItemAxisBehaviorHorizontalOnly;
862
+ } else {
863
+ item.axisBehavior = UIBarButtonItemAxisBehaviorAutomatic;
864
+ }
865
+ }
866
+ #endif
867
+ }
868
+
869
+ // A menu: without `menuOnLongPress` the button has no action of its own and UIKit opens the menu on a tap; with it a
870
+ // tap is the button's action and a long press the menu.
871
+ - (void)applyMenuOf:(ANNButtonOptions *)button
872
+ to:(ANNUIBarButtonItem *)item
873
+ side:(ANNBarButtonsSide)side {
874
+ ANNMenuOptions *menu = button.menu;
875
+ if (menu.items.count == 0) {
876
+ return;
877
+ }
878
+ // The item gets its id only after it is built: the id comes from the button.
879
+ NSString *buttonId = [button.identifier withDefault:@""];
880
+ __weak ANNBarButtons *weakSelf = self;
881
+ item.menu = [menu menuWithPickHandler:^(NSString *itemId) {
882
+ [weakSelf menuItemPicked:itemId
883
+ menuOf:^ANNMenuOptions *(ANNNavigationOptions *options) {
884
+ return [ANNBarButtons buttonWithId:buttonId in:ANNButtonsOfSide(options, side)].menu;
885
+ }
886
+ setMenu:^(ANNNavigationOptions *own, ANNMenuOptions *copy) {
887
+ [weakSelf changeButton:buttonId
888
+ side:side
889
+ inOwn:own
890
+ change:^(ANNButtonOptions *changed) {
891
+ changed.menu = copy;
892
+ }];
893
+ }];
894
+ }];
895
+ if (![button.menuOnLongPress withDefault:NO]) {
896
+ item.target = nil;
897
+ item.action = nil;
898
+ }
899
+ }
900
+
901
+ // `selected` shows "on"; a toggle given again without it keeps the state of the old button with its id. The item is
902
+ // still being built and has no id yet: the id comes from the button, and a button without one keeps no state.
903
+ - (void)applyToggleOf:(ANNButtonOptions *)button to:(ANNUIBarButtonItem *)item {
904
+ NSString *buttonId = [button.identifier withDefault:nil];
905
+ BOOL toggle = [button.toggle withDefault:NO] && buttonId.length > 0;
906
+ BOOL selected = NO;
907
+ if (button.selected.hasValue) {
908
+ selected = button.selected.get;
909
+ } else if (toggle && _selected[buttonId]) {
910
+ selected = _selected[buttonId].boolValue;
911
+ }
912
+ if (toggle) {
913
+ _selected[buttonId] = @(selected);
914
+ }
915
+ item.selected = selected;
916
+ }
917
+
918
+ - (void)wirePressOf:(ANNUIBarButtonItem *)item
919
+ button:(ANNButtonOptions *)button
920
+ side:(ANNBarButtonsSide)side {
921
+ item.target = self;
922
+ item.action = @selector(pressed:);
923
+ [self rememberPressOf:item button:button side:side item:item];
924
+ }
925
+
926
+ - (void)rememberPressOf:(id)sender
927
+ button:(ANNButtonOptions *)button
928
+ side:(ANNBarButtonsSide)side
929
+ item:(ANNUIBarButtonItem *)item {
930
+ ANNButtonPress *press = [ANNButtonPress new];
931
+ press.buttonId = [button.identifier withDefault:@""];
932
+ press.side = side;
933
+ press.toggle = [button.toggle withDefault:NO] && sender == item;
934
+ press.item = item;
935
+ [_presses setObject:press forKey:sender];
936
+ }
937
+
938
+ #pragma mark - Presses
939
+
940
+ - (void)pressed:(id)sender {
941
+ ANNButtonPress *press = [_presses objectForKey:sender];
942
+ UIViewController *screen = _screen;
943
+ NSString *componentId = screen.layoutInfo.componentId;
944
+ if (!press || !screen || componentId.length == 0) {
945
+ return;
946
+ }
947
+ if (!press.toggle) {
948
+ [screen.eventEmitter sendOnNavigationButtonPressed:componentId buttonId:press.buttonId];
949
+ return;
950
+ }
951
+ // A toggle flips, the options keep the new state, then the event tells it.
952
+ ANNUIBarButtonItem *item = press.item;
953
+ BOOL selected = !item.selected;
954
+ item.selected = selected;
955
+ _selected[press.buttonId] = @(selected);
956
+ __weak ANNBarButtons *weakSelf = self;
957
+ NSString *buttonId = press.buttonId;
958
+ ANNBarButtonsSide side = press.side;
959
+ [screen changeOwnOptions:^(ANNNavigationOptions *own) {
960
+ [weakSelf changeButton:buttonId
961
+ side:side
962
+ inOwn:own
963
+ change:^(ANNButtonOptions *changed) {
964
+ changed.selected = [Bool withValue:selected];
965
+ }];
966
+ }];
967
+ [screen.eventEmitter sendOnNavigationButtonPressed:componentId
968
+ buttonId:buttonId
969
+ selected:@(selected)];
970
+ }
971
+
972
+ + (nullable ANNButtonOptions *)buttonWithId:(NSString *)buttonId
973
+ in:(NSArray<ANNButtonOptions *> *)buttons {
974
+ for (ANNButtonOptions *button in buttons) {
975
+ if ([[button.identifier withDefault:nil] isEqualToString:buttonId]) {
976
+ return button;
977
+ }
978
+ }
979
+ return nil;
980
+ }
981
+
982
+ // The button `buttonId` of `side` in the own options, changed on a copy: the own list when it has the button, else the
983
+ // list the screen shows (from its stack or the defaults), copied into the own options first. Lists are new arrays.
984
+ - (void)changeButton:(NSString *)buttonId
985
+ side:(ANNBarButtonsSide)side
986
+ inOwn:(ANNNavigationOptions *)own
987
+ change:(void (^)(ANNButtonOptions *changed))change {
988
+ NSArray<ANNButtonOptions *> *list = ANNButtonsOfSide(own, side);
989
+ if (![ANNBarButtons buttonWithId:buttonId in:list]) {
990
+ list = ANNButtonsOfSide([_screen resolveOptionsWithDefault], side);
991
+ }
992
+ if (![ANNBarButtons buttonWithId:buttonId in:list]) {
993
+ return;
994
+ }
995
+ NSMutableArray<ANNButtonOptions *> *changedList = [NSMutableArray arrayWithCapacity:list.count];
996
+ for (ANNButtonOptions *button in list) {
997
+ ANNButtonOptions *copy = [button copy];
998
+ if (button.menu.items.count > 0) {
999
+ copy.menu = [ANNBarButtons deepCopyOfMenu:button.menu];
1000
+ }
1001
+ if ([[button.identifier withDefault:nil] isEqualToString:buttonId]) {
1002
+ change(copy);
1003
+ }
1004
+ [changedList addObject:copy];
1005
+ }
1006
+ ANNSetButtonsOfSide(own, side, changedList);
1007
+ }
1008
+
1009
+ #pragma mark - Menus
1010
+
1011
+ - (void)menuItemPicked:(NSString *)itemId
1012
+ menuOf:(ANNMenuOptions *_Nullable (^)(ANNNavigationOptions *options))menuOf
1013
+ setMenu:(void (^)(ANNNavigationOptions *own, ANNMenuOptions *menu))setMenu {
1014
+ UIViewController *screen = _screen;
1015
+ NSString *componentId = screen.layoutInfo.componentId;
1016
+ if (!screen || componentId.length == 0) {
1017
+ return;
1018
+ }
1019
+ [screen.eventEmitter sendOnNavigationButtonPressed:componentId buttonId:itemId];
1020
+ ANNMenuOptions *menu = menuOf([screen resolveOptionsWithDefault]);
1021
+ if (!menu || ![ANNBarButtons menu:menu hasSingleSelectionOf:itemId]) {
1022
+ return;
1023
+ }
1024
+ // The check lands on the screen's own copy, which shares nothing with the menus of the stack, the defaults or
1025
+ // other screens.
1026
+ ANNMenuOptions *copy = [ANNBarButtons deepCopyOfMenu:menu];
1027
+ [copy itemPicked:itemId];
1028
+ [screen changeOwnOptions:^(ANNNavigationOptions *own) {
1029
+ setMenu(own, copy);
1030
+ }];
1031
+ }
1032
+
1033
+ + (BOOL)menu:(ANNMenuOptions *)menu hasSingleSelectionOf:(NSString *)itemId {
1034
+ return [self items:menu.items
1035
+ singleSelection:[menu.singleSelection withDefault:NO]
1036
+ contain:itemId];
1037
+ }
1038
+
1039
+ + (BOOL)items:(NSArray<ANNMenuItemOptions *> *)items
1040
+ singleSelection:(BOOL)singleSelection
1041
+ contain:(NSString *)itemId {
1042
+ for (ANNMenuItemOptions *item in items) {
1043
+ if (item.items.count > 0) {
1044
+ if ([self items:item.items
1045
+ singleSelection:[item.singleSelection withDefault:NO]
1046
+ contain:itemId]) {
1047
+ return YES;
1048
+ }
1049
+ } else if (singleSelection && [[item.identifier withDefault:nil] isEqualToString:itemId]) {
1050
+ return YES;
1051
+ }
1052
+ }
1053
+ return NO;
1054
+ }
1055
+
1056
+ + (ANNMenuOptions *)deepCopyOfMenu:(ANNMenuOptions *)menu {
1057
+ ANNMenuOptions *copy = [[ANNMenuOptions alloc] initWithDict:nil];
1058
+ copy.title = menu.title;
1059
+ copy.singleSelection = menu.singleSelection;
1060
+ copy.testID = menu.testID;
1061
+ copy.items = [self deepCopyOfItems:menu.items];
1062
+ return copy;
1063
+ }
1064
+
1065
+ + (NSArray<ANNMenuItemOptions *> *)deepCopyOfItems:(NSArray<ANNMenuItemOptions *> *)items {
1066
+ if (!items) {
1067
+ return nil;
1068
+ }
1069
+ NSMutableArray<ANNMenuItemOptions *> *copies = [NSMutableArray arrayWithCapacity:items.count];
1070
+ for (ANNMenuItemOptions *item in items) {
1071
+ ANNMenuItemOptions *copy = [[ANNMenuItemOptions alloc] initWithDict:nil];
1072
+ copy.identifier = item.identifier;
1073
+ copy.title = item.title;
1074
+ copy.sfSymbol = item.sfSymbol;
1075
+ copy.icon = item.icon;
1076
+ copy.destructive = item.destructive;
1077
+ copy.disabled = item.disabled;
1078
+ copy.checked = item.checked;
1079
+ copy.singleSelection = item.singleSelection;
1080
+ copy.testID = item.testID;
1081
+ copy.items = [self deepCopyOfItems:item.items];
1082
+ [copies addObject:copy];
1083
+ }
1084
+ return copies;
1085
+ }
1086
+
1087
+ #pragma mark - React buttons
1088
+
1089
+ - (NSArray<UIView<ANNComponentProtocol> *> *)componentButtonsOf:(ANNNavigationOptions *)options {
1090
+ NSMutableArray<UIView<ANNComponentProtocol> *> *roots = [NSMutableArray new];
1091
+ ANNBarButtonsSide sides[] = {ANNBarButtonsSideLeft, ANNBarButtonsSideRight,
1092
+ ANNBarButtonsSideCenter, ANNBarButtonsSideToolbar};
1093
+ for (ANNBarButtonsSide side : sides) {
1094
+ if (side == ANNBarButtonsSideCenter) {
1095
+ if (@available(iOS 16.0, *)) {
1096
+ } else {
1097
+ continue;
1098
+ }
1099
+ }
1100
+ for (ANNButtonOptions *button in ANNButtonsOfSide(options, side) ?: @[]) {
1101
+ if ([button.identifier withDefault:nil].length == 0 || !ANNHasComponent(button)) {
1102
+ continue;
1103
+ }
1104
+ ANNBarButtonComponentView *slot = [self slotFor:button];
1105
+ if (slot) {
1106
+ [roots addObject:slot.content];
1107
+ }
1108
+ }
1109
+ }
1110
+ return roots;
1111
+ }
1112
+
1113
+ - (void)keepSlotsOf:(NSSet<NSString *> *)componentIds {
1114
+ for (NSString *componentId in _slots.allKeys) {
1115
+ if (![componentIds containsObject:componentId]) {
1116
+ [_slots removeObjectForKey:componentId];
1117
+ }
1118
+ }
1119
+ }
1120
+
1121
+ - (CGFloat)measuredWidthOf:(NSString *)componentId {
1122
+ return _slots[componentId].measuredWidth;
1123
+ }
1124
+
1125
+ @end