@amazon-devices/react-navigation__react-native-tab-view 2.0.1758683737

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 (116) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +649 -0
  3. package/SystemBundles/c5889b273a6efc2a3c30241851055c37630fbf3381df86d403967369775f0536.bundle +14497 -0
  4. package/SystemBundles/c5889b273a6efc2a3c30241851055c37630fbf3381df86d403967369775f0536.map +1 -0
  5. package/SystemModules/amzn__react-navigation__react-native-tab-view-2.modules.txt +41 -0
  6. package/SystemModules/amzn__react-navigation__react-native-tab-view-2.private.modules.txt +98 -0
  7. package/SystemModules/keplerscript-system-bundle-config.json +7 -0
  8. package/THIRD_PARTY_NOTICES.txt +24 -0
  9. package/kepler-compatibility.json +8 -0
  10. package/kepler-transformed-package-info.json +3 -0
  11. package/lib/commonjs/Pager.android.js +14 -0
  12. package/lib/commonjs/Pager.android.js.map +1 -0
  13. package/lib/commonjs/Pager.ios.js +14 -0
  14. package/lib/commonjs/Pager.ios.js.map +1 -0
  15. package/lib/commonjs/Pager.js +14 -0
  16. package/lib/commonjs/Pager.js.map +1 -0
  17. package/lib/commonjs/PagerViewAdapter.js +132 -0
  18. package/lib/commonjs/PagerViewAdapter.js.map +1 -0
  19. package/lib/commonjs/PanResponderAdapter.js +204 -0
  20. package/lib/commonjs/PanResponderAdapter.js.map +1 -0
  21. package/lib/commonjs/PlatformPressable.js +43 -0
  22. package/lib/commonjs/PlatformPressable.js.map +1 -0
  23. package/lib/commonjs/SceneMap.js +29 -0
  24. package/lib/commonjs/SceneMap.js.map +1 -0
  25. package/lib/commonjs/SceneView.js +78 -0
  26. package/lib/commonjs/SceneView.js.map +1 -0
  27. package/lib/commonjs/TabBar.js +405 -0
  28. package/lib/commonjs/TabBar.js.map +1 -0
  29. package/lib/commonjs/TabBarIndicator.js +110 -0
  30. package/lib/commonjs/TabBarIndicator.js.map +1 -0
  31. package/lib/commonjs/TabBarItem.js +227 -0
  32. package/lib/commonjs/TabBarItem.js.map +1 -0
  33. package/lib/commonjs/TabView.js +122 -0
  34. package/lib/commonjs/TabView.js.map +1 -0
  35. package/lib/commonjs/index.js +42 -0
  36. package/lib/commonjs/index.js.map +1 -0
  37. package/lib/commonjs/types.js +6 -0
  38. package/lib/commonjs/types.js.map +1 -0
  39. package/lib/commonjs/useAnimatedValue.js +18 -0
  40. package/lib/commonjs/useAnimatedValue.js.map +1 -0
  41. package/lib/module/Pager.android.js +2 -0
  42. package/lib/module/Pager.android.js.map +1 -0
  43. package/lib/module/Pager.ios.js +2 -0
  44. package/lib/module/Pager.ios.js.map +1 -0
  45. package/lib/module/Pager.js +2 -0
  46. package/lib/module/Pager.js.map +1 -0
  47. package/lib/module/PagerViewAdapter.js +123 -0
  48. package/lib/module/PagerViewAdapter.js.map +1 -0
  49. package/lib/module/PanResponderAdapter.js +195 -0
  50. package/lib/module/PanResponderAdapter.js.map +1 -0
  51. package/lib/module/PlatformPressable.js +35 -0
  52. package/lib/module/PlatformPressable.js.map +1 -0
  53. package/lib/module/SceneMap.js +21 -0
  54. package/lib/module/SceneMap.js.map +1 -0
  55. package/lib/module/SceneView.js +70 -0
  56. package/lib/module/SceneView.js.map +1 -0
  57. package/lib/module/TabBar.js +396 -0
  58. package/lib/module/TabBar.js.map +1 -0
  59. package/lib/module/TabBarIndicator.js +101 -0
  60. package/lib/module/TabBarIndicator.js.map +1 -0
  61. package/lib/module/TabBarItem.js +218 -0
  62. package/lib/module/TabBarItem.js.map +1 -0
  63. package/lib/module/TabView.js +113 -0
  64. package/lib/module/TabView.js.map +1 -0
  65. package/lib/module/index.js +6 -0
  66. package/lib/module/index.js.map +1 -0
  67. package/lib/module/types.js +2 -0
  68. package/lib/module/types.js.map +1 -0
  69. package/lib/module/useAnimatedValue.js +10 -0
  70. package/lib/module/useAnimatedValue.js.map +1 -0
  71. package/lib/typescript/src/Pager.android.d.ts +2 -0
  72. package/lib/typescript/src/Pager.android.d.ts.map +1 -0
  73. package/lib/typescript/src/Pager.d.ts +2 -0
  74. package/lib/typescript/src/Pager.d.ts.map +1 -0
  75. package/lib/typescript/src/Pager.ios.d.ts +2 -0
  76. package/lib/typescript/src/Pager.ios.d.ts.map +1 -0
  77. package/lib/typescript/src/PagerViewAdapter.d.ts +15 -0
  78. package/lib/typescript/src/PagerViewAdapter.d.ts.map +1 -0
  79. package/lib/typescript/src/PanResponderAdapter.d.ts +16 -0
  80. package/lib/typescript/src/PanResponderAdapter.d.ts.map +1 -0
  81. package/lib/typescript/src/PlatformPressable.d.ts +16 -0
  82. package/lib/typescript/src/PlatformPressable.d.ts.map +1 -0
  83. package/lib/typescript/src/SceneMap.d.ts +10 -0
  84. package/lib/typescript/src/SceneMap.d.ts.map +1 -0
  85. package/lib/typescript/src/SceneView.d.ts +16 -0
  86. package/lib/typescript/src/SceneView.d.ts.map +1 -0
  87. package/lib/typescript/src/TabBar.d.ts +44 -0
  88. package/lib/typescript/src/TabBar.d.ts.map +1 -0
  89. package/lib/typescript/src/TabBarIndicator.d.ts +13 -0
  90. package/lib/typescript/src/TabBarIndicator.d.ts.map +1 -0
  91. package/lib/typescript/src/TabBarItem.d.ts +37 -0
  92. package/lib/typescript/src/TabBarItem.d.ts.map +1 -0
  93. package/lib/typescript/src/TabView.d.ts +27 -0
  94. package/lib/typescript/src/TabView.d.ts.map +1 -0
  95. package/lib/typescript/src/index.d.ts +11 -0
  96. package/lib/typescript/src/index.d.ts.map +1 -0
  97. package/lib/typescript/src/types.d.ts +42 -0
  98. package/lib/typescript/src/types.d.ts.map +1 -0
  99. package/lib/typescript/src/useAnimatedValue.d.ts +3 -0
  100. package/lib/typescript/src/useAnimatedValue.d.ts.map +1 -0
  101. package/package.json +1 -0
  102. package/src/Pager.android.tsx +1 -0
  103. package/src/Pager.ios.tsx +1 -0
  104. package/src/Pager.tsx +1 -0
  105. package/src/PagerViewAdapter.tsx +180 -0
  106. package/src/PanResponderAdapter.tsx +340 -0
  107. package/src/PlatformPressable.tsx +42 -0
  108. package/src/SceneMap.tsx +30 -0
  109. package/src/SceneView.tsx +107 -0
  110. package/src/TabBar.tsx +639 -0
  111. package/src/TabBarIndicator.tsx +153 -0
  112. package/src/TabBarItem.tsx +319 -0
  113. package/src/TabView.tsx +155 -0
  114. package/src/index.tsx +10 -0
  115. package/src/types.tsx +59 -0
  116. package/src/useAnimatedValue.tsx +12 -0
