react-native-screen-transitions 1.0.1 → 1.0.3

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/dist/index.js CHANGED
@@ -221,89 +221,18 @@ var ElasticCard = (config = { elasticFactor: 0.5 }) => {
221
221
  };
222
222
 
223
223
  // src/hooks/use-screen-animation.tsx
224
- var import_native2 = require("@react-navigation/native");
225
- var import_react3 = require("react");
224
+ var import_native3 = require("@react-navigation/native");
225
+ var import_react2 = require("react");
226
226
  var import_react_native = require("react-native");
227
227
  var import_react_native_reanimated5 = require("react-native-reanimated");
228
228
  var import_react_native_safe_area_context = require("react-native-safe-area-context");
229
229
 
230
- // src/store/utils/use-shallow.tsx
231
- var import_react = __toESM(require("react"));
232
-
233
- // src/store/utils/shallow.ts
234
- var isIterable = (obj) => Symbol.iterator in obj;
235
- var hasIterableEntries = (value) => (
236
- // HACK: avoid checking entries type
237
- "entries" in value
238
- );
239
- var compareEntries = (valueA, valueB) => {
240
- const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());
241
- const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());
242
- if (mapA.size !== mapB.size) {
243
- return false;
244
- }
245
- for (const [key, value] of mapA) {
246
- if (!Object.is(value, mapB.get(key))) {
247
- return false;
248
- }
249
- }
250
- return true;
251
- };
252
- var compareIterables = (valueA, valueB) => {
253
- const iteratorA = valueA[Symbol.iterator]();
254
- const iteratorB = valueB[Symbol.iterator]();
255
- let nextA = iteratorA.next();
256
- let nextB = iteratorB.next();
257
- while (!nextA.done && !nextB.done) {
258
- if (!Object.is(nextA.value, nextB.value)) {
259
- return false;
260
- }
261
- nextA = iteratorA.next();
262
- nextB = iteratorB.next();
263
- }
264
- return !!nextA.done && !!nextB.done;
265
- };
266
- function shallow(valueA, valueB) {
267
- if (Object.is(valueA, valueB)) {
268
- return true;
269
- }
270
- if (typeof valueA !== "object" || valueA === null || typeof valueB !== "object" || valueB === null) {
271
- return false;
272
- }
273
- if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {
274
- return false;
275
- }
276
- if (isIterable(valueA) && isIterable(valueB)) {
277
- if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {
278
- return compareEntries(valueA, valueB);
279
- }
280
- return compareIterables(valueA, valueB);
281
- }
282
- return compareEntries(
283
- { entries: () => Object.entries(valueA) },
284
- { entries: () => Object.entries(valueB) }
285
- );
286
- }
287
-
288
- // src/store/utils/use-shallow.tsx
289
- function useShallow(selector) {
290
- const prev = import_react.default.useRef(void 0);
291
- return (state) => {
292
- const next = selector(state);
293
- if (shallow(prev.current, next)) {
294
- return prev.current;
295
- }
296
- prev.current = next;
297
- return next;
298
- };
299
- }
300
-
301
230
  // src/animation-engine.ts
302
231
  var import_react_native_reanimated3 = require("react-native-reanimated");
303
232
 
304
233
  // src/store/utils/create-vanilla-store.ts
305
234
  var import_immer = require("immer");
