@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.10
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 +2 -1
- package/CHANGELOG.md +120 -0
- package/README.md +147 -51
- package/android/CLAUDE.md +78 -25
- package/android/CORE.md +49 -25
- package/android/RECIPES.md +13 -6
- package/android/consumer-rules.pro +6 -0
- package/android/src/main/java/dev/apexnative/navigation/NavigationActivity.kt +85 -10
- package/android/src/main/java/dev/apexnative/navigation/NavigationApplication.kt +34 -13
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutChecks.kt +5 -1
- package/android/src/main/java/dev/apexnative/navigation/layout/LayoutNode.kt +6 -2
- package/android/src/main/java/dev/apexnative/navigation/nativescreen/NativeScreenContext.kt +2 -2
- package/android/src/main/java/dev/apexnative/navigation/options/AnimationsOptions.kt +2 -2
- package/android/src/main/java/dev/apexnative/navigation/options/BottomTabOptions.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/options/BottomTabsOptions.kt +13 -8
- package/android/src/main/java/dev/apexnative/navigation/options/ButtonMenuOptions.kt +2 -2
- package/android/src/main/java/dev/apexnative/navigation/options/ButtonOptions.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/options/HardwareBackButtonOptions.kt +9 -1
- package/android/src/main/java/dev/apexnative/navigation/options/LargeTitleOptions.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/options/LayoutAnimation.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/options/OptionKey.kt +18 -0
- package/android/src/main/java/dev/apexnative/navigation/options/OptionPaths.kt +91 -0
- package/android/src/main/java/dev/apexnative/navigation/options/OptionsCache.kt +8 -4
- package/android/src/main/java/dev/apexnative/navigation/options/SheetOptions.kt +7 -4
- package/android/src/main/java/dev/apexnative/navigation/options/SideMenuOptions.kt +6 -1
- package/android/src/main/java/dev/apexnative/navigation/options/StackAnimationOptions.kt +40 -2
- package/android/src/main/java/dev/apexnative/navigation/options/StatusBarOptions.kt +7 -3
- package/android/src/main/java/dev/apexnative/navigation/options/TitleOptions.kt +2 -2
- package/android/src/main/java/dev/apexnative/navigation/options/TopBarAppearanceOptions.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/options/TopBarOptions.kt +16 -7
- package/android/src/main/java/dev/apexnative/navigation/options/UserChoices.kt +159 -0
- package/android/src/main/java/dev/apexnative/navigation/react/CommandAnswer.kt +29 -36
- package/android/src/main/java/dev/apexnative/navigation/react/CommandContract.kt +59 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ContentHeights.kt +95 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ContentMounts.kt +66 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ErrorTexts.kt +75 -60
- package/android/src/main/java/dev/apexnative/navigation/react/Hinge.kt +35 -23
- package/android/src/main/java/dev/apexnative/navigation/react/NavigationTurboModule.kt +12 -7
- package/android/src/main/java/dev/apexnative/navigation/react/OptionsCommands.kt +42 -4
- package/android/src/main/java/dev/apexnative/navigation/react/PendingCalls.kt +48 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ReactView.kt +54 -20
- package/android/src/main/java/dev/apexnative/navigation/react/ReloadCoordinator.kt +7 -6
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenEnvironment.kt +177 -0
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenRegions.kt +19 -50
- package/android/src/main/java/dev/apexnative/navigation/react/ScrollEvents.kt +49 -128
- package/android/src/main/java/dev/apexnative/navigation/react/events/AppearanceDispatcher.kt +50 -81
- package/android/src/main/java/dev/apexnative/navigation/react/events/EventContract.kt +226 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/EventEmitter.kt +135 -94
- package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationState.kt +154 -0
- package/android/src/main/java/dev/apexnative/navigation/react/events/ScreenAppearance.kt +0 -6
- package/android/src/main/java/dev/apexnative/navigation/safearea/SafeAreaView.kt +12 -10
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotContainers.kt +10 -7
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotScreenView.kt +39 -19
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotView.kt +16 -4
- package/android/src/main/java/dev/apexnative/navigation/slots/SlotViews.kt +40 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ImageKey.kt +66 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/ImageLoader.kt +7 -89
- package/android/src/main/java/dev/apexnative/navigation/utils/ImageRequests.kt +76 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/MaterialTheme.kt +5 -6
- package/android/src/main/java/dev/apexnative/navigation/utils/OptionImages.kt +262 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/SystemAnimations.kt +36 -0
- package/android/src/main/java/dev/apexnative/navigation/utils/UiUtils.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/utils/ViewController.kt +3 -1
- package/android/src/main/java/dev/apexnative/navigation/utils/ViewExtensions.kt +0 -13
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementController.kt +10 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/SecondaryScreenPresenter.kt +13 -5
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/AppliedTabCalls.kt +49 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsCollapseBehavior.kt +5 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsController.kt +108 -34
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/BottomTabsPresenter.kt +25 -24
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowGeometry.kt +22 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabItems.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/TabsRoom.kt +0 -5
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentPresenter.kt +28 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ComponentViewController.kt +12 -9
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ContentReadiness.kt +2 -2
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/RenderWait.kt +27 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenFrame.kt +1 -1
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenReadiness.kt +103 -56
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/component/ScreenSafeArea.kt +29 -11
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/externalcomponent/ExternalComponentViewController.kt +2 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalAnimations.kt +22 -24
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalCoordinator.kt +109 -21
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalRecord.kt +21 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalSheet.kt +476 -73
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/ModalViews.kt +57 -25
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetBack.kt +42 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/modal/SheetStops.kt +83 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackCheck.kt +50 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/BackCallbackState.kt +49 -14
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/Navigator.kt +71 -12
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/navigator/RootCoordinator.kt +37 -11
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/overlay/OverlayCoordinator.kt +10 -8
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/Capabilities.kt +11 -4
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ContainerBackground.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/parent/ParentController.kt +6 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuController.kt +42 -9
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuMotion.kt +19 -8
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuPresenter.kt +16 -7
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/sidemenu/SideMenuRules.kt +43 -4
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitPanes.kt +23 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/splitview/SplitViewController.kt +77 -17
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/BackPreview.kt +315 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/PreparedFrame.kt +3 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackCommands.kt +30 -20
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt +216 -18
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt +26 -1
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackQueue.kt +149 -41
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackTransitions.kt +26 -8
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackViews.kt +115 -6
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabMotion.kt +142 -0
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/fab/FabPresenter.kt +222 -48
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/ScreenSearch.kt +3 -5
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/search/StackSearchPresenter.kt +30 -34
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarComponents.kt +5 -51
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/BarRowTransition.kt +3 -2
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/ButtonPlaces.kt +11 -5
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/MenuChecks.kt +13 -56
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarPresenter.kt +219 -54
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/topbar/TopBarVisibility.kt +9 -2
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ScrollEventListener.kt +6 -9
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/viewcontroller/ViewController.kt +75 -21
- package/android/src/main/java/dev/apexnative/navigation/views/animations/AnimationLayer.kt +73 -0
- package/android/src/main/java/dev/apexnative/navigation/views/animations/Curves.kt +29 -11
- package/android/src/main/java/dev/apexnative/navigation/views/animations/ValueInterpolation.kt +14 -0
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabs.kt +9 -7
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/BottomTabsLayout.kt +61 -2
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomBottomTabItemView.kt +0 -5
- package/android/src/main/java/dev/apexnative/navigation/views/bottomtabs/CustomTabRow.kt +72 -10
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStep.kt +31 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementTransitions.kt +143 -135
- package/android/src/main/java/dev/apexnative/navigation/views/element/TargetsWait.kt +13 -5
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionLayer.kt +37 -112
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionTargets.kt +9 -6
- package/android/src/main/java/dev/apexnative/navigation/views/element/TransitionViews.kt +100 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ElementPictures.kt +112 -4
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/FlightGeometry.kt +346 -36
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMorph.kt +199 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/SharedAnimatorFactory.kt +56 -41
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextMorph.kt +176 -0
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewMorph.kt +108 -0
- package/android/src/main/java/dev/apexnative/navigation/views/sidemenu/SideMenuView.kt +12 -3
- package/android/src/main/java/dev/apexnative/navigation/views/stack/ScreenEdge.kt +45 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/StackLayout.kt +140 -1
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/Fab.kt +14 -10
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabCopy.kt +85 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/fab/FabMenu.kt +13 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TitleBar.kt +5 -17
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/TopBar.kt +73 -34
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonComponentCell.kt +6 -6
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarButtonView.kt +113 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/BarMenu.kt +219 -0
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonBar.kt +125 -178
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonMenus.kt +34 -64
- package/android/src/main/java/dev/apexnative/navigation/views/stack/topbar/titlebar/ButtonRow.kt +216 -0
- package/android/src/main/jni/ANNContentHeights.cpp +82 -0
- package/android/src/main/res/drawable/apex_navigation_ic_arrow_right.xml +14 -0
- package/android/src/main/res/layout/apex_navigation_menu_header.xml +19 -0
- package/android/src/main/res/layout/apex_navigation_menu_item.xml +68 -0
- package/android/src/main/res/values/styles.xml +1 -1
- package/android/src/main/res/values-night/styles.xml +1 -1
- package/cli/app.js +1 -1
- package/cli/doctor/checks/app.js +77 -14
- package/cli/doctor/checks/splash.js +4 -22
- package/cli/migrate/native.js +18 -0
- package/cli/project.js +10 -2
- package/cli/setup/index.js +18 -0
- package/cli/setup/source.js +2 -1
- package/cli/setup/steps/appDelegate.js +66 -11
- package/cli/setup/steps/mainApplication.js +134 -19
- package/cli/setup/steps/metro.js +46 -0
- package/cli/setup/steps/sceneDelegate.js +108 -0
- package/cli/splash/index.js +3 -1
- package/docs-md/architecture/native-screens.md +4 -0
- package/docs-md/architecture/theme-and-context.md +131 -12
- package/docs-md/architecture/transitions.md +58 -12
- package/docs-md/containers/modals.md +8 -4
- package/docs-md/containers/overlays.md +3 -1
- package/docs-md/containers/side-menu.md +19 -2
- package/docs-md/containers/tabs.md +5 -1
- package/docs-md/flows/bottom-sheets.md +4 -2
- package/docs-md/flows/forms-in-a-modal.md +1 -1
- package/docs-md/fundamentals/screens-and-props.md +9 -1
- package/docs-md/fundamentals/starting-the-app.md +1 -1
- package/docs-md/guides/cli.md +4 -3
- package/docs-md/guides/deep-links.md +15 -33
- package/docs-md/help/glossary.md +4 -4
- package/docs-md/help/troubleshooting.md +44 -6
- package/docs-md/index.json +57 -1
- package/docs-md/migration/from-expo-router.md +1 -1
- package/docs-md/migration/from-react-native-navigation.md +9 -3
- package/docs-md/migration/from-react-navigation.md +2 -2
- package/docs-md/screen-ui/back-and-gestures.md +46 -2
- package/docs-md/screen-ui/bar-buttons.md +5 -5
- package/docs-md/screen-ui/search.md +1 -1
- package/docs-md/screen-ui/system-ui.md +17 -12
- package/docs-md/screen-ui/toolbar-and-fab.md +4 -2
- package/docs-md/screen-ui/top-bar.md +8 -4
- package/docs-md/start/installation.md +21 -3
- package/ios/Animations/ANNFrameDriver.h +55 -15
- package/ios/Animations/ANNFrameDriver.mm +216 -60
- package/ios/Animations/ANNTransitionAnimator.h +26 -5
- package/ios/Animations/ANNTransitionAnimator.mm +61 -13
- package/ios/Animations/ANNTransitionPlan.h +2 -2
- package/ios/Animations/ANNTransitionPlan.mm +10 -0
- package/ios/Animations/ANNTransitionWait.mm +6 -7
- package/ios/Animations/Elements/ANNElementFinder.h +57 -0
- package/ios/Animations/Elements/ANNElementFinder.mm +174 -2
- package/ios/Animations/Elements/ANNElementTransition.h +10 -8
- package/ios/Animations/Elements/ANNElementTransition.mm +19 -21
- package/ios/Animations/Elements/ANNSharedElementFlight.h +16 -11
- package/ios/Animations/Elements/ANNSharedElementFlight.mm +308 -69
- package/ios/Animations/Interpolators/ANNInterpolate.h +2 -30
- package/ios/Animations/Interpolators/ANNTransformParts.h +48 -0
- package/ios/Animations/Interpolators/ANNTransformParts.mm +507 -0
- package/ios/Animations/Interpolators/ANNViewTracks.h +9 -6
- package/ios/Animations/Interpolators/ANNViewTracks.mm +100 -30
- package/ios/CLAUDE.md +60 -24
- package/ios/CORE.md +44 -34
- package/ios/Contract/ANNCommandAnswer.h +13 -5
- package/ios/Contract/ANNCommandAnswer.mm +40 -32
- package/ios/Contract/ANNCommandContract.h +15 -0
- package/ios/Contract/ANNCommandContract.mm +78 -0
- package/ios/Contract/ANNCommandRunner.h +10 -9
- package/ios/Contract/ANNCommandRunner.mm +22 -28
- package/ios/Contract/ANNErrorTexts.h +6 -2
- package/ios/Contract/ANNErrorTexts.mm +18 -10
- package/ios/Contract/ANNLayoutNode.h +3 -3
- package/ios/Contract/ANNLayoutReader.h +3 -3
- package/ios/Core/ANNAppDelegate.mm +0 -2
- package/ios/Core/ANNAppearanceDispatcher.h +5 -4
- package/ios/Core/ANNAppearanceDispatcher.mm +12 -1
- package/ios/Core/ANNDeepLinkQueue.h +22 -2
- package/ios/Core/ANNDeepLinkQueue.mm +121 -14
- package/ios/Core/ANNErrorHandler.h +9 -4
- package/ios/Core/ANNErrorHandler.mm +20 -2
- package/ios/Core/ANNEventContract.h +246 -0
- package/ios/Core/ANNEventContract.mm +225 -0
- package/ios/Core/ANNEventEmitter.h +6 -2
- package/ios/Core/ANNEventEmitter.mm +117 -80
- package/ios/Core/ANNHinge.h +6 -0
- package/ios/Core/ANNHinge.mm +15 -4
- package/ios/Core/ANNJavaScriptCalls.h +33 -0
- package/ios/Core/ANNJavaScriptCalls.mm +52 -0
- package/ios/Core/ANNLayoutProtocol.h +5 -5
- package/ios/Core/ANNNavigationState.h +7 -5
- package/ios/Core/ANNNavigationState.mm +8 -7
- package/ios/Core/ANNNodeHelper.h +32 -12
- package/ios/Core/ANNNodeHelper.mm +100 -3
- package/ios/Core/ANNParking.h +5 -4
- package/ios/Core/ANNReloadCoordinator.mm +5 -12
- package/ios/Core/ANNRenderWait.h +20 -6
- package/ios/Core/ANNRenderWait.mm +143 -56
- package/ios/Core/ANNSceneDelegate.mm +25 -15
- package/ios/Core/ANNSystemUI.h +3 -2
- package/ios/Core/ANNSystemUI.mm +7 -0
- package/ios/Core/ANNUtils.h +7 -0
- package/ios/Core/ANNUtils.mm +10 -0
- package/ios/Core/ApexNavigation+Internal.h +1 -1
- package/ios/Core/ApexNavigation.mm +7 -6
- package/ios/Core/UIViewController+LayoutProtocol.h +9 -2
- package/ios/Core/UIViewController+LayoutProtocol.mm +8 -0
- package/ios/Layouts/Arrangement/ANNArrangementState.h +2 -17
- package/ios/Layouts/Arrangement/ANNArrangementState.mm +0 -38
- package/ios/Layouts/Arrangement/ANNArrangementViewController.mm +10 -8
- package/ios/Layouts/Modal/ANNModalCoordinator.h +1 -1
- package/ios/Layouts/Modal/ANNModalCoordinator.mm +57 -16
- package/ios/Layouts/Modal/ANNModalPresentation.h +8 -5
- package/ios/Layouts/Modal/ANNModalPresentation.mm +12 -12
- package/ios/Layouts/Modal/ANNSheetPresenter.mm +83 -1
- package/ios/Layouts/Overlay/ANNOverlayCoordinator.mm +2 -8
- package/ios/Layouts/Root/ANNRootCoordinator.mm +58 -19
- package/ios/Layouts/Root/ANNSplashViewController.h +5 -3
- package/ios/Layouts/Root/ANNSplashViewController.mm +147 -0
- package/ios/Layouts/Screen/ANNComponentPresenter.h +11 -3
- package/ios/Layouts/Screen/ANNComponentPresenter.mm +34 -6
- package/ios/Layouts/Screen/ANNComponentViewController.h +15 -13
- package/ios/Layouts/Screen/ANNComponentViewController.mm +130 -75
- package/ios/Layouts/Screen/ANNNativeScreenContext.mm +7 -5
- package/ios/Layouts/Screen/ANNPreviewInteraction.h +7 -4
- package/ios/Layouts/Screen/ANNPreviewInteraction.mm +72 -10
- package/ios/Layouts/Screen/ANNScreenEnvironment.h +63 -0
- package/ios/Layouts/Screen/ANNScreenEnvironment.mm +181 -0
- package/ios/Layouts/Screen/ANNScreenPlace.h +53 -0
- package/ios/Layouts/Screen/ANNScreenPlace.mm +205 -0
- package/ios/Layouts/Screen/ANNScreenRegions.h +3 -18
- package/ios/Layouts/Screen/ANNScreenRegions.mm +9 -44
- package/ios/Layouts/Screen/ANNScreenSafeArea.h +4 -9
- package/ios/Layouts/Screen/ANNScreenSafeArea.mm +14 -16
- package/ios/Layouts/Screen/ANNScreenSettling.h +32 -0
- package/ios/Layouts/Screen/ANNScreenSettling.mm +137 -0
- package/ios/Layouts/SideMenu/ANNSideMenuTypes.h +8 -0
- package/ios/Layouts/SideMenu/ANNSideMenuViewController.mm +83 -14
- package/ios/Layouts/SplitView/ANNSplitViewCommands.h +3 -2
- package/ios/Layouts/SplitView/ANNSplitViewCommands.mm +105 -39
- package/ios/Layouts/SplitView/ANNSplitViewController.mm +7 -8
- package/ios/Layouts/Stack/ANNPreviewPush.h +7 -6
- package/ios/Layouts/Stack/ANNPreviewPush.mm +142 -27
- package/ios/Layouts/Stack/ANNStackAnimatingDelegate.h +11 -2
- package/ios/Layouts/Stack/ANNStackAnimatingDelegate.mm +14 -7
- package/ios/Layouts/Stack/ANNStackCommands.mm +1 -0
- package/ios/Layouts/Stack/ANNStackController.h +8 -0
- package/ios/Layouts/Stack/ANNStackController.mm +184 -16
- package/ios/Layouts/Stack/ANNStackQueue.h +5 -2
- package/ios/Layouts/Stack/ANNStackQueue.mm +56 -43
- package/ios/Layouts/Stack/ANNSwipePopInteraction.h +26 -0
- package/ios/Layouts/Stack/ANNSwipePopInteraction.mm +185 -0
- package/ios/Layouts/Stack/InteractivePopGestureDelegate.mm +28 -4
- package/ios/Layouts/Stack/UINavigationController+ANNCommands.h +4 -2
- package/ios/Layouts/Stack/UINavigationController+ANNCommands.mm +2 -3
- package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.h +4 -0
- package/ios/Layouts/Tabs/ANNBottomTabItemBuilder.mm +11 -0
- package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.h +12 -1
- package/ios/Layouts/Tabs/ANNBottomTabsAccessoryView.mm +23 -0
- package/ios/Layouts/Tabs/ANNBottomTabsController.h +3 -0
- package/ios/Layouts/Tabs/ANNBottomTabsController.mm +237 -57
- package/ios/Layouts/Tabs/ANNBottomTabsCustomRow.mm +8 -3
- package/ios/Layouts/Tabs/ANNBottomTabsPresenter.h +6 -2
- package/ios/Layouts/Tabs/ANNBottomTabsPresenter.mm +232 -43
- package/ios/Layouts/Tabs/ANNTabsDesign.h +6 -5
- package/ios/Layouts/Tabs/ANNTabsDesign.mm +9 -1
- package/ios/Layouts/Tabs/UITabBar+utils.h +5 -5
- package/ios/Layouts/Tabs/UITabBar+utils.mm +32 -13
- package/ios/Options/ANNAnimationOptions.h +2 -1
- package/ios/Options/ANNAnimationOptions.mm +1 -1
- package/ios/Options/ANNBottomTabsOptions.h +2 -0
- package/ios/Options/ANNBottomTabsOptions.mm +1 -0
- package/ios/Options/ANNOptions.h +25 -0
- package/ios/Options/ANNOptions.mm +157 -1
- package/ios/Options/ANNOptionsCache.h +7 -6
- package/ios/Options/ANNOptionsReader.mm +108 -0
- package/ios/Options/ANNSearchBarOptions.h +4 -3
- package/ios/Options/ANNSheetOptions.h +4 -1
- package/ios/Options/ANNSideMenuOptions.h +2 -0
- package/ios/Options/ANNSideMenuOptions.mm +2 -0
- package/ios/Options/ANNStackPopAnimationOptions.h +13 -0
- package/ios/Options/ANNStackPopAnimationOptions.mm +11 -0
- package/ios/Options/ANNUserChoice.h +57 -0
- package/ios/Options/ANNUserChoice.mm +44 -0
- package/ios/Options/Params/ANNImageSource.h +61 -0
- package/ios/Options/Params/ANNImageSource.mm +101 -0
- package/ios/Options/Params/ANNOptionImages.h +37 -0
- package/ios/Options/Params/ANNOptionImages.mm +284 -0
- package/ios/Options/Params/ANNParam.h +15 -0
- package/ios/Options/Params/ANNParam.mm +61 -0
- package/ios/Options/Params/Color.h +3 -0
- package/ios/Options/Params/Color.mm +21 -0
- package/ios/Options/Params/ColorParser.h +4 -3
- package/ios/Options/Params/ColorParser.mm +22 -4
- package/ios/Options/Params/Image.h +15 -2
- package/ios/Options/Params/Image.mm +35 -2
- package/ios/Options/Params/ImageParser.h +5 -5
- package/ios/Options/Params/ImageParser.mm +28 -46
- package/ios/Public/ApexNavigation/ANNSceneDelegate.h +3 -0
- package/ios/Public/ApexNavigation/ApexNavigation.h +1 -1
- package/ios/RECIPES.md +13 -6
- package/ios/React/ANNReactView.mm +6 -25
- package/ios/React/ANNSafeAreaViewComponentView.mm +28 -17
- package/ios/React/ANNSurfaceHostingView.h +14 -0
- package/ios/React/ANNSurfaceHostingView.mm +144 -1
- package/ios/React/Slots/ANNSlotComponentView.mm +24 -17
- package/ios/React/Slots/ANNSlotContainers.h +14 -6
- package/ios/React/Slots/ANNSlotContainers.mm +75 -2
- package/ios/React/Slots/ANNSlotHost.mm +1 -3
- package/ios/React/Slots/ANNSlotScreenView.mm +8 -2
- package/ios/TopBar/ANNBackButtonPresenter.mm +6 -5
- package/ios/TopBar/ANNBarAppearance.h +2 -1
- package/ios/TopBar/ANNBarAppearance.mm +111 -30
- package/ios/TopBar/ANNBarBackgroundComponent.mm +16 -0
- package/ios/TopBar/ANNBarButtonComponentView.h +4 -4
- package/ios/TopBar/ANNBarButtonComponentView.mm +1 -1
- package/ios/TopBar/ANNBarButtons.h +14 -8
- package/ios/TopBar/ANNBarButtons.mm +397 -80
- package/ios/TopBar/ANNIconButtonImage.h +1 -0
- package/ios/TopBar/ANNIconButtonImage.mm +34 -1
- package/ios/TopBar/ANNLargeTitlePresenter.h +13 -0
- package/ios/TopBar/ANNLargeTitlePresenter.mm +50 -7
- package/ios/TopBar/ANNMainList.h +3 -0
- package/ios/TopBar/ANNMainList.mm +4 -0
- package/ios/TopBar/ANNScrollEdgeEffects.h +22 -6
- package/ios/TopBar/ANNScrollEdgeEffects.mm +123 -16
- package/ios/TopBar/ANNSearchPresenter.mm +172 -21
- package/ios/TopBar/ANNSearchResultsViewController.mm +29 -6
- package/ios/TopBar/ANNTopBarPresenter.h +8 -2
- package/ios/TopBar/ANNTopBarPresenter.mm +155 -33
- package/ios/TurboModules/ANNTurboEventEmitter.mm +4 -35
- package/ios/TurboModules/ANNTurboModule.mm +104 -33
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.cpp +20 -0
- package/ios/cpp/react/renderer/components/ApexNavigationSpec/ANNSlotState.h +5 -14
- package/lib/module/ARCHITECTURE.md +40 -27
- package/lib/module/adapters/NativeANNTurboModule.js.map +1 -1
- package/lib/module/api/app/AppRegistry.js +14 -2
- package/lib/module/api/app/AppRegistry.js.map +1 -1
- package/lib/module/api/app/createNavigation.js +190 -66
- package/lib/module/api/app/createNavigation.js.map +1 -1
- package/lib/module/api/commands/commands.js +54 -6
- package/lib/module/api/commands/commands.js.map +1 -1
- package/lib/module/api/events/navigationEvents.js +6 -2
- package/lib/module/api/events/navigationEvents.js.map +1 -1
- package/lib/module/api/hooks/useNavigation.js +8 -3
- package/lib/module/api/hooks/useNavigation.js.map +1 -1
- package/lib/module/api/hooks/useSafeAreaInsets.js +4 -3
- package/lib/module/api/hooks/useSafeAreaInsets.js.map +1 -1
- package/lib/module/api/linking/dispatchedLinks.js +23 -0
- package/lib/module/api/linking/dispatchedLinks.js.map +1 -0
- package/lib/module/api/linking/linking.js +11 -0
- package/lib/module/api/linking/linking.js.map +1 -1
- package/lib/module/api/navigation.js.map +1 -1
- package/lib/module/api/options/OptionsChain.js +2 -2
- package/lib/module/api/screens/defineScreen.js +45 -3
- package/lib/module/api/screens/defineScreen.js.map +1 -1
- package/lib/module/api/screens/nativeScreens.js +31 -6
- package/lib/module/api/screens/nativeScreens.js.map +1 -1
- package/lib/module/api/screens/registerScreens.js +193 -35
- package/lib/module/api/screens/registerScreens.js.map +1 -1
- package/lib/module/api/theme/theme.js +5 -0
- package/lib/module/api/theme/theme.js.map +1 -1
- package/lib/module/engine/commands.js +51 -9
- package/lib/module/engine/commands.js.map +1 -1
- package/lib/module/engine/layout.js +20 -11
- package/lib/module/engine/layout.js.map +1 -1
- package/lib/module/engine/nativeScreens.js +9 -0
- package/lib/module/engine/nativeScreens.js.map +1 -1
- package/lib/module/engine/options.js +49 -15
- package/lib/module/engine/options.js.map +1 -1
- package/lib/module/engine/optionsChange.js +102 -0
- package/lib/module/engine/optionsChange.js.map +1 -0
- package/lib/module/engine/places.js +52 -7
- package/lib/module/engine/places.js.map +1 -1
- package/lib/module/engine/props.js +30 -1
- package/lib/module/engine/props.js.map +1 -1
- package/lib/module/engine/refresh.js +85 -0
- package/lib/module/engine/refresh.js.map +1 -0
- package/lib/module/engine/rememberedOptions.js +61 -1
- package/lib/module/engine/rememberedOptions.js.map +1 -1
- package/lib/module/engine/screens.js +77 -16
- package/lib/module/engine/screens.js.map +1 -1
- package/lib/module/interfaces/contract/commands.json +101 -0
- package/lib/module/interfaces/contract/errors.json +275 -0
- package/lib/typescript/adapters/NativeANNTurboModule.d.ts +12 -2
- package/lib/typescript/adapters/NativeANNTurboModule.d.ts.map +1 -1
- package/lib/typescript/api/app/AppRegistry.d.ts.map +1 -1
- package/lib/typescript/api/app/createNavigation.d.ts +8 -3
- package/lib/typescript/api/app/createNavigation.d.ts.map +1 -1
- package/lib/typescript/api/commands/commands.d.ts.map +1 -1
- package/lib/typescript/api/commands/presentation.d.ts +4 -3
- package/lib/typescript/api/commands/presentation.d.ts.map +1 -1
- package/lib/typescript/api/events/navigationEvents.d.ts +3 -3
- package/lib/typescript/api/events/navigationEvents.d.ts.map +1 -1
- package/lib/typescript/api/hooks/useNavigation.d.ts +1 -1
- package/lib/typescript/api/hooks/useNavigation.d.ts.map +1 -1
- package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts +4 -3
- package/lib/typescript/api/hooks/useSafeAreaInsets.d.ts.map +1 -1
- package/lib/typescript/api/index.d.ts +1 -1
- package/lib/typescript/api/index.d.ts.map +1 -1
- package/lib/typescript/api/linking/dispatchedLinks.d.ts +7 -0
- package/lib/typescript/api/linking/dispatchedLinks.d.ts.map +1 -0
- package/lib/typescript/api/linking/linking.d.ts +8 -0
- package/lib/typescript/api/linking/linking.d.ts.map +1 -1
- package/lib/typescript/api/navigation.d.ts +4 -1
- package/lib/typescript/api/navigation.d.ts.map +1 -1
- package/lib/typescript/api/options/OptionsChain.d.ts +2 -2
- package/lib/typescript/api/screens/defineScreen.d.ts +23 -4
- package/lib/typescript/api/screens/defineScreen.d.ts.map +1 -1
- package/lib/typescript/api/screens/nativeScreens.d.ts +8 -1
- package/lib/typescript/api/screens/nativeScreens.d.ts.map +1 -1
- package/lib/typescript/api/screens/registerScreens.d.ts.map +1 -1
- package/lib/typescript/api/theme/theme.d.ts +2 -0
- package/lib/typescript/api/theme/theme.d.ts.map +1 -1
- package/lib/typescript/engine/commands.d.ts +5 -0
- package/lib/typescript/engine/commands.d.ts.map +1 -1
- package/lib/typescript/engine/layout.d.ts.map +1 -1
- package/lib/typescript/engine/nativeScreens.d.ts +5 -0
- package/lib/typescript/engine/nativeScreens.d.ts.map +1 -1
- package/lib/typescript/engine/options.d.ts +5 -2
- package/lib/typescript/engine/options.d.ts.map +1 -1
- package/lib/typescript/engine/optionsChange.d.ts +28 -0
- package/lib/typescript/engine/optionsChange.d.ts.map +1 -0
- package/lib/typescript/engine/places.d.ts +7 -2
- package/lib/typescript/engine/places.d.ts.map +1 -1
- package/lib/typescript/engine/props.d.ts +8 -1
- package/lib/typescript/engine/props.d.ts.map +1 -1
- package/lib/typescript/engine/refresh.d.ts +35 -0
- package/lib/typescript/engine/refresh.d.ts.map +1 -0
- package/lib/typescript/engine/rememberedOptions.d.ts +13 -0
- package/lib/typescript/engine/rememberedOptions.d.ts.map +1 -1
- package/lib/typescript/engine/screens.d.ts +27 -6
- package/lib/typescript/engine/screens.d.ts.map +1 -1
- package/lib/typescript/interfaces/ComponentEvents.d.ts +4 -4
- package/lib/typescript/interfaces/ComponentEvents.d.ts.map +1 -1
- package/lib/typescript/interfaces/Events.d.ts +28 -10
- package/lib/typescript/interfaces/Events.d.ts.map +1 -1
- package/lib/typescript/interfaces/Options.d.ts +1 -1
- package/lib/typescript/interfaces/Options.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/animations.d.ts +80 -22
- package/lib/typescript/interfaces/options/animations.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/bottomTabs.d.ts +21 -7
- package/lib/typescript/interfaces/options/bottomTabs.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/buttons.d.ts +23 -15
- package/lib/typescript/interfaces/options/buttons.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/modals.d.ts +34 -26
- package/lib/typescript/interfaces/options/modals.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/sideMenu.d.ts +23 -6
- package/lib/typescript/interfaces/options/sideMenu.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/stack.d.ts +17 -3
- package/lib/typescript/interfaces/options/stack.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/system.d.ts +18 -11
- package/lib/typescript/interfaces/options/system.d.ts.map +1 -1
- package/lib/typescript/interfaces/options/toolbar.d.ts +2 -2
- package/lib/typescript/interfaces/options/topBar.d.ts +68 -38
- package/lib/typescript/interfaces/options/topBar.d.ts.map +1 -1
- package/metro/acceptPlugin.js +57 -0
- package/metro/babelTransformer.js +45 -0
- package/metro/index.js +36 -0
- package/package.json +3 -1
- package/src/ARCHITECTURE.md +40 -27
- package/src/adapters/NativeANNTurboModule.ts +12 -2
- package/src/api/app/AppRegistry.ts +16 -2
- package/src/api/app/createNavigation.ts +203 -69
- package/src/api/commands/commands.ts +48 -7
- package/src/api/commands/presentation.ts +4 -3
- package/src/api/events/navigationEvents.ts +10 -4
- package/src/api/hooks/useNavigation.ts +9 -4
- package/src/api/hooks/useSafeAreaInsets.ts +4 -3
- package/src/api/index.ts +1 -0
- package/src/api/linking/dispatchedLinks.ts +18 -0
- package/src/api/linking/linking.ts +22 -1
- package/src/api/navigation.ts +4 -1
- package/src/api/options/OptionsChain.ts +2 -2
- package/src/api/screens/defineScreen.ts +49 -5
- package/src/api/screens/nativeScreens.ts +40 -4
- package/src/api/screens/registerScreens.tsx +185 -42
- package/src/api/theme/theme.ts +5 -0
- package/src/engine/commands.ts +70 -13
- package/src/engine/layout.ts +27 -11
- package/src/engine/nativeScreens.ts +10 -1
- package/src/engine/options.ts +45 -19
- package/src/engine/optionsChange.ts +107 -0
- package/src/engine/places.ts +65 -7
- package/src/engine/props.ts +30 -1
- package/src/engine/refresh.ts +97 -0
- package/src/engine/rememberedOptions.ts +74 -1
- package/src/engine/screens.tsx +76 -21
- package/src/interfaces/ComponentEvents.ts +4 -4
- package/src/interfaces/Events.ts +29 -10
- package/src/interfaces/Options.ts +1 -0
- package/src/interfaces/contract/commands.json +101 -0
- package/src/interfaces/contract/errors.json +275 -0
- package/src/interfaces/options/animations.ts +81 -22
- package/src/interfaces/options/bottomTabs.ts +21 -7
- package/src/interfaces/options/buttons.ts +23 -15
- package/src/interfaces/options/modals.ts +34 -26
- package/src/interfaces/options/sideMenu.ts +24 -6
- package/src/interfaces/options/stack.ts +17 -3
- package/src/interfaces/options/system.ts +18 -11
- package/src/interfaces/options/toolbar.ts +2 -2
- package/src/interfaces/options/topBar.ts +68 -38
- package/android/src/main/java/dev/apexnative/navigation/react/ArrangementStates.kt +0 -41
- package/android/src/main/java/dev/apexnative/navigation/react/ScreenInsets.kt +0 -69
- package/android/src/main/java/dev/apexnative/navigation/react/events/NavigationStateReporter.kt +0 -62
- package/android/src/main/java/dev/apexnative/navigation/react/events/StateHold.kt +0 -62
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/bottomtabs/CustomTabRowPlacer.kt +0 -223
- package/android/src/main/java/dev/apexnative/navigation/views/element/ElementStub.kt +0 -31
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ImageMatrixAnimator.kt +0 -138
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PlainViewAnimator.kt +0 -88
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/PropertyAnimatorCreator.kt +0 -33
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ReactImageAnimator.kt +0 -66
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/TextChangeAnimator.kt +0 -179
- package/android/src/main/java/dev/apexnative/navigation/views/element/animators/ViewChangeAnimator.kt +0 -139
- package/ios/Layouts/Screen/ANNScreenInsets.h +0 -30
- package/ios/Layouts/Screen/ANNScreenInsets.mm +0 -68
- package/ios/Layouts/Tabs/ANNTabsPreloadWindow.h +0 -27
- package/ios/Layouts/Tabs/ANNTabsPreloadWindow.mm +0 -55
package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackController.kt
CHANGED
|
@@ -2,6 +2,7 @@ package dev.apexnative.navigation.viewcontrollers.stack
|
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.util.Log
|
|
5
|
+
import android.view.View
|
|
5
6
|
import dev.apexnative.navigation.NavigationActivity
|
|
6
7
|
import dev.apexnative.navigation.options.AnimationsOptions
|
|
7
8
|
import dev.apexnative.navigation.options.BottomTabsEnterExitAnimationOptions
|
|
@@ -11,6 +12,7 @@ import dev.apexnative.navigation.options.Options
|
|
|
11
12
|
import dev.apexnative.navigation.options.TopBarOptions
|
|
12
13
|
import dev.apexnative.navigation.react.CommandListener
|
|
13
14
|
import dev.apexnative.navigation.react.ErrorTexts
|
|
15
|
+
import dev.apexnative.navigation.react.PendingCalls
|
|
14
16
|
import dev.apexnative.navigation.react.events.AppearanceDispatcher
|
|
15
17
|
import dev.apexnative.navigation.utils.NavigationLog
|
|
16
18
|
import dev.apexnative.navigation.utils.UiThread
|
|
@@ -20,8 +22,8 @@ import dev.apexnative.navigation.viewcontrollers.child.ChildControllersRegistry
|
|
|
20
22
|
import dev.apexnative.navigation.viewcontrollers.component.ComponentViewController
|
|
21
23
|
import dev.apexnative.navigation.viewcontrollers.component.ContentReadiness
|
|
22
24
|
import dev.apexnative.navigation.viewcontrollers.component.Readiness
|
|
25
|
+
import dev.apexnative.navigation.viewcontrollers.component.RenderWait
|
|
23
26
|
import dev.apexnative.navigation.viewcontrollers.component.RestPlace
|
|
24
|
-
import dev.apexnative.navigation.viewcontrollers.component.ScreenContentFactory
|
|
25
27
|
import dev.apexnative.navigation.viewcontrollers.navigator.BackCallbackState
|
|
26
28
|
import dev.apexnative.navigation.viewcontrollers.navigator.Navigator
|
|
27
29
|
import dev.apexnative.navigation.viewcontrollers.parent.ContainerBackground
|
|
@@ -29,12 +31,14 @@ import dev.apexnative.navigation.viewcontrollers.parent.OptionsScreen
|
|
|
29
31
|
import dev.apexnative.navigation.viewcontrollers.parent.ParentController
|
|
30
32
|
import dev.apexnative.navigation.viewcontrollers.parent.ReturnsScreenFromColumn
|
|
31
33
|
import dev.apexnative.navigation.viewcontrollers.parent.nodeWith
|
|
34
|
+
import dev.apexnative.navigation.viewcontrollers.stack.fab.FabMotion
|
|
32
35
|
import dev.apexnative.navigation.viewcontrollers.stack.fab.FabPresenter
|
|
33
36
|
import dev.apexnative.navigation.viewcontrollers.stack.topbar.LargeTitleCollapse
|
|
34
37
|
import dev.apexnative.navigation.viewcontrollers.stack.topbar.TopBarPresenter
|
|
35
38
|
import dev.apexnative.navigation.viewcontrollers.stack.topbar.TopBarRoom
|
|
36
39
|
import dev.apexnative.navigation.viewcontrollers.viewcontroller.Presenter
|
|
37
40
|
import dev.apexnative.navigation.viewcontrollers.viewcontroller.ViewController
|
|
41
|
+
import dev.apexnative.navigation.views.animations.AnimationRules
|
|
38
42
|
import dev.apexnative.navigation.views.component.ComponentLayout
|
|
39
43
|
import dev.apexnative.navigation.views.stack.StackLayout
|
|
40
44
|
import dev.apexnative.navigation.views.stack.topbar.LargeTitleView
|
|
@@ -79,26 +83,34 @@ class StackController(
|
|
|
79
83
|
|
|
80
84
|
/** The one queue of the stack. */
|
|
81
85
|
// The readiness of the screens reaches the queue's waits on the next turn of the main loop: a signal that comes
|
|
82
|
-
// inside a layout pass or a view's attach moves no view of the container there.
|
|
86
|
+
// inside a layout pass or a view's attach moves no view of the container there. A pushed screen's mount reaches
|
|
87
|
+
// its push behind the calls JavaScript made before it (`PendingCalls`), on a later turn too.
|
|
83
88
|
internal var queue = StackQueue(
|
|
84
89
|
display = StackViews(this),
|
|
85
90
|
readiness = ContentReadiness,
|
|
86
91
|
scheduler = { delay, task -> AppearanceDispatcher.scheduler.schedule(delay, task) },
|
|
87
92
|
host = QueueHost(),
|
|
88
93
|
deliver = { signal -> UiThread.post { signal() } },
|
|
94
|
+
afterCalls = PendingCalls::after,
|
|
89
95
|
)
|
|
90
96
|
private set
|
|
91
97
|
|
|
92
98
|
/**
|
|
93
99
|
* The unit tests run the stack over their own display, readiness and host (views are stubs there), before any
|
|
94
|
-
* screen joins it; the readiness signals come at once there.
|
|
100
|
+
* screen joins it; the readiness signals come at once there, and a push's behind the calls as [afterCalls] says.
|
|
95
101
|
*/
|
|
96
|
-
internal fun useQueueParts(
|
|
102
|
+
internal fun useQueueParts(
|
|
103
|
+
display: StackDisplay,
|
|
104
|
+
readiness: Readiness,
|
|
105
|
+
host: StackQueue.Host?,
|
|
106
|
+
afterCalls: (() -> Unit) -> Unit = { it() },
|
|
107
|
+
) {
|
|
97
108
|
queue = StackQueue(
|
|
98
109
|
display = display,
|
|
99
110
|
readiness = readiness,
|
|
100
111
|
scheduler = { delay, task -> AppearanceDispatcher.scheduler.schedule(delay, task) },
|
|
101
112
|
host = host ?: QueueHost(),
|
|
113
|
+
afterCalls = afterCalls,
|
|
102
114
|
)
|
|
103
115
|
}
|
|
104
116
|
|
|
@@ -196,6 +208,17 @@ class StackController(
|
|
|
196
208
|
screen.changeOptions { it.topBar.buttons.back.setVisible() }
|
|
197
209
|
}
|
|
198
210
|
|
|
211
|
+
/**
|
|
212
|
+
* `clearOptions` took options out of the own options of [node], an entry of this stack or the options screen of
|
|
213
|
+
* one: the back arrow's rule ([join]) writes its part of them again, so the first screen keeps its arrow hidden
|
|
214
|
+
* and another shows it unless its options say otherwise.
|
|
215
|
+
*/
|
|
216
|
+
internal fun ownOptionsCleared(node: ViewController<*>) {
|
|
217
|
+
val entries = queue.entries
|
|
218
|
+
val entry = entries.firstOrNull { it === node || optionsScreen(it) === node } ?: return
|
|
219
|
+
backRule(entry, first = entry === entries.first())
|
|
220
|
+
}
|
|
221
|
+
|
|
199
222
|
/** The key of [entry]; none without one. */
|
|
200
223
|
internal fun keyOf(entry: ViewController<*>): String? = keys[entry]
|
|
201
224
|
|
|
@@ -257,6 +280,153 @@ class StackController(
|
|
|
257
280
|
*/
|
|
258
281
|
override fun canHandleBack(): Boolean = topBar.isSearchOpen() || queue.entries.size >= 2
|
|
259
282
|
|
|
283
|
+
/**
|
|
284
|
+
* The default pop of the top is what back does now and it can be previewed: two entries or more, nothing running
|
|
285
|
+
* or waiting, no open search, the top doesn't hold back, pops with the default transition and doesn't turn the
|
|
286
|
+
* preview off (`animations.pop.preview: false`), the screen under it has its view, and the stack shows.
|
|
287
|
+
*/
|
|
288
|
+
override fun stackPoppedByBack(): StackController? {
|
|
289
|
+
if (topBar.isSearchOpen() || !queue.isAtRest) return null
|
|
290
|
+
val entries = queue.entries
|
|
291
|
+
val top = queue.currentChild ?: return null
|
|
292
|
+
val target = entries.getOrNull(entries.size - 2) ?: return null
|
|
293
|
+
if (top !== entries.last() || target !in queue.shown || target.peekView() == null) return null
|
|
294
|
+
if (!queue.isRendered(target) || backGesture != null) return null
|
|
295
|
+
val options = resolvedOf(top)
|
|
296
|
+
val pop = options.animations.pop
|
|
297
|
+
if (options.hardwareBackButton.popStackOnPress.isFalse || pop.enabled.isFalse) return null
|
|
298
|
+
if (pop.preview.isFalse || AnimationRules.stackIsOwn(pop)) return null
|
|
299
|
+
val display = queue.display
|
|
300
|
+
return this.takeIf { display.isOnScreen && display.canAnimate }
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Starts the preview of the pop a back gesture would make ([stackPoppedByBack] said yes): the top shrinks toward
|
|
305
|
+
* the gesture's side ([fromLeft]) and follows the finger from [touchY]; the screen under it shows with its bar.
|
|
306
|
+
* None when it can't be shown.
|
|
307
|
+
*/
|
|
308
|
+
internal fun startBackGesture(fromLeft: Boolean, touchY: Float): BackGesture? {
|
|
309
|
+
val views = queue.display as? StackViews ?: return null
|
|
310
|
+
val top = queue.currentChild ?: return null
|
|
311
|
+
val target = queue.entries.getOrNull(queue.entries.size - 2) ?: return null
|
|
312
|
+
val gesture = BackGesture(views, top, target)
|
|
313
|
+
val preview = views.startBackPreview(top, target, fromLeft, touchY, gesture::reveal) ?: return null
|
|
314
|
+
gesture.preview = preview
|
|
315
|
+
backGesture = gesture
|
|
316
|
+
return gesture
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// The back gesture over this stack whose preview hasn't ended yet; none.
|
|
320
|
+
private var backGesture: BackGesture? = null
|
|
321
|
+
|
|
322
|
+
// A merge of `fab` into the top waits for the end of a back gesture's preview.
|
|
323
|
+
private var fabMergeWaits = false
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* A back gesture over the top of this stack ([startBackGesture]): its progress, its cancel, and its release, which
|
|
327
|
+
* pops the top through the queue with the preview's end. A command accepted meanwhile, or the stack's destroy,
|
|
328
|
+
* ends the preview at once ([abort]).
|
|
329
|
+
*/
|
|
330
|
+
internal inner class BackGesture(
|
|
331
|
+
private val views: StackViews,
|
|
332
|
+
private val top: ViewController<*>,
|
|
333
|
+
private val target: ViewController<*>,
|
|
334
|
+
) {
|
|
335
|
+
lateinit var preview: BackPreview
|
|
336
|
+
// How the screen under the top was before the preview showed it: in the container and seen, its alpha and
|
|
337
|
+
// accessibility.
|
|
338
|
+
private var targetWasPlaced = false
|
|
339
|
+
private var targetAlpha = 1f
|
|
340
|
+
private var targetAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
|
|
341
|
+
private var revealed = false
|
|
342
|
+
private var aborted = false
|
|
343
|
+
|
|
344
|
+
/** The preview shows the screen under the top, with its bar and its FAB. */
|
|
345
|
+
val isRevealed: Boolean
|
|
346
|
+
get() = revealed && !aborted
|
|
347
|
+
|
|
348
|
+
/** The gesture moved: [progress] 0 … 1, the finger at [touchY]. */
|
|
349
|
+
fun progress(progress: Float, touchY: Float) {
|
|
350
|
+
if (!aborted) preview.progress(progress, touchY)
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/** Cancelled: the preview springs back, then the screen under the top and the bar are as they were. */
|
|
354
|
+
fun cancel() {
|
|
355
|
+
if (!aborted) preview.cancel(::restore)
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Released: the top pops, the preview playing its end; the default pop when its picture isn't there yet. False
|
|
360
|
+
* when the stack changed since the gesture started (a command ran, the stack went): back goes the usual way.
|
|
361
|
+
*/
|
|
362
|
+
fun commit(): Boolean {
|
|
363
|
+
if (aborted || isDestroyed) return false
|
|
364
|
+
if (!preview.isReady) {
|
|
365
|
+
abort()
|
|
366
|
+
queue.cut(target, null, id, "go back in the stack '$id'", null)
|
|
367
|
+
return true
|
|
368
|
+
}
|
|
369
|
+
if (backGesture === this) backGesture = null
|
|
370
|
+
// The top's FAB, set aside, leaves with it; a merge into it no longer matters.
|
|
371
|
+
fab.dropAside()
|
|
372
|
+
fabMergeWaits = false
|
|
373
|
+
queue.cut(target, null, id, "go back in the stack '$id'", null, gesture = true)
|
|
374
|
+
return true
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/** The stack changed or goes: the preview ends at once and the stack is as it was. */
|
|
378
|
+
fun abort() {
|
|
379
|
+
if (aborted) return
|
|
380
|
+
aborted = true
|
|
381
|
+
preview.endAtOnce()
|
|
382
|
+
restore()
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// The preview's picture is there: the screen under the top shows under it, and the bar and the FAB show that
|
|
386
|
+
// screen, at once.
|
|
387
|
+
internal fun reveal() {
|
|
388
|
+
val view = target.peekView() ?: return
|
|
389
|
+
targetWasPlaced = view.parent === peekView() && view.visibility == View.VISIBLE
|
|
390
|
+
targetAlpha = view.alpha
|
|
391
|
+
targetAccessibility = view.importantForAccessibility
|
|
392
|
+
revealed = true
|
|
393
|
+
views.reveal(target, top)
|
|
394
|
+
view.alpha = 1f
|
|
395
|
+
topBar.apply(target)
|
|
396
|
+
fab.setAside()
|
|
397
|
+
showFab(FabMotion.Move.AtOnce, target)
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
private fun restore() {
|
|
401
|
+
views.previewEnded(preview)
|
|
402
|
+
if (backGesture === this) backGesture = null
|
|
403
|
+
if (!revealed || isDestroyed) return
|
|
404
|
+
revealed = false
|
|
405
|
+
if (target in queue.shown && target !== queue.currentChild) {
|
|
406
|
+
val view = target.peekView()
|
|
407
|
+
if (targetWasPlaced && view != null) {
|
|
408
|
+
view.alpha = targetAlpha
|
|
409
|
+
view.importantForAccessibility = targetAccessibility
|
|
410
|
+
} else {
|
|
411
|
+
views.detach(target)
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// The bar and the FAB show the top again, the bar's components appeared again.
|
|
415
|
+
val shown = queue.currentChild
|
|
416
|
+
topBar.apply(shown)
|
|
417
|
+
fab.bringBack()
|
|
418
|
+
if (fabMergeWaits) {
|
|
419
|
+
fabMergeWaits = false
|
|
420
|
+
mergeFab()
|
|
421
|
+
}
|
|
422
|
+
shown?.let {
|
|
423
|
+
topBar.screenWillAppear(optionsScreen(it))
|
|
424
|
+
topBar.screenDidAppear(optionsScreen(it))
|
|
425
|
+
}
|
|
426
|
+
BackCallbackState.update()
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
260
430
|
/**
|
|
261
431
|
* The back arrow of the bar was pressed: the screen the user sees holds it (`topBar.backButton.popStackOnPress:
|
|
262
432
|
* false`: `ANN.NavigationButtonPressed` with `topBar.backButton.id` or `ApexNavigation.back`); on the first screen
|
|
@@ -322,7 +492,8 @@ class StackController(
|
|
|
322
492
|
ContainerBackground.apply(this, options)
|
|
323
493
|
updateBar()
|
|
324
494
|
takeKeptMerge(child)?.let(::applyTopMerge)
|
|
325
|
-
|
|
495
|
+
// A back gesture's preview shows the FAB of the screen under the top.
|
|
496
|
+
if (queue.isAtRest && backGesture?.isRevealed != true) showFab()
|
|
326
497
|
performOnParentController { it.applyChildOptions(withoutStackGroups(options), this) }
|
|
327
498
|
}
|
|
328
499
|
|
|
@@ -338,7 +509,7 @@ class StackController(
|
|
|
338
509
|
|
|
339
510
|
// `mergeOptions` with the stack's id: its own options, what it shows, then the layouts around.
|
|
340
511
|
override fun mergeOptions(options: Options) {
|
|
341
|
-
|
|
512
|
+
mergeOwnOptions(options)
|
|
342
513
|
applyOrKeep(options, null)
|
|
343
514
|
performOnParentController { it.mergeChildOptions(withoutStackGroups(options), this) }
|
|
344
515
|
}
|
|
@@ -454,14 +625,19 @@ class StackController(
|
|
|
454
625
|
override fun leavesTopEdgeFree(child: ViewController<*>): Boolean =
|
|
455
626
|
TopBarRoom.leavesTopEdgeFree(resolvedOf(child), largeTitleShown(child)) || super.leavesTopEdgeFree(child)
|
|
456
627
|
|
|
628
|
+
/** A large title shows over [child] in this stack's bar. */
|
|
629
|
+
override fun showsLargeTitleOver(child: ViewController<*>): Boolean =
|
|
630
|
+
largeTitleShown(child) || super.showsLargeTitleOver(child)
|
|
631
|
+
|
|
457
632
|
/** A screen under another doesn't compute its safe area again; the prepared and waiting do. */
|
|
458
633
|
override fun isTopOfStack(child: ViewController<*>): Boolean =
|
|
459
634
|
child === queue.currentChild || child === queue.waitingScreen || isPrepared(child)
|
|
460
635
|
|
|
461
636
|
/**
|
|
462
637
|
* The bar's bottom in the window while [child] is under it and it shows, from the stack's place in the window: for
|
|
463
|
-
* the screen on top where the bar is laid out (a move of the bar doesn't count); for another
|
|
464
|
-
*
|
|
638
|
+
* the screen on top that the bar shows, where the bar is laid out (a move of the bar doesn't count); for another
|
|
639
|
+
* child (a prepared one) and for a top the bar hasn't shown yet (in a tab not selected yet, which measures though
|
|
640
|
+
* invisible) as its own options set the bar, so its content doesn't move as the bar takes them.
|
|
465
641
|
*/
|
|
466
642
|
override fun headerBottomOf(child: ViewController<*>): Int? {
|
|
467
643
|
if (!isUnderBar(child)) return super.headerBottomOf(child)
|
|
@@ -471,7 +647,7 @@ class StackController(
|
|
|
471
647
|
val layout = peekView() ?: return null
|
|
472
648
|
// The stack's place at rest, as the screen's own: a modal sliding in or a sheet dragged doesn't move it.
|
|
473
649
|
val top = RestPlace.topInWindow(layout)
|
|
474
|
-
if (entry === queue.currentChild) return topBar.barBottomInStack()?.let { top + it }
|
|
650
|
+
if (entry === queue.currentChild && topBar.shows(entry)) return topBar.barBottomInStack()?.let { top + it }
|
|
475
651
|
val bar = topBar.barOf(entry, options)
|
|
476
652
|
val large = if (largeTitleShown(child)) UiUtils.dpToPx(activity, LargeTitleView.HEIGHT).toInt() else 0
|
|
477
653
|
return top + bar.margin + bar.strip + bar.height + large
|
|
@@ -506,6 +682,7 @@ class StackController(
|
|
|
506
682
|
|
|
507
683
|
override fun destroy() {
|
|
508
684
|
if (isDestroyed) return
|
|
685
|
+
backGesture?.abort()
|
|
509
686
|
queue.destroy()
|
|
510
687
|
preparedPushes()?.discardFor(this)
|
|
511
688
|
fab.destroy()
|
|
@@ -524,15 +701,20 @@ class StackController(
|
|
|
524
701
|
topBar.apply(queue.currentChild)
|
|
525
702
|
}
|
|
526
703
|
|
|
527
|
-
// The FAB follows the
|
|
528
|
-
|
|
704
|
+
// The FAB follows [top] (the current child) from the start of a transition by [move], with the screens; at rest, a
|
|
705
|
+
// FAB that comes by Material's swap.
|
|
706
|
+
private fun showFab(move: FabMotion.Move = FabMotion.Move.Swap, top: ViewController<*>? = queue.currentChild) {
|
|
529
707
|
val layout = peekView() ?: return
|
|
530
|
-
val top = queue.currentChild
|
|
531
708
|
val screen = top?.let(::optionsScreen)
|
|
532
|
-
fab.showFor(layout, screen, top?.let(::resolvedOf)?.fab ?: FabOptions(), scrollOf(screen))
|
|
709
|
+
fab.showFor(layout, screen, top?.let(::resolvedOf)?.fab ?: FabOptions(), scrollOf(screen), move)
|
|
533
710
|
}
|
|
534
711
|
|
|
535
712
|
private fun mergeFab() {
|
|
713
|
+
// A back gesture's preview shows the FAB of the screen under the top: the top's merge waits for a cancel.
|
|
714
|
+
if (backGesture?.isRevealed == true) {
|
|
715
|
+
fabMergeWaits = true
|
|
716
|
+
return
|
|
717
|
+
}
|
|
536
718
|
val layout = peekView() ?: return
|
|
537
719
|
val top = queue.currentChild ?: return
|
|
538
720
|
val screen = optionsScreen(top)
|
|
@@ -551,16 +733,29 @@ class StackController(
|
|
|
551
733
|
private fun optionsScreen(node: ViewController<*>): ViewController<*> =
|
|
552
734
|
(node as? OptionsScreen)?.optionsScreen ?: node
|
|
553
735
|
|
|
736
|
+
// What back does is computed again on each change of the queue (BackCallbackState): its entries change as an
|
|
737
|
+
// operation is accepted, the screen whose options count as its current child changes (a push that waited for its
|
|
738
|
+
// screen begins after its command), and an operation ends or rejects.
|
|
554
739
|
private inner class QueueHost : StackQueue.Host {
|
|
740
|
+
override fun operationAccepted() {
|
|
741
|
+
backGesture?.abort()
|
|
742
|
+
BackCallbackState.update()
|
|
743
|
+
}
|
|
744
|
+
|
|
555
745
|
// The bar takes the options of the new top at once, also without appearance events.
|
|
556
746
|
override fun currentChildChanged() {
|
|
557
747
|
updateBar()
|
|
558
748
|
navigator?.shownScreensChanged(this@StackController)
|
|
749
|
+
BackCallbackState.update()
|
|
559
750
|
}
|
|
560
751
|
|
|
561
|
-
// Before the bar takes the new top's options: the row's picture, and how it shows or hides.
|
|
562
|
-
override fun barTransition(
|
|
563
|
-
|
|
752
|
+
// Before the bar takes the new top's options: the row's picture or the bar's travel, and how it shows or hides.
|
|
753
|
+
override fun barTransition(
|
|
754
|
+
motion: StackDisplay.BarMotion?,
|
|
755
|
+
visibility: StackDisplay.BarVisibility,
|
|
756
|
+
travel: StackDisplay.BarTravel?,
|
|
757
|
+
) {
|
|
758
|
+
if (peekView() != null) topBar.beginRowTransition(motion, queue.currentChild, visibility, travel)
|
|
564
759
|
}
|
|
565
760
|
|
|
566
761
|
// The tab bar of the tabs around goes with the transition; a takeover doesn't bring it to rest.
|
|
@@ -568,6 +763,9 @@ class StackController(
|
|
|
568
763
|
parentController?.tabBarTransition(this@StackController, move, side)
|
|
569
764
|
}
|
|
570
765
|
|
|
766
|
+
// The FAB of the new top arrives with its screen, the old one leaves with its own.
|
|
767
|
+
override fun fabTransition(move: FabMotion.Move) = showFab(move)
|
|
768
|
+
|
|
571
769
|
override fun operationEnded(topSettled: Boolean) {
|
|
572
770
|
BackCallbackState.update()
|
|
573
771
|
if (topSettled) parentController?.tabBarSettled(this@StackController)
|
|
@@ -588,8 +786,8 @@ class StackController(
|
|
|
588
786
|
if (peekView() != null) topBar.stage(node)
|
|
589
787
|
}
|
|
590
788
|
|
|
591
|
-
override fun
|
|
592
|
-
(node
|
|
789
|
+
override fun hasReactContent(node: ViewController<*>): Boolean =
|
|
790
|
+
RenderWait.waitedScreens(node).any { it is ComponentViewController }
|
|
593
791
|
|
|
594
792
|
override fun log(text: String) {
|
|
595
793
|
Log.e(NavigationLog.TAG, text)
|
package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/stack/StackDisplay.kt
CHANGED
|
@@ -38,6 +38,12 @@ internal interface StackDisplay {
|
|
|
38
38
|
*/
|
|
39
39
|
enum class BarMotion { Push, Pop, FadeThrough }
|
|
40
40
|
|
|
41
|
+
/**
|
|
42
|
+
* How the bar goes with a transition of the stack's own (`content`): with its screens. [Forward]: the screen that
|
|
43
|
+
* comes lies over the one that goes (a push, `setStackRoot`); [Back]: the one that goes lies over it (a pop).
|
|
44
|
+
*/
|
|
45
|
+
enum class BarTravel { Forward, Back }
|
|
46
|
+
|
|
41
47
|
/**
|
|
42
48
|
* How the bar shows or hides when the new top's `topBar.visible` differs: at once (no animation, or a transition
|
|
43
49
|
* with elements), or [animated] by the transition's [side] (`animations.push.topBar`, the leaving screen's
|
|
@@ -156,12 +162,31 @@ internal interface StackDisplay {
|
|
|
156
162
|
done: () -> Unit,
|
|
157
163
|
): () -> Unit
|
|
158
164
|
|
|
165
|
+
/** The preview of a back gesture over [top], [target] under it, shows ([finishBackGesture] can end it). */
|
|
166
|
+
fun hasBackPreview(top: ViewController<*>, target: ViewController<*>): Boolean = false
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The pop of a back gesture whose preview shows ([hasBackPreview]), released: the preview plays the end of [top]
|
|
170
|
+
* going and [target] coming. [topDone] and [targetDone] once each, as [animate]'s; [stop] of one screen ends the
|
|
171
|
+
* preview where it is and its other screen's part.
|
|
172
|
+
*/
|
|
173
|
+
fun finishBackGesture(
|
|
174
|
+
top: ViewController<*>,
|
|
175
|
+
target: ViewController<*>,
|
|
176
|
+
topDone: () -> Unit,
|
|
177
|
+
targetDone: () -> Unit,
|
|
178
|
+
) {
|
|
179
|
+
topDone()
|
|
180
|
+
targetDone()
|
|
181
|
+
}
|
|
182
|
+
|
|
159
183
|
/** Stops the animator of [screen] where it is, without its end: a later transition takes the screen over. */
|
|
160
184
|
fun stop(screen: ViewController<*>)
|
|
161
185
|
|
|
162
186
|
/**
|
|
163
187
|
* The push of a prepared slot screen: [mounted] as the slot's content mounts into the screen's container (or at the
|
|
164
|
-
* limit of 0.5 s), then [start] on the pre-draw of that frame, while [waiting] holds
|
|
188
|
+
* limit of 0.5 s), then [start] on the pre-draw of that frame, while [waiting] holds; the queue starts the
|
|
189
|
+
* transition from there behind the calls JavaScript made before, on a later turn.
|
|
165
190
|
*/
|
|
166
191
|
fun awaitPrepared(screen: ViewController<*>, waiting: () -> Boolean, mounted: () -> Unit, start: () -> Unit)
|
|
167
192
|
}
|