@symbiote-native/navigation 1.0.0
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/LICENSE +21 -0
- package/build/angular/drawer/index.d.ts +76 -0
- package/build/angular/drawer/index.js +508 -0
- package/build/angular/drawer-screen.directive.d.ts +14 -0
- package/build/angular/drawer-screen.directive.js +87 -0
- package/build/angular/index.d.ts +23 -0
- package/build/angular/index.js +22 -0
- package/build/angular/injectors/index.d.ts +13 -0
- package/build/angular/injectors/index.js +8 -0
- package/build/angular/injectors/inject-drawer-navigation.d.ts +4 -0
- package/build/angular/injectors/inject-drawer-navigation.js +12 -0
- package/build/angular/injectors/inject-focus-effect.d.ts +2 -0
- package/build/angular/injectors/inject-focus-effect.js +29 -0
- package/build/angular/injectors/inject-is-focused.d.ts +2 -0
- package/build/angular/injectors/inject-is-focused.js +20 -0
- package/build/angular/injectors/inject-navigation-state.d.ts +3 -0
- package/build/angular/injectors/inject-navigation-state.js +35 -0
- package/build/angular/injectors/inject-navigation.d.ts +7 -0
- package/build/angular/injectors/inject-navigation.js +16 -0
- package/build/angular/injectors/inject-route.d.ts +3 -0
- package/build/angular/injectors/inject-route.js +20 -0
- package/build/angular/injectors/inject-stack-navigation.d.ts +4 -0
- package/build/angular/injectors/inject-stack-navigation.js +15 -0
- package/build/angular/injectors/inject-tab-navigation.d.ts +4 -0
- package/build/angular/injectors/inject-tab-navigation.js +11 -0
- package/build/angular/linking.d.ts +3 -0
- package/build/angular/linking.js +43 -0
- package/build/angular/navigation-context.service.d.ts +13 -0
- package/build/angular/navigation-context.service.js +105 -0
- package/build/angular/navigation-scope.directive.d.ts +10 -0
- package/build/angular/navigation-scope.directive.js +90 -0
- package/build/angular/screen.directive.d.ts +22 -0
- package/build/angular/screen.directive.js +90 -0
- package/build/angular/search-bar-ref.directive.d.ts +10 -0
- package/build/angular/search-bar-ref.directive.js +88 -0
- package/build/angular/stack/index.d.ts +55 -0
- package/build/angular/stack/index.js +386 -0
- package/build/angular/tab-screen.directive.d.ts +14 -0
- package/build/angular/tab-screen.directive.js +87 -0
- package/build/angular/tabs/index.d.ts +42 -0
- package/build/angular/tabs/index.js +263 -0
- package/build/core/constants.d.ts +27 -0
- package/build/core/constants.js +61 -0
- package/build/core/drawer-options/index.d.ts +64 -0
- package/build/core/drawer-options/index.js +200 -0
- package/build/core/drawer-router-state/index.d.ts +21 -0
- package/build/core/drawer-router-state/index.js +40 -0
- package/build/core/guards.d.ts +2 -0
- package/build/core/guards.js +22 -0
- package/build/core/header-bar-buttons.d.ts +9 -0
- package/build/core/header-bar-buttons.js +163 -0
- package/build/core/index.d.ts +29 -0
- package/build/core/index.js +32 -0
- package/build/core/linking-config/index.d.ts +13 -0
- package/build/core/linking-config/index.js +171 -0
- package/build/core/navigation-events/index.d.ts +16 -0
- package/build/core/navigation-events/index.js +57 -0
- package/build/core/navigator-handles/index.d.ts +30 -0
- package/build/core/navigator-handles/index.js +15 -0
- package/build/core/navigator-props.d.ts +216 -0
- package/build/core/navigator-props.js +7 -0
- package/build/core/navigator-state/index.d.ts +36 -0
- package/build/core/navigator-state/index.js +81 -0
- package/build/core/render-drawer.d.ts +13 -0
- package/build/core/render-drawer.js +88 -0
- package/build/core/render-stack.d.ts +35 -0
- package/build/core/render-stack.js +294 -0
- package/build/core/render-tabs.d.ts +20 -0
- package/build/core/render-tabs.js +97 -0
- package/build/core/screen-options.d.ts +4 -0
- package/build/core/screen-options.js +133 -0
- package/build/core/search-bar-commands.d.ts +10 -0
- package/build/core/search-bar-commands.js +42 -0
- package/build/core/state-persistence/index.d.ts +3 -0
- package/build/core/state-persistence/index.js +23 -0
- package/build/core/tab-options.d.ts +13 -0
- package/build/core/tab-options.js +10 -0
- package/build/core/tab-router-state/index.d.ts +19 -0
- package/build/core/tab-router-state/index.js +51 -0
- package/build/react/collect-registry.d.ts +4 -0
- package/build/react/collect-registry.js +15 -0
- package/build/react/drawer/index.d.ts +29 -0
- package/build/react/drawer/index.js +277 -0
- package/build/react/drawer-screen.d.ts +14 -0
- package/build/react/drawer-screen.js +8 -0
- package/build/react/hooks/index.d.ts +12 -0
- package/build/react/hooks/index.js +8 -0
- package/build/react/hooks/use-drawer-navigation.d.ts +4 -0
- package/build/react/hooks/use-drawer-navigation.js +12 -0
- package/build/react/hooks/use-focus-effect.d.ts +2 -0
- package/build/react/hooks/use-focus-effect.js +29 -0
- package/build/react/hooks/use-is-focused.d.ts +1 -0
- package/build/react/hooks/use-is-focused.js +22 -0
- package/build/react/hooks/use-navigation-state/index.d.ts +2 -0
- package/build/react/hooks/use-navigation-state/index.js +39 -0
- package/build/react/hooks/use-navigation.d.ts +7 -0
- package/build/react/hooks/use-navigation.js +16 -0
- package/build/react/hooks/use-route.d.ts +2 -0
- package/build/react/hooks/use-route.js +8 -0
- package/build/react/hooks/use-stack-navigation.d.ts +4 -0
- package/build/react/hooks/use-stack-navigation.js +14 -0
- package/build/react/hooks/use-tab-navigation.d.ts +4 -0
- package/build/react/hooks/use-tab-navigation.js +12 -0
- package/build/react/index.d.ts +24 -0
- package/build/react/index.js +21 -0
- package/build/react/linking.d.ts +3 -0
- package/build/react/linking.js +47 -0
- package/build/react/navigation-context.d.ts +10 -0
- package/build/react/navigation-context.js +22 -0
- package/build/react/screen.d.ts +22 -0
- package/build/react/screen.js +7 -0
- package/build/react/stack/index.d.ts +13 -0
- package/build/react/stack/index.js +202 -0
- package/build/react/tab-screen.d.ts +15 -0
- package/build/react/tab-screen.js +8 -0
- package/build/react/tabs/index.d.ts +12 -0
- package/build/react/tabs/index.js +116 -0
- package/build/register.d.ts +7 -0
- package/build/register.js +58 -0
- package/build/vue/composables/index.d.ts +12 -0
- package/build/vue/composables/index.js +8 -0
- package/build/vue/composables/use-drawer-navigation.d.ts +5 -0
- package/build/vue/composables/use-drawer-navigation.js +15 -0
- package/build/vue/composables/use-focus-effect.d.ts +1 -0
- package/build/vue/composables/use-focus-effect.js +31 -0
- package/build/vue/composables/use-is-focused.d.ts +2 -0
- package/build/vue/composables/use-is-focused.js +28 -0
- package/build/vue/composables/use-navigation-state.d.ts +3 -0
- package/build/vue/composables/use-navigation-state.js +29 -0
- package/build/vue/composables/use-navigation.d.ts +8 -0
- package/build/vue/composables/use-navigation.js +13 -0
- package/build/vue/composables/use-route.d.ts +3 -0
- package/build/vue/composables/use-route.js +9 -0
- package/build/vue/composables/use-stack-navigation.d.ts +5 -0
- package/build/vue/composables/use-stack-navigation.js +18 -0
- package/build/vue/composables/use-tab-navigation.d.ts +5 -0
- package/build/vue/composables/use-tab-navigation.js +15 -0
- package/build/vue/drawer/index.d.ts +19 -0
- package/build/vue/drawer/index.js +390 -0
- package/build/vue/drawer-screen.d.ts +14 -0
- package/build/vue/drawer-screen.js +12 -0
- package/build/vue/index.d.ts +21 -0
- package/build/vue/index.js +19 -0
- package/build/vue/linking.d.ts +3 -0
- package/build/vue/linking.js +57 -0
- package/build/vue/navigation-context.d.ts +16 -0
- package/build/vue/navigation-context.js +65 -0
- package/build/vue/screen.d.ts +21 -0
- package/build/vue/screen.js +12 -0
- package/build/vue/stack/index.d.ts +9 -0
- package/build/vue/stack/index.js +279 -0
- package/build/vue/tab-screen.d.ts +14 -0
- package/build/vue/tab-screen.js +11 -0
- package/build/vue/tabs/index.d.ts +10 -0
- package/build/vue/tabs/index.js +209 -0
- package/build-ngc/angular/drawer/index.d.ts +79 -0
- package/build-ngc/angular/drawer/index.js +479 -0
- package/build-ngc/angular/drawer/index.js.map +1 -0
- package/build-ngc/angular/drawer-screen.directive.d.ts +17 -0
- package/build-ngc/angular/drawer-screen.directive.js +32 -0
- package/build-ngc/angular/drawer-screen.directive.js.map +1 -0
- package/build-ngc/angular/drawer.d.ts +79 -0
- package/build-ngc/angular/drawer.js +475 -0
- package/build-ngc/angular/drawer.js.map +1 -0
- package/build-ngc/angular/index.d.ts +23 -0
- package/build-ngc/angular/index.js +23 -0
- package/build-ngc/angular/index.js.map +1 -0
- package/build-ngc/angular/injectors/index.d.ts +13 -0
- package/build-ngc/angular/injectors/index.js +9 -0
- package/build-ngc/angular/injectors/index.js.map +1 -0
- package/build-ngc/angular/injectors/inject-drawer-navigation.d.ts +4 -0
- package/build-ngc/angular/injectors/inject-drawer-navigation.js +13 -0
- package/build-ngc/angular/injectors/inject-drawer-navigation.js.map +1 -0
- package/build-ngc/angular/injectors/inject-focus-effect.d.ts +2 -0
- package/build-ngc/angular/injectors/inject-focus-effect.js +30 -0
- package/build-ngc/angular/injectors/inject-focus-effect.js.map +1 -0
- package/build-ngc/angular/injectors/inject-is-focused.d.ts +2 -0
- package/build-ngc/angular/injectors/inject-is-focused.js +22 -0
- package/build-ngc/angular/injectors/inject-is-focused.js.map +1 -0
- package/build-ngc/angular/injectors/inject-navigation-state.d.ts +3 -0
- package/build-ngc/angular/injectors/inject-navigation-state.js +37 -0
- package/build-ngc/angular/injectors/inject-navigation-state.js.map +1 -0
- package/build-ngc/angular/injectors/inject-navigation.d.ts +7 -0
- package/build-ngc/angular/injectors/inject-navigation.js +17 -0
- package/build-ngc/angular/injectors/inject-navigation.js.map +1 -0
- package/build-ngc/angular/injectors/inject-route.d.ts +3 -0
- package/build-ngc/angular/injectors/inject-route.js +21 -0
- package/build-ngc/angular/injectors/inject-route.js.map +1 -0
- package/build-ngc/angular/injectors/inject-stack-navigation.d.ts +4 -0
- package/build-ngc/angular/injectors/inject-stack-navigation.js +16 -0
- package/build-ngc/angular/injectors/inject-stack-navigation.js.map +1 -0
- package/build-ngc/angular/injectors/inject-tab-navigation.d.ts +4 -0
- package/build-ngc/angular/injectors/inject-tab-navigation.js +12 -0
- package/build-ngc/angular/injectors/inject-tab-navigation.js.map +1 -0
- package/build-ngc/angular/linking.d.ts +3 -0
- package/build-ngc/angular/linking.js +44 -0
- package/build-ngc/angular/linking.js.map +1 -0
- package/build-ngc/angular/navigation-context.service.d.ts +16 -0
- package/build-ngc/angular/navigation-context.service.js +63 -0
- package/build-ngc/angular/navigation-context.service.js.map +1 -0
- package/build-ngc/angular/navigation-scope.directive.d.ts +13 -0
- package/build-ngc/angular/navigation-scope.directive.js +42 -0
- package/build-ngc/angular/navigation-scope.directive.js.map +1 -0
- package/build-ngc/angular/screen.directive.d.ts +25 -0
- package/build-ngc/angular/screen.directive.js +35 -0
- package/build-ngc/angular/screen.directive.js.map +1 -0
- package/build-ngc/angular/search-bar-ref.directive.d.ts +13 -0
- package/build-ngc/angular/search-bar-ref.directive.js +44 -0
- package/build-ngc/angular/search-bar-ref.directive.js.map +1 -0
- package/build-ngc/angular/stack/index.d.ts +58 -0
- package/build-ngc/angular/stack/index.js +406 -0
- package/build-ngc/angular/stack/index.js.map +1 -0
- package/build-ngc/angular/stack.d.ts +58 -0
- package/build-ngc/angular/stack.js +402 -0
- package/build-ngc/angular/stack.js.map +1 -0
- package/build-ngc/angular/tab-screen.directive.d.ts +17 -0
- package/build-ngc/angular/tab-screen.directive.js +32 -0
- package/build-ngc/angular/tab-screen.directive.js.map +1 -0
- package/build-ngc/angular/tabs/index.d.ts +45 -0
- package/build-ngc/angular/tabs/index.js +231 -0
- package/build-ngc/angular/tabs/index.js.map +1 -0
- package/build-ngc/angular/tabs.d.ts +45 -0
- package/build-ngc/angular/tabs.js +231 -0
- package/build-ngc/angular/tabs.js.map +1 -0
- package/build-ngc/core/constants.d.ts +27 -0
- package/build-ngc/core/constants.js +62 -0
- package/build-ngc/core/constants.js.map +1 -0
- package/build-ngc/core/drawer-options/index.d.ts +64 -0
- package/build-ngc/core/drawer-options/index.js +201 -0
- package/build-ngc/core/drawer-options/index.js.map +1 -0
- package/build-ngc/core/drawer-options.d.ts +64 -0
- package/build-ngc/core/drawer-options.js +201 -0
- package/build-ngc/core/drawer-options.js.map +1 -0
- package/build-ngc/core/drawer-router-state/index.d.ts +21 -0
- package/build-ngc/core/drawer-router-state/index.js +41 -0
- package/build-ngc/core/drawer-router-state/index.js.map +1 -0
- package/build-ngc/core/drawer-router-state.d.ts +21 -0
- package/build-ngc/core/drawer-router-state.js +41 -0
- package/build-ngc/core/drawer-router-state.js.map +1 -0
- package/build-ngc/core/guards.d.ts +2 -0
- package/build-ngc/core/guards.js +23 -0
- package/build-ngc/core/guards.js.map +1 -0
- package/build-ngc/core/header-bar-buttons.d.ts +9 -0
- package/build-ngc/core/header-bar-buttons.js +164 -0
- package/build-ngc/core/header-bar-buttons.js.map +1 -0
- package/build-ngc/core/href.d.ts +16 -0
- package/build-ngc/core/href.js +55 -0
- package/build-ngc/core/href.js.map +1 -0
- package/build-ngc/core/index.d.ts +29 -0
- package/build-ngc/core/index.js +33 -0
- package/build-ngc/core/index.js.map +1 -0
- package/build-ngc/core/linking-config/index.d.ts +13 -0
- package/build-ngc/core/linking-config/index.js +172 -0
- package/build-ngc/core/linking-config/index.js.map +1 -0
- package/build-ngc/core/linking-config.d.ts +13 -0
- package/build-ngc/core/linking-config.js +172 -0
- package/build-ngc/core/linking-config.js.map +1 -0
- package/build-ngc/core/navigation-events/index.d.ts +16 -0
- package/build-ngc/core/navigation-events/index.js +58 -0
- package/build-ngc/core/navigation-events/index.js.map +1 -0
- package/build-ngc/core/navigation-events.d.ts +16 -0
- package/build-ngc/core/navigation-events.js +58 -0
- package/build-ngc/core/navigation-events.js.map +1 -0
- package/build-ngc/core/navigator-handles/index.d.ts +30 -0
- package/build-ngc/core/navigator-handles/index.js +16 -0
- package/build-ngc/core/navigator-handles/index.js.map +1 -0
- package/build-ngc/core/navigator-handles.d.ts +30 -0
- package/build-ngc/core/navigator-handles.js +16 -0
- package/build-ngc/core/navigator-handles.js.map +1 -0
- package/build-ngc/core/navigator-props.d.ts +216 -0
- package/build-ngc/core/navigator-props.js +8 -0
- package/build-ngc/core/navigator-props.js.map +1 -0
- package/build-ngc/core/navigator-state/index.d.ts +36 -0
- package/build-ngc/core/navigator-state/index.js +82 -0
- package/build-ngc/core/navigator-state/index.js.map +1 -0
- package/build-ngc/core/navigator-state.d.ts +36 -0
- package/build-ngc/core/navigator-state.js +82 -0
- package/build-ngc/core/navigator-state.js.map +1 -0
- package/build-ngc/core/render-drawer.d.ts +13 -0
- package/build-ngc/core/render-drawer.js +89 -0
- package/build-ngc/core/render-drawer.js.map +1 -0
- package/build-ngc/core/render-stack.d.ts +35 -0
- package/build-ngc/core/render-stack.js +295 -0
- package/build-ngc/core/render-stack.js.map +1 -0
- package/build-ngc/core/render-tabs.d.ts +20 -0
- package/build-ngc/core/render-tabs.js +98 -0
- package/build-ngc/core/render-tabs.js.map +1 -0
- package/build-ngc/core/screen-options.d.ts +4 -0
- package/build-ngc/core/screen-options.js +134 -0
- package/build-ngc/core/screen-options.js.map +1 -0
- package/build-ngc/core/search-bar-commands.d.ts +10 -0
- package/build-ngc/core/search-bar-commands.js +43 -0
- package/build-ngc/core/search-bar-commands.js.map +1 -0
- package/build-ngc/core/search-params.d.ts +9 -0
- package/build-ngc/core/search-params.js +60 -0
- package/build-ngc/core/search-params.js.map +1 -0
- package/build-ngc/core/state-persistence/index.d.ts +3 -0
- package/build-ngc/core/state-persistence/index.js +24 -0
- package/build-ngc/core/state-persistence/index.js.map +1 -0
- package/build-ngc/core/state-persistence.d.ts +3 -0
- package/build-ngc/core/state-persistence.js +24 -0
- package/build-ngc/core/state-persistence.js.map +1 -0
- package/build-ngc/core/tab-options.d.ts +13 -0
- package/build-ngc/core/tab-options.js +11 -0
- package/build-ngc/core/tab-options.js.map +1 -0
- package/build-ngc/core/tab-router-state/index.d.ts +19 -0
- package/build-ngc/core/tab-router-state/index.js +52 -0
- package/build-ngc/core/tab-router-state/index.js.map +1 -0
- package/build-ngc/core/tab-router-state.d.ts +19 -0
- package/build-ngc/core/tab-router-state.js +52 -0
- package/build-ngc/core/tab-router-state.js.map +1 -0
- package/build-ngc/register.d.ts +7 -0
- package/build-ngc/register.js +59 -0
- package/build-ngc/register.js.map +1 -0
- package/codegen-specs/FullWindowOverlayNativeComponent.ts +13 -0
- package/codegen-specs/ModalScreenNativeComponent.ts +129 -0
- package/codegen-specs/NativeScreensModule.ts +8 -0
- package/codegen-specs/NativeScreensModule.web.ts +1 -0
- package/codegen-specs/ScreenContainerNativeComponent.ts +8 -0
- package/codegen-specs/ScreenContentWrapperNativeComponent.ts +9 -0
- package/codegen-specs/ScreenFooterNativeComponent.ts +6 -0
- package/codegen-specs/ScreenNativeComponent.ts +133 -0
- package/codegen-specs/ScreenNavigationContainerNativeComponent.ts +11 -0
- package/codegen-specs/ScreenStackHeaderConfigNativeComponent.ts +99 -0
- package/codegen-specs/ScreenStackHeaderSubviewNativeComponent.ts +25 -0
- package/codegen-specs/ScreenStackNativeComponent.ts +17 -0
- package/codegen-specs/SearchBarNativeComponent.ts +101 -0
- package/codegen-specs/codegenUtils.ts +6 -0
- package/codegen-specs/gamma/ScrollViewMarkerNativeComponent.ts +15 -0
- package/codegen-specs/gamma/modals/form-sheet/FormSheetContentWrapperNativeComponent.ts +10 -0
- package/codegen-specs/gamma/modals/form-sheet/FormSheetHostNativeComponent.ts +47 -0
- package/codegen-specs/gamma/split/SplitHostNativeComponent.ts +124 -0
- package/codegen-specs/gamma/split/SplitScreenNativeComponent.ts +24 -0
- package/codegen-specs/gamma/stack/StackHeaderConfigAndroidNativeComponent.ts +144 -0
- package/codegen-specs/gamma/stack/StackHeaderConfigIOSNativeComponent.ts +34 -0
- package/codegen-specs/gamma/stack/StackHeaderItemIOSNativeComponent.ts +47 -0
- package/codegen-specs/gamma/stack/StackHeaderItemSpacerIOSNativeComponent.ts +20 -0
- package/codegen-specs/gamma/stack/StackHeaderSubviewAndroidNativeComponent.ts +27 -0
- package/codegen-specs/gamma/stack/StackHostNativeComponent.ts +8 -0
- package/codegen-specs/gamma/stack/StackScreenNativeComponent.ts +42 -0
- package/codegen-specs/safe-area/SafeAreaViewNativeComponent.ts +24 -0
- package/codegen-specs/tabs/TabsBottomAccessoryContentNativeComponent.ts +15 -0
- package/codegen-specs/tabs/TabsBottomAccessoryNativeComponent.ts +19 -0
- package/codegen-specs/tabs/TabsHostAndroidNativeComponent.ts +69 -0
- package/codegen-specs/tabs/TabsHostIOSNativeComponent.ts +92 -0
- package/codegen-specs/tabs/TabsScreenAndroidNativeComponent.ts +112 -0
- package/codegen-specs/tabs/TabsScreenIOSNativeComponent.ts +171 -0
- package/package.json +201 -0
- package/react-native.config.cjs +58 -0
- package/src/angular/drawer/drawer.test.ts +299 -0
- package/src/angular/drawer/index.ts +546 -0
- package/src/angular/drawer-screen.directive.ts +28 -0
- package/src/angular/index.ts +63 -0
- package/src/angular/injectors/index.ts +13 -0
- package/src/angular/injectors/inject-drawer-navigation.ts +21 -0
- package/src/angular/injectors/inject-focus-effect.ts +37 -0
- package/src/angular/injectors/inject-is-focused.ts +28 -0
- package/src/angular/injectors/inject-navigation-state.ts +46 -0
- package/src/angular/injectors/inject-navigation.ts +26 -0
- package/src/angular/injectors/inject-route.ts +25 -0
- package/src/angular/injectors/inject-stack-navigation.ts +24 -0
- package/src/angular/injectors/inject-tab-navigation.ts +20 -0
- package/src/angular/injectors/injectors.test.ts +247 -0
- package/src/angular/injectors/use-typed-navigation.test.ts +229 -0
- package/src/angular/linking.ts +55 -0
- package/src/angular/navigation-context.service.ts +68 -0
- package/src/angular/navigation-scope.directive.ts +31 -0
- package/src/angular/nested-navigation.test.ts +189 -0
- package/src/angular/screen.directive.ts +48 -0
- package/src/angular/search-bar-ref.directive.ts +38 -0
- package/src/angular/stack/index.ts +401 -0
- package/src/angular/stack/stack.test.ts +419 -0
- package/src/angular/tab-screen.directive.ts +26 -0
- package/src/angular/tabs/index.ts +254 -0
- package/src/angular/tabs/tabs.test.ts +249 -0
- package/src/core/constants.ts +68 -0
- package/src/core/drawer-options/drawer-options.test.ts +415 -0
- package/src/core/drawer-options/index.ts +331 -0
- package/src/core/drawer-router-state/drawer-router-state.test.ts +116 -0
- package/src/core/drawer-router-state/index.ts +71 -0
- package/src/core/guards.ts +23 -0
- package/src/core/header-bar-buttons.ts +212 -0
- package/src/core/index.ts +170 -0
- package/src/core/linking-config/index.ts +209 -0
- package/src/core/linking-config/linking-config.test.ts +109 -0
- package/src/core/navigation-events/index.ts +94 -0
- package/src/core/navigation-events/navigation-events.test.ts +56 -0
- package/src/core/navigator-handles/index.ts +63 -0
- package/src/core/navigator-handles/navigator-handles.test.ts +46 -0
- package/src/core/navigator-props.ts +323 -0
- package/src/core/navigator-state/index.ts +112 -0
- package/src/core/navigator-state/navigator-state.test.ts +80 -0
- package/src/core/render-drawer.ts +123 -0
- package/src/core/render-stack.ts +414 -0
- package/src/core/render-tabs.ts +138 -0
- package/src/core/screen-options.ts +181 -0
- package/src/core/search-bar-commands.ts +57 -0
- package/src/core/state-persistence/index.ts +30 -0
- package/src/core/state-persistence/state-persistence.test.ts +42 -0
- package/src/core/tab-options.ts +25 -0
- package/src/core/tab-router-state/index.ts +75 -0
- package/src/core/tab-router-state/tab-router-state.test.ts +34 -0
- package/src/globals.d.ts +4 -0
- package/src/react/collect-registry.ts +19 -0
- package/src/react/drawer/drawer.test.tsx +472 -0
- package/src/react/drawer/index.ts +451 -0
- package/src/react/drawer-screen.ts +29 -0
- package/src/react/hooks/hooks.test.tsx +199 -0
- package/src/react/hooks/index.ts +12 -0
- package/src/react/hooks/use-drawer-navigation.ts +21 -0
- package/src/react/hooks/use-focus-effect.ts +36 -0
- package/src/react/hooks/use-is-focused.ts +26 -0
- package/src/react/hooks/use-navigation-state/index.ts +47 -0
- package/src/react/hooks/use-navigation-state/use-navigation-state.test.ts +85 -0
- package/src/react/hooks/use-navigation.ts +36 -0
- package/src/react/hooks/use-route.ts +11 -0
- package/src/react/hooks/use-stack-navigation.ts +23 -0
- package/src/react/hooks/use-tab-navigation.ts +21 -0
- package/src/react/hooks/use-typed-navigation.test.tsx +187 -0
- package/src/react/index.ts +52 -0
- package/src/react/linking.ts +59 -0
- package/src/react/navigation-context.ts +40 -0
- package/src/react/nested-navigation.test.tsx +145 -0
- package/src/react/screen.ts +44 -0
- package/src/react/stack/index.ts +323 -0
- package/src/react/stack/stack.test.tsx +514 -0
- package/src/react/tab-screen.ts +30 -0
- package/src/react/tabs/index.ts +204 -0
- package/src/react/tabs/tabs.test.tsx +256 -0
- package/src/register.ts +59 -0
- package/src/vue/composables/composables.test.ts +221 -0
- package/src/vue/composables/index.ts +12 -0
- package/src/vue/composables/use-drawer-navigation.ts +25 -0
- package/src/vue/composables/use-focus-effect.ts +37 -0
- package/src/vue/composables/use-is-focused.ts +34 -0
- package/src/vue/composables/use-navigation-state.ts +38 -0
- package/src/vue/composables/use-navigation.ts +30 -0
- package/src/vue/composables/use-route.ts +13 -0
- package/src/vue/composables/use-stack-navigation.ts +28 -0
- package/src/vue/composables/use-tab-navigation.ts +25 -0
- package/src/vue/composables/use-typed-navigation.test.ts +205 -0
- package/src/vue/drawer/drawer.test.ts +451 -0
- package/src/vue/drawer/index.ts +550 -0
- package/src/vue/drawer-screen.ts +32 -0
- package/src/vue/index.ts +70 -0
- package/src/vue/linking.ts +69 -0
- package/src/vue/navigation-context.ts +87 -0
- package/src/vue/nested-navigation.test.ts +155 -0
- package/src/vue/screen.ts +52 -0
- package/src/vue/stack/index.ts +376 -0
- package/src/vue/stack/stack.test.ts +501 -0
- package/src/vue/tab-screen.ts +29 -0
- package/src/vue/tabs/index.ts +302 -0
- package/src/vue/tabs/tabs.test.ts +278 -0
- package/symbiote-navigation.podspec +84 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// DrawerRouter: the logic half (framework-agnostic, zero render), sibling to navigator-state.ts
|
|
2
|
+
// and tab-router-state.ts. Unlike the stack's push/pop route array, a drawer's route list is
|
|
3
|
+
// FIXED at mount (one entry per declared <Drawer.Screen>, collected by the adapter exactly like
|
|
4
|
+
// Stack's/Tab's collectRegistry) — the reducer only tracks which one is focused (`index`) and
|
|
5
|
+
// whether the drawer panel is open. Route identity/shape is `IRoute`, reused verbatim from
|
|
6
|
+
// navigator-state.ts (same convention tab-router-state.ts follows) so all three navigators share
|
|
7
|
+
// one route shape.
|
|
8
|
+
const INITIAL_FOCUSED_INDEX = 0;
|
|
9
|
+
export function createInitialDrawerRouterState(routes, initialRouteName) {
|
|
10
|
+
if (initialRouteName === undefined) {
|
|
11
|
+
return { routes, index: INITIAL_FOCUSED_INDEX, isOpen: false };
|
|
12
|
+
}
|
|
13
|
+
const index = routes.findIndex(route => route.name === initialRouteName);
|
|
14
|
+
return { routes, index: index === -1 ? INITIAL_FOCUSED_INDEX : index, isOpen: false };
|
|
15
|
+
}
|
|
16
|
+
// Mirrors @react-navigation/drawer's DrawerActions: jumpTo focuses a route by NAME (TabRouter's
|
|
17
|
+
// own convention, not the stack's by-key popTo) AND closes the drawer — selecting a destination
|
|
18
|
+
// is itself the dismissal gesture, so a plain focus without also closing would leave the panel
|
|
19
|
+
// covering the just-selected screen.
|
|
20
|
+
export function drawerRouterReducer(state, action) {
|
|
21
|
+
switch (action.type) {
|
|
22
|
+
case 'jumpTo': {
|
|
23
|
+
const index = state.routes.findIndex(route => route.name === action.name);
|
|
24
|
+
if (index === -1)
|
|
25
|
+
return state;
|
|
26
|
+
return index === state.index && !state.isOpen ? state : { ...state, index, isOpen: false };
|
|
27
|
+
}
|
|
28
|
+
case 'openDrawer':
|
|
29
|
+
return state.isOpen ? state : { ...state, isOpen: true };
|
|
30
|
+
case 'closeDrawer':
|
|
31
|
+
return state.isOpen ? { ...state, isOpen: false } : state;
|
|
32
|
+
case 'toggleDrawer':
|
|
33
|
+
return { ...state, isOpen: !state.isOpen };
|
|
34
|
+
default:
|
|
35
|
+
return state;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function focusedDrawerRoute(state) {
|
|
39
|
+
return state.routes[state.index];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=drawer-router-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer-router-state.js","sourceRoot":"","sources":["../../src/core/drawer-router-state.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,6FAA6F;AAC7F,gGAAgG;AAChG,8FAA8F;AAC9F,2FAA2F;AAC3F,iGAAiG;AACjG,mBAAmB;AAoBnB,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,8BAA8B,CAC5C,MAA8B,EAC9B,gBAAyB;IAEzB,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;IACzE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACxF,CAAC;AAED,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAC/F,qCAAqC;AACrC,MAAM,UAAU,mBAAmB,CACjC,KAAyB,EACzB,MAA2B;IAE3B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/B,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7F,CAAC;QAED,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAE3D,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAE5D,KAAK,cAAc;YACjB,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAE7C;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAyB;IAC1D,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Runtime guards shared across the navigation package's core. Centralizes what used to be ~11
|
|
2
|
+
// independent copies of the same `typeof value === 'object' && value !== null` check scattered
|
|
3
|
+
// across core and every adapter (route-param merges, persisted-JSON validation, vnode-prop
|
|
4
|
+
// narrowing, gesture-event field reads) - several of which had silently drifted on array
|
|
5
|
+
// handling, one excluding arrays, another not, for the same kind of check.
|
|
6
|
+
//
|
|
7
|
+
// Excludes arrays: every current call site (route params, persisted navigator-state JSON,
|
|
8
|
+
// touch-event objects, vnode props) only ever receives a genuine plain object, never a bare list
|
|
9
|
+
// standing in for one - so `Array.isArray` narrows out a real footgun (a malformed persisted
|
|
10
|
+
// value shaped like `[]` would otherwise pass this guard and fail confusingly deeper in, on a
|
|
11
|
+
// missing `.key`/`.name` field, instead of here) at zero cost to the realistic inputs.
|
|
12
|
+
export function isRecord(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
// Mirrors @react-navigation's CommonActions.setParams: a shallow merge onto the current params,
|
|
16
|
+
// but only when both sides are genuine plain objects - an array (or any other non-record) on
|
|
17
|
+
// either side means a clean replace instead, never a numeric-key-mangled merge. Shared by
|
|
18
|
+
// navigator-state.ts (Stack) and tab-router-state.ts (Tabs) so the two reducers can't drift on
|
|
19
|
+
// this rule independently.
|
|
20
|
+
export function mergeParams(current, incoming) {
|
|
21
|
+
return isRecord(current) && isRecord(incoming) ? { ...current, ...incoming } : incoming;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/core/guards.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,+FAA+F;AAC/F,2FAA2F;AAC3F,yFAAyF;AACzF,2EAA2E;AAC3E,EAAE;AACF,0FAA0F;AAC1F,iGAAiG;AACjG,6FAA6F;AAC7F,8FAA8F;AAC9F,uFAAuF;AACvF,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,gGAAgG;AAChG,6FAA6F;AAC7F,0FAA0F;AAC1F,+FAA+F;AAC/F,2BAA2B;AAC3B,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,QAAiB;IAC7D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ISymbioteEvent } from '@symbiote-native/engine';
|
|
2
|
+
import type { IHeaderBarButtonItem } from './navigator-props';
|
|
3
|
+
export declare function prepareHeaderBarButtonItems(items: IHeaderBarButtonItem[] | undefined, side: 'left' | 'right'): unknown[] | undefined;
|
|
4
|
+
type IHeaderBarButtonDispatch = {
|
|
5
|
+
onPressHeaderBarButtonItem?: (event: ISymbioteEvent) => void;
|
|
6
|
+
onPressHeaderBarButtonMenuItem?: (event: ISymbioteEvent) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function buildHeaderBarButtonDispatch(leftItems: IHeaderBarButtonItem[] | undefined, rightItems: IHeaderBarButtonItem[] | undefined): IHeaderBarButtonDispatch;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// Header bar-button payload + dispatch: the native-shaped `headerLeftBarButtonItems`/
|
|
2
|
+
// `headerRightBarButtonItems` fold react-native-screens' own ScreenStackHeaderConfig component
|
|
3
|
+
// would send down, plus the buttonId/menuId -> onPress lookup that answers RNSScreenStackHeader-
|
|
4
|
+
// Config's `onPressHeaderBarButtonItem`/`onPressHeaderBarButtonMenuItem` events. Self-contained:
|
|
5
|
+
// only `resolveHeaderConfigView` (screen-options.ts) calls into this file, as a black box - the
|
|
6
|
+
// id-tagging scheme below is this cluster's own internal invariant, never a cross-file contract.
|
|
7
|
+
import { imageStatics } from '@symbiote-native/components';
|
|
8
|
+
import { processColor } from '@symbiote-native/engine';
|
|
9
|
+
// RNS flattens `icon` into sfSymbolName/xcassetName/imageSource/templateSource at native-payload
|
|
10
|
+
// time (both the structured `icon` field AND the flat native keys reach native - RNS's own
|
|
11
|
+
// prepareHeaderBarButtonItems keeps both), and resolves image assets through the same resolver
|
|
12
|
+
// the Image component uses.
|
|
13
|
+
function prepareIcon(icon) {
|
|
14
|
+
if (!icon)
|
|
15
|
+
return {};
|
|
16
|
+
switch (icon.type) {
|
|
17
|
+
case 'sfSymbol':
|
|
18
|
+
return { sfSymbolName: icon.name };
|
|
19
|
+
case 'xcasset':
|
|
20
|
+
return { xcassetName: icon.name };
|
|
21
|
+
case 'imageSource':
|
|
22
|
+
return { imageSource: imageStatics.resolveAssetSource(icon.imageSource) };
|
|
23
|
+
case 'templateSource':
|
|
24
|
+
return { templateSource: imageStatics.resolveAssetSource(icon.templateSource) };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// The one id algorithm both the payload tagger (prepareMenuItems/prepareHeaderBarButtonItems)
|
|
28
|
+
// and the dispatch-lookup builder (collectMenuHandlers/collectBarButtonHandlers) call - so a
|
|
29
|
+
// change to the id scheme genuinely can't desync payload tagging from dispatch lookup.
|
|
30
|
+
function buildMenuId(path, index, side) {
|
|
31
|
+
return `${path}-${index}-${side}`;
|
|
32
|
+
}
|
|
33
|
+
function buildButtonId(index, side) {
|
|
34
|
+
return `${index}-${side}`;
|
|
35
|
+
}
|
|
36
|
+
function prepareTitleStyle(titleStyle) {
|
|
37
|
+
if (!titleStyle)
|
|
38
|
+
return undefined;
|
|
39
|
+
return {
|
|
40
|
+
...titleStyle,
|
|
41
|
+
color: titleStyle.color === undefined ? undefined : processColor(titleStyle.color),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function prepareBadge(badge) {
|
|
45
|
+
if (!badge)
|
|
46
|
+
return undefined;
|
|
47
|
+
return {
|
|
48
|
+
...badge,
|
|
49
|
+
style: badge.style
|
|
50
|
+
? {
|
|
51
|
+
...badge.style,
|
|
52
|
+
color: badge.style.color === undefined ? undefined : processColor(badge.style.color),
|
|
53
|
+
backgroundColor: badge.style.backgroundColor === undefined
|
|
54
|
+
? undefined
|
|
55
|
+
: processColor(badge.style.backgroundColor),
|
|
56
|
+
}
|
|
57
|
+
: undefined,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// onPress is captured separately into the buttonId/menuId -> handler map (collectMenuHandlers/
|
|
61
|
+
// collectBarButtonHandlers below) and must never reach native: a function value fails Fabric's
|
|
62
|
+
// dynamic-value serialization, which silently drops the WHOLE headerLeftBarButtonItems/
|
|
63
|
+
// headerRightBarButtonItems array it's nested in - not just the one bad field - so bar buttons and
|
|
64
|
+
// menu actions never reached native at all, despite the buttonId/menuId dispatch wiring itself
|
|
65
|
+
// being entirely correct.
|
|
66
|
+
function excludeOnPress(item) {
|
|
67
|
+
const { onPress: _onPress, ...rest } = item;
|
|
68
|
+
return rest;
|
|
69
|
+
}
|
|
70
|
+
// Shared fields common to the 'button' and 'menu' item variants (title/icon/tint/badge/...) - the
|
|
71
|
+
// 'spacing' variant carries none of these and passes through untouched.
|
|
72
|
+
function prepareSharedFields(item) {
|
|
73
|
+
return {
|
|
74
|
+
...(item.type === 'button' ? excludeOnPress(item) : item),
|
|
75
|
+
...prepareIcon(item.icon),
|
|
76
|
+
titleStyle: prepareTitleStyle(item.titleStyle),
|
|
77
|
+
tintColor: item.tintColor === undefined ? undefined : processColor(item.tintColor),
|
|
78
|
+
badge: prepareBadge(item.badge),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Recursively tags every menu action with a `menuId` derived from its tree position
|
|
82
|
+
// (`${path}-${index}-${side}`), mirroring RNS's own prepareMenu exactly - the id must match what
|
|
83
|
+
// buildHeaderBarButtonDispatch computes below, or a press silently no-ops.
|
|
84
|
+
function prepareMenuItems(menuLike, index, side, path = '') {
|
|
85
|
+
return {
|
|
86
|
+
...menuLike,
|
|
87
|
+
items: menuLike.items.map((menuItem, menuIndex) => {
|
|
88
|
+
const currentPath = path ? `${path}.${menuIndex}` : `${menuIndex}`;
|
|
89
|
+
const icon = prepareIcon(menuItem.icon);
|
|
90
|
+
if (menuItem.type === 'submenu') {
|
|
91
|
+
return { ...menuItem, ...icon, ...prepareMenuItems(menuItem, index, side, currentPath) };
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
...excludeOnPress(menuItem),
|
|
95
|
+
...icon,
|
|
96
|
+
menuId: buildMenuId(currentPath, index, side),
|
|
97
|
+
};
|
|
98
|
+
}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// Builds the native-shaped payload react-native-screens' own ScreenStackHeaderConfig component
|
|
102
|
+
// would send down (buttonId/menuId-tagged, colors processColor'd) - this is what
|
|
103
|
+
// IHeaderConfigViewProps.headerLeftBarButtonItems/headerRightBarButtonItems actually carry.
|
|
104
|
+
export function prepareHeaderBarButtonItems(items, side) {
|
|
105
|
+
if (!items)
|
|
106
|
+
return undefined;
|
|
107
|
+
return items.map((item, index) => {
|
|
108
|
+
if (item.type === 'spacing')
|
|
109
|
+
return item;
|
|
110
|
+
const prepared = prepareSharedFields(item);
|
|
111
|
+
if (item.type === 'button')
|
|
112
|
+
return { ...prepared, buttonId: buildButtonId(index, side) };
|
|
113
|
+
return { ...prepared, menu: prepareMenuItems(item.menu, index, side) };
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function collectMenuHandlers(items, index, side, path, handlers) {
|
|
117
|
+
items.forEach((item, menuIndex) => {
|
|
118
|
+
const currentPath = path ? `${path}.${menuIndex}` : `${menuIndex}`;
|
|
119
|
+
if (item.type === 'submenu') {
|
|
120
|
+
collectMenuHandlers(item.items, index, side, currentPath, handlers);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
handlers.set(buildMenuId(currentPath, index, side), item.onPress);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function collectBarButtonHandlers(items, side, buttonHandlers, menuHandlers) {
|
|
127
|
+
items?.forEach((item, index) => {
|
|
128
|
+
if (item.type === 'button') {
|
|
129
|
+
buttonHandlers.set(buildButtonId(index, side), item.onPress);
|
|
130
|
+
}
|
|
131
|
+
else if (item.type === 'menu') {
|
|
132
|
+
collectMenuHandlers(item.menu.items, index, side, '', menuHandlers);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function readStringField(record, key) {
|
|
137
|
+
const value = record[key];
|
|
138
|
+
return typeof value === 'string' ? value : undefined;
|
|
139
|
+
}
|
|
140
|
+
// The buttonId/menuId → onPress lookup is built independently from prepareHeaderBarButtonItems'
|
|
141
|
+
// native payload (rather than re-parsing it back out of the `unknown[]` result), over the
|
|
142
|
+
// ORIGINAL typed items - but both sides call the same buildMenuId/buildButtonId, so the id
|
|
143
|
+
// scheme lives in one place and can't desync payload tagging from dispatch lookup.
|
|
144
|
+
export function buildHeaderBarButtonDispatch(leftItems, rightItems) {
|
|
145
|
+
const buttonHandlers = new Map();
|
|
146
|
+
const menuHandlers = new Map();
|
|
147
|
+
collectBarButtonHandlers(leftItems, 'left', buttonHandlers, menuHandlers);
|
|
148
|
+
collectBarButtonHandlers(rightItems, 'right', buttonHandlers, menuHandlers);
|
|
149
|
+
if (buttonHandlers.size === 0 && menuHandlers.size === 0)
|
|
150
|
+
return {};
|
|
151
|
+
return {
|
|
152
|
+
onPressHeaderBarButtonItem: event => {
|
|
153
|
+
const buttonId = readStringField(event.nativeEvent, 'buttonId');
|
|
154
|
+
if (buttonId !== undefined)
|
|
155
|
+
buttonHandlers.get(buttonId)?.();
|
|
156
|
+
},
|
|
157
|
+
onPressHeaderBarButtonMenuItem: event => {
|
|
158
|
+
const menuId = readStringField(event.nativeEvent, 'menuId');
|
|
159
|
+
if (menuId !== undefined)
|
|
160
|
+
menuHandlers.get(menuId)?.();
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=header-bar-buttons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-bar-buttons.js","sourceRoot":"","sources":["../../src/core/header-bar-buttons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ILinkingConfig } from './linking-config';
|
|
2
|
+
import type { IRoute } from './navigator-state';
|
|
3
|
+
import type { ISearchParams } from './search-params';
|
|
4
|
+
export type IHrefParams = ISearchParams;
|
|
5
|
+
export type IHrefObject = {
|
|
6
|
+
pathname: string;
|
|
7
|
+
params?: IHrefParams;
|
|
8
|
+
};
|
|
9
|
+
export type IHref = string | IHrefObject;
|
|
10
|
+
export type IResolvedHref = {
|
|
11
|
+
name: string;
|
|
12
|
+
params: Record<string, unknown> | undefined;
|
|
13
|
+
};
|
|
14
|
+
export declare function resolveHref(config: ILinkingConfig, href: IHref): IResolvedHref | null;
|
|
15
|
+
export declare function stringifyHref(href: IHref): string;
|
|
16
|
+
export declare function hrefFromRoute(config: ILinkingConfig, route: IRoute<unknown>): string | null;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Href: the URL-shaped navigation target the web-router facade takes, mirroring Expo Router's
|
|
2
|
+
// `Href = string | { pathname, params }` (react-router's `to`, vue-router's `to`). resolveHref
|
|
3
|
+
// turns either form into the { name, params } our by-name navigator handle already pushes —
|
|
4
|
+
// path params (:id) come from the linking config, query/object params merge on top.
|
|
5
|
+
//
|
|
6
|
+
// This is why the web facade REQUIRES a linking config: the config IS the route table (name<->path
|
|
7
|
+
// map), exactly as react-router/vue-router require a route table before you can navigate by path.
|
|
8
|
+
import { resolveRouteFromUrl, resolveUrlFromRoute } from './linking-config';
|
|
9
|
+
import { parseSearchParams, splitPathnameQuery, stringifySearchParams } from './search-params';
|
|
10
|
+
function isRecord(value) {
|
|
11
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
12
|
+
}
|
|
13
|
+
// Peels either Href form down to a bare pathname plus explicit params: a string href's query
|
|
14
|
+
// string is parsed into params, an object href's params are taken as-is. Path params (:id) are
|
|
15
|
+
// resolved later against the config, not here.
|
|
16
|
+
function normalizeHref(href) {
|
|
17
|
+
if (typeof href === 'string') {
|
|
18
|
+
const { pathname, query } = splitPathnameQuery(href);
|
|
19
|
+
return { pathname, params: parseSearchParams(query) };
|
|
20
|
+
}
|
|
21
|
+
return { pathname: href.pathname, params: { ...href.params } };
|
|
22
|
+
}
|
|
23
|
+
// A full-scheme href ('myapp://user/42') is passed through; a bare path ('users/42') gets the
|
|
24
|
+
// leading slash resolveRouteFromUrl's non-prefixed branch expects.
|
|
25
|
+
function toMatchableUrl(pathname) {
|
|
26
|
+
if (pathname.includes('://') || pathname.startsWith('/'))
|
|
27
|
+
return pathname;
|
|
28
|
+
return `/${pathname}`;
|
|
29
|
+
}
|
|
30
|
+
export function resolveHref(config, href) {
|
|
31
|
+
const { pathname, params } = normalizeHref(href);
|
|
32
|
+
const route = resolveRouteFromUrl(config, toMatchableUrl(pathname));
|
|
33
|
+
if (route === null)
|
|
34
|
+
return null;
|
|
35
|
+
const pathParams = isRecord(route.params) ? route.params : {};
|
|
36
|
+
const merged = { ...pathParams, ...params };
|
|
37
|
+
return {
|
|
38
|
+
name: route.name,
|
|
39
|
+
params: Object.keys(merged).length > 0 ? merged : undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Collapses an Href to its display/serialized string form ('/users/42?tab=posts'), for a <Link>'s
|
|
43
|
+
// accessibility value or a usePathname read. A string href is already that; an object href joins
|
|
44
|
+
// its pathname with the serialized query.
|
|
45
|
+
export function stringifyHref(href) {
|
|
46
|
+
if (typeof href === 'string')
|
|
47
|
+
return href;
|
|
48
|
+
return `${href.pathname}${stringifySearchParams(href.params ?? {})}`;
|
|
49
|
+
}
|
|
50
|
+
// The reverse direction — a live route back to its URL string — so usePathname/useUnstableGlobalHref
|
|
51
|
+
// have one entry point. Thin pass-through to the linking config's route->url fold.
|
|
52
|
+
export function hrefFromRoute(config, route) {
|
|
53
|
+
return resolveUrlFromRoute(config, route);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=href.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"href.js","sourceRoot":"","sources":["../../src/core/href.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,+FAA+F;AAC/F,4FAA4F;AAC5F,oFAAoF;AACpF,EAAE;AACF,mGAAmG;AACnG,kGAAkG;AAGlG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAgB/F,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,6FAA6F;AAC7F,+FAA+F;AAC/F,+CAA+C;AAC/C,SAAS,aAAa,CAAC,IAAW;IAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACjE,CAAC;AAED,8FAA8F;AAC9F,mEAAmE;AACnE,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC1E,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAsB,EAAE,IAAW;IAC7D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,iGAAiG;AACjG,0CAA0C;AAC1C,MAAM,UAAU,aAAa,CAAC,IAAW;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,qGAAqG;AACrG,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,MAAsB,EAAE,KAAsB;IAC1E,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export * from './constants';
|
|
2
|
+
export { createInitialNavigatorState, navigatorReducer, computeActivityState, isTopRoute, } from './navigator-state';
|
|
3
|
+
export type { IRoute, INavigatorState, INavigatorAction } from './navigator-state';
|
|
4
|
+
export type { IStackAnimation, IStackPresentation, IHeaderBackButtonDisplayMode, IHeaderUserInterfaceStyle, IOptionalBooleanNativeProp, ISheetAllowedDetents, ISheetLargestUndimmedDetent, ISheetInitialDetent, IHeaderBarButtonIcon, IHeaderBarButtonItemBadge, IHeaderBarButtonItemAction, IHeaderBarButtonMenuAction, IHeaderBarButtonSubmenu, IHeaderBarButtonItemMenu, IHeaderBarButtonItemSpacing, IHeaderBarButtonItem, ISearchBarAutoCapitalize, ISearchBarPlacement, ISearchBarOptions, IScreenOrientation, IScreenOptions, INavigatorPlatform, IScreenViewProps, IHeaderConfigViewProps, IStackViewProps, ISearchBarViewProps, } from './navigator-props';
|
|
5
|
+
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView } from './screen-options';
|
|
6
|
+
export { buildSearchBarHandle } from './search-bar-commands';
|
|
7
|
+
export type { ISearchBarCommands } from './search-bar-commands';
|
|
8
|
+
export { resolveScreenProps, resolveStackProps, renderHeaderConfig, resolveSearchBarProps, resolveScreenContentWrapperStyle, resolveScreenViewName, isHeaderInModal, resolveHeaderInModalStackStyle, resolveHeaderInModalScreenStyle, buildSearchBarPassthrough, resolveScreenRenderPlan, } from './render-stack';
|
|
9
|
+
export type { IScreenRenderPlanInput, IScreenRenderPlan } from './render-stack';
|
|
10
|
+
export { serializeNavigatorState, deserializeNavigatorState } from './state-persistence';
|
|
11
|
+
export { createNavigationEmitter, diffFocusedRoute, NAVIGATION_EVENT_FOCUS, NAVIGATION_EVENT_BLUR, NAVIGATION_EVENT_STATE, NAVIGATION_EVENT_BEFORE_REMOVE, } from './navigation-events';
|
|
12
|
+
export type { INavigationEmitter, INavigationEventListener, INavigationEventName, IFocusTransition, } from './navigation-events';
|
|
13
|
+
export { isRecord } from './guards';
|
|
14
|
+
export { createInitialTabState, tabRouterReducer, isFocusedRoute } from './tab-router-state';
|
|
15
|
+
export type { ITabRouterState, ITabRouterAction } from './tab-router-state';
|
|
16
|
+
export type { ITabBarIcon, ITabOptions } from './tab-options';
|
|
17
|
+
export { renderTabBarItem, renderTabBar } from './render-tabs';
|
|
18
|
+
export type { ITabBarItemView, ITabBarViewProps } from './render-tabs';
|
|
19
|
+
export { resolveRouteFromUrl, resolveUrlFromRoute } from './linking-config';
|
|
20
|
+
export type { ILinkingConfig, IScreenLinkingConfig } from './linking-config';
|
|
21
|
+
export { createInitialDrawerRouterState, drawerRouterReducer, focusedDrawerRoute, } from './drawer-router-state';
|
|
22
|
+
export type { IDrawerRouterState, IDrawerRouterAction } from './drawer-router-state';
|
|
23
|
+
export type { IDrawerType, IDrawerPosition, IDrawerOptions, IDrawerScreenOptions, IDrawerGeometry, ISwipeIntent, } from './drawer-options';
|
|
24
|
+
export { DRAWER_DEFAULT_TYPE, DRAWER_DEFAULT_POSITION, DRAWER_DEFAULT_WIDTH, DRAWER_DEFAULT_OVERLAY_COLOR, DRAWER_DEFAULT_SWIPE_ENABLED, DRAWER_DEFAULT_SWIPE_EDGE_WIDTH, DRAWER_DEFAULT_SWIPE_MIN_DISTANCE, DRAWER_DEFAULT_SWIPE_MIN_VELOCITY, resolveDrawerType, resolveDrawerPosition, resolveDrawerWidth, isDrawerAnimated, isDrawerOverlayVisible, resolveDrawerGeometry, isSwipeStartInEdge, isHorizontalDrag, resolveSwipeIntent, clamp01, startPageXOf, resolveDragProgress, shouldClaimDrawerSwipe, resolveDrawerSlotInterpolation, } from './drawer-options';
|
|
25
|
+
export type { IDrawerInterpolationRange, IDrawerContentSlotInterpolation, IDrawerOverlaySlotInterpolation, IDrawerPanelSlotInterpolation, } from './drawer-options';
|
|
26
|
+
export { renderDrawer, drawerChildOrder } from './render-drawer';
|
|
27
|
+
export type { IDrawerSlot, IDrawerViewProps } from './render-drawer';
|
|
28
|
+
export type { INavigatorHandle, ITabNavigatorHandle, IDrawerNavigatorHandle, IDrawerDescriptorMap, IAnyNavigatorHandle, } from './navigator-handles';
|
|
29
|
+
export { isStackNavigatorHandle, isTabNavigatorHandle, isDrawerNavigatorHandle, } from './navigator-handles';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// @symbiote-native/navigation (core): the framework-agnostic half of the native stack navigator -
|
|
2
|
+
// a pure route-stack reducer plus the react-native-screens prop folds and native-leaf prop
|
|
3
|
+
// resolvers. symbiote ships zero runtime metadata for RNSScreen/RNSScreenStack/
|
|
4
|
+
// RNSScreenStackHeaderConfig - the engine derives their events and color processors from
|
|
5
|
+
// react-native-screens' own ViewConfig - so this layer is the pure JS every adapter reuses
|
|
6
|
+
// verbatim, supplying only its lifecycle (route-key generation, useReducer/reactive state) and
|
|
7
|
+
// the descriptor bridge.
|
|
8
|
+
export * from './constants';
|
|
9
|
+
export { createInitialNavigatorState, navigatorReducer, computeActivityState, isTopRoute, } from './navigator-state';
|
|
10
|
+
export { resolveHeaderConfigView, resolveScreenView, resolveSearchBarView } from './screen-options';
|
|
11
|
+
export { buildSearchBarHandle } from './search-bar-commands';
|
|
12
|
+
export { resolveScreenProps, resolveStackProps, renderHeaderConfig, resolveSearchBarProps, resolveScreenContentWrapperStyle, resolveScreenViewName, isHeaderInModal, resolveHeaderInModalStackStyle, resolveHeaderInModalScreenStyle, buildSearchBarPassthrough, resolveScreenRenderPlan, } from './render-stack';
|
|
13
|
+
export { serializeNavigatorState, deserializeNavigatorState } from './state-persistence';
|
|
14
|
+
export { createNavigationEmitter, diffFocusedRoute, NAVIGATION_EVENT_FOCUS, NAVIGATION_EVENT_BLUR, NAVIGATION_EVENT_STATE, NAVIGATION_EVENT_BEFORE_REMOVE, } from './navigation-events';
|
|
15
|
+
// Runtime guards shared across core (and re-exported for adapters narrowing their own untyped
|
|
16
|
+
// inputs - vnode props, gesture/event data, persisted JSON) - see guards.ts's header for which
|
|
17
|
+
// call sites this consolidates and why array-exclusion is the right default everywhere it's used.
|
|
18
|
+
export { isRecord } from './guards';
|
|
19
|
+
// Bottom-tabs navigator: a FOCUSED-INDEX router (not a stack - see tab-router-state.ts) driving
|
|
20
|
+
// a pure-JS tab bar render, framework-agnostic and shared verbatim by every adapter.
|
|
21
|
+
export { createInitialTabState, tabRouterReducer, isFocusedRoute } from './tab-router-state';
|
|
22
|
+
export { renderTabBarItem, renderTabBar } from './render-tabs';
|
|
23
|
+
// Linking config: resolves a URL to a route (and back), the piece @react-navigation's
|
|
24
|
+
// NavigationContainer `linking` prop provides on top of the framework-agnostic Linking module.
|
|
25
|
+
export { resolveRouteFromUrl, resolveUrlFromRoute } from './linking-config';
|
|
26
|
+
// Drawer navigator: an OPEN/CLOSED-flag router over a fixed route list (see
|
|
27
|
+
// drawer-router-state.ts's header for why it isn't a push/pop stack), a pure swipe/geometry math
|
|
28
|
+
// module, and a Descriptor render fn - all framework-agnostic, shared verbatim by every adapter.
|
|
29
|
+
export { createInitialDrawerRouterState, drawerRouterReducer, focusedDrawerRoute, } from './drawer-router-state';
|
|
30
|
+
export { DRAWER_DEFAULT_TYPE, DRAWER_DEFAULT_POSITION, DRAWER_DEFAULT_WIDTH, DRAWER_DEFAULT_OVERLAY_COLOR, DRAWER_DEFAULT_SWIPE_ENABLED, DRAWER_DEFAULT_SWIPE_EDGE_WIDTH, DRAWER_DEFAULT_SWIPE_MIN_DISTANCE, DRAWER_DEFAULT_SWIPE_MIN_VELOCITY, resolveDrawerType, resolveDrawerPosition, resolveDrawerWidth, isDrawerAnimated, isDrawerOverlayVisible, resolveDrawerGeometry, isSwipeStartInEdge, isHorizontalDrag, resolveSwipeIntent, clamp01, startPageXOf, resolveDragProgress, shouldClaimDrawerSwipe, resolveDrawerSlotInterpolation, } from './drawer-options';
|
|
31
|
+
export { renderDrawer, drawerChildOrder } from './render-drawer';
|
|
32
|
+
export { isStackNavigatorHandle, isTabNavigatorHandle, isDrawerNavigatorHandle, } from './navigator-handles';
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,2FAA2F;AAC3F,gFAAgF;AAChF,yFAAyF;AACzF,2FAA2F;AAC3F,+FAA+F;AAC/F,yBAAyB;AAEzB,cAAc,aAAa,CAAC;AAE5B,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAgC3B,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,qBAAqB,EACrB,eAAe,EACf,8BAA8B,EAC9B,+BAA+B,EAC/B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAQ7B,8FAA8F;AAC9F,+FAA+F;AAC/F,kGAAkG;AAClG,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,gGAAgG;AAChG,qFAAqF;AACrF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK7F,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG/D,sFAAsF;AACtF,+FAA+F;AAC/F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,4EAA4E;AAC5E,iGAAiG;AACjG,iGAAiG;AACjG,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,4BAA4B,EAC5B,+BAA+B,EAC/B,iCAAiC,EACjC,iCAAiC,EACjC,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAYjE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IRoute } from '../navigator-state';
|
|
2
|
+
export type IScreenLinkingConfig = string | {
|
|
3
|
+
path?: string;
|
|
4
|
+
screens?: Record<string, IScreenLinkingConfig>;
|
|
5
|
+
};
|
|
6
|
+
export type ILinkingConfig = {
|
|
7
|
+
prefixes: string[];
|
|
8
|
+
config: {
|
|
9
|
+
screens: Record<string, IScreenLinkingConfig>;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveRouteFromUrl(config: ILinkingConfig, url: string): IRoute<unknown> | null;
|
|
13
|
+
export declare function resolveUrlFromRoute(config: ILinkingConfig, route: IRoute<unknown>): string | null;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// Linking config: the piece @react-navigation's `NavigationContainer`'s `linking` prop provides
|
|
2
|
+
// on top of the framework-agnostic `Linking` module (core/engine/src/linking) - resolving a URL
|
|
3
|
+
// ('myapp://user/42', '/user/42') to a route, and a route back to a URL. This is OUR OWN type,
|
|
4
|
+
// not imported from react-navigation, kept close to its shape (`prefixes` + `config.screens`)
|
|
5
|
+
// only so the DX is familiar.
|
|
6
|
+
//
|
|
7
|
+
// Why hand-rolled matching instead of react-router's `matchPath`/`generatePath` (evaluated per
|
|
8
|
+
// task): react-router 8's package has no subpath export for the pure `lib/router/utils.ts`
|
|
9
|
+
// matcher - its only general entry point (`.`) eagerly imports `./lib/dom/*`
|
|
10
|
+
// (BrowserRouter/ScrollRestoration/cookies) and `./lib/server-runtime/*`, code that assumes DOM
|
|
11
|
+
// and Node globals a Metro/Hermes RN bundle doesn't have; its `peerDependencies` also pin
|
|
12
|
+
// `react-dom`, which this DOM-free monorepo never installs (see CLAUDE.md
|
|
13
|
+
// react_native_is_an_explicit_top_level_peer - no foreign runtime singleton gets smuggled in).
|
|
14
|
+
// On top of the bundling risk, `matchPath`'s/`generatePath`'s param-name extraction is a
|
|
15
|
+
// template-literal-type trick that only fires for a compile-time LITERAL path string; our
|
|
16
|
+
// patterns come from a runtime config object (`Path` widens to plain `string`), so the generic
|
|
17
|
+
// degrades to an empty params type and using the result would force an `as` cast - forbidden by
|
|
18
|
+
// this project's TS conventions. A minimal `:param`-segment matcher sidesteps both problems and
|
|
19
|
+
// is the right size for a single flat Stack (no optional/splat segments - no nested-navigator use
|
|
20
|
+
// for them yet).
|
|
21
|
+
import { dlog } from '@symbiote-native/engine';
|
|
22
|
+
import { isRecord } from '../guards';
|
|
23
|
+
// Strips leading/trailing slashes so segments join predictably regardless of how the caller
|
|
24
|
+
// wrote a path ('feed/:sort', '/feed/:sort/', etc).
|
|
25
|
+
function normalizeSegment(segment) {
|
|
26
|
+
return segment.replace(/^\/+|\/+$/g, '');
|
|
27
|
+
}
|
|
28
|
+
function joinPath(parent, child) {
|
|
29
|
+
const parts = [normalizeSegment(parent), normalizeSegment(child)].filter(part => part.length > 0);
|
|
30
|
+
return parts.join('/');
|
|
31
|
+
}
|
|
32
|
+
// Walks `screens` recursively, accumulating the path down to each LEAF screen. Unlike
|
|
33
|
+
// react-navigation (which resolves nested config into nested navigation state), our navigator is
|
|
34
|
+
// a single flat Stack - a `screens` group with no `path` of its own is transparent (consumes no
|
|
35
|
+
// URL segment); a group WITH a `path` but no nested `screens` is itself a leaf using that path.
|
|
36
|
+
function flattenScreens(screens, parentPath, out) {
|
|
37
|
+
for (const [name, entry] of Object.entries(screens)) {
|
|
38
|
+
if (typeof entry === 'string') {
|
|
39
|
+
out.push({ name, pattern: joinPath(parentPath, entry) });
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const nextParent = entry.path !== undefined ? joinPath(parentPath, entry.path) : parentPath;
|
|
43
|
+
if (entry.screens !== undefined) {
|
|
44
|
+
flattenScreens(entry.screens, nextParent, out);
|
|
45
|
+
}
|
|
46
|
+
else if (entry.path !== undefined) {
|
|
47
|
+
out.push({ name, pattern: nextParent });
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
dlog(`linking-config: screen "${name}" has neither a path nor nested screens, skipping`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
function dynamicSegmentCount(pattern) {
|
|
56
|
+
if (pattern.length === 0)
|
|
57
|
+
return 0;
|
|
58
|
+
return pattern.split('/').filter(segment => segment.startsWith(':')).length;
|
|
59
|
+
}
|
|
60
|
+
function segmentCount(pattern) {
|
|
61
|
+
return pattern.length === 0 ? 0 : pattern.split('/').length;
|
|
62
|
+
}
|
|
63
|
+
// More static segments should win over a param that would also match (e.g. a literal
|
|
64
|
+
// '/user/me' pattern over '/user/:id'), mirroring how react-navigation prefers exact matches.
|
|
65
|
+
function bySpecificity(a, b) {
|
|
66
|
+
const dynamicDiff = dynamicSegmentCount(a.pattern) - dynamicSegmentCount(b.pattern);
|
|
67
|
+
if (dynamicDiff !== 0)
|
|
68
|
+
return dynamicDiff;
|
|
69
|
+
return segmentCount(b.pattern) - segmentCount(a.pattern);
|
|
70
|
+
}
|
|
71
|
+
function matchPattern(pattern, pathname) {
|
|
72
|
+
const patternSegments = pattern.length === 0 ? [] : pattern.split('/');
|
|
73
|
+
const pathSegments = pathname.length === 0 ? [] : pathname.split('/');
|
|
74
|
+
if (patternSegments.length !== pathSegments.length)
|
|
75
|
+
return null;
|
|
76
|
+
const params = {};
|
|
77
|
+
for (let index = 0; index < patternSegments.length; index += 1) {
|
|
78
|
+
const patternSegment = patternSegments[index];
|
|
79
|
+
const pathSegment = pathSegments[index];
|
|
80
|
+
if (patternSegment.startsWith(':')) {
|
|
81
|
+
params[patternSegment.slice(1)] = decodeURIComponent(pathSegment);
|
|
82
|
+
}
|
|
83
|
+
else if (patternSegment !== pathSegment) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return params;
|
|
88
|
+
}
|
|
89
|
+
function stripQueryAndHash(url) {
|
|
90
|
+
const match = /[?#]/.exec(url);
|
|
91
|
+
return match === null ? url : url.slice(0, match.index);
|
|
92
|
+
}
|
|
93
|
+
// Resolves a full URL down to the bare path segment string ('user/42', no leading slash) by
|
|
94
|
+
// stripping the longest matching configured prefix, falling back to treating the URL as an
|
|
95
|
+
// already-bare path when it starts with '/' (the task's second example form). Returns null when
|
|
96
|
+
// neither applies - an unrecognized scheme/host, not "no route matched".
|
|
97
|
+
function extractPathname(config, url) {
|
|
98
|
+
const withoutQuery = stripQueryAndHash(url);
|
|
99
|
+
const sortedPrefixes = [...config.prefixes].sort((a, b) => b.length - a.length);
|
|
100
|
+
for (const prefix of sortedPrefixes) {
|
|
101
|
+
if (withoutQuery.startsWith(prefix)) {
|
|
102
|
+
return normalizeSegment(withoutQuery.slice(prefix.length));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (withoutQuery.startsWith('/'))
|
|
106
|
+
return normalizeSegment(withoutQuery);
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
export function resolveRouteFromUrl(config, url) {
|
|
110
|
+
const pathname = extractPathname(config, url);
|
|
111
|
+
if (pathname === null) {
|
|
112
|
+
dlog(`linking-config: url "${url}" matched no configured prefix`);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const candidates = flattenScreens(config.config.screens, '', []).sort(bySpecificity);
|
|
116
|
+
for (const candidate of candidates) {
|
|
117
|
+
const params = matchPattern(candidate.pattern, pathname);
|
|
118
|
+
if (params !== null) {
|
|
119
|
+
dlog(`linking-config: resolved "${url}" -> ${candidate.name}`);
|
|
120
|
+
// `key` is not real route identity here - the navigator mints its own on push/replace
|
|
121
|
+
// (stack.ts's createRoute); `name` is a stable enough placeholder to satisfy IRoute's shape.
|
|
122
|
+
return {
|
|
123
|
+
key: candidate.name,
|
|
124
|
+
name: candidate.name,
|
|
125
|
+
params: Object.keys(params).length > 0 ? params : undefined,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
dlog(`linking-config: url "${url}" (path "${pathname}") matched no configured screen`);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
// The inverse of matchPattern: fills a pattern's ':param' segments from `params`, or returns
|
|
133
|
+
// null when a required param is missing (mirrors react-router's generatePath throwing, minus the
|
|
134
|
+
// throw - a resolver returning null reads more naturally at the call site here).
|
|
135
|
+
function fillPattern(pattern, params) {
|
|
136
|
+
if (pattern.length === 0)
|
|
137
|
+
return '';
|
|
138
|
+
const source = isRecord(params) ? params : {};
|
|
139
|
+
const segments = [];
|
|
140
|
+
for (const segment of pattern.split('/')) {
|
|
141
|
+
if (!segment.startsWith(':')) {
|
|
142
|
+
segments.push(segment);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const value = source[segment.slice(1)];
|
|
146
|
+
if (value === undefined || value === null)
|
|
147
|
+
return null;
|
|
148
|
+
segments.push(encodeURIComponent(String(value)));
|
|
149
|
+
}
|
|
150
|
+
return segments.join('/');
|
|
151
|
+
}
|
|
152
|
+
export function resolveUrlFromRoute(config, route) {
|
|
153
|
+
const candidate = flattenScreens(config.config.screens, '', []).find(entry => entry.name === route.name);
|
|
154
|
+
if (candidate === undefined) {
|
|
155
|
+
dlog(`linking-config: no configured screen for route name "${route.name}"`);
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
const path = fillPattern(candidate.pattern, route.params);
|
|
159
|
+
if (path === null) {
|
|
160
|
+
dlog(`linking-config: route "${route.name}" is missing a param required by "${candidate.pattern}"`);
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const prefix = config.prefixes[0];
|
|
164
|
+
if (prefix === undefined)
|
|
165
|
+
return path.length > 0 ? `/${path}` : '/';
|
|
166
|
+
// A prefix already carrying its own trailing separator ('myapp://') must not be truncated to
|
|
167
|
+
// 'myapp:/' by naively slicing one char off - only add a '/' when the prefix doesn't have one.
|
|
168
|
+
if (path.length === 0)
|
|
169
|
+
return prefix;
|
|
170
|
+
return prefix.endsWith('/') ? `${prefix}${path}` : `${prefix}/${path}`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/linking-config/index.ts"],"names":[],"mappings":"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"}
|