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

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 (1373) hide show
  1. package/ApexNavigation.podspec +42 -0
  2. package/CHANGELOG.md +8 -0
  3. package/LICENSE +21 -0
  4. package/README.md +76 -2
  5. package/android/CLAUDE.md +183 -0
  6. package/android/CORE.md +219 -0
  7. package/android/MATERIAL_SYMBOLS_LICENSE.txt +205 -0
  8. package/android/RECIPES.md +39 -0
  9. package/android/build.gradle +108 -0
  10. package/android/consumer-rules.pro +2 -0
  11. package/android/src/main/AndroidManifest.xml +9 -0
  12. package/android/src/main/java/dev/apexnative/navigation/EdgeToEdgeDecision.kt +25 -0
  13. package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +339 -0
  14. package/android/src/main/java/dev/apexnative/navigation/NavigationApplication.kt +90 -0
  15. package/android/src/main/java/dev/apexnative/navigation/NavigationPackage.kt +37 -0
  16. package/android/src/main/java/dev/apexnative/navigation/customrow/BottomTabsCustomRowOptions.kt +85 -0
  17. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutChecks.kt +51 -0
  18. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutException.kt +7 -0
  19. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutNode.kt +118 -0
  20. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutReader.kt +274 -0
  21. package/android/src/main/java/dev/apexnative/navigation/layout/LayoutType.kt +35 -0
  22. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCalls.kt +61 -0
  23. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenContext.kt +84 -0
  24. package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCreator.kt +17 -0
  25. package/android/src/main/java/dev/apexnative/navigation/options/AnimationsOptions.kt +54 -0
  26. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabOptions.kt +238 -0
  27. package/android/src/main/java/dev/apexnative/navigation/options/BottomTabsOptions.kt +244 -0
  28. package/android/src/main/java/dev/apexnative/navigation/options/ButtonMenuOptions.kt +70 -0
  29. package/android/src/main/java/dev/apexnative/navigation/options/ButtonOptions.kt +296 -0
  30. package/android/src/main/java/dev/apexnative/navigation/options/ComponentOptions.kt +141 -0
  31. package/android/src/main/java/dev/apexnative/navigation/options/DefaultOptions.kt +21 -0
  32. package/android/src/main/java/dev/apexnative/navigation/options/FabOptions.kt +97 -0
  33. package/android/src/main/java/dev/apexnative/navigation/options/FontOptions.kt +47 -0
  34. package/android/src/main/java/dev/apexnative/navigation/options/HardwareBackButtonOptions.kt +49 -0
  35. package/android/src/main/java/dev/apexnative/navigation/options/InterpolationOptions.kt +203 -0
  36. package/android/src/main/java/dev/apexnative/navigation/options/KeyCommandOptions.kt +49 -0
  37. package/android/src/main/java/dev/apexnative/navigation/options/LargeTitleOptions.kt +78 -0
  38. package/android/src/main/java/dev/apexnative/navigation/options/LayoutAnimation.kt +157 -0
  39. package/android/src/main/java/dev/apexnative/navigation/options/LayoutOptions.kt +94 -0
  40. package/android/src/main/java/dev/apexnative/navigation/options/ModalOptions.kt +87 -0
  41. package/android/src/main/java/dev/apexnative/navigation/options/ModalPlacementOptions.kt +90 -0
  42. package/android/src/main/java/dev/apexnative/navigation/options/NavigationBarOptions.kt +44 -0
  43. package/android/src/main/java/dev/apexnative/navigation/options/Options.kt +167 -0
  44. package/android/src/main/java/dev/apexnative/navigation/options/OptionsCache.kt +21 -0
  45. package/android/src/main/java/dev/apexnative/navigation/options/OptionsReader.kt +133 -0
  46. package/android/src/main/java/dev/apexnative/navigation/options/PreviewOptions.kt +97 -0
  47. package/android/src/main/java/dev/apexnative/navigation/options/ReadableMaps.kt +70 -0
  48. package/android/src/main/java/dev/apexnative/navigation/options/ScrollEdgeEffectOptions.kt +98 -0
  49. package/android/src/main/java/dev/apexnative/navigation/options/SearchBarOptions.kt +151 -0
  50. package/android/src/main/java/dev/apexnative/navigation/options/SharedElementTransitionOptions.kt +57 -0
  51. package/android/src/main/java/dev/apexnative/navigation/options/SheetOptions.kt +108 -0
  52. package/android/src/main/java/dev/apexnative/navigation/options/SideMenuOptions.kt +130 -0
  53. package/android/src/main/java/dev/apexnative/navigation/options/SplitViewGroupOptions.kt +190 -0
  54. package/android/src/main/java/dev/apexnative/navigation/options/SplitViewOptions.kt +28 -0
  55. package/android/src/main/java/dev/apexnative/navigation/options/StackAnimationOptions.kt +270 -0
  56. package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +75 -0
  57. package/android/src/main/java/dev/apexnative/navigation/options/TitleOptions.kt +167 -0
  58. package/android/src/main/java/dev/apexnative/navigation/options/ToolbarOptions.kt +60 -0
  59. package/android/src/main/java/dev/apexnative/navigation/options/TopBarAppearanceOptions.kt +223 -0
  60. package/android/src/main/java/dev/apexnative/navigation/options/TopBarOptions.kt +381 -0
  61. package/android/src/main/java/dev/apexnative/navigation/options/ViewAnimationOptions.kt +225 -0
  62. package/android/src/main/java/dev/apexnative/navigation/options/WindowOptions.kt +36 -0
  63. package/android/src/main/java/dev/apexnative/navigation/options/params/Bool.kt +23 -0
  64. package/android/src/main/java/dev/apexnative/navigation/options/params/Fraction.kt +12 -0
  65. package/android/src/main/java/dev/apexnative/navigation/options/params/LayoutDirection.kt +26 -0
  66. package/android/src/main/java/dev/apexnative/navigation/options/params/Param.kt +24 -0
  67. package/android/src/main/java/dev/apexnative/navigation/options/params/Text.kt +24 -0
  68. package/android/src/main/java/dev/apexnative/navigation/options/params/ThemeColour.kt +259 -0
  69. package/android/src/main/java/dev/apexnative/navigation/options/params/Variant.kt +36 -0
  70. package/android/src/main/java/dev/apexnative/navigation/options/parsers/BoolParser.kt +15 -0
  71. package/android/src/main/java/dev/apexnative/navigation/options/parsers/FontParser.kt +28 -0
  72. package/android/src/main/java/dev/apexnative/navigation/options/parsers/FractionParser.kt +24 -0
  73. package/android/src/main/java/dev/apexnative/navigation/options/parsers/IconParser.kt +48 -0
  74. package/android/src/main/java/dev/apexnative/navigation/options/parsers/StringListParser.kt +27 -0
  75. package/android/src/main/java/dev/apexnative/navigation/options/parsers/TextParser.kt +32 -0
  76. package/android/src/main/java/dev/apexnative/navigation/options/parsers/TypefaceLoader.kt +42 -0
  77. package/android/src/main/java/dev/apexnative/navigation/options/parsers/VariantParser.kt +34 -0
  78. package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +41 -0
  79. package/android/src/main/java/dev/apexnative/navigation/react/CommandAnswer.kt +111 -0
  80. package/android/src/main/java/dev/apexnative/navigation/react/CommandListener.kt +27 -0
  81. package/android/src/main/java/dev/apexnative/navigation/react/CommandRunner.kt +131 -0
  82. package/android/src/main/java/dev/apexnative/navigation/react/DeveloperReload.kt +69 -0
  83. package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +123 -0
  84. package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +154 -0
  85. package/android/src/main/java/dev/apexnative/navigation/react/LaunchLink.kt +37 -0
  86. package/android/src/main/java/dev/apexnative/navigation/react/NavigationTurboModule.kt +311 -0
  87. package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +89 -0
  88. package/android/src/main/java/dev/apexnative/navigation/react/ReactGateway.kt +67 -0
  89. package/android/src/main/java/dev/apexnative/navigation/react/ReactView.kt +197 -0
  90. package/android/src/main/java/dev/apexnative/navigation/react/ReadableJson.kt +60 -0
  91. package/android/src/main/java/dev/apexnative/navigation/react/ReloadCoordinator.kt +130 -0
  92. package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +69 -0
  93. package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +87 -0
  94. package/android/src/main/java/dev/apexnative/navigation/react/ScrollEvents.kt +160 -0
  95. package/android/src/main/java/dev/apexnative/navigation/react/StartInfo.kt +44 -0
  96. package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +507 -0
  97. package/android/src/main/java/dev/apexnative/navigation/react/events/ComponentType.kt +13 -0
  98. package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +199 -0
  99. package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationStateReporter.kt +62 -0
  100. package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +87 -0
  101. package/android/src/main/java/dev/apexnative/navigation/react/events/StateHold.kt +62 -0
  102. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaReadyEvent.kt +16 -0
  103. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaView.kt +140 -0
  104. package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaViewManager.kt +45 -0
  105. package/android/src/main/java/dev/apexnative/navigation/slots/SlotContainers.kt +44 -0
  106. package/android/src/main/java/dev/apexnative/navigation/slots/SlotHost.kt +91 -0
  107. package/android/src/main/java/dev/apexnative/navigation/slots/SlotScreenView.kt +158 -0
  108. package/android/src/main/java/dev/apexnative/navigation/slots/SlotView.kt +141 -0
  109. package/android/src/main/java/dev/apexnative/navigation/slots/SlotViewManager.kt +50 -0
  110. package/android/src/main/java/dev/apexnative/navigation/splash/SplashHold.kt +67 -0
  111. package/android/src/main/java/dev/apexnative/navigation/splash/SplashTheme.kt +81 -0
  112. package/android/src/main/java/dev/apexnative/navigation/splash/SplashView.kt +77 -0
  113. package/android/src/main/java/dev/apexnative/navigation/system/AppDirection.kt +92 -0
  114. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiLayers.kt +126 -0
  115. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiOwner.kt +229 -0
  116. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiRules.kt +302 -0
  117. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiState.kt +58 -0
  118. package/android/src/main/java/dev/apexnative/navigation/system/SystemUiWindow.kt +405 -0
  119. package/android/src/main/java/dev/apexnative/navigation/utils/ColorUtils.kt +22 -0
  120. package/android/src/main/java/dev/apexnative/navigation/utils/DevelopmentLog.kt +45 -0
  121. package/android/src/main/java/dev/apexnative/navigation/utils/DimensionExtensions.kt +16 -0
  122. package/android/src/main/java/dev/apexnative/navigation/utils/ImageLoader.kt +112 -0
  123. package/android/src/main/java/dev/apexnative/navigation/utils/MaterialTheme.kt +148 -0
  124. package/android/src/main/java/dev/apexnative/navigation/utils/NavigationLog.kt +6 -0
  125. package/android/src/main/java/dev/apexnative/navigation/utils/ScrollToTop.kt +33 -0
  126. package/android/src/main/java/dev/apexnative/navigation/utils/SystemUiUtils.kt +41 -0
  127. package/android/src/main/java/dev/apexnative/navigation/utils/TestIds.kt +89 -0
  128. package/android/src/main/java/dev/apexnative/navigation/utils/TextViewUtils.kt +10 -0
  129. package/android/src/main/java/dev/apexnative/navigation/utils/UiThread.kt +31 -0
  130. package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +43 -0
  131. package/android/src/main/java/dev/apexnative/navigation/utils/ViewController.kt +124 -0
  132. package/android/src/main/java/dev/apexnative/navigation/utils/ViewExtensions.kt +41 -0
  133. package/android/src/main/java/dev/apexnative/navigation/utils/ViewUtils.kt +15 -0
  134. package/android/src/main/java/dev/apexnative/navigation/utils/WindowFolds.kt +107 -0
  135. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementController.kt +258 -0
  136. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementDefinition.kt +57 -0
  137. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementLayout.kt +225 -0
  138. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementPlanner.kt +120 -0
  139. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +31 -0
  140. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsCollapseBehavior.kt +54 -0
  141. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +664 -0
  142. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsPresenter.kt +367 -0
  143. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowGeometry.kt +81 -0
  144. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowPlacer.kt +223 -0
  145. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarLook.kt +74 -0
  146. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarMotion.kt +83 -0
  147. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabCellState.kt +27 -0
  148. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabHistory.kt +38 -0
  149. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +172 -0
  150. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabSelection.kt +65 -0
  151. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsAttach.kt +42 -0
  152. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsRoom.kt +72 -0
  153. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildController.kt +45 -0
  154. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildControllersRegistry.kt +29 -0
  155. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +90 -0
  156. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentViewController.kt +254 -0
  157. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ContentReadiness.kt +65 -0
  158. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RenderWait.kt +231 -0
  159. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RestPlace.kt +28 -0
  160. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenContentFactory.kt +28 -0
  161. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFocus.kt +22 -0
  162. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +154 -0
  163. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenReadiness.kt +104 -0
  164. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenSafeArea.kt +148 -0
  165. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentCreator.kt +18 -0
  166. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentViewController.kt +187 -0
  167. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/NativeScreens.kt +25 -0
  168. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +40 -0
  169. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalContainer.kt +20 -0
  170. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +1269 -0
  171. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +186 -0
  172. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +342 -0
  173. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +398 -0
  174. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetContainer.kt +67 -0
  175. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +78 -0
  176. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/FirstRootDraw.kt +58 -0
  177. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/LayoutFactory.kt +203 -0
  178. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +562 -0
  179. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigators.kt +53 -0
  180. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +514 -0
  181. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/WaitingLayer.kt +18 -0
  182. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayContainer.kt +33 -0
  183. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +383 -0
  184. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayTouches.kt +44 -0
  185. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayViews.kt +117 -0
  186. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/Capabilities.kt +62 -0
  187. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +43 -0
  188. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +218 -0
  189. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ShownChildren.kt +82 -0
  190. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +283 -0
  191. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +276 -0
  192. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +92 -0
  193. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +107 -0
  194. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitPanes.kt +59 -0
  195. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +509 -0
  196. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewLayout.kt +61 -0
  197. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewPresenter.kt +25 -0
  198. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedFrame.kt +19 -0
  199. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedPushes.kt +114 -0
  200. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackCommands.kt +387 -0
  201. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +635 -0
  202. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +167 -0
  203. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackPresenter.kt +24 -0
  204. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +1274 -0
  205. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +82 -0
  206. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +222 -0
  207. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlacement.kt +47 -0
  208. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlan.kt +44 -0
  209. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPresenter.kt +279 -0
  210. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/ScreenSearch.kt +450 -0
  211. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/SearchPanel.kt +176 -0
  212. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/StackSearchPresenter.kt +243 -0
  213. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarComponents.kt +211 -0
  214. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarRowTransition.kt +122 -0
  215. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonCells.kt +30 -0
  216. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonPlaces.kt +65 -0
  217. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/LargeTitleCollapse.kt +71 -0
  218. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/MenuChecks.kt +72 -0
  219. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarCollapseBehavior.kt +104 -0
  220. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +1085 -0
  221. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarRoom.kt +95 -0
  222. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarVisibility.kt +122 -0
  223. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/IReactView.kt +89 -0
  224. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/Presenter.kt +51 -0
  225. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ScrollEventListener.kt +194 -0
  226. package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +320 -0
  227. package/android/src/main/java/dev/apexnative/navigation/views/animations/AnimationRules.kt +141 -0
  228. package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +193 -0
  229. package/android/src/main/java/dev/apexnative/navigation/views/animations/FadeThrough.kt +57 -0
  230. package/android/src/main/java/dev/apexnative/navigation/views/animations/SideAnimator.kt +143 -0
  231. package/android/src/main/java/dev/apexnative/navigation/views/animations/SystemTransition.kt +26 -0
  232. package/android/src/main/java/dev/apexnative/navigation/views/animations/ValueInterpolation.kt +93 -0
  233. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabItem.kt +13 -0
  234. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +550 -0
  235. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsContainer.kt +135 -0
  236. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsLayout.kt +89 -0
  237. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomBottomTabItemView.kt +91 -0
  238. package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomTabRow.kt +165 -0
  239. package/android/src/main/java/dev/apexnative/navigation/views/component/ComponentLayout.kt +89 -0
  240. package/android/src/main/java/dev/apexnative/navigation/views/component/Renderable.kt +6 -0
  241. package/android/src/main/java/dev/apexnative/navigation/views/element/DrawOrder.kt +44 -0
  242. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStub.kt +31 -0
  243. package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +281 -0
  244. package/android/src/main/java/dev/apexnative/navigation/views/element/ImageLoads.kt +103 -0
  245. package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +112 -0
  246. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionLayer.kt +152 -0
  247. package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +53 -0
  248. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +46 -0
  249. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/FlightGeometry.kt +53 -0
  250. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +138 -0
  251. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +88 -0
  252. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PropertyAnimatorCreator.kt +33 -0
  253. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +66 -0
  254. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +70 -0
  255. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +179 -0
  256. package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +139 -0
  257. package/android/src/main/java/dev/apexnative/navigation/views/externalcomponent/ExternalComponentLayout.kt +44 -0
  258. package/android/src/main/java/dev/apexnative/navigation/views/sidemenu/SideMenuView.kt +183 -0
  259. package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +137 -0
  260. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/Fab.kt +125 -0
  261. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabAnimator.kt +8 -0
  262. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabCollapseBehaviour.kt +34 -0
  263. package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabMenu.kt +133 -0
  264. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/LargeTitleView.kt +45 -0
  265. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +211 -0
  266. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +407 -0
  267. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBarDefaults.kt +35 -0
  268. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/ScopeRow.kt +82 -0
  269. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchField.kt +130 -0
  270. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchStyle.kt +29 -0
  271. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SuggestionList.kt +77 -0
  272. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonComponentCell.kt +80 -0
  273. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +334 -0
  274. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonMenus.kt +106 -0
  275. package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/IconBackgroundDrawable.kt +93 -0
  276. package/android/src/main/jni/ApexNavigationSpec.h +18 -0
  277. package/android/src/main/jni/CMakeLists.txt +33 -0
  278. package/android/src/main/res/color/apex_navigation_highlight_inverse.xml +5 -0
  279. package/android/src/main/res/color/apex_navigation_text_primary.xml +6 -0
  280. package/android/src/main/res/color/apex_navigation_text_primary_inverse.xml +6 -0
  281. package/android/src/main/res/color/apex_navigation_text_secondary.xml +6 -0
  282. package/android/src/main/res/color/apex_navigation_text_secondary_inverse.xml +6 -0
  283. package/android/src/main/res/drawable/apex_navigation_ic_arrow_back.xml +13 -0
  284. package/android/src/main/res/drawable/apex_navigation_ic_close.xml +12 -0
  285. package/android/src/main/res/drawable/ic_fab_add_24dp.xml +12 -0
  286. package/android/src/main/res/values/attrs.xml +13 -0
  287. package/android/src/main/res/values/dimens.xml +5 -0
  288. package/android/src/main/res/values/dimens_splash.xml +9 -0
  289. package/android/src/main/res/values/ids.xml +12 -0
  290. package/android/src/main/res/values/styles.xml +18 -0
  291. package/android/src/main/res/values/themes.xml +75 -0
  292. package/android/src/main/res/values-night/styles.xml +6 -0
  293. package/android/src/main/res/values-night/themes.xml +67 -0
  294. package/cli/app.js +113 -0
  295. package/cli/changes.js +235 -0
  296. package/cli/codegen/commands.js +356 -0
  297. package/cli/codegen/index.js +211 -0
  298. package/cli/codegen/kotlin.js +396 -0
  299. package/cli/codegen/names.js +99 -0
  300. package/cli/codegen/read.js +602 -0
  301. package/cli/codegen/swift.js +342 -0
  302. package/cli/config.js +78 -0
  303. package/cli/diff.js +139 -0
  304. package/cli/doctor/checks/android.js +217 -0
  305. package/cli/doctor/checks/app.js +305 -0
  306. package/cli/doctor/checks/conflicts.js +42 -0
  307. package/cli/doctor/checks/devices.js +98 -0
  308. package/cli/doctor/checks/icons.js +69 -0
  309. package/cli/doctor/checks/ios.js +187 -0
  310. package/cli/doctor/checks/navigation.js +285 -0
  311. package/cli/doctor/checks/splash.js +102 -0
  312. package/cli/doctor/fix.js +66 -0
  313. package/cli/doctor/index.js +136 -0
  314. package/cli/doctor/types.js +30 -0
  315. package/cli/exec.js +34 -0
  316. package/cli/gradle.js +142 -0
  317. package/cli/icons/android.js +173 -0
  318. package/cli/icons/images.js +202 -0
  319. package/cli/icons/index.js +97 -0
  320. package/cli/icons/ios.js +113 -0
  321. package/cli/icons/settings.js +116 -0
  322. package/cli/images.js +67 -0
  323. package/cli/index.js +307 -0
  324. package/cli/info/index.js +290 -0
  325. package/cli/init/index.js +426 -0
  326. package/cli/init/packageManager.js +48 -0
  327. package/cli/init/starter.js +440 -0
  328. package/cli/links/files.js +109 -0
  329. package/cli/links/identity.js +75 -0
  330. package/cli/links/index.js +532 -0
  331. package/cli/links/native.js +396 -0
  332. package/cli/links/open.js +120 -0
  333. package/cli/links/prefixes.js +89 -0
  334. package/cli/mcp/appMap.js +128 -0
  335. package/cli/mcp/docs.js +175 -0
  336. package/cli/mcp/index.js +153 -0
  337. package/cli/mcp/markdown.js +210 -0
  338. package/cli/mcp/protocol.js +151 -0
  339. package/cli/mcp/tools.js +389 -0
  340. package/cli/migrate/entry.js +451 -0
  341. package/cli/migrate/index.js +305 -0
  342. package/cli/migrate/native.js +250 -0
  343. package/cli/migrate/report.js +238 -0
  344. package/cli/pods.js +56 -0
  345. package/cli/project.js +189 -0
  346. package/cli/screen/index.js +383 -0
  347. package/cli/screen/templates/compose.js +46 -0
  348. package/cli/screen/templates/native.js +40 -0
  349. package/cli/screen/templates/react.js +47 -0
  350. package/cli/screen/templates/swiftui.js +30 -0
  351. package/cli/screen/templates/uikit.js +48 -0
  352. package/cli/screen/templates/views.js +46 -0
  353. package/cli/setup/index.js +240 -0
  354. package/cli/setup/source.js +58 -0
  355. package/cli/setup/steps/app.js +76 -0
  356. package/cli/setup/steps/appDelegate.js +98 -0
  357. package/cli/setup/steps/entry.js +68 -0
  358. package/cli/setup/steps/env.js +245 -0
  359. package/cli/setup/steps/infoPlist.js +39 -0
  360. package/cli/setup/steps/mainActivity.js +60 -0
  361. package/cli/setup/steps/mainApplication.js +58 -0
  362. package/cli/setup/steps/manifest.js +38 -0
  363. package/cli/setup/steps/styles.js +29 -0
  364. package/cli/setup/steps/types.js +14 -0
  365. package/cli/splash/android.js +239 -0
  366. package/cli/splash/files.js +50 -0
  367. package/cli/splash/images.js +117 -0
  368. package/cli/splash/index.js +109 -0
  369. package/cli/splash/ios.js +349 -0
  370. package/cli/splash/settings.js +143 -0
  371. package/cli/typescript.js +473 -0
  372. package/cli/ui.js +268 -0
  373. package/cli/upgrade/changelog.js +45 -0
  374. package/cli/upgrade/index.js +347 -0
  375. package/cli/upgrade/versions.js +105 -0
  376. package/cli/workspace.js +60 -0
  377. package/cli/xcode/pbxproj.js +327 -0
  378. package/docs-md/architecture/errors-and-loading.md +138 -0
  379. package/docs-md/architecture/native-screens.md +290 -0
  380. package/docs-md/architecture/one-tree.md +164 -0
  381. package/docs-md/architecture/theme-and-context.md +368 -0
  382. package/docs-md/architecture/transitions.md +191 -0
  383. package/docs-md/containers/arrangement.md +320 -0
  384. package/docs-md/containers/modals.md +195 -0
  385. package/docs-md/containers/overlays.md +109 -0
  386. package/docs-md/containers/side-menu.md +138 -0
  387. package/docs-md/containers/split-view.md +155 -0
  388. package/docs-md/containers/stack.md +156 -0
  389. package/docs-md/containers/tabs.md +187 -0
  390. package/docs-md/flows/a-search-screen.md +311 -0
  391. package/docs-md/flows/an-app-with-tabs.md +380 -0
  392. package/docs-md/flows/bottom-sheets.md +326 -0
  393. package/docs-md/flows/forms-in-a-modal.md +420 -0
  394. package/docs-md/flows/list-and-details.md +428 -0
  395. package/docs-md/flows/onboarding.md +454 -0
  396. package/docs-md/flows/sign-in-and-sign-out.md +693 -0
  397. package/docs-md/fundamentals/lifecycle-and-events.md +224 -0
  398. package/docs-md/fundamentals/moving-between-screens.md +267 -0
  399. package/docs-md/fundamentals/screen-options.md +197 -0
  400. package/docs-md/fundamentals/screens-and-props.md +314 -0
  401. package/docs-md/fundamentals/starting-the-app.md +317 -0
  402. package/docs-md/fundamentals/switching-roots.md +166 -0
  403. package/docs-md/guides/analytics.md +377 -0
  404. package/docs-md/guides/app-context.md +554 -0
  405. package/docs-md/guides/building-a-screen.md +350 -0
  406. package/docs-md/guides/cli.md +421 -0
  407. package/docs-md/guides/data-fetching.md +492 -0
  408. package/docs-md/guides/deep-links.md +694 -0
  409. package/docs-md/guides/error-reporting.md +290 -0
  410. package/docs-md/guides/gestures-and-animations.md +381 -0
  411. package/docs-md/guides/notifications.md +548 -0
  412. package/docs-md/guides/overview.md +65 -0
  413. package/docs-md/guides/right-to-left.md +273 -0
  414. package/docs-md/guides/splash-screen.md +30 -0
  415. package/docs-md/guides/state-management.md +1050 -0
  416. package/docs-md/guides/testing.md +293 -0
  417. package/docs-md/help/glossary.md +433 -0
  418. package/docs-md/help/troubleshooting.md +709 -0
  419. package/docs-md/index.json +4205 -0
  420. package/docs-md/migration/from-expo-router.md +446 -0
  421. package/docs-md/migration/from-react-native-navigation.md +789 -0
  422. package/docs-md/migration/from-react-navigation.md +628 -0
  423. package/docs-md/screen-ui/back-and-gestures.md +178 -0
  424. package/docs-md/screen-ui/bar-buttons.md +312 -0
  425. package/docs-md/screen-ui/search.md +181 -0
  426. package/docs-md/screen-ui/system-ui.md +337 -0
  427. package/docs-md/screen-ui/toolbar-and-fab.md +146 -0
  428. package/docs-md/screen-ui/top-bar.md +247 -0
  429. package/docs-md/start/installation.md +233 -0
  430. package/docs-md/start/introduction.md +46 -0
  431. package/docs-md/start/quick-start.md +124 -0
  432. package/ios/Animations/ANNAnimationRules.h +72 -0
  433. package/ios/Animations/ANNAnimationRules.mm +122 -0
  434. package/ios/Animations/ANNFrameDriver.h +46 -0
  435. package/ios/Animations/ANNFrameDriver.mm +126 -0
  436. package/ios/Animations/ANNTransitionAnimator.h +34 -0
  437. package/ios/Animations/ANNTransitionAnimator.mm +293 -0
  438. package/ios/Animations/ANNTransitionPlan.h +115 -0
  439. package/ios/Animations/ANNTransitionPlan.mm +130 -0
  440. package/ios/Animations/ANNTransitionWait.h +29 -0
  441. package/ios/Animations/ANNTransitionWait.mm +135 -0
  442. package/ios/Animations/Elements/ANNElementFinder.h +26 -0
  443. package/ios/Animations/Elements/ANNElementFinder.mm +37 -0
  444. package/ios/Animations/Elements/ANNElementTransition.h +30 -0
  445. package/ios/Animations/Elements/ANNElementTransition.mm +75 -0
  446. package/ios/Animations/Elements/ANNSharedElementFlight.h +42 -0
  447. package/ios/Animations/Elements/ANNSharedElementFlight.mm +340 -0
  448. package/ios/Animations/Elements/ANNZoomAnchor.h +33 -0
  449. package/ios/Animations/Elements/ANNZoomAnchor.mm +133 -0
  450. package/ios/Animations/Interpolators/ANNCurve.h +61 -0
  451. package/ios/Animations/Interpolators/ANNCurve.mm +301 -0
  452. package/ios/Animations/Interpolators/ANNInterpolate.h +69 -0
  453. package/ios/Animations/Interpolators/ANNTrack.h +52 -0
  454. package/ios/Animations/Interpolators/ANNTrack.mm +77 -0
  455. package/ios/Animations/Interpolators/ANNViewTracks.h +57 -0
  456. package/ios/Animations/Interpolators/ANNViewTracks.mm +261 -0
  457. package/ios/ApexNavigation-prefix.h +6 -0
  458. package/ios/CLAUDE.md +151 -0
  459. package/ios/CORE.md +177 -0
  460. package/ios/Contract/ANNCommandAnswer.h +38 -0
  461. package/ios/Contract/ANNCommandAnswer.mm +99 -0
  462. package/ios/Contract/ANNCommandRunner.h +42 -0
  463. package/ios/Contract/ANNCommandRunner.mm +89 -0
  464. package/ios/Contract/ANNErrorTexts.h +86 -0
  465. package/ios/Contract/ANNErrorTexts.mm +230 -0
  466. package/ios/Contract/ANNLayoutNode.h +64 -0
  467. package/ios/Contract/ANNLayoutNode.mm +153 -0
  468. package/ios/Contract/ANNLayoutReader.h +34 -0
  469. package/ios/Contract/ANNLayoutReader.mm +282 -0
  470. package/ios/Contract/ANNLayoutRoot.h +26 -0
  471. package/ios/Contract/ANNLayoutRoot.mm +21 -0
  472. package/ios/Contract/ANNLayoutTreeOptions.h +22 -0
  473. package/ios/Contract/ANNLayoutTreeOptions.mm +32 -0
  474. package/ios/Contract/ANNLayoutType.h +44 -0
  475. package/ios/Contract/ANNLayoutValidator.h +23 -0
  476. package/ios/Contract/ANNLayoutValidator.mm +28 -0
  477. package/ios/Core/ANNAppDelegate.mm +122 -0
  478. package/ios/Core/ANNAppDirection.h +43 -0
  479. package/ios/Core/ANNAppDirection.mm +194 -0
  480. package/ios/Core/ANNAppearanceDispatcher.h +117 -0
  481. package/ios/Core/ANNAppearanceDispatcher.mm +433 -0
  482. package/ios/Core/ANNAssert.h +7 -0
  483. package/ios/Core/ANNDeepLinkQueue.h +35 -0
  484. package/ios/Core/ANNDeepLinkQueue.mm +136 -0
  485. package/ios/Core/ANNErrorHandler.h +17 -0
  486. package/ios/Core/ANNErrorHandler.mm +14 -0
  487. package/ios/Core/ANNEventEmitter.h +174 -0
  488. package/ios/Core/ANNEventEmitter.mm +337 -0
  489. package/ios/Core/ANNHinge.h +26 -0
  490. package/ios/Core/ANNHinge.mm +116 -0
  491. package/ios/Core/ANNKeyCommands.h +12 -0
  492. package/ios/Core/ANNKeyCommands.mm +74 -0
  493. package/ios/Core/ANNLayoutInfo.h +18 -0
  494. package/ios/Core/ANNLayoutInfo.mm +13 -0
  495. package/ios/Core/ANNLayoutProtocol.h +155 -0
  496. package/ios/Core/ANNNavigationState.h +38 -0
  497. package/ios/Core/ANNNavigationState.mm +127 -0
  498. package/ios/Core/ANNNodeHelper.h +114 -0
  499. package/ios/Core/ANNNodeHelper.mm +260 -0
  500. package/ios/Core/ANNNodePresenter.h +86 -0
  501. package/ios/Core/ANNNodePresenter.mm +92 -0
  502. package/ios/Core/ANNNodeRegistry.h +30 -0
  503. package/ios/Core/ANNNodeRegistry.mm +48 -0
  504. package/ios/Core/ANNOptionsRepaint.h +19 -0
  505. package/ios/Core/ANNOptionsRepaint.mm +59 -0
  506. package/ios/Core/ANNParking.h +34 -0
  507. package/ios/Core/ANNParking.mm +117 -0
  508. package/ios/Core/ANNPendingLayers.h +31 -0
  509. package/ios/Core/ANNPendingLayers.mm +57 -0
  510. package/ios/Core/ANNReloadCoordinator.h +26 -0
  511. package/ios/Core/ANNReloadCoordinator.mm +211 -0
  512. package/ios/Core/ANNRenderWait.h +105 -0
  513. package/ios/Core/ANNRenderWait.mm +496 -0
  514. package/ios/Core/ANNSceneDelegate.mm +92 -0
  515. package/ios/Core/ANNScreenAppearance+Internal.h +29 -0
  516. package/ios/Core/ANNScreenAppearance.h +60 -0
  517. package/ios/Core/ANNScreenAppearance.mm +44 -0
  518. package/ios/Core/ANNShownScreens.h +27 -0
  519. package/ios/Core/ANNShownScreens.mm +16 -0
  520. package/ios/Core/ANNSystemUI.h +95 -0
  521. package/ios/Core/ANNSystemUI.mm +401 -0
  522. package/ios/Core/ANNSystemUIRules.h +35 -0
  523. package/ios/Core/ANNSystemUIRules.mm +139 -0
  524. package/ios/Core/ANNUtils.h +35 -0
  525. package/ios/Core/ANNUtils.mm +111 -0
  526. package/ios/Core/ApexNavigation+Internal.h +26 -0
  527. package/ios/Core/ApexNavigation.mm +177 -0
  528. package/ios/Core/UIViewController+LayoutProtocol.h +102 -0
  529. package/ios/Core/UIViewController+LayoutProtocol.mm +253 -0
  530. package/ios/Layouts/Arrangement/ANNArrangementScreenDelegate.h +18 -0
  531. package/ios/Layouts/Arrangement/ANNArrangementState.h +30 -0
  532. package/ios/Layouts/Arrangement/ANNArrangementState.mm +53 -0
  533. package/ios/Layouts/Arrangement/ANNArrangementViewController.h +38 -0
  534. package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +573 -0
  535. package/ios/Layouts/External/ANNExternalViewController.h +28 -0
  536. package/ios/Layouts/External/ANNExternalViewController.mm +118 -0
  537. package/ios/Layouts/External/ANNNativeScreenCalls.h +27 -0
  538. package/ios/Layouts/External/ANNNativeScreenCalls.mm +77 -0
  539. package/ios/Layouts/Modal/ANNModal.h +121 -0
  540. package/ios/Layouts/Modal/ANNModal.mm +64 -0
  541. package/ios/Layouts/Modal/ANNModalCoordinator.h +99 -0
  542. package/ios/Layouts/Modal/ANNModalCoordinator.mm +1965 -0
  543. package/ios/Layouts/Modal/ANNModalHostViewComponentView.h +13 -0
  544. package/ios/Layouts/Modal/ANNModalHostViewComponentView.mm +24 -0
  545. package/ios/Layouts/Modal/ANNModalPresentation.h +73 -0
  546. package/ios/Layouts/Modal/ANNModalPresentation.mm +189 -0
  547. package/ios/Layouts/Modal/ANNModalSizePresenter.h +13 -0
  548. package/ios/Layouts/Modal/ANNModalSizePresenter.mm +65 -0
  549. package/ios/Layouts/Modal/ANNModalTransitions.h +29 -0
  550. package/ios/Layouts/Modal/ANNModalTransitions.mm +40 -0
  551. package/ios/Layouts/Modal/ANNPopoverPresenter.h +29 -0
  552. package/ios/Layouts/Modal/ANNPopoverPresenter.mm +158 -0
  553. package/ios/Layouts/Modal/ANNPresentationGate.h +52 -0
  554. package/ios/Layouts/Modal/ANNPresentationGate.mm +153 -0
  555. package/ios/Layouts/Modal/ANNSheetPresenter.h +31 -0
  556. package/ios/Layouts/Modal/ANNSheetPresenter.mm +247 -0
  557. package/ios/Layouts/Overlay/ANNOverlayCoordinator.h +66 -0
  558. package/ios/Layouts/Overlay/ANNOverlayCoordinator.mm +604 -0
  559. package/ios/Layouts/Overlay/ANNOverlayWindow.h +10 -0
  560. package/ios/Layouts/Overlay/ANNOverlayWindow.mm +71 -0
  561. package/ios/Layouts/Root/ANNLayoutFactory.h +31 -0
  562. package/ios/Layouts/Root/ANNLayoutFactory.mm +349 -0
  563. package/ios/Layouts/Root/ANNRootCoordinator.h +42 -0
  564. package/ios/Layouts/Root/ANNRootCoordinator.mm +847 -0
  565. package/ios/Layouts/Root/ANNSplashViewController.h +30 -0
  566. package/ios/Layouts/Root/ANNSplashViewController.mm +138 -0
  567. package/ios/Layouts/Screen/ANNComponentPresenter.h +32 -0
  568. package/ios/Layouts/Screen/ANNComponentPresenter.mm +136 -0
  569. package/ios/Layouts/Screen/ANNComponentViewController.h +100 -0
  570. package/ios/Layouts/Screen/ANNComponentViewController.mm +652 -0
  571. package/ios/Layouts/Screen/ANNNativeScreenContext+Internal.h +19 -0
  572. package/ios/Layouts/Screen/ANNNativeScreenContext.mm +84 -0
  573. package/ios/Layouts/Screen/ANNPreviewInteraction.h +38 -0
  574. package/ios/Layouts/Screen/ANNPreviewInteraction.mm +252 -0
  575. package/ios/Layouts/Screen/ANNScreenBars.h +29 -0
  576. package/ios/Layouts/Screen/ANNScreenBars.mm +47 -0
  577. package/ios/Layouts/Screen/ANNScreenInsets.h +30 -0
  578. package/ios/Layouts/Screen/ANNScreenInsets.mm +68 -0
  579. package/ios/Layouts/Screen/ANNScreenReadiness.h +92 -0
  580. package/ios/Layouts/Screen/ANNScreenReadiness.mm +186 -0
  581. package/ios/Layouts/Screen/ANNScreenRegions.h +33 -0
  582. package/ios/Layouts/Screen/ANNScreenRegions.mm +105 -0
  583. package/ios/Layouts/Screen/ANNScreenSafeArea.h +38 -0
  584. package/ios/Layouts/Screen/ANNScreenSafeArea.mm +58 -0
  585. package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.h +41 -0
  586. package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.mm +113 -0
  587. package/ios/Layouts/SideMenu/ANNSideMenuPresenter.h +28 -0
  588. package/ios/Layouts/SideMenu/ANNSideMenuPresenter.mm +260 -0
  589. package/ios/Layouts/SideMenu/ANNSideMenuTypes.h +19 -0
  590. package/ios/Layouts/SideMenu/ANNSideMenuViewController.h +46 -0
  591. package/ios/Layouts/SideMenu/ANNSideMenuViewController.mm +891 -0
  592. package/ios/Layouts/SplitView/ANNSplitViewCommands.h +39 -0
  593. package/ios/Layouts/SplitView/ANNSplitViewCommands.mm +612 -0
  594. package/ios/Layouts/SplitView/ANNSplitViewController.h +52 -0
  595. package/ios/Layouts/SplitView/ANNSplitViewController.mm +494 -0
  596. package/ios/Layouts/SplitView/ANNSplitViewPresenter.h +18 -0
  597. package/ios/Layouts/SplitView/ANNSplitViewPresenter.mm +181 -0
  598. package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.h +32 -0
  599. package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.mm +133 -0
  600. package/ios/Layouts/Stack/ANNPreviewPush.h +46 -0
  601. package/ios/Layouts/Stack/ANNPreviewPush.mm +298 -0
  602. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.h +32 -0
  603. package/ios/Layouts/Stack/ANNStackAnimatingDelegate.mm +92 -0
  604. package/ios/Layouts/Stack/ANNStackCommands.h +51 -0
  605. package/ios/Layouts/Stack/ANNStackCommands.mm +403 -0
  606. package/ios/Layouts/Stack/ANNStackController.h +161 -0
  607. package/ios/Layouts/Stack/ANNStackController.mm +1597 -0
  608. package/ios/Layouts/Stack/ANNStackPresenter.h +44 -0
  609. package/ios/Layouts/Stack/ANNStackPresenter.mm +181 -0
  610. package/ios/Layouts/Stack/ANNStackQueue.h +194 -0
  611. package/ios/Layouts/Stack/ANNStackQueue.mm +1300 -0
  612. package/ios/Layouts/Stack/InteractivePopGestureDelegate.h +53 -0
  613. package/ios/Layouts/Stack/InteractivePopGestureDelegate.mm +228 -0
  614. package/ios/Layouts/Stack/UINavigationController+ANNCommands.h +19 -0
  615. package/ios/Layouts/Stack/UINavigationController+ANNCommands.mm +29 -0
  616. package/ios/Layouts/Tabs/ANNBottomTabCellView.h +33 -0
  617. package/ios/Layouts/Tabs/ANNBottomTabCellView.mm +100 -0
  618. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.h +49 -0
  619. package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.mm +153 -0
  620. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.h +17 -0
  621. package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.mm +56 -0
  622. package/ios/Layouts/Tabs/ANNBottomTabsController.h +121 -0
  623. package/ios/Layouts/Tabs/ANNBottomTabsController.mm +1404 -0
  624. package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.h +47 -0
  625. package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.mm +280 -0
  626. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.h +81 -0
  627. package/ios/Layouts/Tabs/ANNBottomTabsPresenter.mm +1026 -0
  628. package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.h +24 -0
  629. package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.mm +58 -0
  630. package/ios/Layouts/Tabs/ANNScrollToTop.h +23 -0
  631. package/ios/Layouts/Tabs/ANNScrollToTop.mm +55 -0
  632. package/ios/Layouts/Tabs/ANNTabDotView.h +19 -0
  633. package/ios/Layouts/Tabs/ANNTabDotView.mm +46 -0
  634. package/ios/Layouts/Tabs/ANNTabLongPress.h +28 -0
  635. package/ios/Layouts/Tabs/ANNTabLongPress.mm +98 -0
  636. package/ios/Layouts/Tabs/ANNTabsDesign.h +26 -0
  637. package/ios/Layouts/Tabs/ANNTabsDesign.mm +34 -0
  638. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.h +27 -0
  639. package/ios/Layouts/Tabs/ANNTabsPreloadWindow.mm +55 -0
  640. package/ios/Layouts/Tabs/UITabBar+utils.h +24 -0
  641. package/ios/Layouts/Tabs/UITabBar+utils.mm +103 -0
  642. package/ios/Options/ANNAnimationOptions.h +22 -0
  643. package/ios/Options/ANNAnimationOptions.mm +16 -0
  644. package/ios/Options/ANNAnimationPropertyOptions.h +17 -0
  645. package/ios/Options/ANNAnimationPropertyOptions.mm +15 -0
  646. package/ios/Options/ANNBottomTabDotIndicatorOptions.h +14 -0
  647. package/ios/Options/ANNBottomTabDotIndicatorOptions.mm +13 -0
  648. package/ios/Options/ANNBottomTabOptions.h +51 -0
  649. package/ios/Options/ANNBottomTabOptions.mm +47 -0
  650. package/ios/Options/ANNBottomTabsAccessoryOptions.h +19 -0
  651. package/ios/Options/ANNBottomTabsAccessoryOptions.mm +25 -0
  652. package/ios/Options/ANNBottomTabsAnimationOptions.h +12 -0
  653. package/ios/Options/ANNBottomTabsAnimationOptions.mm +11 -0
  654. package/ios/Options/ANNBottomTabsCustomRowOptions.h +19 -0
  655. package/ios/Options/ANNBottomTabsCustomRowOptions.mm +17 -0
  656. package/ios/Options/ANNBottomTabsOptions.h +51 -0
  657. package/ios/Options/ANNBottomTabsOptions.mm +48 -0
  658. package/ios/Options/ANNBottomTabsShadowOptions.h +14 -0
  659. package/ios/Options/ANNBottomTabsShadowOptions.mm +13 -0
  660. package/ios/Options/ANNButtonComponentOptions.h +13 -0
  661. package/ios/Options/ANNButtonComponentOptions.mm +12 -0
  662. package/ios/Options/ANNButtonOptions.h +56 -0
  663. package/ios/Options/ANNButtonOptions.mm +53 -0
  664. package/ios/Options/ANNButtonsParser.h +13 -0
  665. package/ios/Options/ANNButtonsParser.mm +18 -0
  666. package/ios/Options/ANNComponentOptions.h +14 -0
  667. package/ios/Options/ANNComponentOptions.mm +12 -0
  668. package/ios/Options/ANNDefaultOptions.h +18 -0
  669. package/ios/Options/ANNDefaultOptions.mm +22 -0
  670. package/ios/Options/ANNElementAnimationOptions.h +18 -0
  671. package/ios/Options/ANNElementAnimationOptions.mm +15 -0
  672. package/ios/Options/ANNElementTransitionOptions.h +26 -0
  673. package/ios/Options/ANNElementTransitionOptions.mm +28 -0
  674. package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.h +14 -0
  675. package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.mm +12 -0
  676. package/ios/Options/ANNEnterExitScreenAnimationOptions.h +14 -0
  677. package/ios/Options/ANNEnterExitScreenAnimationOptions.mm +12 -0
  678. package/ios/Options/ANNEnterExitTopBarAnimationOptions.h +14 -0
  679. package/ios/Options/ANNEnterExitTopBarAnimationOptions.mm +12 -0
  680. package/ios/Options/ANNFabOptions.h +26 -0
  681. package/ios/Options/ANNFabOptions.mm +23 -0
  682. package/ios/Options/ANNFontOptions.h +24 -0
  683. package/ios/Options/ANNFontOptions.mm +65 -0
  684. package/ios/Options/ANNHardwareBackButtonOptions.h +15 -0
  685. package/ios/Options/ANNHardwareBackButtonOptions.mm +13 -0
  686. package/ios/Options/ANNIconBackgroundOptions.h +16 -0
  687. package/ios/Options/ANNIconBackgroundOptions.mm +15 -0
  688. package/ios/Options/ANNIconInsetsOptions.h +16 -0
  689. package/ios/Options/ANNIconInsetsOptions.mm +14 -0
  690. package/ios/Options/ANNInterpolationOptions.h +22 -0
  691. package/ios/Options/ANNInterpolationOptions.mm +22 -0
  692. package/ios/Options/ANNLayoutOptions.h +26 -0
  693. package/ios/Options/ANNLayoutOptions.mm +25 -0
  694. package/ios/Options/ANNMenuOptions.h +37 -0
  695. package/ios/Options/ANNMenuOptions.mm +136 -0
  696. package/ios/Options/ANNModalAnimationOptions.h +17 -0
  697. package/ios/Options/ANNModalAnimationOptions.mm +15 -0
  698. package/ios/Options/ANNModalContentSizeOptions.h +14 -0
  699. package/ios/Options/ANNModalContentSizeOptions.mm +15 -0
  700. package/ios/Options/ANNModalOptions.h +19 -0
  701. package/ios/Options/ANNModalOptions.mm +15 -0
  702. package/ios/Options/ANNNavigationBarOptions.h +14 -0
  703. package/ios/Options/ANNNavigationBarOptions.mm +13 -0
  704. package/ios/Options/ANNNavigationOptions.h +60 -0
  705. package/ios/Options/ANNNavigationOptions.mm +54 -0
  706. package/ios/Options/ANNOptionField.h +91 -0
  707. package/ios/Options/ANNOptionField.mm +173 -0
  708. package/ios/Options/ANNOptions.h +62 -0
  709. package/ios/Options/ANNOptions.mm +329 -0
  710. package/ios/Options/ANNOptionsCache.h +22 -0
  711. package/ios/Options/ANNOptionsCache.mm +17 -0
  712. package/ios/Options/ANNOptionsReader.h +33 -0
  713. package/ios/Options/ANNOptionsReader.mm +63 -0
  714. package/ios/Options/ANNOverlayOptions.h +14 -0
  715. package/ios/Options/ANNOverlayOptions.mm +12 -0
  716. package/ios/Options/ANNPopoverOptions.h +17 -0
  717. package/ios/Options/ANNPopoverOptions.mm +31 -0
  718. package/ios/Options/ANNPreviewOptions.h +17 -0
  719. package/ios/Options/ANNPreviewOptions.mm +15 -0
  720. package/ios/Options/ANNScreenAnimationOptions.h +13 -0
  721. package/ios/Options/ANNScreenAnimationOptions.mm +12 -0
  722. package/ios/Options/ANNScrollEdgeEffectOptions.h +20 -0
  723. package/ios/Options/ANNScrollEdgeEffectOptions.mm +16 -0
  724. package/ios/Options/ANNScrollEdgeOptions.h +14 -0
  725. package/ios/Options/ANNScrollEdgeOptions.mm +12 -0
  726. package/ios/Options/ANNSearchBarOptions.h +49 -0
  727. package/ios/Options/ANNSearchBarOptions.mm +41 -0
  728. package/ios/Options/ANNSearchScopeOptions.h +15 -0
  729. package/ios/Options/ANNSearchScopeOptions.mm +13 -0
  730. package/ios/Options/ANNSearchSuggestionOptions.h +19 -0
  731. package/ios/Options/ANNSearchSuggestionOptions.mm +16 -0
  732. package/ios/Options/ANNSearchTokenOptions.h +18 -0
  733. package/ios/Options/ANNSearchTokenOptions.mm +15 -0
  734. package/ios/Options/ANNSetStackRootAnimationOptions.h +12 -0
  735. package/ios/Options/ANNSetStackRootAnimationOptions.mm +11 -0
  736. package/ios/Options/ANNSharedElementTransitionOptions.h +17 -0
  737. package/ios/Options/ANNSharedElementTransitionOptions.mm +15 -0
  738. package/ios/Options/ANNSheetOptions.h +25 -0
  739. package/ios/Options/ANNSheetOptions.mm +41 -0
  740. package/ios/Options/ANNSideMenuOptions.h +19 -0
  741. package/ios/Options/ANNSideMenuOptions.mm +16 -0
  742. package/ios/Options/ANNSideMenuSideOptions.h +23 -0
  743. package/ios/Options/ANNSideMenuSideOptions.mm +20 -0
  744. package/ios/Options/ANNSplitViewColumnOptions.h +14 -0
  745. package/ios/Options/ANNSplitViewColumnOptions.mm +13 -0
  746. package/ios/Options/ANNSplitViewInspectorOptions.h +13 -0
  747. package/ios/Options/ANNSplitViewInspectorOptions.mm +9 -0
  748. package/ios/Options/ANNSplitViewOptions.h +29 -0
  749. package/ios/Options/ANNSplitViewOptions.mm +26 -0
  750. package/ios/Options/ANNStackAnimationOptions.h +23 -0
  751. package/ios/Options/ANNStackAnimationOptions.mm +20 -0
  752. package/ios/Options/ANNStackPushAnimationOptions.h +13 -0
  753. package/ios/Options/ANNStackPushAnimationOptions.mm +11 -0
  754. package/ios/Options/ANNStatusBarOptions.h +20 -0
  755. package/ios/Options/ANNStatusBarOptions.mm +18 -0
  756. package/ios/Options/ANNToolbarOptions.h +14 -0
  757. package/ios/Options/ANNToolbarOptions.mm +27 -0
  758. package/ios/Options/ANNTopBarAnimationOptions.h +12 -0
  759. package/ios/Options/ANNTopBarAnimationOptions.mm +11 -0
  760. package/ios/Options/ANNTopBarBackButtonOptions.h +31 -0
  761. package/ios/Options/ANNTopBarBackButtonOptions.mm +35 -0
  762. package/ios/Options/ANNTopBarBackgroundComponentOptions.h +13 -0
  763. package/ios/Options/ANNTopBarBackgroundComponentOptions.mm +11 -0
  764. package/ios/Options/ANNTopBarBackgroundOptions.h +17 -0
  765. package/ios/Options/ANNTopBarBackgroundOptions.mm +15 -0
  766. package/ios/Options/ANNTopBarLargeTitleOptions.h +19 -0
  767. package/ios/Options/ANNTopBarLargeTitleOptions.mm +15 -0
  768. package/ios/Options/ANNTopBarOptions.h +62 -0
  769. package/ios/Options/ANNTopBarOptions.mm +49 -0
  770. package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.h +14 -0
  771. package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.mm +12 -0
  772. package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.h +19 -0
  773. package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.mm +16 -0
  774. package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.h +16 -0
  775. package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.mm +12 -0
  776. package/ios/Options/ANNTopBarSubtitleOptions.h +18 -0
  777. package/ios/Options/ANNTopBarSubtitleOptions.mm +14 -0
  778. package/ios/Options/ANNTopBarTitleComponentOptions.h +15 -0
  779. package/ios/Options/ANNTopBarTitleComponentOptions.mm +12 -0
  780. package/ios/Options/ANNTopBarTitleDocumentOptions.h +12 -0
  781. package/ios/Options/ANNTopBarTitleDocumentOptions.mm +11 -0
  782. package/ios/Options/ANNTopBarTitleOptions.h +29 -0
  783. package/ios/Options/ANNTopBarTitleOptions.mm +21 -0
  784. package/ios/Options/ANNViewAnimationOptions.h +26 -0
  785. package/ios/Options/ANNViewAnimationOptions.mm +58 -0
  786. package/ios/Options/ANNWindowOptions.h +12 -0
  787. package/ios/Options/ANNWindowOptions.mm +9 -0
  788. package/ios/Options/ANNZoomTransitionOptions.h +13 -0
  789. package/ios/Options/ANNZoomTransitionOptions.mm +12 -0
  790. package/ios/Options/Params/ANNIntegerParam.h +14 -0
  791. package/ios/Options/Params/ANNIntegerParam.mm +13 -0
  792. package/ios/Options/Params/ANNParam.h +28 -0
  793. package/ios/Options/Params/ANNParam.mm +29 -0
  794. package/ios/Options/Params/Bool.h +17 -0
  795. package/ios/Options/Params/Bool.mm +17 -0
  796. package/ios/Options/Params/BoolParser.h +12 -0
  797. package/ios/Options/Params/BoolParser.mm +10 -0
  798. package/ios/Options/Params/Color.h +43 -0
  799. package/ios/Options/Params/Color.mm +65 -0
  800. package/ios/Options/Params/ColorParser.h +14 -0
  801. package/ios/Options/Params/ColorParser.mm +95 -0
  802. package/ios/Options/Params/Double.h +14 -0
  803. package/ios/Options/Params/Double.mm +13 -0
  804. package/ios/Options/Params/DoubleParser.h +16 -0
  805. package/ios/Options/Params/DoubleParser.mm +16 -0
  806. package/ios/Options/Params/Image.h +15 -0
  807. package/ios/Options/Params/Image.mm +13 -0
  808. package/ios/Options/Params/ImageParser.h +16 -0
  809. package/ios/Options/Params/ImageParser.mm +103 -0
  810. package/ios/Options/Params/Number.h +14 -0
  811. package/ios/Options/Params/Number.mm +13 -0
  812. package/ios/Options/Params/NumberParser.h +13 -0
  813. package/ios/Options/Params/NumberParser.mm +10 -0
  814. package/ios/Options/Params/Param.h +16 -0
  815. package/ios/Options/Params/Param.mm +13 -0
  816. package/ios/Options/Params/Text.h +17 -0
  817. package/ios/Options/Params/Text.mm +17 -0
  818. package/ios/Options/Params/TextParser.h +17 -0
  819. package/ios/Options/Params/TextParser.mm +17 -0
  820. package/ios/Package.swift +58 -0
  821. package/ios/Public/ApexNavigation/ANNAppDelegate.h +66 -0
  822. package/ios/Public/ApexNavigation/ANNSceneDelegate.h +19 -0
  823. package/ios/Public/ApexNavigation/ApexNavigation.h +92 -0
  824. package/ios/Public/module.modulemap +8 -0
  825. package/ios/RECIPES.md +41 -0
  826. package/ios/React/ANNComponentType.h +22 -0
  827. package/ios/React/ANNComponentViewCreator.h +18 -0
  828. package/ios/React/ANNReactComponentRegistry.h +53 -0
  829. package/ios/React/ANNReactComponentRegistry.mm +153 -0
  830. package/ios/React/ANNReactView.h +104 -0
  831. package/ios/React/ANNReactView.mm +374 -0
  832. package/ios/React/ANNReactViewCreator.h +20 -0
  833. package/ios/React/ANNReactViewCreator.mm +42 -0
  834. package/ios/React/ANNSafeAreaViewComponentView.h +13 -0
  835. package/ios/React/ANNSafeAreaViewComponentView.mm +153 -0
  836. package/ios/React/ANNSurfaceHostingView.h +17 -0
  837. package/ios/React/ANNSurfaceHostingView.mm +68 -0
  838. package/ios/React/Slots/ANNSlotComponentView.h +10 -0
  839. package/ios/React/Slots/ANNSlotComponentView.mm +122 -0
  840. package/ios/React/Slots/ANNSlotContainers.h +34 -0
  841. package/ios/React/Slots/ANNSlotContainers.mm +39 -0
  842. package/ios/React/Slots/ANNSlotContentView.h +12 -0
  843. package/ios/React/Slots/ANNSlotContentView.mm +18 -0
  844. package/ios/React/Slots/ANNSlotHost.h +29 -0
  845. package/ios/React/Slots/ANNSlotHost.mm +59 -0
  846. package/ios/React/Slots/ANNSlotScreenView.h +38 -0
  847. package/ios/React/Slots/ANNSlotScreenView.mm +254 -0
  848. package/ios/TopBar/ANNBackButtonPresenter.h +35 -0
  849. package/ios/TopBar/ANNBackButtonPresenter.mm +187 -0
  850. package/ios/TopBar/ANNBarAppearance.h +53 -0
  851. package/ios/TopBar/ANNBarAppearance.mm +278 -0
  852. package/ios/TopBar/ANNBarBackgroundComponent.h +46 -0
  853. package/ios/TopBar/ANNBarBackgroundComponent.mm +163 -0
  854. package/ios/TopBar/ANNBarButtonComponentView.h +30 -0
  855. package/ios/TopBar/ANNBarButtonComponentView.mm +110 -0
  856. package/ios/TopBar/ANNBarButtons.h +65 -0
  857. package/ios/TopBar/ANNBarButtons.mm +1125 -0
  858. package/ios/TopBar/ANNBarComponentsWait.h +37 -0
  859. package/ios/TopBar/ANNBarComponentsWait.mm +116 -0
  860. package/ios/TopBar/ANNIconButtonImage.h +25 -0
  861. package/ios/TopBar/ANNIconButtonImage.mm +94 -0
  862. package/ios/TopBar/ANNLargeTitlePresenter.h +117 -0
  863. package/ios/TopBar/ANNLargeTitlePresenter.mm +402 -0
  864. package/ios/TopBar/ANNMainList.h +28 -0
  865. package/ios/TopBar/ANNMainList.mm +72 -0
  866. package/ios/TopBar/ANNScrollEdgeEffects.h +29 -0
  867. package/ios/TopBar/ANNScrollEdgeEffects.mm +122 -0
  868. package/ios/TopBar/ANNSearchPresenter.h +29 -0
  869. package/ios/TopBar/ANNSearchPresenter.mm +637 -0
  870. package/ios/TopBar/ANNSearchResultsViewController.h +16 -0
  871. package/ios/TopBar/ANNSearchResultsViewController.mm +56 -0
  872. package/ios/TopBar/ANNShowTextButton.h +22 -0
  873. package/ios/TopBar/ANNShowTextButton.mm +63 -0
  874. package/ios/TopBar/ANNTitleComponentView.h +37 -0
  875. package/ios/TopBar/ANNTitleComponentView.mm +86 -0
  876. package/ios/TopBar/ANNTitleGlassView.h +33 -0
  877. package/ios/TopBar/ANNTitleGlassView.mm +126 -0
  878. package/ios/TopBar/ANNTitleView.h +18 -0
  879. package/ios/TopBar/ANNTitleView.mm +63 -0
  880. package/ios/TopBar/ANNToolbarPresenter.h +26 -0
  881. package/ios/TopBar/ANNToolbarPresenter.mm +24 -0
  882. package/ios/TopBar/ANNTopBarPresenter.h +120 -0
  883. package/ios/TopBar/ANNTopBarPresenter.mm +1252 -0
  884. package/ios/TopBar/ANNUIBarButtonItem.h +16 -0
  885. package/ios/TopBar/ANNUIBarButtonItem.mm +5 -0
  886. package/ios/TurboModules/ANNTurboEventEmitter.h +31 -0
  887. package/ios/TurboModules/ANNTurboEventEmitter.mm +129 -0
  888. package/ios/TurboModules/ANNTurboModule.h +11 -0
  889. package/ios/TurboModules/ANNTurboModule.mm +626 -0
  890. package/ios/Utils/UIColor+ANNLuminance.h +13 -0
  891. package/ios/Utils/UIColor+ANNLuminance.mm +32 -0
  892. package/ios/Utils/UIView+Utils.h +12 -0
  893. package/ios/Utils/UIView+Utils.mm +21 -0
  894. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewComponentDescriptor.h +19 -0
  895. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewShadowNode.h +60 -0
  896. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewState.h +33 -0
  897. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotComponentDescriptor.h +22 -0
  898. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotShadowNode.h +87 -0
  899. package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.h +101 -0
  900. package/lib/module/ARCHITECTURE.md +289 -0
  901. package/lib/module/adapters/NativeANNTurboEventEmitter.js +12 -0
  902. package/lib/module/adapters/NativeANNTurboEventEmitter.js.map +1 -0
  903. package/lib/module/adapters/NativeANNTurboModule.js +13 -0
  904. package/lib/module/adapters/NativeANNTurboModule.js.map +1 -0
  905. package/lib/module/api/app/AppRegistry.js +52 -0
  906. package/lib/module/api/app/AppRegistry.js.map +1 -0
  907. package/lib/module/api/app/activeApp.js +12 -0
  908. package/lib/module/api/app/activeApp.js.map +1 -0
  909. package/lib/module/api/app/createNavigation.js +365 -0
  910. package/lib/module/api/app/createNavigation.js.map +1 -0
  911. package/lib/module/api/app/roots.js +20 -0
  912. package/lib/module/api/app/roots.js.map +1 -0
  913. package/lib/module/api/app/splash.js +124 -0
  914. package/lib/module/api/app/splash.js.map +1 -0
  915. package/lib/module/api/app/startFailure.js +38 -0
  916. package/lib/module/api/app/startFailure.js.map +1 -0
  917. package/lib/module/api/arrangement/arrangementState.js +86 -0
  918. package/lib/module/api/arrangement/arrangementState.js.map +1 -0
  919. package/lib/module/api/commands/commands.js +375 -0
  920. package/lib/module/api/commands/commands.js.map +1 -0
  921. package/lib/module/api/commands/errors.js +94 -0
  922. package/lib/module/api/commands/errors.js.map +1 -0
  923. package/lib/module/api/commands/presentation.js +4 -0
  924. package/lib/module/api/commands/presentation.js.map +1 -0
  925. package/lib/module/api/commands/sideMenus.js +134 -0
  926. package/lib/module/api/commands/sideMenus.js.map +1 -0
  927. package/lib/module/api/commands/transitions.js +245 -0
  928. package/lib/module/api/commands/transitions.js.map +1 -0
  929. package/lib/module/api/context/appContext.js +22 -0
  930. package/lib/module/api/context/appContext.js.map +1 -0
  931. package/lib/module/api/events/navigationEvents.js +69 -0
  932. package/lib/module/api/events/navigationEvents.js.map +1 -0
  933. package/lib/module/api/events/screenLifecycle.js +30 -0
  934. package/lib/module/api/events/screenLifecycle.js.map +1 -0
  935. package/lib/module/api/events/tabPresses.js +32 -0
  936. package/lib/module/api/events/tabPresses.js.map +1 -0
  937. package/lib/module/api/hinge/hinge.js +73 -0
  938. package/lib/module/api/hinge/hinge.js.map +1 -0
  939. package/lib/module/api/hooks/appHooks.js +26 -0
  940. package/lib/module/api/hooks/appHooks.js.map +1 -0
  941. package/lib/module/api/hooks/screenHooks.js +250 -0
  942. package/lib/module/api/hooks/screenHooks.js.map +1 -0
  943. package/lib/module/api/hooks/useArrangement.js +24 -0
  944. package/lib/module/api/hooks/useArrangement.js.map +1 -0
  945. package/lib/module/api/hooks/useHinge.js +29 -0
  946. package/lib/module/api/hooks/useHinge.js.map +1 -0
  947. package/lib/module/api/hooks/useNavigation.js +117 -0
  948. package/lib/module/api/hooks/useNavigation.js.map +1 -0
  949. package/lib/module/api/hooks/usePendingLink.js +12 -0
  950. package/lib/module/api/hooks/usePendingLink.js.map +1 -0
  951. package/lib/module/api/hooks/usePreview.js +97 -0
  952. package/lib/module/api/hooks/usePreview.js.map +1 -0
  953. package/lib/module/api/hooks/useReservedRegions.js +24 -0
  954. package/lib/module/api/hooks/useReservedRegions.js.map +1 -0
  955. package/lib/module/api/hooks/useSafeAreaInsets.js +25 -0
  956. package/lib/module/api/hooks/useSafeAreaInsets.js.map +1 -0
  957. package/lib/module/api/index.js +26 -0
  958. package/lib/module/api/index.js.map +1 -0
  959. package/lib/module/api/layout/Root.js +121 -0
  960. package/lib/module/api/layout/Root.js.map +1 -0
  961. package/lib/module/api/layout/Screen.js +52 -0
  962. package/lib/module/api/layout/Screen.js.map +1 -0
  963. package/lib/module/api/layout/SideMenu.js +85 -0
  964. package/lib/module/api/layout/SideMenu.js.map +1 -0
  965. package/lib/module/api/layout/SplitView.js +137 -0
  966. package/lib/module/api/layout/SplitView.js.map +1 -0
  967. package/lib/module/api/layout/Stack.js +36 -0
  968. package/lib/module/api/layout/Stack.js.map +1 -0
  969. package/lib/module/api/layout/Tabs.js +326 -0
  970. package/lib/module/api/layout/Tabs.js.map +1 -0
  971. package/lib/module/api/layout/element.js +100 -0
  972. package/lib/module/api/layout/element.js.map +1 -0
  973. package/lib/module/api/linking/linkPaths.js +132 -0
  974. package/lib/module/api/linking/linkPaths.js.map +1 -0
  975. package/lib/module/api/linking/linking.js +244 -0
  976. package/lib/module/api/linking/linking.js.map +1 -0
  977. package/lib/module/api/linking/pendingLinks.js +34 -0
  978. package/lib/module/api/linking/pendingLinks.js.map +1 -0
  979. package/lib/module/api/linking/types.js +4 -0
  980. package/lib/module/api/linking/types.js.map +1 -0
  981. package/lib/module/api/navigation.js +105 -0
  982. package/lib/module/api/navigation.js.map +1 -0
  983. package/lib/module/api/options/OptionsChain.js +158 -0
  984. package/lib/module/api/options/OptionsChain.js.map +1 -0
  985. package/lib/module/api/options/ScreenOptions.js +83 -0
  986. package/lib/module/api/options/ScreenOptions.js.map +1 -0
  987. package/lib/module/api/options/buttons.js +4 -0
  988. package/lib/module/api/options/buttons.js.map +1 -0
  989. package/lib/module/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
  990. package/lib/module/api/safeArea/screenInsets.js +86 -0
  991. package/lib/module/api/safeArea/screenInsets.js.map +1 -0
  992. package/lib/module/api/safeArea/screenRegions.js +84 -0
  993. package/lib/module/api/safeArea/screenRegions.js.map +1 -0
  994. package/lib/module/api/screens/ScreenBoundary.js +44 -0
  995. package/lib/module/api/screens/ScreenBoundary.js.map +1 -0
  996. package/lib/module/api/screens/arrangement.js +63 -0
  997. package/lib/module/api/screens/arrangement.js.map +1 -0
  998. package/lib/module/api/screens/defineScreen.js +29 -0
  999. package/lib/module/api/screens/defineScreen.js.map +1 -0
  1000. package/lib/module/api/screens/nativeScreenCalls.js +34 -0
  1001. package/lib/module/api/screens/nativeScreenCalls.js.map +1 -0
  1002. package/lib/module/api/screens/nativeScreens.js +43 -0
  1003. package/lib/module/api/screens/nativeScreens.js.map +1 -0
  1004. package/lib/module/api/screens/registerScreens.js +305 -0
  1005. package/lib/module/api/screens/registerScreens.js.map +1 -0
  1006. package/lib/module/api/slots/ANNSlotNativeComponent.ts +23 -0
  1007. package/lib/module/api/slots/SlotHost.js +92 -0
  1008. package/lib/module/api/slots/SlotHost.js.map +1 -0
  1009. package/lib/module/api/state/navigationState.js +98 -0
  1010. package/lib/module/api/state/navigationState.js.map +1 -0
  1011. package/lib/module/api/testIDs.js +14 -0
  1012. package/lib/module/api/testIDs.js.map +1 -0
  1013. package/lib/module/api/theme/theme.js +180 -0
  1014. package/lib/module/api/theme/theme.js.map +1 -0
  1015. package/lib/module/api/types.js +4 -0
  1016. package/lib/module/api/types.js.map +1 -0
  1017. package/lib/module/engine/backListeners.js +39 -0
  1018. package/lib/module/engine/backListeners.js.map +1 -0
  1019. package/lib/module/engine/buttons.js +105 -0
  1020. package/lib/module/engine/buttons.js.map +1 -0
  1021. package/lib/module/engine/commands.js +388 -0
  1022. package/lib/module/engine/commands.js.map +1 -0
  1023. package/lib/module/engine/events.js +30 -0
  1024. package/lib/module/engine/events.js.map +1 -0
  1025. package/lib/module/engine/ids.js +10 -0
  1026. package/lib/module/engine/ids.js.map +1 -0
  1027. package/lib/module/engine/launchState.js +34 -0
  1028. package/lib/module/engine/launchState.js.map +1 -0
  1029. package/lib/module/engine/layout.js +202 -0
  1030. package/lib/module/engine/layout.js.map +1 -0
  1031. package/lib/module/engine/mergeOptions.js +23 -0
  1032. package/lib/module/engine/mergeOptions.js.map +1 -0
  1033. package/lib/module/engine/native.js +45 -0
  1034. package/lib/module/engine/native.js.map +1 -0
  1035. package/lib/module/engine/nativeScreens.js +265 -0
  1036. package/lib/module/engine/nativeScreens.js.map +1 -0
  1037. package/lib/module/engine/options.js +170 -0
  1038. package/lib/module/engine/options.js.map +1 -0
  1039. package/lib/module/engine/places.js +178 -0
  1040. package/lib/module/engine/places.js.map +1 -0
  1041. package/lib/module/engine/props.js +44 -0
  1042. package/lib/module/engine/props.js.map +1 -0
  1043. package/lib/module/engine/reactMeasures.js +23 -0
  1044. package/lib/module/engine/reactMeasures.js.map +1 -0
  1045. package/lib/module/engine/rememberedOptions.js +118 -0
  1046. package/lib/module/engine/rememberedOptions.js.map +1 -0
  1047. package/lib/module/engine/screens.js +194 -0
  1048. package/lib/module/engine/screens.js.map +1 -0
  1049. package/lib/module/engine/slots.js +200 -0
  1050. package/lib/module/engine/slots.js.map +1 -0
  1051. package/lib/module/engine/tabs.js +79 -0
  1052. package/lib/module/engine/tabs.js.map +1 -0
  1053. package/lib/module/index.js +5 -0
  1054. package/lib/module/index.js.map +1 -0
  1055. package/lib/module/interfaces/ComponentEvents.js +2 -0
  1056. package/lib/module/interfaces/ComponentEvents.js.map +1 -0
  1057. package/lib/module/interfaces/Events.js +2 -0
  1058. package/lib/module/interfaces/Events.js.map +1 -0
  1059. package/lib/module/interfaces/Layout.js +4 -0
  1060. package/lib/module/interfaces/Layout.js.map +1 -0
  1061. package/lib/module/interfaces/Options.js +4 -0
  1062. package/lib/module/interfaces/Options.js.map +1 -0
  1063. package/lib/module/interfaces/options/animations.js +2 -0
  1064. package/lib/module/interfaces/options/animations.js.map +1 -0
  1065. package/lib/module/interfaces/options/bottomTabs.js +4 -0
  1066. package/lib/module/interfaces/options/bottomTabs.js.map +1 -0
  1067. package/lib/module/interfaces/options/buttons.js +4 -0
  1068. package/lib/module/interfaces/options/buttons.js.map +1 -0
  1069. package/lib/module/interfaces/options/common.js +4 -0
  1070. package/lib/module/interfaces/options/common.js.map +1 -0
  1071. package/lib/module/interfaces/options/modals.js +2 -0
  1072. package/lib/module/interfaces/options/modals.js.map +1 -0
  1073. package/lib/module/interfaces/options/preview.js +2 -0
  1074. package/lib/module/interfaces/options/preview.js.map +1 -0
  1075. package/lib/module/interfaces/options/sideMenu.js +2 -0
  1076. package/lib/module/interfaces/options/sideMenu.js.map +1 -0
  1077. package/lib/module/interfaces/options/splitView.js +2 -0
  1078. package/lib/module/interfaces/options/splitView.js.map +1 -0
  1079. package/lib/module/interfaces/options/stack.js +4 -0
  1080. package/lib/module/interfaces/options/stack.js.map +1 -0
  1081. package/lib/module/interfaces/options/system.js +4 -0
  1082. package/lib/module/interfaces/options/system.js.map +1 -0
  1083. package/lib/module/interfaces/options/toolbar.js +4 -0
  1084. package/lib/module/interfaces/options/toolbar.js.map +1 -0
  1085. package/lib/module/interfaces/options/topBar.js +4 -0
  1086. package/lib/module/interfaces/options/topBar.js.map +1 -0
  1087. package/lib/module/package.json +1 -0
  1088. package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts +14 -0
  1089. package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts.map +1 -0
  1090. package/lib/typescript/adapters/NativeANNTurboModule.d.ts +77 -0
  1091. package/lib/typescript/adapters/NativeANNTurboModule.d.ts.map +1 -0
  1092. package/lib/typescript/api/app/AppRegistry.d.ts +14 -0
  1093. package/lib/typescript/api/app/AppRegistry.d.ts.map +1 -0
  1094. package/lib/typescript/api/app/activeApp.d.ts +12 -0
  1095. package/lib/typescript/api/app/activeApp.d.ts.map +1 -0
  1096. package/lib/typescript/api/app/createNavigation.d.ts +182 -0
  1097. package/lib/typescript/api/app/createNavigation.d.ts.map +1 -0
  1098. package/lib/typescript/api/app/roots.d.ts +15 -0
  1099. package/lib/typescript/api/app/roots.d.ts.map +1 -0
  1100. package/lib/typescript/api/app/splash.d.ts +81 -0
  1101. package/lib/typescript/api/app/splash.d.ts.map +1 -0
  1102. package/lib/typescript/api/app/startFailure.d.ts +15 -0
  1103. package/lib/typescript/api/app/startFailure.d.ts.map +1 -0
  1104. package/lib/typescript/api/arrangement/arrangementState.d.ts +21 -0
  1105. package/lib/typescript/api/arrangement/arrangementState.d.ts.map +1 -0
  1106. package/lib/typescript/api/commands/commands.d.ts +57 -0
  1107. package/lib/typescript/api/commands/commands.d.ts.map +1 -0
  1108. package/lib/typescript/api/commands/errors.d.ts +24 -0
  1109. package/lib/typescript/api/commands/errors.d.ts.map +1 -0
  1110. package/lib/typescript/api/commands/presentation.d.ts +69 -0
  1111. package/lib/typescript/api/commands/presentation.d.ts.map +1 -0
  1112. package/lib/typescript/api/commands/sideMenus.d.ts +14 -0
  1113. package/lib/typescript/api/commands/sideMenus.d.ts.map +1 -0
  1114. package/lib/typescript/api/commands/transitions.d.ts +33 -0
  1115. package/lib/typescript/api/commands/transitions.d.ts.map +1 -0
  1116. package/lib/typescript/api/context/appContext.d.ts +4 -0
  1117. package/lib/typescript/api/context/appContext.d.ts.map +1 -0
  1118. package/lib/typescript/api/events/navigationEvents.d.ts +70 -0
  1119. package/lib/typescript/api/events/navigationEvents.d.ts.map +1 -0
  1120. package/lib/typescript/api/events/screenLifecycle.d.ts +5 -0
  1121. package/lib/typescript/api/events/screenLifecycle.d.ts.map +1 -0
  1122. package/lib/typescript/api/events/tabPresses.d.ts +5 -0
  1123. package/lib/typescript/api/events/tabPresses.d.ts.map +1 -0
  1124. package/lib/typescript/api/hinge/hinge.d.ts +21 -0
  1125. package/lib/typescript/api/hinge/hinge.d.ts.map +1 -0
  1126. package/lib/typescript/api/hooks/appHooks.d.ts +15 -0
  1127. package/lib/typescript/api/hooks/appHooks.d.ts.map +1 -0
  1128. package/lib/typescript/api/hooks/screenHooks.d.ts +74 -0
  1129. package/lib/typescript/api/hooks/screenHooks.d.ts.map +1 -0
  1130. package/lib/typescript/api/hooks/useArrangement.d.ts +13 -0
  1131. package/lib/typescript/api/hooks/useArrangement.d.ts.map +1 -0
  1132. package/lib/typescript/api/hooks/useHinge.d.ts +16 -0
  1133. package/lib/typescript/api/hooks/useHinge.d.ts.map +1 -0
  1134. package/lib/typescript/api/hooks/useNavigation.d.ts +108 -0
  1135. package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -0
  1136. package/lib/typescript/api/hooks/usePendingLink.d.ts +7 -0
  1137. package/lib/typescript/api/hooks/usePendingLink.d.ts.map +1 -0
  1138. package/lib/typescript/api/hooks/usePreview.d.ts +29 -0
  1139. package/lib/typescript/api/hooks/usePreview.d.ts.map +1 -0
  1140. package/lib/typescript/api/hooks/useReservedRegions.d.ts +13 -0
  1141. package/lib/typescript/api/hooks/useReservedRegions.d.ts.map +1 -0
  1142. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts +14 -0
  1143. package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts.map +1 -0
  1144. package/lib/typescript/api/index.d.ts +60 -0
  1145. package/lib/typescript/api/index.d.ts.map +1 -0
  1146. package/lib/typescript/api/layout/Root.d.ts +47 -0
  1147. package/lib/typescript/api/layout/Root.d.ts.map +1 -0
  1148. package/lib/typescript/api/layout/Screen.d.ts +32 -0
  1149. package/lib/typescript/api/layout/Screen.d.ts.map +1 -0
  1150. package/lib/typescript/api/layout/SideMenu.d.ts +33 -0
  1151. package/lib/typescript/api/layout/SideMenu.d.ts.map +1 -0
  1152. package/lib/typescript/api/layout/SplitView.d.ts +48 -0
  1153. package/lib/typescript/api/layout/SplitView.d.ts.map +1 -0
  1154. package/lib/typescript/api/layout/Stack.d.ts +21 -0
  1155. package/lib/typescript/api/layout/Stack.d.ts.map +1 -0
  1156. package/lib/typescript/api/layout/Tabs.d.ts +120 -0
  1157. package/lib/typescript/api/layout/Tabs.d.ts.map +1 -0
  1158. package/lib/typescript/api/layout/element.d.ts +52 -0
  1159. package/lib/typescript/api/layout/element.d.ts.map +1 -0
  1160. package/lib/typescript/api/linking/linkPaths.d.ts +31 -0
  1161. package/lib/typescript/api/linking/linkPaths.d.ts.map +1 -0
  1162. package/lib/typescript/api/linking/linking.d.ts +37 -0
  1163. package/lib/typescript/api/linking/linking.d.ts.map +1 -0
  1164. package/lib/typescript/api/linking/pendingLinks.d.ts +8 -0
  1165. package/lib/typescript/api/linking/pendingLinks.d.ts.map +1 -0
  1166. package/lib/typescript/api/linking/types.d.ts +105 -0
  1167. package/lib/typescript/api/linking/types.d.ts.map +1 -0
  1168. package/lib/typescript/api/navigation.d.ts +115 -0
  1169. package/lib/typescript/api/navigation.d.ts.map +1 -0
  1170. package/lib/typescript/api/options/OptionsChain.d.ts +47 -0
  1171. package/lib/typescript/api/options/OptionsChain.d.ts.map +1 -0
  1172. package/lib/typescript/api/options/ScreenOptions.d.ts +32 -0
  1173. package/lib/typescript/api/options/ScreenOptions.d.ts.map +1 -0
  1174. package/lib/typescript/api/options/buttons.d.ts +35 -0
  1175. package/lib/typescript/api/options/buttons.d.ts.map +1 -0
  1176. package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts +20 -0
  1177. package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts.map +1 -0
  1178. package/lib/typescript/api/safeArea/screenInsets.d.ts +20 -0
  1179. package/lib/typescript/api/safeArea/screenInsets.d.ts.map +1 -0
  1180. package/lib/typescript/api/safeArea/screenRegions.d.ts +24 -0
  1181. package/lib/typescript/api/safeArea/screenRegions.d.ts.map +1 -0
  1182. package/lib/typescript/api/screens/ScreenBoundary.d.ts +34 -0
  1183. package/lib/typescript/api/screens/ScreenBoundary.d.ts.map +1 -0
  1184. package/lib/typescript/api/screens/arrangement.d.ts +70 -0
  1185. package/lib/typescript/api/screens/arrangement.d.ts.map +1 -0
  1186. package/lib/typescript/api/screens/defineScreen.d.ts +41 -0
  1187. package/lib/typescript/api/screens/defineScreen.d.ts.map +1 -0
  1188. package/lib/typescript/api/screens/nativeScreenCalls.d.ts +3 -0
  1189. package/lib/typescript/api/screens/nativeScreenCalls.d.ts.map +1 -0
  1190. package/lib/typescript/api/screens/nativeScreens.d.ts +47 -0
  1191. package/lib/typescript/api/screens/nativeScreens.d.ts.map +1 -0
  1192. package/lib/typescript/api/screens/registerScreens.d.ts +61 -0
  1193. package/lib/typescript/api/screens/registerScreens.d.ts.map +1 -0
  1194. package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts +15 -0
  1195. package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts.map +1 -0
  1196. package/lib/typescript/api/slots/SlotHost.d.ts +8 -0
  1197. package/lib/typescript/api/slots/SlotHost.d.ts.map +1 -0
  1198. package/lib/typescript/api/state/navigationState.d.ts +26 -0
  1199. package/lib/typescript/api/state/navigationState.d.ts.map +1 -0
  1200. package/lib/typescript/api/testIDs.d.ts +12 -0
  1201. package/lib/typescript/api/testIDs.d.ts.map +1 -0
  1202. package/lib/typescript/api/theme/theme.d.ts +70 -0
  1203. package/lib/typescript/api/theme/theme.d.ts.map +1 -0
  1204. package/lib/typescript/api/types.d.ts +64 -0
  1205. package/lib/typescript/api/types.d.ts.map +1 -0
  1206. package/lib/typescript/engine/backListeners.d.ts +8 -0
  1207. package/lib/typescript/engine/backListeners.d.ts.map +1 -0
  1208. package/lib/typescript/engine/buttons.d.ts +11 -0
  1209. package/lib/typescript/engine/buttons.d.ts.map +1 -0
  1210. package/lib/typescript/engine/commands.d.ts +38 -0
  1211. package/lib/typescript/engine/commands.d.ts.map +1 -0
  1212. package/lib/typescript/engine/events.d.ts +17 -0
  1213. package/lib/typescript/engine/events.d.ts.map +1 -0
  1214. package/lib/typescript/engine/ids.d.ts +3 -0
  1215. package/lib/typescript/engine/ids.d.ts.map +1 -0
  1216. package/lib/typescript/engine/launchState.d.ts +25 -0
  1217. package/lib/typescript/engine/launchState.d.ts.map +1 -0
  1218. package/lib/typescript/engine/layout.d.ts +32 -0
  1219. package/lib/typescript/engine/layout.d.ts.map +1 -0
  1220. package/lib/typescript/engine/mergeOptions.d.ts +6 -0
  1221. package/lib/typescript/engine/mergeOptions.d.ts.map +1 -0
  1222. package/lib/typescript/engine/native.d.ts +22 -0
  1223. package/lib/typescript/engine/native.d.ts.map +1 -0
  1224. package/lib/typescript/engine/nativeScreens.d.ts +49 -0
  1225. package/lib/typescript/engine/nativeScreens.d.ts.map +1 -0
  1226. package/lib/typescript/engine/options.d.ts +12 -0
  1227. package/lib/typescript/engine/options.d.ts.map +1 -0
  1228. package/lib/typescript/engine/places.d.ts +57 -0
  1229. package/lib/typescript/engine/places.d.ts.map +1 -0
  1230. package/lib/typescript/engine/props.d.ts +10 -0
  1231. package/lib/typescript/engine/props.d.ts.map +1 -0
  1232. package/lib/typescript/engine/reactMeasures.d.ts +3 -0
  1233. package/lib/typescript/engine/reactMeasures.d.ts.map +1 -0
  1234. package/lib/typescript/engine/rememberedOptions.d.ts +28 -0
  1235. package/lib/typescript/engine/rememberedOptions.d.ts.map +1 -0
  1236. package/lib/typescript/engine/screens.d.ts +90 -0
  1237. package/lib/typescript/engine/screens.d.ts.map +1 -0
  1238. package/lib/typescript/engine/slots.d.ts +71 -0
  1239. package/lib/typescript/engine/slots.d.ts.map +1 -0
  1240. package/lib/typescript/engine/tabs.d.ts +24 -0
  1241. package/lib/typescript/engine/tabs.d.ts.map +1 -0
  1242. package/lib/typescript/index.d.ts +3 -0
  1243. package/lib/typescript/index.d.ts.map +1 -0
  1244. package/lib/typescript/interfaces/ComponentEvents.d.ts +189 -0
  1245. package/lib/typescript/interfaces/ComponentEvents.d.ts.map +1 -0
  1246. package/lib/typescript/interfaces/Events.d.ts +199 -0
  1247. package/lib/typescript/interfaces/Events.d.ts.map +1 -0
  1248. package/lib/typescript/interfaces/Layout.d.ts +150 -0
  1249. package/lib/typescript/interfaces/Layout.d.ts.map +1 -0
  1250. package/lib/typescript/interfaces/Options.d.ts +93 -0
  1251. package/lib/typescript/interfaces/Options.d.ts.map +1 -0
  1252. package/lib/typescript/interfaces/options/animations.d.ts +452 -0
  1253. package/lib/typescript/interfaces/options/animations.d.ts.map +1 -0
  1254. package/lib/typescript/interfaces/options/bottomTabs.d.ts +462 -0
  1255. package/lib/typescript/interfaces/options/bottomTabs.d.ts.map +1 -0
  1256. package/lib/typescript/interfaces/options/buttons.d.ts +331 -0
  1257. package/lib/typescript/interfaces/options/buttons.d.ts.map +1 -0
  1258. package/lib/typescript/interfaces/options/common.d.ts +51 -0
  1259. package/lib/typescript/interfaces/options/common.d.ts.map +1 -0
  1260. package/lib/typescript/interfaces/options/modals.d.ts +202 -0
  1261. package/lib/typescript/interfaces/options/modals.d.ts.map +1 -0
  1262. package/lib/typescript/interfaces/options/preview.d.ts +40 -0
  1263. package/lib/typescript/interfaces/options/preview.d.ts.map +1 -0
  1264. package/lib/typescript/interfaces/options/sideMenu.d.ts +130 -0
  1265. package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -0
  1266. package/lib/typescript/interfaces/options/splitView.d.ts +118 -0
  1267. package/lib/typescript/interfaces/options/splitView.d.ts.map +1 -0
  1268. package/lib/typescript/interfaces/options/stack.d.ts +109 -0
  1269. package/lib/typescript/interfaces/options/stack.d.ts.map +1 -0
  1270. package/lib/typescript/interfaces/options/system.d.ts +238 -0
  1271. package/lib/typescript/interfaces/options/system.d.ts.map +1 -0
  1272. package/lib/typescript/interfaces/options/toolbar.d.ts +45 -0
  1273. package/lib/typescript/interfaces/options/toolbar.d.ts.map +1 -0
  1274. package/lib/typescript/interfaces/options/topBar.d.ts +804 -0
  1275. package/lib/typescript/interfaces/options/topBar.d.ts.map +1 -0
  1276. package/lib/typescript/package.json +1 -0
  1277. package/package.json +166 -4
  1278. package/react-native.config.js +22 -0
  1279. package/src/ARCHITECTURE.md +289 -0
  1280. package/src/adapters/NativeANNTurboEventEmitter.ts +15 -0
  1281. package/src/adapters/NativeANNTurboModule.ts +100 -0
  1282. package/src/api/app/AppRegistry.ts +57 -0
  1283. package/src/api/app/activeApp.ts +20 -0
  1284. package/src/api/app/createNavigation.ts +566 -0
  1285. package/src/api/app/roots.ts +40 -0
  1286. package/src/api/app/splash.ts +154 -0
  1287. package/src/api/app/startFailure.tsx +39 -0
  1288. package/src/api/arrangement/arrangementState.ts +98 -0
  1289. package/src/api/commands/commands.ts +371 -0
  1290. package/src/api/commands/errors.ts +99 -0
  1291. package/src/api/commands/presentation.ts +78 -0
  1292. package/src/api/commands/sideMenus.ts +122 -0
  1293. package/src/api/commands/transitions.ts +133 -0
  1294. package/src/api/context/appContext.ts +23 -0
  1295. package/src/api/events/navigationEvents.ts +175 -0
  1296. package/src/api/events/screenLifecycle.ts +27 -0
  1297. package/src/api/events/tabPresses.ts +35 -0
  1298. package/src/api/hinge/hinge.ts +84 -0
  1299. package/src/api/hooks/appHooks.ts +37 -0
  1300. package/src/api/hooks/screenHooks.ts +272 -0
  1301. package/src/api/hooks/useArrangement.ts +26 -0
  1302. package/src/api/hooks/useHinge.ts +26 -0
  1303. package/src/api/hooks/useNavigation.ts +267 -0
  1304. package/src/api/hooks/usePendingLink.ts +11 -0
  1305. package/src/api/hooks/usePreview.ts +111 -0
  1306. package/src/api/hooks/useReservedRegions.ts +26 -0
  1307. package/src/api/hooks/useSafeAreaInsets.ts +23 -0
  1308. package/src/api/index.ts +139 -0
  1309. package/src/api/layout/Root.ts +113 -0
  1310. package/src/api/layout/Screen.ts +55 -0
  1311. package/src/api/layout/SideMenu.ts +87 -0
  1312. package/src/api/layout/SplitView.ts +146 -0
  1313. package/src/api/layout/Stack.ts +48 -0
  1314. package/src/api/layout/Tabs.ts +339 -0
  1315. package/src/api/layout/element.ts +114 -0
  1316. package/src/api/linking/linkPaths.ts +159 -0
  1317. package/src/api/linking/linking.ts +242 -0
  1318. package/src/api/linking/pendingLinks.ts +37 -0
  1319. package/src/api/linking/types.ts +130 -0
  1320. package/src/api/navigation.ts +269 -0
  1321. package/src/api/options/OptionsChain.ts +142 -0
  1322. package/src/api/options/ScreenOptions.ts +81 -0
  1323. package/src/api/options/buttons.ts +43 -0
  1324. package/src/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
  1325. package/src/api/safeArea/screenInsets.ts +86 -0
  1326. package/src/api/safeArea/screenRegions.ts +99 -0
  1327. package/src/api/screens/ScreenBoundary.tsx +52 -0
  1328. package/src/api/screens/arrangement.ts +106 -0
  1329. package/src/api/screens/defineScreen.ts +57 -0
  1330. package/src/api/screens/nativeScreenCalls.ts +59 -0
  1331. package/src/api/screens/nativeScreens.ts +58 -0
  1332. package/src/api/screens/registerScreens.tsx +364 -0
  1333. package/src/api/slots/ANNSlotNativeComponent.ts +23 -0
  1334. package/src/api/slots/SlotHost.tsx +64 -0
  1335. package/src/api/state/navigationState.ts +95 -0
  1336. package/src/api/testIDs.ts +11 -0
  1337. package/src/api/theme/theme.ts +184 -0
  1338. package/src/api/types.ts +95 -0
  1339. package/src/engine/backListeners.ts +36 -0
  1340. package/src/engine/buttons.ts +91 -0
  1341. package/src/engine/commands.ts +469 -0
  1342. package/src/engine/events.ts +24 -0
  1343. package/src/engine/ids.ts +7 -0
  1344. package/src/engine/launchState.ts +35 -0
  1345. package/src/engine/layout.ts +247 -0
  1346. package/src/engine/mergeOptions.ts +20 -0
  1347. package/src/engine/native.ts +51 -0
  1348. package/src/engine/nativeScreens.ts +263 -0
  1349. package/src/engine/options.ts +165 -0
  1350. package/src/engine/places.ts +205 -0
  1351. package/src/engine/props.ts +45 -0
  1352. package/src/engine/reactMeasures.ts +24 -0
  1353. package/src/engine/rememberedOptions.ts +111 -0
  1354. package/src/engine/screens.tsx +239 -0
  1355. package/src/engine/slots.ts +191 -0
  1356. package/src/engine/tabs.ts +95 -0
  1357. package/src/index.ts +3 -0
  1358. package/src/interfaces/ComponentEvents.ts +214 -0
  1359. package/src/interfaces/Events.ts +227 -0
  1360. package/src/interfaces/Layout.ts +161 -0
  1361. package/src/interfaces/Options.ts +175 -0
  1362. package/src/interfaces/options/animations.ts +480 -0
  1363. package/src/interfaces/options/bottomTabs.ts +481 -0
  1364. package/src/interfaces/options/buttons.ts +364 -0
  1365. package/src/interfaces/options/common.ts +76 -0
  1366. package/src/interfaces/options/modals.ts +217 -0
  1367. package/src/interfaces/options/preview.ts +40 -0
  1368. package/src/interfaces/options/sideMenu.ts +132 -0
  1369. package/src/interfaces/options/splitView.ts +127 -0
  1370. package/src/interfaces/options/stack.ts +110 -0
  1371. package/src/interfaces/options/system.ts +252 -0
  1372. package/src/interfaces/options/toolbar.ts +47 -0
  1373. package/src/interfaces/options/topBar.ts +828 -0
