@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 @@
|
|
|
1
|
+
{"version":3,"file":"search-bar-commands.js","sourceRoot":"","sources":["../../src/core/search-bar-commands.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,6FAA6F;AAC7F,0FAA0F;AAC1F,mFAAmF;AACnF,+FAA+F;AAC/F,+FAA+F;AAC/F,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAsB,MAAM,yBAAyB,CAAC;AAWxF,8FAA8F;AAC9F,4FAA4F;AAC5F,8FAA8F;AAC9F,0FAA0F;AAC1F,iGAAiG;AACjG,SAAS,cAAc,CAAC,OAAe,EAAE,IAA0B;IACjE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CACF,qBAAqB,OAAO,qDAAqD,IAAI,CAAC,GAAG,EAAE,EAAE,CAC9F,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iGAAiG;AACjG,6FAA6F;AAC7F,mDAAmD;AACnD,SAAS,WAAW,CAClB,OAAmC,EACnC,OAAe;IAEf,OAAO,CAAC,GAAG,IAAe,EAAQ,EAAE;QAClC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,OAAO;QAC3C,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,wCAAwC;AACxC,MAAM,UAAU,oBAAoB,CAAC,OAAmC;IACtE,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;QACpC,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;QAClC,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC;QAC5C,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;QACxC,YAAY,EAAE,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC;QAClD,kBAAkB,EAAE,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type ISearchParamValue = string | number | boolean | (string | number)[];
|
|
2
|
+
export type ISearchParams = Record<string, ISearchParamValue | undefined>;
|
|
3
|
+
export declare function splitPathnameQuery(url: string): {
|
|
4
|
+
pathname: string;
|
|
5
|
+
query: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function parseSearchParams(query: string): Record<string, string | string[]>;
|
|
8
|
+
export declare function stringifySearchParams(params: ISearchParams): string;
|
|
9
|
+
export declare function segmentsFromPathname(pathname: string): string[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Query-string <-> params for the web-router facade (the URL layer Expo Router / react-router /
|
|
2
|
+
// vue-router share). Local vs global search params (Expo's useLocalSearchParams /
|
|
3
|
+
// useGlobalSearchParams) read off this same scalar model; the adapters own only the hook wiring.
|
|
4
|
+
// Splits a raw href string into its path and its query+hash tail ('/users/42?tab=posts' ->
|
|
5
|
+
// { pathname: '/users/42', query: '?tab=posts' }). The linking config matches on the path alone,
|
|
6
|
+
// so the query is peeled off here and parsed back into params by the caller.
|
|
7
|
+
export function splitPathnameQuery(url) {
|
|
8
|
+
const match = /[?#]/.exec(url);
|
|
9
|
+
if (match === null)
|
|
10
|
+
return { pathname: url, query: '' };
|
|
11
|
+
return { pathname: url.slice(0, match.index), query: url.slice(match.index) };
|
|
12
|
+
}
|
|
13
|
+
// Parses a query string ('?a=1&b=2&b=3', leading '?'/'#' optional) into params, collapsing a
|
|
14
|
+
// repeated key into an array ('b' -> ['2', '3']). Values arrive as strings — the URL carries no
|
|
15
|
+
// type — so a consumer that wants a number coerces at the read site.
|
|
16
|
+
export function parseSearchParams(query) {
|
|
17
|
+
const trimmed = query.replace(/^[?#]/, '');
|
|
18
|
+
if (trimmed.length === 0)
|
|
19
|
+
return {};
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const pair of trimmed.split('&')) {
|
|
22
|
+
if (pair.length === 0)
|
|
23
|
+
continue;
|
|
24
|
+
const eq = pair.indexOf('=');
|
|
25
|
+
const key = decodeURIComponent(eq === -1 ? pair : pair.slice(0, eq));
|
|
26
|
+
const value = decodeURIComponent((eq === -1 ? '' : pair.slice(eq + 1)).replace(/\+/g, ' '));
|
|
27
|
+
const existing = out[key];
|
|
28
|
+
if (existing === undefined)
|
|
29
|
+
out[key] = value;
|
|
30
|
+
else if (Array.isArray(existing))
|
|
31
|
+
existing.push(value);
|
|
32
|
+
else
|
|
33
|
+
out[key] = [existing, value];
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
// The inverse: params -> '?a=1&b=2&b=3' (empty string when nothing to serialize, so a caller can
|
|
38
|
+
// concatenate it onto a pathname unconditionally). Undefined values drop out; arrays repeat the key.
|
|
39
|
+
export function stringifySearchParams(params) {
|
|
40
|
+
const parts = [];
|
|
41
|
+
for (const [key, value] of Object.entries(params)) {
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
continue;
|
|
44
|
+
const encodedKey = encodeURIComponent(key);
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
for (const item of value)
|
|
47
|
+
parts.push(`${encodedKey}=${encodeURIComponent(String(item))}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
parts.push(`${encodedKey}=${encodeURIComponent(String(value))}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return parts.length > 0 ? `?${parts.join('&')}` : '';
|
|
54
|
+
}
|
|
55
|
+
// Splits a pathname into its non-empty segments ('/users/42' -> ['users', '42']), the shape
|
|
56
|
+
// Expo's useSegments returns.
|
|
57
|
+
export function segmentsFromPathname(pathname) {
|
|
58
|
+
return pathname.split('/').filter(segment => segment.length > 0);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=search-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-params.js","sourceRoot":"","sources":["../../src/core/search-params.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,kFAAkF;AAClF,iGAAiG;AAKjG,2FAA2F;AAC3F,iGAAiG;AACjG,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACxD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,6FAA6F;AAC7F,gGAAgG;AAChG,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAsC,EAAE,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAE5F,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,QAAQ,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACxC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAClD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iGAAiG;AACjG,qGAAqG;AACrG,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,4FAA4F;AAC5F,8BAA8B;AAC9B,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Lightweight state persistence: pure serialize/deserialize for INavigatorState, the primitive
|
|
2
|
+
// @react-navigation's `initialState`/`onStateChange` persistence recipe is built on. Routes are
|
|
3
|
+
// already `{key, name, params}` - plain data, no functions/refs/class instances - so a JSON-safe
|
|
4
|
+
// passthrough is sufficient; no framework wiring lives here yet (that's an adapter-level task).
|
|
5
|
+
import { isRecord } from '../guards';
|
|
6
|
+
// No `'params' in value` check: a route pushed with no params serializes to `{key, name,
|
|
7
|
+
// params: undefined}`, and JSON.stringify drops undefined-valued keys - a JSON round trip of a
|
|
8
|
+
// perfectly valid route legitimately arrives here without a `params` key at all.
|
|
9
|
+
function isRoute(value) {
|
|
10
|
+
return isRecord(value) && typeof value.key === 'string' && typeof value.name === 'string';
|
|
11
|
+
}
|
|
12
|
+
function isNavigatorState(value) {
|
|
13
|
+
return isRecord(value) && Array.isArray(value.routes) && value.routes.every(isRoute);
|
|
14
|
+
}
|
|
15
|
+
export function serializeNavigatorState(state) {
|
|
16
|
+
return state;
|
|
17
|
+
}
|
|
18
|
+
export function deserializeNavigatorState(raw) {
|
|
19
|
+
if (!isNavigatorState(raw)) {
|
|
20
|
+
throw new Error('deserializeNavigatorState: persisted value is not a valid navigator state');
|
|
21
|
+
}
|
|
22
|
+
return raw;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/state-persistence/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,gGAAgG;AAChG,iGAAiG;AACjG,gGAAgG;AAIhG,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,yFAAyF;AACzF,+FAA+F;AAC/F,iFAAiF;AACjF,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5F,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Lightweight state persistence: pure serialize/deserialize for INavigatorState, the primitive
|
|
2
|
+
// @react-navigation's `initialState`/`onStateChange` persistence recipe is built on. Routes are
|
|
3
|
+
// already `{key, name, params}` — plain data, no functions/refs/class instances — so a JSON-safe
|
|
4
|
+
// passthrough is sufficient; no framework wiring lives here yet (that's an adapter-level task).
|
|
5
|
+
import { isRecord } from './guards';
|
|
6
|
+
// No `'params' in value` check: a route pushed with no params serializes to `{key, name,
|
|
7
|
+
// params: undefined}`, and JSON.stringify drops undefined-valued keys — a JSON round trip of a
|
|
8
|
+
// perfectly valid route legitimately arrives here without a `params` key at all.
|
|
9
|
+
function isRoute(value) {
|
|
10
|
+
return isRecord(value) && typeof value.key === 'string' && typeof value.name === 'string';
|
|
11
|
+
}
|
|
12
|
+
function isNavigatorState(value) {
|
|
13
|
+
return isRecord(value) && Array.isArray(value.routes) && value.routes.every(isRoute);
|
|
14
|
+
}
|
|
15
|
+
export function serializeNavigatorState(state) {
|
|
16
|
+
return state;
|
|
17
|
+
}
|
|
18
|
+
export function deserializeNavigatorState(raw) {
|
|
19
|
+
if (!isNavigatorState(raw)) {
|
|
20
|
+
throw new Error('deserializeNavigatorState: persisted value is not a valid navigator state');
|
|
21
|
+
}
|
|
22
|
+
return raw;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=state-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-persistence.js","sourceRoot":"","sources":["../../src/core/state-persistence.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,gGAAgG;AAChG,iGAAiG;AACjG,gGAAgG;AAIhG,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,yFAAyF;AACzF,+FAA+F;AAC/F,iFAAiF;AACjF,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5F,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IColorValue } from '@symbiote-native/engine';
|
|
2
|
+
import type { IViewStyle, IStyleProp } from '@symbiote-native/engine';
|
|
3
|
+
import type { IDescriptor } from '@symbiote-native/components';
|
|
4
|
+
export type ITabBarIcon = IDescriptor | string;
|
|
5
|
+
export type ITabOptions = {
|
|
6
|
+
title?: string;
|
|
7
|
+
tabBarLabel?: string;
|
|
8
|
+
tabBarIcon?: ITabBarIcon;
|
|
9
|
+
tabBarBadge?: string | number;
|
|
10
|
+
tabBarActiveTintColor?: IColorValue;
|
|
11
|
+
tabBarInactiveTintColor?: IColorValue;
|
|
12
|
+
tabBarStyle?: IStyleProp<IViewStyle>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Per-tab agnostic options. Mirrors @react-navigation/bottom-tabs' `options` surface (title,
|
|
2
|
+
// tabBarLabel, tabBarIcon, tabBarBadge, tint colors, tabBarStyle) minus anything that requires a
|
|
3
|
+
// framework element: `tabBarIcon` there is a render prop returning a platform icon element, but
|
|
4
|
+
// per <prop_types_split_agnostic_vs_per_adapter> a render-callback-returning-a-framework-element
|
|
5
|
+
// field can't live in the shared agnostic type, so here it is EITHER a pre-built `IDescriptor`
|
|
6
|
+
// (an adapter can bridge any host node it already resolved, image or vector icon) or a bare icon
|
|
7
|
+
// NAME string the renderer paints as a label-style glyph - both framework-agnostic. An adapter
|
|
8
|
+
// wanting a `(props) => ReactNode`-style callback resolves it to one of these two forms itself,
|
|
9
|
+
// same split as IPressableProps's per-adapter children.
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=tab-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-options.js","sourceRoot":"","sources":["../../src/core/tab-options.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,gGAAgG;AAChG,iGAAiG;AACjG,+FAA+F;AAC/F,iGAAiG;AACjG,+FAA+F;AAC/F,gGAAgG;AAChG,wDAAwD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IRoute } from '../navigator-state';
|
|
2
|
+
export type { IRoute } from '../navigator-state';
|
|
3
|
+
type IRouteEntry = IRoute<unknown>;
|
|
4
|
+
export type ITabRouterState = Readonly<{
|
|
5
|
+
routes: readonly IRouteEntry[];
|
|
6
|
+
index: number;
|
|
7
|
+
}>;
|
|
8
|
+
export type ITabRouterAction = {
|
|
9
|
+
type: 'jumpTo';
|
|
10
|
+
name: string;
|
|
11
|
+
params?: unknown;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'setParams';
|
|
14
|
+
key: string;
|
|
15
|
+
params: unknown;
|
|
16
|
+
};
|
|
17
|
+
export declare function createInitialTabState(routes: readonly IRouteEntry[], initialRouteName?: string): ITabRouterState;
|
|
18
|
+
export declare function tabRouterReducer(state: ITabRouterState, action: ITabRouterAction): ITabRouterState;
|
|
19
|
+
export declare function isFocusedRoute(index: number, focusedIndex: number): boolean;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// TabRouter: the logic half (framework-agnostic, zero render). A pure reducer over a FOCUSED
|
|
2
|
+
// INDEX into a fixed route list - jumpTo/setParams - mirroring what @react-navigation/routers'
|
|
3
|
+
// TabRouter keeps, minus the React-specific action-creator/linking machinery. The key structural
|
|
4
|
+
// difference from navigator-state's Stack: tabs never push/pop a route, they move a focused
|
|
5
|
+
// index between a fixed set (mirrors TabRouter.getInitialState / getStateForAction for
|
|
6
|
+
// JUMP_TO - see the tab-actions docs: jumpTo takes a route NAME, not a stack push). Route
|
|
7
|
+
// identity (`key`) is generated by the CALLER, same convention as navigator-state.ts - reused
|
|
8
|
+
// verbatim from there so Stack and Tabs share one route shape.
|
|
9
|
+
import { mergeParams } from '../guards';
|
|
10
|
+
const INITIAL_FOCUSED_INDEX = 0;
|
|
11
|
+
export function createInitialTabState(routes, initialRouteName) {
|
|
12
|
+
if (initialRouteName === undefined)
|
|
13
|
+
return { routes, index: INITIAL_FOCUSED_INDEX };
|
|
14
|
+
const index = routes.findIndex(route => route.name === initialRouteName);
|
|
15
|
+
return { routes, index: index === -1 ? INITIAL_FOCUSED_INDEX : index };
|
|
16
|
+
}
|
|
17
|
+
// jumpTo moves the focused index to an existing route by name and optionally merges params
|
|
18
|
+
// (navigation.jumpTo(name, params) - the tab-actions doc's own signature); it never adds,
|
|
19
|
+
// removes, or reorders routes (mirrors TabRouter: JUMP_TO is a no-op when the target name isn't
|
|
20
|
+
// registered, same as navigatorReducer's popTo bailing on an unknown key). setParams merges into
|
|
21
|
+
// the target route's params by key (CommonActions.setParams semantics - a merge, not a replace).
|
|
22
|
+
export function tabRouterReducer(state, action) {
|
|
23
|
+
switch (action.type) {
|
|
24
|
+
case 'jumpTo': {
|
|
25
|
+
const index = state.routes.findIndex(route => route.name === action.name);
|
|
26
|
+
if (index === -1)
|
|
27
|
+
return state;
|
|
28
|
+
if (action.params === undefined) {
|
|
29
|
+
return index === state.index ? state : { ...state, index };
|
|
30
|
+
}
|
|
31
|
+
const target = state.routes[index];
|
|
32
|
+
const routes = state.routes.slice();
|
|
33
|
+
routes[index] = { ...target, params: mergeParams(target.params, action.params) };
|
|
34
|
+
return { ...state, index, routes };
|
|
35
|
+
}
|
|
36
|
+
case 'setParams': {
|
|
37
|
+
const index = state.routes.findIndex(route => route.key === action.key);
|
|
38
|
+
if (index === -1)
|
|
39
|
+
return state;
|
|
40
|
+
const target = state.routes[index];
|
|
41
|
+
const routes = state.routes.slice();
|
|
42
|
+
routes[index] = { ...target, params: mergeParams(target.params, action.params) };
|
|
43
|
+
return { ...state, routes };
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
return state;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function isFocusedRoute(index, focusedIndex) {
|
|
50
|
+
return index === focusedIndex;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/tab-router-state/index.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,+FAA+F;AAC/F,iGAAiG;AACjG,4FAA4F;AAC5F,uFAAuF;AACvF,0FAA0F;AAC1F,8FAA8F;AAC9F,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAgBxC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,qBAAqB,CACnC,MAA8B,EAC9B,gBAAyB;IAEzB,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACpF,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,CAAC;AACzE,CAAC;AAED,2FAA2F;AAC3F,0FAA0F;AAC1F,gGAAgG;AAChG,iGAAiG;AACjG,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAC9B,KAAsB,EACtB,MAAwB;IAExB,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,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;YACxE,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;QAED;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,YAAoB;IAChE,OAAO,KAAK,KAAK,YAAY,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IRoute } from './navigator-state';
|
|
2
|
+
export type { IRoute } from './navigator-state';
|
|
3
|
+
type IRouteEntry = IRoute<unknown>;
|
|
4
|
+
export type ITabRouterState = Readonly<{
|
|
5
|
+
routes: readonly IRouteEntry[];
|
|
6
|
+
index: number;
|
|
7
|
+
}>;
|
|
8
|
+
export type ITabRouterAction = {
|
|
9
|
+
type: 'jumpTo';
|
|
10
|
+
name: string;
|
|
11
|
+
params?: unknown;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'setParams';
|
|
14
|
+
key: string;
|
|
15
|
+
params: unknown;
|
|
16
|
+
};
|
|
17
|
+
export declare function createInitialTabState(routes: readonly IRouteEntry[], initialRouteName?: string): ITabRouterState;
|
|
18
|
+
export declare function tabRouterReducer(state: ITabRouterState, action: ITabRouterAction): ITabRouterState;
|
|
19
|
+
export declare function isFocusedRoute(index: number, focusedIndex: number): boolean;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// TabRouter: the logic half (framework-agnostic, zero render). A pure reducer over a FOCUSED
|
|
2
|
+
// INDEX into a fixed route list — jumpTo/setParams — mirroring what @react-navigation/routers'
|
|
3
|
+
// TabRouter keeps, minus the React-specific action-creator/linking machinery. The key structural
|
|
4
|
+
// difference from navigator-state's Stack: tabs never push/pop a route, they move a focused
|
|
5
|
+
// index between a fixed set (mirrors TabRouter.getInitialState / getStateForAction for
|
|
6
|
+
// JUMP_TO — see the tab-actions docs: jumpTo takes a route NAME, not a stack push). Route
|
|
7
|
+
// identity (`key`) is generated by the CALLER, same convention as navigator-state.ts — reused
|
|
8
|
+
// verbatim from there so Stack and Tabs share one route shape.
|
|
9
|
+
import { mergeParams } from './guards';
|
|
10
|
+
const INITIAL_FOCUSED_INDEX = 0;
|
|
11
|
+
export function createInitialTabState(routes, initialRouteName) {
|
|
12
|
+
if (initialRouteName === undefined)
|
|
13
|
+
return { routes, index: INITIAL_FOCUSED_INDEX };
|
|
14
|
+
const index = routes.findIndex(route => route.name === initialRouteName);
|
|
15
|
+
return { routes, index: index === -1 ? INITIAL_FOCUSED_INDEX : index };
|
|
16
|
+
}
|
|
17
|
+
// jumpTo moves the focused index to an existing route by name and optionally merges params
|
|
18
|
+
// (navigation.jumpTo(name, params) — the tab-actions doc's own signature); it never adds,
|
|
19
|
+
// removes, or reorders routes (mirrors TabRouter: JUMP_TO is a no-op when the target name isn't
|
|
20
|
+
// registered, same as navigatorReducer's popTo bailing on an unknown key). setParams merges into
|
|
21
|
+
// the target route's params by key (CommonActions.setParams semantics — a merge, not a replace).
|
|
22
|
+
export function tabRouterReducer(state, action) {
|
|
23
|
+
switch (action.type) {
|
|
24
|
+
case 'jumpTo': {
|
|
25
|
+
const index = state.routes.findIndex(route => route.name === action.name);
|
|
26
|
+
if (index === -1)
|
|
27
|
+
return state;
|
|
28
|
+
if (action.params === undefined) {
|
|
29
|
+
return index === state.index ? state : { ...state, index };
|
|
30
|
+
}
|
|
31
|
+
const target = state.routes[index];
|
|
32
|
+
const routes = state.routes.slice();
|
|
33
|
+
routes[index] = { ...target, params: mergeParams(target.params, action.params) };
|
|
34
|
+
return { ...state, index, routes };
|
|
35
|
+
}
|
|
36
|
+
case 'setParams': {
|
|
37
|
+
const index = state.routes.findIndex(route => route.key === action.key);
|
|
38
|
+
if (index === -1)
|
|
39
|
+
return state;
|
|
40
|
+
const target = state.routes[index];
|
|
41
|
+
const routes = state.routes.slice();
|
|
42
|
+
routes[index] = { ...target, params: mergeParams(target.params, action.params) };
|
|
43
|
+
return { ...state, routes };
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
return state;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function isFocusedRoute(index, focusedIndex) {
|
|
50
|
+
return index === focusedIndex;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=tab-router-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-router-state.js","sourceRoot":"","sources":["../../src/core/tab-router-state.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,+FAA+F;AAC/F,iGAAiG;AACjG,4FAA4F;AAC5F,uFAAuF;AACvF,0FAA0F;AAC1F,8FAA8F;AAC9F,+DAA+D;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAgBvC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,MAAM,UAAU,qBAAqB,CACnC,MAA8B,EAC9B,gBAAyB;IAEzB,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACpF,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,CAAC;AACzE,CAAC;AAED,2FAA2F;AAC3F,0FAA0F;AAC1F,gGAAgG;AAChG,iGAAiG;AACjG,iGAAiG;AACjG,MAAM,UAAU,gBAAgB,CAC9B,KAAsB,EACtB,MAAwB;IAExB,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,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;YACxE,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;QAED;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,YAAoB;IAChE,OAAO,KAAK,KAAK,YAAY,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import 'react-native-screens/src/fabric/ScreenNativeComponent';
|
|
2
|
+
import 'react-native-screens/src/fabric/ModalScreenNativeComponent';
|
|
3
|
+
import 'react-native-screens/src/fabric/ScreenStackNativeComponent';
|
|
4
|
+
import 'react-native-screens/src/fabric/ScreenStackHeaderConfigNativeComponent';
|
|
5
|
+
import 'react-native-screens/src/fabric/ScreenStackHeaderSubviewNativeComponent';
|
|
6
|
+
import 'react-native-screens/src/fabric/SearchBarNativeComponent';
|
|
7
|
+
import 'react-native-screens/src/fabric/ScreenContentWrapperNativeComponent';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Side-effect: register RNSScreen/RNSScreenStack/RNSScreenStackHeaderConfig/
|
|
2
|
+
// RNSScreenStackHeaderSubview/RNSSearchBar/RNSScreenContentWrapper's ViewConfigs in RN's
|
|
3
|
+
// ReactNativeViewConfigRegistry. Evaluating each codegen native-component spec
|
|
4
|
+
// (codegenNativeComponent('RNSScreen', ...) etc.) registers the getter the engine reads via
|
|
5
|
+
// setNativeViewConfigSource, so events + color processors derive on first commit. We import the
|
|
6
|
+
// codegen SPECS, never react-native-screens' React components (ScreenStack.tsx et al - hooks,
|
|
7
|
+
// crashes a non-React adapter) - these modules have no hooks, so they are framework-agnostic and
|
|
8
|
+
// shared by every adapter entry. Each adapter barrel imports this; the component modules and
|
|
9
|
+
// their headless tests stay free of it. See CLAUDE.md <third_party_rn_packages_are_react_only>.
|
|
10
|
+
//
|
|
11
|
+
// RNSSearchBar (headerSearchBarOptions' native leaf, nested by render-stack.ts's
|
|
12
|
+
// renderHeaderConfig) was missing from this list - its ViewConfig was never registered, so Fabric
|
|
13
|
+
// had no component descriptor for 'RNSSearchBar' and crashed on mount the moment a screen set
|
|
14
|
+
// headerSearchBarOptions. That is the root cause of the search-bar crash, not a deeper
|
|
15
|
+
// Fabric-interop gap.
|
|
16
|
+
//
|
|
17
|
+
// RNSScreenStackHeaderSubview (the wrapper renderHeaderConfig nests the search bar leaf inside,
|
|
18
|
+
// per RNSScreenStackHeaderConfig.mm's mountChildComponentView requiring every header child to be
|
|
19
|
+
// one) needs the same registration, or the same class of mount crash follows.
|
|
20
|
+
//
|
|
21
|
+
// RNSScreenContentWrapper (the RNS_SCREEN_CONTENT_WRAPPER_VIEW_NAME wrapper stack.ts wraps every
|
|
22
|
+
// screen's content in - see its comment in core/constants.ts) additionally needs a NATIVE-side
|
|
23
|
+
// registration: this file alone is not enough. The native iOS registry
|
|
24
|
+
// (RCTThirdPartyComponentsProvider.mm, generated by codegen from THIS package's own
|
|
25
|
+
// package.json#codegenConfig.ios.componentProvider map, NOT from react-native-screens') has no
|
|
26
|
+
// entry for 'RNSScreenContentWrapper' by default, so without it Fabric falls back to its
|
|
27
|
+
// "Unimplemented component" placeholder view regardless of this file's import. Both registries
|
|
28
|
+
// are independently required for a never-before-used react-native-screens view: this file (JS
|
|
29
|
+
// ViewConfig, read by @symbiote-native/engine's registry.ts) and package.json's componentProvider
|
|
30
|
+
// map (native ComponentDescriptor, read by codegen at `pod install` time).
|
|
31
|
+
//
|
|
32
|
+
// RNSModalScreen's gap on both registries isn't a mount crash but a silent mispositioning bug.
|
|
33
|
+
// react-native-screens' own Screen.tsx picks
|
|
34
|
+
// ModalScreenNativeComponent ('RNSModalScreen') instead of ScreenNativeComponent ('RNSScreen')
|
|
35
|
+
// whenever stackPresentation isn't push/containedModal/containedTransparentModal, because
|
|
36
|
+
// RNSScreen.mm's updateLayoutMetrics: checks `[self isKindOfClass:RNSModalScreen.class]` and, for
|
|
37
|
+
// that class, DELIBERATELY skips applying Yoga's computed frame (its own comment: "the available
|
|
38
|
+
// space is most likely restricted & differs from what Yoga resolves during first layout - we want
|
|
39
|
+
// to rely on native layout here"). Emitting a plain 'RNSScreen' for a formSheet/modal presentation
|
|
40
|
+
// (as resolveScreenViewName below used to do unconditionally) means that check never matches, so
|
|
41
|
+
// Yoga's frame - computed as if the screen were still a normal flexed sibling in its outer
|
|
42
|
+
// RNSScreenStack's push-oriented column layout - gets applied verbatim and never corrected,
|
|
43
|
+
// visually shifting the whole modal down by one full screen's height. Fixed in
|
|
44
|
+
// core/render-stack.ts's resolveScreenViewName, which now mirrors Screen.tsx's own
|
|
45
|
+
// shouldUseModalScreenComponent condition exactly.
|
|
46
|
+
//
|
|
47
|
+
// Unlike @symbiote-native/slider (which deep-imports @react-native-community/slider's compiled
|
|
48
|
+
// `dist/`), react-native-screens declares `"react-native": "src/index"` in its package.json -
|
|
49
|
+
// Metro's resolverMainFields prioritizes that field, so it resolves the library straight to raw
|
|
50
|
+
// TypeScript source and transforms it like first-party code. The deep import below targets that
|
|
51
|
+
// same `src/fabric/` tree rather than a compiled output.
|
|
52
|
+
import 'react-native-screens/src/fabric/ScreenNativeComponent';
|
|
53
|
+
import 'react-native-screens/src/fabric/ModalScreenNativeComponent';
|
|
54
|
+
import 'react-native-screens/src/fabric/ScreenStackNativeComponent';
|
|
55
|
+
import 'react-native-screens/src/fabric/ScreenStackHeaderConfigNativeComponent';
|
|
56
|
+
import 'react-native-screens/src/fabric/ScreenStackHeaderSubviewNativeComponent';
|
|
57
|
+
import 'react-native-screens/src/fabric/SearchBarNativeComponent';
|
|
58
|
+
import 'react-native-screens/src/fabric/ScreenContentWrapperNativeComponent';
|
|
59
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yFAAyF;AACzF,+EAA+E;AAC/E,4FAA4F;AAC5F,gGAAgG;AAChG,8FAA8F;AAC9F,iGAAiG;AACjG,6FAA6F;AAC7F,gGAAgG;AAChG,EAAE;AACF,iFAAiF;AACjF,kGAAkG;AAClG,8FAA8F;AAC9F,uFAAuF;AACvF,sBAAsB;AACtB,EAAE;AACF,gGAAgG;AAChG,iGAAiG;AACjG,8EAA8E;AAC9E,EAAE;AACF,iGAAiG;AACjG,+FAA+F;AAC/F,uEAAuE;AACvE,oFAAoF;AACpF,+FAA+F;AAC/F,yFAAyF;AACzF,+FAA+F;AAC/F,8FAA8F;AAC9F,kGAAkG;AAClG,2EAA2E;AAC3E,EAAE;AACF,+FAA+F;AAC/F,6CAA6C;AAC7C,+FAA+F;AAC/F,0FAA0F;AAC1F,kGAAkG;AAClG,iGAAiG;AACjG,kGAAkG;AAClG,mGAAmG;AACnG,iGAAiG;AACjG,2FAA2F;AAC3F,4FAA4F;AAC5F,+EAA+E;AAC/E,mFAAmF;AACnF,mDAAmD;AACnD,EAAE;AACF,+FAA+F;AAC/F,8FAA8F;AAC9F,gGAAgG;AAChG,gGAAgG;AAChG,yDAAyD;AAEzD,OAAO,uDAAuD,CAAC;AAC/D,OAAO,4DAA4D,CAAC;AACpE,OAAO,4DAA4D,CAAC;AACpE,OAAO,wEAAwE,CAAC;AAChF,OAAO,yEAAyE,CAAC;AACjF,OAAO,0DAA0D,CAAC;AAClE,OAAO,qEAAqE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { codegenNativeComponent } from 'react-native';
|
|
4
|
+
import type { CodegenTypes as CT, ViewProps } from 'react-native';
|
|
5
|
+
|
|
6
|
+
// Internal export, not part of stable library API.
|
|
7
|
+
export interface NativeProps extends ViewProps {
|
|
8
|
+
accessibilityContainerViewIsModal?: CT.WithDefault<boolean, true>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default codegenNativeComponent<NativeProps>('RNSFullWindowOverlay', {
|
|
12
|
+
interfaceOnly: true,
|
|
13
|
+
});
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { codegenNativeComponent } from 'react-native';
|
|
4
|
+
import type { CodegenTypes as CT, ViewProps, ColorValue } from 'react-native';
|
|
5
|
+
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
7
|
+
type ScreenEvent = Readonly<{}>;
|
|
8
|
+
|
|
9
|
+
type ScreenDismissedEvent = Readonly<{
|
|
10
|
+
dismissCount: CT.Int32;
|
|
11
|
+
}>;
|
|
12
|
+
|
|
13
|
+
type TransitionProgressEvent = Readonly<{
|
|
14
|
+
progress: CT.Double;
|
|
15
|
+
closing: CT.Int32;
|
|
16
|
+
goingForward: CT.Int32;
|
|
17
|
+
}>;
|
|
18
|
+
|
|
19
|
+
type HeaderHeightChangeEvent = Readonly<{
|
|
20
|
+
headerHeight: CT.Double;
|
|
21
|
+
}>;
|
|
22
|
+
|
|
23
|
+
type SheetDetentChangedEvent = Readonly<{
|
|
24
|
+
index: CT.Int32;
|
|
25
|
+
isStable: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
|
|
28
|
+
type GestureResponseDistanceType = Readonly<{
|
|
29
|
+
start: CT.Float;
|
|
30
|
+
end: CT.Float;
|
|
31
|
+
top: CT.Float;
|
|
32
|
+
bottom: CT.Float;
|
|
33
|
+
}>;
|
|
34
|
+
|
|
35
|
+
type StackPresentation =
|
|
36
|
+
| 'push'
|
|
37
|
+
| 'modal'
|
|
38
|
+
| 'transparentModal'
|
|
39
|
+
| 'fullScreenModal'
|
|
40
|
+
| 'formSheet'
|
|
41
|
+
| 'pageSheet'
|
|
42
|
+
| 'containedModal'
|
|
43
|
+
| 'containedTransparentModal';
|
|
44
|
+
|
|
45
|
+
type StackAnimation =
|
|
46
|
+
| 'default'
|
|
47
|
+
| 'flip'
|
|
48
|
+
| 'simple_push'
|
|
49
|
+
| 'none'
|
|
50
|
+
| 'fade'
|
|
51
|
+
| 'slide_from_right'
|
|
52
|
+
| 'slide_from_left'
|
|
53
|
+
| 'slide_from_bottom'
|
|
54
|
+
| 'fade_from_bottom'
|
|
55
|
+
| 'ios_from_right'
|
|
56
|
+
| 'ios_from_left';
|
|
57
|
+
|
|
58
|
+
type SwipeDirection = 'vertical' | 'horizontal';
|
|
59
|
+
|
|
60
|
+
type ReplaceAnimation = 'pop' | 'push';
|
|
61
|
+
|
|
62
|
+
type ScrollEdgeEffect = 'automatic' | 'hard' | 'soft' | 'hidden';
|
|
63
|
+
|
|
64
|
+
type OptionalBoolean = 'undefined' | 'false' | 'true';
|
|
65
|
+
|
|
66
|
+
export interface NativeProps extends ViewProps {
|
|
67
|
+
onAppear?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
68
|
+
onDisappear?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
69
|
+
onDismissed?: CT.DirectEventHandler<ScreenDismissedEvent> | undefined;
|
|
70
|
+
onNativeDismissCancelled?:
|
|
71
|
+
| CT.DirectEventHandler<ScreenDismissedEvent>
|
|
72
|
+
| undefined;
|
|
73
|
+
onWillAppear?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
74
|
+
onWillDisappear?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
75
|
+
onHeaderHeightChange?:
|
|
76
|
+
| CT.DirectEventHandler<HeaderHeightChangeEvent>
|
|
77
|
+
| undefined;
|
|
78
|
+
onTransitionProgress?:
|
|
79
|
+
| CT.DirectEventHandler<TransitionProgressEvent>
|
|
80
|
+
| undefined;
|
|
81
|
+
onGestureCancel?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
82
|
+
onHeaderBackButtonClicked?: CT.DirectEventHandler<ScreenEvent> | undefined;
|
|
83
|
+
onSheetDetentChanged?:
|
|
84
|
+
| CT.DirectEventHandler<SheetDetentChangedEvent>
|
|
85
|
+
| undefined;
|
|
86
|
+
screenId?: CT.WithDefault<string, ''>;
|
|
87
|
+
sheetAllowedDetents?: number[] | undefined;
|
|
88
|
+
sheetLargestUndimmedDetent?: CT.WithDefault<CT.Int32, -1>;
|
|
89
|
+
sheetGrabberVisible?: CT.WithDefault<boolean, false>;
|
|
90
|
+
sheetCornerRadius?: CT.WithDefault<CT.Float, -1.0>;
|
|
91
|
+
sheetExpandsWhenScrolledToEdge?: CT.WithDefault<boolean, false>;
|
|
92
|
+
sheetInitialDetent?: CT.WithDefault<CT.Int32, 0>;
|
|
93
|
+
sheetElevation?: CT.WithDefault<CT.Int32, 24>;
|
|
94
|
+
sheetShouldOverflowTopInset?: CT.WithDefault<boolean, false>;
|
|
95
|
+
sheetDefaultResizeAnimationEnabled?: CT.WithDefault<boolean, true>;
|
|
96
|
+
customAnimationOnSwipe?: boolean | undefined;
|
|
97
|
+
fullScreenSwipeEnabled?: CT.WithDefault<OptionalBoolean, 'undefined'>;
|
|
98
|
+
fullScreenSwipeShadowEnabled?: CT.WithDefault<boolean, true>;
|
|
99
|
+
homeIndicatorHidden?: boolean | undefined;
|
|
100
|
+
preventNativeDismiss?: boolean | undefined;
|
|
101
|
+
gestureEnabled?: CT.WithDefault<boolean, true>;
|
|
102
|
+
statusBarColor?: ColorValue | undefined;
|
|
103
|
+
statusBarHidden?: boolean | undefined;
|
|
104
|
+
screenOrientation?: string | undefined;
|
|
105
|
+
statusBarAnimation?: string | undefined;
|
|
106
|
+
statusBarStyle?: string | undefined;
|
|
107
|
+
statusBarTranslucent?: boolean | undefined;
|
|
108
|
+
gestureResponseDistance?: GestureResponseDistanceType | undefined;
|
|
109
|
+
stackPresentation?: CT.WithDefault<StackPresentation, 'push'>;
|
|
110
|
+
stackAnimation?: CT.WithDefault<StackAnimation, 'default'>;
|
|
111
|
+
transitionDuration?: CT.WithDefault<CT.Int32, 500>;
|
|
112
|
+
replaceAnimation?: CT.WithDefault<ReplaceAnimation, 'pop'>;
|
|
113
|
+
swipeDirection?: CT.WithDefault<SwipeDirection, 'horizontal'>;
|
|
114
|
+
hideKeyboardOnSwipe?: boolean | undefined;
|
|
115
|
+
activityState?: CT.WithDefault<CT.Float, -1.0>;
|
|
116
|
+
navigationBarColor?: ColorValue | undefined;
|
|
117
|
+
navigationBarTranslucent?: boolean | undefined;
|
|
118
|
+
navigationBarHidden?: boolean | undefined;
|
|
119
|
+
nativeBackButtonDismissalEnabled?: boolean | undefined;
|
|
120
|
+
bottomScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
|
|
121
|
+
leftScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
|
|
122
|
+
rightScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
|
|
123
|
+
topScrollEdgeEffect?: CT.WithDefault<ScrollEdgeEffect, 'automatic'>;
|
|
124
|
+
synchronousShadowStateUpdatesEnabled?: CT.WithDefault<boolean, true>;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export default codegenNativeComponent<NativeProps>('RNSModalScreen', {
|
|
128
|
+
interfaceOnly: true,
|
|
129
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default {};
|