@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
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
// Made by scripts/contract.mjs from the event types of src/interfaces/: change them and run the script again.
|
|
2
|
+
|
|
3
|
+
package dev.apexnative.navigation.react.events
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The names of the events `ANN.<Name>` ([EVENT]) and the keys of their payloads, as the types of `src/interfaces/` give
|
|
7
|
+
* them; what each field means is its JSDoc there. The object types a field holds have keys of their own. The sender
|
|
8
|
+
* and the builders of payloads take every name and key from here: `EventContract.CommandCompleted.COMMAND_ID`. The
|
|
9
|
+
* events and fields only iOS sends are not here.
|
|
10
|
+
*/
|
|
11
|
+
internal object EventContract {
|
|
12
|
+
/** `ANN.AppLaunched`. */
|
|
13
|
+
object AppLaunched {
|
|
14
|
+
const val EVENT = "ANN.AppLaunched"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** `ANN.ArrangementChanged`. */
|
|
18
|
+
object ArrangementChanged {
|
|
19
|
+
const val EVENT = "ANN.ArrangementChanged"
|
|
20
|
+
const val COMPONENT_ID = "componentId"
|
|
21
|
+
const val PLACEMENT = "placement"
|
|
22
|
+
const val LAYOUT = "layout"
|
|
23
|
+
const val FRONT = "front"
|
|
24
|
+
const val HIDDEN = "hidden"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** `ANN.BottomTabLongPressed`. */
|
|
28
|
+
object BottomTabLongPressed {
|
|
29
|
+
const val EVENT = "ANN.BottomTabLongPressed"
|
|
30
|
+
const val SELECTED_TAB_INDEX = "selectedTabIndex"
|
|
31
|
+
const val BOTTOM_TABS_ID = "bottomTabsId"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** `ANN.BottomTabPressed`. */
|
|
35
|
+
object BottomTabPressed {
|
|
36
|
+
const val EVENT = "ANN.BottomTabPressed"
|
|
37
|
+
const val TAB_INDEX = "tabIndex"
|
|
38
|
+
const val BOTTOM_TABS_ID = "bottomTabsId"
|
|
39
|
+
/** Optional. */
|
|
40
|
+
const val SCREEN_ID = "screenId"
|
|
41
|
+
const val WAS_SELECTED = "wasSelected"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** `ANN.BottomTabSelected`. */
|
|
45
|
+
object BottomTabSelected {
|
|
46
|
+
const val EVENT = "ANN.BottomTabSelected"
|
|
47
|
+
const val SELECTED_TAB_INDEX = "selectedTabIndex"
|
|
48
|
+
const val UNSELECTED_TAB_INDEX = "unselectedTabIndex"
|
|
49
|
+
const val BOTTOM_TABS_ID = "bottomTabsId"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** `ANN.CommandCompleted`. */
|
|
53
|
+
object CommandCompleted {
|
|
54
|
+
const val EVENT = "ANN.CommandCompleted"
|
|
55
|
+
const val COMMAND_NAME = "commandName"
|
|
56
|
+
const val COMMAND_ID = "commandId"
|
|
57
|
+
const val COMPLETION_TIME = "completionTime"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** `ANN.ComponentDidAppear`. */
|
|
61
|
+
object ComponentDidAppear {
|
|
62
|
+
const val EVENT = "ANN.ComponentDidAppear"
|
|
63
|
+
const val COMPONENT_ID = "componentId"
|
|
64
|
+
const val COMPONENT_NAME = "componentName"
|
|
65
|
+
const val COMPONENT_TYPE = "componentType"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** `ANN.ComponentDidDisappear`. */
|
|
69
|
+
object ComponentDidDisappear {
|
|
70
|
+
const val EVENT = "ANN.ComponentDidDisappear"
|
|
71
|
+
const val COMPONENT_ID = "componentId"
|
|
72
|
+
const val COMPONENT_NAME = "componentName"
|
|
73
|
+
const val COMPONENT_TYPE = "componentType"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** `ANN.ComponentWillAppear`. */
|
|
77
|
+
object ComponentWillAppear {
|
|
78
|
+
const val EVENT = "ANN.ComponentWillAppear"
|
|
79
|
+
const val COMPONENT_ID = "componentId"
|
|
80
|
+
const val COMPONENT_NAME = "componentName"
|
|
81
|
+
const val COMPONENT_TYPE = "componentType"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** `ANN.HingeChanged`. */
|
|
85
|
+
object HingeChanged {
|
|
86
|
+
const val EVENT = "ANN.HingeChanged"
|
|
87
|
+
/** Optional. */
|
|
88
|
+
const val STATE = "state"
|
|
89
|
+
/** Optional. */
|
|
90
|
+
const val ANGLE = "angle"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** `ANN.ModalAttemptedToDismiss`. */
|
|
94
|
+
object ModalAttemptedToDismiss {
|
|
95
|
+
const val EVENT = "ANN.ModalAttemptedToDismiss"
|
|
96
|
+
const val COMPONENT_ID = "componentId"
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** `ANN.ModalDismissed`. */
|
|
100
|
+
object ModalDismissed {
|
|
101
|
+
const val EVENT = "ANN.ModalDismissed"
|
|
102
|
+
const val COMPONENT_ID = "componentId"
|
|
103
|
+
const val COMPONENT_NAME = "componentName"
|
|
104
|
+
const val MODALS_DISMISSED = "modalsDismissed"
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** `ANN.NativeScreenCall`. */
|
|
108
|
+
object NativeScreenCall {
|
|
109
|
+
const val EVENT = "ANN.NativeScreenCall"
|
|
110
|
+
const val COMPONENT_ID = "componentId"
|
|
111
|
+
const val CALL_ID = "callId"
|
|
112
|
+
const val KIND = "kind"
|
|
113
|
+
const val NAME = "name"
|
|
114
|
+
const val ARGS = "args"
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** `ANN.NativeScreenReleased`. */
|
|
118
|
+
object NativeScreenReleased {
|
|
119
|
+
const val EVENT = "ANN.NativeScreenReleased"
|
|
120
|
+
const val COMPONENT_ID = "componentId"
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** `ANN.NavigationButtonPressed`. */
|
|
124
|
+
object NavigationButtonPressed {
|
|
125
|
+
const val EVENT = "ANN.NavigationButtonPressed"
|
|
126
|
+
const val COMPONENT_ID = "componentId"
|
|
127
|
+
const val BUTTON_ID = "buttonId"
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** `ANN.NavigationStateChanged`. */
|
|
131
|
+
object NavigationStateChanged {
|
|
132
|
+
const val EVENT = "ANN.NavigationStateChanged"
|
|
133
|
+
const val SCREEN = "screen"
|
|
134
|
+
const val TAB = "tab"
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/** The object of `ANN.NavigationStateChanged.screen`. */
|
|
138
|
+
object NavigationStateChangedScreen {
|
|
139
|
+
const val ID = "id"
|
|
140
|
+
const val NAME = "name"
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** `ANN.ScreenInsetsChanged`. */
|
|
144
|
+
object ScreenInsetsChanged {
|
|
145
|
+
const val EVENT = "ANN.ScreenInsetsChanged"
|
|
146
|
+
const val COMPONENT_ID = "componentId"
|
|
147
|
+
const val TOP = "top"
|
|
148
|
+
const val RIGHT = "right"
|
|
149
|
+
const val BOTTOM = "bottom"
|
|
150
|
+
const val LEFT = "left"
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** `ANN.ScreenPopped`. */
|
|
154
|
+
object ScreenPopped {
|
|
155
|
+
const val EVENT = "ANN.ScreenPopped"
|
|
156
|
+
const val COMPONENT_ID = "componentId"
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** The object of `ANN.ScreenRegionsChanged.division`. */
|
|
160
|
+
object ScreenRegionRect {
|
|
161
|
+
const val X = "x"
|
|
162
|
+
const val Y = "y"
|
|
163
|
+
const val WIDTH = "width"
|
|
164
|
+
const val HEIGHT = "height"
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** `ANN.ScreenRegionsChanged`. */
|
|
168
|
+
object ScreenRegionsChanged {
|
|
169
|
+
const val EVENT = "ANN.ScreenRegionsChanged"
|
|
170
|
+
const val COMPONENT_ID = "componentId"
|
|
171
|
+
const val DIVISION = "division"
|
|
172
|
+
const val OCCLUSION = "occlusion"
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** `ANN.SearchBarCancelPressed`. */
|
|
176
|
+
object SearchBarCancelPressed {
|
|
177
|
+
const val EVENT = "ANN.SearchBarCancelPressed"
|
|
178
|
+
const val COMPONENT_ID = "componentId"
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** `ANN.SearchBarSubmitted`. */
|
|
182
|
+
object SearchBarSubmitted {
|
|
183
|
+
const val EVENT = "ANN.SearchBarSubmitted"
|
|
184
|
+
const val COMPONENT_ID = "componentId"
|
|
185
|
+
const val TEXT = "text"
|
|
186
|
+
/** Optional. */
|
|
187
|
+
const val SCOPE = "scope"
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/** `ANN.SearchBarUpdated`. */
|
|
191
|
+
object SearchBarUpdated {
|
|
192
|
+
const val EVENT = "ANN.SearchBarUpdated"
|
|
193
|
+
const val COMPONENT_ID = "componentId"
|
|
194
|
+
const val TEXT = "text"
|
|
195
|
+
const val IS_FOCUSED = "isFocused"
|
|
196
|
+
/** Optional. */
|
|
197
|
+
const val SCOPE = "scope"
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** `ANN.SearchSuggestionPicked`. */
|
|
201
|
+
object SearchSuggestionPicked {
|
|
202
|
+
const val EVENT = "ANN.SearchSuggestionPicked"
|
|
203
|
+
const val COMPONENT_ID = "componentId"
|
|
204
|
+
const val SUGGESTION_ID = "suggestionId"
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** `ANN.SheetDetentChanged`. */
|
|
208
|
+
object SheetDetentChanged {
|
|
209
|
+
const val EVENT = "ANN.SheetDetentChanged"
|
|
210
|
+
const val COMPONENT_ID = "componentId"
|
|
211
|
+
const val DETENT = "detent"
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** `ANN.SlotDestroyed`. */
|
|
215
|
+
object SlotDestroyed {
|
|
216
|
+
const val EVENT = "ANN.SlotDestroyed"
|
|
217
|
+
const val COMPONENT_ID = "componentId"
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** `ANN.SplitViewColumnsStacked`. */
|
|
221
|
+
object SplitViewColumnsStacked {
|
|
222
|
+
const val EVENT = "ANN.SplitViewColumnsStacked"
|
|
223
|
+
const val COMPONENT_ID = "componentId"
|
|
224
|
+
const val STACKED = "stacked"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
@@ -6,155 +6,184 @@ import com.facebook.react.bridge.ReactContext
|
|
|
6
6
|
import com.facebook.react.bridge.WritableMap
|
|
7
7
|
import dev.apexnative.navigation.NavigationApplication
|
|
8
8
|
import dev.apexnative.navigation.nativescreen.NativeScreenCalls
|
|
9
|
+
import dev.apexnative.navigation.react.ReloadCoordinator
|
|
9
10
|
import dev.apexnative.navigation.utils.NavigationLog
|
|
10
11
|
import org.json.JSONArray
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Sends the events `ANN.<Name>` to the JavaScript of [reactContext] through React Native's device event emitter, in
|
|
14
15
|
* the order they are sent: sent from the main thread only. Without a context, or when its React instance is gone, an
|
|
15
|
-
* event is dropped with one line in the log. The names and the
|
|
16
|
-
*
|
|
16
|
+
* event is dropped with one line in the log. The names and the keys come from [EventContract], made from the types of
|
|
17
|
+
* `src/interfaces/`.
|
|
18
|
+
*
|
|
19
|
+
* An emitter belongs to one JavaScript, as on iOS (`ANNEventEmitter`): it takes the number of the JavaScript
|
|
20
|
+
* ([generation], `ReloadCoordinator`) when it is made and drops every event silently once that number moved. React
|
|
21
|
+
* Native keeps one context across a reload (bridgeless), so without it an event of a screen of the JavaScript that
|
|
22
|
+
* went would reach the new one, which may have a screen with the same id. The core and its modules send through
|
|
23
|
+
* [current], or [of] with the number of the JavaScript a node was made for.
|
|
17
24
|
*/
|
|
18
|
-
class EventEmitter
|
|
19
|
-
|
|
25
|
+
class EventEmitter @JvmOverloads constructor(
|
|
26
|
+
private val reactContext: ReactContext?,
|
|
27
|
+
/** The number of the JavaScript this emitter sends to: by default the one that runs as it is made. */
|
|
28
|
+
val generation: Int = ReloadCoordinator.generation,
|
|
29
|
+
) {
|
|
30
|
+
/** Whether the JavaScript of this emitter still runs: its events go only then. Any thread. */
|
|
31
|
+
val isCurrent: Boolean
|
|
32
|
+
get() = ReloadCoordinator.isCurrent(generation)
|
|
33
|
+
|
|
34
|
+
/** Whether an event sent now reaches JavaScript: its JavaScript still runs, in a live React instance. */
|
|
20
35
|
val canSend: Boolean
|
|
21
|
-
get() = reactContext?.hasActiveReactInstance() == true
|
|
36
|
+
get() = isCurrent && reactContext?.hasActiveReactInstance() == true
|
|
22
37
|
|
|
23
|
-
fun emitAppLaunched() = emit(
|
|
38
|
+
fun emitAppLaunched() = emit(EventContract.AppLaunched.EVENT, Arguments.createMap())
|
|
24
39
|
|
|
25
40
|
fun emitCommandCompleted(commandName: String, commandId: String, completionTime: Long) =
|
|
26
|
-
emit(
|
|
27
|
-
putString(
|
|
28
|
-
putString(
|
|
29
|
-
putDouble(
|
|
41
|
+
emit(EventContract.CommandCompleted.EVENT, Arguments.createMap().apply {
|
|
42
|
+
putString(EventContract.CommandCompleted.COMMAND_NAME, commandName)
|
|
43
|
+
putString(EventContract.CommandCompleted.COMMAND_ID, commandId)
|
|
44
|
+
putDouble(EventContract.CommandCompleted.COMPLETION_TIME, completionTime.toDouble())
|
|
30
45
|
})
|
|
31
46
|
|
|
32
47
|
fun emitComponentWillAppear(componentId: String, componentName: String, type: ComponentType) =
|
|
33
|
-
emit(
|
|
48
|
+
emit(EventContract.ComponentWillAppear.EVENT, component(componentId, componentName, type))
|
|
34
49
|
|
|
35
50
|
fun emitComponentDidAppear(componentId: String, componentName: String, type: ComponentType) =
|
|
36
|
-
emit(
|
|
51
|
+
emit(EventContract.ComponentDidAppear.EVENT, component(componentId, componentName, type))
|
|
37
52
|
|
|
38
53
|
fun emitComponentDidDisappear(componentId: String, componentName: String, type: ComponentType) =
|
|
39
|
-
emit(
|
|
54
|
+
emit(EventContract.ComponentDidDisappear.EVENT, component(componentId, componentName, type))
|
|
40
55
|
|
|
41
56
|
/** The screen the user sees (`null` for none) and the selected tab of the tabs it is in (`null` out of tabs). */
|
|
42
57
|
fun emitNavigationStateChanged(screenId: String?, screenName: String?, tab: Int?) =
|
|
43
|
-
emit(
|
|
58
|
+
emit(EventContract.NavigationStateChanged.EVENT, Arguments.createMap().apply {
|
|
59
|
+
val keys = EventContract.NavigationStateChanged
|
|
44
60
|
if (screenId == null) {
|
|
45
|
-
putNull(
|
|
61
|
+
putNull(keys.SCREEN)
|
|
46
62
|
} else {
|
|
47
|
-
putMap(
|
|
48
|
-
putString(
|
|
49
|
-
putString(
|
|
63
|
+
putMap(keys.SCREEN, Arguments.createMap().apply {
|
|
64
|
+
putString(EventContract.NavigationStateChangedScreen.ID, screenId)
|
|
65
|
+
putString(EventContract.NavigationStateChangedScreen.NAME, screenName)
|
|
50
66
|
})
|
|
51
67
|
}
|
|
52
|
-
if (tab == null) putNull(
|
|
68
|
+
if (tab == null) putNull(keys.TAB) else putInt(keys.TAB, tab)
|
|
53
69
|
})
|
|
54
70
|
|
|
55
|
-
fun emitScreenPopped(componentId: String) = emit(
|
|
71
|
+
fun emitScreenPopped(componentId: String) = emit(EventContract.ScreenPopped.EVENT, withId(componentId))
|
|
56
72
|
|
|
57
73
|
fun emitNavigationButtonPressed(componentId: String, buttonId: String) =
|
|
58
|
-
emit(
|
|
74
|
+
emit(EventContract.NavigationButtonPressed.EVENT, withId(componentId).apply {
|
|
75
|
+
putString(EventContract.NavigationButtonPressed.BUTTON_ID, buttonId)
|
|
76
|
+
})
|
|
59
77
|
|
|
60
78
|
fun emitBottomTabSelected(selectedTabIndex: Int, unselectedTabIndex: Int, bottomTabsId: String) =
|
|
61
|
-
emit(
|
|
62
|
-
putInt(
|
|
63
|
-
putInt(
|
|
64
|
-
putString(
|
|
79
|
+
emit(EventContract.BottomTabSelected.EVENT, Arguments.createMap().apply {
|
|
80
|
+
putInt(EventContract.BottomTabSelected.SELECTED_TAB_INDEX, selectedTabIndex)
|
|
81
|
+
putInt(EventContract.BottomTabSelected.UNSELECTED_TAB_INDEX, unselectedTabIndex)
|
|
82
|
+
putString(EventContract.BottomTabSelected.BOTTOM_TABS_ID, bottomTabsId)
|
|
65
83
|
})
|
|
66
84
|
|
|
67
85
|
fun emitBottomTabPressed(tabIndex: Int, bottomTabsId: String, screenId: String?, wasSelected: Boolean) =
|
|
68
|
-
emit(
|
|
69
|
-
putInt(
|
|
70
|
-
putString(
|
|
71
|
-
screenId?.let { putString(
|
|
72
|
-
putBoolean(
|
|
86
|
+
emit(EventContract.BottomTabPressed.EVENT, Arguments.createMap().apply {
|
|
87
|
+
putInt(EventContract.BottomTabPressed.TAB_INDEX, tabIndex)
|
|
88
|
+
putString(EventContract.BottomTabPressed.BOTTOM_TABS_ID, bottomTabsId)
|
|
89
|
+
screenId?.let { putString(EventContract.BottomTabPressed.SCREEN_ID, it) }
|
|
90
|
+
putBoolean(EventContract.BottomTabPressed.WAS_SELECTED, wasSelected)
|
|
73
91
|
})
|
|
74
92
|
|
|
75
93
|
fun emitBottomTabLongPressed(selectedTabIndex: Int, bottomTabsId: String) =
|
|
76
|
-
emit(
|
|
77
|
-
putInt(
|
|
78
|
-
putString(
|
|
94
|
+
emit(EventContract.BottomTabLongPressed.EVENT, Arguments.createMap().apply {
|
|
95
|
+
putInt(EventContract.BottomTabLongPressed.SELECTED_TAB_INDEX, selectedTabIndex)
|
|
96
|
+
putString(EventContract.BottomTabLongPressed.BOTTOM_TABS_ID, bottomTabsId)
|
|
79
97
|
})
|
|
80
98
|
|
|
81
99
|
/** The id and the name (without `slot:`) of the screen the modal showed, and how many modals went. */
|
|
82
100
|
fun emitModalDismissed(componentId: String, componentName: String, modalsDismissed: Int) =
|
|
83
|
-
emit(
|
|
84
|
-
putString(
|
|
85
|
-
putInt(
|
|
101
|
+
emit(EventContract.ModalDismissed.EVENT, withId(componentId).apply {
|
|
102
|
+
putString(EventContract.ModalDismissed.COMPONENT_NAME, componentName)
|
|
103
|
+
putInt(EventContract.ModalDismissed.MODALS_DISMISSED, modalsDismissed)
|
|
86
104
|
})
|
|
87
105
|
|
|
88
|
-
fun emitModalAttemptedToDismiss(componentId: String) =
|
|
106
|
+
fun emitModalAttemptedToDismiss(componentId: String) =
|
|
107
|
+
emit(EventContract.ModalAttemptedToDismiss.EVENT, withId(componentId))
|
|
89
108
|
|
|
90
109
|
/** [detent]: `medium`, `large`, or a height in dp. */
|
|
91
110
|
fun emitSheetDetentChanged(componentId: String, detent: Any) =
|
|
92
|
-
emit(
|
|
111
|
+
emit(EventContract.SheetDetentChanged.EVENT, withId(componentId).apply {
|
|
93
112
|
when (detent) {
|
|
94
|
-
is Number -> putDouble(
|
|
95
|
-
else -> putString(
|
|
113
|
+
is Number -> putDouble(EventContract.SheetDetentChanged.DETENT, detent.toDouble())
|
|
114
|
+
else -> putString(EventContract.SheetDetentChanged.DETENT, detent.toString())
|
|
96
115
|
}
|
|
97
116
|
})
|
|
98
117
|
|
|
99
118
|
fun emitSearchBarUpdated(componentId: String, text: String, isFocused: Boolean, scope: String?) =
|
|
100
|
-
emit(
|
|
101
|
-
putString(
|
|
102
|
-
putBoolean(
|
|
103
|
-
scope?.let { putString(
|
|
119
|
+
emit(EventContract.SearchBarUpdated.EVENT, withId(componentId).apply {
|
|
120
|
+
putString(EventContract.SearchBarUpdated.TEXT, text)
|
|
121
|
+
putBoolean(EventContract.SearchBarUpdated.IS_FOCUSED, isFocused)
|
|
122
|
+
scope?.let { putString(EventContract.SearchBarUpdated.SCOPE, it) }
|
|
104
123
|
})
|
|
105
124
|
|
|
106
125
|
fun emitSearchBarSubmitted(componentId: String, text: String, scope: String?) =
|
|
107
|
-
emit(
|
|
108
|
-
putString(
|
|
109
|
-
scope?.let { putString(
|
|
126
|
+
emit(EventContract.SearchBarSubmitted.EVENT, withId(componentId).apply {
|
|
127
|
+
putString(EventContract.SearchBarSubmitted.TEXT, text)
|
|
128
|
+
scope?.let { putString(EventContract.SearchBarSubmitted.SCOPE, it) }
|
|
110
129
|
})
|
|
111
130
|
|
|
112
|
-
fun emitSearchBarCancelPressed(componentId: String) =
|
|
131
|
+
fun emitSearchBarCancelPressed(componentId: String) =
|
|
132
|
+
emit(EventContract.SearchBarCancelPressed.EVENT, withId(componentId))
|
|
113
133
|
|
|
114
134
|
fun emitSearchSuggestionPicked(componentId: String, suggestionId: String) =
|
|
115
|
-
emit(
|
|
135
|
+
emit(EventContract.SearchSuggestionPicked.EVENT, withId(componentId).apply {
|
|
136
|
+
putString(EventContract.SearchSuggestionPicked.SUGGESTION_ID, suggestionId)
|
|
137
|
+
})
|
|
116
138
|
|
|
117
139
|
fun emitSplitViewColumnsStacked(componentId: String, stacked: Boolean) =
|
|
118
|
-
emit(
|
|
140
|
+
emit(EventContract.SplitViewColumnsStacked.EVENT, withId(componentId).apply {
|
|
141
|
+
putBoolean(EventContract.SplitViewColumnsStacked.STACKED, stacked)
|
|
142
|
+
})
|
|
119
143
|
|
|
120
|
-
fun emitSlotDestroyed(componentId: String) = emit(
|
|
144
|
+
fun emitSlotDestroyed(componentId: String) = emit(EventContract.SlotDestroyed.EVENT, withId(componentId))
|
|
121
145
|
|
|
122
146
|
/** [insets]: `{ top, right, bottom, left }`. */
|
|
123
147
|
fun emitScreenInsetsChanged(componentId: String, insets: WritableMap) =
|
|
124
|
-
emit(
|
|
148
|
+
emit(EventContract.ScreenInsetsChanged.EVENT, withId(componentId).apply { merge(insets) })
|
|
125
149
|
|
|
126
150
|
/** [regions]: `{ division, occlusion }`. */
|
|
127
151
|
fun emitScreenRegionsChanged(componentId: String, regions: WritableMap) =
|
|
128
|
-
emit(
|
|
152
|
+
emit(EventContract.ScreenRegionsChanged.EVENT, withId(componentId).apply { merge(regions) })
|
|
129
153
|
|
|
130
154
|
/** [state]: `{ placement, layout, front, hidden }`. */
|
|
131
155
|
fun emitArrangementChanged(componentId: String, state: WritableMap) =
|
|
132
|
-
emit(
|
|
156
|
+
emit(EventContract.ArrangementChanged.EVENT, withId(componentId).apply { merge(state) })
|
|
133
157
|
|
|
134
158
|
/** [value]: `{ state, angle? }`, or `{}` without a hinge. */
|
|
135
|
-
fun emitHingeChanged(value: WritableMap) = emit(
|
|
159
|
+
fun emitHingeChanged(value: WritableMap) = emit(EventContract.HingeChanged.EVENT, value)
|
|
136
160
|
|
|
137
161
|
/** [kind]: `function` or `command`; [arguments] as JSON, which JavaScript gets as `args`. */
|
|
138
162
|
fun emitNativeScreenCall(componentId: String, callId: String, kind: String, name: String, arguments: JSONArray) =
|
|
139
|
-
emit(
|
|
140
|
-
putString(
|
|
141
|
-
putString(
|
|
142
|
-
putString(
|
|
143
|
-
putArray(
|
|
163
|
+
emit(EventContract.NativeScreenCall.EVENT, withId(componentId).apply {
|
|
164
|
+
putString(EventContract.NativeScreenCall.CALL_ID, callId)
|
|
165
|
+
putString(EventContract.NativeScreenCall.KIND, kind)
|
|
166
|
+
putString(EventContract.NativeScreenCall.NAME, name)
|
|
167
|
+
putArray(EventContract.NativeScreenCall.ARGS, NativeScreenCalls.toArguments(arguments))
|
|
144
168
|
})
|
|
145
169
|
|
|
146
|
-
fun emitNativeScreenReleased(componentId: String) =
|
|
170
|
+
fun emitNativeScreenReleased(componentId: String) =
|
|
171
|
+
emit(EventContract.NativeScreenReleased.EVENT, withId(componentId))
|
|
147
172
|
|
|
173
|
+
// The three appearance events have the same keys.
|
|
148
174
|
private fun component(componentId: String, componentName: String, type: ComponentType): WritableMap =
|
|
149
175
|
withId(componentId).apply {
|
|
150
|
-
putString(
|
|
151
|
-
putString(
|
|
176
|
+
putString(EventContract.ComponentDidAppear.COMPONENT_NAME, componentName)
|
|
177
|
+
putString(EventContract.ComponentDidAppear.COMPONENT_TYPE, type.jsName)
|
|
152
178
|
}
|
|
153
179
|
|
|
180
|
+
// The events of a screen carry its id under the same key.
|
|
154
181
|
private fun withId(componentId: String): WritableMap =
|
|
155
|
-
Arguments.createMap().apply { putString(
|
|
182
|
+
Arguments.createMap().apply { putString(EventContract.ScreenPopped.COMPONENT_ID, componentId) }
|
|
156
183
|
|
|
157
184
|
private fun emit(name: String, data: WritableMap) {
|
|
185
|
+
// The JavaScript of this emitter went: the new one never had its screens.
|
|
186
|
+
if (!isCurrent) return
|
|
158
187
|
val context = reactContext
|
|
159
188
|
if (context == null || !context.hasActiveReactInstance()) {
|
|
160
189
|
Log.w(NavigationLog.TAG, "Could not send event $name. React context is null!")
|
|
@@ -164,36 +193,48 @@ class EventEmitter(private val reactContext: ReactContext?) {
|
|
|
164
193
|
}
|
|
165
194
|
|
|
166
195
|
companion object {
|
|
167
|
-
/**
|
|
196
|
+
/**
|
|
197
|
+
* The sender to the JavaScript that runs now: the React context of the app's `ReactGateway`. It goes silent
|
|
198
|
+
* once that JavaScript goes (a reload): one kept for later sends nothing to the next.
|
|
199
|
+
*/
|
|
168
200
|
@JvmStatic
|
|
169
|
-
fun current(): EventEmitter =
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const val
|
|
182
|
-
const val
|
|
183
|
-
const val
|
|
184
|
-
const val
|
|
185
|
-
const val
|
|
186
|
-
const val
|
|
187
|
-
const val
|
|
188
|
-
const val
|
|
189
|
-
const val
|
|
190
|
-
const val
|
|
191
|
-
const val
|
|
192
|
-
const val
|
|
193
|
-
const val
|
|
194
|
-
const val
|
|
195
|
-
const val
|
|
196
|
-
const val
|
|
197
|
-
const val
|
|
201
|
+
fun current(): EventEmitter = of(ReloadCoordinator.generation)
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* The sender to the JavaScript [generation] (a node's `jsGeneration`): the React context of the app's
|
|
205
|
+
* `ReactGateway` while that JavaScript runs, silent once it went, so an event of a screen made for the
|
|
206
|
+
* JavaScript that went never reaches the new one.
|
|
207
|
+
*/
|
|
208
|
+
internal fun of(generation: Int): EventEmitter =
|
|
209
|
+
EventEmitter(NavigationApplication.instanceOrNull?.reactGatewayOrNull?.currentReactContext, generation)
|
|
210
|
+
|
|
211
|
+
// The names of the events, for modules outside the library; inside it, [EventContract] has them with their
|
|
212
|
+
// keys.
|
|
213
|
+
const val APP_LAUNCHED = EventContract.AppLaunched.EVENT
|
|
214
|
+
const val COMMAND_COMPLETED = EventContract.CommandCompleted.EVENT
|
|
215
|
+
const val COMPONENT_WILL_APPEAR = EventContract.ComponentWillAppear.EVENT
|
|
216
|
+
const val COMPONENT_DID_APPEAR = EventContract.ComponentDidAppear.EVENT
|
|
217
|
+
const val COMPONENT_DID_DISAPPEAR = EventContract.ComponentDidDisappear.EVENT
|
|
218
|
+
const val NAVIGATION_STATE_CHANGED = EventContract.NavigationStateChanged.EVENT
|
|
219
|
+
const val SCREEN_POPPED = EventContract.ScreenPopped.EVENT
|
|
220
|
+
const val NAVIGATION_BUTTON_PRESSED = EventContract.NavigationButtonPressed.EVENT
|
|
221
|
+
const val BOTTOM_TAB_SELECTED = EventContract.BottomTabSelected.EVENT
|
|
222
|
+
const val BOTTOM_TAB_PRESSED = EventContract.BottomTabPressed.EVENT
|
|
223
|
+
const val BOTTOM_TAB_LONG_PRESSED = EventContract.BottomTabLongPressed.EVENT
|
|
224
|
+
const val MODAL_DISMISSED = EventContract.ModalDismissed.EVENT
|
|
225
|
+
const val MODAL_ATTEMPTED_TO_DISMISS = EventContract.ModalAttemptedToDismiss.EVENT
|
|
226
|
+
const val SHEET_DETENT_CHANGED = EventContract.SheetDetentChanged.EVENT
|
|
227
|
+
const val SEARCH_BAR_UPDATED = EventContract.SearchBarUpdated.EVENT
|
|
228
|
+
const val SEARCH_BAR_SUBMITTED = EventContract.SearchBarSubmitted.EVENT
|
|
229
|
+
const val SEARCH_BAR_CANCEL_PRESSED = EventContract.SearchBarCancelPressed.EVENT
|
|
230
|
+
const val SEARCH_SUGGESTION_PICKED = EventContract.SearchSuggestionPicked.EVENT
|
|
231
|
+
const val SPLIT_VIEW_COLUMNS_STACKED = EventContract.SplitViewColumnsStacked.EVENT
|
|
232
|
+
const val SLOT_DESTROYED = EventContract.SlotDestroyed.EVENT
|
|
233
|
+
const val SCREEN_INSETS_CHANGED = EventContract.ScreenInsetsChanged.EVENT
|
|
234
|
+
const val SCREEN_REGIONS_CHANGED = EventContract.ScreenRegionsChanged.EVENT
|
|
235
|
+
const val ARRANGEMENT_CHANGED = EventContract.ArrangementChanged.EVENT
|
|
236
|
+
const val HINGE_CHANGED = EventContract.HingeChanged.EVENT
|
|
237
|
+
const val NATIVE_SCREEN_CALL = EventContract.NativeScreenCall.EVENT
|
|
238
|
+
const val NATIVE_SCREEN_RELEASED = EventContract.NativeScreenReleased.EVENT
|
|
198
239
|
}
|
|
199
240
|
}
|