@@ -0,0 +1,396 @@
1
+ import * as React from 'react';
2
+ import { Animated, I18nManager, Platform, StyleSheet, View } from 'react-native';
3
+ import useLatestCallback from 'use-latest-callback';
4
+ import TabBarIndicator from './TabBarIndicator';
5
+ import TabBarItem from './TabBarItem';
6
+ import useAnimatedValue from './useAnimatedValue';
7
+ const Separator = ({
8
+ width
9
+ }) => {
10
+ return /*#__PURE__*/React.createElement(View, {
11
+ style: {
12
+ width
13
+ }
14
+ });
15
+ };
16
+ const getFlattenedTabWidth = style => {
17
+ const tabStyle = StyleSheet.flatten(style);
18
+ return tabStyle === null || tabStyle === void 0 ? void 0 : tabStyle.width;
19
+ };
20
+ const getComputedTabWidth = (index, layout, routes, scrollEnabled, tabWidths, flattenedWidth) => {
21
+ if (flattenedWidth === 'auto') {
22
+ return tabWidths[routes[index].key] || 0;
23
+ }
24
+ switch (typeof flattenedWidth) {
25
+ case 'number':
26
+ return flattenedWidth;
27
+ case 'string':
28
+ if (flattenedWidth.endsWith('%')) {
29
+ const width = parseFloat(flattenedWidth);
30
+ if (Number.isFinite(width)) {
31
+ return layout.width * (width / 100);
32
+ }
33
+ }
34
+ }
35
+ if (scrollEnabled) {
36
+ return layout.width / 5 * 2;
37
+ }
38
+ return layout.width / routes.length;
39
+ };
40
+ const getMaxScrollDistance = (tabBarWidth, layoutWidth) => tabBarWidth - layoutWidth;
41
+ const getTranslateX = (scrollAmount, maxScrollDistance) => Animated.multiply(Platform.OS === 'android' && I18nManager.isRTL ? Animated.add(maxScrollDistance, Animated.multiply(scrollAmount, -1)) : scrollAmount, I18nManager.isRTL ? 1 : -1);
42
+ const getTabBarWidth = ({
43
+ navigationState,
44
+ layout,
45
+ gap,
46
+ scrollEnabled,
47
+ flattenedTabWidth,
48
+ tabWidths
49
+ }) => {
50
+ const {
51
+ routes
52
+ } = navigationState;
53
+ return routes.reduce((acc, _, i) => acc + (i > 0 ? gap ?? 0 : 0) + getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, flattenedTabWidth), 0);
54
+ };
55
+ const normalizeScrollValue = ({
56
+ layout,
57
+ navigationState,
58
+ gap,
59
+ scrollEnabled,
60
+ tabWidths,
61
+ value,
62
+ flattenedTabWidth
63
+ }) => {
64
+ const tabBarWidth = getTabBarWidth({
65
+ layout,
66
+ navigationState,
67
+ tabWidths,
68
+ gap,
69
+ scrollEnabled,
70
+ flattenedTabWidth
71
+ });
72
+ const maxDistance = getMaxScrollDistance(tabBarWidth, layout.width);
73
+ const scrollValue = Math.max(Math.min(value, maxDistance), 0);
74
+ if (Platform.OS === 'android' && I18nManager.isRTL) {
75
+ // On Android, scroll value is not applied in reverse in RTL
76
+ // so we need to manually adjust it to apply correct value
77
+ return maxDistance - scrollValue;
78
+ }
79
+ return scrollValue;
80
+ };
81
+ const getScrollAmount = ({
82
+ layout,
83
+ navigationState,
84
+ gap,
85
+ scrollEnabled,
86
+ flattenedTabWidth,
87
+ tabWidths
88
+ }) => {
89
+ const centerDistance = Array.from({
90
+ length: navigationState.index + 1
91
+ }).reduce((total, _, i) => {
92
+ const tabWidth = getComputedTabWidth(i, layout, navigationState.routes, scrollEnabled, tabWidths, flattenedTabWidth);
93
+
94
+ // To get the current index centered we adjust scroll amount by width of indexes
95
+ // 0 through (i - 1) and add half the width of current index i
96
+ return total + (navigationState.index === i ? (tabWidth + (gap ?? 0)) / 2 : tabWidth + (gap ?? 0));
97
+ }, 0);
98
+ const scrollAmount = centerDistance - layout.width / 2;
99
+ return normalizeScrollValue({
100
+ layout,
101
+ navigationState,
102
+ tabWidths,
103
+ value: scrollAmount,
104
+ gap,
105
+ scrollEnabled,
106
+ flattenedTabWidth
107
+ });
108
+ };
109
+ const getLabelTextDefault = ({
110
+ route
111
+ }) => route.title;
112
+ const getAccessibleDefault = ({
113
+ route
114
+ }) => typeof route.accessible !== 'undefined' ? route.accessible : true;
115
+ const getAccessibilityLabelDefault = ({
116
+ route
117
+ }) => typeof route.accessibilityLabel === 'string' ? route.accessibilityLabel : typeof route.title === 'string' ? route.title : undefined;
118
+ const renderIndicatorDefault = props => /*#__PURE__*/React.createElement(TabBarIndicator, props);
119
+ const getTestIdDefault = ({
120
+ route
121
+ }) => route.testID;
122
+
123
+ // How many items measurements should we update per batch.
124
+ // Defaults to 10, since that's whats FlatList is using in initialNumToRender.
125
+ const MEASURE_PER_BATCH = 10;
126
+ export default function TabBar({
127
+ getLabelText = getLabelTextDefault,
128
+ getAccessible = getAccessibleDefault,
129
+ getAccessibilityLabel = getAccessibilityLabelDefault,
130
+ getTestID = getTestIdDefault,
131
+ renderIndicator = renderIndicatorDefault,
132
+ gap = 0,
133
+ scrollEnabled,
134
+ jumpTo,
135
+ navigationState,
136
+ position,
137
+ activeColor,
138
+ bounces,
139
+ contentContainerStyle,
140
+ inactiveColor,
141
+ indicatorContainerStyle,
142
+ indicatorStyle,
143
+ labelStyle,
144
+ onTabLongPress,
145
+ onTabPress,
146
+ pressColor,
147
+ pressOpacity,
148
+ renderBadge,
149
+ renderIcon,
150
+ renderLabel,
151
+ renderTabBarItem,
152
+ style,
153
+ tabStyle,
154
+ testID,
155
+ android_ripple
156
+ }) {
157
+ const [layout, setLayout] = React.useState({
158
+ width: 0,
159
+ height: 0
160
+ });
161
+ const [tabWidths, setTabWidths] = React.useState({});
162
+ const flatListRef = React.useRef(null);
163
+ const isFirst = React.useRef(true);
164
+ const scrollAmount = useAnimatedValue(0);
165
+ const measuredTabWidths = React.useRef({});
166
+ const {
167
+ routes
168
+ } = navigationState;
169
+ const flattenedTabWidth = getFlattenedTabWidth(tabStyle);
170
+ const isWidthDynamic = flattenedTabWidth === 'auto';
171
+ const scrollOffset = getScrollAmount({
172
+ layout,
173
+ navigationState,
174
+ tabWidths,
175
+ gap,
176
+ scrollEnabled,
177
+ flattenedTabWidth
178
+ });
179
+ const hasMeasuredTabWidths = Boolean(layout.width) && routes.slice(0, navigationState.index).every(r => typeof tabWidths[r.key] === 'number');
180
+ React.useEffect(() => {
181
+ if (isFirst.current) {
182
+ isFirst.current = false;
183
+ return;
184
+ }
185
+ if (isWidthDynamic && !hasMeasuredTabWidths) {
186
+ return;
187
+ }
188
+ if (scrollEnabled) {
189
+ var _flatListRef$current;
190
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToOffset({
191
+ offset: scrollOffset,
192
+ animated: true
193
+ });
194
+ }
195
+ }, [hasMeasuredTabWidths, isWidthDynamic, scrollEnabled, scrollOffset]);
196
+ const handleLayout = e => {
197
+ const {
198
+ height,
199
+ width
200
+ } = e.nativeEvent.layout;
201
+ setLayout(layout => layout.width === width && layout.height === height ? layout : {
202
+ width,
203
+ height
204
+ });
205
+ };
206
+ const tabBarWidth = getTabBarWidth({
207
+ layout,
208
+ navigationState,
209
+ tabWidths,
210
+ gap,
211
+ scrollEnabled,
212
+ flattenedTabWidth
213
+ });
214
+ const separatorsWidth = Math.max(0, routes.length - 1) * gap;
215
+ const separatorPercent = separatorsWidth / tabBarWidth * 100;
216
+ const tabBarWidthPercent = `${routes.length * 40}%`;
217
+ const translateX = React.useMemo(() => getTranslateX(scrollAmount, getMaxScrollDistance(tabBarWidth, layout.width)), [layout.width, scrollAmount, tabBarWidth]);
218
+ const renderItem = React.useCallback(({
219
+ item: route,
220
+ index
221
+ }) => {
222
+ const props = {
223
+ key: route.key,
224
+ position: position,
225
+ route: route,
226
+ navigationState: navigationState,
227
+ getAccessibilityLabel: getAccessibilityLabel,
228
+ getAccessible: getAccessible,
229
+ getLabelText: getLabelText,
230
+ getTestID: getTestID,
231
+ renderBadge: renderBadge,
232
+ renderIcon: renderIcon,
233
+ renderLabel: renderLabel,
234
+ activeColor: activeColor,
235
+ inactiveColor: inactiveColor,
236
+ pressColor: pressColor,
237
+ pressOpacity: pressOpacity,
238
+ onLayout: isWidthDynamic ? e => {
239
+ measuredTabWidths.current[route.key] = e.nativeEvent.layout.width;
240
+
241
+ // When we have measured widths for all of the tabs, we should updates the state
242
+ // We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
243
+ // If we have more than 10 routes divide updating tabWidths into multiple batches. Here we update only first batch of 10 items.
244
+ if (routes.length > MEASURE_PER_BATCH && index === MEASURE_PER_BATCH && routes.slice(0, MEASURE_PER_BATCH).every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
245
+ setTabWidths({
246
+ ...measuredTabWidths.current
247
+ });
248
+ } else if (routes.every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
249
+ // When we have measured widths for all of the tabs, we should updates the state
250
+ // We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
251
+ setTabWidths({
252
+ ...measuredTabWidths.current
253
+ });
254
+ }
255
+ } : undefined,
256
+ onPress: () => {
257
+ const event = {
258
+ route,
259
+ defaultPrevented: false,
260
+ preventDefault: () => {
261
+ event.defaultPrevented = true;
262
+ }
263
+ };
264
+ onTabPress === null || onTabPress === void 0 || onTabPress(event);
265
+ if (event.defaultPrevented) {
266
+ return;
267
+ }
268
+ jumpTo(route.key);
269
+ },
270
+ onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress({
271
+ route
272
+ }),
273
+ labelStyle: labelStyle,
274
+ style: tabStyle,
275
+ // Calculate the deafult width for tab for FlatList to work
276
+ defaultTabWidth: !isWidthDynamic ? getComputedTabWidth(index, layout, routes, scrollEnabled, tabWidths, getFlattenedTabWidth(tabStyle)) : undefined,
277
+ android_ripple
278
+ };
279
+ return /*#__PURE__*/React.createElement(React.Fragment, null, gap > 0 && index > 0 ? /*#__PURE__*/React.createElement(Separator, {
280
+ width: gap
281
+ }) : null, renderTabBarItem ? renderTabBarItem(props) : /*#__PURE__*/React.createElement(TabBarItem, props));
282
+ }, [activeColor, android_ripple, gap, getAccessibilityLabel, getAccessible, getLabelText, getTestID, inactiveColor, isWidthDynamic, jumpTo, labelStyle, layout, navigationState, onTabLongPress, onTabPress, position, pressColor, pressOpacity, renderBadge, renderIcon, renderLabel, renderTabBarItem, routes, scrollEnabled, tabStyle, tabWidths]);
283
+ const keyExtractor = React.useCallback(item => item.key, []);
284
+ const contentContainerStyleMemoized = React.useMemo(() => [styles.tabContent, scrollEnabled ? {
285
+ width: tabBarWidth > separatorsWidth ? tabBarWidth : tabBarWidthPercent
286
+ } : styles.container, contentContainerStyle], [contentContainerStyle, scrollEnabled, separatorsWidth, tabBarWidth, tabBarWidthPercent]);
287
+ const handleScroll = React.useMemo(() => Animated.event([{
288
+ nativeEvent: {
289
+ contentOffset: {
290
+ x: scrollAmount
291
+ }
292
+ }
293
+ }], {
294
+ useNativeDriver: true
295
+ }), [scrollAmount]);
296
+ const handleViewableItemsChanged = useLatestCallback(({
297
+ changed
298
+ }) => {
299
+ if (routes.length <= MEASURE_PER_BATCH) {
300
+ return;
301
+ }
302
+ // Get next vievable item
303
+ const item = changed[changed.length - 1];
304
+ const index = (item === null || item === void 0 ? void 0 : item.index) || 0;
305
+ if (item.isViewable && (index % 10 === 0 || index === navigationState.index || index === routes.length - 1)) {
306
+ setTabWidths({
307
+ ...measuredTabWidths.current
308
+ });
309
+ }
310
+ });
311
+
312
+ // FIXME: Not sure why i have to as-any here (x3) ..
313
+ return /*#__PURE__*/React.createElement(Animated.View, {
314
+ onLayout: handleLayout,
315
+ style: [styles.tabBar, style]
316
+ }, /*#__PURE__*/React.createElement(Animated.View, {
317
+ pointerEvents: "none",
318
+ style: [styles.indicatorContainer, scrollEnabled ? {
319
+ transform: [{
320
+ translateX
321
+ }]
322
+ } : null, tabBarWidth > separatorsWidth ? {
323
+ width: tabBarWidth - separatorsWidth
324
+ } : scrollEnabled ? {
325
+ width: tabBarWidthPercent
326
+ } : null, indicatorContainerStyle]
327
+ }, renderIndicator({
328
+ position,
329
+ layout,
330
+ navigationState,
331
+ jumpTo,
332
+ width: isWidthDynamic ? 'auto' : `${(100 - separatorPercent) / routes.length}%`,
333
+ style: indicatorStyle,
334
+ getTabWidth: i => getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, flattenedTabWidth),
335
+ gap
336
+ })), /*#__PURE__*/React.createElement(View, {
337
+ style: styles.scroll
338
+ }, /*#__PURE__*/React.createElement(Animated.FlatList, {
339
+ data: routes,
340
+ keyExtractor: keyExtractor,
341
+ horizontal: true,
342
+ accessibilityRole: "tablist",
343
+ keyboardShouldPersistTaps: "handled",
344
+ scrollEnabled: scrollEnabled,
345
+ bounces: bounces,
346
+ initialNumToRender: MEASURE_PER_BATCH,
347
+ onViewableItemsChanged: handleViewableItemsChanged,
348
+ alwaysBounceHorizontal: false,
349
+ scrollsToTop: false,
350
+ showsHorizontalScrollIndicator: false,
351
+ showsVerticalScrollIndicator: false,
352
+ automaticallyAdjustContentInsets: false,
353
+ overScrollMode: "never",
354
+ contentContainerStyle: contentContainerStyleMemoized,
355
+ scrollEventThrottle: 16,
356
+ renderItem: renderItem,
357
+ onScroll: handleScroll,
358
+ ref: flatListRef,
359
+ testID: testID
360
+ })));
361
+ }
362
+ const styles = StyleSheet.create({
363
+ container: {
364
+ flex: 1
365
+ },
366
+ scroll: {
367
+ overflow: Platform.select({
368
+ default: 'scroll',
369
+ web: undefined
370
+ })
371
+ },
372
+ tabBar: {
373
+ backgroundColor: '#2196f3',
374
+ elevation: 4,
375
+ shadowColor: 'black',
376
+ shadowOpacity: 0.1,
377
+ shadowRadius: StyleSheet.hairlineWidth,
378
+ shadowOffset: {
379
+ height: StyleSheet.hairlineWidth,
380
+ width: 0
381
+ },
382
+ zIndex: 1
383
+ },
384
+ tabContent: {
385
+ flexDirection: 'row',
386
+ flexWrap: 'nowrap'
387
+ },
388
+ indicatorContainer: {
389
+ position: 'absolute',
390
+ top: 0,
391
+ left: 0,
392
+ right: 0,
393
+ bottom: 0
394
+ }
395
+ });
396
+ //# sourceMappingURL=TabBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Animated","I18nManager","Platform","StyleSheet","View","useLatestCallback","TabBarIndicator","TabBarItem","useAnimatedValue","Separator","width","createElement","style","getFlattenedTabWidth","tabStyle","flatten","getComputedTabWidth","index","layout","routes","scrollEnabled","tabWidths","flattenedWidth","key","endsWith","parseFloat","Number","isFinite","length","getMaxScrollDistance","tabBarWidth","layoutWidth","getTranslateX","scrollAmount","maxScrollDistance","multiply","OS","isRTL","add","getTabBarWidth","navigationState","gap","flattenedTabWidth","reduce","acc","_","i","normalizeScrollValue","value","maxDistance","scrollValue","Math","max","min","getScrollAmount","centerDistance","Array","from","total","tabWidth","getLabelTextDefault","route","title","getAccessibleDefault","accessible","getAccessibilityLabelDefault","accessibilityLabel","undefined","renderIndicatorDefault","props","getTestIdDefault","testID","MEASURE_PER_BATCH","TabBar","getLabelText","getAccessible","getAccessibilityLabel","getTestID","renderIndicator","jumpTo","position","activeColor","bounces","contentContainerStyle","inactiveColor","indicatorContainerStyle","indicatorStyle","labelStyle","onTabLongPress","onTabPress","pressColor","pressOpacity","renderBadge","renderIcon","renderLabel","renderTabBarItem","android_ripple","setLayout","useState","height","setTabWidths","flatListRef","useRef","isFirst","measuredTabWidths","isWidthDynamic","scrollOffset","hasMeasuredTabWidths","Boolean","slice","every","r","useEffect","current","_flatListRef$current","scrollToOffset","offset","animated","handleLayout","e","nativeEvent","separatorsWidth","separatorPercent","tabBarWidthPercent","translateX","useMemo","renderItem","useCallback","item","onLayout","onPress","event","defaultPrevented","preventDefault","onLongPress","defaultTabWidth","Fragment","keyExtractor","contentContainerStyleMemoized","styles","tabContent","container","handleScroll","contentOffset","x","useNativeDriver","handleViewableItemsChanged","changed","isViewable","tabBar","pointerEvents","indicatorContainer","transform","getTabWidth","scroll","FlatList","data","horizontal","accessibilityRole","keyboardShouldPersistTaps","initialNumToRender","onViewableItemsChanged","alwaysBounceHorizontal","scrollsToTop","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","automaticallyAdjustContentInsets","overScrollMode","scrollEventThrottle","onScroll","ref","create","flex","overflow","select","default","web","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","zIndex","flexDirection","flexWrap","top","left","right","bottom"],"sourceRoot":"../../src","sources":["TabBar.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,101 @@
1
+ import * as React from 'react';
2
+ import { Animated, Easing, I18nManager, Platform, StyleSheet } from 'react-native';
3
+ import useAnimatedValue from './useAnimatedValue';
4
+ const getTranslateX = (position, routes, getTabWidth, gap) => {
5
+ const inputRange = routes.map((_, i) => i);
6
+
7
+ // every index contains widths at all previous indices
8
+ const outputRange = routes.reduce((acc, _, i) => {
9
+ if (i === 0) return [0];
10
+ return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];
11
+ }, []);
12
+ const translateX = position.interpolate({
13
+ inputRange,
14
+ outputRange,
15
+ extrapolate: 'clamp'
16
+ });
17
+ return Animated.multiply(translateX, I18nManager.isRTL ? -1 : 1);
18
+ };
19
+ export default function TabBarIndicator({
20
+ getTabWidth,
21
+ layout,
22
+ navigationState,
23
+ position,
24
+ width,
25
+ gap,
26
+ style
27
+ }) {
28
+ const isIndicatorShown = React.useRef(false);
29
+ const isWidthDynamic = width === 'auto';
30
+ const opacity = useAnimatedValue(isWidthDynamic ? 0 : 1);
31
+ const indicatorVisible = isWidthDynamic ? layout.width && navigationState.routes.slice(0, navigationState.index).every((_, r) => getTabWidth(r)) : true;
32
+ React.useEffect(() => {
33
+ const fadeInIndicator = () => {
34
+ if (!isIndicatorShown.current && isWidthDynamic &&
35
+ // We should fade-in the indicator when we have widths for all the tab items
36
+ indicatorVisible) {
37
+ isIndicatorShown.current = true;
38
+ Animated.timing(opacity, {
39
+ toValue: 1,
40
+ duration: 150,
41
+ easing: Easing.in(Easing.linear),
42
+ useNativeDriver: true
43
+ }).start();
44
+ }
45
+ };
46
+ fadeInIndicator();
47
+ return () => opacity.stopAnimation();
48
+ }, [indicatorVisible, isWidthDynamic, opacity]);
49
+ const {
50
+ routes
51
+ } = navigationState;
52
+ const transform = [];
53
+ if (layout.width) {
54
+ const translateX = routes.length > 1 ? getTranslateX(position, routes, getTabWidth, gap) : 0;
55
+ transform.push({
56
+ translateX
57
+ });
58
+ }
59
+ if (width === 'auto') {
60
+ const inputRange = routes.map((_, i) => i);
61
+ const outputRange = inputRange.map(getTabWidth);
62
+ transform.push({
63
+ scaleX: routes.length > 1 ? position.interpolate({
64
+ inputRange,
65
+ outputRange,
66
+ extrapolate: 'clamp'
67
+ }) : outputRange[0]
68
+ }, {
69
+ translateX: 0.5
70
+ });
71
+ }
72
+ return /*#__PURE__*/React.createElement(Animated.View, {
73
+ style: [styles.indicator, {
74
+ width: width === 'auto' ? 1 : width
75
+ },
76
+ // If layout is not available, use `left` property for positioning the indicator
77
+ // This avoids rendering delay until we are able to calculate translateX
78
+ // If platform is macos use `left` property as `transform` is broken at the moment.
79
+ // See: https://github.com/microsoft/react-native-macos/issues/280
80
+ layout.width && Platform.OS !== 'macos' ? {
81
+ left: 0
82
+ } : {
83
+ left: `${100 / routes.length * navigationState.index}%`
84
+ }, {
85
+ transform
86
+ }, width === 'auto' ? {
87
+ opacity: opacity
88
+ } : null, style]
89
+ });
90
+ }
91
+ const styles = StyleSheet.create({
92
+ indicator: {
93
+ backgroundColor: '#ffeb3b',
94
+ position: 'absolute',
95
+ left: 0,
96
+ bottom: 0,
97
+ right: 0,
98
+ height: 2
99
+ }
100
+ });
101
+ //# sourceMappingURL=TabBarIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Animated","Easing","I18nManager","Platform","StyleSheet","useAnimatedValue","getTranslateX","position","routes","getTabWidth","gap","inputRange","map","_","i","outputRange","reduce","acc","translateX","interpolate","extrapolate","multiply","isRTL","TabBarIndicator","layout","navigationState","width","style","isIndicatorShown","useRef","isWidthDynamic","opacity","indicatorVisible","slice","index","every","r","useEffect","fadeInIndicator","current","timing","toValue","duration","easing","in","linear","useNativeDriver","start","stopAnimation","transform","length","push","scaleX","createElement","View","styles","indicator","OS","left","create","backgroundColor","bottom","right","height"],"sourceRoot":"../../src","sources":["TabBarIndicator.tsx"],"mappings":"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","ignoreList":[]}