@react-navigation/stack 7.0.0-alpha.7 → 7.0.0-alpha.9

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.
Files changed (58) hide show
  1. package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  2. package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -1
  3. package/lib/commonjs/navigators/createStackNavigator.js +4 -0
  4. package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
  5. package/lib/commonjs/views/Header/Header.js.map +1 -1
  6. package/lib/commonjs/views/Header/HeaderContainer.js +1 -1
  7. package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
  8. package/lib/commonjs/views/Screens.js.map +1 -1
  9. package/lib/commonjs/views/Stack/Card.js +17 -9
  10. package/lib/commonjs/views/Stack/Card.js.map +1 -1
  11. package/lib/commonjs/views/Stack/CardContainer.js +4 -5
  12. package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
  13. package/lib/commonjs/views/Stack/CardStack.js +32 -21
  14. package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
  15. package/lib/commonjs/views/Stack/StackView.js +20 -26
  16. package/lib/commonjs/views/Stack/StackView.js.map +1 -1
  17. package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  18. package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
  19. package/lib/module/navigators/createStackNavigator.js +4 -0
  20. package/lib/module/navigators/createStackNavigator.js.map +1 -1
  21. package/lib/module/views/Header/Header.js.map +1 -1
  22. package/lib/module/views/Header/HeaderContainer.js +2 -2
  23. package/lib/module/views/Header/HeaderContainer.js.map +1 -1
  24. package/lib/module/views/Screens.js.map +1 -1
  25. package/lib/module/views/Stack/Card.js +17 -9
  26. package/lib/module/views/Stack/Card.js.map +1 -1
  27. package/lib/module/views/Stack/CardContainer.js +5 -6
  28. package/lib/module/views/Stack/CardContainer.js.map +1 -1
  29. package/lib/module/views/Stack/CardStack.js +32 -21
  30. package/lib/module/views/Stack/CardStack.js.map +1 -1
  31. package/lib/module/views/Stack/StackView.js +20 -26
  32. package/lib/module/views/Stack/StackView.js.map +1 -1
  33. package/lib/typescript/src/navigators/createStackNavigator.d.ts +1 -1
  34. package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -1
  35. package/lib/typescript/src/types.d.ts +33 -3
  36. package/lib/typescript/src/types.d.ts.map +1 -1
  37. package/lib/typescript/src/views/Screens.d.ts +1 -0
  38. package/lib/typescript/src/views/Screens.d.ts.map +1 -1
  39. package/lib/typescript/src/views/Stack/Card.d.ts +1 -0
  40. package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -1
  41. package/lib/typescript/src/views/Stack/CardContainer.d.ts +2 -4
  42. package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -1
  43. package/lib/typescript/src/views/Stack/CardStack.d.ts +1 -3
  44. package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -1
  45. package/lib/typescript/src/views/Stack/StackView.d.ts +5 -77
  46. package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -1
  47. package/package.json +18 -18
  48. package/src/TransitionConfigs/CardStyleInterpolators.tsx +5 -5
  49. package/src/TransitionConfigs/TransitionPresets.tsx +2 -2
  50. package/src/navigators/createStackNavigator.tsx +4 -1
  51. package/src/types.tsx +34 -3
  52. package/src/views/Header/Header.tsx +2 -2
  53. package/src/views/Header/HeaderContainer.tsx +4 -4
  54. package/src/views/Screens.tsx +1 -0
  55. package/src/views/Stack/Card.tsx +32 -15
  56. package/src/views/Stack/CardContainer.tsx +6 -5
  57. package/src/views/Stack/CardStack.tsx +190 -161
  58. package/src/views/Stack/StackView.tsx +13 -12
@@ -4,7 +4,7 @@ import {
4
4
  NavigationRouteContext,
5
5
  type ParamListBase,
6
6
  type Route,
7
- useLinkTools,
7
+ useLinkBuilder,
8
8
  } from '@react-navigation/native';
9
9
  import * as React from 'react';