306
- var import_react2 = require("react");
235
+ var import_react = require("react");
307
236
  function createVanillaStore(initialState) {
308
237
  let state = initialState;
309
238
  const listeners = /* @__PURE__ */ new Set();
@@ -333,7 +262,7 @@ function createVanillaStore(initialState) {
333
262
  return unsubscribe;
334
263
  };
335
264
  function useStore(selector) {
336
- return (0, import_react2.useSyncExternalStore)(subscribe, () => selector(getState()));
265
+ return (0, import_react.useSyncExternalStore)(subscribe, () => selector(getState()));
337
266
  }
338
267
  Object.assign(useStore, {
339
268
  setState,
@@ -344,49 +273,93 @@ function createVanillaStore(initialState) {
344
273
  return useStore;
345
274
  }
346
275
 
347
- // src/store/index.ts
348
- var useRouteStore = createVanillaStore({
349
- routes: {},
350
- routeKeys: []
351
- });
352
- var RouteStore = {
353
- use: useRouteStore,
354
- updateRoute: (key, value) => {
355
- if (!key) return;
356
- useRouteStore.setState(({ routeKeys, routes }) => {
357
- const currentRoute = routes[key];
358
- if (currentRoute) {
359
- routes[key] = {
360
- ...currentRoute,
361
- ...value
362
- };
363
- } else {
364
- const { name = "", status = 0, closing = false, ...rest } = value;
365
- const newIndex = routeKeys.length;
366
- routes[key] = {
367
- id: key,
368
- index: newIndex,
369
- name,
370
- status,
371
- closing,
372
- ...rest
373
- };
374
- routeKeys.push(key);
375
- }
376
- });
377
- },
378
- removeRoute: (key) => {
379
- if (!key) return;
380
- useRouteStore.setState(({ routes, routeKeys }) => {
381
- delete routes[key];
382
- const indexToRemove = routeKeys.indexOf(key);
383
- if (indexToRemove > -1) {
384
- routeKeys.splice(indexToRemove, 1);
385
- }
276
+ // src/store/utils/handle-screen-dismiss.tsx
277
+ var import_native = require("@react-navigation/native");
278
+ var handleScreenDismiss = (screenBeingDismissed, navigation) => {
279
+ const { screens } = ScreenStore.use.getState();
280
+ const dismissedScreen = screens[screenBeingDismissed];
281
+ if (!dismissedScreen) {
282
+ navigation.goBack();
283
+ return;
284
+ }
285
+ const childScreens = Object.values(screens).filter(
286
+ (screen) => screen.parentNavigatorKey === dismissedScreen.navigatorKey
287
+ );
288
+ if (childScreens.length > 0) {
289
+ ScreenStore.updateScreen(dismissedScreen.id, {
290
+ closing: true
386
291
  });
292
+ navigation.dispatch(import_native.StackActions.pop(childScreens.length));
293
+ } else {
294
+ navigation.goBack();
387
295
  }
388
296
  };
389
297
 
298
+ // src/store/utils/remove-screen.tsx
299
+ var removeScreen = (key) => {
300
+ if (!key) return;
301
+ ScreenStore.use.setState(({ screens, screenKeys }) => {
302
+ delete screens[key];
303
+ const indexToRemove = screenKeys.indexOf(key);
304
+ if (indexToRemove > -1) {
305
+ screenKeys.splice(indexToRemove, 1);
306
+ }
307
+ });
308
+ };
309
+
310
+ // src/store/utils/should-skip-prevent-default.tsx
311
+ var shouldSkipPreventDefault = (key, navigatorState) => {
312
+ if (!key) return false;
313
+ const { screens } = ScreenStore.use.getState();
314
+ const currentScreen = screens[key];
315
+ const isLastScreenInStack = navigatorState.routes.length === 1 && navigatorState.routes[0].key === key;
316
+ const isParentNavigatorExiting = Boolean(
317
+ currentScreen?.parentNavigatorKey && Object.values(screens).some(
318
+ (screen) => screen.navigatorKey === currentScreen.parentNavigatorKey && screen.closing
319
+ )
320
+ );
321
+ return isLastScreenInStack || isParentNavigatorExiting;
322
+ };
323
+
324
+ // src/store/utils/update-screen.tsx
325
+ var updateScreen = (key, value) => {
326
+ if (!key) return;
327
+ ScreenStore.use.setState(({ screenKeys, screens }) => {
328
+ const currentScreen = screens[key];
329
+ if (currentScreen) {
330
+ screens[key] = {
331
+ ...currentScreen,
332
+ ...value
333
+ };
334
+ } else {
335
+ const { name = "", status = 0, closing = false, ...rest } = value;
336
+ const newIndex = screenKeys.length;
337
+ screens[key] = {
338
+ id: key,
339
+ index: newIndex,
340
+ name,
341
+ status,
342
+ closing,
343
+ ...rest
344
+ };
345
+ screenKeys.push(key);
346
+ }
347
+ });
348
+ };
349
+
350
+ // src/store/index.ts
351
+ var useScreenStore = createVanillaStore({
352
+ screens: {},
353
+ screenKeys: []
354
+ });
355
+ var ScreenStore = {
356
+ use: useScreenStore,
357
+ updateScreen,
358
+ removeScreen,
359
+ handleScreenDismiss,
360
+ shouldSkipPreventDefault
361
+ };
362
+
390
363
  // src/utils/animate.ts
391
364
  var import_react_native_reanimated2 = require("react-native-reanimated");
392
365
  var animate = (toValue, config, callback) => {
@@ -407,12 +380,12 @@ var animationValues = {
407
380
  normalizedGestureY: {},
408
381
  gestureDragging: {}
409
382
  };
410
- var triggerAnimation = (route) => {
383
+ var triggerAnimation = (screen) => {
411
384
  "worklet";
412
- const { id, closing, status, transitionSpec, onAnimationFinish } = route;
385
+ const { id, closing, status, transitionSpec, onAnimationFinish } = screen;
413
386
  const progressValue = animationValues.screenProgress[id];
414
387
  if (!progressValue && __DEV__) {
415
- console.warn(`Animation values not found for route: ${id}`);
388
+ console.warn(`Animation values not found for screen: ${id}`);
416
389
  return;
417
390
  }
418
391
  const animationConfig = closing ? transitionSpec?.close : transitionSpec?.open;
@@ -424,14 +397,16 @@ var triggerAnimation = (route) => {
424
397
  }
425
398
  });
426
399
  };
427
- RouteStore.use.subscribeWithSelector(
428
- (state) => state.routes,
429
- (currRoutes, prevRoutes) => {
430
- const currKeys = Object.keys(currRoutes);
431
- const prevKeys = Object.keys(prevRoutes);
400
+ ScreenStore.use.subscribeWithSelector(
401
+ (state) => state.screens,
402
+ (currScreens, prevScreens) => {
403
+ const currKeys = Object.keys(currScreens);
404
+ const prevKeys = Object.keys(prevScreens);
432
405
  const incomingKeys = currKeys.filter((k) => !prevKeys.includes(k));
433
406
  const removedKeys = prevKeys.filter((k) => !currKeys.includes(k));
434
- const changedKeys = currKeys.filter((k) => currRoutes[k] !== prevRoutes[k]);
407
+ const changedKeys = currKeys.filter(
408
+ (k) => currScreens[k] !== prevScreens[k]
409
+ );
435
410
  const animatableValues = Object.values(animationValues);
436
411
  for (const incomingKey of incomingKeys) {
437
412
  for (const value of animatableValues) {
@@ -445,9 +420,9 @@ RouteStore.use.subscribeWithSelector(
445
420
  }
446
421
  }
447
422
  for (const changedKey of changedKeys) {
448
- const currentRoute = currRoutes[changedKey];
449
- if (currentRoute) {
450
- triggerAnimation(currentRoute);
423
+ const currentScreen = currScreens[changedKey];
424
+ if (currentScreen) {
425
+ triggerAnimation(currentScreen);
451
426
  }
452
427
  }
453
428
  }
@@ -457,10 +432,11 @@ RouteStore.use.subscribeWithSelector(
457
432
  var import_react_native_gesture_handler = require("react-native-gesture-handler");
458
433
  var import_react_native_reanimated4 = require("react-native-reanimated");
459
434
 
460
- // src/utils/gesture/create-gesture-activation-criteria.ts
461
- var createGestureActivationCriteria = ({
435
+ // src/utils/gesture/apply-gesture-activation-criteria.ts
436
+ var applyGestureActivationCriteria = ({
462
437
  gestureDirection,
463
- gestureResponseDistance
438
+ gestureResponseDistance,
439
+ panGesture
464
440
  }) => {
465
441
  const directions = Array.isArray(gestureDirection) ? gestureDirection : [gestureDirection];
466
442
  if (directions.includes("bidirectional")) {
@@ -517,7 +493,20 @@ var createGestureActivationCriteria = ({
517
493
  } else {
518
494
  result.failOffsetY = [-toleranceY, toleranceY];
519
495
  }
520
- return result;
496
+ if (result?.activeOffsetX) {
497
+ panGesture.activeOffsetX(result.activeOffsetX);
498
+ }
499
+ if (result?.activeOffsetY) {
500
+ panGesture.activeOffsetY(result.activeOffsetY);
501
+ }
502
+ if (result?.failOffsetX) {
503
+ panGesture.failOffsetX(result.failOffsetX);
504
+ }
505
+ if (result?.failOffsetY) {
506
+ panGesture.failOffsetY(result.failOffsetY);
507
+ }
508
+ panGesture.enableTrackpadTwoFingerGesture(true);
509
+ return panGesture;
521
510
  };
522
511
 
523
512
  // src/utils/gesture/map-gesture-to-progress.ts
@@ -533,10 +522,10 @@ var DEFAULT_GESTURE_RESPONSE_DISTANCE = 50;
533
522
  var buildGestureDetector = ({
534
523
  key,
535
524
  progress,
536
- config,
525
+ screenState,
537
526
  width,
538
527
  height,
539
- goBack
528
+ handleDismiss
540
529
  }) => {
541
530
  const _translateX = animationValues.gestureX[key];
542
531
  const _translateY = animationValues.gestureY[key];
@@ -549,7 +538,7 @@ var buildGestureDetector = ({
549
538
  transitionSpec,
550
539
  gestureVelocityImpact = GESTURE_VELOCITY_IMPACT,
551
540
  gestureResponseDistance = DEFAULT_GESTURE_RESPONSE_DISTANCE
552
- } = config;
541
+ } = screenState;
553
542
  const directions = Array.isArray(gestureDirection) ? gestureDirection : [gestureDirection];
554
543
  const panGesture = import_react_native_gesture_handler.Gesture.Pan().enabled(gestureEnabled).onStart(() => {
555
544
  "worklet";
@@ -628,7 +617,7 @@ var buildGestureDetector = ({
628
617
  const spec = shouldDismiss ? transitionSpec?.close : transitionSpec?.open;
629
618
  const onFinish = shouldDismiss ? (isFinished) => {
630
619
  "worklet";
631
- if (isFinished) (0, import_react_native_reanimated4.runOnJS)(goBack)();
620
+ if (isFinished) (0, import_react_native_reanimated4.runOnJS)(handleDismiss)(screenState.id);
632
621
  } : void 0;
633
622
  progress.value = animate(finalProgress, spec, onFinish);
634
623
  _translateX.value = animate(0, spec);
@@ -636,25 +625,12 @@ var buildGestureDetector = ({
636
625
  _normalizedGestureX.value = animate(0, spec);
637
626
  _normalizedGestureY.value = animate(0, spec);
638
627
  });
639
- const criteria = createGestureActivationCriteria({
628
+ applyGestureActivationCriteria({
640
629
  gestureDirection,
641
- gestureResponseDistance
630
+ gestureResponseDistance,
631
+ panGesture
642
632
  });
643
- if (criteria?.activeOffsetX) {
644
- panGesture.activeOffsetX(criteria.activeOffsetX);
645
- }
646
- if (criteria?.activeOffsetY) {
647
- panGesture.activeOffsetY(criteria.activeOffsetY);
648
- }
649
- if (criteria?.failOffsetX) {
650
- panGesture.failOffsetX(criteria.failOffsetX);
651
- }
652
- if (criteria?.failOffsetY) {
653
- panGesture.failOffsetY(criteria.failOffsetY);
654
- }
655
- panGesture.enableTrackpadTwoFingerGesture(true);
656
- const nativeGesture = import_react_native_gesture_handler.Gesture.Native().shouldCancelWhenOutside(false);
657
- return import_react_native_gesture_handler.Gesture.Race(panGesture, nativeGesture);
633
+ return panGesture;
658
634
  };
659
635
 
660
636
  // src/utils/noop-interpolator.ts
@@ -667,34 +643,42 @@ var noopinterpolator = () => {
667
643
  };
668
644
 
669
645
  // src/hooks/use-key.tsx
670
- var import_native = require("@react-navigation/native");
671
- var useKey = () => (0, import_native.useRoute)().key;
646
+ var import_native2 = require("@react-navigation/native");
647
+ var useKey = () => (0, import_native2.useRoute)().key;
672
648
 
673
649
  // src/hooks/use-screen-animation.tsx
674
650
  var useAnimationBuilder = () => {
675
651
  const key = useKey();
676
652
  const dimensions = (0, import_react_native.useWindowDimensions)();
677
653
  const insets = (0, import_react_native_safe_area_context.useSafeAreaInsets)();
678
- const navigation = (0, import_native2.useNavigation)();
679
- const { currentRoute, nextRoute } = RouteStore.use(
680
- useShallow(({ routes, routeKeys }) => {
681
- const current = routes[key];
682
- if (!current) {
683
- return { currentRoute: void 0, nextRoute: void 0 };
684
- }
685
- const currentScreenIndex = current.index;
686
- const nextKey = routeKeys[currentScreenIndex + 1];
687
- return {
688
- currentRoute: current,
689
- nextRoute: nextKey ? routes[nextKey] : void 0
690
- };
691
- })
654
+ const navigation = (0, import_native3.useNavigation)();
655
+ const progressFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
656
+ const gestureDraggingFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
657
+ const gestureXFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
658
+ const gestureYFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
659
+ const normalizedGestureXFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
660
+ const normalizedGestureYFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
661
+ const currentScreen = ScreenStore.use(
662
+ (0, import_react2.useCallback)((state) => state.screens[key], [key])
663
+ );
664
+ const actualNextScreen = ScreenStore.use(
665
+ (0, import_react2.useCallback)(
666
+ (state) => {
667
+ const current = state.screens[key];
668
+ if (!current) return void 0;
669
+ const nextKey = state.screenKeys[current.index + 1];
670
+ const nextScreen = nextKey ? state.screens[nextKey] : void 0;
671
+ const shouldUseNext = nextScreen?.navigatorKey === current?.navigatorKey;
672
+ return shouldUseNext ? nextScreen : void 0;
673
+ },
674
+ [key]
675
+ )
692
676
  );
693
- const panGesture = (0, import_react3.useMemo)(
677
+ const panGesture = (0, import_react2.useMemo)(
694
678
  () => buildGestureDetector({
695
679
  key,
696
680
  progress: animationValues.screenProgress[key],
697
- config: currentRoute || {
681
+ screenState: currentScreen || {
698
682
  id: key,
699
683
  name: key,
700
684
  index: 0,
@@ -703,57 +687,50 @@ var useAnimationBuilder = () => {
703
687
  },
704
688
  width: dimensions.width,
705
689
  height: dimensions.height,
706
- goBack: navigation.goBack
690
+ handleDismiss: (screenBeingDismissed) => {
691
+ ScreenStore.handleScreenDismiss(screenBeingDismissed, navigation);
692
+ }
707
693
  }),
708
- [key, currentRoute, dimensions.width, dimensions.height, navigation.goBack]
694
+ [key, currentScreen, dimensions, navigation]
709
695
  );
710
- const progressFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
711
- const gestureDraggingFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
712
- const gestureXFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
713
- const gestureYFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
714
- const normalizedGestureXFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
715
- const normalizedGestureYFallback = (0, import_react_native_reanimated5.useSharedValue)(0);
716
- return (0, import_react3.useMemo)(() => {
696
+ const getAnimationValuesForScreen = (0, import_react2.useCallback)(
697
+ (screenId) => ({
698
+ progress: animationValues.screenProgress[screenId] || progressFallback,
699
+ gesture: {
700
+ isDragging: animationValues.gestureDragging[screenId] || gestureDraggingFallback,
701
+ x: animationValues.gestureX[screenId] || gestureXFallback,
702
+ y: animationValues.gestureY[screenId] || gestureYFallback,
703
+ normalizedX: animationValues.normalizedGestureX[screenId] || normalizedGestureXFallback,
704
+ normalizedY: animationValues.normalizedGestureY[screenId] || normalizedGestureYFallback
705
+ }
706
+ }),
707
+ [
708
+ progressFallback,
709
+ gestureDraggingFallback,
710
+ gestureXFallback,
711
+ gestureYFallback,
712
+ normalizedGestureXFallback,
713
+ normalizedGestureYFallback
714
+ ]
715
+ );
716
+ return (0, import_react2.useMemo)(() => {
717
717
  return {
718
- current: {
719
- progress: animationValues.screenProgress[key] || progressFallback,
720
- gesture: {
721
- isDragging: animationValues.gestureDragging[key] || gestureDraggingFallback,
722
- x: animationValues.gestureX[key] || gestureXFallback,
723
- y: animationValues.gestureY[key] || gestureYFallback,
724
- normalizedX: animationValues.normalizedGestureX[key] || normalizedGestureXFallback,
725
- normalizedY: animationValues.normalizedGestureY[key] || normalizedGestureYFallback
726
- }
727
- },
728
- next: nextRoute && animationValues.screenProgress[nextRoute.id] ? {
729
- progress: animationValues.screenProgress[nextRoute.id],
730
- gesture: {
731
- isDragging: animationValues.gestureDragging[nextRoute.id] || gestureDraggingFallback,
732
- x: animationValues.gestureX[nextRoute.id] || gestureXFallback,
733
- y: animationValues.gestureY[nextRoute.id] || gestureYFallback,
734
- normalizedX: animationValues.normalizedGestureX[nextRoute.id] || normalizedGestureXFallback,
735
- normalizedY: animationValues.normalizedGestureY[nextRoute.id] || normalizedGestureYFallback
736
- }
737
- } : void 0,
718
+ current: getAnimationValuesForScreen(key),
719
+ next: actualNextScreen ? getAnimationValuesForScreen(actualNextScreen.id) : void 0,
738
720
  layouts: { screen: dimensions },
739
721
  insets,
740
- closing: currentRoute?.closing || false,
741
- screenStyleInterpolator: nextRoute?.screenStyleInterpolator || currentRoute?.screenStyleInterpolator || noopinterpolator,
722
+ closing: currentScreen?.closing || false,
723
+ screenStyleInterpolator: actualNextScreen?.screenStyleInterpolator || currentScreen?.screenStyleInterpolator || noopinterpolator,
742
724
  gestureDetector: panGesture
743
725
  };
744
726
  }, [
745
727
  key,
746
- currentRoute,
747
- nextRoute,
728
+ currentScreen,
729
+ actualNextScreen,
748
730
  dimensions,
749
731
  insets,
750
732
  panGesture,
751
- progressFallback,
752
- gestureDraggingFallback,
753
- gestureXFallback,
754
- gestureYFallback,
755
- normalizedGestureXFallback,
756
- normalizedGestureYFallback
733
+ getAnimationValuesForScreen
757
734
  ]);
758
735
  };
759
736
  var _useScreenAnimation = () => {
@@ -776,24 +753,36 @@ var createConfig = ({
776
753
  }) => {
777
754
  return {
778
755
  focus: (e) => {
779
- RouteStore.updateRoute(e.target, {
756
+ const parentNavigatorKey = reactNavigation.getParent()?.getState?.()?.key;
757
+ const navigatorKey = reactNavigation.getState().key;
758
+ ScreenStore.updateScreen(e.target, {
780
759
  id: e.target,
781
760
  name: route.name,
782
761
  status: 1,
783
762
  closing: false,
763
+ navigatorKey,
764
+ parentNavigatorKey,
784
765
  ...config
785
766
  });
786
767
  },
787
768
  beforeRemove: (e) => {
769
+ const shouldSkipPreventDefault2 = ScreenStore.shouldSkipPreventDefault(
770
+ e.target,
771
+ reactNavigation.getState()
772
+ );
773
+ if (shouldSkipPreventDefault2) {
774
+ ScreenStore.removeScreen(e.target);
775
+ return;
776
+ }
788
777
  e.preventDefault();
789
778
  const handleFinish = (finished) => {
790
779
  if (!finished) return;
791
780
  if (reactNavigation.canGoBack()) {
792
781
  reactNavigation.dispatch(e.data?.action);
793
- RouteStore.removeRoute(e.target);
782
+ ScreenStore.removeScreen(e.target);
794
783
  }
795
784
  };
796
- RouteStore.updateRoute(e.target, {
785
+ ScreenStore.updateScreen(e.target, {
797
786
  status: 0,
798
787
  closing: true,
799
788
  onAnimationFinish: handleFinish
@@ -803,13 +792,13 @@ var createConfig = ({
803
792
  };
804
793
 
805
794
  // src/utils/create-transition-component.tsx
806
- var import_react5 = require("react");
795
+ var import_react4 = require("react");
807
796
  var import_react_native2 = require("react-native");
808
797
  var import_react_native_gesture_handler2 = require("react-native-gesture-handler");
809
798
  var import_react_native_reanimated7 = __toESM(require("react-native-reanimated"));
810
799
 
811
800
  // src/hooks/use-skip-first-frame.tsx
812
- var import_react4 = require("react");
801
+ var import_react3 = require("react");
813
802
  var import_react_native_reanimated6 = require("react-native-reanimated");
814
803
  var useSkipFirstFrame = () => {
815
804
  const opacity = (0, import_react_native_reanimated6.useSharedValue)(0);
@@ -819,7 +808,7 @@ var useSkipFirstFrame = () => {
819
808
  opacity: opacity.value
820
809
  };
821
810
  });
822
- (0, import_react4.useEffect)(() => {
811
+ (0, import_react3.useEffect)(() => {
823
812
  requestAnimationFrame(() => {
824
813
  opacity.value = 1;
825
814
  });
@@ -831,7 +820,7 @@ var useSkipFirstFrame = () => {
831
820
  var import_jsx_runtime = require("react/jsx-runtime");
832
821
  function createTransitionComponent(Wrapped) {
833
822
  const AnimatedComponent = import_react_native_reanimated7.default.createAnimatedComponent(Wrapped);
834
- const Inner = (0, import_react5.forwardRef)(
823
+ const Inner = (0, import_react4.forwardRef)(
835
824
  (props, ref) => {
836
825
  const { children, style, ...rest } = props;
837
826
  const {
@@ -877,7 +866,7 @@ function createTransitionComponent(Wrapped) {
877
866
  }
878
867
  );
879
868
  Inner.displayName = `Transition(${Wrapped.displayName || Wrapped.name || "Component"})`;
880
- return (0, import_react5.memo)(Inner);
869
+ return (0, import_react4.memo)(Inner);
881
870
  }
882
871
 
883
872
  // src/utils/default-screen-options.ts