@hero-design/rn 8.56.1 → 8.57.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.
Files changed (48) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +31 -0
  3. package/assets/fonts/hero-icons-mobile.ttf +0 -0
  4. package/es/index.js +5240 -4333
  5. package/lib/assets/fonts/hero-icons-mobile.ttf +0 -0
  6. package/lib/index.js +5239 -4332
  7. package/package.json +7 -6
  8. package/src/components/Button/StyledButton.tsx +16 -30
  9. package/src/components/Calendar/__tests__/index.spec.tsx +5 -5
  10. package/src/components/Carousel/CardCarousel.tsx +7 -10
  11. package/src/components/Carousel/__tests__/index.spec.tsx +14 -0
  12. package/src/components/DatePicker/__tests__/DatePickerCalendar.spec.tsx +32 -29
  13. package/src/components/Empty/__tests__/__snapshots__/index.spec.tsx.snap +2 -2
  14. package/src/components/Error/__tests__/__snapshots__/index.spec.tsx.snap +4 -4
  15. package/src/components/Icon/HeroIcon/glyphMap.json +1 -1
  16. package/src/components/Icon/IconList.ts +4 -0
  17. package/src/components/PinInput/index.tsx +1 -1
  18. package/src/components/Tabs/SceneView.tsx +6 -4
  19. package/src/components/Tabs/ScrollableTabs.tsx +8 -2
  20. package/src/components/Tabs/{ScrollableTabsHeader.tsx → ScrollableTabsHeader/ScrollableTabsHeader.tsx} +73 -42
  21. package/src/components/Tabs/ScrollableTabsHeader/hooks/useInitHighlightedAnimation.ts +45 -0
  22. package/src/components/Tabs/ScrollableTabsHeader/hooks/useInitUnderlinedAnimation.ts +91 -0
  23. package/src/components/Tabs/StyledScrollableTabs.tsx +14 -3
  24. package/src/components/Tabs/__tests__/ScrollableTabsHeader.spec.tsx +7 -3
  25. package/src/components/Tabs/__tests__/__snapshots__/ScrollableTabs.spec.tsx.snap +42 -6
  26. package/src/components/Tabs/__tests__/__snapshots__/ScrollableTabsHeader.spec.tsx.snap +623 -3
  27. package/src/components/Tabs/__tests__/useInitHighlightedAnimation.spec.tsx +56 -0
  28. package/src/components/Tabs/__tests__/useInitUnderlinedAnimation.spec.tsx +65 -0
  29. package/src/components/TextInput/__tests__/index.spec.tsx +148 -1
  30. package/src/components/TextInput/index.tsx +135 -57
  31. package/src/components/Toast/ToastContext.ts +20 -2
  32. package/src/components/Toast/ToastProvider.tsx +7 -4
  33. package/src/components/Typography/Body/__tests__/__snapshots__/StyledBody.tsx.snap +2 -2
  34. package/src/components/Typography/Body/__tests__/__snapshots__/index.spec.tsx.snap +2 -2
  35. package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +1 -1
  36. package/src/theme/components/typography.ts +1 -1
  37. package/types/components/Carousel/CardCarousel.d.ts +1 -0
  38. package/types/components/Icon/IconList.d.ts +1 -1
  39. package/types/components/Icon/index.d.ts +1 -1
  40. package/types/components/Icon/utils.d.ts +1 -1
  41. package/types/components/Tabs/ScrollableTabs.d.ts +4 -1
  42. package/types/components/Tabs/{ScrollableTabsHeader.d.ts → ScrollableTabsHeader/ScrollableTabsHeader.d.ts} +7 -3
  43. package/types/components/Tabs/ScrollableTabsHeader/hooks/useInitHighlightedAnimation.d.ts +9 -0
  44. package/types/components/Tabs/ScrollableTabsHeader/hooks/useInitUnderlinedAnimation.d.ts +10 -0
  45. package/types/components/Tabs/StyledScrollableTabs.d.ts +5 -1
  46. package/types/components/Tabs/index.d.ts +1 -1
  47. package/types/components/TextInput/index.d.ts +29 -1
  48. package/types/components/Toast/ToastContext.d.ts +1 -0
@@ -1,26 +1,28 @@
1
+ import { useTheme } from '@emotion/react';
1
2
  import React from 'react';