10
10
  import {
@@ -54,7 +54,7 @@ export function HeaderContainer({
54
54
  }: Props) {
55
55
  const focusedRoute = getFocusedRoute();
56
56
  const parentHeaderBack = React.useContext(HeaderBackContext);
57
- const { buildHref } = useLinkTools();
57
+ const { buildHref } = useLinkBuilder();
58
58
 
59
59
  return (
60
60
  <Animated.View pointerEvents="box-none" style={style}>
@@ -139,8 +139,8 @@ export function HeaderContainer({
139
139
  nextHeaderlessGestureDirection === 'vertical-inverted'
140
140
  ? forSlideUp
141
141
  : nextHeaderlessGestureDirection === 'horizontal-inverted'
142
- ? forSlideRight
143
- : forSlideLeft
142
+ ? forSlideRight
143
+ : forSlideLeft
144
144
  : headerStyleInterpolator
145
145
  : forNoAnimation,
146
146
  };
@@ -32,6 +32,7 @@ export const MaybeScreen = ({
32
32
  active: 0 | 1 | Animated.AnimatedInterpolation<0 | 1>;
33
33
  children: React.ReactNode;
34
34
  freezeOnBlur?: boolean;
35
+ homeIndicatorHidden?: boolean;
35
36
  }) => {
36
37
  if (Screens != null) {
37
38
  return (
@@ -61,6 +61,7 @@ type Props = ViewProps & {
61
61
  open: TransitionSpec;
62
62
  close: TransitionSpec;
63
63
  };
64
+ preloaded: boolean;
64
65
  styleInterpolator: StackCardStyleInterpolator;
65
66
  containerStyle?: StyleProp<ViewStyle>;
66
67
  contentStyle?: StyleProp<ViewStyle>;
@@ -104,7 +105,11 @@ export class Card extends React.Component<Props> {
104
105
  };
105
106
 
106
107
  componentDidMount() {
107
- this.animate({ closing: this.props.closing });
108
+ if (!this.props.preloaded) {
109
+ this.animate({
110
+ closing: this.props.closing,
111
+ });
112
+ }
108
113
  this.isCurrentlyMounted = true;
109
114
  }
110
115
 
@@ -133,7 +138,7 @@ export class Card extends React.Component<Props> {
133
138
  this.lastToValue !== toValue
134
139
  ) {
135
140
  // We need to trigger the animation when route was closed
136
- // Thr route might have been closed by a `POP` action or by a gesture
141
+ // The route might have been closed by a `POP` action or by a gesture
137
142
  // When route was closed due to a gesture, the animation would've happened already
138
143
  // It's still important to trigger the animation so that `onClose` is called
139
144
  // If `onClose` is not called, cleanup step won't be performed for gestures
@@ -142,7 +147,7 @@ export class Card extends React.Component<Props> {
142
147
  }
143
148
 
144
149
  componentWillUnmount() {
145
- this.props.gesture.stopAnimation();
150
+ this.props.gesture?.stopAnimation();
146
151
  this.isCurrentlyMounted = false;
147
152
  this.handleEndInteraction();
148
153
  }
@@ -178,7 +183,7 @@ export class Card extends React.Component<Props> {
178
183
  closing: boolean;
179
184
  velocity?: number;
180
185
  }) => {
181
- const { gesture, transitionSpec, onOpen, onClose, onTransition } =
186
+ const { transitionSpec, onOpen, onClose, onTransition, gesture } =
182
187
  this.props;
183
188
 
184
189
  const toValue = this.getAnimateToValue({
@@ -232,13 +237,15 @@ export class Card extends React.Component<Props> {
232
237
  layout,
233
238
  gestureDirection,
234
239
  direction,
240
+ preloaded,
235
241
  }: {
236
242
  closing?: boolean;
237
243
  layout: Layout;
238
244
  gestureDirection: GestureDirection;
239
245
  direction: LocaleDirection;
246
+ preloaded: boolean;
240
247
  }) => {
241
- if (!closing) {
248
+ if (!closing && !preloaded) {
242
249
  return 0;
243
250
  }
244
251
 
@@ -288,7 +295,8 @@ export class Card extends React.Component<Props> {
288
295
  this.handleStartInteraction();
289
296
  onGestureBegin?.();
290
297
  break;
291
- case GestureState.CANCELLED: {
298
+ case GestureState.CANCELLED:
299
+ case GestureState.FAILED: {
292
300
  this.isSwiping.setValue(FALSE);
293
301
  this.handleEndInteraction();
294
302
 
@@ -298,7 +306,10 @@ export class Card extends React.Component<Props> {
298
306
  ? nativeEvent.velocityY
299
307
  : nativeEvent.velocityX;
300
308
 
301
- this.animate({ closing: this.props.closing, velocity });
309
+ this.animate({
310
+ closing: this.props.closing,
311
+ velocity,
312
+ });
302
313
 
303
314
  onGestureCanceled?.();
304
315
  break;
@@ -397,9 +408,9 @@ export class Card extends React.Component<Props> {
397
408
  gestureResponseDistance !== undefined
398
409
  ? gestureResponseDistance
399
410
  : gestureDirection === 'vertical' ||
400
- gestureDirection === 'vertical-inverted'
401
- ? GESTURE_RESPONSE_DISTANCE_VERTICAL
402
- : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;
411
+ gestureDirection === 'vertical-inverted'
412
+ ? GESTURE_RESPONSE_DISTANCE_VERTICAL
413
+ : GESTURE_RESPONSE_DISTANCE_HORIZONTAL;
403
414
 
404
415
  if (gestureDirection === 'vertical') {
405
416
  return {
@@ -529,7 +540,13 @@ export class Card extends React.Component<Props> {
529
540
  // Make sure that this view isn't removed. If this view is removed, our style with animated value won't apply
530
541
  collapsable={false}
531
542
  />
532
- <View pointerEvents="box-none" {...rest}>
543
+ <View
544
+ pointerEvents="box-none"
545
+ // Make sure this view is not removed on the new architecture, as it causes focus loss during navigation on Android.
546
+ // This can happen when the view flattening results in different trees - due to `overflow` style changing in a parent.
547
+ collapsable={false}
548
+ {...rest}
549
+ >
533
550
  {overlayEnabled ? (
534
551
  <View pointerEvents="box-none" style={StyleSheet.absoluteFill}>
535
552
  {overlay({ style: overlayStyle })}
@@ -556,10 +573,10 @@ export class Card extends React.Component<Props> {
556
573
  gestureDirection === 'horizontal'
557
574
  ? [styles.shadowHorizontal, styles.shadowLeft]
558
575
  : gestureDirection === 'horizontal-inverted'
559
- ? [styles.shadowHorizontal, styles.shadowRight]
560
- : gestureDirection === 'vertical'
561
- ? [styles.shadowVertical, styles.shadowTop]
562
- : [styles.shadowVertical, styles.shadowBottom],
576
+ ? [styles.shadowHorizontal, styles.shadowRight]
577
+ : gestureDirection === 'vertical'
578
+ ? [styles.shadowVertical, styles.shadowTop]
579
+ : [styles.shadowVertical, styles.shadowBottom],
563
580
  { backgroundColor },
564
581
  shadowStyle,
565
582
  ]}
@@ -6,7 +6,7 @@ import {
6
6
  } from '@react-navigation/elements';
7
7
  import {
8
8
  type Route,
9
- useLinkTools,
9
+ useLinkBuilder,
10
10
  useLocale,
11
11
  useTheme,
12
12
  } from '@react-navigation/native';
@@ -28,6 +28,7 @@ type Props = {
28
28
  modal: boolean;
29
29
  layout: Layout;
30
30
  gesture: Animated.Value;
31
+ preloaded: boolean;
31
32
  scene: Scene;
32
33
  safeAreaInsetTop: number;
33
34
  safeAreaInsetRight: number;
@@ -36,7 +37,6 @@ type Props = {
36
37
  getPreviousScene: (props: { route: Route<string> }) => Scene | undefined;
37
38
  getFocusedRoute: () => Route<string>;
38
39
  renderHeader: (props: HeaderContainerProps) => React.ReactNode;
39
- renderScene: (props: { route: Route<string> }) => React.ReactNode;
40
40
  onOpenRoute: (props: { route: Route<string> }) => void;
41
41
  onCloseRoute: (props: { route: Route<string> }) => void;
42
42
  onTransitionStart: (
@@ -84,8 +84,8 @@ function CardContainerInner({
84
84
  onGestureStart,
85
85
  onTransitionEnd,
86
86
  onTransitionStart,
87
+ preloaded,
87
88
  renderHeader,
88
- renderScene,
89
89
  safeAreaInsetBottom,
90
90
  safeAreaInsetLeft,
91
91
  safeAreaInsetRight,
@@ -205,7 +205,7 @@ function CardContainerInner({
205
205
  transitionSpec,
206
206
  } = scene.descriptor.options;
207
207
 
208
- const { buildHref } = useLinkTools();
208
+ const { buildHref } = useLinkBuilder();
209
209
  const previousScene = getPreviousScene({ route: scene.descriptor.route });
210
210
 
211
211
  let backTitle: string | undefined;
@@ -252,6 +252,7 @@ function CardContainerInner({
252
252
  importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'}
253
253
  pointerEvents={active ? 'box-none' : pointerEvents}
254
254
  pageOverflowEnabled={headerMode !== 'float' && presentation !== 'modal'}
255
+ preloaded={preloaded}
255
256
  containerStyle={
256
257
  hasAbsoluteFloatHeader && headerMode !== 'screen'
257
258
  ? { marginTop: headerHeight }
@@ -294,7 +295,7 @@ function CardContainerInner({
294
295
  <HeaderHeightContext.Provider
295
296
  value={headerShown ? headerHeight : parentHeaderHeight ?? 0}
296
297
  >
297
- {renderScene({ route: scene.descriptor.route })}
298
+ {scene.descriptor.render()}
298
299
  </HeaderHeightContext.Provider>
299
300
  </HeaderShownContext.Provider>
300
301
  </HeaderBackContext.Provider>