react-native-screen-transitions 3.6.0 → 3.7.0-beta.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/README.md +2 -2
- package/lib/commonjs/blank-stack/components/stack-view.js +35 -39
- package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
- package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
- package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
- package/lib/commonjs/component-stack/components/stack-view.js +4 -11
- package/lib/commonjs/component-stack/components/stack-view.js.map +1 -1
- package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js +1 -1
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +6 -0
- package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/commonjs/shared/adapters/with-screen-transitions/context.js +28 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/context.js.map +1 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/index.js +69 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/index.js.map +1 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/options.js +57 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/options.js.map +1 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +143 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/types.js +6 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/types.js.map +1 -0
- package/lib/commonjs/shared/components/activity/helpers.js +9 -0
- package/lib/commonjs/shared/components/activity/helpers.js.map +1 -0
- package/lib/commonjs/shared/components/activity/index.js +20 -0
- package/lib/commonjs/shared/components/activity/index.js.map +1 -0
- package/lib/commonjs/shared/components/activity/variants/activity-container.js +29 -0
- package/lib/commonjs/shared/components/activity/variants/activity-container.js.map +1 -0
- package/lib/commonjs/shared/components/activity/variants/activity-screen.js +107 -0
- package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -0
- package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js +10 -4
- package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
- package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js +13 -1
- package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
- package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
- package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
- package/lib/commonjs/shared/components/screen-lifecycle/index.js +1 -1
- package/lib/commonjs/shared/components/screen-lifecycle/index.js.map +1 -1
- package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js +10 -4
- package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
- package/lib/commonjs/shared/hooks/navigation/use-stack.js +63 -6
- package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
- package/lib/commonjs/shared/index.js +8 -0
- package/lib/commonjs/shared/index.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +18 -29
- package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/descriptors/index.js +6 -0
- package/lib/commonjs/shared/providers/screen/descriptors/index.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js +4 -1
- package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
- package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +4 -1
- package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
- package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +7 -28
- package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +2 -14
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
- package/lib/commonjs/shared/providers/stack/direct.provider.js +4 -3
- package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +197 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +58 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +92 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +118 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +6 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js +24 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +131 -0
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/managed.provider.js +18 -29
- package/lib/commonjs/shared/providers/stack/managed.provider.js.map +1 -1
- package/lib/commonjs/shared/types/stack.types.js.map +1 -1
- package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js +4 -4
- package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
- package/lib/commonjs/shared/utils/bounds/navigation/reveal/config.js +2 -1
- package/lib/commonjs/shared/utils/bounds/navigation/reveal/config.js.map +1 -1
- package/lib/commonjs/shared/utils/create-provider.js +99 -10
- package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
- package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
- package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
- package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js +23 -6
- package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
- package/lib/commonjs/shared/utils/visibility-block-offset.js +13 -0
- package/lib/commonjs/shared/utils/visibility-block-offset.js.map +1 -0
- package/lib/module/blank-stack/components/stack-view.js +36 -40
- package/lib/module/blank-stack/components/stack-view.js.map +1 -1
- package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
- package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
- package/lib/module/component-stack/components/stack-view.js +4 -11
- package/lib/module/component-stack/components/stack-view.js.map +1 -1
- package/lib/module/component-stack/navigators/create-component-stack-navigator.js +1 -1
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js +6 -0
- package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/module/shared/adapters/with-screen-transitions/context.js +23 -0
- package/lib/module/shared/adapters/with-screen-transitions/context.js.map +1 -0
- package/lib/module/shared/adapters/with-screen-transitions/index.js +65 -0
- package/lib/module/shared/adapters/with-screen-transitions/index.js.map +1 -0
- package/lib/module/shared/adapters/with-screen-transitions/options.js +52 -0
- package/lib/module/shared/adapters/with-screen-transitions/options.js.map +1 -0
- package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +138 -0
- package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
- package/lib/module/shared/adapters/with-screen-transitions/types.js +4 -0
- package/lib/module/shared/adapters/with-screen-transitions/types.js.map +1 -0
- package/lib/module/shared/components/activity/helpers.js +5 -0
- package/lib/module/shared/components/activity/helpers.js.map +1 -0
- package/lib/module/shared/components/activity/index.js +5 -0
- package/lib/module/shared/components/activity/index.js.map +1 -0
- package/lib/module/shared/components/activity/variants/activity-container.js +24 -0
- package/lib/module/shared/components/activity/variants/activity-container.js.map +1 -0
- package/lib/module/shared/components/activity/variants/activity-screen.js +103 -0
- package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -0
- package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js +11 -5
- package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
- package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js +11 -0
- package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
- package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
- package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
- package/lib/module/shared/components/screen-lifecycle/index.js +1 -1
- package/lib/module/shared/components/screen-lifecycle/index.js.map +1 -1
- package/lib/module/shared/hooks/navigation/use-navigation-helpers.js +11 -5
- package/lib/module/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
- package/lib/module/shared/hooks/navigation/use-stack.js +63 -6
- package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
- package/lib/module/shared/index.js +3 -0
- package/lib/module/shared/index.js.map +1 -1
- package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +17 -29
- package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
- package/lib/module/shared/providers/screen/descriptors/index.js +1 -1
- package/lib/module/shared/providers/screen/descriptors/index.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
- package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +2 -2
- package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js +5 -2
- package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
- package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +5 -2
- package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
- package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +7 -28
- package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
- package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +3 -15
- package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
- package/lib/module/shared/providers/stack/direct.provider.js +5 -4
- package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +192 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +53 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +78 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +113 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +4 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js +19 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +126 -0
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
- package/lib/module/shared/providers/stack/managed.provider.js +19 -30
- package/lib/module/shared/providers/stack/managed.provider.js.map +1 -1
- package/lib/module/shared/types/stack.types.js.map +1 -1
- package/lib/module/shared/utils/bounds/navigation/reveal/build.js +5 -5
- package/lib/module/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
- package/lib/module/shared/utils/bounds/navigation/reveal/config.js +1 -0
- package/lib/module/shared/utils/bounds/navigation/reveal/config.js.map +1 -1
- package/lib/module/shared/utils/create-provider.js +100 -11
- package/lib/module/shared/utils/create-provider.js.map +1 -1
- package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
- package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
- package/lib/module/shared/utils/navigation/sync-routes-with-removed.js +23 -6
- package/lib/module/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
- package/lib/module/shared/utils/visibility-block-offset.js +8 -0
- package/lib/module/shared/utils/visibility-block-offset.js.map +1 -0
- package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
- package/lib/typescript/blank-stack/index.d.ts +1 -1
- package/lib/typescript/blank-stack/index.d.ts.map +1 -1
- package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts +4 -6
- package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts.map +1 -1
- package/lib/typescript/blank-stack/types.d.ts +41 -29
- package/lib/typescript/blank-stack/types.d.ts.map +1 -1
- package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
- package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +1 -1
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +5 -0
- package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +25 -0
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts +15 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts.map +1 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts +10 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts.map +1 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts +9 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts.map +1 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts +12 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts +24 -0
- package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts.map +1 -0
- package/lib/typescript/shared/components/activity/helpers.d.ts +4 -0
- package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -0
- package/lib/typescript/shared/components/activity/index.d.ts +3 -0
- package/lib/typescript/shared/components/activity/index.d.ts.map +1 -0
- package/lib/typescript/shared/components/activity/variants/activity-container.d.ts +6 -0
- package/lib/typescript/shared/components/activity/variants/activity-container.d.ts.map +1 -0
- package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +13 -0
- package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -0
- package/lib/typescript/shared/components/create-boundary-component/hooks/use-measurer.d.ts.map +1 -1
- package/lib/typescript/shared/components/create-boundary-component/index.d.ts +2 -2
- package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts +1 -0
- package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts.map +1 -1
- package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -2
- package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts +1 -0
- package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +13 -1
- package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
- package/lib/typescript/shared/index.d.ts +15 -11
- package/lib/typescript/shared/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +11 -3
- package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/descriptors/index.d.ts +1 -1
- package/lib/typescript/shared/providers/screen/descriptors/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pan/use-pan-behavior.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/pinch/use-pinch-behavior.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts +1 -2
- package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +3 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.d.ts.map +1 -1
- package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts +13 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts +12 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts +13 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts +12 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +40 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts +12 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts +13 -0
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/managed.provider.d.ts.map +1 -1
- package/lib/typescript/shared/types/bounds.types.d.ts +19 -0
- package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/index.d.ts +2 -2
- package/lib/typescript/shared/types/index.d.ts.map +1 -1
- package/lib/typescript/shared/types/providers/managed-stack.types.d.ts +3 -9
- package/lib/typescript/shared/types/providers/managed-stack.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/screen.types.d.ts +24 -0
- package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/stack.types.d.ts +7 -0
- package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
- package/lib/typescript/shared/utils/bounds/navigation/reveal/build.d.ts.map +1 -1
- package/lib/typescript/shared/utils/bounds/navigation/reveal/config.d.ts +1 -0
- package/lib/typescript/shared/utils/bounds/navigation/reveal/config.d.ts.map +1 -1
- package/lib/typescript/shared/utils/create-provider.d.ts +17 -3
- package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
- package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts +2 -1
- package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts.map +1 -1
- package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts +2 -1
- package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts.map +1 -1
- package/lib/typescript/shared/utils/visibility-block-offset.d.ts +2 -0
- package/lib/typescript/shared/utils/visibility-block-offset.d.ts.map +1 -0
- package/package.json +11 -1
- package/src/blank-stack/components/stack-view.tsx +54 -48
- package/src/blank-stack/index.ts +1 -0
- package/src/blank-stack/navigators/create-blank-stack-navigator.tsx +7 -15
- package/src/blank-stack/types.ts +44 -29
- package/src/component-stack/components/stack-view.tsx +4 -11
- package/src/component-stack/navigators/create-component-stack-navigator.tsx +1 -1
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +5 -0
- package/src/native-stack/types.ts +25 -0
- package/src/shared/adapters/with-screen-transitions/context.tsx +42 -0
- package/src/shared/adapters/with-screen-transitions/index.tsx +150 -0
- package/src/shared/adapters/with-screen-transitions/options.ts +101 -0
- package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +233 -0
- package/src/shared/adapters/with-screen-transitions/types.ts +28 -0
- package/src/shared/components/activity/helpers.ts +8 -0
- package/src/shared/components/activity/index.tsx +2 -0
- package/src/shared/components/activity/variants/activity-container.tsx +25 -0
- package/src/shared/components/activity/variants/activity-screen.tsx +133 -0
- package/src/shared/components/create-boundary-component/hooks/use-measurer.ts +23 -4
- package/src/shared/components/create-boundary-component/utils/measured-bounds.ts +15 -0
- package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +9 -26
- package/src/shared/components/screen-lifecycle/index.tsx +1 -1
- package/src/shared/hooks/navigation/use-navigation-helpers.ts +9 -3
- package/src/shared/hooks/navigation/use-stack.tsx +115 -6
- package/src/shared/index.ts +5 -0
- package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +31 -31
- package/src/shared/providers/screen/descriptors/index.tsx +1 -0
- package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +2 -1
- package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +2 -2
- package/src/shared/providers/screen/gestures/pan/pan-lifecycle.ts +7 -2
- package/src/shared/providers/screen/gestures/pan/use-pan-behavior.ts +10 -2
- package/src/shared/providers/screen/gestures/pinch/pinch-lifecycle.ts +7 -2
- package/src/shared/providers/screen/gestures/pinch/use-pinch-behavior.ts +8 -3
- package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +12 -53
- package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +17 -1
- package/src/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.tsx +3 -16
- package/src/shared/providers/stack/direct.provider.tsx +13 -4
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +365 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.ts +121 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.ts +158 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.ts +188 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +57 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/index.ts +40 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.ts +160 -0
- package/src/shared/providers/stack/managed.provider.tsx +23 -39
- package/src/shared/types/bounds.types.ts +19 -0
- package/src/shared/types/index.ts +3 -0
- package/src/shared/types/providers/managed-stack.types.ts +6 -8
- package/src/shared/types/screen.types.ts +25 -0
- package/src/shared/types/stack.types.ts +11 -0
- package/src/shared/utils/bounds/navigation/reveal/build.ts +10 -6
- package/src/shared/utils/bounds/navigation/reveal/config.ts +1 -0
- package/src/shared/utils/create-provider.tsx +183 -8
- package/src/shared/utils/navigation/resolve-scene-neighbors.ts +9 -4
- package/src/shared/utils/navigation/sync-routes-with-removed.ts +38 -7
- package/src/shared/utils/visibility-block-offset.ts +4 -0
- package/lib/commonjs/blank-stack/components/stack-view.native.js +0 -64
- package/lib/commonjs/blank-stack/components/stack-view.native.js.map +0 -1
- package/lib/commonjs/shared/components/native-screen-container.js +0 -42
- package/lib/commonjs/shared/components/native-screen-container.js.map +0 -1
- package/lib/commonjs/shared/components/native-screen.js +0 -125
- package/lib/commonjs/shared/components/native-screen.js.map +0 -1
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -51
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -15
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -14
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -13
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js +0 -101
- package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
- package/lib/module/blank-stack/components/stack-view.native.js +0 -60
- package/lib/module/blank-stack/components/stack-view.native.js.map +0 -1
- package/lib/module/shared/components/native-screen-container.js +0 -37
- package/lib/module/shared/components/native-screen-container.js.map +0 -1
- package/lib/module/shared/components/native-screen.js +0 -119
- package/lib/module/shared/components/native-screen.js.map +0 -1
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -47
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -10
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -9
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -8
- package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
- package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js +0 -95
- package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
- package/lib/typescript/blank-stack/components/stack-view.native.d.ts +0 -3
- package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +0 -1
- package/lib/typescript/shared/components/native-screen-container.d.ts +0 -6
- package/lib/typescript/shared/components/native-screen-container.d.ts.map +0 -1
- package/lib/typescript/shared/components/native-screen.d.ts +0 -12
- package/lib/typescript/shared/components/native-screen.d.ts.map +0 -1
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts +0 -10
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts.map +0 -1
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts +0 -2
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts.map +0 -1
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts +0 -3
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts.map +0 -1
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts +0 -3
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts.map +0 -1
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts +0 -19
- package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts.map +0 -1
- package/src/blank-stack/components/stack-view.native.tsx +0 -74
- package/src/shared/components/native-screen-container.tsx +0 -33
- package/src/shared/components/native-screen.tsx +0 -176
- package/src/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.ts +0 -65
- package/src/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.ts +0 -15
- package/src/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.ts +0 -12
- package/src/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.ts +0 -11
- package/src/shared/providers/stack/helpers/use-local-routes/index.ts +0 -147
|
@@ -2,9 +2,10 @@ import type { Route } from "@react-navigation/native";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import {
|
|
5
|
-
StackContext,
|
|
6
5
|
type StackContextValue,
|
|
6
|
+
StackProvider,
|
|
7
7
|
} from "../../hooks/navigation/use-stack";
|
|
8
|
+
import { AnimationStore } from "../../stores/animation.store";
|
|
8
9
|
import type {
|
|
9
10
|
ManagedStackContextValue,
|
|
10
11
|
ManagedStackProps,
|
|
@@ -17,9 +18,7 @@ import type {
|
|
|
17
18
|
BaseStackScene,
|
|
18
19
|
} from "../../types/stack.types";
|
|
19
20
|
import { useStackCoreContext } from "./core.provider";
|
|
20
|
-
import {
|
|
21
|
-
import { useLocalRoutes } from "./helpers/use-local-routes";
|
|
22
|
-
import { useProcessedRoutes } from "./helpers/use-processed-routes";
|
|
21
|
+
import { useManagedStackState } from "./helpers/managed-stack-state";
|
|
23
22
|
import { useStackDerived } from "./helpers/use-stack-derived";
|
|
24
23
|
|
|
25
24
|
const ManagedStackContext =
|
|
@@ -43,70 +42,55 @@ function useManagedStackValue<
|
|
|
43
42
|
props: ManagedStackProps<TDescriptor, TNavigation>,
|
|
44
43
|
): ManagedStackResult<TDescriptor> {
|
|
45
44
|
const { flags } = useStackCoreContext();
|
|
46
|
-
const { state, handleCloseRoute,
|
|
45
|
+
const { state, handleCloseRoute, requestDismiss } =
|
|
46
|
+
useManagedStackState(props);
|
|
47
47
|
const navigatorKey = props.state.key;
|
|
48
48
|
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
processed.routeKeys,
|
|
53
|
-
processed.animationMaps,
|
|
49
|
+
const animationMaps = useMemo(
|
|
50
|
+
() => state.routeKeys.map((routeKey) => AnimationStore.getBag(routeKey)),
|
|
51
|
+
[state.routeKeys],
|
|
54
52
|
);
|
|
53
|
+
const { optimisticFocusedIndex } = useStackDerived(animationMaps);
|
|
55
54
|
|
|
56
55
|
const focusedIndex = props.state.index;
|
|
57
56
|
|
|
58
|
-
// Common stack context (consumed by useStack())
|
|
59
57
|
const stackContextValue = useMemo<StackContextValue>(
|
|
60
58
|
() => ({
|
|
61
59
|
flags,
|
|
62
60
|
navigatorKey,
|
|
63
|
-
routeKeys:
|
|
61
|
+
routeKeys: state.routeKeys,
|
|
64
62
|
routes: state.routes as Route<string>[],
|
|
65
|
-
scenes:
|
|
63
|
+
scenes: state.scenes as BaseStackScene[],
|
|
66
64
|
optimisticFocusedIndex,
|
|
65
|
+
focusedIndex,
|
|
66
|
+
requestDismiss,
|
|
67
67
|
}),
|
|
68
68
|
[
|
|
69
69
|
flags,
|
|
70
70
|
navigatorKey,
|
|
71
|
-
|
|
71
|
+
state.routeKeys,
|
|
72
72
|
state.routes,
|
|
73
|
-
|
|
73
|
+
state.scenes,
|
|
74
74
|
optimisticFocusedIndex,
|
|
75
|
+
focusedIndex,
|
|
76
|
+
requestDismiss,
|
|
75
77
|
],
|
|
76
78
|
);
|
|
77
79
|
|
|
78
|
-
// Managed-specific context (consumed by useManagedStackContext())
|
|
79
80
|
const managedContextValue = useMemo<ManagedStackContextValue>(
|
|
80
81
|
() => ({
|
|
81
|
-
activeScreensLimit: processed.activeScreensLimit,
|
|
82
|
-
closingRouteKeysShared: closingRouteKeys.shared,
|
|
83
82
|
handleCloseRoute,
|
|
84
|
-
backdropBehaviors: processed.backdropBehaviors,
|
|
85
83
|
}),
|
|
86
|
-
[
|
|
87
|
-
processed.activeScreensLimit,
|
|
88
|
-
closingRouteKeys.shared,
|
|
89
|
-
handleCloseRoute,
|
|
90
|
-
processed.backdropBehaviors,
|
|
91
|
-
],
|
|
84
|
+
[handleCloseRoute],
|
|
92
85
|
);
|
|
93
86
|
|
|
94
|
-
// Combined props for render children (stack-view components)
|
|
95
87
|
const renderProps = useMemo<ManagedStackRenderProps<TDescriptor>>(
|
|
96
88
|
() => ({
|
|
97
|
-
|
|
98
|
-
scenes: processed.scenes,
|
|
89
|
+
scenes: state.scenes,
|
|
99
90
|
focusedIndex,
|
|
100
|
-
|
|
101
|
-
shouldShowFloatOverlay: processed.shouldShowFloatOverlay,
|
|
91
|
+
shouldShowFloatOverlay: state.shouldShowFloatOverlay,
|
|
102
92
|
}),
|
|
103
|
-
[
|
|
104
|
-
state.descriptors,
|
|
105
|
-
processed.scenes,
|
|
106
|
-
focusedIndex,
|
|
107
|
-
closingRouteMap,
|
|
108
|
-
processed.shouldShowFloatOverlay,
|
|
109
|
-
],
|
|
93
|
+
[state.scenes, focusedIndex, state.shouldShowFloatOverlay],
|
|
110
94
|
);
|
|
111
95
|
|
|
112
96
|
return { stackContextValue, managedContextValue, renderProps };
|
|
@@ -125,11 +109,11 @@ function withManagedStack<
|
|
|
125
109
|
useManagedStackValue<TDescriptor, TNavigation>(props);
|
|
126
110
|
|
|
127
111
|
return (
|
|
128
|
-
<
|
|
112
|
+
<StackProvider value={stackContextValue}>
|
|
129
113
|
<ManagedStackContext.Provider value={managedContextValue}>
|
|
130
114
|
<Component {...renderProps} />
|
|
131
115
|
</ManagedStackContext.Provider>
|
|
132
|
-
</
|
|
116
|
+
</StackProvider>
|
|
133
117
|
);
|
|
134
118
|
};
|
|
135
119
|
}
|
|
@@ -231,6 +231,25 @@ export type BoundsNavigationRevealOptions = {
|
|
|
231
231
|
* @default "freeform"
|
|
232
232
|
*/
|
|
233
233
|
gestureProgressMode?: GestureProgressMode;
|
|
234
|
+
/**
|
|
235
|
+
* Scale applied to the unfocused background content while the reveal runs
|
|
236
|
+
* above it.
|
|
237
|
+
*
|
|
238
|
+
* @default 0.9375
|
|
239
|
+
*/
|
|
240
|
+
backgroundScale?: number;
|
|
241
|
+
/**
|
|
242
|
+
* Whether reveal should reset the unfocused background content scale once the
|
|
243
|
+
* transition is logically settled.
|
|
244
|
+
*
|
|
245
|
+
* By default, reveal restores the background to scale `1` after settle so the
|
|
246
|
+
* next drag or programmatic dismiss starts from a fresh, unmodified layout
|
|
247
|
+
* measurement. Keeping the background transformed while idle can make the next
|
|
248
|
+
* measurement read the scaled screen instead of the real screen geometry.
|
|
249
|
+
*
|
|
250
|
+
* @default true
|
|
251
|
+
*/
|
|
252
|
+
shouldBackgroundScaleResetOnSettled?: boolean;
|
|
234
253
|
/**
|
|
235
254
|
* Temporarily blocks pointer-event pass-through on the inactive content until
|
|
236
255
|
* the source element transition handoff reaches progress `0.25`.
|
|
@@ -34,6 +34,7 @@ export type {
|
|
|
34
34
|
export type { OverlayProps } from "./overlay.types";
|
|
35
35
|
export type {
|
|
36
36
|
GestureTracking,
|
|
37
|
+
InactiveBehavior,
|
|
37
38
|
Layout,
|
|
38
39
|
ScreenKey,
|
|
39
40
|
ScreenTransitionConfig,
|
|
@@ -46,4 +47,6 @@ export type {
|
|
|
46
47
|
BaseStackScene,
|
|
47
48
|
BaseStackState,
|
|
48
49
|
DescriptorMap,
|
|
50
|
+
StackDescriptorSource,
|
|
51
|
+
StackSceneActivity,
|
|
49
52
|
} from "./stack.types";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { SharedValue } from "react-native-reanimated";
|
|
2
1
|
import type { StackContextValue } from "../../hooks/navigation/use-stack";
|
|
3
2
|
import type {
|
|
4
3
|
BaseStackDescriptor,
|
|
@@ -6,6 +5,7 @@ import type {
|
|
|
6
5
|
BaseStackRoute,
|
|
7
6
|
BaseStackScene,
|
|
8
7
|
BaseStackState,
|
|
8
|
+
StackDescriptorSource,
|
|
9
9
|
} from "../stack.types";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -18,8 +18,11 @@ export interface ManagedStackProps<
|
|
|
18
18
|
> {
|
|
19
19
|
state: BaseStackState<TDescriptor["route"]>;
|
|
20
20
|
navigation: TNavigation;
|
|
21
|
-
descriptors: Record<string, TDescriptor
|
|
22
|
-
describe: (
|
|
21
|
+
descriptors: Record<string, StackDescriptorSource<TDescriptor>>;
|
|
22
|
+
describe: (
|
|
23
|
+
route: TDescriptor["route"],
|
|
24
|
+
placeholder: boolean,
|
|
25
|
+
) => StackDescriptorSource<TDescriptor>;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
/**
|
|
@@ -27,10 +30,7 @@ export interface ManagedStackProps<
|
|
|
27
30
|
* Shared fields (routes, scenes, etc.) live in StackContext.
|
|
28
31
|
*/
|
|
29
32
|
export interface ManagedStackContextValue {
|
|
30
|
-
activeScreensLimit: number;
|
|
31
|
-
closingRouteKeysShared: SharedValue<string[]>;
|
|
32
33
|
handleCloseRoute: (payload: { route: BaseStackRoute }) => void;
|
|
33
|
-
backdropBehaviors: string[];
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -40,10 +40,8 @@ export interface ManagedStackContextValue {
|
|
|
40
40
|
export interface ManagedStackRenderProps<
|
|
41
41
|
TDescriptor extends BaseStackDescriptor = BaseStackDescriptor,
|
|
42
42
|
> {
|
|
43
|
-
descriptors: Record<string, TDescriptor>;
|
|
44
43
|
scenes: BaseStackScene<TDescriptor>[];
|
|
45
44
|
focusedIndex: number;
|
|
46
|
-
closingRouteMap: React.RefObject<Readonly<Record<string, true>>>;
|
|
47
45
|
shouldShowFloatOverlay: boolean;
|
|
48
46
|
}
|
|
49
47
|
|
|
@@ -43,6 +43,31 @@ export type SnapPoint = number | "auto";
|
|
|
43
43
|
|
|
44
44
|
export type BackdropBehavior = "block" | "passthrough" | "dismiss" | "collapse";
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Controls how an inactive screen is retained after it is no longer active.
|
|
48
|
+
*
|
|
49
|
+
* - `keep`
|
|
50
|
+
* keep inactive screen mounted, attached, visible, not interactive
|
|
51
|
+
* RNS: activityState=1, visible=true
|
|
52
|
+
* React Activity: mode="visible"
|
|
53
|
+
*
|
|
54
|
+
* - `freeze`
|
|
55
|
+
* keep last painted UI visible but stop/suspend inactive work where platform allows
|
|
56
|
+
* RNS: activityState=1, visible=true, maybe freezeOnBlur/shouldFreeze later
|
|
57
|
+
* React Activity: mode="hidden" with paint preserved
|
|
58
|
+
*
|
|
59
|
+
* - `detach`
|
|
60
|
+
* remove inactive screen from native/view presentation after safe paint
|
|
61
|
+
* RNS: activityState=0, visible=false
|
|
62
|
+
* React Activity: mode="hidden" + display none, or equivalent
|
|
63
|
+
*
|
|
64
|
+
* - `unmount`
|
|
65
|
+
* actually remove React subtree when the inactive screen is safe to remove
|
|
66
|
+
* RNS native: only after safe paint for non-nested screens
|
|
67
|
+
* web: return null
|
|
68
|
+
*/
|
|
69
|
+
export type InactiveBehavior = "keep" | "freeze" | "detach" | "unmount";
|
|
70
|
+
|
|
46
71
|
export type TransitionAwareProps<T extends object> = AnimatedProps<T> & {
|
|
47
72
|
/**
|
|
48
73
|
* Connects this component to custom animated styles defined in screenStyleInterpolator.
|
|
@@ -18,6 +18,8 @@ export interface BaseStackRoute {
|
|
|
18
18
|
params?: object;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
export type StackSceneActivity = "active" | "inert" | "inactive" | "closing";
|
|
22
|
+
|
|
21
23
|
/**
|
|
22
24
|
* Base navigation interface - minimal contract for gesture handling.
|
|
23
25
|
* Both React Navigation helpers and ComponentNavigation satisfy this.
|
|
@@ -45,9 +47,16 @@ export interface BaseStackDescriptor<
|
|
|
45
47
|
route: TRoute;
|
|
46
48
|
navigation: TNavigation;
|
|
47
49
|
options: TOptions;
|
|
50
|
+
activity?: StackSceneActivity;
|
|
48
51
|
render?: () => React.JSX.Element | null;
|
|
49
52
|
}
|
|
50
53
|
|
|
54
|
+
export type StackDescriptorSource<
|
|
55
|
+
TDescriptor extends BaseStackDescriptor = BaseStackDescriptor,
|
|
56
|
+
> = Omit<TDescriptor, "activity"> & {
|
|
57
|
+
activity?: StackSceneActivity;
|
|
58
|
+
};
|
|
59
|
+
|
|
51
60
|
/**
|
|
52
61
|
* Base scene interface - route + descriptor pair.
|
|
53
62
|
* Used by all stack views to iterate over screens.
|
|
@@ -57,6 +66,8 @@ export interface BaseStackScene<
|
|
|
57
66
|
> {
|
|
58
67
|
route: TDescriptor["route"];
|
|
59
68
|
descriptor: TDescriptor;
|
|
69
|
+
previousDescriptor?: TDescriptor;
|
|
70
|
+
nextDescriptor?: TDescriptor;
|
|
60
71
|
}
|
|
61
72
|
|
|
62
73
|
/**
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
DRAG_MASK_HEIGHT_COLLAPSE_END,
|
|
14
14
|
HORIZONTAL_DRAG_MASK_COLLAPSE_SCALE,
|
|
15
15
|
IDENTITY_DRAG_SCALE_OUTPUT,
|
|
16
|
+
REVEAL_BACKGROUND_SCALE,
|
|
16
17
|
REVEAL_BORDER_RADIUS,
|
|
17
18
|
REVEAL_SHADOW_OFFSET,
|
|
18
19
|
REVEAL_USES_TRANSFORM_MASK,
|
|
@@ -65,6 +66,10 @@ export function buildRevealStyles({
|
|
|
65
66
|
const disablePointerEventsTillElementTransition =
|
|
66
67
|
revealOptions?.disablePointerEventsTillElementTransition ?? true;
|
|
67
68
|
const maskSizingMode = revealOptions?.maskSizingMode ?? "auto";
|
|
69
|
+
const backgroundScale =
|
|
70
|
+
revealOptions?.backgroundScale ?? REVEAL_BACKGROUND_SCALE;
|
|
71
|
+
const shouldBackgroundScaleResetOnSettled =
|
|
72
|
+
revealOptions?.shouldBackgroundScaleResetOnSettled ?? true;
|
|
68
73
|
const usesTransformMask =
|
|
69
74
|
maskSizingMode === "auto"
|
|
70
75
|
? REVEAL_USES_TRANSFORM_MASK
|
|
@@ -366,8 +371,6 @@ export function buildRevealStyles({
|
|
|
366
371
|
},
|
|
367
372
|
[link.id]: {
|
|
368
373
|
style: {
|
|
369
|
-
position: "relative",
|
|
370
|
-
zIndex: 999,
|
|
371
374
|
transform: [{ translateX: elementTX }, { translateY: elementY }],
|
|
372
375
|
},
|
|
373
376
|
},
|
|
@@ -376,10 +379,11 @@ export function buildRevealStyles({
|
|
|
376
379
|
|
|
377
380
|
/* ---------------------------- Unfocused Screen ---------------------------- */
|
|
378
381
|
|
|
379
|
-
const unfocusedScale = mixUnit(1,
|
|
380
|
-
const unfocusedContentScale =
|
|
381
|
-
|
|
382
|
-
|
|
382
|
+
const unfocusedScale = mixUnit(1, backgroundScale, props.active.progress);
|
|
383
|
+
const unfocusedContentScale =
|
|
384
|
+
props.active.logicallySettled && shouldBackgroundScaleResetOnSettled
|
|
385
|
+
? 1
|
|
386
|
+
: unfocusedScale;
|
|
383
387
|
|
|
384
388
|
const trackingContentTarget =
|
|
385
389
|
initialDestinationTarget ?? link.destination.bounds;
|
|
@@ -15,6 +15,7 @@ export const DRAG_MASK_HEIGHT_COLLAPSE_END = 0.7;
|
|
|
15
15
|
export const HORIZONTAL_DRAG_MASK_COLLAPSE_SCALE = 0.5;
|
|
16
16
|
export const DISMISS_SCALE_ORBIT_DEPTH = 0.5;
|
|
17
17
|
export const CLOSE_SOURCE_HANDOFF_PROGRESS = 0.25;
|
|
18
|
+
export const REVEAL_BACKGROUND_SCALE = 0.9375;
|
|
18
19
|
|
|
19
20
|
export const IDENTITY_DRAG_SCALE_OUTPUT = [1, 1] as const;
|
|
20
21
|
export const ZERO_TO_ONE_RANGE = [0, 1] as const;
|
|
@@ -6,12 +6,82 @@
|
|
|
6
6
|
import {
|
|
7
7
|
createContext,
|
|
8
8
|
type ReactNode,
|
|
9
|
+
useCallback,
|
|
9
10
|
useContext,
|
|
11
|
+
useLayoutEffect,
|
|
10
12
|
useMemo,
|
|
11
13
|
useRef,
|
|
14
|
+
useSyncExternalStore,
|
|
12
15
|
} from "react";
|
|
13
16
|
|
|
14
|
-
type InnerProviderComponent =
|
|
17
|
+
type InnerProviderComponent = React.FC<{ children: ReactNode }>;
|
|
18
|
+
|
|
19
|
+
type ProviderSnapshot<
|
|
20
|
+
ContextValue,
|
|
21
|
+
Guarded extends boolean,
|
|
22
|
+
> = Guarded extends true ? ContextValue : ContextValue | null;
|
|
23
|
+
|
|
24
|
+
type ProviderSelector<ContextValue, Guarded extends boolean, Selected> = (
|
|
25
|
+
value: ProviderSnapshot<ContextValue, Guarded>,
|
|
26
|
+
) => Selected;
|
|
27
|
+
|
|
28
|
+
type ProviderStoreHook<ContextValue, Guarded extends boolean> = {
|
|
29
|
+
(): ProviderSnapshot<ContextValue, Guarded>;
|
|
30
|
+
<Selected>(
|
|
31
|
+
selector: ProviderSelector<ContextValue, Guarded, Selected>,
|
|
32
|
+
): Selected;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type ProviderOptionalStoreHook<ContextValue> = {
|
|
36
|
+
(): ContextValue | null;
|
|
37
|
+
<Selected>(selector: (value: ContextValue | null) => Selected): Selected;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export interface ProviderStoreApi<ContextValue> {
|
|
41
|
+
getSnapshot: () => ContextValue | null;
|
|
42
|
+
subscribe: (listener: () => void) => () => void;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface MutableProviderStoreApi<ContextValue>
|
|
46
|
+
extends ProviderStoreApi<ContextValue> {
|
|
47
|
+
notify: () => void;
|
|
48
|
+
setSnapshot: (snapshot: ContextValue | null) => boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const NullProviderStore: ProviderStoreApi<never> = {
|
|
52
|
+
getSnapshot: () => null,
|
|
53
|
+
subscribe: () => () => {},
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const createProviderStore = <ContextValue,>(
|
|
57
|
+
initialSnapshot: ContextValue | null,
|
|
58
|
+
): MutableProviderStoreApi<ContextValue> => {
|
|
59
|
+
let snapshot = initialSnapshot;
|
|
60
|
+
const listeners = new Set<() => void>();
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
getSnapshot: () => snapshot,
|
|
64
|
+
notify: () => {
|
|
65
|
+
for (const listener of listeners) {
|
|
66
|
+
listener();
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
setSnapshot: (nextSnapshot) => {
|
|
70
|
+
if (Object.is(snapshot, nextSnapshot)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
snapshot = nextSnapshot;
|
|
75
|
+
return true;
|
|
76
|
+
},
|
|
77
|
+
subscribe: (listener) => {
|
|
78
|
+
listeners.add(listener);
|
|
79
|
+
return () => {
|
|
80
|
+
listeners.delete(listener);
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
};
|
|
15
85
|
|
|
16
86
|
export default function createProvider<
|
|
17
87
|
ProviderName extends string,
|
|
@@ -31,10 +101,17 @@ export default function createProvider<
|
|
|
31
101
|
},
|
|
32
102
|
) => {
|
|
33
103
|
const { guarded = true } = options ?? {};
|
|
104
|
+
const providerDisplayName = `${name}Provider`;
|
|
105
|
+
const innerProviderDisplayName = `${name}InnerProvider`;
|
|
34
106
|
|
|
35
107
|
const Context = createContext<ContextValue | null>(null);
|
|
36
108
|
Context.displayName = name;
|
|
37
109
|
|
|
110
|
+
const StoreContext = createContext<ProviderStoreApi<ContextValue> | null>(
|
|
111
|
+
null,
|
|
112
|
+
);
|
|
113
|
+
StoreContext.displayName = `${name}Store`;
|
|
114
|
+
|
|
38
115
|
const Provider: React.FC<ProviderProps> = (props) => {
|
|
39
116
|
const {
|
|
40
117
|
children = (props as { children?: ReactNode }).children,
|
|
@@ -53,20 +130,46 @@ export default function createProvider<
|
|
|
53
130
|
[enabled, value],
|
|
54
131
|
);
|
|
55
132
|
|
|
133
|
+
const storeRef = useRef<MutableProviderStoreApi<ContextValue> | null>(
|
|
134
|
+
null,
|
|
135
|
+
);
|
|
136
|
+
const pendingNotifyRef = useRef(false);
|
|
137
|
+
|
|
138
|
+
if (storeRef.current === null) {
|
|
139
|
+
storeRef.current = createProviderStore<ContextValue>(memoValue);
|
|
140
|
+
}
|
|
141
|
+
const store = storeRef.current;
|
|
142
|
+
|
|
143
|
+
pendingNotifyRef.current =
|
|
144
|
+
store.setSnapshot(memoValue) || pendingNotifyRef.current;
|
|
145
|
+
|
|
146
|
+
useLayoutEffect(() => {
|
|
147
|
+
if (!pendingNotifyRef.current) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
pendingNotifyRef.current = false;
|
|
152
|
+
store.notify();
|
|
153
|
+
});
|
|
154
|
+
|
|
56
155
|
// Per-instance ref ensures InnerProvider reads latest value while keeping
|
|
57
156
|
// a stable component reference.
|
|
58
157
|
const valueRef = useRef<ContextValue | null>(memoValue);
|
|
59
158
|
valueRef.current = memoValue;
|
|
60
159
|
|
|
61
|
-
const InnerProvider = useMemo(
|
|
62
|
-
|
|
63
|
-
|
|
160
|
+
const InnerProvider = useMemo((): InnerProviderComponent => {
|
|
161
|
+
const NamedInnerProvider: InnerProviderComponent = ({ children }) => (
|
|
162
|
+
<StoreContext.Provider value={store}>
|
|
64
163
|
<Context.Provider value={valueRef.current}>
|
|
65
164
|
{children}
|
|
66
165
|
</Context.Provider>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
166
|
+
</StoreContext.Provider>
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
NamedInnerProvider.displayName = innerProviderDisplayName;
|
|
170
|
+
|
|
171
|
+
return NamedInnerProvider;
|
|
172
|
+
}, [store]);
|
|
70
173
|
|
|
71
174
|
if (typeof children === "function") {
|
|
72
175
|
return children({
|
|
@@ -74,8 +177,13 @@ export default function createProvider<
|
|
|
74
177
|
} as { [K in ProviderName as `${K}Provider`]: InnerProviderComponent });
|
|
75
178
|
}
|
|
76
179
|
|
|
77
|
-
return
|
|
180
|
+
return (
|
|
181
|
+
<StoreContext.Provider value={store}>
|
|
182
|
+
<Context.Provider value={memoValue}>{children}</Context.Provider>
|
|
183
|
+
</StoreContext.Provider>
|
|
184
|
+
);
|
|
78
185
|
};
|
|
186
|
+
Provider.displayName = providerDisplayName;
|
|
79
187
|
|
|
80
188
|
const useEnhancedContext = (): ContextValue | null => {
|
|
81
189
|
const context = useContext(Context);
|
|
@@ -89,18 +197,85 @@ export default function createProvider<
|
|
|
89
197
|
return context;
|
|
90
198
|
};
|
|
91
199
|
|
|
200
|
+
const useStoreSelector = <Selected,>(
|
|
201
|
+
selector?: (value: ContextValue | null) => Selected,
|
|
202
|
+
): Selected | ContextValue | null => {
|
|
203
|
+
const store = useContext(StoreContext);
|
|
204
|
+
const resolvedStore =
|
|
205
|
+
store ?? (NullProviderStore as ProviderStoreApi<ContextValue>);
|
|
206
|
+
const selectorRef = useRef<typeof selector>(selector);
|
|
207
|
+
selectorRef.current = selector;
|
|
208
|
+
|
|
209
|
+
const getSelectedSnapshot = useCallback(() => {
|
|
210
|
+
if (guarded && store === null) {
|
|
211
|
+
throw new Error(
|
|
212
|
+
`${name} store must be used within a ${name}Provider`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const snapshot = resolvedStore.getSnapshot();
|
|
217
|
+
|
|
218
|
+
if (guarded && snapshot === null) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`${name} store must be used within an enabled ${name}Provider`,
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return selectorRef.current ? selectorRef.current(snapshot) : snapshot;
|
|
225
|
+
}, [resolvedStore, store]);
|
|
226
|
+
|
|
227
|
+
return useSyncExternalStore(
|
|
228
|
+
resolvedStore.subscribe,
|
|
229
|
+
getSelectedSnapshot,
|
|
230
|
+
getSelectedSnapshot,
|
|
231
|
+
);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
const useOptionalStoreSelector = <Selected,>(
|
|
235
|
+
selector?: (value: ContextValue | null) => Selected,
|
|
236
|
+
): Selected | ContextValue | null => {
|
|
237
|
+
const store = useContext(StoreContext);
|
|
238
|
+
const resolvedStore =
|
|
239
|
+
store ?? (NullProviderStore as ProviderStoreApi<ContextValue>);
|
|
240
|
+
const selectorRef = useRef<typeof selector>(selector);
|
|
241
|
+
selectorRef.current = selector;
|
|
242
|
+
|
|
243
|
+
const getSelectedSnapshot = useCallback(() => {
|
|
244
|
+
const snapshot = resolvedStore.getSnapshot();
|
|
245
|
+
return selectorRef.current ? selectorRef.current(snapshot) : snapshot;
|
|
246
|
+
}, [resolvedStore]);
|
|
247
|
+
|
|
248
|
+
return useSyncExternalStore(
|
|
249
|
+
resolvedStore.subscribe,
|
|
250
|
+
getSelectedSnapshot,
|
|
251
|
+
getSelectedSnapshot,
|
|
252
|
+
);
|
|
253
|
+
};
|
|
254
|
+
|
|
92
255
|
return {
|
|
93
256
|
[`${name}Context`]: Context,
|
|
257
|
+
[`${name}StoreContext`]: StoreContext,
|
|
94
258
|
[`${name}Provider`]: Provider,
|
|
95
259
|
[`use${name}Context`]: useEnhancedContext,
|
|
260
|
+
[`use${name}Store`]: useStoreSelector,
|
|
261
|
+
[`use${name}OptionalStore`]: useOptionalStoreSelector,
|
|
96
262
|
} as {
|
|
97
263
|
[P in ProviderName as `${P}Context`]: React.Context<ContextValue>;
|
|
264
|
+
} & {
|
|
265
|
+
[P in ProviderName as `${P}StoreContext`]: React.Context<ProviderStoreApi<ContextValue> | null>;
|
|
98
266
|
} & {
|
|
99
267
|
[P in ProviderName as `${P}Provider`]: React.FC<ProviderProps>;
|
|
100
268
|
} & {
|
|
101
269
|
[P in ProviderName as `use${P}Context`]: () => Guarded extends true
|
|
102
270
|
? ContextValue
|
|
103
271
|
: ContextValue | null;
|
|
272
|
+
} & {
|
|
273
|
+
[P in ProviderName as `use${P}Store`]: ProviderStoreHook<
|
|
274
|
+
ContextValue,
|
|
275
|
+
Guarded
|
|
276
|
+
>;
|
|
277
|
+
} & {
|
|
278
|
+
[P in ProviderName as `use${P}OptionalStore`]: ProviderOptionalStoreHook<ContextValue>;
|
|
104
279
|
};
|
|
105
280
|
};
|
|
106
281
|
}
|
|
@@ -4,6 +4,7 @@ interface SceneWithKey {
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
type IsRouteClosing = (routeKey: string) => boolean;
|
|
7
|
+
type GetRouteClosingOrder = (routeKey: string) => number | undefined;
|
|
7
8
|
|
|
8
9
|
const findPreviousDescriptor = <T extends SceneWithKey>(
|
|
9
10
|
scenes: T[],
|
|
@@ -45,6 +46,7 @@ export function resolveSceneNeighbors<T extends SceneWithKey>(
|
|
|
45
46
|
scenes: T[],
|
|
46
47
|
sceneIndex: number,
|
|
47
48
|
isRouteClosing: IsRouteClosing,
|
|
49
|
+
getRouteClosingOrder?: GetRouteClosingOrder,
|
|
48
50
|
): {
|
|
49
51
|
previousDescriptor: T["descriptor"] | undefined;
|
|
50
52
|
nextDescriptor: T["descriptor"] | undefined;
|
|
@@ -69,7 +71,8 @@ export function resolveSceneNeighbors<T extends SceneWithKey>(
|
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
let nextDescriptor: T["descriptor"] | undefined;
|
|
72
|
-
let
|
|
74
|
+
let latestClosingAbove: T["descriptor"] | undefined;
|
|
75
|
+
let latestClosingAboveOrder = Number.NEGATIVE_INFINITY;
|
|
73
76
|
|
|
74
77
|
for (let i = sceneIndex + 1; i < scenes.length; i++) {
|
|
75
78
|
const candidate = scenes[i];
|
|
@@ -80,13 +83,15 @@ export function resolveSceneNeighbors<T extends SceneWithKey>(
|
|
|
80
83
|
break;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
const closeOrder = getRouteClosingOrder?.(candidate.route.key) ?? i;
|
|
87
|
+
if (closeOrder >= latestClosingAboveOrder) {
|
|
88
|
+
latestClosingAbove = candidate.descriptor;
|
|
89
|
+
latestClosingAboveOrder = closeOrder;
|
|
85
90
|
}
|
|
86
91
|
}
|
|
87
92
|
|
|
88
93
|
if (nextDescriptor === undefined) {
|
|
89
|
-
nextDescriptor =
|
|
94
|
+
nextDescriptor = latestClosingAbove;
|
|
90
95
|
}
|
|
91
96
|
|
|
92
97
|
const previousDescriptor = findPreviousDescriptor(
|