react-native-screen-transitions 3.6.0-beta.0 → 3.7.0-alpha.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 +75 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/index.js.map +1 -0
- package/lib/commonjs/shared/adapters/with-screen-transitions/options.js +103 -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/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/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 +199 -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 +62 -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 +81 -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 +123 -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/zoom/build.js +47 -50
- package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
- package/lib/commonjs/shared/utils/bounds/navigation/zoom/config.js +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 +66 -0
- package/lib/module/shared/adapters/with-screen-transitions/index.js.map +1 -0
- package/lib/module/shared/adapters/with-screen-transitions/options.js +98 -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/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/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 +194 -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 +57 -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 +69 -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 +118 -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/zoom/build.js +45 -48
- package/lib/module/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
- package/lib/module/shared/utils/bounds/navigation/zoom/config.js +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 +11 -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 +16 -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/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/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 +11 -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 +27 -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/zoom/build.d.ts.map +1 -1
- package/lib/typescript/shared/utils/bounds/navigation/zoom/config.d.ts +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 +155 -0
- package/src/shared/adapters/with-screen-transitions/options.ts +172 -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 +9 -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/hooks/use-maybe-block-visibility.tsx +17 -1
- 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 +368 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.ts +129 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.ts +139 -0
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.ts +198 -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 +27 -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/zoom/build.ts +62 -71
- package/src/shared/utils/bounds/navigation/zoom/config.ts +1 -1
- 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
|
@@ -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
|
/**
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { interpolate } from "react-native-reanimated";
|
|
2
2
|
import {
|
|
3
3
|
EPSILON,
|
|
4
|
-
NAVIGATION_MASK_CONTAINER_STYLE_ID,
|
|
5
4
|
NAVIGATION_MASK_ELEMENT_STYLE_ID,
|
|
6
5
|
VISIBLE_STYLE,
|
|
7
6
|
} from "../../../../constants";
|
|
@@ -18,6 +17,10 @@ import {
|
|
|
18
17
|
resolveDirectionalDragScale,
|
|
19
18
|
resolveOpacityRangeTuple,
|
|
20
19
|
} from "../math";
|
|
20
|
+
import {
|
|
21
|
+
resolveDismissScaleHandoff,
|
|
22
|
+
resolveRevealGestureHandoff,
|
|
23
|
+
} from "../reveal/math";
|
|
21
24
|
import {
|
|
22
25
|
ZOOM_DISMISS_SCALE_ORBIT_DEPTH,
|
|
23
26
|
ZOOM_FOCUSED_ELEMENT_CLOSE_OPACITY_RANGE,
|
|
@@ -39,71 +42,30 @@ import type { BuildZoomStylesParams, ZoomInterpolatedStyle } from "./types";
|
|
|
39
42
|
|
|
40
43
|
const IDENTITY_DRAG_SCALE_OUTPUT = [1, 1] as const;
|
|
41
44
|
|
|
42
|
-
function resolveZoomGestureHandoff(rawDrag: number) {
|
|
43
|
-
"worklet";
|
|
44
|
-
|
|
45
|
-
const gestureSensitivity = interpolate(rawDrag, [0, 1], [0.7, 0.1], "clamp");
|
|
46
|
-
const releaseBoost = interpolate(rawDrag, [0, 1], [1, 1.4], "clamp");
|
|
47
|
-
const releaseSensitivity = interpolate(
|
|
48
|
-
gestureSensitivity,
|
|
49
|
-
[0.28, 0.9],
|
|
50
|
-
[0.7, 1],
|
|
51
|
-
"clamp",
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
return {
|
|
55
|
-
gestureSensitivity,
|
|
56
|
-
gestureReleaseVelocityScale: releaseBoost * releaseSensitivity,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
45
|
function resolveZoomGestureOptions({
|
|
61
46
|
rawDrag,
|
|
62
|
-
|
|
47
|
+
maxSensitivity,
|
|
48
|
+
gestureProgressMode,
|
|
63
49
|
}: {
|
|
64
50
|
rawDrag: number;
|
|
65
|
-
|
|
51
|
+
maxSensitivity: number;
|
|
52
|
+
gestureProgressMode: ScreenTransitionOptions["gestureProgressMode"];
|
|
66
53
|
}) {
|
|
67
54
|
"worklet";
|
|
68
55
|
|
|
69
56
|
const { gestureSensitivity, gestureReleaseVelocityScale } =
|
|
70
|
-
|
|
57
|
+
resolveRevealGestureHandoff({
|
|
58
|
+
rawDrag,
|
|
59
|
+
maxSensitivity,
|
|
60
|
+
});
|
|
71
61
|
|
|
72
62
|
return {
|
|
73
|
-
gestureProgressMode
|
|
74
|
-
gestureSensitivity
|
|
75
|
-
gestureReleaseVelocityScale
|
|
76
|
-
activeOptions.gestureReleaseVelocityScale ?? gestureReleaseVelocityScale,
|
|
63
|
+
gestureProgressMode,
|
|
64
|
+
gestureSensitivity,
|
|
65
|
+
gestureReleaseVelocityScale,
|
|
77
66
|
};
|
|
78
67
|
}
|
|
79
68
|
|
|
80
|
-
function resolveZoomDismissScaleHandoff({
|
|
81
|
-
progress,
|
|
82
|
-
releaseScale,
|
|
83
|
-
targetScale,
|
|
84
|
-
rawDrag,
|
|
85
|
-
}: {
|
|
86
|
-
progress: number;
|
|
87
|
-
releaseScale: number;
|
|
88
|
-
targetScale: number;
|
|
89
|
-
rawDrag: number;
|
|
90
|
-
}) {
|
|
91
|
-
"worklet";
|
|
92
|
-
|
|
93
|
-
const closeProgress = 1 - progress;
|
|
94
|
-
const scaleProgress = Math.sin((Math.PI / 2) * closeProgress);
|
|
95
|
-
const baseScale = releaseScale + (targetScale - releaseScale) * scaleProgress;
|
|
96
|
-
const orbitDepth = interpolate(
|
|
97
|
-
rawDrag,
|
|
98
|
-
[0, 1],
|
|
99
|
-
[0, ZOOM_DISMISS_SCALE_ORBIT_DEPTH],
|
|
100
|
-
"clamp",
|
|
101
|
-
);
|
|
102
|
-
const orbitScale = 1 - orbitDepth * Math.sin(Math.PI * closeProgress);
|
|
103
|
-
|
|
104
|
-
return baseScale * orbitScale;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
69
|
/* -------------------------------------------------------------------------- */
|
|
108
70
|
/* BUILD ZOOM STYLES */
|
|
109
71
|
/* -------------------------------------------------------------------------- */
|
|
@@ -168,9 +130,11 @@ export function buildZoomStyles({
|
|
|
168
130
|
style: VISIBLE_STYLE,
|
|
169
131
|
},
|
|
170
132
|
} satisfies TransitionInterpolatedStyle;
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
133
|
+
const navigationMaskEnabled = props.current.options.navigationMaskEnabled;
|
|
134
|
+
const maxSensitivity = zoomOptions?.maxSensitivity ?? 0.8;
|
|
135
|
+
const velocityDepth =
|
|
136
|
+
zoomOptions?.velocityDepth ?? ZOOM_DISMISS_SCALE_ORBIT_DEPTH;
|
|
137
|
+
const gestureProgressMode = zoomOptions?.gestureProgressMode ?? "freeform";
|
|
174
138
|
|
|
175
139
|
/* --------------------------- Gesture / Drag Values ------------------------- */
|
|
176
140
|
|
|
@@ -238,16 +202,18 @@ export function buildZoomStyles({
|
|
|
238
202
|
: IDENTITY_DRAG_SCALE_OUTPUT[1];
|
|
239
203
|
const dragScale = combineScales(dragXScale, dragYScale);
|
|
240
204
|
const handoffDragScale = props.active.gesture.dismissing
|
|
241
|
-
?
|
|
205
|
+
? resolveDismissScaleHandoff({
|
|
242
206
|
progress: props.active.progress,
|
|
243
207
|
releaseScale: dragScale,
|
|
244
208
|
targetScale: 1,
|
|
245
|
-
|
|
209
|
+
velocity: props.active.gesture.velocity,
|
|
210
|
+
velocityDepth,
|
|
246
211
|
})
|
|
247
212
|
: dragScale;
|
|
248
213
|
const zoomGestureOptions = resolveZoomGestureOptions({
|
|
249
214
|
rawDrag,
|
|
250
|
-
|
|
215
|
+
maxSensitivity,
|
|
216
|
+
gestureProgressMode,
|
|
251
217
|
});
|
|
252
218
|
|
|
253
219
|
/* ----------------------------- Focused Screen ----------------------------- */
|
|
@@ -301,11 +267,32 @@ export function buildZoomStyles({
|
|
|
301
267
|
const maskWidth = Math.max(1, toNumber(maskRaw.width) + left + right);
|
|
302
268
|
const maskHeight = Math.max(1, toNumber(maskRaw.height) + top + bottom);
|
|
303
269
|
|
|
304
|
-
const
|
|
305
|
-
const
|
|
306
|
-
const
|
|
307
|
-
const
|
|
308
|
-
|
|
270
|
+
const contentBaseTranslateX = toNumber(contentRaw.translateX);
|
|
271
|
+
const contentBaseTranslateY = toNumber(contentRaw.translateY);
|
|
272
|
+
const contentBaseScale = toNumber(contentRaw.scale, 1);
|
|
273
|
+
const safeContentBaseScale =
|
|
274
|
+
Math.abs(contentBaseScale) > EPSILON ? contentBaseScale : 1;
|
|
275
|
+
const contentTranslateX = contentBaseTranslateX + dragX;
|
|
276
|
+
const contentTranslateY = contentBaseTranslateY + dragY;
|
|
277
|
+
const contentScale = contentBaseScale * handoffDragScale;
|
|
278
|
+
|
|
279
|
+
const maskBaseTranslateX = toNumber(maskRaw.translateX) - left;
|
|
280
|
+
const maskBaseTranslateY = toNumber(maskRaw.translateY) - top;
|
|
281
|
+
const maskCenterX = maskWidth / 2;
|
|
282
|
+
const maskCenterY = maskHeight / 2;
|
|
283
|
+
const contentCenterX = screenLayout.width / 2;
|
|
284
|
+
const contentCenterY = screenLayout.height / 2;
|
|
285
|
+
const compensatedMaskTranslateX =
|
|
286
|
+
(maskBaseTranslateX -
|
|
287
|
+
contentBaseTranslateX +
|
|
288
|
+
(1 - contentBaseScale) * (maskCenterX - contentCenterX)) /
|
|
289
|
+
safeContentBaseScale;
|
|
290
|
+
const compensatedMaskTranslateY =
|
|
291
|
+
(maskBaseTranslateY -
|
|
292
|
+
contentBaseTranslateY +
|
|
293
|
+
(1 - contentBaseScale) * (maskCenterY - contentCenterY)) /
|
|
294
|
+
safeContentBaseScale;
|
|
295
|
+
const compensatedMaskScale = 1 / safeContentBaseScale;
|
|
309
296
|
|
|
310
297
|
const focusedContentStyle = {
|
|
311
298
|
opacity: zoomOptions?.debug ? 0.5 : focusedFade,
|
|
@@ -314,27 +301,31 @@ export function buildZoomStyles({
|
|
|
314
301
|
{ translateY: contentTranslateY },
|
|
315
302
|
{ scale: contentScale },
|
|
316
303
|
],
|
|
317
|
-
|
|
318
|
-
|
|
304
|
+
...(navigationMaskEnabled
|
|
305
|
+
? {}
|
|
306
|
+
: {
|
|
307
|
+
borderRadius: focusedMaskBorderRadius,
|
|
308
|
+
overflow: "hidden" as const,
|
|
309
|
+
}),
|
|
319
310
|
};
|
|
320
311
|
|
|
321
312
|
const focusedStyles: ZoomInterpolatedStyle = {
|
|
322
|
-
|
|
313
|
+
content: {
|
|
323
314
|
style: focusedContentStyle,
|
|
324
315
|
},
|
|
325
316
|
...sourceVisibilityStyle,
|
|
326
317
|
};
|
|
327
318
|
|
|
328
|
-
if (
|
|
319
|
+
if (navigationMaskEnabled) {
|
|
329
320
|
focusedStyles[NAVIGATION_MASK_ELEMENT_STYLE_ID] = {
|
|
330
321
|
style: {
|
|
331
322
|
width: maskWidth,
|
|
332
323
|
height: maskHeight,
|
|
333
324
|
borderRadius: focusedMaskBorderRadius,
|
|
334
325
|
transform: [
|
|
335
|
-
{ translateX:
|
|
336
|
-
{ translateY:
|
|
337
|
-
{ scale:
|
|
326
|
+
{ translateX: compensatedMaskTranslateX },
|
|
327
|
+
{ translateY: compensatedMaskTranslateY },
|
|
328
|
+
{ scale: compensatedMaskScale },
|
|
338
329
|
],
|
|
339
330
|
},
|
|
340
331
|
};
|
|
@@ -9,7 +9,7 @@ export const ZOOM_DRAG_DIRECTIONAL_SCALE_EXPONENT = 2;
|
|
|
9
9
|
export const ZOOM_DRAG_TRANSLATION_NEGATIVE_MAX = 1;
|
|
10
10
|
export const ZOOM_DRAG_TRANSLATION_POSITIVE_MAX = 1;
|
|
11
11
|
export const ZOOM_DRAG_TRANSLATION_EXPONENT = 1;
|
|
12
|
-
export const ZOOM_DISMISS_SCALE_ORBIT_DEPTH = 0.
|
|
12
|
+
export const ZOOM_DISMISS_SCALE_ORBIT_DEPTH = 0.5;
|
|
13
13
|
export const ZOOM_BACKGROUND_SCALE = 0.9375;
|
|
14
14
|
export const ZOOM_FOCUSED_ELEMENT_OPEN_OPACITY_RANGE = [0, 0.5, 0, 1] as const;
|
|
15
15
|
export const ZOOM_FOCUSED_ELEMENT_CLOSE_OPACITY_RANGE = [0.6, 1, 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(
|
|
@@ -2,6 +2,8 @@ import type { useClosingRouteKeys } from "../../hooks/navigation/use-closing-rou
|
|
|
2
2
|
import type { RouteWithKey } from "../../types/stack.types";
|
|
3
3
|
import { composeDescriptors } from "./compose-descriptors";
|
|
4
4
|
|
|
5
|
+
type ClosingRouteKeys = Set<string> | ReturnType<typeof useClosingRouteKeys>;
|
|
6
|
+
|
|
5
7
|
type SyncRoutesWithRemovedParams<
|
|
6
8
|
Route extends RouteWithKey,
|
|
7
9
|
DescriptorMap extends Record<string, unknown>,
|
|
@@ -10,7 +12,36 @@ type SyncRoutesWithRemovedParams<
|
|
|
10
12
|
prevDescriptors: DescriptorMap;
|
|
11
13
|
nextRoutes: Route[];
|
|
12
14
|
nextDescriptors: DescriptorMap;
|
|
13
|
-
closingRouteKeys:
|
|
15
|
+
closingRouteKeys: ClosingRouteKeys;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const addClosingRouteKey = (
|
|
19
|
+
closingRouteKeys: ClosingRouteKeys,
|
|
20
|
+
key: string,
|
|
21
|
+
) => {
|
|
22
|
+
closingRouteKeys.add(key);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const deleteClosingRouteKey = (
|
|
26
|
+
closingRouteKeys: ClosingRouteKeys,
|
|
27
|
+
key: string,
|
|
28
|
+
) => {
|
|
29
|
+
if (closingRouteKeys instanceof Set) {
|
|
30
|
+
closingRouteKeys.delete(key);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
closingRouteKeys.remove(key);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const getClosingRouteKeyValues = (
|
|
38
|
+
closingRouteKeys: ClosingRouteKeys,
|
|
39
|
+
): Iterable<string> => {
|
|
40
|
+
if (closingRouteKeys instanceof Set) {
|
|
41
|
+
return closingRouteKeys;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return closingRouteKeys.ref.current;
|
|
14
45
|
};
|
|
15
46
|
|
|
16
47
|
/**
|
|
@@ -60,16 +91,16 @@ export const syncRoutesWithRemoved = <
|
|
|
60
91
|
|
|
61
92
|
if (nextRouteWasPresent && !previousRouteStillPresent) {
|
|
62
93
|
// Previous route was removed, mark as closing
|
|
63
|
-
closingRouteKeys
|
|
94
|
+
addClosingRouteKey(closingRouteKeys, previousFocusedRoute.key);
|
|
64
95
|
|
|
65
96
|
derivedRoutes.push(previousFocusedRoute);
|
|
66
97
|
} else {
|
|
67
98
|
// Next route is now active, not closing
|
|
68
|
-
closingRouteKeys
|
|
99
|
+
deleteClosingRouteKey(closingRouteKeys, nextFocusedRoute.key);
|
|
69
100
|
|
|
70
101
|
if (!previousRouteStillPresent) {
|
|
71
102
|
// Previous route needs to be inserted for transition
|
|
72
|
-
closingRouteKeys
|
|
103
|
+
deleteClosingRouteKey(closingRouteKeys, previousFocusedRoute.key);
|
|
73
104
|
|
|
74
105
|
const insertIndex = Math.max(derivedRoutes.length - 1, 0);
|
|
75
106
|
derivedRoutes.splice(insertIndex, 0, previousFocusedRoute);
|
|
@@ -77,14 +108,14 @@ export const syncRoutesWithRemoved = <
|
|
|
77
108
|
}
|
|
78
109
|
} else if (nextFocusedRoute) {
|
|
79
110
|
// Same focused route, ensure it's not marked as closing
|
|
80
|
-
closingRouteKeys
|
|
111
|
+
deleteClosingRouteKey(closingRouteKeys, nextFocusedRoute.key);
|
|
81
112
|
}
|
|
82
113
|
|
|
83
114
|
// Clean up closing keys that are no longer in the route list
|
|
84
115
|
const activeKeys = new Set(derivedRoutes.map((route) => route.key));
|
|
85
|
-
for (const key of Array.from(closingRouteKeys
|
|
116
|
+
for (const key of Array.from(getClosingRouteKeyValues(closingRouteKeys))) {
|
|
86
117
|
if (!activeKeys.has(key)) {
|
|
87
|
-
closingRouteKeys
|
|
118
|
+
deleteClosingRouteKey(closingRouteKeys, key);
|
|
88
119
|
}
|
|
89
120
|
}
|
|
90
121
|
|