@react-navigation/elements 3.0.0-alpha.3 → 3.0.0-alpha.30

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 (177) hide show
  1. package/lib/module/ActivityView.js +90 -0
  2. package/lib/module/ActivityView.js.map +1 -0
  3. package/lib/module/ActivityView.native.js +67 -0
  4. package/lib/module/ActivityView.native.js.map +1 -0
  5. package/lib/module/Badge.js +5 -4
  6. package/lib/module/Badge.js.map +1 -1
  7. package/lib/module/Button.js +91 -13
  8. package/lib/module/Button.js.map +1 -1
  9. package/lib/module/Color.js +552 -4
  10. package/lib/module/Color.js.map +1 -1
  11. package/lib/module/Container.js +11 -1
  12. package/lib/module/Container.js.map +1 -1
  13. package/lib/module/Header/Header.js +26 -11
  14. package/lib/module/Header/Header.js.map +1 -1
  15. package/lib/module/Header/HeaderBackButton.js +27 -13
  16. package/lib/module/Header/HeaderBackButton.js.map +1 -1
  17. package/lib/module/Header/HeaderButton.js +4 -5
  18. package/lib/module/Header/HeaderButton.js.map +1 -1
  19. package/lib/module/Header/HeaderIcon.js +29 -10
  20. package/lib/module/Header/HeaderIcon.js.map +1 -1
  21. package/lib/module/Header/HeaderSearchBar.js +31 -24
  22. package/lib/module/Header/HeaderSearchBar.js.map +1 -1
  23. package/lib/module/Header/getHeaderTitle.js.map +1 -1
  24. package/lib/module/Header/useHeaderHeight.js +1 -1
  25. package/lib/module/Header/useHeaderHeight.js.map +1 -1
  26. package/lib/module/Label/getLabel.js.map +1 -1
  27. package/lib/module/PlatformColor.js +1 -0
  28. package/lib/module/PlatformColor.js.map +1 -1
  29. package/lib/module/PlatformColor.native.js +1 -1
  30. package/lib/module/PlatformColor.native.js.map +1 -1
  31. package/lib/module/PlatformPressable.js +14 -5
  32. package/lib/module/PlatformPressable.js.map +1 -1
  33. package/lib/module/SafeAreaProviderCompat.js +1 -1
  34. package/lib/module/SafeAreaProviderCompat.js.map +1 -1
  35. package/lib/module/Screen.js +31 -18
  36. package/lib/module/Screen.js.map +1 -1
  37. package/lib/module/index.js +1 -7
  38. package/lib/module/index.js.map +1 -1
  39. package/lib/module/internal.js +1 -1
  40. package/lib/module/internal.js.map +1 -1
  41. package/lib/module/useFrameSize.js +1 -1
  42. package/lib/module/useFrameSize.js.map +1 -1
  43. package/lib/typescript/src/ActivityView.d.ts +31 -0
  44. package/lib/typescript/src/ActivityView.d.ts.map +1 -0
  45. package/lib/typescript/src/ActivityView.native.d.ts +3 -0
  46. package/lib/typescript/src/ActivityView.native.d.ts.map +1 -0
  47. package/lib/typescript/src/Badge.d.ts +3 -3
  48. package/lib/typescript/src/Badge.d.ts.map +1 -1
  49. package/lib/typescript/src/Button.d.ts +35 -4
  50. package/lib/typescript/src/Button.d.ts.map +1 -1
  51. package/lib/typescript/src/Color.d.ts +4 -4
  52. package/lib/typescript/src/Color.d.ts.map +1 -1
  53. package/lib/typescript/src/Container.d.ts +7 -4
  54. package/lib/typescript/src/Container.d.ts.map +1 -1
  55. package/lib/typescript/src/Header/Header.d.ts +2 -2
  56. package/lib/typescript/src/Header/Header.d.ts.map +1 -1
  57. package/lib/typescript/src/Header/HeaderBackButton.d.ts +1 -1
  58. package/lib/typescript/src/Header/HeaderBackButton.d.ts.map +1 -1
  59. package/lib/typescript/src/Header/HeaderBackground.d.ts +3 -3
  60. package/lib/typescript/src/Header/HeaderBackground.d.ts.map +1 -1
  61. package/lib/typescript/src/Header/HeaderButton.d.ts +6 -1
  62. package/lib/typescript/src/Header/HeaderButton.d.ts.map +1 -1
  63. package/lib/typescript/src/Header/HeaderIcon.d.ts +8 -4
  64. package/lib/typescript/src/Header/HeaderIcon.d.ts.map +1 -1
  65. package/lib/typescript/src/Header/HeaderSearchBar.d.ts +9 -6
  66. package/lib/typescript/src/Header/HeaderSearchBar.d.ts.map +1 -1
  67. package/lib/typescript/src/Header/HeaderTitle.d.ts +3 -3
  68. package/lib/typescript/src/Header/HeaderTitle.d.ts.map +1 -1
  69. package/lib/typescript/src/Header/getHeaderTitle.d.ts +1 -1
  70. package/lib/typescript/src/Header/getHeaderTitle.d.ts.map +1 -1
  71. package/lib/typescript/src/Label/getLabel.d.ts +2 -2
  72. package/lib/typescript/src/Label/getLabel.d.ts.map +1 -1
  73. package/lib/typescript/src/PlatformColor.d.ts +1 -0
  74. package/lib/typescript/src/PlatformColor.d.ts.map +1 -1
  75. package/lib/typescript/src/PlatformColor.native.d.ts +1 -1
  76. package/lib/typescript/src/PlatformColor.native.d.ts.map +1 -1
  77. package/lib/typescript/src/PlatformPressable.d.ts +12 -15
  78. package/lib/typescript/src/PlatformPressable.d.ts.map +1 -1
  79. package/lib/typescript/src/Screen.d.ts +6 -6
  80. package/lib/typescript/src/Screen.d.ts.map +1 -1
  81. package/lib/typescript/src/index.d.ts +1 -2
  82. package/lib/typescript/src/index.d.ts.map +1 -1
  83. package/lib/typescript/src/internal.d.ts +1 -1
  84. package/lib/typescript/src/internal.d.ts.map +1 -1
  85. package/lib/typescript/src/types.d.ts +119 -69
  86. package/lib/typescript/src/types.d.ts.map +1 -1
  87. package/package.json +20 -20
  88. package/src/ActivityView.native.tsx +90 -0
  89. package/src/ActivityView.tsx +129 -0
  90. package/src/Badge.tsx +9 -7
  91. package/src/Button.tsx +151 -14
  92. package/src/Color.tsx +726 -8
  93. package/src/Container.tsx +20 -4
  94. package/src/Header/Header.tsx +43 -20
  95. package/src/Header/HeaderBackButton.tsx +31 -17
  96. package/src/Header/HeaderBackground.tsx +3 -3
  97. package/src/Header/HeaderButton.tsx +16 -18
  98. package/src/Header/HeaderIcon.tsx +49 -9
  99. package/src/Header/HeaderSearchBar.tsx +50 -44
  100. package/src/Header/HeaderTitle.tsx +3 -3
  101. package/src/Header/getHeaderTitle.tsx +4 -1
  102. package/src/Header/useHeaderHeight.tsx +1 -1
  103. package/src/Label/getLabel.tsx +1 -1
  104. package/src/PlatformColor.native.tsx +1 -1
  105. package/src/PlatformColor.tsx +4 -0
  106. package/src/PlatformPressable.tsx +40 -29
  107. package/src/SafeAreaProviderCompat.tsx +1 -1
  108. package/src/Screen.tsx +40 -27
  109. package/src/index.tsx +1 -16
  110. package/src/internal.tsx +1 -1
  111. package/src/types.tsx +153 -76
  112. package/src/useFrameSize.tsx +1 -1
  113. package/lib/module/Lazy.js +0 -42
  114. package/lib/module/Lazy.js.map +0 -1
  115. package/lib/module/assets/back-icon.ios.svg +0 -4
  116. package/lib/module/assets/back-icon@1x.android.png +0 -0
  117. package/lib/module/assets/back-icon@1x.ios.png +0 -0
  118. package/lib/module/assets/back-icon@2x.android.png +0 -0
  119. package/lib/module/assets/back-icon@2x.ios.png +0 -0
  120. package/lib/module/assets/back-icon@3x.android.png +0 -0
  121. package/lib/module/assets/back-icon@3x.ios.png +0 -0
  122. package/lib/module/assets/back-icon@4x.android.png +0 -0
  123. package/lib/module/assets/back-icon@4x.ios.png +0 -0
  124. package/lib/module/assets/clear-icon@1x.png +0 -0
  125. package/lib/module/assets/clear-icon@2x.png +0 -0
  126. package/lib/module/assets/clear-icon@3x.png +0 -0
  127. package/lib/module/assets/clear-icon@4x.png +0 -0
  128. package/lib/module/assets/close-icon@1x.png +0 -0
  129. package/lib/module/assets/close-icon@2x.png +0 -0
  130. package/lib/module/assets/close-icon@3x.png +0 -0
  131. package/lib/module/assets/close-icon@4x.png +0 -0
  132. package/lib/module/assets/search-icon-legacy@1x.ios.png +0 -0
  133. package/lib/module/assets/search-icon-legacy@2x.ios.png +0 -0
  134. package/lib/module/assets/search-icon-legacy@3x.ios.png +0 -0
  135. package/lib/module/assets/search-icon-legacy@4x.ios.png +0 -0
  136. package/lib/module/assets/search-icon.ios.svg +0 -4
  137. package/lib/module/assets/search-icon@1x.android.png +0 -0
  138. package/lib/module/assets/search-icon@1x.ios.png +0 -0
  139. package/lib/module/assets/search-icon@2x.android.png +0 -0
  140. package/lib/module/assets/search-icon@2x.ios.png +0 -0
  141. package/lib/module/assets/search-icon@3x.android.png +0 -0
  142. package/lib/module/assets/search-icon@3x.ios.png +0 -0
  143. package/lib/module/assets/search-icon@4x.android.png +0 -0
  144. package/lib/module/assets/search-icon@4x.ios.png +0 -0
  145. package/lib/typescript/src/Lazy.d.ts +0 -31
  146. package/lib/typescript/src/Lazy.d.ts.map +0 -1
  147. package/src/Lazy.tsx +0 -59
  148. package/src/assets/back-icon.ios.svg +0 -4
  149. package/src/assets/back-icon@1x.android.png +0 -0
  150. package/src/assets/back-icon@1x.ios.png +0 -0
  151. package/src/assets/back-icon@2x.android.png +0 -0
  152. package/src/assets/back-icon@2x.ios.png +0 -0
  153. package/src/assets/back-icon@3x.android.png +0 -0
  154. package/src/assets/back-icon@3x.ios.png +0 -0
  155. package/src/assets/back-icon@4x.android.png +0 -0
  156. package/src/assets/back-icon@4x.ios.png +0 -0
  157. package/src/assets/clear-icon@1x.png +0 -0
  158. package/src/assets/clear-icon@2x.png +0 -0
  159. package/src/assets/clear-icon@3x.png +0 -0
  160. package/src/assets/clear-icon@4x.png +0 -0
  161. package/src/assets/close-icon@1x.png +0 -0
  162. package/src/assets/close-icon@2x.png +0 -0
  163. package/src/assets/close-icon@3x.png +0 -0
  164. package/src/assets/close-icon@4x.png +0 -0
  165. package/src/assets/search-icon-legacy@1x.ios.png +0 -0
  166. package/src/assets/search-icon-legacy@2x.ios.png +0 -0
  167. package/src/assets/search-icon-legacy@3x.ios.png +0 -0
  168. package/src/assets/search-icon-legacy@4x.ios.png +0 -0
  169. package/src/assets/search-icon.ios.svg +0 -4
  170. package/src/assets/search-icon@1x.android.png +0 -0
  171. package/src/assets/search-icon@1x.ios.png +0 -0
  172. package/src/assets/search-icon@2x.android.png +0 -0
  173. package/src/assets/search-icon@2x.ios.png +0 -0
  174. package/src/assets/search-icon@3x.android.png +0 -0
  175. package/src/assets/search-icon@3x.ios.png +0 -0
  176. package/src/assets/search-icon@4x.android.png +0 -0
  177. package/src/assets/search-icon@4x.ios.png +0 -0
