react-native-screen-transitions 1.0.2 → 1.1.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 +223 -177
- package/dist/index.d.mts +872 -8
- package/dist/index.d.ts +872 -8
- package/dist/index.js +864 -620
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +858 -611
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -6
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/configs/presets.ts","../src/configs/specs.ts","../src/hooks/use-screen-animation.tsx","../src/store/utils/use-shallow.tsx","../src/store/utils/shallow.ts","../src/animation-engine.ts","../src/store/utils/create-vanilla-store.ts","../src/store/index.ts","../src/utils/animate.ts","../src/utils/gesture/build-gesture-detector.ts","../src/utils/gesture/create-gesture-activation-criteria.ts","../src/utils/gesture/map-gesture-to-progress.ts","../src/utils/noop-interpolator.ts","../src/hooks/use-key.tsx","../src/utils/create-config.ts","../src/utils/create-transition-component.tsx","../src/hooks/use-skip-first-frame.tsx","../src/utils/default-screen-options.ts"],"sourcesContent":["import { Pressable, View } from \"react-native\";\nimport { presets, specs } from \"./configs\";\nimport { useScreenAnimation } from \"./hooks/use-screen-animation\";\nimport { createConfig } from \"./utils/create-config\";\nimport { createTransitionComponent } from \"./utils/create-transition-component\";\nimport { defaultScreenOptions } from \"./utils/default-screen-options\";\n\nexport default {\n\tcreateTransitionComponent,\n\tView: createTransitionComponent(View),\n\tPressable: createTransitionComponent(Pressable),\n\tcreateConfig,\n\tdefaultScreenOptions,\n\tpresets,\n\tspecs,\n};\n\nexport { useScreenAnimation };\n","import {\n\tExtrapolation,\n\tinterpolate,\n\tinterpolateColor,\n} from \"react-native-reanimated\";\nimport type { TransitionConfig } from \"../types\";\nimport { DefaultSpec } from \"./specs\";\n\nexport const SlideFromTop = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"vertical-inverted\",\n\t\tscreenStyleInterpolator: ({\n\t\t\tcurrent,\n\t\t\tnext,\n\t\t\tlayouts: {\n\t\t\t\tscreen: { height },\n\t\t\t},\n\t\t}) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst y = interpolate(progress, [0, 1, 2], [-height, 0, height]);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ translateY: y }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const ZoomIn = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: false,\n\t\tscreenStyleInterpolator: ({ current, next }) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst scale = interpolate(\n\t\t\t\tprogress,\n\t\t\t\t[0, 1, 2],\n\t\t\t\t[0.5, 1, 0.5],\n\t\t\t\tExtrapolation.CLAMP,\n\t\t\t);\n\n\t\t\tconst opacity = interpolate(\n\t\t\t\tprogress,\n\t\t\t\t[0, 1, 2],\n\t\t\t\t[0, 1, 0],\n\t\t\t\tExtrapolation.CLAMP,\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }],\n\t\t\t\t\topacity,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const SlideFromBottom = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"vertical\",\n\t\tscreenStyleInterpolator: ({\n\t\t\tcurrent,\n\t\t\tnext,\n\t\t\tlayouts: {\n\t\t\t\tscreen: { height },\n\t\t\t},\n\t\t}) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst y = interpolate(progress, [0, 1, 2], [height, 0, -height]);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ translateY: y }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const DraggableCard = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: [\"horizontal\", \"vertical\"],\n\t\tscreenStyleInterpolator: ({ current, next, layouts: { screen } }) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\t/** Combined */\n\t\t\tconst scale = interpolate(progress, [0, 1, 2], [0, 1, 0.75]);\n\n\t\t\t/** Vertical */\n\t\t\tconst translateY = interpolate(\n\t\t\t\tcurrent.gesture.normalizedY.value,\n\t\t\t\t[-1, 1],\n\t\t\t\t[-screen.height * 0.5, screen.height * 0.5],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\t/** Horizontal */\n\t\t\tconst translateX = interpolate(\n\t\t\t\tcurrent.gesture.normalizedX.value,\n\t\t\t\t[-1, 1],\n\t\t\t\t[-screen.width * 0.5, screen.width * 0.5],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }, { translateY: translateY }, { translateX }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const ElasticCard = (\n\tconfig: Partial<TransitionConfig> & {\n\t\telasticFactor?: number;\n\t} = { elasticFactor: 0.5 },\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"bidirectional\",\n\t\tscreenStyleInterpolator: ({ current, next, layouts: { screen } }) => {\n\t\t\t\"worklet\";\n\n\t\t\t/**\n\t\t\t * Applies to both screens ( previous and incoming)\n\t\t\t */\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\t\t\tconst scale = interpolate(progress, [0, 1, 2], [0, 1, 0.8]);\n\n\t\t\t/**\n\t\t\t * Applies to current screen\n\t\t\t */\n\t\t\tconst maxElasticityX = screen.width * (config.elasticFactor ?? 0.5);\n\t\t\tconst maxElasticityY = screen.height * (config.elasticFactor ?? 0.5);\n\t\t\tconst translateX = interpolate(\n\t\t\t\tcurrent.gesture.normalizedX.value,\n\t\t\t\t[-1, 0, 1],\n\t\t\t\t[-maxElasticityX, 0, maxElasticityX],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\tconst translateY = interpolate(\n\t\t\t\tcurrent.gesture.normalizedY.value,\n\t\t\t\t[-1, 0, 1],\n\t\t\t\t[-maxElasticityY, 0, maxElasticityY],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Applies to unfocused screen ( previous screen )\n\t\t\t */\n\t\t\tconst overlayColor = interpolateColor(\n\t\t\t\tnext?.progress.value || 0,\n\t\t\t\t[0, 1],\n\t\t\t\t[\"rgba(0,0,0,0)\", \"rgba(0,0,0,0.5)\"],\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }, { translateX }, { translateY }],\n\t\t\t\t},\n\t\t\t\toverlayStyle: {\n\t\t\t\t\tbackgroundColor: overlayColor,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t...config,\n\t};\n};\n","import type { WithSpringConfig } from \"react-native-reanimated\";\n\nexport const DefaultSpec: WithSpringConfig = {\n\tstiffness: 1000,\n\tdamping: 500,\n\tmass: 3,\n\tovershootClamping: true,\n\trestSpeedThreshold: 0.01,\n};\n","import { useNavigation } from \"@react-navigation/native\";\nimport { useMemo } from \"react\";\nimport { useWindowDimensions } from \"react-native\";\nimport type {\n\tComposedGesture,\n\tGestureType,\n} from \"react-native-gesture-handler\";\nimport { useSharedValue } from \"react-native-reanimated\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { useShallow } from \"@/store/utils/use-shallow\";\nimport { animationValues } from \"../animation-engine\";\nimport { RouteStore } from \"../store\";\nimport type {\n\tScreenInterpolationProps,\n\tScreenStyleInterpolator,\n} from \"../types\";\nimport { buildGestureDetector } from \"../utils/gesture/build-gesture-detector\";\nimport { noopinterpolator } from \"../utils/noop-interpolator\";\nimport { useKey } from \"./use-key\";\n\ninterface InternalScreenInterpolationProps extends ScreenInterpolationProps {\n\tgestureDetector: GestureType | ComposedGesture;\n\tscreenStyleInterpolator: ScreenStyleInterpolator;\n}\n\nconst useAnimationBuilder = () => {\n\tconst key = useKey();\n\tconst dimensions = useWindowDimensions();\n\tconst insets = useSafeAreaInsets();\n\tconst navigation = useNavigation();\n\n\tconst { currentRoute, nextRoute } = RouteStore.use(\n\t\tuseShallow(({ routes, routeKeys }) => {\n\t\t\tconst current = routes[key];\n\n\t\t\tif (!current) {\n\t\t\t\treturn { currentRoute: undefined, nextRoute: undefined };\n\t\t\t}\n\n\t\t\tconst currentScreenIndex = current.index;\n\t\t\tconst nextKey = routeKeys[currentScreenIndex + 1];\n\t\t\tconst next = nextKey ? routes[nextKey] : undefined;\n\n\t\t\tconst isSameNavigator = next?.navigatorKey === current.navigatorKey;\n\n\t\t\tif (!isSameNavigator) {\n\t\t\t\t/**\n\t\t\t\t * Without this guard, b (_layout) would instantly run its exit animation (if declared) once b/index is focused.\n\t\t\t\t */\n\t\t\t\treturn {\n\t\t\t\t\tcurrentRoute: current,\n\t\t\t\t\tnextRoute: undefined,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcurrentRoute: current,\n\t\t\t\tnextRoute: next,\n\t\t\t};\n\t\t}),\n\t);\n\n\tconst panGesture = useMemo(\n\t\t() =>\n\t\t\tbuildGestureDetector({\n\t\t\t\tkey,\n\t\t\t\tprogress: animationValues.screenProgress[key],\n\t\t\t\tconfig: currentRoute || {\n\t\t\t\t\tid: key,\n\t\t\t\t\tname: key,\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tclosing: false,\n\t\t\t\t},\n\t\t\t\twidth: dimensions.width,\n\t\t\t\theight: dimensions.height,\n\t\t\t\tgoBack: navigation.goBack,\n\t\t\t}),\n\t\t[key, currentRoute, dimensions.width, dimensions.height, navigation.goBack],\n\t);\n\n\t// We'll avoid using makeMutable as fallbacks since useSharedValues are automatically garbage collected\n\tconst progressFallback = useSharedValue(0);\n\tconst gestureDraggingFallback = useSharedValue(0);\n\tconst gestureXFallback = useSharedValue(0);\n\tconst gestureYFallback = useSharedValue(0);\n\tconst normalizedGestureXFallback = useSharedValue(0);\n\tconst normalizedGestureYFallback = useSharedValue(0);\n\n\treturn useMemo(() => {\n\t\treturn {\n\t\t\tcurrent: {\n\t\t\t\tprogress: animationValues.screenProgress[key] || progressFallback,\n\t\t\t\tgesture: {\n\t\t\t\t\tisDragging:\n\t\t\t\t\t\tanimationValues.gestureDragging[key] || gestureDraggingFallback,\n\t\t\t\t\tx: animationValues.gestureX[key] || gestureXFallback,\n\t\t\t\t\ty: animationValues.gestureY[key] || gestureYFallback,\n\t\t\t\t\tnormalizedX:\n\t\t\t\t\t\tanimationValues.normalizedGestureX[key] ||\n\t\t\t\t\t\tnormalizedGestureXFallback,\n\t\t\t\t\tnormalizedY:\n\t\t\t\t\t\tanimationValues.normalizedGestureY[key] ||\n\t\t\t\t\t\tnormalizedGestureYFallback,\n\t\t\t\t},\n\t\t\t},\n\t\t\tnext:\n\t\t\t\tnextRoute && animationValues.screenProgress[nextRoute.id]\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tprogress: animationValues.screenProgress[nextRoute.id],\n\t\t\t\t\t\t\tgesture: {\n\t\t\t\t\t\t\t\tisDragging:\n\t\t\t\t\t\t\t\t\tanimationValues.gestureDragging[nextRoute.id] ||\n\t\t\t\t\t\t\t\t\tgestureDraggingFallback,\n\t\t\t\t\t\t\t\tx: animationValues.gestureX[nextRoute.id] || gestureXFallback,\n\t\t\t\t\t\t\t\ty: animationValues.gestureY[nextRoute.id] || gestureYFallback,\n\t\t\t\t\t\t\t\tnormalizedX:\n\t\t\t\t\t\t\t\t\tanimationValues.normalizedGestureX[nextRoute.id] ||\n\t\t\t\t\t\t\t\t\tnormalizedGestureXFallback,\n\t\t\t\t\t\t\t\tnormalizedY:\n\t\t\t\t\t\t\t\t\tanimationValues.normalizedGestureY[nextRoute.id] ||\n\t\t\t\t\t\t\t\t\tnormalizedGestureYFallback,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\tlayouts: { screen: dimensions },\n\t\t\tinsets,\n\t\t\tclosing: currentRoute?.closing || false,\n\t\t\tscreenStyleInterpolator:\n\t\t\t\tnextRoute?.screenStyleInterpolator ||\n\t\t\t\tcurrentRoute?.screenStyleInterpolator ||\n\t\t\t\tnoopinterpolator,\n\n\t\t\tgestureDetector: panGesture,\n\t\t};\n\t}, [\n\t\tkey,\n\t\tcurrentRoute,\n\t\tnextRoute,\n\t\tdimensions,\n\t\tinsets,\n\t\tpanGesture,\n\t\tprogressFallback,\n\t\tgestureDraggingFallback,\n\t\tgestureXFallback,\n\t\tgestureYFallback,\n\t\tnormalizedGestureXFallback,\n\t\tnormalizedGestureYFallback,\n\t]);\n};\n\nconst _useScreenAnimation = (): InternalScreenInterpolationProps => {\n\treturn useAnimationBuilder();\n};\n\nconst useScreenAnimation = (): ScreenInterpolationProps => {\n\tconst {\n\t\tscreenStyleInterpolator: _,\n\t\tgestureDetector: __,\n\t\t...animationProps\n\t} = useAnimationBuilder();\n\n\treturn animationProps;\n};\n\nexport { _useScreenAnimation, useScreenAnimation };\n","/**\n * NOTICE:\n * Taken from zustand/react/shallow.ts\n * @link https://github.com/pmndrs/zustand/blob/main/src/react/shallow.ts\n */\nimport React from \"react\";\nimport { shallow } from \"./shallow\";\n\nexport function useShallow<S, U>(selector: (state: S) => U): (state: S) => U {\n\tconst prev = React.useRef<U>(undefined);\n\treturn (state) => {\n\t\tconst next = selector(state);\n\n\t\tif (shallow(prev.current, next)) {\n\t\t\treturn prev.current as U;\n\t\t}\n\n\t\tprev.current = next;\n\t\treturn next;\n\t};\n}\n","/**\n * NOTICE:\n * Taken from zustand/vanilla/shallow.ts\n * @link https://github.com/pmndrs/zustand/blob/main/src/vanilla/shallow.ts\n */\n\nconst isIterable = (obj: object): obj is Iterable<unknown> =>\n\tSymbol.iterator in obj;\n\nconst hasIterableEntries = (\n\tvalue: Iterable<unknown>,\n): value is Iterable<unknown> & {\n\tentries(): Iterable<[unknown, unknown]>;\n} =>\n\t// HACK: avoid checking entries type\n\t\"entries\" in value;\n\nconst compareEntries = (\n\tvalueA: { entries(): Iterable<[unknown, unknown]> },\n\tvalueB: { entries(): Iterable<[unknown, unknown]> },\n) => {\n\tconst mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n\tconst mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n\tif (mapA.size !== mapB.size) {\n\t\treturn false;\n\t}\n\tfor (const [key, value] of mapA) {\n\t\tif (!Object.is(value, mapB.get(key))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\n// Ordered iterables\nconst compareIterables = (\n\tvalueA: Iterable<unknown>,\n\tvalueB: Iterable<unknown>,\n) => {\n\tconst iteratorA = valueA[Symbol.iterator]();\n\tconst iteratorB = valueB[Symbol.iterator]();\n\tlet nextA = iteratorA.next();\n\tlet nextB = iteratorB.next();\n\twhile (!nextA.done && !nextB.done) {\n\t\tif (!Object.is(nextA.value, nextB.value)) {\n\t\t\treturn false;\n\t\t}\n\t\tnextA = iteratorA.next();\n\t\tnextB = iteratorB.next();\n\t}\n\treturn !!nextA.done && !!nextB.done;\n};\n\nexport function shallow<T>(valueA: T, valueB: T): boolean {\n\tif (Object.is(valueA, valueB)) {\n\t\treturn true;\n\t}\n\tif (\n\t\ttypeof valueA !== \"object\" ||\n\t\tvalueA === null ||\n\t\ttypeof valueB !== \"object\" ||\n\t\tvalueB === null\n\t) {\n\t\treturn false;\n\t}\n\tif (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n\t\treturn false;\n\t}\n\n\tif (isIterable(valueA) && isIterable(valueB)) {\n\t\tif (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n\t\t\treturn compareEntries(valueA, valueB);\n\t\t}\n\t\treturn compareIterables(valueA, valueB);\n\t}\n\t// assume plain objects\n\treturn compareEntries(\n\t\t{ entries: () => Object.entries(valueA) },\n\t\t{ entries: () => Object.entries(valueB) },\n\t);\n}\n","import {\n\tcancelAnimation,\n\tmakeMutable,\n\trunOnJS,\n\ttype SharedValue,\n} from \"react-native-reanimated\";\n\nimport { RouteStore } from \"./store/index\";\nimport type { RouteState } from \"./types\";\nimport { animate } from \"./utils/animate\";\n\ntype RouteKey = string;\n\nexport const animationValues: Record<\n\tstring,\n\tRecord<RouteKey, SharedValue<number>>\n> = {\n\tscreenProgress: {},\n\tgestureX: {},\n\tgestureY: {},\n\tnormalizedGestureX: {},\n\tnormalizedGestureY: {},\n\tgestureDragging: {},\n};\n\nconst triggerAnimation = (route: RouteState) => {\n\t\"worklet\";\n\tconst { id, closing, status, transitionSpec, onAnimationFinish } = route;\n\n\tconst progressValue = animationValues.screenProgress[id];\n\n\tif (!progressValue && __DEV__) {\n\t\tconsole.warn(`Animation values not found for route: ${id}`);\n\t\treturn;\n\t}\n\n\tconst animationConfig = closing\n\t\t? transitionSpec?.close\n\t\t: transitionSpec?.open;\n\n\tconst targetValue = status || 0;\n\n\tprogressValue.value = animate(targetValue, animationConfig, (finished) => {\n\t\t\"worklet\";\n\t\tif (finished && onAnimationFinish) {\n\t\t\trunOnJS(onAnimationFinish)(true);\n\t\t}\n\t});\n};\n\nRouteStore.use.subscribeWithSelector(\n\t(state) => state.routes,\n\t(currRoutes, prevRoutes) => {\n\t\tconst currKeys = Object.keys(currRoutes);\n\t\tconst prevKeys = Object.keys(prevRoutes);\n\n\t\tconst incomingKeys = currKeys.filter((k) => !prevKeys.includes(k));\n\t\tconst removedKeys = prevKeys.filter((k) => !currKeys.includes(k));\n\t\tconst changedKeys = currKeys.filter((k) => currRoutes[k] !== prevRoutes[k]);\n\n\t\tconst animatableValues = Object.values(animationValues);\n\n\t\tfor (const incomingKey of incomingKeys) {\n\t\t\tfor (const value of animatableValues) {\n\t\t\t\tvalue[incomingKey] = makeMutable(0);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Remove mutable values for removed routes\n\t\t * @see {@link https://docs.swmansion.com/react-native-reanimated/docs/advanced/makeMutable/}\n\t\t */\n\t\tfor (const removedKey of removedKeys) {\n\t\t\tfor (const value of animatableValues) {\n\t\t\t\tcancelAnimation(value[removedKey]);\n\t\t\t\tdelete value[removedKey];\n\t\t\t}\n\t\t}\n\n\t\tfor (const changedKey of changedKeys) {\n\t\t\tconst currentRoute = currRoutes[changedKey];\n\t\t\tif (currentRoute) {\n\t\t\t\ttriggerAnimation(currentRoute);\n\t\t\t}\n\t\t}\n\t},\n);\n","import { type Draft, produce } from \"immer\";\nimport { useSyncExternalStore } from \"react\";\n\ntype Listener = () => void;\ntype StateUpdater<T> = (draft: Draft<T>) => void;\n\ntype StoreListener<_, TSelectorOutput> = (\n\tselectedState: TSelectorOutput,\n\tpreviousSelectedState: TSelectorOutput,\n) => void;\n\nexport interface StoreApi<T> {\n\tsetState: (updater: StateUpdater<T>) => void;\n\tgetState: () => T;\n\tsubscribe: (listener: Listener) => () => void;\n\tsubscribeWithSelector: <TSelectorOutput>(\n\t\tselector: (state: T) => TSelectorOutput,\n\t\tlistener: StoreListener<T, TSelectorOutput>,\n\t) => () => void;\n}\n\nexport function createVanillaStore<TState>(initialState: TState) {\n\tlet state: TState = initialState;\n\tconst listeners = new Set<Listener>();\n\n\tconst getState = (): TState => state;\n\n\tconst setState = (updater: StateUpdater<TState>) => {\n\t\tconst nextState = produce(state, updater);\n\n\t\tif (nextState !== state) {\n\t\t\tstate = nextState;\n\t\t\tlisteners.forEach((listener) => listener());\n\t\t}\n\t};\n\n\tconst subscribe = (listener: Listener): (() => void) => {\n\t\tlisteners.add(listener);\n\t\treturn () => listeners.delete(listener);\n\t};\n\n\tconst subscribeWithSelector = <TSelectorOutput>(\n\t\tselector: (state: TState) => TSelectorOutput,\n\t\tlistener: StoreListener<TState, TSelectorOutput>,\n\t) => {\n\t\tlet previousSelectedState = selector(state);\n\n\t\tconst internalListener = () => {\n\t\t\tconst currentSelectedState = selector(getState());\n\n\t\t\tif (!Object.is(previousSelectedState, currentSelectedState)) {\n\t\t\t\tlistener(currentSelectedState, previousSelectedState);\n\t\t\t\tpreviousSelectedState = currentSelectedState;\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribe = subscribe(internalListener);\n\n\t\tlistener(previousSelectedState, previousSelectedState);\n\n\t\treturn unsubscribe;\n\t};\n\n\tfunction useStore<TSelectorOutput>(\n\t\tselector: (state: TState) => TSelectorOutput,\n\t): TSelectorOutput {\n\t\treturn useSyncExternalStore(subscribe, () => selector(getState()));\n\t}\n\n\tObject.assign(useStore, {\n\t\tsetState,\n\t\tgetState,\n\t\tsubscribe,\n\t\tsubscribeWithSelector,\n\t});\n\n\treturn useStore as typeof useStore & StoreApi<TState>;\n}\n","import type { RouteState, RouteStateStore } from \"../types\";\nimport { createVanillaStore } from \"./utils/create-vanilla-store\";\n\nconst useRouteStore = createVanillaStore<RouteStateStore>({\n\troutes: {},\n\trouteKeys: [],\n});\n\nexport const RouteStore = {\n\tuse: useRouteStore,\n\tupdateRoute: (key: string | undefined, value: Partial<RouteState>) => {\n\t\tif (!key) return;\n\n\t\tuseRouteStore.setState(({ routeKeys, routes }) => {\n\t\t\tconst currentRoute = routes[key];\n\n\t\t\tif (currentRoute) {\n\t\t\t\troutes[key] = {\n\t\t\t\t\t...currentRoute,\n\t\t\t\t\t...value,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconst { name = \"\", status = 0, closing = false, ...rest } = value;\n\n\t\t\t\tconst newIndex = routeKeys.length;\n\n\t\t\t\troutes[key] = {\n\t\t\t\t\tid: key,\n\t\t\t\t\tindex: newIndex,\n\t\t\t\t\tname,\n\t\t\t\t\tstatus,\n\t\t\t\t\tclosing,\n\t\t\t\t\t...rest,\n\t\t\t\t};\n\n\t\t\t\trouteKeys.push(key);\n\t\t\t}\n\t\t});\n\t},\n\tremoveRoute: (key: string | undefined) => {\n\t\tif (!key) return;\n\t\tuseRouteStore.setState(({ routes, routeKeys }) => {\n\t\t\tdelete routes[key];\n\n\t\t\tconst indexToRemove = routeKeys.indexOf(key);\n\n\t\t\tif (indexToRemove > -1) {\n\t\t\t\trouteKeys.splice(indexToRemove, 1);\n\t\t\t}\n\t\t});\n\t},\n\tgetPreviousRoute: (key: string | undefined): RouteState | null => {\n\t\tif (!key) return null;\n\t\tconst index = useRouteStore.getState().routeKeys.indexOf(key);\n\n\t\treturn index > -1\n\t\t\t? useRouteStore.getState().routes[\n\t\t\t\t\tuseRouteStore.getState().routeKeys[index - 1]\n\t\t\t\t]\n\t\t\t: null;\n\t},\n};\n","import {\n\ttype WithSpringConfig,\n\ttype WithTimingConfig,\n\twithSpring,\n\twithTiming,\n} from \"react-native-reanimated\";\nimport type {\n\tAnimatableValue,\n\tAnimationCallback,\n} from \"react-native-reanimated/lib/typescript/commonTypes\";\n\nexport const animate = <T extends AnimatableValue>(\n\ttoValue: T,\n\tconfig?: WithSpringConfig | WithTimingConfig,\n\tcallback?: AnimationCallback,\n) => {\n\t\"worklet\";\n\tconst isSpring =\n\t\ttypeof config === \"object\" &&\n\t\t!(\"duration\" in config) &&\n\t\t!(\"easing\" in config);\n\n\tif (!isSpring) {\n\t\treturn withTiming(toValue, config, callback);\n\t}\n\n\treturn withSpring(toValue, config, callback);\n};\n","import { Gesture } from \"react-native-gesture-handler\";\nimport {\n\tinterpolate,\n\trunOnJS,\n\ttype SharedValue,\n} from \"react-native-reanimated\";\nimport { animationValues } from \"../../animation-engine\";\nimport type { GestureDirection, RouteState } from \"../../types\";\nimport { animate } from \"../animate\";\nimport { createGestureActivationCriteria } from \"./create-gesture-activation-criteria\";\nimport { mapGestureToProgress } from \"./map-gesture-to-progress\";\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\nconst DEFAULT_GESTURE_RESPONSE_DISTANCE = 50;\n\ninterface BuildGestureDetectorProps {\n\tkey: string;\n\tprogress: SharedValue<number>;\n\tconfig: RouteState;\n\twidth: number;\n\theight: number;\n\tgoBack: () => void;\n}\n\nexport const normalizeGestureTranslation = (\n\ttranslation: number,\n\tgestureDirection: GestureDirection,\n) => {\n\t\"worklet\";\n\tconst isInverted = gestureDirection.includes(\"inverted\");\n\n\tconst translated = Math.abs(translation) * (isInverted ? -1 : 1);\n\n\tif (isInverted) {\n\t\treturn Math.min(0, translated);\n\t}\n\n\treturn Math.max(0, translated);\n};\n\nexport const buildGestureDetector = ({\n\tkey,\n\tprogress,\n\tconfig,\n\twidth,\n\theight,\n\tgoBack,\n}: BuildGestureDetectorProps) => {\n\tconst _translateX = animationValues.gestureX[key];\n\tconst _translateY = animationValues.gestureY[key];\n\tconst _normalizedGestureX = animationValues.normalizedGestureX[key];\n\tconst _normalizedGestureY = animationValues.normalizedGestureY[key];\n\tconst _isDragging = animationValues.gestureDragging[key];\n\n\tconst {\n\t\tgestureDirection = \"horizontal\",\n\t\tgestureEnabled = false,\n\t\ttransitionSpec,\n\t\tgestureVelocityImpact = GESTURE_VELOCITY_IMPACT,\n\t\tgestureResponseDistance = DEFAULT_GESTURE_RESPONSE_DISTANCE,\n\t} = config;\n\n\tconst directions = Array.isArray(gestureDirection)\n\t\t? gestureDirection\n\t\t: [gestureDirection];\n\n\tconst panGesture = Gesture.Pan()\n\t\t.enabled(gestureEnabled)\n\t\t.onStart(() => {\n\t\t\t\"worklet\";\n\t\t\t_isDragging.value = 1;\n\t\t})\n\t\t.onUpdate((event) => {\n\t\t\t\"worklet\";\n\t\t\tlet gestureProgress = 0;\n\n\t\t\t_translateX.value = event.translationX;\n\t\t\t_translateY.value = event.translationY;\n\t\t\t_normalizedGestureX.value = interpolate(\n\t\t\t\tevent.translationX,\n\t\t\t\t[-width, width],\n\t\t\t\t[-1, 1],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\t\t\t_normalizedGestureY.value = interpolate(\n\t\t\t\tevent.translationY,\n\t\t\t\t[-height, height],\n\t\t\t\t[-1, 1],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\tif (directions.includes(\"bidirectional\")) {\n\t\t\t\tconst distance = Math.sqrt(\n\t\t\t\t\tevent.translationX ** 2 + event.translationY ** 2,\n\t\t\t\t);\n\t\t\t\tgestureProgress = mapGestureToProgress(distance, width);\n\t\t\t} else {\n\t\t\t\tlet maxProgress = 0;\n\n\t\t\t\tconst allowedDown = directions.includes(\"vertical\");\n\t\t\t\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\t\t\t\tconst allowedRight = directions.includes(\"horizontal\");\n\t\t\t\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\t\t\t\tif (allowedRight || allowedLeft) {\n\t\t\t\t\tconst absX = Math.abs(event.translationX);\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(absX, width);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tif (allowedUp || allowedDown) {\n\t\t\t\t\tconst absY = Math.abs(event.translationY);\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(absY, height);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tgestureProgress = maxProgress;\n\t\t\t}\n\n\t\t\tprogress.value = 1 - gestureProgress;\n\t\t})\n\t\t.onEnd((event) => {\n\t\t\t\"worklet\";\n\t\t\tconst { translationX, translationY, velocityX, velocityY } = event;\n\n\t\t\tlet shouldDismiss = false;\n\t\t\tconst dismissThreshold = 0.5;\n\n\t\t\tif (directions.includes(\"bidirectional\")) {\n\t\t\t\tconst finalX = Math.abs(\n\t\t\t\t\ttranslationX + velocityX * gestureVelocityImpact,\n\t\t\t\t);\n\t\t\t\tconst finalY = Math.abs(\n\t\t\t\t\ttranslationY + velocityY * gestureVelocityImpact,\n\t\t\t\t);\n\t\t\t\tconst finalDistance = Math.sqrt(finalX ** 2 + finalY ** 2);\n\t\t\t\tshouldDismiss = finalDistance > width * dismissThreshold;\n\t\t\t} else {\n\t\t\t\tconst allowedDown = directions.includes(\"vertical\");\n\t\t\t\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\t\t\t\tconst allowedRight = directions.includes(\"horizontal\");\n\t\t\t\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\t\t\t\tif (\n\t\t\t\t\tallowedRight &&\n\t\t\t\t\ttranslationX + velocityX * gestureVelocityImpact >\n\t\t\t\t\t\twidth * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tshouldDismiss = true;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedLeft &&\n\t\t\t\t\t-translationX - velocityX * gestureVelocityImpact >\n\t\t\t\t\t\twidth * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tshouldDismiss = true;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedDown &&\n\t\t\t\t\ttranslationY + velocityY * gestureVelocityImpact >\n\t\t\t\t\t\theight * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tshouldDismiss = true;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedUp &&\n\t\t\t\t\t-translationY - velocityY * gestureVelocityImpact >\n\t\t\t\t\t\theight * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tshouldDismiss = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalProgress = shouldDismiss ? 0 : 1;\n\t\t\tconst spec = shouldDismiss ? transitionSpec?.close : transitionSpec?.open;\n\n\t\t\tconst onFinish = shouldDismiss\n\t\t\t\t? (isFinished?: boolean) => {\n\t\t\t\t\t\t\"worklet\";\n\t\t\t\t\t\tif (isFinished) runOnJS(goBack)();\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\t\tprogress.value = animate(finalProgress, spec, onFinish);\n\n\t\t\t_translateX.value = animate(0, spec);\n\t\t\t_translateY.value = animate(0, spec);\n\t\t\t_normalizedGestureX.value = animate(0, spec);\n\t\t\t_normalizedGestureY.value = animate(0, spec);\n\t\t});\n\n\tconst criteria = createGestureActivationCriteria({\n\t\tgestureDirection,\n\t\tgestureResponseDistance,\n\t});\n\n\tif (criteria?.activeOffsetX) {\n\t\tpanGesture.activeOffsetX(criteria.activeOffsetX);\n\t}\n\tif (criteria?.activeOffsetY) {\n\t\tpanGesture.activeOffsetY(criteria.activeOffsetY);\n\t}\n\tif (criteria?.failOffsetX) {\n\t\tpanGesture.failOffsetX(criteria.failOffsetX);\n\t}\n\tif (criteria?.failOffsetY) {\n\t\tpanGesture.failOffsetY(criteria.failOffsetY);\n\t}\n\n\tpanGesture.enableTrackpadTwoFingerGesture(true);\n\tconst nativeGesture = Gesture.Native().shouldCancelWhenOutside(false);\n\n\treturn Gesture.Race(panGesture, nativeGesture);\n};\n","import type { TransitionConfig } from \"../../types\";\n\ninterface GestureActivationOptions {\n\tgestureDirection:\n\t\t| TransitionConfig[\"gestureDirection\"]\n\t\t| Array<TransitionConfig[\"gestureDirection\"]>;\n\tgestureResponseDistance: number;\n}\n\n/**\n * rngh requires this type instead a number[]. We're returning a num[] which is still correct, this is just to remove the type error.\n */\ntype OffsetErrorTypeBugFix = [start: number, end: number];\n\nexport const createGestureActivationCriteria = ({\n\tgestureDirection,\n\tgestureResponseDistance,\n}: GestureActivationOptions) => {\n\tconst directions = Array.isArray(gestureDirection)\n\t\t? gestureDirection\n\t\t: [gestureDirection];\n\n\tif (directions.includes(\"bidirectional\")) {\n\t\treturn {\n\t\t\tactiveOffsetX: [\n\t\t\t\t-gestureResponseDistance,\n\t\t\t\tgestureResponseDistance,\n\t\t\t] as OffsetErrorTypeBugFix,\n\t\t\tactiveOffsetY: [\n\t\t\t\t-gestureResponseDistance,\n\t\t\t\tgestureResponseDistance,\n\t\t\t] as OffsetErrorTypeBugFix,\n\t\t};\n\t}\n\n\tconst allowedDown = directions.includes(\"vertical\");\n\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\tconst allowedRight = directions.includes(\"horizontal\");\n\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\tconst toleranceX = 15;\n\tconst toleranceY = 20;\n\tconst dist = gestureResponseDistance;\n\n\tconst result: {\n\t\tactiveOffsetX?: number | [number, number];\n\t\tfailOffsetX?: number | OffsetErrorTypeBugFix;\n\t\tactiveOffsetY?: number | [number, number];\n\t\tfailOffsetY?: number | OffsetErrorTypeBugFix;\n\t} = {};\n\n\tconst hasHorizontal = allowedLeft || allowedRight;\n\tif (hasHorizontal) {\n\t\tif (allowedLeft && allowedRight) {\n\t\t\tresult.activeOffsetX = [-dist, dist];\n\t\t} else if (allowedLeft) {\n\t\t\tresult.activeOffsetX = -dist;\n\t\t} else if (allowedRight) {\n\t\t\tresult.activeOffsetX = dist;\n\t\t}\n\n\t\tif (allowedRight && !allowedLeft) {\n\t\t\tresult.failOffsetX = -dist;\n\t\t} else if (allowedLeft && !allowedRight) {\n\t\t\tresult.failOffsetX = dist;\n\t\t}\n\t} else {\n\t\tresult.failOffsetX = [-toleranceX, toleranceX] as OffsetErrorTypeBugFix;\n\t}\n\n\tconst hasVertical = allowedUp || allowedDown;\n\tif (hasVertical) {\n\t\tif (allowedUp && allowedDown) {\n\t\t\tresult.activeOffsetY = [-dist, dist];\n\t\t} else if (allowedUp) {\n\t\t\tresult.activeOffsetY = -dist;\n\t\t} else if (allowedDown) {\n\t\t\tresult.activeOffsetY = dist;\n\t\t}\n\n\t\tif (allowedDown && !allowedUp) {\n\t\t\tresult.failOffsetY = -dist;\n\t\t} else if (allowedUp && !allowedDown) {\n\t\t\tresult.failOffsetY = dist;\n\t\t}\n\t} else {\n\t\tresult.failOffsetY = [-toleranceY, toleranceY] as OffsetErrorTypeBugFix;\n\t}\n\n\treturn result;\n};\n","/**\n * Utility function to map raw gesture translation to a progress value.\n */\nexport const mapGestureToProgress = (\n\ttranslation: number,\n\tdimension: number,\n) => {\n\t\"worklet\";\n\tconst rawProgress = translation / dimension;\n\treturn Math.max(0, Math.min(1, rawProgress));\n};\n","import type { TransitionInterpolatedStyle } from \"../types\";\n\nexport const noopinterpolator = (): TransitionInterpolatedStyle => {\n\t\"worklet\";\n\treturn {\n\t\tcontentStyle: {},\n\t\toverlayStyle: {},\n\t};\n};\n","import { useRoute } from \"@react-navigation/native\";\n\nexport const useKey = () => useRoute().key;\n","import type { ParamListBase, RouteProp } from \"@react-navigation/native\";\nimport { RouteStore } from \"../store\";\nimport type {\n\tAny,\n\tBeforeRemoveEvent,\n\tFocusEvent,\n\tTransitionConfig,\n\tTransitionListeners,\n} from \"../types\";\n\nexport interface TransitionEventHandlersProps extends TransitionConfig {\n\tnavigation: Any;\n\troute: RouteProp<ParamListBase, string>;\n}\n\nexport const createConfig = ({\n\tnavigation: reactNavigation,\n\troute,\n\t...config\n}: TransitionEventHandlersProps): TransitionListeners => {\n\treturn {\n\t\tfocus: (e: FocusEvent) => {\n\t\t\tconst navigatorKey = reactNavigation.getState().key;\n\n\t\t\tRouteStore.updateRoute(e.target, {\n\t\t\t\tid: e.target,\n\t\t\t\tname: route.name,\n\t\t\t\tstatus: 1,\n\t\t\t\tclosing: false,\n\t\t\t\tnavigatorKey,\n\t\t\t\t...config,\n\t\t\t});\n\t\t},\n\t\tbeforeRemove: (e: BeforeRemoveEvent) => {\n\t\t\tconst navigatorState = reactNavigation.getState();\n\n\t\t\tconst isLastScreenInStack =\n\t\t\t\tnavigatorState.routes.length === 1 &&\n\t\t\t\tnavigatorState.routes[0].key === e.target;\n\n\t\t\tif (isLastScreenInStack) {\n\t\t\t\t/**\n\t\t\t\t * Without this guard, b/index would have a noticeable delay in it's back event. Then we will see the exit animation from b (layout).\n\t\t\t\t *\n\t\t\t\t * Since this is the last screen, we can assume the previous route is the parent. We'll let the parent handle it's exit animation instead.\n\t\t\t\t */\n\t\t\t\tRouteStore.removeRoute(e.target);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\tconst handleFinish = (finished?: boolean) => {\n\t\t\t\tif (!finished) return;\n\t\t\t\tif (reactNavigation.canGoBack()) {\n\t\t\t\t\treactNavigation.dispatch(e.data?.action);\n\t\t\t\t\tRouteStore.removeRoute(e.target);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tRouteStore.updateRoute(e.target, {\n\t\t\t\tstatus: 0,\n\t\t\t\tclosing: true,\n\t\t\t\tonAnimationFinish: handleFinish,\n\t\t\t});\n\t\t},\n\t} as TransitionListeners;\n};\n","import type React from \"react\";\nimport { type ComponentType, forwardRef, memo } from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n\ttype AnimatedProps,\n\tuseAnimatedStyle,\n} from \"react-native-reanimated\";\nimport type { Any } from \"@/types\";\nimport { _useScreenAnimation } from \"../hooks/use-screen-animation\";\nimport { useSkipFirstFrame } from \"../hooks/use-skip-first-frame\";\n\nexport function createTransitionComponent<P extends object>(\n\tWrapped: ComponentType<P>,\n) {\n\tconst AnimatedComponent = Animated.createAnimatedComponent(Wrapped);\n\n\ttype Props = AnimatedProps<P>;\n\n\tconst Inner = forwardRef<React.ComponentRef<typeof AnimatedComponent>, Props>(\n\t\t(props, ref) => {\n\t\t\tconst { children, style, ...rest } = props as Any;\n\n\t\t\tconst {\n\t\t\t\tscreenStyleInterpolator,\n\t\t\t\tgestureDetector,\n\t\t\t\t...screenInterpolationProps\n\t\t\t} = _useScreenAnimation();\n\n\t\t\tconst screenContainerStyle = useAnimatedStyle(() => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn (\n\t\t\t\t\tscreenStyleInterpolator(screenInterpolationProps).contentStyle || {}\n\t\t\t\t);\n\t\t\t});\n\t\t\tconst overlayStyle = useAnimatedStyle(() => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn (\n\t\t\t\t\tscreenStyleInterpolator(screenInterpolationProps).overlayStyle || {}\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tconst { style: flickerFixStyle } = useSkipFirstFrame();\n\n\t\t\treturn (\n\t\t\t\t<Animated.View style={[{ flex: 1 }, flickerFixStyle]}>\n\t\t\t\t\t<GestureDetector gesture={gestureDetector}>\n\t\t\t\t\t\t<AnimatedComponent\n\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t{ flex: 1, position: \"relative\" },\n\t\t\t\t\t\t\t\tscreenContainerStyle,\n\t\t\t\t\t\t\t\tstyle,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</AnimatedComponent>\n\t\t\t\t\t</GestureDetector>\n\t\t\t\t\t<Animated.View\n\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\tStyleSheet.absoluteFillObject,\n\t\t\t\t\t\t\toverlayStyle,\n\t\t\t\t\t\t\t{ zIndex: 10000 },\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t/>\n\t\t\t\t</Animated.View>\n\t\t\t);\n\t\t},\n\t);\n\n\tInner.displayName = `Transition(${Wrapped.displayName || Wrapped.name || \"Component\"})`;\n\n\treturn memo(Inner) as React.MemoExoticComponent<\n\t\tReact.ForwardRefExoticComponent<\n\t\t\tAnimatedProps<P> & React.RefAttributes<React.ComponentRef<typeof Wrapped>>\n\t\t>\n\t>;\n}\n","import { useEffect } from \"react\";\nimport { useAnimatedStyle, useSharedValue } from \"react-native-reanimated\";\n\n/**\n * This hook helps mitigate a race condition between the JS and UI thread where styles are not applied immediately.\n * By skipping one frame before rendering, it ensures styles are properly applied, removing a flicker effect.\n *\n * Related issue: https://github.com/software-mansion/react-native-reanimated/issues/4446\n */\nexport const useSkipFirstFrame = () => {\n\tconst opacity = useSharedValue(0);\n\tconst style = useAnimatedStyle(() => {\n\t\t\"worklet\";\n\t\treturn {\n\t\t\topacity: opacity.value,\n\t\t};\n\t});\n\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\topacity.value = 1;\n\t\t});\n\t}, [opacity]);\n\n\treturn { style };\n};\n","/**\n * Helper function to return the default screen options in order for the screen animations to work properly.\n */\nexport const defaultScreenOptions = () =>\n\t({\n\t\tpresentation: \"containedTransparentModal\",\n\t\theaderShown: false,\n\t\tanimation: \"none\",\n\t}) as const;\n"],"mappings":"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","names":["interpolate","runOnJS","interpolate","runOnJS","useAnimatedStyle","useSharedValue","useAnimatedStyle"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/create-transition-aware-component.tsx","../src/components/transition-gesture-handler-provider.tsx","../src/contexts/gesture.ts","../src/hooks/use-build-gestures.tsx","../src/configs/specs.ts","../src/animation-engine.ts","../src/store/utils/create-vanilla-store.ts","../src/store/utils/handle-screen-dismiss.tsx","../src/store/utils/remove-screen.tsx","../src/store/utils/should-skip-prevent-default.tsx","../src/store/utils/update-screen.tsx","../src/store/index.ts","../src/utils/animate.ts","../src/utils/create-config.ts","../src/utils/default-screen-options.ts","../src/utils/noop-interpolator.ts","../src/utils/gesture/apply-gesture-activation-criteria.ts","../src/utils/gesture/map-gesture-to-progress.ts","../src/hooks/use-key.tsx","../src/hooks/use-screen-animation.tsx","../src/hooks/use-skip-first-frame.tsx","../src/components/create-transition-aware-scrollable.tsx","../src/hooks/use-scroll-progress.tsx","../src/configs/presets.ts"],"sourcesContent":["import { FlatList, Pressable, ScrollView, View } from \"react-native\";\nimport { createTransitionAwareComponent } from \"./components/create-transition-aware-component\";\nimport { createTransitionAwareScrollable } from \"./components/create-transition-aware-scrollable\";\nimport { presets, specs } from \"./configs\";\nimport { useScreenAnimation } from \"./hooks/use-screen-animation\";\nimport { createConfig, createScreenConfig } from \"./utils/create-config\";\nimport { defaultScreenOptions } from \"./utils/default-screen-options\";\n\nexport default {\n\tView: createTransitionAwareComponent(View),\n\tPressable: createTransitionAwareComponent(Pressable),\n\tScrollView: createTransitionAwareScrollable(ScrollView),\n\tFlatList: createTransitionAwareScrollable(FlatList),\n\tcreateConfig,\n\tcreateScreenConfig,\n\tdefaultScreenOptions,\n\tpresets,\n\tspecs,\n\t/**\n\t * Create a transition aware component\n\t */\n\tcreateTransitionAwareComponent,\n\t/**\n\t * Create a transition aware scrollable component\n\t */\n\tcreateTransitionAwareScrollable,\n};\n\nexport { useScreenAnimation };\n","import type React from \"react\";\nimport { type ComponentType, forwardRef, memo } from \"react\";\nimport { StyleSheet } from \"react-native\";\nimport Animated, {\n type AnimatedProps,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\nimport { TransitionGestureHandlerProvider } from \"@/components/transition-gesture-handler-provider\";\nimport { _useScreenAnimation } from \"../hooks/use-screen-animation\";\nimport { useSkipFirstFrame } from \"../hooks/use-skip-first-frame\";\nimport type { Any } from \"../types\";\n\nexport function createTransitionAwareComponent<P extends object>(\n\tWrapped: ComponentType<P>,\n) {\n\tconst AnimatedComponent = Animated.createAnimatedComponent(Wrapped);\n\n\ttype Props = AnimatedProps<P>;\n\n\tconst Inner = forwardRef<React.ComponentRef<typeof AnimatedComponent>, Props>(\n\t\t(props, ref) => {\n\t\t\tconst { children, style, ...rest } = props as Any;\n\n\t\t\tconst { screenStyleInterpolator, ...screenInterpolationProps } =\n\t\t\t\t_useScreenAnimation();\n\n\t\t\tconst screenContainerStyle = useAnimatedStyle(() => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn (\n\t\t\t\t\tscreenStyleInterpolator(screenInterpolationProps).contentStyle || {}\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tconst overlayStyle = useAnimatedStyle(() => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn (\n\t\t\t\t\tscreenStyleInterpolator(screenInterpolationProps).overlayStyle || {}\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tconst { style: flickerFixStyle } = useSkipFirstFrame();\n\n\t\t\treturn (\n\t\t\t\t<TransitionGestureHandlerProvider>\n\t\t\t\t\t<Animated.View style={[{ flex: 1 }, flickerFixStyle]}>\n\t\t\t\t\t\t<Animated.View\n\t\t\t\t\t\t\tstyle={[StyleSheet.absoluteFillObject, overlayStyle]}\n\t\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AnimatedComponent\n\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tstyle={[\n\t\t\t\t\t\t\t\t{ flex: 1, position: \"relative\" },\n\t\t\t\t\t\t\t\tscreenContainerStyle,\n\t\t\t\t\t\t\t\tstyle,\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</AnimatedComponent>\n\t\t\t\t\t</Animated.View>\n\t\t\t\t</TransitionGestureHandlerProvider>\n\t\t\t);\n\t\t},\n\t);\n\n\tInner.displayName = `Transition(${Wrapped.displayName || Wrapped.name || \"Component\"})`;\n\n\treturn memo(Inner) as React.MemoExoticComponent<\n\t\tReact.ForwardRefExoticComponent<\n\t\t\tAnimatedProps<P> & React.RefAttributes<React.ComponentRef<typeof Wrapped>>\n\t\t>\n\t>;\n}\n","import { useMemo } from \"react\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport { useSharedValue } from \"react-native-reanimated\";\nimport {\n\tGestureContext,\n\ttype GestureContextType,\n\ttype ScrollProgress,\n} from \"../contexts/gesture\";\nimport { useBuildGestures } from \"../hooks/use-build-gestures\";\n\ntype TransitionGestureHandlerProviderProps = {\n\tchildren: React.ReactNode;\n};\n\nexport const TransitionGestureHandlerProvider = ({\n\tchildren,\n}: TransitionGestureHandlerProviderProps) => {\n\tconst scrollProgress = useSharedValue<ScrollProgress>({\n\t\tx: 0,\n\t\ty: 0,\n\t\tcontentHeight: 0,\n\t\tcontentWidth: 0,\n\t\tlayoutHeight: 0,\n\t\tlayoutWidth: 0,\n\t});\n\tconst { panGesture, nativeGesture } = useBuildGestures({\n\t\tscrollProgress,\n\t});\n\tconst value = useMemo(() => {\n\t\treturn {\n\t\t\tpanGesture,\n\t\t\tscrollProgress,\n\t\t\tnativeGesture,\n\t\t};\n\t}, [panGesture, scrollProgress, nativeGesture]) satisfies GestureContextType;\n\n\treturn (\n\t\t<GestureContext.Provider value={value}>\n\t\t\t<GestureDetector gesture={panGesture}>{children}</GestureDetector>\n\t\t</GestureContext.Provider>\n\t);\n};\n","import { createContext, useContext } from \"react\";\nimport { Gesture, type GestureType } from \"react-native-gesture-handler\";\nimport { type SharedValue, useSharedValue } from \"react-native-reanimated\";\n\nexport type ScrollProgress = {\n\tx: number;\n\ty: number;\n\tcontentHeight: number;\n\tcontentWidth: number;\n\tlayoutHeight: number;\n\tlayoutWidth: number;\n};\n\nexport interface GestureContextType {\n\tpanGesture: GestureType;\n\tnativeGesture: GestureType;\n\tscrollProgress: SharedValue<ScrollProgress>;\n\tisPlaceholder?: boolean;\n}\n\nexport const GestureContext = createContext<GestureContextType | undefined>(\n\tundefined,\n);\n\nexport const useGestureContext = () => {\n\tconst context = useContext(GestureContext);\n\tconst scrollProgressFallback = useSharedValue<ScrollProgress>({\n\t\tx: 0,\n\t\ty: 0,\n\t\tcontentHeight: 0,\n\t\tcontentWidth: 0,\n\t\tlayoutHeight: 0,\n\t\tlayoutWidth: 0,\n\t});\n\n\tif (!context) {\n\t\treturn {\n\t\t\tpanGesture: Gesture.Pan(),\n\t\t\tnativeGesture: Gesture.Native(),\n\t\t\tscrollProgress: scrollProgressFallback,\n\t\t\tisPlaceholder: true,\n\t\t};\n\t}\n\n\treturn context;\n};\n","import { useNavigation } from \"@react-navigation/native\";\nimport { useCallback, useMemo } from \"react\";\nimport { useWindowDimensions } from \"react-native\";\nimport {\n\tGesture,\n\ttype GestureStateChangeEvent,\n\ttype GestureTouchEvent,\n\ttype GestureUpdateEvent,\n\ttype PanGestureHandlerEventPayload,\n} from \"react-native-gesture-handler\";\nimport type { GestureStateManagerType } from \"react-native-gesture-handler/lib/typescript/handlers/gestures/gestureStateManager\";\nimport {\n\tinterpolate,\n\trunOnJS,\n\ttype SharedValue,\n\tuseSharedValue,\n} from \"react-native-reanimated\";\nimport { DefaultSpec } from \"@/configs/specs\";\nimport type { ScrollProgress } from \"@/contexts/gesture\";\nimport { animationValues } from \"../animation-engine\";\nimport { ScreenStore } from \"../store\";\nimport { animate } from \"../utils\";\nimport { applyGestureActivationCriteria } from \"../utils/gesture/apply-gesture-activation-criteria\";\nimport { mapGestureToProgress } from \"../utils/gesture/map-gesture-to-progress\";\nimport { useKey } from \"./use-key\";\n\nconst GESTURE_VELOCITY_IMPACT = 0.3;\nconst DEFAULT_GESTURE_RESPONSE_DISTANCE = 50;\nconst DEFAULT_GESTURE_DIRECTION = \"horizontal\";\nconst DEFAULT_GESTURE_ENABLED = false;\n\ninterface BuildGesturesHookProps {\n\tscrollProgress: SharedValue<ScrollProgress>;\n}\n\nexport const useBuildGestures = ({\n\tscrollProgress,\n}: BuildGesturesHookProps) => {\n\tconst key = useKey();\n\tconst dimensions = useWindowDimensions();\n\tconst navigation = useNavigation();\n\tconst currentScreen = ScreenStore.use(\n\t\tuseCallback((state) => state.screens[key], [key]),\n\t);\n\tconst handleDismiss = useCallback(\n\t\t(screenBeingDismissed: string) => {\n\t\t\tScreenStore.handleScreenDismiss(screenBeingDismissed, navigation);\n\t\t},\n\t\t[navigation],\n\t);\n\tconst initialTouch = useSharedValue({\n\t\tx: 0,\n\t\ty: 0,\n\t});\n\n\tconst translateX = animationValues.gestureX[key];\n\tconst translateY = animationValues.gestureY[key];\n\tconst normalizedGestureX = animationValues.normalizedGestureX[key];\n\tconst normalizedGestureY = animationValues.normalizedGestureY[key];\n\tconst isDragging = animationValues.gestureDragging[key];\n\tconst isDismissing = animationValues.isDismissing[key];\n\tconst progress = animationValues.screenProgress[key] || 0;\n\n\tconst {\n\t\tgestureDirection = DEFAULT_GESTURE_DIRECTION,\n\t\tgestureEnabled = DEFAULT_GESTURE_ENABLED,\n\t\ttransitionSpec = {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\tgestureVelocityImpact = GESTURE_VELOCITY_IMPACT,\n\t\tgestureResponseDistance = DEFAULT_GESTURE_RESPONSE_DISTANCE,\n\t} = currentScreen ?? {};\n\n\tconst directions = Array.isArray(gestureDirection)\n\t\t? gestureDirection\n\t\t: [gestureDirection];\n\n\tconst nativeGesture = Gesture.Native();\n\n\tconst onTouchesDown = useCallback(\n\t\t(e: GestureTouchEvent) => {\n\t\t\t\"worklet\";\n\t\t\tconst firstTouch = e.changedTouches[0];\n\t\t\tinitialTouch.value = { x: firstTouch.x, y: firstTouch.y };\n\t\t},\n\t\t[initialTouch],\n\t);\n\n\tconst onTouchesMove = useCallback(\n\t\t(e: GestureTouchEvent, manager: GestureStateManagerType) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst touch = e.changedTouches[0];\n\t\t\tconst deltaX = touch.x - initialTouch.value.x;\n\t\t\tconst deltaY = touch.y - initialTouch.value.y;\n\n\t\t\tconst isVerticalSwipe = Math.abs(deltaY) > Math.abs(deltaX);\n\t\t\tconst isHorizontalSwipe = Math.abs(deltaX) > Math.abs(deltaY);\n\n\t\t\tconst isSwipingDown = isVerticalSwipe && deltaY > 0;\n\t\t\tconst isSwipingUp = isVerticalSwipe && deltaY < 0;\n\t\t\tconst isSwipingRight = isHorizontalSwipe && deltaX > 0;\n\t\t\tconst isSwipingLeft = isHorizontalSwipe && deltaX < 0;\n\n\t\t\tconst minMovement = 5;\n\t\t\tconst hasEnoughMovement =\n\t\t\t\tMath.abs(deltaX) > minMovement || Math.abs(deltaY) > minMovement;\n\n\t\t\tif (!hasEnoughMovement) return;\n\n\t\t\tif (isDragging.value) {\n\t\t\t\tmanager.activate();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet shouldActivate = false;\n\n\t\t\tfor (const direction of directions) {\n\t\t\t\tswitch (direction) {\n\t\t\t\t\tcase \"vertical\":\n\t\t\t\t\t\tif (isSwipingDown) {\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.y <= 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"vertical-inverted\":\n\t\t\t\t\t\tif (isSwipingUp) {\n\t\t\t\t\t\t\tconst maxScrollableY =\n\t\t\t\t\t\t\t\tscrollProgress.value.contentHeight -\n\t\t\t\t\t\t\t\tscrollProgress.value.layoutHeight;\n\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.y >= maxScrollableY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"horizontal\":\n\t\t\t\t\t\tif (isSwipingRight) {\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.x <= 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"horizontal-inverted\":\n\t\t\t\t\t\tif (isSwipingLeft) {\n\t\t\t\t\t\t\tconst maxProgress =\n\t\t\t\t\t\t\t\tscrollProgress.value.contentWidth -\n\t\t\t\t\t\t\t\tscrollProgress.value.layoutWidth;\n\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.x >= maxProgress;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bidirectional\":\n\t\t\t\t\t\tif (isSwipingDown) {\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.y <= 0;\n\t\t\t\t\t\t} else if (isSwipingUp) {\n\t\t\t\t\t\t\tshouldActivate = scrollProgress.value.y <= 0;\n\t\t\t\t\t\t} else if (isSwipingRight || isSwipingLeft) {\n\t\t\t\t\t\t\tshouldActivate = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (shouldActivate) break;\n\t\t\t}\n\n\t\t\tif ((shouldActivate || isDragging.value) && !isDismissing.value) {\n\t\t\t\tmanager.activate();\n\t\t\t} else {\n\t\t\t\tmanager.fail();\n\t\t\t}\n\t\t},\n\t\t[initialTouch, directions, scrollProgress, isDragging, isDismissing],\n\t);\n\n\tconst onStart = useCallback(() => {\n\t\t\"worklet\";\n\t\tisDragging.value = 1;\n\t\tisDismissing.value = 0;\n\t}, [isDragging, isDismissing]);\n\n\tconst onUpdate = useCallback(\n\t\t(event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {\n\t\t\t\"worklet\";\n\n\t\t\tlet gestureProgress = 0;\n\n\t\t\ttranslateX.value = event.translationX;\n\t\t\ttranslateY.value = event.translationY;\n\t\t\tnormalizedGestureX.value = interpolate(\n\t\t\t\tevent.translationX,\n\t\t\t\t[-dimensions.width, dimensions.width],\n\t\t\t\t[-1, 1],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\t\t\tnormalizedGestureY.value = interpolate(\n\t\t\t\tevent.translationY,\n\t\t\t\t[-dimensions.height, dimensions.height],\n\t\t\t\t[-1, 1],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\tif (directions.includes(\"bidirectional\")) {\n\t\t\t\tconst distance = Math.sqrt(\n\t\t\t\t\tevent.translationX ** 2 + event.translationY ** 2,\n\t\t\t\t);\n\t\t\t\tgestureProgress = mapGestureToProgress(distance, dimensions.width);\n\t\t\t} else {\n\t\t\t\tlet maxProgress = 0;\n\n\t\t\t\tconst allowedDown = directions.includes(\"vertical\");\n\t\t\t\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\t\t\t\tconst allowedRight = directions.includes(\"horizontal\");\n\t\t\t\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\t\t\t\tif (allowedRight && event.translationX > 0) {\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(\n\t\t\t\t\t\tevent.translationX,\n\t\t\t\t\t\tdimensions.width,\n\t\t\t\t\t);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tif (allowedLeft && event.translationX < 0) {\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(\n\t\t\t\t\t\t-event.translationX,\n\t\t\t\t\t\tdimensions.width,\n\t\t\t\t\t);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tif (allowedDown && event.translationY > 0) {\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(\n\t\t\t\t\t\tevent.translationY,\n\t\t\t\t\t\tdimensions.height,\n\t\t\t\t\t);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tif (allowedUp && event.translationY < 0) {\n\t\t\t\t\tconst currentProgress = mapGestureToProgress(\n\t\t\t\t\t\t-event.translationY,\n\t\t\t\t\t\tdimensions.height,\n\t\t\t\t\t);\n\t\t\t\t\tmaxProgress = Math.max(maxProgress, currentProgress);\n\t\t\t\t}\n\n\t\t\t\tgestureProgress = maxProgress;\n\t\t\t}\n\n\t\t\tprogress.value = 1 - gestureProgress;\n\t\t},\n\t\t[\n\t\t\tdimensions,\n\t\t\tdirections,\n\t\t\ttranslateX,\n\t\t\ttranslateY,\n\t\t\tnormalizedGestureX,\n\t\t\tnormalizedGestureY,\n\t\t\tprogress,\n\t\t],\n\t);\n\n\tconst onEnd = useCallback(\n\t\t(event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst { translationX, translationY, velocityX, velocityY } = event;\n\n\t\t\tconst dismissThreshold = 0.5;\n\n\t\t\tif (directions.includes(\"bidirectional\")) {\n\t\t\t\tconst finalX = Math.abs(\n\t\t\t\t\ttranslationX + velocityX * gestureVelocityImpact,\n\t\t\t\t);\n\t\t\t\tconst finalY = Math.abs(\n\t\t\t\t\ttranslationY + velocityY * gestureVelocityImpact,\n\t\t\t\t);\n\t\t\t\tconst finalDistance = Math.sqrt(finalX ** 2 + finalY ** 2);\n\t\t\t\tisDismissing.value = Number(\n\t\t\t\t\tfinalDistance > dimensions.width * dismissThreshold,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst allowedDown = directions.includes(\"vertical\");\n\t\t\t\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\t\t\t\tconst allowedRight = directions.includes(\"horizontal\");\n\t\t\t\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\t\t\t\tif (\n\t\t\t\t\tallowedRight &&\n\t\t\t\t\ttranslationX + velocityX * gestureVelocityImpact >\n\t\t\t\t\t\tdimensions.width * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tisDismissing.value = 1;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedLeft &&\n\t\t\t\t\t-translationX - velocityX * gestureVelocityImpact >\n\t\t\t\t\t\tdimensions.width * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tisDismissing.value = 1;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedDown &&\n\t\t\t\t\ttranslationY + velocityY * gestureVelocityImpact >\n\t\t\t\t\t\tdimensions.height * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tisDismissing.value = 1;\n\t\t\t\t} else if (\n\t\t\t\t\tallowedUp &&\n\t\t\t\t\t-translationY - velocityY * gestureVelocityImpact >\n\t\t\t\t\t\tdimensions.height * dismissThreshold\n\t\t\t\t) {\n\t\t\t\t\tisDismissing.value = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst finalProgress = isDismissing.value ? 0 : 1;\n\t\t\tconst spec = isDismissing.value\n\t\t\t\t? transitionSpec?.close\n\t\t\t\t: transitionSpec?.open;\n\n\t\t\tconst onFinish = isDismissing.value\n\t\t\t\t? (isFinished?: boolean) => {\n\t\t\t\t\t\t\"worklet\";\n\t\t\t\t\t\tif (isFinished) runOnJS(handleDismiss)(currentScreen?.id);\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\t\tprogress.value = animate(finalProgress, spec, onFinish);\n\t\t\ttranslateX.value = animate(0, spec);\n\t\t\ttranslateY.value = animate(0, spec);\n\t\t\tnormalizedGestureX.value = animate(0, spec);\n\t\t\tnormalizedGestureY.value = animate(0, spec);\n\t\t\tisDragging.value = 0;\n\t\t},\n\t\t[\n\t\t\tdimensions,\n\t\t\tdirections,\n\t\t\ttranslateX,\n\t\t\ttranslateY,\n\t\t\tnormalizedGestureX,\n\t\t\tnormalizedGestureY,\n\t\t\tprogress,\n\t\t\thandleDismiss,\n\t\t\tcurrentScreen?.id,\n\t\t\ttransitionSpec?.close,\n\t\t\ttransitionSpec?.open,\n\t\t\tgestureVelocityImpact,\n\t\t\tisDragging,\n\t\t\tisDismissing,\n\t\t],\n\t);\n\n\tconst panGesture = useMemo(\n\t\t() =>\n\t\t\tGesture.Pan()\n\t\t\t\t.enabled(gestureEnabled)\n\t\t\t\t.manualActivation(true)\n\t\t\t\t.onTouchesDown(onTouchesDown)\n\t\t\t\t.onTouchesMove(onTouchesMove)\n\t\t\t\t.onStart(onStart)\n\t\t\t\t.onUpdate(onUpdate)\n\t\t\t\t.onEnd(onEnd)\n\t\t\t\t.blocksExternalGesture(nativeGesture),\n\t\t[\n\t\t\tgestureEnabled,\n\t\t\tnativeGesture,\n\t\t\tonTouchesDown,\n\t\t\tonTouchesMove,\n\t\t\tonStart,\n\t\t\tonUpdate,\n\t\t\tonEnd,\n\t\t],\n\t);\n\n\tapplyGestureActivationCriteria({\n\t\tgestureDirection,\n\t\tgestureResponseDistance,\n\t\tpanGesture,\n\t});\n\n\treturn { panGesture, nativeGesture };\n};\n","import type { WithSpringConfig } from \"react-native-reanimated\";\n\nexport const DefaultSpec: WithSpringConfig = {\n\tstiffness: 1000,\n\tdamping: 500,\n\tmass: 3,\n\tovershootClamping: true,\n\trestSpeedThreshold: 0.01,\n};\n","import {\n\tcancelAnimation,\n\tmakeMutable,\n\trunOnJS,\n\ttype SharedValue,\n} from \"react-native-reanimated\";\n\nimport { ScreenStore } from \"./store/index\";\nimport type { ScreenState } from \"./types\";\nimport { animate } from \"./utils/animate\";\n\ntype ScreenKey = string;\n\nexport const animationValues: Record<\n\tstring,\n\tRecord<ScreenKey, SharedValue<number>>\n> = {\n\tscreenProgress: {},\n\tgestureX: {},\n\tgestureY: {},\n\tnormalizedGestureX: {},\n\tnormalizedGestureY: {},\n\tgestureDragging: {},\n\tisDismissing: {},\n};\n\nconst triggerAnimation = (screen: ScreenState) => {\n\t\"worklet\";\n\tconst { id, closing, status, transitionSpec, onAnimationFinish } = screen;\n\n\tconst progressValue = animationValues.screenProgress[id];\n\n\tif (!progressValue && __DEV__) {\n\t\tconsole.warn(`Animation values not found for screen: ${id}`);\n\t\treturn;\n\t}\n\n\tconst animationConfig = closing\n\t\t? transitionSpec?.close\n\t\t: transitionSpec?.open;\n\n\tconst targetValue = status || 0;\n\n\tprogressValue.value = animate(targetValue, animationConfig, (finished) => {\n\t\t\"worklet\";\n\t\tif (finished && onAnimationFinish) {\n\t\t\trunOnJS(onAnimationFinish)(true);\n\t\t}\n\t});\n};\n\nScreenStore.use.subscribeWithSelector(\n\t(state) => state.screens,\n\t(currScreens, prevScreens) => {\n\t\tconst currKeys = Object.keys(currScreens);\n\t\tconst prevKeys = Object.keys(prevScreens);\n\n\t\tconst incomingKeys = currKeys.filter((k) => !prevKeys.includes(k));\n\t\tconst removedKeys = prevKeys.filter((k) => !currKeys.includes(k));\n\t\tconst changedKeys = currKeys.filter(\n\t\t\t(k) => currScreens[k] !== prevScreens[k],\n\t\t);\n\n\t\tconst animatableValues = Object.values(animationValues);\n\n\t\tfor (const incomingKey of incomingKeys) {\n\t\t\tfor (const value of animatableValues) {\n\t\t\t\tvalue[incomingKey] = makeMutable(0);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Remove mutable values for removed screens\n\t\t * @see {@link https://docs.swmansion.com/react-native-reanimated/docs/advanced/makeMutable/}\n\t\t */\n\t\tfor (const removedKey of removedKeys) {\n\t\t\tfor (const value of animatableValues) {\n\t\t\t\tcancelAnimation(value[removedKey]);\n\t\t\t\tdelete value[removedKey];\n\t\t\t}\n\t\t}\n\n\t\tfor (const changedKey of changedKeys) {\n\t\t\tconst currentScreen = currScreens[changedKey];\n\t\t\tif (currentScreen) {\n\t\t\t\ttriggerAnimation(currentScreen);\n\t\t\t}\n\t\t}\n\t},\n);\n","import { type Draft, produce } from \"immer\";\nimport { useSyncExternalStore } from \"react\";\n\ntype Listener = () => void;\ntype StateUpdater<T> = (draft: Draft<T>) => void;\n\ntype StoreListener<_, TSelectorOutput> = (\n\tselectedState: TSelectorOutput,\n\tpreviousSelectedState: TSelectorOutput,\n) => void;\n\nexport interface StoreApi<T> {\n\tsetState: (updater: StateUpdater<T>) => void;\n\tgetState: () => T;\n\tsubscribe: (listener: Listener) => () => void;\n\tsubscribeWithSelector: <TSelectorOutput>(\n\t\tselector: (state: T) => TSelectorOutput,\n\t\tlistener: StoreListener<T, TSelectorOutput>,\n\t) => () => void;\n}\n\nexport function createVanillaStore<TState>(initialState: TState) {\n\tlet state: TState = initialState;\n\tconst listeners = new Set<Listener>();\n\n\tconst getState = (): TState => state;\n\n\tconst setState = (updater: StateUpdater<TState>) => {\n\t\tconst nextState = produce(state, updater);\n\n\t\tif (nextState !== state) {\n\t\t\tstate = nextState;\n\t\t\tlisteners.forEach((listener) => listener());\n\t\t}\n\t};\n\n\tconst subscribe = (listener: Listener): (() => void) => {\n\t\tlisteners.add(listener);\n\t\treturn () => listeners.delete(listener);\n\t};\n\n\tconst subscribeWithSelector = <TSelectorOutput>(\n\t\tselector: (state: TState) => TSelectorOutput,\n\t\tlistener: StoreListener<TState, TSelectorOutput>,\n\t) => {\n\t\tlet previousSelectedState = selector(state);\n\n\t\tconst internalListener = () => {\n\t\t\tconst currentSelectedState = selector(getState());\n\n\t\t\tif (!Object.is(previousSelectedState, currentSelectedState)) {\n\t\t\t\tlistener(currentSelectedState, previousSelectedState);\n\t\t\t\tpreviousSelectedState = currentSelectedState;\n\t\t\t}\n\t\t};\n\n\t\tconst unsubscribe = subscribe(internalListener);\n\n\t\tlistener(previousSelectedState, previousSelectedState);\n\n\t\treturn unsubscribe;\n\t};\n\n\tfunction useStore<TSelectorOutput>(\n\t\tselector: (state: TState) => TSelectorOutput,\n\t): TSelectorOutput {\n\t\treturn useSyncExternalStore(subscribe, () => selector(getState()));\n\t}\n\n\tObject.assign(useStore, {\n\t\tsetState,\n\t\tgetState,\n\t\tsubscribe,\n\t\tsubscribeWithSelector,\n\t});\n\n\treturn useStore as typeof useStore & StoreApi<TState>;\n}\n","import { StackActions } from \"@react-navigation/native\";\nimport type { UseNavigation } from \"../../types\";\nimport { ScreenStore } from \"..\";\n\nexport const handleScreenDismiss = (\n\tscreenBeingDismissed: string,\n\tnavigation: UseNavigation,\n) => {\n\tconst { screens } = ScreenStore.use.getState();\n\tconst dismissedScreen = screens[screenBeingDismissed];\n\n\tif (!dismissedScreen) {\n\t\tnavigation.goBack();\n\t\treturn;\n\t}\n\n\tconst childScreens = Object.values(screens).filter(\n\t\t(screen) => screen.parentNavigatorKey === dismissedScreen.navigatorKey,\n\t);\n\n\tif (childScreens.length > 0) {\n\t\tScreenStore.updateScreen(dismissedScreen.id, {\n\t\t\tclosing: true,\n\t\t});\n\n\t\tnavigation.dispatch(StackActions.pop(childScreens.length));\n\t} else {\n\t\tnavigation.goBack();\n\t}\n};\n","import { ScreenStore } from \"..\";\n\nexport const removeScreen = (key: string | undefined) => {\n\tif (!key) return;\n\tScreenStore.use.setState(({ screens, screenKeys }) => {\n\t\tdelete screens[key];\n\n\t\tconst indexToRemove = screenKeys.indexOf(key);\n\t\tif (indexToRemove > -1) {\n\t\t\tscreenKeys.splice(indexToRemove, 1);\n\t\t}\n\t});\n};\n","import type { Any } from \"../../types\";\nimport { ScreenStore } from \"..\";\n\nexport const shouldSkipPreventDefault = (\n\tkey: string | undefined,\n\tnavigatorState: Any,\n) => {\n\tif (!key) return false;\n\n\tconst { screens } = ScreenStore.use.getState();\n\tconst currentScreen = screens[key];\n\n\t// We don't want to block the navigation event when the parent navigator holds the screen transition ( prevents delay in the back event )\n\tconst isLastScreenInStack =\n\t\tnavigatorState.routes.length === 1 && navigatorState.routes[0].key === key;\n\n\t// Child screens should be instantly dismissed when the parent navigator is closing. This prevents transparent modals from lingering. (Only happens when using deeply nested screen transitions)\n\tconst isParentNavigatorExiting = Boolean(\n\t\tcurrentScreen?.parentNavigatorKey &&\n\t\t\tObject.values(screens).some(\n\t\t\t\t(screen) =>\n\t\t\t\t\tscreen.navigatorKey === currentScreen.parentNavigatorKey &&\n\t\t\t\t\tscreen.closing,\n\t\t\t),\n\t);\n\n\treturn isLastScreenInStack || isParentNavigatorExiting;\n};\n","import type { Any } from \"../../types\";\nimport { ScreenStore } from \"..\";\n\nexport const updateScreen = (key: string | undefined, value: Any) => {\n\tif (!key) return;\n\n\tScreenStore.use.setState(({ screenKeys, screens }) => {\n\t\tconst currentScreen = screens[key];\n\n\t\tif (currentScreen) {\n\t\t\tscreens[key] = {\n\t\t\t\t...currentScreen,\n\t\t\t\t...value,\n\t\t\t};\n\t\t} else {\n\t\t\tconst { name = \"\", status = 0, closing = false, ...rest } = value;\n\n\t\t\tconst newIndex = screenKeys.length;\n\n\t\t\tscreens[key] = {\n\t\t\t\tid: key,\n\t\t\t\tindex: newIndex,\n\t\t\t\tname,\n\t\t\t\tstatus,\n\t\t\t\tclosing,\n\t\t\t\t...rest,\n\t\t\t};\n\n\t\t\tscreenKeys.push(key);\n\t\t}\n\t});\n};\n","import type { ScreenStateStore } from \"../types\";\nimport {\n\tcreateVanillaStore,\n\thandleScreenDismiss,\n\tremoveScreen,\n\tshouldSkipPreventDefault,\n\tupdateScreen,\n} from \"./utils\";\n\nconst useScreenStore = createVanillaStore<ScreenStateStore>({\n\tscreens: {},\n\tscreenKeys: [],\n});\n\nexport const ScreenStore = {\n\tuse: useScreenStore,\n\tupdateScreen,\n\tremoveScreen,\n\thandleScreenDismiss,\n\tshouldSkipPreventDefault,\n};\n","import {\n\ttype WithSpringConfig,\n\ttype WithTimingConfig,\n\twithSpring,\n\twithTiming,\n} from \"react-native-reanimated\";\nimport type {\n\tAnimatableValue,\n\tAnimationCallback,\n} from \"react-native-reanimated/lib/typescript/commonTypes\";\n\nexport const animate = <T extends AnimatableValue>(\n\ttoValue: T,\n\tconfig?: WithSpringConfig | WithTimingConfig,\n\tcallback?: AnimationCallback,\n) => {\n\t\"worklet\";\n\tconst isSpring =\n\t\ttypeof config === \"object\" &&\n\t\t!(\"duration\" in config) &&\n\t\t!(\"easing\" in config);\n\n\tif (!isSpring) {\n\t\treturn withTiming(toValue, config, callback);\n\t}\n\n\treturn withSpring(toValue, config, callback);\n};\n","import type { ParamListBase, RouteProp } from \"@react-navigation/native\";\nimport { ScreenStore } from \"../store\";\nimport type {\n\tAny,\n\tBeforeRemoveEvent,\n\tFocusEvent,\n\tTransitionConfig,\n\tTransitionListeners,\n} from \"../types\";\n\nexport interface TransitionEventHandlersProps extends TransitionConfig {\n\tnavigation: Any;\n\troute: RouteProp<ParamListBase, string>;\n}\n\nexport const createConfig = ({\n\tnavigation: reactNavigation,\n\troute,\n\t...config\n}: TransitionEventHandlersProps): TransitionListeners => {\n\treturn {\n\t\tfocus: (e: FocusEvent) => {\n\t\t\tconst parentNavigatorKey = reactNavigation.getParent()?.getState?.()?.key;\n\t\t\tconst navigatorKey = reactNavigation.getState().key;\n\n\t\t\tScreenStore.updateScreen(e.target, {\n\t\t\t\tid: e.target,\n\t\t\t\tname: route.name,\n\t\t\t\tstatus: 1,\n\t\t\t\tclosing: false,\n\t\t\t\tnavigatorKey,\n\t\t\t\tparentNavigatorKey,\n\t\t\t\t...config,\n\t\t\t});\n\t\t},\n\t\tbeforeRemove: (e: BeforeRemoveEvent) => {\n\t\t\tconst shouldSkipPreventDefault = ScreenStore.shouldSkipPreventDefault(\n\t\t\t\te.target,\n\t\t\t\treactNavigation.getState(),\n\t\t\t);\n\n\t\t\tif (shouldSkipPreventDefault) {\n\t\t\t\tScreenStore.removeScreen(e.target);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\tconst handleFinish = (finished?: boolean) => {\n\t\t\t\tif (!finished) return;\n\t\t\t\tif (reactNavigation.canGoBack()) {\n\t\t\t\t\treactNavigation.dispatch(e.data?.action);\n\t\t\t\t\tScreenStore.removeScreen(e.target);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tScreenStore.updateScreen(e.target, {\n\t\t\t\tstatus: 0,\n\t\t\t\tclosing: true,\n\t\t\t\tonAnimationFinish: handleFinish,\n\t\t\t});\n\t\t},\n\t} as TransitionListeners;\n};\n\n/**\n * Create a config for a screen\n *\n * @param config - The config for the screen\n * @returns The config for the screen\n */\nexport const createScreenConfig = (\n\tconfig?: Omit<TransitionEventHandlersProps, \"navigation\" | \"route\">,\n) => {\n\treturn {\n\t\tlisteners: (l: Any) => createConfig({ ...l, ...(config || {}) }),\n\t};\n};\n","/**\n * Helper function to return the default screen options in order for the screen animations to work properly.\n */\nexport const defaultScreenOptions = () =>\n\t({\n\t\tpresentation: \"containedTransparentModal\",\n\t\theaderShown: false,\n\t\tanimation: \"none\",\n\t}) as const;\n","import type { TransitionInterpolatedStyle } from \"../types\";\n\nexport const noopinterpolator = (): TransitionInterpolatedStyle => {\n\t\"worklet\";\n\treturn {\n\t\tcontentStyle: {},\n\t\toverlayStyle: {},\n\t};\n};\n","import type { PanGesture } from \"react-native-gesture-handler\";\nimport type { TransitionConfig } from \"../../types\";\n\ninterface GestureActivationOptions {\n\tgestureDirection:\n\t\t| TransitionConfig[\"gestureDirection\"]\n\t\t| Array<TransitionConfig[\"gestureDirection\"]>;\n\tgestureResponseDistance: number;\n\tpanGesture: PanGesture;\n}\n\n/**\n * rngh requires this type instead a number[]. We're returning a num[] which is still correct, this is just to remove the type error.\n */\ntype OffsetErrorTypeBugFix = [start: number, end: number];\n\nexport const applyGestureActivationCriteria = ({\n\tgestureDirection,\n\tgestureResponseDistance,\n\tpanGesture,\n}: GestureActivationOptions) => {\n\tconst directions = Array.isArray(gestureDirection)\n\t\t? gestureDirection\n\t\t: [gestureDirection];\n\n\tif (directions.includes(\"bidirectional\")) {\n\t\treturn {\n\t\t\tactiveOffsetX: [\n\t\t\t\t-gestureResponseDistance,\n\t\t\t\tgestureResponseDistance,\n\t\t\t] as OffsetErrorTypeBugFix,\n\t\t\tactiveOffsetY: [\n\t\t\t\t-gestureResponseDistance,\n\t\t\t\tgestureResponseDistance,\n\t\t\t] as OffsetErrorTypeBugFix,\n\t\t};\n\t}\n\n\tconst allowedDown = directions.includes(\"vertical\");\n\tconst allowedUp = directions.includes(\"vertical-inverted\");\n\tconst allowedRight = directions.includes(\"horizontal\");\n\tconst allowedLeft = directions.includes(\"horizontal-inverted\");\n\n\tconst toleranceX = 15;\n\tconst toleranceY = 20;\n\tconst dist = gestureResponseDistance;\n\n\tconst result: {\n\t\tactiveOffsetX?: number | [number, number];\n\t\tfailOffsetX?: number | OffsetErrorTypeBugFix;\n\t\tactiveOffsetY?: number | [number, number];\n\t\tfailOffsetY?: number | OffsetErrorTypeBugFix;\n\t} = {};\n\n\tconst hasHorizontal = allowedLeft || allowedRight;\n\tif (hasHorizontal) {\n\t\tif (allowedLeft && allowedRight) {\n\t\t\tresult.activeOffsetX = [-dist, dist];\n\t\t} else if (allowedLeft) {\n\t\t\tresult.activeOffsetX = -dist;\n\t\t} else if (allowedRight) {\n\t\t\tresult.activeOffsetX = dist;\n\t\t}\n\n\t\tif (allowedRight && !allowedLeft) {\n\t\t\tresult.failOffsetX = -dist;\n\t\t} else if (allowedLeft && !allowedRight) {\n\t\t\tresult.failOffsetX = dist;\n\t\t}\n\t} else {\n\t\tresult.failOffsetX = [-toleranceX, toleranceX] as OffsetErrorTypeBugFix;\n\t}\n\n\tconst hasVertical = allowedUp || allowedDown;\n\tif (hasVertical) {\n\t\tif (allowedUp && allowedDown) {\n\t\t\tresult.activeOffsetY = [-dist, dist];\n\t\t} else if (allowedUp) {\n\t\t\tresult.activeOffsetY = -dist;\n\t\t} else if (allowedDown) {\n\t\t\tresult.activeOffsetY = dist;\n\t\t}\n\n\t\tif (allowedDown && !allowedUp) {\n\t\t\tresult.failOffsetY = -dist;\n\t\t} else if (allowedUp && !allowedDown) {\n\t\t\tresult.failOffsetY = dist;\n\t\t}\n\t} else {\n\t\tresult.failOffsetY = [-toleranceY, toleranceY] as OffsetErrorTypeBugFix;\n\t}\n\n\tif (result?.activeOffsetX) {\n\t\tpanGesture.activeOffsetX(result.activeOffsetX);\n\t}\n\tif (result?.activeOffsetY) {\n\t\tpanGesture.activeOffsetY(result.activeOffsetY);\n\t}\n\tif (result?.failOffsetX) {\n\t\tpanGesture.failOffsetX(result.failOffsetX);\n\t}\n\tif (result?.failOffsetY) {\n\t\tpanGesture.failOffsetY(result.failOffsetY);\n\t}\n\n\tpanGesture.enableTrackpadTwoFingerGesture(true);\n\n\treturn panGesture;\n};\n","/**\n * Utility function to map raw gesture translation to a progress value.\n */\nexport const mapGestureToProgress = (\n\ttranslation: number,\n\tdimension: number,\n) => {\n\t\"worklet\";\n\tconst rawProgress = translation / dimension;\n\treturn Math.max(0, Math.min(1, rawProgress));\n};\n","import { useRoute } from \"@react-navigation/native\";\n\nexport const useKey = () => useRoute().key;\n","import { useCallback, useMemo } from \"react\";\nimport { useWindowDimensions } from \"react-native\";\nimport { useSharedValue } from \"react-native-reanimated\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { animationValues } from \"../animation-engine\";\nimport { ScreenStore } from \"../store\";\nimport type {\n\tScreenInterpolationProps,\n\tScreenStyleInterpolator,\n} from \"../types\";\nimport { noopinterpolator } from \"../utils/noop-interpolator\";\nimport { useKey } from \"./use-key\";\n\ninterface InternalScreenInterpolationProps extends ScreenInterpolationProps {\n\tscreenStyleInterpolator: ScreenStyleInterpolator;\n}\n\nconst useAnimationBuilder = () => {\n\tconst key = useKey();\n\tconst dimensions = useWindowDimensions();\n\tconst insets = useSafeAreaInsets();\n\n\tconst progressFallback = useSharedValue(0);\n\tconst gestureDraggingFallback = useSharedValue(0);\n\tconst gestureXFallback = useSharedValue(0);\n\tconst gestureYFallback = useSharedValue(0);\n\tconst normalizedGestureXFallback = useSharedValue(0);\n\tconst normalizedGestureYFallback = useSharedValue(0);\n\tconst isDismissingFallback = useSharedValue(0);\n\n\tconst currentScreen = ScreenStore.use(\n\t\tuseCallback((state) => state.screens[key], [key]),\n\t);\n\n\tconst actualNextScreen = ScreenStore.use(\n\t\tuseCallback(\n\t\t\t(state) => {\n\t\t\t\tconst current = state.screens[key];\n\t\t\t\tif (!current) return undefined;\n\n\t\t\t\tconst nextKey = state.screenKeys[current.index + 1];\n\t\t\t\tconst nextScreen = nextKey ? state.screens[nextKey] : undefined;\n\n\t\t\t\tconst shouldUseNext =\n\t\t\t\t\tnextScreen?.navigatorKey === current?.navigatorKey;\n\t\t\t\treturn shouldUseNext ? nextScreen : undefined;\n\t\t\t},\n\t\t\t[key],\n\t\t),\n\t);\n\n\tconst getAnimationValuesForScreen = useCallback(\n\t\t(screenId: string) => ({\n\t\t\tprogress: animationValues.screenProgress[screenId] || progressFallback,\n\t\t\tgesture: {\n\t\t\t\tisDragging:\n\t\t\t\t\tanimationValues.gestureDragging[screenId] || gestureDraggingFallback,\n\t\t\t\tx: animationValues.gestureX[screenId] || gestureXFallback,\n\t\t\t\ty: animationValues.gestureY[screenId] || gestureYFallback,\n\t\t\t\tnormalizedX:\n\t\t\t\t\tanimationValues.normalizedGestureX[screenId] ||\n\t\t\t\t\tnormalizedGestureXFallback,\n\t\t\t\tnormalizedY:\n\t\t\t\t\tanimationValues.normalizedGestureY[screenId] ||\n\t\t\t\t\tnormalizedGestureYFallback,\n\t\t\t\tisDismissing:\n\t\t\t\t\tanimationValues.isDismissing[screenId] || isDismissingFallback,\n\t\t\t},\n\t\t}),\n\t\t[\n\t\t\tprogressFallback,\n\t\t\tgestureDraggingFallback,\n\t\t\tgestureXFallback,\n\t\t\tgestureYFallback,\n\t\t\tnormalizedGestureXFallback,\n\t\t\tnormalizedGestureYFallback,\n\t\t\tisDismissingFallback,\n\t\t],\n\t);\n\n\treturn useMemo(() => {\n\t\treturn {\n\t\t\tcurrent: getAnimationValuesForScreen(key),\n\t\t\tnext: actualNextScreen\n\t\t\t\t? getAnimationValuesForScreen(actualNextScreen.id)\n\t\t\t\t: undefined,\n\t\t\tlayouts: { screen: dimensions },\n\t\t\tinsets,\n\t\t\tclosing: currentScreen?.closing || false,\n\t\t\tscreenStyleInterpolator:\n\t\t\t\tactualNextScreen?.screenStyleInterpolator ||\n\t\t\t\tcurrentScreen?.screenStyleInterpolator ||\n\t\t\t\tnoopinterpolator,\n\t\t};\n\t}, [\n\t\tkey,\n\t\tcurrentScreen,\n\t\tactualNextScreen,\n\t\tdimensions,\n\t\tinsets,\n\t\tgetAnimationValuesForScreen,\n\t]);\n};\n\nconst _useScreenAnimation = (): InternalScreenInterpolationProps => {\n\treturn useAnimationBuilder();\n};\n\nconst useScreenAnimation = (): ScreenInterpolationProps => {\n\tconst { screenStyleInterpolator: _, ...animationProps } =\n\t\tuseAnimationBuilder();\n\n\treturn animationProps;\n};\n\nexport { _useScreenAnimation, useScreenAnimation };\n","import { useEffect } from \"react\";\nimport { useAnimatedStyle, useSharedValue } from \"react-native-reanimated\";\n\n/**\n * This hook helps mitigate a race condition between the JS and UI thread where styles are not applied immediately.\n * By skipping one frame before rendering, it ensures styles are properly applied, removing a flicker effect.\n *\n * Related issue: https://github.com/software-mansion/react-native-reanimated/issues/4446\n */\nexport const useSkipFirstFrame = () => {\n\tconst opacity = useSharedValue(0);\n\tconst style = useAnimatedStyle(() => {\n\t\t\"worklet\";\n\t\treturn {\n\t\t\topacity: opacity.value,\n\t\t};\n\t});\n\n\tuseEffect(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\topacity.value = 1;\n\t\t});\n\t}, [opacity]);\n\n\treturn { style };\n};\n","import { type ComponentType, forwardRef, memo } from \"react\";\nimport { View } from \"react-native\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, { type AnimatedProps } from \"react-native-reanimated\";\nimport { useGestureContext } from \"@/contexts/gesture\";\nimport { useScrollProgress } from \"@/hooks/use-scroll-progress\";\nimport type { Any } from \"@/types\";\nimport { createTransitionAwareComponent } from \"../utils\";\n\nexport function createTransitionAwareScrollable<P extends object>(\n\tScrollableComponent: ComponentType<P>,\n) {\n\tconst WithTransitionAwareness = createTransitionAwareComponent(View);\n\tconst AnimatedScrollableComponent =\n\t\tAnimated.createAnimatedComponent(ScrollableComponent);\n\n\ttype Props = AnimatedProps<P>;\n\n\tconst WithScrollAwareness = forwardRef<\n\t\tReact.ComponentRef<typeof ScrollableComponent>,\n\t\tProps\n\t>((props: Any, ref) => {\n\t\tconst { nativeGesture } = useGestureContext();\n\n\t\tconst { scrollHandler, onContentSizeChange } = useScrollProgress({\n\t\t\tonScroll: props.onScroll,\n\t\t\tonContentSizeChange: props.onContentSizeChange,\n\t\t});\n\n\t\treturn (\n\t\t\t<GestureDetector gesture={nativeGesture}>\n\t\t\t\t<AnimatedScrollableComponent\n\t\t\t\t\t{...(props as Any)}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tonScroll={scrollHandler}\n\t\t\t\t\tonContentSizeChange={onContentSizeChange}\n\t\t\t\t\tscrollEventThrottle={props.scrollEventThrottle || 16}\n\t\t\t\t/>\n\t\t\t</GestureDetector>\n\t\t);\n\t});\n\n\tconst Wrapped = forwardRef<\n\t\tReact.ComponentRef<typeof ScrollableComponent>,\n\t\tProps\n\t>((props: Any, ref) => {\n\t\tconst { isPlaceholder } = useGestureContext();\n\n\t\tif (isPlaceholder) {\n\t\t\treturn (\n\t\t\t\t<WithTransitionAwareness>\n\t\t\t\t\t<WithScrollAwareness {...props} ref={ref} />\n\t\t\t\t</WithTransitionAwareness>\n\t\t\t);\n\t\t}\n\n\t\treturn <WithScrollAwareness {...props} ref={ref} />;\n\t});\n\n\tWithScrollAwareness.displayName = `Transition(${ScrollableComponent.displayName || ScrollableComponent.name || \"Component\"})`;\n\n\treturn memo(Wrapped) as React.MemoExoticComponent<\n\t\tReact.ForwardRefExoticComponent<\n\t\t\tAnimatedProps<P> &\n\t\t\t\tReact.RefAttributes<React.ComponentRef<typeof ScrollableComponent>>\n\t\t>\n\t>;\n}\n","import { useCallback } from \"react\";\nimport type { NativeScrollEvent, NativeSyntheticEvent } from \"react-native\";\nimport { useAnimatedScrollHandler } from \"react-native-reanimated\";\nimport { useGestureContext } from \"@/contexts/gesture\";\n\ninterface ScrollProgressHookProps {\n\tonScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n\tonContentSizeChange?: (width: number, height: number) => void;\n}\n\nexport const useScrollProgress = (props: ScrollProgressHookProps) => {\n\tconst { scrollProgress } = useGestureContext();\n\tconst scrollHandler = useAnimatedScrollHandler({\n\t\tonScroll: (event) => {\n\t\t\tscrollProgress.modify((value) => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn {\n\t\t\t\t\t...value,\n\t\t\t\t\tx: event.contentOffset.x,\n\t\t\t\t\ty: event.contentOffset.y,\n\t\t\t\t\tlayoutHeight: event.layoutMeasurement.height,\n\t\t\t\t\tlayoutWidth: event.layoutMeasurement.width,\n\t\t\t\t\tcontentHeight: event.contentSize.height,\n\t\t\t\t\tcontentWidth: event.contentSize.width,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t});\n\n\tconst onContentSizeChange = useCallback(\n\t\t(width: number, height: number) => {\n\t\t\tprops.onContentSizeChange?.(width, height);\n\n\t\t\tscrollProgress.modify((value) => {\n\t\t\t\t\"worklet\";\n\t\t\t\treturn {\n\t\t\t\t\t...value,\n\t\t\t\t\tcontentWidth: width,\n\t\t\t\t\tcontentHeight: height,\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\t[scrollProgress, props.onContentSizeChange],\n\t);\n\n\treturn {\n\t\tscrollHandler,\n\t\tonContentSizeChange,\n\t};\n};\n","import {\n\tExtrapolation,\n\tinterpolate,\n\tinterpolateColor,\n} from \"react-native-reanimated\";\nimport type { TransitionConfig } from \"../types\";\nimport { DefaultSpec } from \"./specs\";\n\nexport const SlideFromTop = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"vertical-inverted\",\n\t\tscreenStyleInterpolator: ({\n\t\t\tcurrent,\n\t\t\tnext,\n\t\t\tlayouts: {\n\t\t\t\tscreen: { height },\n\t\t\t},\n\t\t}) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst y = interpolate(progress, [0, 1, 2], [-height, 0, height]);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ translateY: y }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const ZoomIn = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: false,\n\t\tscreenStyleInterpolator: ({ current, next }) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst scale = interpolate(\n\t\t\t\tprogress,\n\t\t\t\t[0, 1, 2],\n\t\t\t\t[0.5, 1, 0.5],\n\t\t\t\tExtrapolation.CLAMP,\n\t\t\t);\n\n\t\t\tconst opacity = interpolate(\n\t\t\t\tprogress,\n\t\t\t\t[0, 1, 2],\n\t\t\t\t[0, 1, 0],\n\t\t\t\tExtrapolation.CLAMP,\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }],\n\t\t\t\t\topacity,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const SlideFromBottom = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"vertical\",\n\t\tscreenStyleInterpolator: ({\n\t\t\tcurrent,\n\t\t\tnext,\n\t\t\tlayouts: {\n\t\t\t\tscreen: { height },\n\t\t\t},\n\t\t}) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\tconst y = interpolate(progress, [0, 1, 2], [height, 0, -height]);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ translateY: y }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const DraggableCard = (\n\tconfig: Partial<TransitionConfig> = {},\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: [\"horizontal\", \"vertical\"],\n\t\tscreenStyleInterpolator: ({ current, next, layouts: { screen } }) => {\n\t\t\t\"worklet\";\n\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\n\t\t\t/** Combined */\n\t\t\tconst scale = interpolate(progress, [0, 1, 2], [0, 1, 0.75]);\n\n\t\t\t/** Vertical */\n\t\t\tconst translateY = interpolate(\n\t\t\t\tcurrent.gesture.normalizedY.value,\n\t\t\t\t[-1, 1],\n\t\t\t\t[-screen.height * 0.5, screen.height * 0.5],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\t/** Horizontal */\n\t\t\tconst translateX = interpolate(\n\t\t\t\tcurrent.gesture.normalizedX.value,\n\t\t\t\t[-1, 1],\n\t\t\t\t[-screen.width * 0.5, screen.width * 0.5],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }, { translateY: translateY }, { translateX }],\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\ttransitionSpec: {\n\t\t\topen: DefaultSpec,\n\t\t\tclose: DefaultSpec,\n\t\t},\n\t\t...config,\n\t};\n};\n\nexport const ElasticCard = (\n\tconfig: Partial<TransitionConfig> & {\n\t\telasticFactor?: number;\n\t} = { elasticFactor: 0.5 },\n): TransitionConfig => {\n\treturn {\n\t\tgestureEnabled: true,\n\t\tgestureDirection: \"bidirectional\",\n\t\tscreenStyleInterpolator: ({ current, next, layouts: { screen } }) => {\n\t\t\t\"worklet\";\n\n\t\t\t/**\n\t\t\t * Applies to both screens ( previous and incoming)\n\t\t\t */\n\t\t\tconst progress = current.progress.value + (next?.progress.value ?? 0);\n\t\t\tconst scale = interpolate(progress, [0, 1, 2], [0, 1, 0.8]);\n\n\t\t\t/**\n\t\t\t * Applies to current screen\n\t\t\t */\n\t\t\tconst maxElasticityX = screen.width * (config.elasticFactor ?? 0.5);\n\t\t\tconst maxElasticityY = screen.height * (config.elasticFactor ?? 0.5);\n\t\t\tconst translateX = interpolate(\n\t\t\t\tcurrent.gesture.normalizedX.value,\n\t\t\t\t[-1, 0, 1],\n\t\t\t\t[-maxElasticityX, 0, maxElasticityX],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\tconst translateY = interpolate(\n\t\t\t\tcurrent.gesture.normalizedY.value,\n\t\t\t\t[-1, 0, 1],\n\t\t\t\t[-maxElasticityY, 0, maxElasticityY],\n\t\t\t\t\"clamp\",\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * Applies to unfocused screen ( previous screen )\n\t\t\t */\n\t\t\tconst overlayColor = interpolateColor(\n\t\t\t\tnext?.progress.value || 0,\n\t\t\t\t[0, 1],\n\t\t\t\t[\"rgba(0,0,0,0)\", \"rgba(0,0,0,0.5)\"],\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcontentStyle: {\n\t\t\t\t\ttransform: [{ scale }, { translateX }, { translateY }],\n\t\t\t\t},\n\t\t\t\toverlayStyle: {\n\t\t\t\t\tbackgroundColor: overlayColor,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t...config,\n\t};\n};\n"],"mappings":"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","names":["View","useAnimatedStyle","useMemo","useSharedValue","Gesture","runOnJS","useSharedValue","shouldSkipPreventDefault","useSharedValue","Gesture","runOnJS","useSharedValue","useMemo","useCallback","useMemo","useWindowDimensions","useSharedValue","useWindowDimensions","useSharedValue","useCallback","useMemo","useSharedValue","jsx","useAnimatedStyle","forwardRef","memo","GestureDetector","Animated","useCallback","useCallback","jsx","Animated","forwardRef","GestureDetector","memo","interpolate","interpolate","View"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-screen-transitions",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Easy screen transitions for React Native and Expo",
|
|
5
5
|
"author": "Ed",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,11 +27,7 @@
|
|
|
27
27
|
"expo-router",
|
|
28
28
|
"reanimated"
|
|
29
29
|
],
|
|
30
|
-
"files": [
|
|
31
|
-
"dist",
|
|
32
|
-
"README.md",
|
|
33
|
-
"LICENSE"
|
|
34
|
-
],
|
|
30
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
35
31
|
"dependencies": {
|
|
36
32
|
"immer": ">=10.0.0"
|
|
37
33
|
},
|