2
3
  import {
3
- TouchableWithoutFeedback,
4
4
  FlatList,
5
- Animated,
5
+ Platform,
6
6
  StyleProp,
7
- ViewStyle,
7
+ TouchableWithoutFeedback,
8
8
  ViewProps,
9
+ ViewStyle,
9
10
  } from 'react-native';
10
- import { useTheme } from '@emotion/react';
11
+ import type { ItemType, TabType } from '..';
12
+ import Icon from '../../Icon';
13
+ import { isHeroIcon } from '../../Icon/utils';
14
+ import Typography from '../../Typography';
11
15
  import {
12
16
  HeaderTabItem,
13
- HeaderTabWrapper,
17
+ HeaderTabItemIndicator,
14
18
  HeaderTabItemOutline,
15
- HeaderTabItemWrapper,
16
19
  HeaderTabItemOutlineWrapper,
17
- } from './StyledScrollableTabs';
18
- import { useAnimatedValueArray } from './utils';
19
- import { isHeroIcon } from '../Icon/utils';
20
- import Icon from '../Icon';
21
- import Typography from '../Typography';
22
- import type { ItemType, TabType } from '.';
23
- import TabWithBadge from './TabWithBadge';
20
+ HeaderTabItemWrapper,
21
+ HeaderTabWrapper,
22
+ } from '../StyledScrollableTabs';
23
+ import TabWithBadge from '../TabWithBadge';
24
+ import useInitHighlightedAnimation from './hooks/useInitHighlightedAnimation';
25
+ import useInitUnderlinedAnimation from './hooks/useInitUnderlinedAnimation';
24
26
 
