@apexnative/navigation 1.0.0-alpha.1 → 1.0.0-alpha.11
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 +132 -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/ArrangementDefinition.kt +9 -3
- package/android/src/main/java/dev/apexnative/navigation/viewcontrollers/arrangement/ArrangementPlanner.kt +20 -15
- 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/arrangement.md +17 -1
- 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 +61 -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 +195 -21
- 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 +34 -0
- package/ios/Layouts/Screen/ANNScreenSettling.mm +171 -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/arrangement.js +5 -2
- package/lib/module/api/screens/arrangement.js.map +1 -1
- 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/arrangement.d.ts +12 -2
- package/lib/typescript/api/screens/arrangement.d.ts.map +1 -1
- 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/arrangement.ts +17 -4
- 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/src/engine/screens.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import React, { type ComponentType, useCallback, useEffect, useSyncExternalStore
|
|
|
2
2
|
import { AppRegistry } from 'react-native';
|
|
3
3
|
import type { Options } from '../interfaces/Options';
|
|
4
4
|
import { forgetPlace } from './places';
|
|
5
|
-
import { forgetProps, propsOf, watchProps } from './props';
|
|
5
|
+
import { forgetProps, isOptionsComponent, propsOf, watchProps } from './props';
|
|
6
6
|
import { forgetMergedOptions } from './rememberedOptions';
|
|
7
7
|
import { hasSlot } from './slots';
|
|
8
8
|
import type { NativeControllerProps } from './nativeScreens';
|
|
@@ -52,14 +52,50 @@ export type EngineScreen =
|
|
|
52
52
|
/** What the root of a React screen renders: the screen's id, and the props the command gave it. */
|
|
53
53
|
export type ScreenRootProps = { componentId: string } & Record<string, unknown>;
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* What React Native gives the root of a React screen: the screen's id, its root tag (none in a slot of the app's one
|
|
57
|
+
* tree), and the props the native side gives that root, a tab cell's `tabIndex`, `selected`, `badge`, `dot` and
|
|
58
|
+
* `dotColor`.
|
|
59
|
+
*/
|
|
60
|
+
export type NativeRootProps = { componentId: string; rootTag?: number } & Record<string, unknown>;
|
|
61
|
+
|
|
55
62
|
const screens = new Map<string, EngineScreen>();
|
|
56
|
-
const roots = new Map<string, ComponentType<
|
|
63
|
+
const roots = new Map<string, ComponentType<NativeRootProps>>();
|
|
57
64
|
let unmounted: ((screenId: string) => void) | undefined;
|
|
58
|
-
// The React
|
|
59
|
-
// the old screens again in the new runtime, under the ids the new screens get too, and
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
|
|
65
|
+
// The React roots mounted under each id, by their root tags. One id can have several: after a JavaScript reload React
|
|
66
|
+
// Native starts the roots of the old screens again in the new runtime, under the ids the new screens get too, and
|
|
67
|
+
// unmounts them once the new ones show; a component of the default or a stack's options has one id and a root in the
|
|
68
|
+
// bar of every screen that shows it. The id lets its props go only with the last of them. A slot of the app's one tree
|
|
69
|
+
// has no tag: while the one tree shows a screen with the id, no root of that id lets it go.
|
|
70
|
+
const owners = new Map<string, Set<number>>();
|
|
71
|
+
// The screens that show by their ids: the name, and how many roots or slots of the id are mounted (a component of the
|
|
72
|
+
// options has a root in the bar of every screen that shows it).
|
|
73
|
+
const shown = new Map<string, { name: string; mounts: number }>();
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Notes a screen as shown, a React root or slot of it or the controller of a native screen, until the function it
|
|
77
|
+
* gives is called.
|
|
78
|
+
*/
|
|
79
|
+
export function noteShown(componentId: string, name: string): () => void {
|
|
80
|
+
const entry = shown.get(componentId);
|
|
81
|
+
if (entry?.name === name) entry.mounts++;
|
|
82
|
+
else shown.set(componentId, { name, mounts: 1 });
|
|
83
|
+
return () => {
|
|
84
|
+
const current = shown.get(componentId);
|
|
85
|
+
if (current?.name !== name) return;
|
|
86
|
+
if (--current.mounts === 0) shown.delete(componentId);
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** The ids of the screens with the name that show now. */
|
|
91
|
+
export function shownScreens(name: string): string[] {
|
|
92
|
+
return [...shown].filter(([, entry]) => entry.name === name).map(([id]) => id);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Whether a React root of the screen with the id is mounted now (a slot of the app's one tree doesn't count). */
|
|
96
|
+
export function hasRoot(componentId: string): boolean {
|
|
97
|
+
return owners.has(componentId);
|
|
98
|
+
}
|
|
63
99
|
|
|
64
100
|
/** What runs when the root of a screen unmounts: the screen is gone. */
|
|
65
101
|
export function onScreenUnmounted(listener: (screenId: string) => void): void {
|
|
@@ -192,20 +228,29 @@ export function isReactScreen(name: string): boolean {
|
|
|
192
228
|
return screen !== undefined && 'component' in screen;
|
|
193
229
|
}
|
|
194
230
|
|
|
231
|
+
/**
|
|
232
|
+
* The props a screen's component renders with: those a command left under its id ([stored]), the props the native side
|
|
233
|
+
* gave its root over them ([root]: a tab cell's state, which the docs promise arrives on top of `passProps`), and its
|
|
234
|
+
* id. The root tag stays with the root.
|
|
235
|
+
*/
|
|
236
|
+
export function screenProps(stored: object, root: NativeRootProps): ScreenRootProps {
|
|
237
|
+
const props: ScreenRootProps = { ...stored, ...root, componentId: root.componentId };
|
|
238
|
+
delete props.rootTag;
|
|
239
|
+
return props;
|
|
240
|
+
}
|
|
241
|
+
|
|
195
242
|
/**
|
|
196
243
|
* The root a React screen runs in: the screen with the props a command left for it under its id, and the new ones when
|
|
197
|
-
* options give its id new props
|
|
198
|
-
*
|
|
244
|
+
* options give its id new props, under the props the native side gives the root ([screenProps]). The slot of the app's
|
|
245
|
+
* one tree renders the same root.
|
|
199
246
|
*/
|
|
200
|
-
export function screenRoot(
|
|
201
|
-
name: string
|
|
202
|
-
): ComponentType<{ componentId: string; rootTag?: number }> | undefined {
|
|
247
|
+
export function screenRoot(name: string): ComponentType<NativeRootProps> | undefined {
|
|
203
248
|
const screen = screens.get(name);
|
|
204
249
|
if (!screen || !('component' in screen)) return undefined;
|
|
205
250
|
let root = roots.get(name);
|
|
206
251
|
if (!root) {
|
|
207
252
|
const Screen = screen.component();
|
|
208
|
-
root = function ScreenRoot(rootProps:
|
|
253
|
+
root = function ScreenRoot(rootProps: NativeRootProps) {
|
|
209
254
|
// In the app's one tree the slot renders the root, without a tag of its own.
|
|
210
255
|
const { componentId, rootTag } = rootProps;
|
|
211
256
|
const watch = useCallback(
|
|
@@ -213,24 +258,34 @@ export function screenRoot(
|
|
|
213
258
|
[componentId]
|
|
214
259
|
);
|
|
215
260
|
const props = useSyncExternalStore(watch, () => propsOf(componentId));
|
|
261
|
+
useEffect(() => noteShown(componentId, name), [componentId]);
|
|
216
262
|
useEffect(() => {
|
|
217
|
-
if (rootTag !== undefined
|
|
218
|
-
owners.
|
|
263
|
+
if (rootTag !== undefined) {
|
|
264
|
+
const tags = owners.get(componentId) ?? new Set<number>();
|
|
265
|
+
tags.add(rootTag);
|
|
266
|
+
owners.set(componentId, tags);
|
|
219
267
|
}
|
|
220
268
|
return () => {
|
|
221
|
-
//
|
|
222
|
-
// with the id: a later screen under the id, the restarted root of a screen after a
|
|
223
|
-
// (its slot may mount only once the app's provider lets it), the screen rendering
|
|
224
|
-
|
|
269
|
+
// A root while another root of the id is mounted leaves the screen alone, and so does any root while the one
|
|
270
|
+
// tree still has a slot with the id: a later screen under the id, the restarted root of a screen after a
|
|
271
|
+
// reload into the one tree (its slot may mount only once the app's provider lets it), the screen rendering
|
|
272
|
+
// again under the provider.
|
|
273
|
+
const tags = owners.get(componentId);
|
|
274
|
+
if (rootTag !== undefined && tags) {
|
|
275
|
+
tags.delete(rootTag);
|
|
276
|
+
if (tags.size > 0) return;
|
|
277
|
+
}
|
|
225
278
|
if (hasSlot(componentId)) return;
|
|
226
279
|
owners.delete(componentId);
|
|
227
|
-
|
|
280
|
+
// A component the library named in options keeps its props for the next root under its id (the node shows
|
|
281
|
+
// it again, or another screen shows the same default): they go with the node.
|
|
282
|
+
if (!isOptionsComponent(componentId)) forgetProps(componentId);
|
|
228
283
|
forgetPlace(componentId);
|
|
229
284
|
forgetMergedOptions(componentId);
|
|
230
285
|
unmounted?.(componentId);
|
|
231
286
|
};
|
|
232
287
|
}, [componentId, rootTag]);
|
|
233
|
-
return <Screen {...props
|
|
288
|
+
return <Screen {...screenProps(props, rootProps)} />;
|
|
234
289
|
};
|
|
235
290
|
root.displayName = `ScreenRoot(${name})`;
|
|
236
291
|
roots.set(name, root);
|
|
@@ -10,7 +10,7 @@ export type ComponentType =
|
|
|
10
10
|
|
|
11
11
|
/** The fields every appearance event has. */
|
|
12
12
|
interface ComponentAppearanceEvent {
|
|
13
|
-
/** The id of the component: the screen, or the
|
|
13
|
+
/** The id of the component: of the screen, or the bar component's own id. */
|
|
14
14
|
componentId: string;
|
|
15
15
|
/** The name of the component: for a screen, its name without any internal prefix. */
|
|
16
16
|
componentName: string;
|
|
@@ -60,7 +60,7 @@ export interface NavigationButtonPressedEvent {
|
|
|
60
60
|
* `ApexNavigation.back`; the hardware back of a modal has `ApexNavigation.hardwareBackButton`.
|
|
61
61
|
*/
|
|
62
62
|
buttonId: string;
|
|
63
|
-
/** (iOS) For a button with `toggle`: its new state,
|
|
63
|
+
/** (iOS) For a button with `toggle`: its new state, which the screen keeps. */
|
|
64
64
|
selected?: boolean;
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -95,8 +95,8 @@ export interface SheetDetentChangedEvent {
|
|
|
95
95
|
/** The id of the visible screen of the modal. */
|
|
96
96
|
componentId: string;
|
|
97
97
|
/**
|
|
98
|
-
* The detent the sheet stopped at: `'medium'`, `'large'`,
|
|
99
|
-
*
|
|
98
|
+
* The detent the sheet stopped at: `'medium'`, `'large'`, `'content'` (the detent that fits the content), or a
|
|
99
|
+
* height (points on iOS, dp on Android).
|
|
100
100
|
*/
|
|
101
101
|
detent: 'medium' | 'large' | 'content' | number;
|
|
102
102
|
}
|
package/src/interfaces/Events.ts
CHANGED
|
@@ -54,8 +54,12 @@ export interface NavigationStateChangedEvent {
|
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* A tab was selected by the user: a press on the tab, a pick from the "More" list or a press on "More" that showed a
|
|
57
|
-
* tab (iOS). It
|
|
58
|
-
* `
|
|
57
|
+
* tab (iOS). It goes right after the `ComponentDidAppear` of the new tab's screen, before the navigation state and
|
|
58
|
+
* before the tab that was left goes back to its first screen (`popToRootOnBlur`), and only when the tab changed: a
|
|
59
|
+
* press on the selected tab or on a `selectTabOnPress: false` tab is reported by `BottomTabPressedEvent` alone.
|
|
60
|
+
* Selecting a tab from code sends nothing. A switch still running when another press, long press or choice from code
|
|
61
|
+
* comes ends first, with this event, so the events of one press never mix with the next; when that tab's screen
|
|
62
|
+
* hasn't drawn yet, this event goes before its held `ComponentDidAppear`.
|
|
59
63
|
*/
|
|
60
64
|
export interface BottomTabSelectedEvent {
|
|
61
65
|
/** The index of the tab that is now selected. */
|
|
@@ -67,24 +71,28 @@ export interface BottomTabSelectedEvent {
|
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
/**
|
|
70
|
-
* A tab was pressed, the
|
|
71
|
-
* the
|
|
74
|
+
* A tab was pressed, on the bar or on a cell of `bottomTabs.customRow`, the selected one too. It goes first, before
|
|
75
|
+
* anything the press does. Another tab: then the switch's `ComponentWillAppear`, `ComponentDidDisappear` and
|
|
76
|
+
* `ComponentDidAppear`, then `BottomTabSelectedEvent`. The selected tab again (`wasSelected: true`): its stack goes
|
|
77
|
+
* back to its first screen with the events of the user's back (`ScreenPopped`), or, on the first screen, its content
|
|
78
|
+
* scrolls to the top; with `popToRootOnPress: false` nothing follows. With `selectTabOnPress: false` it is the only
|
|
79
|
+
* event and the selection stays. A long press sends `BottomTabLongPressedEvent` instead.
|
|
72
80
|
*/
|
|
73
81
|
export interface BottomTabPressedEvent {
|
|
74
82
|
/** The index of the tab that was pressed. */
|
|
75
83
|
tabIndex: number;
|
|
76
84
|
/** The id of the tabs. */
|
|
77
85
|
bottomTabsId: string;
|
|
78
|
-
/** The id of the screen the tab shows: the top of its stack. */
|
|
86
|
+
/** The id of the screen the tab shows: the top of its stack, or the tab itself when it is a screen. */
|
|
79
87
|
screenId?: string;
|
|
80
88
|
/** Whether the tab was the selected one already; a press on the selected tab scrolls its content to the top. */
|
|
81
89
|
wasSelected: boolean;
|
|
82
90
|
}
|
|
83
91
|
|
|
84
92
|
/**
|
|
85
|
-
* A tab was pressed and held
|
|
86
|
-
*
|
|
87
|
-
*
|
|
93
|
+
* A tab was pressed and held, on the bar or on a cell of `bottomTabs.customRow`. The tab is not selected and gets no
|
|
94
|
+
* press event. On iOS it is not sent for "More" or for the tab strip at the top of an iPad. On Android it replaces the
|
|
95
|
+
* tooltip of the tab.
|
|
88
96
|
*/
|
|
89
97
|
export interface BottomTabLongPressedEvent {
|
|
90
98
|
/** The index of the tab that was pressed. */
|
|
@@ -105,6 +113,16 @@ export interface SplitViewColumnsStackedEvent {
|
|
|
105
113
|
stacked: boolean;
|
|
106
114
|
}
|
|
107
115
|
|
|
116
|
+
/**
|
|
117
|
+
* (iOS) A link the app dispatched (`dispatchDeepLinkURL`) that React Native's `Linking` doesn't take from the native
|
|
118
|
+
* side: on React Native 0.88 and newer, in an app whose Info.plist names a scene delegate, it takes only the links a
|
|
119
|
+
* scene opened. JavaScript hands it to `Linking` as a `url` event.
|
|
120
|
+
*/
|
|
121
|
+
export interface DeepLinkDispatchedEvent {
|
|
122
|
+
/** The link. */
|
|
123
|
+
url: string;
|
|
124
|
+
}
|
|
125
|
+
|
|
108
126
|
/**
|
|
109
127
|
* A screen of the single React tree was destroyed and the slot still belongs to it: JavaScript removes the slot from
|
|
110
128
|
* its tree. It is not sent for a prepared screen that was never pushed, nor when JavaScript reloads.
|
|
@@ -185,11 +203,12 @@ export type HingeState = 'closed' | 'partiallyOpen' | 'fullyOpen' | 'unknown';
|
|
|
185
203
|
*/
|
|
186
204
|
export interface HingeChangedEvent {
|
|
187
205
|
/**
|
|
188
|
-
* The state of the hinge. On Android `closed` means the
|
|
206
|
+
* The state of the hinge. On Android `closed` means the app's window has no fold, or the angle is below 90 degrees,
|
|
207
|
+
* so a device open flat with a window off the fold (split screen) reports `closed`; Android never gives `unknown`.
|
|
189
208
|
*/
|
|
190
209
|
state?: HingeState;
|
|
191
210
|
/**
|
|
192
|
-
* The angle of the hinge in degrees
|
|
211
|
+
* The angle of the hinge in degrees, to tenths. Missing when the state is `unknown` and where the system
|
|
193
212
|
* gives no angle.
|
|
194
213
|
*/
|
|
195
214
|
angle?: number;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Every command with a promise (an async method of src/adapters/NativeANNTurboModule.ts): what it resolves with, whether the navigation state goes before its answer (`state`), and whether `ANN.CommandCompleted` follows the answer (`completed`). scripts/contract.mjs makes ios/Contract/ANNCommandContract.{h,mm} and android/.../react/CommandContract.kt from it, and fails when a command of the spec is missing here or a command here is not in the spec.",
|
|
3
|
+
"commands": [
|
|
4
|
+
{
|
|
5
|
+
"name": "setRoot",
|
|
6
|
+
"resolves": "the id of the root, once the root and the layout's modals and overlays show",
|
|
7
|
+
"state": true,
|
|
8
|
+
"completed": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "push",
|
|
12
|
+
"resolves": "the id of the screen that shows; of a pair, the pair's id",
|
|
13
|
+
"state": true,
|
|
14
|
+
"completed": true
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "preparePush",
|
|
18
|
+
"resolves": "the frame `{ width, height, padding }` of the prepared screen, or null; always null on iOS",
|
|
19
|
+
"state": false,
|
|
20
|
+
"completed": false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "pop",
|
|
24
|
+
"resolves": "the id of the screen that went",
|
|
25
|
+
"state": true,
|
|
26
|
+
"completed": true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "popTo",
|
|
30
|
+
"resolves": "the id of the screen it went back to",
|
|
31
|
+
"state": true,
|
|
32
|
+
"completed": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "popToRoot",
|
|
36
|
+
"resolves": "the id of the first screen of the stack",
|
|
37
|
+
"state": true,
|
|
38
|
+
"completed": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "setStackRoot",
|
|
42
|
+
"resolves": "the id of the new top screen",
|
|
43
|
+
"state": true,
|
|
44
|
+
"completed": true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "showModal",
|
|
48
|
+
"resolves": "the id of the modal's root",
|
|
49
|
+
"state": true,
|
|
50
|
+
"completed": true
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "dismissModal",
|
|
54
|
+
"resolves": "the id of the modal's root",
|
|
55
|
+
"state": true,
|
|
56
|
+
"completed": true
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "dismissAllModals",
|
|
60
|
+
"resolves": "an empty string",
|
|
61
|
+
"state": true,
|
|
62
|
+
"completed": true
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "showOverlay",
|
|
66
|
+
"resolves": "the id of the overlay's root",
|
|
67
|
+
"state": true,
|
|
68
|
+
"completed": true
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "dismissOverlay",
|
|
72
|
+
"resolves": "the id of the overlay's root",
|
|
73
|
+
"state": true,
|
|
74
|
+
"completed": true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "dismissAllOverlays",
|
|
78
|
+
"resolves": "an empty string",
|
|
79
|
+
"state": true,
|
|
80
|
+
"completed": true
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "showInColumn",
|
|
84
|
+
"resolves": "the id of the screen that shows",
|
|
85
|
+
"state": true,
|
|
86
|
+
"completed": true
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "setColumnShown",
|
|
90
|
+
"resolves": "nothing once the columns stopped moving (`undefined` on iOS, `null` on Android)",
|
|
91
|
+
"state": true,
|
|
92
|
+
"completed": false
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "getLaunchLink",
|
|
96
|
+
"resolves": "the link that launched the app, or null",
|
|
97
|
+
"state": false,
|
|
98
|
+
"completed": false
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Every text the native side rejects a command with, or logs for a command without a promise: one sentence per case, the values in single quotes, {name} for a parameter. scripts/contract.mjs makes ios/Contract/ANNErrorTexts.{h,mm} and android/.../react/ErrorTexts.kt from it; `platforms` limits a text to one platform.",
|
|
3
|
+
"groups": [
|
|
4
|
+
{
|
|
5
|
+
"title": "Where the screen is",
|
|
6
|
+
"texts": [
|
|
7
|
+
{
|
|
8
|
+
"name": "screenNotShown",
|
|
9
|
+
"params": ["componentId"],
|
|
10
|
+
"text": "the screen '{componentId}' is not shown"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "notInStack",
|
|
14
|
+
"params": ["componentId"],
|
|
15
|
+
"text": "the screen '{componentId}' is not in a stack"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "firstScreenOfStack",
|
|
19
|
+
"params": ["componentId"],
|
|
20
|
+
"text": "the screen '{componentId}' is the first screen of its stack"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "notInThisStack",
|
|
24
|
+
"params": ["componentId"],
|
|
25
|
+
"text": "the screen '{componentId}' is not in this stack"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "notInModal",
|
|
29
|
+
"params": ["componentId"],
|
|
30
|
+
"text": "the screen '{componentId}' is not in a modal"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "notInOverlay",
|
|
34
|
+
"params": ["componentId"],
|
|
35
|
+
"text": "the screen '{componentId}' is not in an overlay"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "notInSplitView",
|
|
39
|
+
"params": ["componentId"],
|
|
40
|
+
"text": "the screen '{componentId}' is not in a split view"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "neitherSplitViewNorStack",
|
|
44
|
+
"params": ["componentId"],
|
|
45
|
+
"text": "the screen '{componentId}' is neither in a split view nor in a stack"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "noSuchColumn",
|
|
49
|
+
"params": ["componentId", "column"],
|
|
50
|
+
"text": "the split view of the screen '{componentId}' has no '{column}' column"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "columnIsStack",
|
|
54
|
+
"params": ["componentId", "column"],
|
|
55
|
+
"text": "the '{column}' column of the split view of the screen '{componentId}' is a stack: it takes a screen, not a stack"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "columnNotStack",
|
|
59
|
+
"params": ["componentId", "column"],
|
|
60
|
+
"text": "the '{column}' column of the split view of the screen '{componentId}' is not a stack"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "noScreensForStack",
|
|
64
|
+
"params": ["componentId"],
|
|
65
|
+
"text": "there are no screens to put in the stack of the screen '{componentId}'"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "alreadyShown",
|
|
69
|
+
"params": ["componentId"],
|
|
70
|
+
"text": "the screen '{componentId}' shows already: an id goes to one screen"
|
|
71
|
+
}
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"title": "Root, modals, the app",
|
|
76
|
+
"texts": [
|
|
77
|
+
{
|
|
78
|
+
"name": "setRootReplaced",
|
|
79
|
+
"params": ["rootId"],
|
|
80
|
+
"text": "setRoot was replaced by a newer setRoot before the root '{rootId}' finished showing"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "rootDestroyed",
|
|
84
|
+
"params": ["rootId"],
|
|
85
|
+
"text": "the root '{rootId}' was destroyed before it showed"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "modalWithoutRoot",
|
|
89
|
+
"params": ["componentId"],
|
|
90
|
+
"text": "the modal '{componentId}' can't be dismissed: there is no root under it"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "nowhereToShow",
|
|
94
|
+
"params": [],
|
|
95
|
+
"text": "the navigation has nowhere to show screens: the app has no activity or window"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"title": "Native screens",
|
|
101
|
+
"texts": [
|
|
102
|
+
{
|
|
103
|
+
"name": "nativeScreenNotRegistered",
|
|
104
|
+
"params": ["name"],
|
|
105
|
+
"text": "no native screen is registered as '{name}'"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "nativeScreenNotCreated",
|
|
109
|
+
"params": ["name"],
|
|
110
|
+
"text": "the native screen '{name}' could not be created: its creator returned nothing"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "nativeCallReloaded",
|
|
114
|
+
"params": ["name", "componentId"],
|
|
115
|
+
"text": "JavaScript reloaded before the call '{name}' of the screen '{componentId}' was answered",
|
|
116
|
+
"doc": "The error of a call of a native screen whose JavaScript reloaded before it answered."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "nativeCallNotRunning",
|
|
120
|
+
"params": ["name", "componentId"],
|
|
121
|
+
"text": "the navigation is not running: the call '{name}' of the screen '{componentId}' can't be answered",
|
|
122
|
+
"doc": "The error of a call of a native screen while no JavaScript can answer it."
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"title": "The layout",
|
|
128
|
+
"texts": [
|
|
129
|
+
{
|
|
130
|
+
"name": "unknownNodeType",
|
|
131
|
+
"params": ["type"],
|
|
132
|
+
"text": "the layout has a node of unknown type '{type}'"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"name": "nodeWithoutId",
|
|
136
|
+
"params": ["type"],
|
|
137
|
+
"text": "the layout has a node of type '{type}' without an id"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "sideMenuChild",
|
|
141
|
+
"params": ["menuId", "type"],
|
|
142
|
+
"text": "the side menu '{menuId}' has a child of type '{type}': it takes SideMenuLeft, SideMenuCenter and SideMenuRight"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "stackTakesScreens",
|
|
146
|
+
"params": ["stackId", "type"],
|
|
147
|
+
"text": "the stack '{stackId}' takes screens, not a '{type}'"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "emptyStack",
|
|
151
|
+
"params": ["stackId"],
|
|
152
|
+
"text": "the stack '{stackId}' has no screens"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "emptyTabs",
|
|
156
|
+
"params": ["tabsId"],
|
|
157
|
+
"text": "the tabs '{tabsId}' have no tabs"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "tooManyTabs",
|
|
161
|
+
"params": [
|
|
162
|
+
"tabsId",
|
|
163
|
+
{
|
|
164
|
+
"name": "count",
|
|
165
|
+
"type": "int"
|
|
166
|
+
}
|
|
167
|
+
],
|
|
168
|
+
"text": "the tabs '{tabsId}' have {count} tabs: Android shows at most 5",
|
|
169
|
+
"doc": "Only Android checks it: its tab bar shows at most 5 tabs."
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "splitViewColumns",
|
|
173
|
+
"params": ["splitViewId"],
|
|
174
|
+
"text": "the split view '{splitViewId}' needs its primary and its secondary column"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"name": "pairUnsupported",
|
|
178
|
+
"params": ["pairId"],
|
|
179
|
+
"text": "the pair '{pairId}' needs iOS 27.1 and an app built with its SDK",
|
|
180
|
+
"doc": "Only iOS checks it: Android has pairs on every version."
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"name": "pairNeedsTwoScreens",
|
|
184
|
+
"params": ["pairId"],
|
|
185
|
+
"text": "the pair '{pairId}' needs two screens: its primary and its secondary"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "nodeWithoutName",
|
|
189
|
+
"params": ["type", "nodeId"],
|
|
190
|
+
"text": "the layout has a node '{nodeId}' of type '{type}' without a name"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "rootMissing",
|
|
194
|
+
"params": [],
|
|
195
|
+
"text": "the layout of setRoot has no root"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"name": "tabsInTabs",
|
|
199
|
+
"params": ["tabsId"],
|
|
200
|
+
"text": "the tabs '{tabsId}' have a tab of type 'BottomTabs': tabs don't go inside tabs"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"name": "sideMenuSides",
|
|
204
|
+
"params": ["menuId"],
|
|
205
|
+
"text": "the side menu '{menuId}' takes one SideMenuCenter and at most one SideMenuLeft and one SideMenuRight"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"name": "sideChildCount",
|
|
209
|
+
"params": ["sideId", "menuId"],
|
|
210
|
+
"text": "the side '{sideId}' of the side menu '{menuId}' needs exactly one child"
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"name": "sideMenuInSide",
|
|
214
|
+
"params": ["menuId"],
|
|
215
|
+
"text": "the side menu '{menuId}' has a side menu in a side: a side menu doesn't go inside a side menu"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"name": "sideOutsideMenu",
|
|
219
|
+
"params": ["nodeId", "type"],
|
|
220
|
+
"text": "the layout has a node '{nodeId}' of type '{type}' outside a side menu"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"name": "splitViewInColumn",
|
|
224
|
+
"params": ["splitViewId"],
|
|
225
|
+
"text": "the split view '{splitViewId}' has a column of type 'SplitView': a split view doesn't go inside a split view"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "idGivenTwice",
|
|
229
|
+
"params": ["nodeId"],
|
|
230
|
+
"text": "the layout gives the id '{nodeId}' to two nodes"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"title": "Options, previews, any other failure",
|
|
236
|
+
"texts": [
|
|
237
|
+
{
|
|
238
|
+
"name": "unreadableOption",
|
|
239
|
+
"params": ["path", "componentId"],
|
|
240
|
+
"text": "the option '{path}' of the screen '{componentId}' has a value the navigation can't read"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"name": "unreadableDefaultOption",
|
|
244
|
+
"params": ["path"],
|
|
245
|
+
"text": "the option '{path}' of the default options has a value the navigation can't read",
|
|
246
|
+
"doc": "An unreadable value of `setDefaultOptions`: the default options belong to no screen."
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"name": "previewGone",
|
|
250
|
+
"params": ["previewId"],
|
|
251
|
+
"text": "the preview '{previewId}' went without being opened"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"name": "couldNot",
|
|
255
|
+
"params": ["what", "reason"],
|
|
256
|
+
"text": "could not {what}: {reason}",
|
|
257
|
+
"doc": "Any other failure: what could not be done and why, `could not <what>: <reason>`."
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "notDoneYet",
|
|
261
|
+
"params": ["method"],
|
|
262
|
+
"text": "could not run '{method}': the native core doesn't do it yet",
|
|
263
|
+
"doc": "A command whose part of the native core is not written yet."
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"name": "notAnswered",
|
|
267
|
+
"params": ["method"],
|
|
268
|
+
"text": "could not run '{method}': the native core let it go without an answer",
|
|
269
|
+
"doc": "A command that nothing in the native core answered: what took it let it go, or nothing took it.",
|
|
270
|
+
"platforms": ["ios"]
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|