@@ -1,4 +1,4 @@
1
- import { useTheme } from '@react-navigation/native';
1
+ import { IsFocusedContext, useTheme } from '@react-navigation/native';
2
2
  import * as React from 'react';
3
3
  import {
4
4
  Animated,
@@ -19,15 +19,20 @@ type HoverEffectProps = {
19
19
  };
20
20
 
21
21
  export type Props = Omit<PressableProps, 'style' | 'onPress'> & {
22
- href?: string;
23
- pressColor?: ColorValue;
24
- pressOpacity?: number;
25
- hoverEffect?: HoverEffectProps;
26
- style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
27
- onPress?: (
28
- e: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent
29
- ) => void;
22
+ href?: string | undefined;
23
+ pressColor?: ColorValue | undefined;
24
+ pressOpacity?: number | undefined;
25
+ hoverEffect?: HoverEffectProps | undefined;
26
+ style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>> | undefined;
27
+ onPress?:
28
+ | ((
29
+ e:
30
+ | React.MouseEvent<HTMLAnchorElement, MouseEvent>
31
+ | GestureResponderEvent
32
+ ) => void)
33
+ | undefined;
30
34
  children: React.ReactNode;
35
+ ref?: React.Ref<React.ComponentRef<typeof AnimatedPressable>>;
31
36
  };
32
37
 
33
38
  const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
@@ -41,22 +46,20 @@ const useNativeDriver = Platform.OS !== 'web';
41
46
  /**
42
47
  * PlatformPressable provides an abstraction on top of Pressable to handle platform differences.
43
48
  */
44
- function PlatformPressableInternal(
45
- {
46
- disabled,
47
- onPress,
48
- onPressIn,
49
- onPressOut,
50
- android_ripple,
51
- pressColor,
52
- pressOpacity = 0.3,
53
- hoverEffect,
54
- style,
55
- children,
56
- ...rest
57
- }: Props,
58
- ref: React.Ref<React.ComponentRef<typeof AnimatedPressable>>
59
- ) {
49
+ export function PlatformPressable({
50
+ disabled,
51
+ onPress,
52
+ onPressIn,
53
+ onPressOut,
54
+ android_ripple,
55
+ pressColor,
56
+ pressOpacity = 0.3,
57
+ hoverEffect,
58
+ style,
59
+ children,
60
+ ref,
61
+ ...rest
62
+ }: Props) {
60
63
  const { dark } = useTheme();
61
64
  const [opacity] = React.useState(() => new Animated.Value(1));
62
65
 
@@ -115,10 +118,22 @@ function PlatformPressableInternal(
115
118
  onPressOut?.(e);
116
119
  };
117
120
 
121
+ let focusable: boolean | undefined;
122
+
123
+ if (disabled) {
124
+ focusable = false;
125
+ } else if (Platform.isTV) {
126
+ // On `react-native-tvos`, the focus engine doesn't respect `aria-hidden` on screens
127
+ // So we hide them from TV focus engine for unfocused screens
128
+ focusable = React.use(IsFocusedContext);
129
+ }
130
+
118
131
  return (
119
132
  <AnimatedPressable
120
133
  ref={ref}
121
134
  accessible
135
+ disabled={disabled}
136
+ focusable={focusable}
122
137
  role={Platform.OS === 'web' && rest.href != null ? 'link' : 'button'}
123
138
  onPress={disabled ? undefined : handlePress}
124
139
  onPressIn={disabled ? undefined : handlePressIn}
@@ -156,10 +171,6 @@ function PlatformPressableInternal(
156
171
  );
157
172
  }
158
173
 
159
- export const PlatformPressable = React.forwardRef(PlatformPressableInternal);
160
-
161
- PlatformPressable.displayName = 'PlatformPressable';
162
-
163
174
  const css = String.raw;
164
175
 
165
176
  const CLASS_NAME = `__react-navigation_elements_Pressable_hover`;
@@ -34,7 +34,7 @@ const initialMetrics =
34
34
  : initialWindowMetrics;
35
35
 
36
36
  export function SafeAreaProviderCompat({ children, style }: Props) {
37
- const insets = React.useContext(SafeAreaInsetsContext);
37
+ const insets = React.use(SafeAreaInsetsContext);
38
38
 
39
39
  return (
40
40
  <FrameSizeProvider
package/src/Screen.tsx CHANGED
@@ -6,15 +6,10 @@ import {
6
6
  useTheme,
7
7
  } from '@react-navigation/native';
8
8
  import * as React from 'react';
9
- import {
10
- Animated,
11
- type StyleProp,
12
- StyleSheet,
13
- View,
14
- type ViewStyle,
15
- } from 'react-native';
9
+ import { StyleSheet, View } from 'react-native';
16
10
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
17
11
 
12
+ import { Container } from './Container';
18
13
  import { getDefaultHeaderHeight } from './Header/getDefaultHeaderHeight';
19
14
  import { HeaderHeightContext } from './Header/HeaderHeightContext';
20
15
  import { HeaderShownContext } from './Header/HeaderShownContext';
@@ -22,14 +17,14 @@ import { useFrameSize } from './useFrameSize';
22
17
 
23
18
  type Props = {
24
19
  focused: boolean;
25
- modal?: boolean;
20
+ modal?: boolean | undefined;
26
21
  navigation: NavigationProp<ParamListBase>;
27
22
  route: RouteProp<ParamListBase>;
28
23
  header: React.ReactNode;
29
- headerShown?: boolean;
30
- headerStatusBarHeight?: number;
31
- headerTransparent?: boolean;
32
- style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
24
+ headerShown?: boolean | undefined;
25
+ headerStatusBarHeight?: number | undefined;
26
+ headerTransparent?: boolean | undefined;
27
+ style?: React.ComponentProps<typeof Container>['style'] | undefined;
33
28
  children: React.ReactNode;
34
29
  };
35
30
 
@@ -37,8 +32,8 @@ export function Screen(props: Props) {
37
32
  const insets = useSafeAreaInsets();
38
33
  const { colors } = useTheme();
39
34
 
40
- const isParentHeaderShown = React.useContext(HeaderShownContext);
41
- const parentHeaderHeight = React.useContext(HeaderHeightContext);
35
+ const isParentHeaderShown = React.use(HeaderShownContext);
36
+ const parentHeaderHeight = React.use(HeaderHeightContext);
42
37
 
43
38
  const {
44
39
  focused,
@@ -72,25 +67,43 @@ export function Screen(props: Props) {
72
67
  }, [route.name]);
73
68
 
74
69
  return (
75
- <Animated.View
76
- aria-hidden={!focused}
77
- style={[styles.container, { backgroundColor: colors.background }, style]}
70
+ <Container
71
+ inert={!focused}
72
+ style={{
73
+ ...styles.container,
74
+ backgroundColor: colors.background,
75
+ ...style,
76
+ }}
78
77
  // On Fabric we need to disable collapsing for the background to ensure
79
78
  // that we won't render unnecessary views due to the view flattening.
80
- collapsable={false}
79
+ // Container sets `collapsable` to `false` internally
80
+ // This comment is left to make sure refactors don't remove it by mistake
81
81
  >
82
82
  {headerShown ? (
83
83
  <NavigationProvider navigation={navigation} route={route}>
84
84
  <View
85
- ref={headerRef}
86
- onLayout={(e) => {
87
- const { height } = e.nativeEvent.layout;
88
-
89
- setHeaderHeight(height);
90
- }}
91
- style={[styles.header, headerTransparent ? styles.absolute : null]}
85
+ style={[
86
+ styles.header,
87
+ headerTransparent
88
+ ? [
89
+ styles.absolute,
90
+ // Specify an explicit min height for Android screen readers
91
+ { minHeight: headerHeight },
92
+ ]
93
+ : null,
94
+ ]}
92
95
  >
93
- {header}
96
+ <View
97
+ ref={headerRef}
98
+ onLayout={(e) => {
99
+ const { height } = e.nativeEvent.layout;
100
+
101
+ setHeaderHeight(height);
102
+ }}
103
+ style={{ pointerEvents: 'box-none' }}
104
+ >
105
+ {header}
106
+ </View>
94
107
  </View>
95
108
  </NavigationProvider>
96
109
  ) : null}
@@ -105,7 +118,7 @@ export function Screen(props: Props) {
105
118
  </HeaderHeightContext.Provider>
106
119
  </HeaderShownContext.Provider>
107
120
  </View>
108
- </Animated.View>
121
+ </Container>
109
122
  );
110
123
  }
111
124
 
package/src/index.tsx CHANGED
@@ -1,9 +1,3 @@
1
- import backIcon from './assets/back-icon.png';
2
- import clearIcon from './assets/clear-icon.png';
3
- import closeIcon from './assets/close-icon.png';
4
- import searchIcon from './assets/search-icon.png';
5
- import searchIconLegacy from './assets/search-icon-legacy.png';
6
-
7
1
  export { Badge } from './Badge';
8
2
  export { Button } from './Button';
9
3
  export { getDefaultSidebarWidth } from './getDefaultSidebarWidth';
@@ -22,14 +16,5 @@ export { getLabel } from './Label/getLabel';
22
16
  export { Label } from './Label/Label';
23
17
  export { PlatformPressable } from './PlatformPressable';
24
18
  export { Text } from './Text';
25
- export { useFrameSize } from './useFrameSize';
26
-
27
- export const Assets = [
28
- backIcon,
29
- searchIcon,
30
- searchIconLegacy,
31
- closeIcon,
32
- clearIcon,
33
- ];
34
-
35
19
  export * from './types';
20
+ export { useFrameSize } from './useFrameSize';
package/src/internal.tsx CHANGED
@@ -1,6 +1,6 @@
1
+ export { ActivityView } from './ActivityView';
1
2
  export { Color } from './Color';
2
3
  export { Container, type Props as ContainerProps } from './Container';
3
- export { Lazy } from './Lazy';
4
4
  export { isLiquidGlassSupported } from './LiquidGlassView';
5
5
  export { MissingIcon } from './MissingIcon';
6
6
  export { SafeAreaProviderCompat } from './SafeAreaProviderCompat';