@@ -0,0 +1,1085 @@
1
+ package dev.apexnative.navigation.viewcontrollers.stack.topbar
2
+
3
+ import android.animation.Animator
4
+ import android.animation.AnimatorListenerAdapter
5
+ import android.animation.ValueAnimator
6
+ import android.app.Activity
7
+ import android.content.Context
8
+ import android.content.pm.ApplicationInfo
9
+ import android.graphics.Color
10
+ import android.graphics.drawable.BitmapDrawable
11
+ import android.graphics.drawable.Drawable
12
+ import android.view.Menu
13
+ import android.view.MenuItem
14
+ import android.view.MotionEvent
15
+ import android.view.View
16
+ import android.view.ViewGroup
17
+ import android.view.animation.LinearInterpolator
18
+ import android.view.animation.PathInterpolator
19
+ import android.widget.FrameLayout
20
+ import android.widget.ImageView
21
+ import androidx.appcompat.content.res.AppCompatResources
22
+ import androidx.core.graphics.drawable.DrawableCompat
23
+ import androidx.core.view.WindowInsetsCompat
24
+ import dev.apexnative.navigation.R
25
+ import dev.apexnative.navigation.options.ButtonMenuOptions
26
+ import dev.apexnative.navigation.options.ButtonOptions
27
+ import dev.apexnative.navigation.options.FontOptions
28
+ import dev.apexnative.navigation.options.Options
29
+ import dev.apexnative.navigation.options.SearchBarOptions
30
+ import dev.apexnative.navigation.options.TitleComponentOptions
31
+ import dev.apexnative.navigation.options.TopBarAnimationOptions
32
+ import dev.apexnative.navigation.options.params.LayoutDirection
33
+ import dev.apexnative.navigation.options.params.ThemeColour
34
+ import dev.apexnative.navigation.options.parsers.TypefaceLoader
35
+ import dev.apexnative.navigation.react.ReactView
36
+ import dev.apexnative.navigation.react.events.AppearanceDispatcher
37
+ import dev.apexnative.navigation.react.events.ComponentType
38
+ import dev.apexnative.navigation.system.AppDirection
39
+ import dev.apexnative.navigation.utils.DevelopmentLog
40
+ import dev.apexnative.navigation.utils.ImageLoader
41
+ import dev.apexnative.navigation.utils.ImageLoadingListenerAdapter
42
+ import dev.apexnative.navigation.utils.TestIds
43
+ import dev.apexnative.navigation.utils.UiUtils
44
+ import dev.apexnative.navigation.viewcontrollers.component.ScreenReadiness
45
+ import dev.apexnative.navigation.viewcontrollers.navigator.BackCallbackState
46
+ import dev.apexnative.navigation.viewcontrollers.stack.StackDisplay
47
+ import dev.apexnative.navigation.viewcontrollers.stack.StackDisplay.BarMotion
48
+ import dev.apexnative.navigation.viewcontrollers.stack.search.StackSearchPresenter
49
+ import dev.apexnative.navigation.viewcontrollers.viewcontroller.IReactView
50
+ import dev.apexnative.navigation.viewcontrollers.viewcontroller.ScrollEventListener
51
+ import dev.apexnative.navigation.viewcontrollers.viewcontroller.ViewController
52
+ import dev.apexnative.navigation.views.animations.SideAnimator
53
+ import dev.apexnative.navigation.views.animations.SystemTransition
54
+ import dev.apexnative.navigation.views.component.ComponentLayout
55
+ import dev.apexnative.navigation.views.stack.StackLayout
56
+ import dev.apexnative.navigation.views.stack.topbar.LargeTitleView
57
+ import dev.apexnative.navigation.views.stack.topbar.TitleBar
58
+ import dev.apexnative.navigation.views.stack.topbar.TopBar
59
+ import dev.apexnative.navigation.views.stack.topbar.TopBarDefaults
60
+ import dev.apexnative.navigation.views.stack.topbar.titlebar.BarButtonComponentCell
61
+ import dev.apexnative.navigation.views.stack.topbar.titlebar.ButtonBar
62
+ import dev.apexnative.navigation.views.stack.topbar.titlebar.IconBackgroundDrawable
63
+
64
+ /**
65
+ * What the bar of one stack shows: the options of the screen on top of the stack, resolved (a pair's options screen),
66
+ * as it becomes the top ([apply], at once also without appearance events), at its `mergeOptions` ([merge]: the parts
67
+ * the merge names, with the values resolved after it) and at a repaint ([repaint]: light/dark, `setDefaultOptions`). A
68
+ * view property is set only when its value changed, so the second apply of the same screen (at its WillAppear) changes
69
+ * nothing. It keeps the React components of the bar by screen ([components]), draws a pushed screen's title and
70
+ * background in advance ([stage]), plays the row's part of the default transitions ([beginRowTransition]), shows and
71
+ * hides the bar, follows the screen's list for the hide on scroll and the large title, and plugs in the search module
72
+ * ([search]). Main thread only.
73
+ */
74
+ internal class TopBarPresenter(private val activity: Activity, private val host: Host) {
75
+ /** What the presenter asks of its stack. */
76
+ interface Host {
77
+ /** The stack's entries, bottom to top. */
78
+ val entries: List<ViewController<*>>
79
+
80
+ /** The screen whose options [entry] shows with: itself, or a pair's options screen. */
81
+ fun optionsScreen(entry: ViewController<*>): ViewController<*>
82
+
83
+ /** The options [entry] shows with. */
84
+ fun resolvedOf(entry: ViewController<*>): Options
85
+
86
+ /** The back button was pressed. */
87
+ fun backPressed()
88
+
89
+ /** The bar changed what the screen on top keeps at its top: its room and safe area are counted again. */
90
+ fun roomChanged()
91
+ }
92
+
93
+ /** The search of the stack's screens (module). */
94
+ val search = StackSearchPresenter(activity, ::loadIcon)
95
+
96
+ /** The React components of the bar, by screen. */
97
+ val components = BarComponents(::makeRoot)
98
+
99
+ private var layout: StackLayout? = null
100
+ private var bar: TopBar? = null
101
+ private var staging: FrameLayout? = null
102
+ private var leftButtons: ButtonBar? = null
103
+ private var rightButtons: ButtonBar? = null
104
+ private var visibility: TopBarVisibility? = null
105
+ private var rowTransition: BarRowTransition? = null
106
+ private var collapse: TopBarCollapseBehavior? = null
107
+ private val largeTitleFollower = LargeTitleFollower()
108
+ private val typefaces = TypefaceLoader(activity)
109
+ // The cells of React buttons, by screen and `componentId`: a button of the stack's or the defaults' options has one
110
+ // `componentId` on every screen, and each screen shows its own root in its own cell.
111
+ private val cells = ButtonCells({ BarButtonComponentCell(activity) }) { it.content = null }
112
+
113
+ // What shows now, and the keys of what was applied: a part applies again only when its key changed.
114
+ private var shownEntry: ViewController<*>? = null
115
+ private var shownScreen: ViewController<*>? = null
116
+ private var shownState = Appearance.None
117
+ private val keys = HashMap<Part, String>()
118
+ private var shownBackground: BarComponents.Root? = null
119
+ private var backgroundAppeared = false
120
+ private var motion: BarMotion? = null
121
+ // How the bar shows or hides in the transition that brought the current child.
122
+ private var visibilityChange = StackDisplay.BarVisibility.AT_ONCE
123
+ private var largeTitleShown = false
124
+ private var followed: ScrollEventListener? = null
125
+ private var rowTarget: RowTarget? = null
126
+ // The picture of the part under the row in a leaving screen's overlay: the screen and the picture.
127
+ private var underRow: Pair<ViewController<*>, Drawable>? = null
128
+
129
+ private enum class Part { Look, Title, Left, Right, Back, LargeTitle, Visible, TestId }
130
+
131
+ private enum class Appearance { None, Appearing, Appeared }
132
+
133
+ /** The stack's view is made: the bar and the place for the components drawn in advance. */
134
+ fun bind(layout: StackLayout) {
135
+ this.layout = layout
136
+ val bar = layout.topBar
137
+ this.bar = bar
138
+ leftButtons = ButtonBar(bar.leftButtonBar, true, ::loadIcon, Buttons())
139
+ rightButtons = ButtonBar(bar.rightButtonBar, false, ::loadIcon, Buttons())
140
+ visibility = TopBarVisibility(VisibilityTarget(bar) { collapse?.reset() })
141
+ rowTransition = BarRowTransition(RowTarget(bar).also { rowTarget = it })
142
+ collapse = TopBarCollapseBehavior(bar)
143
+ bar.leftButtonBar.setNavigationOnClickListener { host.backPressed() }
144
+ search.bindTopBar(bar)
145
+ search.setOnActiveChanged {
146
+ shownEntry?.let { entry -> applyHideOnScroll(host.resolvedOf(entry), entry) }
147
+ BackCallbackState.update()
148
+ }
149
+ staging = Staging(activity).also {
150
+ layout.addOverAll(it, androidx.coordinatorlayout.widget.CoordinatorLayout.LayoutParams(
151
+ ViewGroup.LayoutParams.MATCH_PARENT,
152
+ ViewGroup.LayoutParams.WRAP_CONTENT,
153
+ ))
154
+ }
155
+ }
156
+
157
+ // The stack's current child and its transition.
158
+
159
+ /**
160
+ * The stack's current child changes to [incoming] ([motion]: the default transition that brings it, none at once):
161
+ * the row's picture is taken before the bar takes the new screen's options. A push from a large title to a screen
162
+ * without one makes the bar lower at once: the part under the row rides with the leaving screen as a picture in its
163
+ * overlay, and the row's picture holds the row only. So does a pop back to a screen whose large title is collapsed.
164
+ */
165
+ fun beginRowTransition(
166
+ motion: BarMotion?,
167
+ incoming: ViewController<*>?,
168
+ visibility: StackDisplay.BarVisibility = StackDisplay.BarVisibility.AT_ONCE,
169
+ ) {
170
+ this.motion = motion
171
+ this.visibilityChange = visibility
172
+ closeMenus()
173
+ dropPictureUnderRow()
174
+ val bar = bar
175
+ val leaving = shownEntry
176
+ val lowers = bar != null && bar.isLargeTitleShown && incoming != null && leaving != null &&
177
+ lowersBar(motion, incoming, host.resolvedOf(incoming))
178
+ rowTarget?.withLargeTitle = !lowers
179
+ if (lowers) pictureUnderRow(bar, leaving)
180
+ rowTransition?.begin(motion)
181
+ }
182
+
183
+ /** The transition that brought the current child ended: the row at rest, the picture under it gone. */
184
+ fun endRowTransition() {
185
+ motion = null
186
+ visibilityChange = StackDisplay.BarVisibility.AT_ONCE
187
+ rowTransition?.end()
188
+ dropPictureUnderRow()
189
+ }
190
+
191
+ /**
192
+ * Shows [entry]'s bar: every part from its resolved options; none clears the bar's screen. A part whose values
193
+ * didn't change isn't set again.
194
+ */
195
+ fun apply(entry: ViewController<*>?) {
196
+ val bar = bar ?: return
197
+ if (entry == null) return clear()
198
+ val screen = host.optionsScreen(entry)
199
+ if (screen !== shownScreen) {
200
+ if (shownScreen != null) closeMenus()
201
+ shownScreen = screen
202
+ shownEntry = entry
203
+ shownState = Appearance.None
204
+ keys.clear()
205
+ }
206
+ shownEntry = entry
207
+ // The screen that left with the picture under the row shows again: the picture goes.
208
+ if (underRow?.first === entry) dropPictureUnderRow()
209
+ val options = host.resolvedOf(entry)
210
+ applyAll(bar, entry, screen, options, merge = false)
211
+ }
212
+
213
+ /**
214
+ * `mergeOptions` into the stack or its screen on top ([delta]): what the user sees of it changes now, with the
215
+ * values resolved after it. What a merge into the screen keeps goes into its own options first ([writeOwn]).
216
+ */
217
+ fun merge(entry: ViewController<*>, delta: Options) {
218
+ val bar = bar ?: return
219
+ val screen = host.optionsScreen(entry)
220
+ if (screen !== shownScreen) return apply(entry)
221
+ val options = host.resolvedOf(entry)
222
+ applyAll(bar, entry, screen, options, merge = true, delta = delta)
223
+ }
224
+
225
+ /**
226
+ * Light or dark changed, or new default options: the bar takes the theme's colors and the options as they resolve
227
+ * now.
228
+ */
229
+ fun repaint(entry: ViewController<*>?) {
230
+ keys.clear()
231
+ apply(entry)
232
+ val options = entry?.let(host::resolvedOf) ?: return
233
+ search.onConfigurationChanged(options.topBar.searchBar.tintColor)
234
+ }
235
+
236
+ /**
237
+ * New window insets: the strip, the side insets and the places of the right buttons are counted again (rotation,
238
+ * cutout); each applies only when it changed (the keys hold the strip, the sides and the places), and nothing else
239
+ * of the bar (the search) applies again.
240
+ */
241
+ fun onInsets() {
242
+ val bar = bar ?: return
243
+ val entry = shownEntry ?: return
244
+ val screen = shownScreen ?: return
245
+ val options = host.resolvedOf(entry)
246
+ applyLook(bar, entry, options)
247
+ applyButtons(bar, screen, options, merge = false)
248
+ }
249
+
250
+ /**
251
+ * The nodes of the stack now (their options screens): the bar's components of any other screen go — a node that
252
+ * left the stack, also one destroyed without its view.
253
+ */
254
+ fun retainScreens(screens: Set<ViewController<*>>) {
255
+ components.screens().filter { it !in screens }.forEach { screenDestroyed(it, null) }
256
+ }
257
+
258
+ // Readiness and staging.
259
+
260
+ /**
261
+ * Draws [entry]'s title and background in advance, in an invisible place in the stack's view, so React renders them
262
+ * with the screen; the bar takes the same views when it shows it.
263
+ */
264
+ fun stage(entry: ViewController<*>) {
265
+ val staging = staging ?: return
266
+ val screen = host.optionsScreen(entry)
267
+ val options = host.resolvedOf(entry)
268
+ titleComponentOf(screen, options)?.let { comp ->
269
+ components.title(screen, comp)?.let {
270
+ place(staging, it.view.asView(), ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
271
+ }
272
+ }
273
+ components.background(screen, options.topBar.background.component)?.let {
274
+ place(staging, it.view.asView(), ViewGroup.LayoutParams.MATCH_PARENT, stagedBarHeight(entry, options))
275
+ }
276
+ pruneStaging()
277
+ }
278
+
279
+ /** The components of [entry]'s bar have drawn (`StackController.areBarComponentsDrawn`). */
280
+ fun isDrawn(entry: ViewController<*>): Boolean = components.isDrawn(host.optionsScreen(entry), host.resolvedOf(entry))
281
+
282
+ /** Calls [listener] once the components of [entry]'s bar have drawn. */
283
+ fun whenDrawn(entry: ViewController<*>, listener: () -> Unit) =
284
+ components.whenDrawn(host.optionsScreen(entry), host.resolvedOf(entry), listener)
285
+
286
+ // Appearance events of the bar's components.
287
+
288
+ /** [screen] starts to appear: the components of its bar too, when the bar shows them. */
289
+ fun screenWillAppear(screen: ViewController<*>) {
290
+ if (screen !== shownScreen) return
291
+ shownState = Appearance.Appearing
292
+ tellComponents()
293
+ }
294
+
295
+ /** [screen] has appeared. */
296
+ fun screenDidAppear(screen: ViewController<*>) {
297
+ if (screen !== shownScreen) return
298
+ shownState = Appearance.Appeared
299
+ tellComponents()
300
+ }
301
+
302
+ /** [screen] disappeared: its title and buttons too; the background when the bar shows it no more. */
303
+ fun screenDisappeared(screen: ViewController<*>) {
304
+ components.titleOf(screen)?.view?.sendComponentStop(ComponentType.TopBarTitle)
305
+ components.buttonsOf(screen).forEach { it.view.sendComponentStop(ComponentType.TopBarButton) }
306
+ if (screen !== shownScreen) return
307
+ shownState = Appearance.None
308
+ shownBackground?.let {
309
+ it.view.sendComponentStop(ComponentType.TopBarBackground)
310
+ backgroundAppeared = false
311
+ }
312
+ }
313
+
314
+ /** [screen] is destroyed: its components and its search go. */
315
+ fun screenDestroyed(screen: ViewController<*>, entryView: View?) {
316
+ if (screen === shownScreen) {
317
+ shownScreen = null
318
+ shownEntry = null
319
+ keys.clear()
320
+ }
321
+ cells.screenDestroyed(screen)
322
+ components.screenDestroyed(screen)
323
+ pruneStaging()
324
+ val background = shownBackground
325
+ if (background != null && !components.holds(background)) {
326
+ shownBackground = null
327
+ backgroundAppeared = false
328
+ bar?.setBackgroundComponent(null)
329
+ }
330
+ entryView?.let(search::onScreenDestroyed)
331
+ }
332
+
333
+ /** The stack is destroyed: every component stops. */
334
+ fun destroy() {
335
+ rowTransition?.end()
336
+ largeTitleFollower.stop()
337
+ collapse?.disableCollapse()
338
+ components.destroyAll()
339
+ cells.clear()
340
+ }
341
+
342
+ /** The search of the screen on top is open. */
343
+ fun isSearchOpen(): Boolean = search.isActive()
344
+
345
+ /** Back closes the open search first. */
346
+ fun closeSearch(): Boolean = search.closeSearch()
347
+
348
+ // The room.
349
+
350
+ /** The bar's parts for [entry] with [options], in pixels. */
351
+ fun barOf(entry: ViewController<*>, options: Options): TopBarRoom.Bar {
352
+ val insets = insets()
353
+ val inSheet = entry.isInSheet
354
+ val topMargin = dp(options.topBar.topMargin.get(0.0))
355
+ return TopBarRoom.Bar(
356
+ strip = TopBarRoom.strip(options, insets, inSheet),
357
+ margin = TopBarRoom.margin(options, insets, inSheet, topMargin),
358
+ topMargin = topMargin,
359
+ height = dp(options.topBar.height.get(DEFAULT_HEIGHT_DP)),
360
+ )
361
+ }
362
+
363
+ /** The window's insets for the bar: the status bar's height and the cutout's at the top. */
364
+ fun insets(): TopBarRoom.Insets {
365
+ val insets = layout?.lastInsets ?: return TopBarRoom.Insets(0, 0)
366
+ return TopBarRoom.Insets(
367
+ insets.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.statusBars()).top,
368
+ insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top,
369
+ )
370
+ }
371
+
372
+ /** The height of the search under the row of [entry] when it is the screen the bar shows; 0 otherwise. */
373
+ fun searchHeightOf(entry: ViewController<*>): Int =
374
+ if (entry === shownEntry) bar?.searchAreaHeight ?: 0 else 0
375
+
376
+ /**
377
+ * Where the bar's bottom is in its stack's view, at its place in the layout; none while it is hidden. A bar that
378
+ * the large title's collapse, `hideOnScroll` or a slide moves still covers from there: no transform of the bar
379
+ * counts, so the insets don't change as it moves and a screen padded with them doesn't jump.
380
+ */
381
+ fun barBottomInStack(): Int? {
382
+ val bar = bar ?: return null
383
+ if (bar.visibility != View.VISIBLE || !bar.isAttachedToWindow) return null
384
+ return bar.top + bar.height
385
+ }
386
+
387
+ // The parts.
388
+
389
+ private fun applyAll(
390
+ bar: TopBar,
391
+ entry: ViewController<*>,
392
+ screen: ViewController<*>,
393
+ options: Options,
394
+ merge: Boolean,
395
+ delta: Options? = null,
396
+ ) {
397
+ applyLook(bar, entry, options)
398
+ applyTitle(bar, screen, options)
399
+ // The search first: its magnifier takes a place among the right buttons. It gets a copy of the group: it
400
+ // writes its tint into what it gets.
401
+ val searchOptions = SearchBarOptions().apply { mergeWith(options.topBar.searchBar) }
402
+ if (merge && delta != null) {
403
+ if (delta.topBar.searchBar.hasAnyValue()) search.merge(entry, delta.topBar.searchBar, searchOptions)
404
+ } else {
405
+ search.apply(entry, searchOptions)
406
+ }
407
+ applyButtons(bar, screen, options, merge)
408
+ applyBack(bar, options)
409
+ applyBackground(bar, screen, options)
410
+ applyLargeTitle(bar, entry, options)
411
+ applyVisibility(options, merge)
412
+ applyHideOnScroll(options, entry)
413
+ // Every height change of this apply (the row, the strip, the large title, the search) in the same frame, so no
414
+ // frame shows an empty band or a hole.
415
+ bar.layoutNow()
416
+ tellComponents()
417
+ }
418
+
419
+ // The bar's look.
420
+ private fun applyLook(bar: TopBar, entry: ViewController<*>, options: Options) {
421
+ val topBar = options.topBar
422
+ val insets = layout?.lastInsets
423
+ val sides = insets?.getInsets(WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout())
424
+ val room = barOf(entry, options)
425
+ val color = topBar.background.color.get(bar.context, null) ?: TopBarDefaults.backgroundColor(bar.context)
426
+ val borderColor = topBar.borderColor.get(bar.context, null) ?: Color.BLACK
427
+ val direction = directionOf(options)
428
+ val key = listOf(
429
+ room.strip, room.margin, room.height, color, borderColor, topBar.borderHeight.get(0.0),
430
+ topBar.elevation.get(0.0), dp(topBar.title.height.get(DEFAULT_HEIGHT_DP)),
431
+ dp(topBar.title.topMargin.get(0.0)), sides?.left, sides?.right, direction, topBar.testID.get(null),
432
+ ).joinToString()
433
+ if (keys[Part.Look] == key) return
434
+ keys[Part.Look] = key
435
+ bar.layoutDirection = direction
436
+ bar.topPadding = room.strip
437
+ bar.setMargin(room.margin)
438
+ bar.setBarHeight(room.height)
439
+ bar.setRow(dp(topBar.title.height.get(DEFAULT_HEIGHT_DP)), dp(topBar.title.topMargin.get(0.0)))
440
+ bar.titleBar.sideInsets(sides?.left ?: 0, sides?.right ?: 0)
441
+ bar.setBarColor(color)
442
+ bar.setShadow(UiUtils.dpToPx(bar.context, topBar.elevation.get(0.0).toFloat()))
443
+ bar.setBorder(borderColor, dp(topBar.borderHeight.get(0.0)))
444
+ TestIds.apply(bar, topBar.testID.get(null))
445
+ // New window insets come before the window's measure; within an apply, applyAll lays the bar out at once.
446
+ bar.requestLayout()
447
+ }
448
+
449
+ // The title (`topBar.title.*`,.subtitle.*).
450
+ private fun applyTitle(bar: TopBar, screen: ViewController<*>, options: Options) {
451
+ val title = options.topBar.title
452
+ val subtitle = options.topBar.subtitle
453
+ val component = titleComponentOf(screen, options)
454
+ val context = bar.context
455
+ val titleColor = title.color.get(context, null) ?: TopBarDefaults.titleColor(context)
456
+ val subtitleColor = subtitle.color.get(context, null) ?: TopBarDefaults.subtitleColor(context)
457
+ val testId = options.topBar.testID.get(null)
458
+ val key = listOf(
459
+ screen.id, component?.name?.get(null), component?.componentId?.get(null), component?.alignment?.get(null),
460
+ title.text.get(null), title.fontSize.get(null), titleColor, fontKey(title.font), title.alignment.get(null),
461
+ subtitle.text.get(null), subtitle.fontSize.get(null), subtitleColor, fontKey(subtitle.font),
462
+ subtitle.alignment.get(null), testId,
463
+ ).joinToString()
464
+ if (keys[Part.Title] == key) return
465
+ keys[Part.Title] = key
466
+ val titleBar = bar.titleBar
467
+ val root = components.title(screen, component ?: TitleComponentOptions())
468
+ if (root != null && component != null) {
469
+ titleBar.componentAlignment =
470
+ if (component.alignment.get(null) == FILL) TitleBar.Alignment.Fill else TitleBar.Alignment.Center
471
+ titleBar.titleComponent = root.view.asView()
472
+ if (screen.options.topBar.title.text.hasValue() && screen.options.topBar.title.component.hasValue()) {
473
+ DevelopmentLog.warn("the screen '${screen.id}' gives topBar.title a text and a component: the text " +
474
+ "and the subtitle are dropped")
475
+ }
476
+ } else {
477
+ titleBar.titleComponent = null
478
+ }
479
+ val titleView = titleBar.titleView
480
+ titleView.text = title.text.get(null).orEmpty()
481
+ titleView.textSize = title.fontSize.get(DEFAULT_TITLE_SP).toFloat()
482
+ titleView.setTextColor(titleColor)
483
+ titleView.typeface = title.font.getTypeface(typefaces, titleBar.initialTitleTypeface)
484
+ titleBar.titleAlignment = alignmentOf(title.alignment.get(null))
485
+ val subtitleView = titleBar.subtitleView
486
+ subtitleView.textSize = subtitle.fontSize.get(DEFAULT_SUBTITLE_SP).toFloat()
487
+ subtitleView.setTextColor(subtitleColor)
488
+ subtitleView.typeface = subtitle.font.getTypeface(typefaces, titleBar.initialSubtitleTypeface)
489
+ titleBar.subtitleAlignment =
490
+ if (subtitle.alignment.get(null) == CENTER) TitleBar.Alignment.Center else TitleBar.Alignment.Start
491
+ titleBar.setSubtitle(subtitle.text.get(null))
492
+ TestIds.apply(titleView, testId?.let { "$it.title" })
493
+ TestIds.apply(subtitleView, testId?.let { "$it.subtitle" })
494
+ }
495
+
496
+ // The buttons.
497
+ private fun applyButtons(bar: TopBar, screen: ViewController<*>, options: Options, merge: Boolean) {
498
+ val topBar = options.topBar
499
+ val context = bar.context
500
+ val left = topBar.buttons.left.orEmpty().filter(::hasId).map {
501
+ withSide(it, topBar.leftButtonColor, topBar.leftButtonDisabledColor, topBar.leftButtonBackgroundColor)
502
+ }
503
+ val right = topBar.buttons.right.orEmpty().filter(::hasId).map {
504
+ withSide(it, topBar.rightButtonColor, topBar.rightButtonDisabledColor, topBar.rightButtonBackgroundColor)
505
+ }
506
+ val roots = components.buttons(screen, left + right)
507
+ // The cells of React buttons removed by a merge go with their roots.
508
+ cells.retain(screen, roots.keys)
509
+ val leftKey = screen.id + left.joinToString { buttonKey(context, it) }
510
+ if (keys[Part.Left] != leftKey) {
511
+ keys[Part.Left] = leftKey
512
+ reportWithoutId(topBar.buttons.left, "leftButtons")
513
+ leftButtons?.set(
514
+ left.map { button(screen, it, roots) },
515
+ emptyList(),
516
+ null,
517
+ merge && topBar.animateLeftButtons.isTrue,
518
+ )
519
+ }
520
+ val overflow = topBar.overflowMenu?.takeIf { it.items.isNotEmpty() }
521
+ val menu = bar.rightButtonBar.menu
522
+ search.applyMagnifier()
523
+ val taken = (0 until menu.size()).count { menu.getItem(it).itemId != Menu.NONE }
524
+ val configuration = context.resources.configuration
525
+ val plan = ButtonPlaces.plan(
526
+ right.map { ButtonPlaces.Button(ButtonPlaces.priorityOf(it.priority.get(null)), it.pinned.isTrue) },
527
+ ButtonPlaces.maxActionButtons(
528
+ configuration.screenWidthDp,
529
+ configuration.screenHeightDp,
530
+ configuration.smallestScreenWidthDp,
531
+ ),
532
+ taken,
533
+ overflow?.items?.size ?: 0,
534
+ )
535
+ val overflowColor = topBar.rightButtonColor.get(context, null) ?: TopBarDefaults.overflowIconColor(context)
536
+ val rightKey = listOf(
537
+ screen.id, right.joinToString { buttonKey(context, it) }, plan.inBar, overflow?.let(::menuKey), taken,
538
+ overflowColor,
539
+ ).joinToString()
540
+ if (keys[Part.Right] != rightKey) {
541
+ keys[Part.Right] = rightKey
542
+ reportWithoutId(topBar.buttons.right, "rightButtons")
543
+ rightButtons?.set(
544
+ plan.inBar.map { button(screen, right[it], roots) },
545
+ plan.inOverflow.map { button(screen, right[it], roots) },
546
+ overflow,
547
+ merge && topBar.animateRightButtons.isTrue,
548
+ )
549
+ search.applyMagnifier()
550
+ rightButtons?.setOverflowColor(overflowColor)
551
+ }
552
+ }
553
+
554
+ // The back button (`topBar.backButton.*`).
555
+ private fun applyBack(bar: TopBar, options: Options) {
556
+ val back = options.topBar.buttons.back
557
+ val leftWithId = options.topBar.buttons.left?.any { it.id.hasValue() } == true
558
+ val shown = back.visible.isTrue && !leftWithId
559
+ val context = bar.context
560
+ val direction = directionOf(options)
561
+ val color = back.color.get(context, null)
562
+ val label = back.accessibilityLabel.get(null) ?: DEFAULT_BACK_LABEL
563
+ val testId = back.testID.get(null) ?: BACK_BUTTON_TEST_ID
564
+ val key = listOf(
565
+ shown, back.icon.get(null), color, TopBarDefaults.navigationIconColor(context),
566
+ back.iconBackground.color.get(context, null), back.iconBackground.cornerRadius.get(null),
567
+ back.iconBackground.width.get(null), back.iconBackground.height.get(null), label, testId, direction,
568
+ ).joinToString()
569
+ if (keys[Part.Back] == key) return
570
+ keys[Part.Back] = key
571
+ val toolbar = bar.leftButtonBar
572
+ if (!shown) {
573
+ toolbar.navigationIcon = null
574
+ return
575
+ }
576
+ val own = back.icon.get(null)?.let(::loadIcon)?.mutate()
577
+ val icon = own ?: AppCompatResources.getDrawable(context, R.drawable.apex_navigation_ic_arrow_back)?.mutate()
578
+ ?: return
579
+ // The arrow always has a color; an own icon only with `color`.
580
+ (color ?: if (own == null) TopBarDefaults.navigationIconColor(context) else null)?.let {
581
+ DrawableCompat.setTint(icon, it)
582
+ }
583
+ // The bar's direction as the arrow takes it: `locale` is the device's language now.
584
+ val arrowDirection = AppDirection.resolvedViewDirection(
585
+ direction,
586
+ AppDirection.isLocaleRtl(),
587
+ ((context.applicationInfo?.flags ?: 0) and ApplicationInfo.FLAG_SUPPORTS_RTL) != 0,
588
+ )
589
+ DrawableCompat.setLayoutDirection(icon, arrowDirection)
590
+ val background = back.iconBackground
591
+ val drawable = background.color.get(context, null)?.let {
592
+ IconBackgroundDrawable(
593
+ icon,
594
+ it,
595
+ UiUtils.dpToPx(context, background.cornerRadius.get(0.0).toFloat()),
596
+ dp(background.width.get(0.0)),
597
+ dp(background.height.get(0.0)),
598
+ )
599
+ } ?: icon
600
+ toolbar.navigationIcon = drawable
601
+ // Taking the icon, the navigation button gives it its own direction, which is stale while the button is new
602
+ // or the bar's direction has just changed; the toolbar corrects it only after the icon was drawn. So the arrow
603
+ // gets the bar's direction at once, on the drawable the button shows; a background passes it to the arrow.
604
+ val held = toolbar.navigationIcon ?: drawable
605
+ DrawableCompat.setLayoutDirection(held, arrowDirection)
606
+ if (held !== drawable) DrawableCompat.setLayoutDirection(drawable, arrowDirection)
607
+ toolbar.navigationContentDescription = label
608
+ // The toolbar uses its navigation button again from screen to screen: its id is set every time.
609
+ for (index in 0 until toolbar.childCount) {
610
+ val child = toolbar.getChildAt(index)
611
+ if ((child as? ImageView)?.drawable === held) TestIds.apply(child, testId)
612
+ }
613
+ }
614
+
615
+ // The background (`topBar.background.component`).
616
+ private fun applyBackground(bar: TopBar, screen: ViewController<*>, options: Options) {
617
+ val root = components.background(screen, options.topBar.background.component)
618
+ if (root === shownBackground) return
619
+ val old = shownBackground
620
+ shownBackground = root
621
+ if (old != null && backgroundAppeared) old.view.sendComponentStop(ComponentType.TopBarBackground)
622
+ backgroundAppeared = false
623
+ bar.setBackgroundComponent(root?.view?.asView())
624
+ }
625
+
626
+ // The large title. Whether the large title shows over [entry]: `automatic` as the entry below it.
627
+ private fun largeTitleShownFor(entry: ViewController<*>, options: Options): Boolean {
628
+ val entries = host.entries
629
+ val chain = entries.indexOf(entry).takeIf { it >= 0 }?.let { entries.subList(0, it + 1) } ?: (entries + entry)
630
+ val modes = chain.map { host.resolvedOf(it).topBar.largeTitle.mode() }
631
+ return LargeTitleCollapse.isShown(modes, modes.size - 1, !options.topBar.visible.isFalse)
632
+ }
633
+
634
+ // Whether [incoming] shows less of the bar under the row than the large title now: a push to a screen without a
635
+ // large title, or a pop back to one whose large title is collapsed. The lower bar would cut the row's picture.
636
+ private fun lowersBar(motion: BarMotion?, incoming: ViewController<*>, options: Options): Boolean = when (motion) {
637
+ BarMotion.Push -> !largeTitleShownFor(incoming, options)
638
+ BarMotion.Pop -> largeTitleShownFor(incoming, options) && collapseOf(incoming, options) > 0f
639
+ else -> false
640
+ }
641
+
642
+ // How far [entry]'s large title is collapsed as it shows: by the offset its list had last, unless it doesn't follow
643
+ // the list.
644
+ private fun collapseOf(entry: ViewController<*>, options: Options): Float =
645
+ if (options.topBar.largeTitle.collapseOnScroll.isFalse) 0f else scrollOf(entry)?.lastOffset ?: 0f
646
+
647
+ private fun pictureUnderRow(bar: TopBar, leaving: ViewController<*>) {
648
+ val view = leaving.peekView() ?: return
649
+ val (bitmap, top) = bar.pictureUnderRow() ?: return
650
+ val barPlace = IntArray(2)
651
+ val viewPlace = IntArray(2)
652
+ bar.getLocationInWindow(barPlace)
653
+ view.getLocationInWindow(viewPlace)
654
+ val picture = BitmapDrawable(bar.resources, bitmap)
655
+ val left = barPlace[0] - viewPlace[0]
656
+ val y = barPlace[1] + top - viewPlace[1]
657
+ picture.setBounds(left, y, left + bitmap.width, y + bitmap.height)
658
+ view.overlay.add(picture)
659
+ underRow = leaving to picture
660
+ }
661
+
662
+ private fun dropPictureUnderRow() {
663
+ val (screen, picture) = underRow ?: return
664
+ underRow = null
665
+ screen.peekView()?.overlay?.remove(picture)
666
+ }
667
+
668
+ private fun applyLargeTitle(bar: TopBar, entry: ViewController<*>, options: Options) {
669
+ val shown = largeTitleShownFor(entry, options) && !bar.searchTakesRow
670
+ val large = options.topBar.largeTitle
671
+ val color = TopBarDefaults.titleColor(bar.context)
672
+ val testId = options.topBar.testID.get(null)
673
+ val key = listOf(shown, options.topBar.title.text.get(null), large.color.get(bar.context, null), color,
674
+ large.fontSize.get(null), fontKey(large.font), large.collapseOnScroll.get(null), testId).joinToString()
675
+ if (keys[Part.LargeTitle] == key) return
676
+ keys[Part.LargeTitle] = key
677
+ largeTitleShown = shown
678
+ bar.setLargeTitleShown(shown)
679
+ largeTitleFollower.stop()
680
+ if (!shown) {
681
+ bar.titleBar.titleView.alpha = 1f
682
+ bar.titleBar.titleComponent?.alpha = 1f
683
+ scrollOf(entry)?.forgetOffset()
684
+ return
685
+ }
686
+ val view = bar.largeTitle
687
+ view.text = options.topBar.title.text.get(null).orEmpty()
688
+ view.applyOptions(large, typefaces, color)
689
+ TestIds.apply(view, testId?.let { "$it.largeTitle" })
690
+ // Collapsed as the screen's list left it, before the bar's layout of this apply, so the bar is in place in the
691
+ // same frame: back to the screen, after light or dark changed, after a merge.
692
+ if (large.collapseOnScroll.isFalse) scrollOf(entry)?.forgetOffset()
693
+ largeTitleFollower.collapse(collapseOf(entry, options))
694
+ if (!large.collapseOnScroll.isFalse) scrollOf(entry)?.let(largeTitleFollower::follow)
695
+ }
696
+
697
+ // Shown or hidden: with the transition by its side, or by `animate` in a merge.
698
+ private fun applyVisibility(options: Options, merge: Boolean) {
699
+ val visible = !options.topBar.visible.isFalse
700
+ val key = visible.toString()
701
+ if (keys[Part.Visible] == key) return
702
+ keys[Part.Visible] = key
703
+ val change = visibilityChange
704
+ val animated = !options.topBar.animate.isFalse && (merge || change.animated)
705
+ visibility?.apply(visible, animated, if (merge) null else change.side)
706
+ }
707
+
708
+ // The hide on scroll: not under a large title, not while the search is open, not for a screen without a list to
709
+ // follow (a native screen).
710
+ private fun applyHideOnScroll(options: Options, entry: ViewController<*>) {
711
+ val collapse = collapse ?: return
712
+ val wanted = options.topBar.hideOnScroll.isTrue || options.topBar.searchBar.hideOnScroll.isTrue
713
+ val listener = scrollOf(entry)
714
+ if (wanted && !largeTitleShown && !search.isActive() && listener != null && !options.topBar.visible.isFalse) {
715
+ collapse.enableCollapse(listener)
716
+ } else {
717
+ // A bar that hides by `visible: false` keeps sliding away; the show resets it.
718
+ collapse.disableCollapse(reset = !options.topBar.visible.isFalse)
719
+ }
720
+ }
721
+
722
+ // The appearance events of the components the bar shows for the screen on top: they go with the screen's own
723
+ // moments; one set while the screen shows sends both at once. The dispatcher tells each appearance once.
724
+ private fun tellComponents() {
725
+ val screen = shownScreen ?: return
726
+ val state = shownState
727
+ if (state == Appearance.None) return
728
+ val roots = ArrayList<Pair<IReactView, ComponentType>>()
729
+ components.titleOf(screen)?.let { roots += it.view to ComponentType.TopBarTitle }
730
+ components.buttonsOf(screen).forEach { roots += it.view to ComponentType.TopBarButton }
731
+ shownBackground?.let { roots += it.view to ComponentType.TopBarBackground }
732
+ for ((view, type) in roots) {
733
+ view.sendComponentWillStart(type)
734
+ if (state == Appearance.Appeared) view.sendComponentStart(type)
735
+ }
736
+ if (shownBackground != null) backgroundAppeared = true
737
+ }
738
+
739
+ private fun clear() {
740
+ shownScreen = null
741
+ shownEntry = null
742
+ keys.clear()
743
+ bar?.leftButtonBar?.navigationIcon = null
744
+ }
745
+
746
+ private fun closeMenus() {
747
+ leftButtons?.closeMenus()
748
+ rightButtons?.closeMenus()
749
+ }
750
+
751
+ /**
752
+ * What a merge into [screen] writes into its own options: a side color into its own buttons, so it survives a new
753
+ * appearance and a theme change; a merged title text takes the component out. A merge into the stack writes nothing
754
+ * here: its color stays the stack's.
755
+ */
756
+ fun writeOwn(screen: ViewController<*>, delta: Options) {
757
+ val topBar = delta.topBar
758
+ val right = topBar.rightButtonColor.hasValue() || topBar.rightButtonDisabledColor.hasValue() ||
759
+ topBar.rightButtonBackgroundColor.hasValue()
760
+ val left = topBar.leftButtonColor.hasValue() || topBar.leftButtonDisabledColor.hasValue() ||
761
+ topBar.leftButtonBackgroundColor.hasValue()
762
+ val dropComponent = topBar.title.text.hasValue() && !topBar.title.component.hasValue() &&
763
+ screen.options.topBar.title.component.hasValue()
764
+ if (!right && !left && !dropComponent) return
765
+ screen.changeOptions { own ->
766
+ if (left) own.topBar.buttons.left?.forEach {
767
+ sideInto(it, topBar.leftButtonColor, topBar.leftButtonDisabledColor, topBar.leftButtonBackgroundColor)
768
+ }
769
+ if (right) own.topBar.buttons.right?.forEach {
770
+ sideInto(it, topBar.rightButtonColor, topBar.rightButtonDisabledColor, topBar.rightButtonBackgroundColor)
771
+ }
772
+ if (dropComponent) own.topBar.title.component = TitleComponentOptions()
773
+ }
774
+ }
775
+
776
+ private fun sideInto(button: ButtonOptions, color: ThemeColour, disabled: ThemeColour, background: ThemeColour) {
777
+ if (color.hasValue()) button.color = color
778
+ if (disabled.hasValue()) button.disabledColor = disabled
779
+ if (background.hasValue() && button.icon.hasValue()) button.iconBackground.color = background
780
+ }
781
+
782
+ // A copy of [button] with the side's colors where it has none of its own: the buttons of the options are shared by
783
+ // many screens and never take them.
784
+ private fun withSide(button: ButtonOptions, color: ThemeColour, disabled: ThemeColour, background: ThemeColour) =
785
+ button.copy().also {
786
+ if (!it.color.hasValue() && color.hasValue()) it.color = color
787
+ if (!it.disabledColor.hasValue() && disabled.hasValue()) it.disabledColor = disabled
788
+ if (!it.iconBackground.color.hasValue() && background.hasValue() && it.icon.hasValue()) {
789
+ it.iconBackground.color = background
790
+ }
791
+ }
792
+
793
+ // Only a button with an `id` is placed.
794
+ private fun hasId(button: ButtonOptions): Boolean = button.id.get(null)?.isNotEmpty() == true
795
+
796
+ // A button without an `id` is an error the developer sees (a red screen in development), each time the side's
797
+ // buttons apply: at the screen's appearance and at a merge of them.
798
+ private fun reportWithoutId(buttons: List<ButtonOptions>?, side: String) {
799
+ if (buttons.orEmpty().all(::hasId)) return
800
+ DevelopmentLog.error("a button of topBar.$side has no id: it is not placed")
801
+ }
802
+
803
+ private fun button(
804
+ screen: ViewController<*>,
805
+ options: ButtonOptions,
806
+ roots: Map<String, BarComponents.Root>,
807
+ ): ButtonBar.Button {
808
+ val componentId = options.component.componentId.get(null) ?: options.component.id.get(null)
809
+ val root = componentId?.takeIf { options.component.hasValue() }?.let(roots::get)
810
+ ?: return ButtonBar.Button(options, null)
811
+ val cell = cells.cellOf(screen, root.componentId)
812
+ cell.content = root.view.asView()
813
+ cell.contentWidth = options.component.width.get(null)?.let(::dp)
814
+ cell.contentHeight = options.component.height.get(null)?.let(::dp)
815
+ return ButtonBar.Button(options, cell)
816
+ }
817
+
818
+ // Which title component shows: the screen's own over the stack's over the defaults'; in one layer the component.
819
+ private fun titleComponentOf(screen: ViewController<*>, options: Options): TitleComponentOptions? {
820
+ val resolved = options.topBar.title
821
+ if (!resolved.component.hasValue()) return null
822
+ val own = screen.options.topBar.title
823
+ if (own.text.hasValue() && !own.component.hasValue()) return null
824
+ return resolved.component
825
+ }
826
+
827
+ private fun makeRoot(componentId: String, name: String): IReactView {
828
+ // A component of the bar renders at once, without waiting for its layout, from before its surface starts.
829
+ ScreenReadiness.setRendersAtOnce(componentId, true)
830
+ // Another live root has this id (a component of the stack's options on two screens): what it rendered isn't
831
+ // this root's, which answers by its own render.
832
+ if (BarComponents.isLive(componentId)) ScreenReadiness.forgetRender(componentId)
833
+ return ReactView(activity, componentId, name)
834
+ }
835
+
836
+ private fun loadIcon(uri: String): Drawable? {
837
+ var loaded: Drawable? = null
838
+ ImageLoader().loadIcon(activity, uri, object : ImageLoadingListenerAdapter() {
839
+ override fun onComplete(drawable: Drawable) {
840
+ loaded = drawable
841
+ }
842
+ })
843
+ return loaded
844
+ }
845
+
846
+ private fun scrollOf(entry: ViewController<*>): ScrollEventListener? =
847
+ (host.optionsScreen(entry).peekView() as? ComponentLayout)?.scrollEventListener
848
+
849
+ // The views of stopped roots leave the place of the components drawn in advance.
850
+ private fun pruneStaging() {
851
+ val staging = staging ?: return
852
+ for (index in staging.childCount - 1 downTo 0) {
853
+ if ((staging.getChildAt(index) as? ReactView)?.isDestroyed == true) staging.removeViewAt(index)
854
+ }
855
+ }
856
+
857
+ // Into the place of the components drawn in advance, unless it is somewhere already (the bar shows it).
858
+ private fun place(staging: FrameLayout, view: View, width: Int, height: Int) {
859
+ if (view.parent != null) return
860
+ staging.addView(view, FrameLayout.LayoutParams(width, height))
861
+ }
862
+
863
+ // The height of a staged background: the new screen's bar with its strip.
864
+ private fun stagedBarHeight(entry: ViewController<*>, options: Options): Int {
865
+ val room = barOf(entry, options)
866
+ return room.strip + room.height
867
+ }
868
+
869
+ // `layout.direction` of the options the bar shows with; without it React Native's direction, not left to right.
870
+ private fun directionOf(options: Options): Int = when (options.layout.layoutDirection) {
871
+ LayoutDirection.RTL -> View.LAYOUT_DIRECTION_RTL
872
+ LayoutDirection.LOCALE -> View.LAYOUT_DIRECTION_LOCALE
873
+ LayoutDirection.LTR -> View.LAYOUT_DIRECTION_LTR
874
+ LayoutDirection.DEFAULT ->
875
+ if (AppDirection.isReactNativeRtl(activity)) View.LAYOUT_DIRECTION_RTL else View.LAYOUT_DIRECTION_LTR
876
+ }
877
+
878
+ private fun alignmentOf(value: String?): TitleBar.Alignment = when (value) {
879
+ CENTER -> TitleBar.Alignment.Center
880
+ FILL -> TitleBar.Alignment.Fill
881
+ else -> TitleBar.Alignment.Start
882
+ }
883
+
884
+ private fun dp(value: Double): Int = UiUtils.dpToPx(activity, value.toFloat()).toInt()
885
+
886
+ // What makes a button's look, as a text: the parts that differ make it apply again.
887
+ private fun buttonKey(context: Context, button: ButtonOptions): String = listOf(
888
+ button.id.get(null), button.text.get(null), button.icon.get(null), button.systemItem.get(null),
889
+ button.color.get(context, null), button.disabledColor.get(context, null), button.enabled.isFalse,
890
+ button.allCaps.get(null), fontKey(button.font), button.fontSize.get(null), button.disableIconTint.isTrue,
891
+ button.iconBackground.color.get(context, null), button.iconBackground.disabledColor.get(context, null),
892
+ button.iconBackground.cornerRadius.get(null), button.iconBackground.width.get(null),
893
+ button.iconBackground.height.get(null), button.accessibilityLabel.get(null), button.testID.get(null),
894
+ button.component.name.get(null), button.component.componentId.get(null), button.component.width.get(null),
895
+ button.component.height.get(null), button.menu != null, button.menuOnLongPress.isTrue, button.pinned.isTrue,
896
+ button.priority.get(null),
897
+ ).joinToString("|")
898
+
899
+ private fun menuKey(menu: ButtonMenuOptions): String =
900
+ menu.items.joinToString("|") { "${it.title}:${it.icon}:${it.testID}" } + menu.testID
901
+
902
+ private fun fontKey(font: FontOptions): String =
903
+ listOf(font.fontFamily, font.fontStyle, font.fontWeight).joinToString { it.get(null).toString() }
904
+
905
+ // The buttons' presses and picks.
906
+ private inner class Buttons : ButtonBar.Host {
907
+ override fun pressed(buttonId: String) {
908
+ val screen = shownScreen ?: return
909
+ AppearanceDispatcher.navigationButtonPressed(screen, buttonId)
910
+ }
911
+
912
+ override fun picked(buttonId: String?, itemId: String) {
913
+ val screen = shownScreen ?: return
914
+ val entry = shownEntry ?: return
915
+ MenuChecks.write(screen, host.resolvedOf(entry), buttonId, itemId)
916
+ AppearanceDispatcher.navigationButtonPressed(screen, itemId)
917
+ }
918
+
919
+ override fun menuOf(buttonId: String): ButtonMenuOptions? {
920
+ val entry = shownEntry ?: return null
921
+ val buttons = host.resolvedOf(entry).topBar.buttons
922
+ return (buttons.left.orEmpty() + buttons.right.orEmpty()).firstOrNull { it.id.get(null) == buttonId }?.menu
923
+ }
924
+
925
+ // The search's magnifier, the one item of the bar with an id of its own: `<topBar.searchBar.testID>.button`.
926
+ override fun testIdOf(item: MenuItem): String? {
927
+ if (item.itemId == Menu.NONE) return null
928
+ val entry = shownEntry ?: return null
929
+ return host.resolvedOf(entry).topBar.searchBar.testID.get(null)?.let { "$it.button" }
930
+ }
931
+ }
932
+
933
+ // The large title follows the list of the screen on top: the bar moves up by the list's offset, the large title
934
+ // fades and is cut under the row, the row's title comes in.
935
+ private inner class LargeTitleFollower : ScrollEventListener.OnScrollListener, ScrollEventListener.OnDragListener {
936
+ fun follow(listener: ScrollEventListener) {
937
+ followed = listener
938
+ listener.register(null, this, this)
939
+ }
940
+
941
+ fun stop() {
942
+ followed?.unregister(this)
943
+ followed = null
944
+ }
945
+
946
+ fun collapse(offset: Float) {
947
+ val bar = bar ?: return
948
+ val range = UiUtils.dpToPx(bar.context, LargeTitleView.HEIGHT)
949
+ val fraction = LargeTitleCollapse.fraction(offset, range)
950
+ bar.setLargeTitleCollapse(LargeTitleCollapse.shift(offset, range).toInt())
951
+ bar.largeTitle.alpha = LargeTitleCollapse.largeTitleAlpha(fraction)
952
+ val rowAlpha = LargeTitleCollapse.rowTitleAlpha(fraction)
953
+ bar.titleBar.titleView.alpha = rowAlpha
954
+ bar.titleBar.titleComponent?.alpha = rowAlpha
955
+ val large = LargeTitleCollapse.largeTitleHasAccessibility(fraction)
956
+ bar.largeTitle.importantForAccessibility =
957
+ if (large) View.IMPORTANT_FOR_ACCESSIBILITY_YES else View.IMPORTANT_FOR_ACCESSIBILITY_NO
958
+ bar.titleBar.titleView.importantForAccessibility =
959
+ if (large) View.IMPORTANT_FOR_ACCESSIBILITY_NO else View.IMPORTANT_FOR_ACCESSIBILITY_YES
960
+ }
961
+
962
+ override fun onScrollOffset(offsetY: Float) {
963
+ if (largeTitleShown) collapse(offsetY)
964
+ }
965
+
966
+ override fun onScrollUp(nextTranslation: Float) = Unit
967
+
968
+ override fun onScrollDown(nextTranslation: Float) = Unit
969
+
970
+ override fun onShow() = Unit
971
+
972
+ override fun onHide() = Unit
973
+ }
974
+
975
+ // The bar's views for the row's transition.
976
+ private class RowTarget(private val bar: TopBar) : BarRowTransition.Target {
977
+ // The picture holds the large title too, unless the bar lowers.
978
+ var withLargeTitle = true
979
+
980
+ override fun takeSnapshot(): Boolean = bar.takeRowSnapshot(withLargeTitle)
981
+
982
+ override fun dropSnapshot() = bar.dropRowSnapshot()
983
+
984
+ override fun show(frame: RowTimeline.Frame, rtl: Boolean) {
985
+ val density = bar.resources.displayMetrics.density * if (rtl) -1f else 1f
986
+ bar.showRowFrame(frame.snapshotAlpha, frame.snapshotShift * density, frame.rowAlpha, frame.rowShift * density)
987
+ }
988
+
989
+ override fun rest() = bar.restRow()
990
+
991
+ override val isRtl: Boolean
992
+ get() = bar.layoutDirection == View.LAYOUT_DIRECTION_RTL
993
+
994
+ override val curve: (Float) -> Float = SystemTransition.CURVE::getInterpolation
995
+
996
+ override fun play(duration: Long, onFrame: (elapsed: Long) -> Unit): () -> Unit {
997
+ val animator = ValueAnimator.ofFloat(0f, 1f).apply {
998
+ this.duration = duration
999
+ interpolator = LinearInterpolator()
1000
+ addUpdateListener { onFrame((it.animatedFraction * duration).toLong()) }
1001
+ }
1002
+ animator.start()
1003
+ return { animator.cancel() }
1004
+ }
1005
+ }
1006
+
1007
+ // The bar's view for showing and hiding.
1008
+ private class VisibilityTarget(private val bar: TopBar, private val reset: () -> Unit) : TopBarVisibility.Target {
1009
+ override val hiddenOffset: Float
1010
+ get() = bar.hiddenOffset
1011
+
1012
+ override var translationY: Float
1013
+ get() = bar.translationY
1014
+ set(value) {
1015
+ bar.translationY = value
1016
+ }
1017
+
1018
+ override var isGone: Boolean
1019
+ get() = bar.visibility == View.GONE
1020
+ set(value) {
1021
+ bar.visibility = if (value) View.GONE else View.VISIBLE
1022
+ }
1023
+
1024
+ override fun slide(to: Float, duration: Long, onEnd: () -> Unit): () -> Unit {
1025
+ val animator = bar.animate().translationY(to).setDuration(duration).setInterpolator(FAST_OUT_SLOW_IN)
1026
+ .setUpdateListener(null).withEndAction(onEnd)
1027
+ animator.start()
1028
+ return { bar.animate().cancel() }
1029
+ }
1030
+
1031
+ // The side of the options on the bar's view; its end and its stop leave the bar at rest.
1032
+ override fun play(side: TopBarAnimationOptions, onEnd: () -> Unit): () -> Unit {
1033
+ bar.animate().cancel()
1034
+ val animator = SideAnimator.build(bar, side)
1035
+ if (animator == null) {
1036
+ onEnd()
1037
+ return {}
1038
+ }
1039
+ animator.addListener(object : AnimatorListenerAdapter() {
1040
+ override fun onAnimationEnd(animation: Animator) {
1041
+ SideAnimator.rest(bar)
1042
+ onEnd()
1043
+ }
1044
+ })
1045
+ animator.start()
1046
+ return {
1047
+ animator.removeAllListeners()
1048
+ animator.cancel()
1049
+ SideAnimator.rest(bar)
1050
+ }
1051
+ }
1052
+
1053
+ override fun resetCollapse() = reset()
1054
+ }
1055
+
1056
+ // The invisible place of the components drawn in advance: in the window, so React renders them, without touches.
1057
+ private class Staging(context: Context) : FrameLayout(context) {
1058
+ init {
1059
+ alpha = 0f
1060
+ importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
1061
+ }
1062
+
1063
+ override fun dispatchTouchEvent(ev: MotionEvent?): Boolean = false
1064
+ }
1065
+
1066
+ private companion object {
1067
+ const val DEFAULT_HEIGHT_DP = 64.0
1068
+ const val DEFAULT_TITLE_SP = 22.0
1069
+ const val DEFAULT_SUBTITLE_SP = 14.0
1070
+ const val CENTER = "center"
1071
+ const val FILL = "fill"
1072
+ const val DEFAULT_BACK_LABEL = "Navigate Up"
1073
+ const val BACK_BUTTON_TEST_ID = "BackButton"
1074
+
1075
+ // AndroidX's FastOutSlowInInterpolator, the same curve.
1076
+ val FAST_OUT_SLOW_IN = PathInterpolator(0.4f, 0f, 0.2f, 1f)
1077
+ }
1078
+ }
1079
+
1080
+ // The search module's group has no check of its own: any of its fields set.
1081
+ private fun SearchBarOptions.hasAnyValue(): Boolean = visible.hasValue() || focus.hasValue() ||
1082
+ hideOnScroll.hasValue() || hideTopBarOnFocus.hasValue() || obscuresBackgroundDuringPresentation.hasValue() ||
1083
+ backgroundColor.hasValue() || tintColor.hasValue() || placeholder.hasValue() || text.hasValue() ||
1084
+ placement.hasValue() || scopes != null || selectedScope.hasValue() || scopeBarActivation.hasValue() ||
1085
+ suggestions != null || resultsComponent.hasValue() || resultsActivation.hasValue()