25
27
  const getTabItem = ({
26
28
  item,
@@ -87,6 +89,10 @@ export interface ScrollableTabHeaderProps extends ViewProps {
87
89
  right: number;
88
90
  left: number;
89
91
  };
92
+ /**
93
+ * Variant of the tab header
94
+ */
95
+ variant?: 'underlined' | 'highlighted';
90
96
  }
91
97
  const ScrollableTabHeader = ({
92
98
  onTabPress,
@@ -95,12 +101,25 @@ const ScrollableTabHeader = ({
95
101
  barStyle,
96
102
  testID,
97
103
  insets = { top: 0, bottom: 0, right: 0, left: 0 },
104
+ variant = 'highlighted',
98
105
  }: ScrollableTabHeaderProps) => {
99
- const flatListRef = React.useRef<FlatList>(null);
100
106
  const theme = useTheme();
101
- const tabsAnims = useAnimatedValueArray(
102
- tabs.map((_, i) => (i === selectedIndex ? 1 : 0))
103
- );
107
+ const flatListRef = React.useRef<FlatList>(null);
108
+
109
+ // Init underlined animation data
110
+ const { underlinedTranslateX, underlinedOpacity } =
111
+ useInitUnderlinedAnimation({
112
+ tabsLength: tabs.length,
113
+ selectedIndex,
114
+ variant,
115
+ });
116
+
117
+ // Init highlighted animation data
118
+ const { tabsAnims } = useInitHighlightedAnimation({
119
+ selectedIndex,
120
+ tabsLength: tabs.length,
121
+ variant,
122
+ });
104
123
 
105
124
  React.useEffect(() => {
106
125
  const timeoutHandle: number | null = null;
@@ -111,19 +130,7 @@ const ScrollableTabHeader = ({
111
130
  });
112
131
  }
113
132
 
114
- const animation = Animated.parallel([
115
- ...tabs.map((_, i) =>
116
- Animated.timing(tabsAnims[i], {
117
- toValue: i === selectedIndex ? 1 : 0,
118
- duration: 150,
119
- useNativeDriver: true,
120
- })
121
- ),
122
- ]);
123
- animation.start();
124
-
125
133
  return () => {
126
- animation.stop();
127
134
  if (timeoutHandle) {
128
135
  clearTimeout(timeoutHandle);
129
136
  }
@@ -149,8 +156,20 @@ const ScrollableTabHeader = ({
149
156
  100
150
157
  );
151
158
  }}
159
+ style={
160
+ // Border styles specified in contentContainerStyle don't work
161
+ // so they need to be placed here instead on Android.
162
+ Platform.OS === 'android'
163
+ ? {
164
+ borderBottomColor: theme.__hd__.tabs.colors.headerBottom,
165
+ borderBottomWidth: theme.__hd__.tabs.sizes.indicator,
166
+ }
167
+ : undefined
168
+ }
152
169
  contentContainerStyle={{
153
170
  paddingHorizontal: theme.__hd__.tabs.space.flatListHorizontalPadding,
171
+ borderBottomColor: theme.__hd__.tabs.colors.headerBottom,
172
+ borderBottomWidth: theme.__hd__.tabs.sizes.indicator,
154
173
  }}
155
174
  renderItem={({ item: tab, index }) => {
156
175
  const {
@@ -187,22 +206,34 @@ const ScrollableTabHeader = ({
187
206
  testID={tabItemTestID}
188
207
  >
189
208
  <HeaderTabItem isFirstItem={index === 0}>
190
- <HeaderTabItemOutlineWrapper>
191
- <HeaderTabItemOutline
192
- themeActive={active}
193
- style={{
194
- flex: 1,
195
- transform: [
196
- {
197
- scaleX: outlineScale,
198
- },
199
- ],
200
- }}
201
- />
202
- </HeaderTabItemOutlineWrapper>
209
+ {variant === 'highlighted' && (
210
+ <HeaderTabItemOutlineWrapper>
211
+ <HeaderTabItemOutline
212
+ themeActive={active}
213
+ style={{
214
+ flex: 1,
215
+ transform: [
216
+ {
217
+ scaleX: outlineScale,
218
+ },
219
+ ],
220
+ }}
221
+ />
222
+ </HeaderTabItemOutlineWrapper>
223
+ )}
224
+
203
225
  <HeaderTabItemWrapper>
204
226
  <TabWithBadge config={badge} tabItem={tabItem} />
205
227
  </HeaderTabItemWrapper>
228
+
229
+ {variant === 'underlined' && (
230
+ <HeaderTabItemIndicator
231
+ style={{
232
+ opacity: underlinedOpacity[index],
233
+ transform: [{ translateX: underlinedTranslateX[index] }],
234
+ }}
235
+ />
236
+ )}
206
237
  </HeaderTabItem>
207
238
  </TouchableWithoutFeedback>
208
239
  );
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import { Animated, Platform } from 'react-native';
3
+ import { useAnimatedValueArray } from '../../utils';
4
+
5
+ const useInitHighlightedAnimation = ({
6
+ selectedIndex = 0,
7
+ tabsLength,
8
+ variant,
9
+ }: {
10
+ selectedIndex?: number;
11
+ tabsLength: number;
12
+ variant: 'underlined' | 'highlighted';
13
+ }) => {
14
+ const tabsAnims = useAnimatedValueArray(
15
+ Array.from({ length: tabsLength }).map((_, i) =>
16
+ i === selectedIndex ? 1 : 0
17
+ )
18
+ );
19
+
20
+ React.useEffect(() => {
21
+ if (variant !== 'highlighted') {
22
+ return;
23
+ }
24
+
25
+ const animation = Animated.parallel([
26
+ ...Array.from({ length: tabsLength }).map((_, i) =>
27
+ Animated.timing(tabsAnims[i], {
28
+ toValue: i === selectedIndex ? 1 : 0,
29
+ duration: 150,
30
+ useNativeDriver: Platform.OS !== 'web',
31
+ })
32
+ ),
33
+ ]);
34
+
35
+ animation.start();
36
+
37
+ return () => {
38
+ animation.stop();
39
+ };
40
+ }, [selectedIndex]);
41
+
42
+ return { tabsAnims };
43
+ };
44
+
45
+ export default useInitHighlightedAnimation;
@@ -0,0 +1,91 @@
1
+ import React from 'react';
2
+ import { Animated, Easing, Platform } from 'react-native';
3
+ import { useAnimatedValueArray } from '../../utils';
4
+
5
+ const TRANSLATE_DISTANCE = 30;
6
+
7
+ const animateOpacity = (animatedValue: Animated.Value, toValue: number) => {
8
+ return Animated.timing(animatedValue, {
9
+ toValue,
10
+ duration: 150,
11
+ easing: Easing.ease,
12
+ useNativeDriver: Platform.OS !== 'web',
13
+ });
14
+ };
15
+
16
+ const animateTranslateX = (animatedValue: Animated.Value, toValue: number) => {
17
+ return Animated.spring(animatedValue, {
18
+ toValue,
19
+ useNativeDriver: Platform.OS !== 'web',
20
+ });
21
+ };
22
+
23
+ const useInitUnderlinedAnimation = ({
24
+ tabsLength,
25
+ selectedIndex = 0,
26
+ variant,
27
+ }: {
28
+ tabsLength: number;
29
+ selectedIndex?: number;
30
+ variant: 'underlined' | 'highlighted';
31
+ }) => {
32
+ const previousIndex = React.useRef<number>(0);
33
+ const translateXAnims = useAnimatedValueArray(
34
+ Array.from({ length: tabsLength }).map(() => 0)
35
+ );
36
+
37
+ const opacityAnims = useAnimatedValueArray(
38
+ Array.from({ length: tabsLength }).map((_, i) =>
39
+ selectedIndex !== undefined && selectedIndex === i ? 1 : 0
40
+ )
41
+ );
42
+
43
+ const underlinedTranslateX = translateXAnims.map((anim) =>
44
+ anim.interpolate({
45
+ inputRange: [-1, 0, 1],
46
+ outputRange: [-TRANSLATE_DISTANCE, 0, TRANSLATE_DISTANCE],
47
+ })
48
+ );
49
+
50
+ const underlinedOpacity = opacityAnims.map((anim) =>
51
+ anim.interpolate({
52
+ inputRange: [0, 1],
53
+ outputRange: [0, 1],
54
+ })
55
+ );
56
+
57
+ React.useEffect(() => {
58
+ if (
59
+ variant === 'underlined' &&
60
+ selectedIndex !== undefined &&
61
+ previousIndex.current !== selectedIndex
62
+ ) {
63
+ // Prepare for translateX into the right position.
64
+ if (selectedIndex > previousIndex.current) {
65
+ translateXAnims[selectedIndex].setValue(-1);
66
+ } else {
67
+ translateXAnims[selectedIndex].setValue(1);
68
+ }
69
+
70
+ // Split animations into 2 sets of parallel animations to prevent race condition.
71
+ Animated.parallel([
72
+ animateOpacity(opacityAnims[selectedIndex], 1),
73
+ animateTranslateX(translateXAnims[selectedIndex], 0),
74
+ ]).start();
75
+
76
+ Animated.parallel([
77
+ animateOpacity(opacityAnims[previousIndex.current], 0),
78
+ animateTranslateX(
79
+ translateXAnims[previousIndex.current],
80
+ selectedIndex > previousIndex.current ? 1 : -1
81
+ ),
82
+ ]).start();
83
+
84
+ previousIndex.current = selectedIndex;
85
+ }
86
+ }, [selectedIndex, variant, opacityAnims, translateXAnims]);
87
+
88
+ return { underlinedTranslateX, underlinedOpacity };
89
+ };
90
+
91
+ export default useInitUnderlinedAnimation;
@@ -17,10 +17,8 @@ const ContentWrapper = styled(PagerView)({
17
17
 
18
18
  const HeaderTabWrapper = styled(View)<{
19
19
  themeInsets: { top: number; right: number; bottom: number; left: number };
20
- }>(({ theme, themeInsets }) => ({
20
+ }>(({ themeInsets }) => ({
21
21
  paddingHorizontal: Math.max(themeInsets.left, themeInsets.right),
22
- borderBottomColor: theme.__hd__.tabs.colors.headerBottom,
23
- borderBottomWidth: theme.__hd__.tabs.borderWidths.headerBottom,
24
22
  }));
25
23
 
26
24
  const HeaderTabItem = styled(Animated.View)<{ isFirstItem?: boolean }>(
@@ -47,6 +45,18 @@ const HeaderTabItemOutline = styled(Animated.View)<{ themeActive: boolean }>(
47
45
  const HeaderTabItemWrapper = styled(View)(({ theme }) => ({
48
46
  paddingHorizontal: theme.__hd__.tabs.space.outlineHorizontalPadding,
49
47
  paddingVertical: theme.__hd__.tabs.space.outlineVerticalPadding,
48
+ position: 'relative',
49
+ justifyContent: 'center',
50
+ alignItems: 'center',
51
+ }));
52
+
53
+ const HeaderTabItemIndicator = styled(Animated.View)(({ theme }) => ({
54
+ width: '100%',
55
+ height: theme.__hd__.tabs.sizes.indicator,
56
+ position: 'absolute',
57
+ bottom: theme.__hd__.tabs.space.tabIndicatorBottom,
58
+ zIndex: 999,
59
+ backgroundColor: theme.__hd__.tabs.colors.indicator,
50
60
  }));
51
61
 
52
62
  export {
@@ -58,4 +68,5 @@ export {
58
68
  HeaderTabItemOutlineWrapper,
59
69
  HeaderTabItemOutline,
60
70
  HeaderTabItemWrapper,
71
+ HeaderTabItemIndicator,
61
72
  };
@@ -4,7 +4,7 @@ import { fireEvent } from '@testing-library/react-native';
4
4
  import { SafeAreaProvider } from 'react-native-safe-area-context';
5
5
  import type { ComponentProps } from 'react';
6
6
  import renderWithTheme from '../../../testHelpers/renderWithTheme';
7
- import ScrollableTabsHeader from '../ScrollableTabsHeader';
7
+ import ScrollableTabsHeader from '../ScrollableTabsHeader/ScrollableTabsHeader';
8
8
  import type { TabType } from '..';
9
9
 
10
10
  const TestTabsComponent = (
@@ -59,10 +59,14 @@ const TestTabsComponent = (
59
59
  };
60
60
 
61
61
  describe('ScrollableTabsHeader', () => {
62
- it('renders correctly', () => {
62
+ it.each`
63
+ variant
64
+ ${'underlined'}
65
+ ${'highlighted'}
66
+ `('$variant variant renders correctly', ({ variant }) => {
63
67
  const onTabPress = jest.fn();
64
68
  const { getByTestId, getByText, toJSON } = renderWithTheme(
65
- <TestTabsComponent onTabPress={onTabPress} />
69
+ <TestTabsComponent variant={variant} onTabPress={onTabPress} />
66
70
  );
67
71
 
68
72
  expect(toJSON()).toMatchSnapshot();
@@ -128,8 +128,6 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
128
128
  style={
129
129
  [
130
130
  {
131
- "borderBottomColor": "#e8e9ea",
132
- "borderBottomWidth": 2,
133
131
  "paddingHorizontal": 0,
134
132
  },
135
133
  undefined,
@@ -147,6 +145,8 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
147
145
  <RCTScrollView
148
146
  contentContainerStyle={
149
147
  {
148
+ "borderBottomColor": "#e8e9ea",
149
+ "borderBottomWidth": 2,
150
150
  "paddingHorizontal": 8,
151
151
  }
152
152
  }
@@ -288,8 +288,11 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
288
288
  style={
289
289
  [
290
290
  {
291
+ "alignItems": "center",
292
+ "justifyContent": "center",
291
293
  "paddingHorizontal": 8,
292
294
  "paddingVertical": 4,
295
+ "position": "relative",
293
296
  },
294
297
  undefined,
295
298
  ]
@@ -399,8 +402,11 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
399
402
  style={
400
403
  [
401
404
  {
405
+ "alignItems": "center",
406
+ "justifyContent": "center",
402
407
  "paddingHorizontal": 8,
403
408
  "paddingVertical": 4,
409
+ "position": "relative",
404
410
  },
405
411
  undefined,
406
412
  ]
@@ -504,8 +510,11 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
504
510
  style={
505
511
  [
506
512
  {
513
+ "alignItems": "center",
514
+ "justifyContent": "center",
507
515
  "paddingHorizontal": 8,
508
516
  "paddingVertical": 4,
517
+ "position": "relative",
509
518
  },
510
519
  undefined,
511
520
  ]
@@ -636,8 +645,11 @@ exports[`Tabs.Scroll lazy not render lazy screen: xxx 1`] = `
636
645
  style={
637
646
  [
638
647
  {
648
+ "alignItems": "center",
649
+ "justifyContent": "center",
639
650
  "paddingHorizontal": 8,
640
651
  "paddingVertical": 4,
652
+ "position": "relative",
641
653
  },
642
654
  undefined,
643
655
  ]
@@ -1032,8 +1044,6 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1032
1044
  style={
1033
1045
  [
1034
1046
  {
1035
- "borderBottomColor": "#e8e9ea",
1036
- "borderBottomWidth": 2,
1037
1047
  "paddingHorizontal": 0,
1038
1048
  },
1039
1049
  undefined,
@@ -1051,6 +1061,8 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1051
1061
  <RCTScrollView
1052
1062
  contentContainerStyle={
1053
1063
  {
1064
+ "borderBottomColor": "#e8e9ea",
1065
+ "borderBottomWidth": 2,
1054
1066
  "paddingHorizontal": 8,
1055
1067
  }
1056
1068
  }
@@ -1192,8 +1204,11 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1192
1204
  style={
1193
1205
  [
1194
1206
  {
1207
+ "alignItems": "center",
1208
+ "justifyContent": "center",
1195
1209
  "paddingHorizontal": 8,
1196
1210
  "paddingVertical": 4,
1211
+ "position": "relative",
1197
1212
  },
1198
1213
  undefined,
1199
1214
  ]
@@ -1303,8 +1318,11 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1303
1318
  style={
1304
1319
  [
1305
1320
  {
1321
+ "alignItems": "center",
1322
+ "justifyContent": "center",
1306
1323
  "paddingHorizontal": 8,
1307
1324
  "paddingVertical": 4,
1325
+ "position": "relative",
1308
1326
  },
1309
1327
  undefined,
1310
1328
  ]
@@ -1408,8 +1426,11 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1408
1426
  style={
1409
1427
  [
1410
1428
  {
1429
+ "alignItems": "center",
1430
+ "justifyContent": "center",
1411
1431
  "paddingHorizontal": 8,
1412
1432
  "paddingVertical": 4,
1433
+ "position": "relative",
1413
1434
  },
1414
1435
  undefined,
1415
1436
  ]
@@ -1540,8 +1561,11 @@ exports[`Tabs.Scroll renders correctly 1`] = `
1540
1561
  style={
1541
1562
  [
1542
1563
  {
1564
+ "alignItems": "center",
1565
+ "justifyContent": "center",
1543
1566
  "paddingHorizontal": 8,
1544
1567
  "paddingVertical": 4,
1568
+ "position": "relative",
1545
1569
  },
1546
1570
  undefined,
1547
1571
  ]
@@ -1936,8 +1960,6 @@ exports[`useIsFocused renders correctly 1`] = `
1936
1960
  style={
1937
1961
  [
1938
1962
  {
1939
- "borderBottomColor": "#e8e9ea",
1940
- "borderBottomWidth": 2,
1941
1963
  "paddingHorizontal": 0,
1942
1964
  },
1943
1965
  undefined,
@@ -1955,6 +1977,8 @@ exports[`useIsFocused renders correctly 1`] = `
1955
1977
  <RCTScrollView
1956
1978
  contentContainerStyle={
1957
1979
  {
1980
+ "borderBottomColor": "#e8e9ea",
1981
+ "borderBottomWidth": 2,
1958
1982
  "paddingHorizontal": 8,
1959
1983
  }
1960
1984
  }
@@ -2096,8 +2120,11 @@ exports[`useIsFocused renders correctly 1`] = `
2096
2120
  style={
2097
2121
  [
2098
2122
  {
2123
+ "alignItems": "center",
2124
+ "justifyContent": "center",
2099
2125
  "paddingHorizontal": 8,
2100
2126
  "paddingVertical": 4,
2127
+ "position": "relative",
2101
2128
  },
2102
2129
  undefined,
2103
2130
  ]
@@ -2207,8 +2234,11 @@ exports[`useIsFocused renders correctly 1`] = `
2207
2234
  style={
2208
2235
  [
2209
2236
  {
2237
+ "alignItems": "center",
2238
+ "justifyContent": "center",
2210
2239
  "paddingHorizontal": 8,
2211
2240
  "paddingVertical": 4,
2241
+ "position": "relative",
2212
2242
  },
2213
2243
  undefined,
2214
2244
  ]
@@ -2312,8 +2342,11 @@ exports[`useIsFocused renders correctly 1`] = `
2312
2342
  style={
2313
2343
  [
2314
2344
  {
2345
+ "alignItems": "center",
2346
+ "justifyContent": "center",
2315
2347
  "paddingHorizontal": 8,
2316
2348
  "paddingVertical": 4,
2349
+ "position": "relative",
2317
2350
  },
2318
2351
  undefined,
2319
2352
  ]
@@ -2444,8 +2477,11 @@ exports[`useIsFocused renders correctly 1`] = `
2444
2477
  style={
2445
2478
  [
2446
2479
  {
2480
+ "alignItems": "center",
2481
+ "justifyContent": "center",
2447
2482
  "paddingHorizontal": 8,
2448
2483
  "paddingVertical": 4,
2484
+ "position": "relative",
2449
2485
  },
2450
2486
  undefined,
2451
2487
  ]