react-native-screen-transitions 1.0.1

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.
@@ -0,0 +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\n\t\t\treturn {\n\t\t\t\tcurrentRoute: current,\n\t\t\t\tnextRoute: nextKey ? routes[nextKey] : undefined,\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};\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\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\t...config,\n\t\t\t});\n\t\t},\n\t\tbeforeRemove: (e: BeforeRemoveEvent) => {\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":["import_react_native","import_native","import_react","import_react_native_reanimated","React","import_react_native_reanimated","import_react","import_react_native_reanimated","import_react_native_reanimated","import_react","import_react_native","import_react_native_gesture_handler","import_react_native_reanimated","import_react","import_react_native_reanimated","Animated"]}