@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.
- package/ApexNavigation.podspec +42 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -0
- package/README.md +76 -2
- package/android/CLAUDE.md +183 -0
- package/android/CORE.md +219 -0
- package/android/MATERIAL_SYMBOLS_LICENSE.txt +205 -0
- package/android/RECIPES.md +39 -0
- package/android/build.gradle +108 -0
- package/android/consumer-rules.pro +2 -0
- package/android/src/main/AndroidManifest.xml +9 -0
- package/android/src/main/java/dev/apexnative/navigation/EdgeToEdgeDecision.kt +25 -0
- package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +339 -0
- package/android/src/main/java/dev/apexnative/navigation/NavigationApplication.kt +90 -0
- package/android/src/main/java/dev/apexnative/navigation/NavigationPackage.kt +37 -0
- package/android/src/main/java/dev/apexnative/navigation/customrow/BottomTabsCustomRowOptions.kt +85 -0
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutChecks.kt +51 -0
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutException.kt +7 -0
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutNode.kt +118 -0
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutReader.kt +274 -0
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutType.kt +35 -0
- package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCalls.kt +61 -0
- package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenContext.kt +84 -0
- package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenCreator.kt +17 -0
- package/android/src/main/java/dev/apexnative/navigation/options/AnimationsOptions.kt +54 -0
- package/android/src/main/java/dev/apexnative/navigation/options/BottomTabOptions.kt +238 -0
- package/android/src/main/java/dev/apexnative/navigation/options/BottomTabsOptions.kt +244 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ButtonMenuOptions.kt +70 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ButtonOptions.kt +296 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ComponentOptions.kt +141 -0
- package/android/src/main/java/dev/apexnative/navigation/options/DefaultOptions.kt +21 -0
- package/android/src/main/java/dev/apexnative/navigation/options/FabOptions.kt +97 -0
- package/android/src/main/java/dev/apexnative/navigation/options/FontOptions.kt +47 -0
- package/android/src/main/java/dev/apexnative/navigation/options/HardwareBackButtonOptions.kt +49 -0
- package/android/src/main/java/dev/apexnative/navigation/options/InterpolationOptions.kt +203 -0
- package/android/src/main/java/dev/apexnative/navigation/options/KeyCommandOptions.kt +49 -0
- package/android/src/main/java/dev/apexnative/navigation/options/LargeTitleOptions.kt +78 -0
- package/android/src/main/java/dev/apexnative/navigation/options/LayoutAnimation.kt +157 -0
- package/android/src/main/java/dev/apexnative/navigation/options/LayoutOptions.kt +94 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ModalOptions.kt +87 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ModalPlacementOptions.kt +90 -0
- package/android/src/main/java/dev/apexnative/navigation/options/NavigationBarOptions.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/options/Options.kt +167 -0
- package/android/src/main/java/dev/apexnative/navigation/options/OptionsCache.kt +21 -0
- package/android/src/main/java/dev/apexnative/navigation/options/OptionsReader.kt +133 -0
- package/android/src/main/java/dev/apexnative/navigation/options/PreviewOptions.kt +97 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ReadableMaps.kt +70 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ScrollEdgeEffectOptions.kt +98 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SearchBarOptions.kt +151 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SharedElementTransitionOptions.kt +57 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SheetOptions.kt +108 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SideMenuOptions.kt +130 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SplitViewGroupOptions.kt +190 -0
- package/android/src/main/java/dev/apexnative/navigation/options/SplitViewOptions.kt +28 -0
- package/android/src/main/java/dev/apexnative/navigation/options/StackAnimationOptions.kt +270 -0
- package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +75 -0
- package/android/src/main/java/dev/apexnative/navigation/options/TitleOptions.kt +167 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ToolbarOptions.kt +60 -0
- package/android/src/main/java/dev/apexnative/navigation/options/TopBarAppearanceOptions.kt +223 -0
- package/android/src/main/java/dev/apexnative/navigation/options/TopBarOptions.kt +381 -0
- package/android/src/main/java/dev/apexnative/navigation/options/ViewAnimationOptions.kt +225 -0
- package/android/src/main/java/dev/apexnative/navigation/options/WindowOptions.kt +36 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/Bool.kt +23 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/Fraction.kt +12 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/LayoutDirection.kt +26 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/Param.kt +24 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/Text.kt +24 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/ThemeColour.kt +259 -0
- package/android/src/main/java/dev/apexnative/navigation/options/params/Variant.kt +36 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/BoolParser.kt +15 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/FontParser.kt +28 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/FractionParser.kt +24 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/IconParser.kt +48 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/StringListParser.kt +27 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/TextParser.kt +32 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/TypefaceLoader.kt +42 -0
- package/android/src/main/java/dev/apexnative/navigation/options/parsers/VariantParser.kt +34 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +41 -0
- package/android/src/main/java/dev/apexnative/navigation/react/CommandAnswer.kt +111 -0
- package/android/src/main/java/dev/apexnative/navigation/react/CommandListener.kt +27 -0
- package/android/src/main/java/dev/apexnative/navigation/react/CommandRunner.kt +131 -0
- package/android/src/main/java/dev/apexnative/navigation/react/DeveloperReload.kt +69 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +123 -0
- package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +154 -0
- package/android/src/main/java/dev/apexnative/navigation/react/LaunchLink.kt +37 -0
- package/android/src/main/java/dev/apexnative/navigation/react/NavigationTurboModule.kt +311 -0
- package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +89 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ReactGateway.kt +67 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ReactView.kt +197 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ReadableJson.kt +60 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ReloadCoordinator.kt +130 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +69 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +87 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ScrollEvents.kt +160 -0
- package/android/src/main/java/dev/apexnative/navigation/react/StartInfo.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +507 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/ComponentType.kt +13 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +199 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationStateReporter.kt +62 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +87 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/StateHold.kt +62 -0
- package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaReadyEvent.kt +16 -0
- package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaView.kt +140 -0
- package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaViewManager.kt +45 -0
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotContainers.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotHost.kt +91 -0
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotScreenView.kt +158 -0
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotView.kt +141 -0
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotViewManager.kt +50 -0
- package/android/src/main/java/dev/apexnative/navigation/splash/SplashHold.kt +67 -0
- package/android/src/main/java/dev/apexnative/navigation/splash/SplashTheme.kt +81 -0
- package/android/src/main/java/dev/apexnative/navigation/splash/SplashView.kt +77 -0
- package/android/src/main/java/dev/apexnative/navigation/system/AppDirection.kt +92 -0
- package/android/src/main/java/dev/apexnative/navigation/system/SystemUiLayers.kt +126 -0
- package/android/src/main/java/dev/apexnative/navigation/system/SystemUiOwner.kt +229 -0
- package/android/src/main/java/dev/apexnative/navigation/system/SystemUiRules.kt +302 -0
- package/android/src/main/java/dev/apexnative/navigation/system/SystemUiState.kt +58 -0
- package/android/src/main/java/dev/apexnative/navigation/system/SystemUiWindow.kt +405 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ColorUtils.kt +22 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/DevelopmentLog.kt +45 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/DimensionExtensions.kt +16 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ImageLoader.kt +112 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/MaterialTheme.kt +148 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/NavigationLog.kt +6 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ScrollToTop.kt +33 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/SystemUiUtils.kt +41 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/TestIds.kt +89 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/TextViewUtils.kt +10 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/UiThread.kt +31 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +43 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ViewController.kt +124 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ViewExtensions.kt +41 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ViewUtils.kt +15 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/WindowFolds.kt +107 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementController.kt +258 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementDefinition.kt +57 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementLayout.kt +225 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementPlanner.kt +120 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +31 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsCollapseBehavior.kt +54 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +664 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsPresenter.kt +367 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowGeometry.kt +81 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowPlacer.kt +223 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarLook.kt +74 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabBarMotion.kt +83 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabCellState.kt +27 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabHistory.kt +38 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +172 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabSelection.kt +65 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsAttach.kt +42 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsRoom.kt +72 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildController.kt +45 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/child/ChildControllersRegistry.kt +29 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +90 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentViewController.kt +254 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ContentReadiness.kt +65 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RenderWait.kt +231 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RestPlace.kt +28 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenContentFactory.kt +28 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFocus.kt +22 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +154 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenReadiness.kt +104 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenSafeArea.kt +148 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentCreator.kt +18 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentViewController.kt +187 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/NativeScreens.kt +25 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +40 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalContainer.kt +20 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +1269 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +186 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +342 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +398 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetContainer.kt +67 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +78 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/FirstRootDraw.kt +58 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/LayoutFactory.kt +203 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +562 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigators.kt +53 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +514 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/WaitingLayer.kt +18 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayContainer.kt +33 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +383 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayTouches.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayViews.kt +117 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/Capabilities.kt +62 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +43 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +218 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ShownChildren.kt +82 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +283 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +276 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +92 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +107 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitPanes.kt +59 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +509 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewLayout.kt +61 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewPresenter.kt +25 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedFrame.kt +19 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedPushes.kt +114 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackCommands.kt +387 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +635 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +167 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackPresenter.kt +24 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +1274 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +82 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +222 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlacement.kt +47 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPlan.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPresenter.kt +279 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/ScreenSearch.kt +450 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/SearchPanel.kt +176 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/StackSearchPresenter.kt +243 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarComponents.kt +211 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarRowTransition.kt +122 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonCells.kt +30 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonPlaces.kt +65 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/LargeTitleCollapse.kt +71 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/MenuChecks.kt +72 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarCollapseBehavior.kt +104 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +1085 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarRoom.kt +95 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarVisibility.kt +122 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/IReactView.kt +89 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/Presenter.kt +51 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ScrollEventListener.kt +194 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +320 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/AnimationRules.kt +141 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +193 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/FadeThrough.kt +57 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/SideAnimator.kt +143 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/SystemTransition.kt +26 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/ValueInterpolation.kt +93 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabItem.kt +13 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +550 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsContainer.kt +135 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsLayout.kt +89 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomBottomTabItemView.kt +91 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomTabRow.kt +165 -0
- package/android/src/main/java/dev/apexnative/navigation/views/component/ComponentLayout.kt +89 -0
- package/android/src/main/java/dev/apexnative/navigation/views/component/Renderable.kt +6 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/DrawOrder.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStub.kt +31 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +281 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/ImageLoads.kt +103 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +112 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionLayer.kt +152 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +53 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +46 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/FlightGeometry.kt +53 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +138 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +88 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PropertyAnimatorCreator.kt +33 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +66 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +70 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +179 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +139 -0
- package/android/src/main/java/dev/apexnative/navigation/views/externalcomponent/ExternalComponentLayout.kt +44 -0
- package/android/src/main/java/dev/apexnative/navigation/views/sidemenu/SideMenuView.kt +183 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +137 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/Fab.kt +125 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabAnimator.kt +8 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabCollapseBehaviour.kt +34 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabMenu.kt +133 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/LargeTitleView.kt +45 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +211 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +407 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBarDefaults.kt +35 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/ScopeRow.kt +82 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchField.kt +130 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SearchStyle.kt +29 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/search/SuggestionList.kt +77 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonComponentCell.kt +80 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +334 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonMenus.kt +106 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/IconBackgroundDrawable.kt +93 -0
- package/android/src/main/jni/ApexNavigationSpec.h +18 -0
- package/android/src/main/jni/CMakeLists.txt +33 -0
- package/android/src/main/res/color/apex_navigation_highlight_inverse.xml +5 -0
- package/android/src/main/res/color/apex_navigation_text_primary.xml +6 -0
- package/android/src/main/res/color/apex_navigation_text_primary_inverse.xml +6 -0
- package/android/src/main/res/color/apex_navigation_text_secondary.xml +6 -0
- package/android/src/main/res/color/apex_navigation_text_secondary_inverse.xml +6 -0
- package/android/src/main/res/drawable/apex_navigation_ic_arrow_back.xml +13 -0
- package/android/src/main/res/drawable/apex_navigation_ic_close.xml +12 -0
- package/android/src/main/res/drawable/ic_fab_add_24dp.xml +12 -0
- package/android/src/main/res/values/attrs.xml +13 -0
- package/android/src/main/res/values/dimens.xml +5 -0
- package/android/src/main/res/values/dimens_splash.xml +9 -0
- package/android/src/main/res/values/ids.xml +12 -0
- package/android/src/main/res/values/styles.xml +18 -0
- package/android/src/main/res/values/themes.xml +75 -0
- package/android/src/main/res/values-night/styles.xml +6 -0
- package/android/src/main/res/values-night/themes.xml +67 -0
- package/cli/app.js +113 -0
- package/cli/changes.js +235 -0
- package/cli/codegen/commands.js +356 -0
- package/cli/codegen/index.js +211 -0
- package/cli/codegen/kotlin.js +396 -0
- package/cli/codegen/names.js +99 -0
- package/cli/codegen/read.js +602 -0
- package/cli/codegen/swift.js +342 -0
- package/cli/config.js +78 -0
- package/cli/diff.js +139 -0
- package/cli/doctor/checks/android.js +217 -0
- package/cli/doctor/checks/app.js +305 -0
- package/cli/doctor/checks/conflicts.js +42 -0
- package/cli/doctor/checks/devices.js +98 -0
- package/cli/doctor/checks/icons.js +69 -0
- package/cli/doctor/checks/ios.js +187 -0
- package/cli/doctor/checks/navigation.js +285 -0
- package/cli/doctor/checks/splash.js +102 -0
- package/cli/doctor/fix.js +66 -0
- package/cli/doctor/index.js +136 -0
- package/cli/doctor/types.js +30 -0
- package/cli/exec.js +34 -0
- package/cli/gradle.js +142 -0
- package/cli/icons/android.js +173 -0
- package/cli/icons/images.js +202 -0
- package/cli/icons/index.js +97 -0
- package/cli/icons/ios.js +113 -0
- package/cli/icons/settings.js +116 -0
- package/cli/images.js +67 -0
- package/cli/index.js +307 -0
- package/cli/info/index.js +290 -0
- package/cli/init/index.js +426 -0
- package/cli/init/packageManager.js +48 -0
- package/cli/init/starter.js +440 -0
- package/cli/links/files.js +109 -0
- package/cli/links/identity.js +75 -0
- package/cli/links/index.js +532 -0
- package/cli/links/native.js +396 -0
- package/cli/links/open.js +120 -0
- package/cli/links/prefixes.js +89 -0
- package/cli/mcp/appMap.js +128 -0
- package/cli/mcp/docs.js +175 -0
- package/cli/mcp/index.js +153 -0
- package/cli/mcp/markdown.js +210 -0
- package/cli/mcp/protocol.js +151 -0
- package/cli/mcp/tools.js +389 -0
- package/cli/migrate/entry.js +451 -0
- package/cli/migrate/index.js +305 -0
- package/cli/migrate/native.js +250 -0
- package/cli/migrate/report.js +238 -0
- package/cli/pods.js +56 -0
- package/cli/project.js +189 -0
- package/cli/screen/index.js +383 -0
- package/cli/screen/templates/compose.js +46 -0
- package/cli/screen/templates/native.js +40 -0
- package/cli/screen/templates/react.js +47 -0
- package/cli/screen/templates/swiftui.js +30 -0
- package/cli/screen/templates/uikit.js +48 -0
- package/cli/screen/templates/views.js +46 -0
- package/cli/setup/index.js +240 -0
- package/cli/setup/source.js +58 -0
- package/cli/setup/steps/app.js +76 -0
- package/cli/setup/steps/appDelegate.js +98 -0
- package/cli/setup/steps/entry.js +68 -0
- package/cli/setup/steps/env.js +245 -0
- package/cli/setup/steps/infoPlist.js +39 -0
- package/cli/setup/steps/mainActivity.js +60 -0
- package/cli/setup/steps/mainApplication.js +58 -0
- package/cli/setup/steps/manifest.js +38 -0
- package/cli/setup/steps/styles.js +29 -0
- package/cli/setup/steps/types.js +14 -0
- package/cli/splash/android.js +239 -0
- package/cli/splash/files.js +50 -0
- package/cli/splash/images.js +117 -0
- package/cli/splash/index.js +109 -0
- package/cli/splash/ios.js +349 -0
- package/cli/splash/settings.js +143 -0
- package/cli/typescript.js +473 -0
- package/cli/ui.js +268 -0
- package/cli/upgrade/changelog.js +45 -0
- package/cli/upgrade/index.js +347 -0
- package/cli/upgrade/versions.js +105 -0
- package/cli/workspace.js +60 -0
- package/cli/xcode/pbxproj.js +327 -0
- package/docs-md/architecture/errors-and-loading.md +138 -0
- package/docs-md/architecture/native-screens.md +290 -0
- package/docs-md/architecture/one-tree.md +164 -0
- package/docs-md/architecture/theme-and-context.md +368 -0
- package/docs-md/architecture/transitions.md +191 -0
- package/docs-md/containers/arrangement.md +320 -0
- package/docs-md/containers/modals.md +195 -0
- package/docs-md/containers/overlays.md +109 -0
- package/docs-md/containers/side-menu.md +138 -0
- package/docs-md/containers/split-view.md +155 -0
- package/docs-md/containers/stack.md +156 -0
- package/docs-md/containers/tabs.md +187 -0
- package/docs-md/flows/a-search-screen.md +311 -0
- package/docs-md/flows/an-app-with-tabs.md +380 -0
- package/docs-md/flows/bottom-sheets.md +326 -0
- package/docs-md/flows/forms-in-a-modal.md +420 -0
- package/docs-md/flows/list-and-details.md +428 -0
- package/docs-md/flows/onboarding.md +454 -0
- package/docs-md/flows/sign-in-and-sign-out.md +693 -0
- package/docs-md/fundamentals/lifecycle-and-events.md +224 -0
- package/docs-md/fundamentals/moving-between-screens.md +267 -0
- package/docs-md/fundamentals/screen-options.md +197 -0
- package/docs-md/fundamentals/screens-and-props.md +314 -0
- package/docs-md/fundamentals/starting-the-app.md +317 -0
- package/docs-md/fundamentals/switching-roots.md +166 -0
- package/docs-md/guides/analytics.md +377 -0
- package/docs-md/guides/app-context.md +554 -0
- package/docs-md/guides/building-a-screen.md +350 -0
- package/docs-md/guides/cli.md +421 -0
- package/docs-md/guides/data-fetching.md +492 -0
- package/docs-md/guides/deep-links.md +694 -0
- package/docs-md/guides/error-reporting.md +290 -0
- package/docs-md/guides/gestures-and-animations.md +381 -0
- package/docs-md/guides/notifications.md +548 -0
- package/docs-md/guides/overview.md +65 -0
- package/docs-md/guides/right-to-left.md +273 -0
- package/docs-md/guides/splash-screen.md +30 -0
- package/docs-md/guides/state-management.md +1050 -0
- package/docs-md/guides/testing.md +293 -0
- package/docs-md/help/glossary.md +433 -0
- package/docs-md/help/troubleshooting.md +709 -0
- package/docs-md/index.json +4205 -0
- package/docs-md/migration/from-expo-router.md +446 -0
- package/docs-md/migration/from-react-native-navigation.md +789 -0
- package/docs-md/migration/from-react-navigation.md +628 -0
- package/docs-md/screen-ui/back-and-gestures.md +178 -0
- package/docs-md/screen-ui/bar-buttons.md +312 -0
- package/docs-md/screen-ui/search.md +181 -0
- package/docs-md/screen-ui/system-ui.md +337 -0
- package/docs-md/screen-ui/toolbar-and-fab.md +146 -0
- package/docs-md/screen-ui/top-bar.md +247 -0
- package/docs-md/start/installation.md +233 -0
- package/docs-md/start/introduction.md +46 -0
- package/docs-md/start/quick-start.md +124 -0
- package/ios/Animations/ANNAnimationRules.h +72 -0
- package/ios/Animations/ANNAnimationRules.mm +122 -0
- package/ios/Animations/ANNFrameDriver.h +46 -0
- package/ios/Animations/ANNFrameDriver.mm +126 -0
- package/ios/Animations/ANNTransitionAnimator.h +34 -0
- package/ios/Animations/ANNTransitionAnimator.mm +293 -0
- package/ios/Animations/ANNTransitionPlan.h +115 -0
- package/ios/Animations/ANNTransitionPlan.mm +130 -0
- package/ios/Animations/ANNTransitionWait.h +29 -0
- package/ios/Animations/ANNTransitionWait.mm +135 -0
- package/ios/Animations/Elements/ANNElementFinder.h +26 -0
- package/ios/Animations/Elements/ANNElementFinder.mm +37 -0
- package/ios/Animations/Elements/ANNElementTransition.h +30 -0
- package/ios/Animations/Elements/ANNElementTransition.mm +75 -0
- package/ios/Animations/Elements/ANNSharedElementFlight.h +42 -0
- package/ios/Animations/Elements/ANNSharedElementFlight.mm +340 -0
- package/ios/Animations/Elements/ANNZoomAnchor.h +33 -0
- package/ios/Animations/Elements/ANNZoomAnchor.mm +133 -0
- package/ios/Animations/Interpolators/ANNCurve.h +61 -0
- package/ios/Animations/Interpolators/ANNCurve.mm +301 -0
- package/ios/Animations/Interpolators/ANNInterpolate.h +69 -0
- package/ios/Animations/Interpolators/ANNTrack.h +52 -0
- package/ios/Animations/Interpolators/ANNTrack.mm +77 -0
- package/ios/Animations/Interpolators/ANNViewTracks.h +57 -0
- package/ios/Animations/Interpolators/ANNViewTracks.mm +261 -0
- package/ios/ApexNavigation-prefix.h +6 -0
- package/ios/CLAUDE.md +151 -0
- package/ios/CORE.md +177 -0
- package/ios/Contract/ANNCommandAnswer.h +38 -0
- package/ios/Contract/ANNCommandAnswer.mm +99 -0
- package/ios/Contract/ANNCommandRunner.h +42 -0
- package/ios/Contract/ANNCommandRunner.mm +89 -0
- package/ios/Contract/ANNErrorTexts.h +86 -0
- package/ios/Contract/ANNErrorTexts.mm +230 -0
- package/ios/Contract/ANNLayoutNode.h +64 -0
- package/ios/Contract/ANNLayoutNode.mm +153 -0
- package/ios/Contract/ANNLayoutReader.h +34 -0
- package/ios/Contract/ANNLayoutReader.mm +282 -0
- package/ios/Contract/ANNLayoutRoot.h +26 -0
- package/ios/Contract/ANNLayoutRoot.mm +21 -0
- package/ios/Contract/ANNLayoutTreeOptions.h +22 -0
- package/ios/Contract/ANNLayoutTreeOptions.mm +32 -0
- package/ios/Contract/ANNLayoutType.h +44 -0
- package/ios/Contract/ANNLayoutValidator.h +23 -0
- package/ios/Contract/ANNLayoutValidator.mm +28 -0
- package/ios/Core/ANNAppDelegate.mm +122 -0
- package/ios/Core/ANNAppDirection.h +43 -0
- package/ios/Core/ANNAppDirection.mm +194 -0
- package/ios/Core/ANNAppearanceDispatcher.h +117 -0
- package/ios/Core/ANNAppearanceDispatcher.mm +433 -0
- package/ios/Core/ANNAssert.h +7 -0
- package/ios/Core/ANNDeepLinkQueue.h +35 -0
- package/ios/Core/ANNDeepLinkQueue.mm +136 -0
- package/ios/Core/ANNErrorHandler.h +17 -0
- package/ios/Core/ANNErrorHandler.mm +14 -0
- package/ios/Core/ANNEventEmitter.h +174 -0
- package/ios/Core/ANNEventEmitter.mm +337 -0
- package/ios/Core/ANNHinge.h +26 -0
- package/ios/Core/ANNHinge.mm +116 -0
- package/ios/Core/ANNKeyCommands.h +12 -0
- package/ios/Core/ANNKeyCommands.mm +74 -0
- package/ios/Core/ANNLayoutInfo.h +18 -0
- package/ios/Core/ANNLayoutInfo.mm +13 -0
- package/ios/Core/ANNLayoutProtocol.h +155 -0
- package/ios/Core/ANNNavigationState.h +38 -0
- package/ios/Core/ANNNavigationState.mm +127 -0
- package/ios/Core/ANNNodeHelper.h +114 -0
- package/ios/Core/ANNNodeHelper.mm +260 -0
- package/ios/Core/ANNNodePresenter.h +86 -0
- package/ios/Core/ANNNodePresenter.mm +92 -0
- package/ios/Core/ANNNodeRegistry.h +30 -0
- package/ios/Core/ANNNodeRegistry.mm +48 -0
- package/ios/Core/ANNOptionsRepaint.h +19 -0
- package/ios/Core/ANNOptionsRepaint.mm +59 -0
- package/ios/Core/ANNParking.h +34 -0
- package/ios/Core/ANNParking.mm +117 -0
- package/ios/Core/ANNPendingLayers.h +31 -0
- package/ios/Core/ANNPendingLayers.mm +57 -0
- package/ios/Core/ANNReloadCoordinator.h +26 -0
- package/ios/Core/ANNReloadCoordinator.mm +211 -0
- package/ios/Core/ANNRenderWait.h +105 -0
- package/ios/Core/ANNRenderWait.mm +496 -0
- package/ios/Core/ANNSceneDelegate.mm +92 -0
- package/ios/Core/ANNScreenAppearance+Internal.h +29 -0
- package/ios/Core/ANNScreenAppearance.h +60 -0
- package/ios/Core/ANNScreenAppearance.mm +44 -0
- package/ios/Core/ANNShownScreens.h +27 -0
- package/ios/Core/ANNShownScreens.mm +16 -0
- package/ios/Core/ANNSystemUI.h +95 -0
- package/ios/Core/ANNSystemUI.mm +401 -0
- package/ios/Core/ANNSystemUIRules.h +35 -0
- package/ios/Core/ANNSystemUIRules.mm +139 -0
- package/ios/Core/ANNUtils.h +35 -0
- package/ios/Core/ANNUtils.mm +111 -0
- package/ios/Core/ApexNavigation+Internal.h +26 -0
- package/ios/Core/ApexNavigation.mm +177 -0
- package/ios/Core/UIViewController+LayoutProtocol.h +102 -0
- package/ios/Core/UIViewController+LayoutProtocol.mm +253 -0
- package/ios/Layouts/Arrangement/ANNArrangementScreenDelegate.h +18 -0
- package/ios/Layouts/Arrangement/ANNArrangementState.h +30 -0
- package/ios/Layouts/Arrangement/ANNArrangementState.mm +53 -0
- package/ios/Layouts/Arrangement/ANNArrangementViewController.h +38 -0
- package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +573 -0
- package/ios/Layouts/External/ANNExternalViewController.h +28 -0
- package/ios/Layouts/External/ANNExternalViewController.mm +118 -0
- package/ios/Layouts/External/ANNNativeScreenCalls.h +27 -0
- package/ios/Layouts/External/ANNNativeScreenCalls.mm +77 -0
- package/ios/Layouts/Modal/ANNModal.h +121 -0
- package/ios/Layouts/Modal/ANNModal.mm +64 -0
- package/ios/Layouts/Modal/ANNModalCoordinator.h +99 -0
- package/ios/Layouts/Modal/ANNModalCoordinator.mm +1965 -0
- package/ios/Layouts/Modal/ANNModalHostViewComponentView.h +13 -0
- package/ios/Layouts/Modal/ANNModalHostViewComponentView.mm +24 -0
- package/ios/Layouts/Modal/ANNModalPresentation.h +73 -0
- package/ios/Layouts/Modal/ANNModalPresentation.mm +189 -0
- package/ios/Layouts/Modal/ANNModalSizePresenter.h +13 -0
- package/ios/Layouts/Modal/ANNModalSizePresenter.mm +65 -0
- package/ios/Layouts/Modal/ANNModalTransitions.h +29 -0
- package/ios/Layouts/Modal/ANNModalTransitions.mm +40 -0
- package/ios/Layouts/Modal/ANNPopoverPresenter.h +29 -0
- package/ios/Layouts/Modal/ANNPopoverPresenter.mm +158 -0
- package/ios/Layouts/Modal/ANNPresentationGate.h +52 -0
- package/ios/Layouts/Modal/ANNPresentationGate.mm +153 -0
- package/ios/Layouts/Modal/ANNSheetPresenter.h +31 -0
- package/ios/Layouts/Modal/ANNSheetPresenter.mm +247 -0
- package/ios/Layouts/Overlay/ANNOverlayCoordinator.h +66 -0
- package/ios/Layouts/Overlay/ANNOverlayCoordinator.mm +604 -0
- package/ios/Layouts/Overlay/ANNOverlayWindow.h +10 -0
- package/ios/Layouts/Overlay/ANNOverlayWindow.mm +71 -0
- package/ios/Layouts/Root/ANNLayoutFactory.h +31 -0
- package/ios/Layouts/Root/ANNLayoutFactory.mm +349 -0
- package/ios/Layouts/Root/ANNRootCoordinator.h +42 -0
- package/ios/Layouts/Root/ANNRootCoordinator.mm +847 -0
- package/ios/Layouts/Root/ANNSplashViewController.h +30 -0
- package/ios/Layouts/Root/ANNSplashViewController.mm +138 -0
- package/ios/Layouts/Screen/ANNComponentPresenter.h +32 -0
- package/ios/Layouts/Screen/ANNComponentPresenter.mm +136 -0
- package/ios/Layouts/Screen/ANNComponentViewController.h +100 -0
- package/ios/Layouts/Screen/ANNComponentViewController.mm +652 -0
- package/ios/Layouts/Screen/ANNNativeScreenContext+Internal.h +19 -0
- package/ios/Layouts/Screen/ANNNativeScreenContext.mm +84 -0
- package/ios/Layouts/Screen/ANNPreviewInteraction.h +38 -0
- package/ios/Layouts/Screen/ANNPreviewInteraction.mm +252 -0
- package/ios/Layouts/Screen/ANNScreenBars.h +29 -0
- package/ios/Layouts/Screen/ANNScreenBars.mm +47 -0
- package/ios/Layouts/Screen/ANNScreenInsets.h +30 -0
- package/ios/Layouts/Screen/ANNScreenInsets.mm +68 -0
- package/ios/Layouts/Screen/ANNScreenReadiness.h +92 -0
- package/ios/Layouts/Screen/ANNScreenReadiness.mm +186 -0
- package/ios/Layouts/Screen/ANNScreenRegions.h +33 -0
- package/ios/Layouts/Screen/ANNScreenRegions.mm +105 -0
- package/ios/Layouts/Screen/ANNScreenSafeArea.h +38 -0
- package/ios/Layouts/Screen/ANNScreenSafeArea.mm +58 -0
- package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.h +41 -0
- package/ios/Layouts/SideMenu/ANNSideMenuChildViewController.mm +113 -0
- package/ios/Layouts/SideMenu/ANNSideMenuPresenter.h +28 -0
- package/ios/Layouts/SideMenu/ANNSideMenuPresenter.mm +260 -0
- package/ios/Layouts/SideMenu/ANNSideMenuTypes.h +19 -0
- package/ios/Layouts/SideMenu/ANNSideMenuViewController.h +46 -0
- package/ios/Layouts/SideMenu/ANNSideMenuViewController.mm +891 -0
- package/ios/Layouts/SplitView/ANNSplitViewCommands.h +39 -0
- package/ios/Layouts/SplitView/ANNSplitViewCommands.mm +612 -0
- package/ios/Layouts/SplitView/ANNSplitViewController.h +52 -0
- package/ios/Layouts/SplitView/ANNSplitViewController.mm +494 -0
- package/ios/Layouts/SplitView/ANNSplitViewPresenter.h +18 -0
- package/ios/Layouts/SplitView/ANNSplitViewPresenter.mm +181 -0
- package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.h +32 -0
- package/ios/Layouts/SplitView/UISplitViewController+ANNOptions.mm +133 -0
- package/ios/Layouts/Stack/ANNPreviewPush.h +46 -0
- package/ios/Layouts/Stack/ANNPreviewPush.mm +298 -0
- package/ios/Layouts/Stack/ANNStackAnimatingDelegate.h +32 -0
- package/ios/Layouts/Stack/ANNStackAnimatingDelegate.mm +92 -0
- package/ios/Layouts/Stack/ANNStackCommands.h +51 -0
- package/ios/Layouts/Stack/ANNStackCommands.mm +403 -0
- package/ios/Layouts/Stack/ANNStackController.h +161 -0
- package/ios/Layouts/Stack/ANNStackController.mm +1597 -0
- package/ios/Layouts/Stack/ANNStackPresenter.h +44 -0
- package/ios/Layouts/Stack/ANNStackPresenter.mm +181 -0
- package/ios/Layouts/Stack/ANNStackQueue.h +194 -0
- package/ios/Layouts/Stack/ANNStackQueue.mm +1300 -0
- package/ios/Layouts/Stack/InteractivePopGestureDelegate.h +53 -0
- package/ios/Layouts/Stack/InteractivePopGestureDelegate.mm +228 -0
- package/ios/Layouts/Stack/UINavigationController+ANNCommands.h +19 -0
- package/ios/Layouts/Stack/UINavigationController+ANNCommands.mm +29 -0
- package/ios/Layouts/Tabs/ANNBottomTabCellView.h +33 -0
- package/ios/Layouts/Tabs/ANNBottomTabCellView.mm +100 -0
- package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.h +49 -0
- package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.mm +153 -0
- package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.h +17 -0
- package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.mm +56 -0
- package/ios/Layouts/Tabs/ANNBottomTabsController.h +121 -0
- package/ios/Layouts/Tabs/ANNBottomTabsController.mm +1404 -0
- package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.h +47 -0
- package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.mm +280 -0
- package/ios/Layouts/Tabs/ANNBottomTabsPresenter.h +81 -0
- package/ios/Layouts/Tabs/ANNBottomTabsPresenter.mm +1026 -0
- package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.h +24 -0
- package/ios/Layouts/Tabs/ANNMoreNavigationDelegate.mm +58 -0
- package/ios/Layouts/Tabs/ANNScrollToTop.h +23 -0
- package/ios/Layouts/Tabs/ANNScrollToTop.mm +55 -0
- package/ios/Layouts/Tabs/ANNTabDotView.h +19 -0
- package/ios/Layouts/Tabs/ANNTabDotView.mm +46 -0
- package/ios/Layouts/Tabs/ANNTabLongPress.h +28 -0
- package/ios/Layouts/Tabs/ANNTabLongPress.mm +98 -0
- package/ios/Layouts/Tabs/ANNTabsDesign.h +26 -0
- package/ios/Layouts/Tabs/ANNTabsDesign.mm +34 -0
- package/ios/Layouts/Tabs/ANNTabsPreloadWindow.h +27 -0
- package/ios/Layouts/Tabs/ANNTabsPreloadWindow.mm +55 -0
- package/ios/Layouts/Tabs/UITabBar+utils.h +24 -0
- package/ios/Layouts/Tabs/UITabBar+utils.mm +103 -0
- package/ios/Options/ANNAnimationOptions.h +22 -0
- package/ios/Options/ANNAnimationOptions.mm +16 -0
- package/ios/Options/ANNAnimationPropertyOptions.h +17 -0
- package/ios/Options/ANNAnimationPropertyOptions.mm +15 -0
- package/ios/Options/ANNBottomTabDotIndicatorOptions.h +14 -0
- package/ios/Options/ANNBottomTabDotIndicatorOptions.mm +13 -0
- package/ios/Options/ANNBottomTabOptions.h +51 -0
- package/ios/Options/ANNBottomTabOptions.mm +47 -0
- package/ios/Options/ANNBottomTabsAccessoryOptions.h +19 -0
- package/ios/Options/ANNBottomTabsAccessoryOptions.mm +25 -0
- package/ios/Options/ANNBottomTabsAnimationOptions.h +12 -0
- package/ios/Options/ANNBottomTabsAnimationOptions.mm +11 -0
- package/ios/Options/ANNBottomTabsCustomRowOptions.h +19 -0
- package/ios/Options/ANNBottomTabsCustomRowOptions.mm +17 -0
- package/ios/Options/ANNBottomTabsOptions.h +51 -0
- package/ios/Options/ANNBottomTabsOptions.mm +48 -0
- package/ios/Options/ANNBottomTabsShadowOptions.h +14 -0
- package/ios/Options/ANNBottomTabsShadowOptions.mm +13 -0
- package/ios/Options/ANNButtonComponentOptions.h +13 -0
- package/ios/Options/ANNButtonComponentOptions.mm +12 -0
- package/ios/Options/ANNButtonOptions.h +56 -0
- package/ios/Options/ANNButtonOptions.mm +53 -0
- package/ios/Options/ANNButtonsParser.h +13 -0
- package/ios/Options/ANNButtonsParser.mm +18 -0
- package/ios/Options/ANNComponentOptions.h +14 -0
- package/ios/Options/ANNComponentOptions.mm +12 -0
- package/ios/Options/ANNDefaultOptions.h +18 -0
- package/ios/Options/ANNDefaultOptions.mm +22 -0
- package/ios/Options/ANNElementAnimationOptions.h +18 -0
- package/ios/Options/ANNElementAnimationOptions.mm +15 -0
- package/ios/Options/ANNElementTransitionOptions.h +26 -0
- package/ios/Options/ANNElementTransitionOptions.mm +28 -0
- package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.h +14 -0
- package/ios/Options/ANNEnterExitBottomTabsAnimationOptions.mm +12 -0
- package/ios/Options/ANNEnterExitScreenAnimationOptions.h +14 -0
- package/ios/Options/ANNEnterExitScreenAnimationOptions.mm +12 -0
- package/ios/Options/ANNEnterExitTopBarAnimationOptions.h +14 -0
- package/ios/Options/ANNEnterExitTopBarAnimationOptions.mm +12 -0
- package/ios/Options/ANNFabOptions.h +26 -0
- package/ios/Options/ANNFabOptions.mm +23 -0
- package/ios/Options/ANNFontOptions.h +24 -0
- package/ios/Options/ANNFontOptions.mm +65 -0
- package/ios/Options/ANNHardwareBackButtonOptions.h +15 -0
- package/ios/Options/ANNHardwareBackButtonOptions.mm +13 -0
- package/ios/Options/ANNIconBackgroundOptions.h +16 -0
- package/ios/Options/ANNIconBackgroundOptions.mm +15 -0
- package/ios/Options/ANNIconInsetsOptions.h +16 -0
- package/ios/Options/ANNIconInsetsOptions.mm +14 -0
- package/ios/Options/ANNInterpolationOptions.h +22 -0
- package/ios/Options/ANNInterpolationOptions.mm +22 -0
- package/ios/Options/ANNLayoutOptions.h +26 -0
- package/ios/Options/ANNLayoutOptions.mm +25 -0
- package/ios/Options/ANNMenuOptions.h +37 -0
- package/ios/Options/ANNMenuOptions.mm +136 -0
- package/ios/Options/ANNModalAnimationOptions.h +17 -0
- package/ios/Options/ANNModalAnimationOptions.mm +15 -0
- package/ios/Options/ANNModalContentSizeOptions.h +14 -0
- package/ios/Options/ANNModalContentSizeOptions.mm +15 -0
- package/ios/Options/ANNModalOptions.h +19 -0
- package/ios/Options/ANNModalOptions.mm +15 -0
- package/ios/Options/ANNNavigationBarOptions.h +14 -0
- package/ios/Options/ANNNavigationBarOptions.mm +13 -0
- package/ios/Options/ANNNavigationOptions.h +60 -0
- package/ios/Options/ANNNavigationOptions.mm +54 -0
- package/ios/Options/ANNOptionField.h +91 -0
- package/ios/Options/ANNOptionField.mm +173 -0
- package/ios/Options/ANNOptions.h +62 -0
- package/ios/Options/ANNOptions.mm +329 -0
- package/ios/Options/ANNOptionsCache.h +22 -0
- package/ios/Options/ANNOptionsCache.mm +17 -0
- package/ios/Options/ANNOptionsReader.h +33 -0
- package/ios/Options/ANNOptionsReader.mm +63 -0
- package/ios/Options/ANNOverlayOptions.h +14 -0
- package/ios/Options/ANNOverlayOptions.mm +12 -0
- package/ios/Options/ANNPopoverOptions.h +17 -0
- package/ios/Options/ANNPopoverOptions.mm +31 -0
- package/ios/Options/ANNPreviewOptions.h +17 -0
- package/ios/Options/ANNPreviewOptions.mm +15 -0
- package/ios/Options/ANNScreenAnimationOptions.h +13 -0
- package/ios/Options/ANNScreenAnimationOptions.mm +12 -0
- package/ios/Options/ANNScrollEdgeEffectOptions.h +20 -0
- package/ios/Options/ANNScrollEdgeEffectOptions.mm +16 -0
- package/ios/Options/ANNScrollEdgeOptions.h +14 -0
- package/ios/Options/ANNScrollEdgeOptions.mm +12 -0
- package/ios/Options/ANNSearchBarOptions.h +49 -0
- package/ios/Options/ANNSearchBarOptions.mm +41 -0
- package/ios/Options/ANNSearchScopeOptions.h +15 -0
- package/ios/Options/ANNSearchScopeOptions.mm +13 -0
- package/ios/Options/ANNSearchSuggestionOptions.h +19 -0
- package/ios/Options/ANNSearchSuggestionOptions.mm +16 -0
- package/ios/Options/ANNSearchTokenOptions.h +18 -0
- package/ios/Options/ANNSearchTokenOptions.mm +15 -0
- package/ios/Options/ANNSetStackRootAnimationOptions.h +12 -0
- package/ios/Options/ANNSetStackRootAnimationOptions.mm +11 -0
- package/ios/Options/ANNSharedElementTransitionOptions.h +17 -0
- package/ios/Options/ANNSharedElementTransitionOptions.mm +15 -0
- package/ios/Options/ANNSheetOptions.h +25 -0
- package/ios/Options/ANNSheetOptions.mm +41 -0
- package/ios/Options/ANNSideMenuOptions.h +19 -0
- package/ios/Options/ANNSideMenuOptions.mm +16 -0
- package/ios/Options/ANNSideMenuSideOptions.h +23 -0
- package/ios/Options/ANNSideMenuSideOptions.mm +20 -0
- package/ios/Options/ANNSplitViewColumnOptions.h +14 -0
- package/ios/Options/ANNSplitViewColumnOptions.mm +13 -0
- package/ios/Options/ANNSplitViewInspectorOptions.h +13 -0
- package/ios/Options/ANNSplitViewInspectorOptions.mm +9 -0
- package/ios/Options/ANNSplitViewOptions.h +29 -0
- package/ios/Options/ANNSplitViewOptions.mm +26 -0
- package/ios/Options/ANNStackAnimationOptions.h +23 -0
- package/ios/Options/ANNStackAnimationOptions.mm +20 -0
- package/ios/Options/ANNStackPushAnimationOptions.h +13 -0
- package/ios/Options/ANNStackPushAnimationOptions.mm +11 -0
- package/ios/Options/ANNStatusBarOptions.h +20 -0
- package/ios/Options/ANNStatusBarOptions.mm +18 -0
- package/ios/Options/ANNToolbarOptions.h +14 -0
- package/ios/Options/ANNToolbarOptions.mm +27 -0
- package/ios/Options/ANNTopBarAnimationOptions.h +12 -0
- package/ios/Options/ANNTopBarAnimationOptions.mm +11 -0
- package/ios/Options/ANNTopBarBackButtonOptions.h +31 -0
- package/ios/Options/ANNTopBarBackButtonOptions.mm +35 -0
- package/ios/Options/ANNTopBarBackgroundComponentOptions.h +13 -0
- package/ios/Options/ANNTopBarBackgroundComponentOptions.mm +11 -0
- package/ios/Options/ANNTopBarBackgroundOptions.h +17 -0
- package/ios/Options/ANNTopBarBackgroundOptions.mm +15 -0
- package/ios/Options/ANNTopBarLargeTitleOptions.h +19 -0
- package/ios/Options/ANNTopBarLargeTitleOptions.mm +15 -0
- package/ios/Options/ANNTopBarOptions.h +62 -0
- package/ios/Options/ANNTopBarOptions.mm +49 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.h +14 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceBackgroundOptions.mm +12 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.h +19 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceOptions.mm +16 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.h +16 -0
- package/ios/Options/ANNTopBarScrollEdgeAppearanceTitleOptions.mm +12 -0
- package/ios/Options/ANNTopBarSubtitleOptions.h +18 -0
- package/ios/Options/ANNTopBarSubtitleOptions.mm +14 -0
- package/ios/Options/ANNTopBarTitleComponentOptions.h +15 -0
- package/ios/Options/ANNTopBarTitleComponentOptions.mm +12 -0
- package/ios/Options/ANNTopBarTitleDocumentOptions.h +12 -0
- package/ios/Options/ANNTopBarTitleDocumentOptions.mm +11 -0
- package/ios/Options/ANNTopBarTitleOptions.h +29 -0
- package/ios/Options/ANNTopBarTitleOptions.mm +21 -0
- package/ios/Options/ANNViewAnimationOptions.h +26 -0
- package/ios/Options/ANNViewAnimationOptions.mm +58 -0
- package/ios/Options/ANNWindowOptions.h +12 -0
- package/ios/Options/ANNWindowOptions.mm +9 -0
- package/ios/Options/ANNZoomTransitionOptions.h +13 -0
- package/ios/Options/ANNZoomTransitionOptions.mm +12 -0
- package/ios/Options/Params/ANNIntegerParam.h +14 -0
- package/ios/Options/Params/ANNIntegerParam.mm +13 -0
- package/ios/Options/Params/ANNParam.h +28 -0
- package/ios/Options/Params/ANNParam.mm +29 -0
- package/ios/Options/Params/Bool.h +17 -0
- package/ios/Options/Params/Bool.mm +17 -0
- package/ios/Options/Params/BoolParser.h +12 -0
- package/ios/Options/Params/BoolParser.mm +10 -0
- package/ios/Options/Params/Color.h +43 -0
- package/ios/Options/Params/Color.mm +65 -0
- package/ios/Options/Params/ColorParser.h +14 -0
- package/ios/Options/Params/ColorParser.mm +95 -0
- package/ios/Options/Params/Double.h +14 -0
- package/ios/Options/Params/Double.mm +13 -0
- package/ios/Options/Params/DoubleParser.h +16 -0
- package/ios/Options/Params/DoubleParser.mm +16 -0
- package/ios/Options/Params/Image.h +15 -0
- package/ios/Options/Params/Image.mm +13 -0
- package/ios/Options/Params/ImageParser.h +16 -0
- package/ios/Options/Params/ImageParser.mm +103 -0
- package/ios/Options/Params/Number.h +14 -0
- package/ios/Options/Params/Number.mm +13 -0
- package/ios/Options/Params/NumberParser.h +13 -0
- package/ios/Options/Params/NumberParser.mm +10 -0
- package/ios/Options/Params/Param.h +16 -0
- package/ios/Options/Params/Param.mm +13 -0
- package/ios/Options/Params/Text.h +17 -0
- package/ios/Options/Params/Text.mm +17 -0
- package/ios/Options/Params/TextParser.h +17 -0
- package/ios/Options/Params/TextParser.mm +17 -0
- package/ios/Package.swift +58 -0
- package/ios/Public/ApexNavigation/ANNAppDelegate.h +66 -0
- package/ios/Public/ApexNavigation/ANNSceneDelegate.h +19 -0
- package/ios/Public/ApexNavigation/ApexNavigation.h +92 -0
- package/ios/Public/module.modulemap +8 -0
- package/ios/RECIPES.md +41 -0
- package/ios/React/ANNComponentType.h +22 -0
- package/ios/React/ANNComponentViewCreator.h +18 -0
- package/ios/React/ANNReactComponentRegistry.h +53 -0
- package/ios/React/ANNReactComponentRegistry.mm +153 -0
- package/ios/React/ANNReactView.h +104 -0
- package/ios/React/ANNReactView.mm +374 -0
- package/ios/React/ANNReactViewCreator.h +20 -0
- package/ios/React/ANNReactViewCreator.mm +42 -0
- package/ios/React/ANNSafeAreaViewComponentView.h +13 -0
- package/ios/React/ANNSafeAreaViewComponentView.mm +153 -0
- package/ios/React/ANNSurfaceHostingView.h +17 -0
- package/ios/React/ANNSurfaceHostingView.mm +68 -0
- package/ios/React/Slots/ANNSlotComponentView.h +10 -0
- package/ios/React/Slots/ANNSlotComponentView.mm +122 -0
- package/ios/React/Slots/ANNSlotContainers.h +34 -0
- package/ios/React/Slots/ANNSlotContainers.mm +39 -0
- package/ios/React/Slots/ANNSlotContentView.h +12 -0
- package/ios/React/Slots/ANNSlotContentView.mm +18 -0
- package/ios/React/Slots/ANNSlotHost.h +29 -0
- package/ios/React/Slots/ANNSlotHost.mm +59 -0
- package/ios/React/Slots/ANNSlotScreenView.h +38 -0
- package/ios/React/Slots/ANNSlotScreenView.mm +254 -0
- package/ios/TopBar/ANNBackButtonPresenter.h +35 -0
- package/ios/TopBar/ANNBackButtonPresenter.mm +187 -0
- package/ios/TopBar/ANNBarAppearance.h +53 -0
- package/ios/TopBar/ANNBarAppearance.mm +278 -0
- package/ios/TopBar/ANNBarBackgroundComponent.h +46 -0
- package/ios/TopBar/ANNBarBackgroundComponent.mm +163 -0
- package/ios/TopBar/ANNBarButtonComponentView.h +30 -0
- package/ios/TopBar/ANNBarButtonComponentView.mm +110 -0
- package/ios/TopBar/ANNBarButtons.h +65 -0
- package/ios/TopBar/ANNBarButtons.mm +1125 -0
- package/ios/TopBar/ANNBarComponentsWait.h +37 -0
- package/ios/TopBar/ANNBarComponentsWait.mm +116 -0
- package/ios/TopBar/ANNIconButtonImage.h +25 -0
- package/ios/TopBar/ANNIconButtonImage.mm +94 -0
- package/ios/TopBar/ANNLargeTitlePresenter.h +117 -0
- package/ios/TopBar/ANNLargeTitlePresenter.mm +402 -0
- package/ios/TopBar/ANNMainList.h +28 -0
- package/ios/TopBar/ANNMainList.mm +72 -0
- package/ios/TopBar/ANNScrollEdgeEffects.h +29 -0
- package/ios/TopBar/ANNScrollEdgeEffects.mm +122 -0
- package/ios/TopBar/ANNSearchPresenter.h +29 -0
- package/ios/TopBar/ANNSearchPresenter.mm +637 -0
- package/ios/TopBar/ANNSearchResultsViewController.h +16 -0
- package/ios/TopBar/ANNSearchResultsViewController.mm +56 -0
- package/ios/TopBar/ANNShowTextButton.h +22 -0
- package/ios/TopBar/ANNShowTextButton.mm +63 -0
- package/ios/TopBar/ANNTitleComponentView.h +37 -0
- package/ios/TopBar/ANNTitleComponentView.mm +86 -0
- package/ios/TopBar/ANNTitleGlassView.h +33 -0
- package/ios/TopBar/ANNTitleGlassView.mm +126 -0
- package/ios/TopBar/ANNTitleView.h +18 -0
- package/ios/TopBar/ANNTitleView.mm +63 -0
- package/ios/TopBar/ANNToolbarPresenter.h +26 -0
- package/ios/TopBar/ANNToolbarPresenter.mm +24 -0
- package/ios/TopBar/ANNTopBarPresenter.h +120 -0
- package/ios/TopBar/ANNTopBarPresenter.mm +1252 -0
- package/ios/TopBar/ANNUIBarButtonItem.h +16 -0
- package/ios/TopBar/ANNUIBarButtonItem.mm +5 -0
- package/ios/TurboModules/ANNTurboEventEmitter.h +31 -0
- package/ios/TurboModules/ANNTurboEventEmitter.mm +129 -0
- package/ios/TurboModules/ANNTurboModule.h +11 -0
- package/ios/TurboModules/ANNTurboModule.mm +626 -0
- package/ios/Utils/UIColor+ANNLuminance.h +13 -0
- package/ios/Utils/UIColor+ANNLuminance.mm +32 -0
- package/ios/Utils/UIView+Utils.h +12 -0
- package/ios/Utils/UIView+Utils.mm +21 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewComponentDescriptor.h +19 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewShadowNode.h +60 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSafeAreaViewState.h +33 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotComponentDescriptor.h +22 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotShadowNode.h +87 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.h +101 -0
- package/lib/module/ARCHITECTURE.md +289 -0
- package/lib/module/adapters/NativeANNTurboEventEmitter.js +12 -0
- package/lib/module/adapters/NativeANNTurboEventEmitter.js.map +1 -0
- package/lib/module/adapters/NativeANNTurboModule.js +13 -0
- package/lib/module/adapters/NativeANNTurboModule.js.map +1 -0
- package/lib/module/api/app/AppRegistry.js +52 -0
- package/lib/module/api/app/AppRegistry.js.map +1 -0
- package/lib/module/api/app/activeApp.js +12 -0
- package/lib/module/api/app/activeApp.js.map +1 -0
- package/lib/module/api/app/createNavigation.js +365 -0
- package/lib/module/api/app/createNavigation.js.map +1 -0
- package/lib/module/api/app/roots.js +20 -0
- package/lib/module/api/app/roots.js.map +1 -0
- package/lib/module/api/app/splash.js +124 -0
- package/lib/module/api/app/splash.js.map +1 -0
- package/lib/module/api/app/startFailure.js +38 -0
- package/lib/module/api/app/startFailure.js.map +1 -0
- package/lib/module/api/arrangement/arrangementState.js +86 -0
- package/lib/module/api/arrangement/arrangementState.js.map +1 -0
- package/lib/module/api/commands/commands.js +375 -0
- package/lib/module/api/commands/commands.js.map +1 -0
- package/lib/module/api/commands/errors.js +94 -0
- package/lib/module/api/commands/errors.js.map +1 -0
- package/lib/module/api/commands/presentation.js +4 -0
- package/lib/module/api/commands/presentation.js.map +1 -0
- package/lib/module/api/commands/sideMenus.js +134 -0
- package/lib/module/api/commands/sideMenus.js.map +1 -0
- package/lib/module/api/commands/transitions.js +245 -0
- package/lib/module/api/commands/transitions.js.map +1 -0
- package/lib/module/api/context/appContext.js +22 -0
- package/lib/module/api/context/appContext.js.map +1 -0
- package/lib/module/api/events/navigationEvents.js +69 -0
- package/lib/module/api/events/navigationEvents.js.map +1 -0
- package/lib/module/api/events/screenLifecycle.js +30 -0
- package/lib/module/api/events/screenLifecycle.js.map +1 -0
- package/lib/module/api/events/tabPresses.js +32 -0
- package/lib/module/api/events/tabPresses.js.map +1 -0
- package/lib/module/api/hinge/hinge.js +73 -0
- package/lib/module/api/hinge/hinge.js.map +1 -0
- package/lib/module/api/hooks/appHooks.js +26 -0
- package/lib/module/api/hooks/appHooks.js.map +1 -0
- package/lib/module/api/hooks/screenHooks.js +250 -0
- package/lib/module/api/hooks/screenHooks.js.map +1 -0
- package/lib/module/api/hooks/useArrangement.js +24 -0
- package/lib/module/api/hooks/useArrangement.js.map +1 -0
- package/lib/module/api/hooks/useHinge.js +29 -0
- package/lib/module/api/hooks/useHinge.js.map +1 -0
- package/lib/module/api/hooks/useNavigation.js +117 -0
- package/lib/module/api/hooks/useNavigation.js.map +1 -0
- package/lib/module/api/hooks/usePendingLink.js +12 -0
- package/lib/module/api/hooks/usePendingLink.js.map +1 -0
- package/lib/module/api/hooks/usePreview.js +97 -0
- package/lib/module/api/hooks/usePreview.js.map +1 -0
- package/lib/module/api/hooks/useReservedRegions.js +24 -0
- package/lib/module/api/hooks/useReservedRegions.js.map +1 -0
- package/lib/module/api/hooks/useSafeAreaInsets.js +25 -0
- package/lib/module/api/hooks/useSafeAreaInsets.js.map +1 -0
- package/lib/module/api/index.js +26 -0
- package/lib/module/api/index.js.map +1 -0
- package/lib/module/api/layout/Root.js +121 -0
- package/lib/module/api/layout/Root.js.map +1 -0
- package/lib/module/api/layout/Screen.js +52 -0
- package/lib/module/api/layout/Screen.js.map +1 -0
- package/lib/module/api/layout/SideMenu.js +85 -0
- package/lib/module/api/layout/SideMenu.js.map +1 -0
- package/lib/module/api/layout/SplitView.js +137 -0
- package/lib/module/api/layout/SplitView.js.map +1 -0
- package/lib/module/api/layout/Stack.js +36 -0
- package/lib/module/api/layout/Stack.js.map +1 -0
- package/lib/module/api/layout/Tabs.js +326 -0
- package/lib/module/api/layout/Tabs.js.map +1 -0
- package/lib/module/api/layout/element.js +100 -0
- package/lib/module/api/layout/element.js.map +1 -0
- package/lib/module/api/linking/linkPaths.js +132 -0
- package/lib/module/api/linking/linkPaths.js.map +1 -0
- package/lib/module/api/linking/linking.js +244 -0
- package/lib/module/api/linking/linking.js.map +1 -0
- package/lib/module/api/linking/pendingLinks.js +34 -0
- package/lib/module/api/linking/pendingLinks.js.map +1 -0
- package/lib/module/api/linking/types.js +4 -0
- package/lib/module/api/linking/types.js.map +1 -0
- package/lib/module/api/navigation.js +105 -0
- package/lib/module/api/navigation.js.map +1 -0
- package/lib/module/api/options/OptionsChain.js +158 -0
- package/lib/module/api/options/OptionsChain.js.map +1 -0
- package/lib/module/api/options/ScreenOptions.js +83 -0
- package/lib/module/api/options/ScreenOptions.js.map +1 -0
- package/lib/module/api/options/buttons.js +4 -0
- package/lib/module/api/options/buttons.js.map +1 -0
- package/lib/module/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
- package/lib/module/api/safeArea/screenInsets.js +86 -0
- package/lib/module/api/safeArea/screenInsets.js.map +1 -0
- package/lib/module/api/safeArea/screenRegions.js +84 -0
- package/lib/module/api/safeArea/screenRegions.js.map +1 -0
- package/lib/module/api/screens/ScreenBoundary.js +44 -0
- package/lib/module/api/screens/ScreenBoundary.js.map +1 -0
- package/lib/module/api/screens/arrangement.js +63 -0
- package/lib/module/api/screens/arrangement.js.map +1 -0
- package/lib/module/api/screens/defineScreen.js +29 -0
- package/lib/module/api/screens/defineScreen.js.map +1 -0
- package/lib/module/api/screens/nativeScreenCalls.js +34 -0
- package/lib/module/api/screens/nativeScreenCalls.js.map +1 -0
- package/lib/module/api/screens/nativeScreens.js +43 -0
- package/lib/module/api/screens/nativeScreens.js.map +1 -0
- package/lib/module/api/screens/registerScreens.js +305 -0
- package/lib/module/api/screens/registerScreens.js.map +1 -0
- package/lib/module/api/slots/ANNSlotNativeComponent.ts +23 -0
- package/lib/module/api/slots/SlotHost.js +92 -0
- package/lib/module/api/slots/SlotHost.js.map +1 -0
- package/lib/module/api/state/navigationState.js +98 -0
- package/lib/module/api/state/navigationState.js.map +1 -0
- package/lib/module/api/testIDs.js +14 -0
- package/lib/module/api/testIDs.js.map +1 -0
- package/lib/module/api/theme/theme.js +180 -0
- package/lib/module/api/theme/theme.js.map +1 -0
- package/lib/module/api/types.js +4 -0
- package/lib/module/api/types.js.map +1 -0
- package/lib/module/engine/backListeners.js +39 -0
- package/lib/module/engine/backListeners.js.map +1 -0
- package/lib/module/engine/buttons.js +105 -0
- package/lib/module/engine/buttons.js.map +1 -0
- package/lib/module/engine/commands.js +388 -0
- package/lib/module/engine/commands.js.map +1 -0
- package/lib/module/engine/events.js +30 -0
- package/lib/module/engine/events.js.map +1 -0
- package/lib/module/engine/ids.js +10 -0
- package/lib/module/engine/ids.js.map +1 -0
- package/lib/module/engine/launchState.js +34 -0
- package/lib/module/engine/launchState.js.map +1 -0
- package/lib/module/engine/layout.js +202 -0
- package/lib/module/engine/layout.js.map +1 -0
- package/lib/module/engine/mergeOptions.js +23 -0
- package/lib/module/engine/mergeOptions.js.map +1 -0
- package/lib/module/engine/native.js +45 -0
- package/lib/module/engine/native.js.map +1 -0
- package/lib/module/engine/nativeScreens.js +265 -0
- package/lib/module/engine/nativeScreens.js.map +1 -0
- package/lib/module/engine/options.js +170 -0
- package/lib/module/engine/options.js.map +1 -0
- package/lib/module/engine/places.js +178 -0
- package/lib/module/engine/places.js.map +1 -0
- package/lib/module/engine/props.js +44 -0
- package/lib/module/engine/props.js.map +1 -0
- package/lib/module/engine/reactMeasures.js +23 -0
- package/lib/module/engine/reactMeasures.js.map +1 -0
- package/lib/module/engine/rememberedOptions.js +118 -0
- package/lib/module/engine/rememberedOptions.js.map +1 -0
- package/lib/module/engine/screens.js +194 -0
- package/lib/module/engine/screens.js.map +1 -0
- package/lib/module/engine/slots.js +200 -0
- package/lib/module/engine/slots.js.map +1 -0
- package/lib/module/engine/tabs.js +79 -0
- package/lib/module/engine/tabs.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/interfaces/ComponentEvents.js +2 -0
- package/lib/module/interfaces/ComponentEvents.js.map +1 -0
- package/lib/module/interfaces/Events.js +2 -0
- package/lib/module/interfaces/Events.js.map +1 -0
- package/lib/module/interfaces/Layout.js +4 -0
- package/lib/module/interfaces/Layout.js.map +1 -0
- package/lib/module/interfaces/Options.js +4 -0
- package/lib/module/interfaces/Options.js.map +1 -0
- package/lib/module/interfaces/options/animations.js +2 -0
- package/lib/module/interfaces/options/animations.js.map +1 -0
- package/lib/module/interfaces/options/bottomTabs.js +4 -0
- package/lib/module/interfaces/options/bottomTabs.js.map +1 -0
- package/lib/module/interfaces/options/buttons.js +4 -0
- package/lib/module/interfaces/options/buttons.js.map +1 -0
- package/lib/module/interfaces/options/common.js +4 -0
- package/lib/module/interfaces/options/common.js.map +1 -0
- package/lib/module/interfaces/options/modals.js +2 -0
- package/lib/module/interfaces/options/modals.js.map +1 -0
- package/lib/module/interfaces/options/preview.js +2 -0
- package/lib/module/interfaces/options/preview.js.map +1 -0
- package/lib/module/interfaces/options/sideMenu.js +2 -0
- package/lib/module/interfaces/options/sideMenu.js.map +1 -0
- package/lib/module/interfaces/options/splitView.js +2 -0
- package/lib/module/interfaces/options/splitView.js.map +1 -0
- package/lib/module/interfaces/options/stack.js +4 -0
- package/lib/module/interfaces/options/stack.js.map +1 -0
- package/lib/module/interfaces/options/system.js +4 -0
- package/lib/module/interfaces/options/system.js.map +1 -0
- package/lib/module/interfaces/options/toolbar.js +4 -0
- package/lib/module/interfaces/options/toolbar.js.map +1 -0
- package/lib/module/interfaces/options/topBar.js +4 -0
- package/lib/module/interfaces/options/topBar.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts +14 -0
- package/lib/typescript/adapters/NativeANNTurboEventEmitter.d.ts.map +1 -0
- package/lib/typescript/adapters/NativeANNTurboModule.d.ts +77 -0
- package/lib/typescript/adapters/NativeANNTurboModule.d.ts.map +1 -0
- package/lib/typescript/api/app/AppRegistry.d.ts +14 -0
- package/lib/typescript/api/app/AppRegistry.d.ts.map +1 -0
- package/lib/typescript/api/app/activeApp.d.ts +12 -0
- package/lib/typescript/api/app/activeApp.d.ts.map +1 -0
- package/lib/typescript/api/app/createNavigation.d.ts +182 -0
- package/lib/typescript/api/app/createNavigation.d.ts.map +1 -0
- package/lib/typescript/api/app/roots.d.ts +15 -0
- package/lib/typescript/api/app/roots.d.ts.map +1 -0
- package/lib/typescript/api/app/splash.d.ts +81 -0
- package/lib/typescript/api/app/splash.d.ts.map +1 -0
- package/lib/typescript/api/app/startFailure.d.ts +15 -0
- package/lib/typescript/api/app/startFailure.d.ts.map +1 -0
- package/lib/typescript/api/arrangement/arrangementState.d.ts +21 -0
- package/lib/typescript/api/arrangement/arrangementState.d.ts.map +1 -0
- package/lib/typescript/api/commands/commands.d.ts +57 -0
- package/lib/typescript/api/commands/commands.d.ts.map +1 -0
- package/lib/typescript/api/commands/errors.d.ts +24 -0
- package/lib/typescript/api/commands/errors.d.ts.map +1 -0
- package/lib/typescript/api/commands/presentation.d.ts +69 -0
- package/lib/typescript/api/commands/presentation.d.ts.map +1 -0
- package/lib/typescript/api/commands/sideMenus.d.ts +14 -0
- package/lib/typescript/api/commands/sideMenus.d.ts.map +1 -0
- package/lib/typescript/api/commands/transitions.d.ts +33 -0
- package/lib/typescript/api/commands/transitions.d.ts.map +1 -0
- package/lib/typescript/api/context/appContext.d.ts +4 -0
- package/lib/typescript/api/context/appContext.d.ts.map +1 -0
- package/lib/typescript/api/events/navigationEvents.d.ts +70 -0
- package/lib/typescript/api/events/navigationEvents.d.ts.map +1 -0
- package/lib/typescript/api/events/screenLifecycle.d.ts +5 -0
- package/lib/typescript/api/events/screenLifecycle.d.ts.map +1 -0
- package/lib/typescript/api/events/tabPresses.d.ts +5 -0
- package/lib/typescript/api/events/tabPresses.d.ts.map +1 -0
- package/lib/typescript/api/hinge/hinge.d.ts +21 -0
- package/lib/typescript/api/hinge/hinge.d.ts.map +1 -0
- package/lib/typescript/api/hooks/appHooks.d.ts +15 -0
- package/lib/typescript/api/hooks/appHooks.d.ts.map +1 -0
- package/lib/typescript/api/hooks/screenHooks.d.ts +74 -0
- package/lib/typescript/api/hooks/screenHooks.d.ts.map +1 -0
- package/lib/typescript/api/hooks/useArrangement.d.ts +13 -0
- package/lib/typescript/api/hooks/useArrangement.d.ts.map +1 -0
- package/lib/typescript/api/hooks/useHinge.d.ts +16 -0
- package/lib/typescript/api/hooks/useHinge.d.ts.map +1 -0
- package/lib/typescript/api/hooks/useNavigation.d.ts +108 -0
- package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -0
- package/lib/typescript/api/hooks/usePendingLink.d.ts +7 -0
- package/lib/typescript/api/hooks/usePendingLink.d.ts.map +1 -0
- package/lib/typescript/api/hooks/usePreview.d.ts +29 -0
- package/lib/typescript/api/hooks/usePreview.d.ts.map +1 -0
- package/lib/typescript/api/hooks/useReservedRegions.d.ts +13 -0
- package/lib/typescript/api/hooks/useReservedRegions.d.ts.map +1 -0
- package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts +14 -0
- package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts.map +1 -0
- package/lib/typescript/api/index.d.ts +60 -0
- package/lib/typescript/api/index.d.ts.map +1 -0
- package/lib/typescript/api/layout/Root.d.ts +47 -0
- package/lib/typescript/api/layout/Root.d.ts.map +1 -0
- package/lib/typescript/api/layout/Screen.d.ts +32 -0
- package/lib/typescript/api/layout/Screen.d.ts.map +1 -0
- package/lib/typescript/api/layout/SideMenu.d.ts +33 -0
- package/lib/typescript/api/layout/SideMenu.d.ts.map +1 -0
- package/lib/typescript/api/layout/SplitView.d.ts +48 -0
- package/lib/typescript/api/layout/SplitView.d.ts.map +1 -0
- package/lib/typescript/api/layout/Stack.d.ts +21 -0
- package/lib/typescript/api/layout/Stack.d.ts.map +1 -0
- package/lib/typescript/api/layout/Tabs.d.ts +120 -0
- package/lib/typescript/api/layout/Tabs.d.ts.map +1 -0
- package/lib/typescript/api/layout/element.d.ts +52 -0
- package/lib/typescript/api/layout/element.d.ts.map +1 -0
- package/lib/typescript/api/linking/linkPaths.d.ts +31 -0
- package/lib/typescript/api/linking/linkPaths.d.ts.map +1 -0
- package/lib/typescript/api/linking/linking.d.ts +37 -0
- package/lib/typescript/api/linking/linking.d.ts.map +1 -0
- package/lib/typescript/api/linking/pendingLinks.d.ts +8 -0
- package/lib/typescript/api/linking/pendingLinks.d.ts.map +1 -0
- package/lib/typescript/api/linking/types.d.ts +105 -0
- package/lib/typescript/api/linking/types.d.ts.map +1 -0
- package/lib/typescript/api/navigation.d.ts +115 -0
- package/lib/typescript/api/navigation.d.ts.map +1 -0
- package/lib/typescript/api/options/OptionsChain.d.ts +47 -0
- package/lib/typescript/api/options/OptionsChain.d.ts.map +1 -0
- package/lib/typescript/api/options/ScreenOptions.d.ts +32 -0
- package/lib/typescript/api/options/ScreenOptions.d.ts.map +1 -0
- package/lib/typescript/api/options/buttons.d.ts +35 -0
- package/lib/typescript/api/options/buttons.d.ts.map +1 -0
- package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts +20 -0
- package/lib/typescript/api/safeArea/ANNSafeAreaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/api/safeArea/screenInsets.d.ts +20 -0
- package/lib/typescript/api/safeArea/screenInsets.d.ts.map +1 -0
- package/lib/typescript/api/safeArea/screenRegions.d.ts +24 -0
- package/lib/typescript/api/safeArea/screenRegions.d.ts.map +1 -0
- package/lib/typescript/api/screens/ScreenBoundary.d.ts +34 -0
- package/lib/typescript/api/screens/ScreenBoundary.d.ts.map +1 -0
- package/lib/typescript/api/screens/arrangement.d.ts +70 -0
- package/lib/typescript/api/screens/arrangement.d.ts.map +1 -0
- package/lib/typescript/api/screens/defineScreen.d.ts +41 -0
- package/lib/typescript/api/screens/defineScreen.d.ts.map +1 -0
- package/lib/typescript/api/screens/nativeScreenCalls.d.ts +3 -0
- package/lib/typescript/api/screens/nativeScreenCalls.d.ts.map +1 -0
- package/lib/typescript/api/screens/nativeScreens.d.ts +47 -0
- package/lib/typescript/api/screens/nativeScreens.d.ts.map +1 -0
- package/lib/typescript/api/screens/registerScreens.d.ts +61 -0
- package/lib/typescript/api/screens/registerScreens.d.ts.map +1 -0
- package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts +15 -0
- package/lib/typescript/api/slots/ANNSlotNativeComponent.d.ts.map +1 -0
- package/lib/typescript/api/slots/SlotHost.d.ts +8 -0
- package/lib/typescript/api/slots/SlotHost.d.ts.map +1 -0
- package/lib/typescript/api/state/navigationState.d.ts +26 -0
- package/lib/typescript/api/state/navigationState.d.ts.map +1 -0
- package/lib/typescript/api/testIDs.d.ts +12 -0
- package/lib/typescript/api/testIDs.d.ts.map +1 -0
- package/lib/typescript/api/theme/theme.d.ts +70 -0
- package/lib/typescript/api/theme/theme.d.ts.map +1 -0
- package/lib/typescript/api/types.d.ts +64 -0
- package/lib/typescript/api/types.d.ts.map +1 -0
- package/lib/typescript/engine/backListeners.d.ts +8 -0
- package/lib/typescript/engine/backListeners.d.ts.map +1 -0
- package/lib/typescript/engine/buttons.d.ts +11 -0
- package/lib/typescript/engine/buttons.d.ts.map +1 -0
- package/lib/typescript/engine/commands.d.ts +38 -0
- package/lib/typescript/engine/commands.d.ts.map +1 -0
- package/lib/typescript/engine/events.d.ts +17 -0
- package/lib/typescript/engine/events.d.ts.map +1 -0
- package/lib/typescript/engine/ids.d.ts +3 -0
- package/lib/typescript/engine/ids.d.ts.map +1 -0
- package/lib/typescript/engine/launchState.d.ts +25 -0
- package/lib/typescript/engine/launchState.d.ts.map +1 -0
- package/lib/typescript/engine/layout.d.ts +32 -0
- package/lib/typescript/engine/layout.d.ts.map +1 -0
- package/lib/typescript/engine/mergeOptions.d.ts +6 -0
- package/lib/typescript/engine/mergeOptions.d.ts.map +1 -0
- package/lib/typescript/engine/native.d.ts +22 -0
- package/lib/typescript/engine/native.d.ts.map +1 -0
- package/lib/typescript/engine/nativeScreens.d.ts +49 -0
- package/lib/typescript/engine/nativeScreens.d.ts.map +1 -0
- package/lib/typescript/engine/options.d.ts +12 -0
- package/lib/typescript/engine/options.d.ts.map +1 -0
- package/lib/typescript/engine/places.d.ts +57 -0
- package/lib/typescript/engine/places.d.ts.map +1 -0
- package/lib/typescript/engine/props.d.ts +10 -0
- package/lib/typescript/engine/props.d.ts.map +1 -0
- package/lib/typescript/engine/reactMeasures.d.ts +3 -0
- package/lib/typescript/engine/reactMeasures.d.ts.map +1 -0
- package/lib/typescript/engine/rememberedOptions.d.ts +28 -0
- package/lib/typescript/engine/rememberedOptions.d.ts.map +1 -0
- package/lib/typescript/engine/screens.d.ts +90 -0
- package/lib/typescript/engine/screens.d.ts.map +1 -0
- package/lib/typescript/engine/slots.d.ts +71 -0
- package/lib/typescript/engine/slots.d.ts.map +1 -0
- package/lib/typescript/engine/tabs.d.ts +24 -0
- package/lib/typescript/engine/tabs.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/interfaces/ComponentEvents.d.ts +189 -0
- package/lib/typescript/interfaces/ComponentEvents.d.ts.map +1 -0
- package/lib/typescript/interfaces/Events.d.ts +199 -0
- package/lib/typescript/interfaces/Events.d.ts.map +1 -0
- package/lib/typescript/interfaces/Layout.d.ts +150 -0
- package/lib/typescript/interfaces/Layout.d.ts.map +1 -0
- package/lib/typescript/interfaces/Options.d.ts +93 -0
- package/lib/typescript/interfaces/Options.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/animations.d.ts +452 -0
- package/lib/typescript/interfaces/options/animations.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/bottomTabs.d.ts +462 -0
- package/lib/typescript/interfaces/options/bottomTabs.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/buttons.d.ts +331 -0
- package/lib/typescript/interfaces/options/buttons.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/common.d.ts +51 -0
- package/lib/typescript/interfaces/options/common.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/modals.d.ts +202 -0
- package/lib/typescript/interfaces/options/modals.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/preview.d.ts +40 -0
- package/lib/typescript/interfaces/options/preview.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/sideMenu.d.ts +130 -0
- package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/splitView.d.ts +118 -0
- package/lib/typescript/interfaces/options/splitView.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/stack.d.ts +109 -0
- package/lib/typescript/interfaces/options/stack.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/system.d.ts +238 -0
- package/lib/typescript/interfaces/options/system.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/toolbar.d.ts +45 -0
- package/lib/typescript/interfaces/options/toolbar.d.ts.map +1 -0
- package/lib/typescript/interfaces/options/topBar.d.ts +804 -0
- package/lib/typescript/interfaces/options/topBar.d.ts.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/package.json +166 -4
- package/react-native.config.js +22 -0
- package/src/ARCHITECTURE.md +289 -0
- package/src/adapters/NativeANNTurboEventEmitter.ts +15 -0
- package/src/adapters/NativeANNTurboModule.ts +100 -0
- package/src/api/app/AppRegistry.ts +57 -0
- package/src/api/app/activeApp.ts +20 -0
- package/src/api/app/createNavigation.ts +566 -0
- package/src/api/app/roots.ts +40 -0
- package/src/api/app/splash.ts +154 -0
- package/src/api/app/startFailure.tsx +39 -0
- package/src/api/arrangement/arrangementState.ts +98 -0
- package/src/api/commands/commands.ts +371 -0
- package/src/api/commands/errors.ts +99 -0
- package/src/api/commands/presentation.ts +78 -0
- package/src/api/commands/sideMenus.ts +122 -0
- package/src/api/commands/transitions.ts +133 -0
- package/src/api/context/appContext.ts +23 -0
- package/src/api/events/navigationEvents.ts +175 -0
- package/src/api/events/screenLifecycle.ts +27 -0
- package/src/api/events/tabPresses.ts +35 -0
- package/src/api/hinge/hinge.ts +84 -0
- package/src/api/hooks/appHooks.ts +37 -0
- package/src/api/hooks/screenHooks.ts +272 -0
- package/src/api/hooks/useArrangement.ts +26 -0
- package/src/api/hooks/useHinge.ts +26 -0
- package/src/api/hooks/useNavigation.ts +267 -0
- package/src/api/hooks/usePendingLink.ts +11 -0
- package/src/api/hooks/usePreview.ts +111 -0
- package/src/api/hooks/useReservedRegions.ts +26 -0
- package/src/api/hooks/useSafeAreaInsets.ts +23 -0
- package/src/api/index.ts +139 -0
- package/src/api/layout/Root.ts +113 -0
- package/src/api/layout/Screen.ts +55 -0
- package/src/api/layout/SideMenu.ts +87 -0
- package/src/api/layout/SplitView.ts +146 -0
- package/src/api/layout/Stack.ts +48 -0
- package/src/api/layout/Tabs.ts +339 -0
- package/src/api/layout/element.ts +114 -0
- package/src/api/linking/linkPaths.ts +159 -0
- package/src/api/linking/linking.ts +242 -0
- package/src/api/linking/pendingLinks.ts +37 -0
- package/src/api/linking/types.ts +130 -0
- package/src/api/navigation.ts +269 -0
- package/src/api/options/OptionsChain.ts +142 -0
- package/src/api/options/ScreenOptions.ts +81 -0
- package/src/api/options/buttons.ts +43 -0
- package/src/api/safeArea/ANNSafeAreaViewNativeComponent.ts +28 -0
- package/src/api/safeArea/screenInsets.ts +86 -0
- package/src/api/safeArea/screenRegions.ts +99 -0
- package/src/api/screens/ScreenBoundary.tsx +52 -0
- package/src/api/screens/arrangement.ts +106 -0
- package/src/api/screens/defineScreen.ts +57 -0
- package/src/api/screens/nativeScreenCalls.ts +59 -0
- package/src/api/screens/nativeScreens.ts +58 -0
- package/src/api/screens/registerScreens.tsx +364 -0
- package/src/api/slots/ANNSlotNativeComponent.ts +23 -0
- package/src/api/slots/SlotHost.tsx +64 -0
- package/src/api/state/navigationState.ts +95 -0
- package/src/api/testIDs.ts +11 -0
- package/src/api/theme/theme.ts +184 -0
- package/src/api/types.ts +95 -0
- package/src/engine/backListeners.ts +36 -0
- package/src/engine/buttons.ts +91 -0
- package/src/engine/commands.ts +469 -0
- package/src/engine/events.ts +24 -0
- package/src/engine/ids.ts +7 -0
- package/src/engine/launchState.ts +35 -0
- package/src/engine/layout.ts +247 -0
- package/src/engine/mergeOptions.ts +20 -0
- package/src/engine/native.ts +51 -0
- package/src/engine/nativeScreens.ts +263 -0
- package/src/engine/options.ts +165 -0
- package/src/engine/places.ts +205 -0
- package/src/engine/props.ts +45 -0
- package/src/engine/reactMeasures.ts +24 -0
- package/src/engine/rememberedOptions.ts +111 -0
- package/src/engine/screens.tsx +239 -0
- package/src/engine/slots.ts +191 -0
- package/src/engine/tabs.ts +95 -0
- package/src/index.ts +3 -0
- package/src/interfaces/ComponentEvents.ts +214 -0
- package/src/interfaces/Events.ts +227 -0
- package/src/interfaces/Layout.ts +161 -0
- package/src/interfaces/Options.ts +175 -0
- package/src/interfaces/options/animations.ts +480 -0
- package/src/interfaces/options/bottomTabs.ts +481 -0
- package/src/interfaces/options/buttons.ts +364 -0
- package/src/interfaces/options/common.ts +76 -0
- package/src/interfaces/options/modals.ts +217 -0
- package/src/interfaces/options/preview.ts +40 -0
- package/src/interfaces/options/sideMenu.ts +132 -0
- package/src/interfaces/options/splitView.ts +127 -0
- package/src/interfaces/options/stack.ts +110 -0
- package/src/interfaces/options/system.ts +252 -0
- package/src/interfaces/options/toolbar.ts +47 -0
- 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()
|