react-native-tab-view 3.1.1 → 3.2.0
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/README.md +9 -1
- package/lib/commonjs/Pager.android.js.map +1 -1
- package/lib/commonjs/Pager.ios.js.map +1 -1
- package/lib/commonjs/Pager.js.map +1 -1
- package/lib/commonjs/PagerViewAdapter.js +17 -15
- package/lib/commonjs/PagerViewAdapter.js.map +1 -1
- package/lib/commonjs/PanResponderAdapter.js +20 -16
- package/lib/commonjs/PanResponderAdapter.js.map +1 -1
- package/lib/commonjs/PlatformPressable.js +19 -15
- package/lib/commonjs/PlatformPressable.js.map +1 -1
- package/lib/commonjs/SceneMap.js +14 -11
- package/lib/commonjs/SceneMap.js.map +1 -1
- package/lib/commonjs/SceneView.js +2 -2
- package/lib/commonjs/SceneView.js.map +1 -1
- package/lib/commonjs/TabBar.js +124 -81
- package/lib/commonjs/TabBar.js.map +1 -1
- package/lib/commonjs/TabBarIndicator.js +7 -6
- package/lib/commonjs/TabBarIndicator.js.map +1 -1
- package/lib/commonjs/TabBarItem.js +7 -6
- package/lib/commonjs/TabBarItem.js.map +1 -1
- package/lib/commonjs/TabView.js +40 -33
- package/lib/commonjs/TabView.js.map +1 -1
- package/lib/commonjs/index.js +6 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +4 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/useAnimatedValue.js.map +1 -1
- package/lib/module/Pager.android.js.map +1 -1
- package/lib/module/Pager.ios.js.map +1 -1
- package/lib/module/Pager.js.map +1 -1
- package/lib/module/PagerViewAdapter.js +17 -15
- package/lib/module/PagerViewAdapter.js.map +1 -1
- package/lib/module/PanResponderAdapter.js +20 -16
- package/lib/module/PanResponderAdapter.js.map +1 -1
- package/lib/module/PlatformPressable.js +19 -15
- package/lib/module/PlatformPressable.js.map +1 -1
- package/lib/module/SceneMap.js +14 -11
- package/lib/module/SceneMap.js.map +1 -1
- package/lib/module/SceneView.js +2 -2
- package/lib/module/SceneView.js.map +1 -1
- package/lib/module/TabBar.js +125 -81
- package/lib/module/TabBar.js.map +1 -1
- package/lib/module/TabBarIndicator.js +7 -6
- package/lib/module/TabBarIndicator.js.map +1 -1
- package/lib/module/TabBarItem.js +7 -6
- package/lib/module/TabBarItem.js.map +1 -1
- package/lib/module/TabView.js +39 -32
- package/lib/module/TabView.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/useAnimatedValue.js.map +1 -1
- package/lib/typescript/TabBar.d.ts +3 -1
- package/lib/typescript/TabBarIndicator.d.ts +1 -0
- package/lib/typescript/TabView.d.ts +2 -1
- package/package.json +19 -18
- package/src/TabBar.tsx +75 -31
- package/src/TabBarIndicator.tsx +14 -5
- package/src/TabView.tsx +3 -0
package/lib/commonjs/TabBar.js
CHANGED
|
@@ -21,9 +21,20 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
21
21
|
|
|
22
22
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
23
23
|
|
|
24
|
+
const Separator = _ref => {
|
|
25
|
+
let {
|
|
26
|
+
width
|
|
27
|
+
} = _ref;
|
|
28
|
+
return /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
29
|
+
style: {
|
|
30
|
+
width
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
24
35
|
class TabBar extends React.Component {
|
|
25
|
-
constructor(
|
|
26
|
-
super(...
|
|
36
|
+
constructor() {
|
|
37
|
+
super(...arguments);
|
|
27
38
|
|
|
28
39
|
_defineProperty(this, "state", {
|
|
29
40
|
layout: {
|
|
@@ -37,7 +48,7 @@ class TabBar extends React.Component {
|
|
|
37
48
|
|
|
38
49
|
_defineProperty(this, "scrollAmount", new _reactNative.Animated.Value(0));
|
|
39
50
|
|
|
40
|
-
_defineProperty(this, "
|
|
51
|
+
_defineProperty(this, "flatListRef", /*#__PURE__*/React.createRef());
|
|
41
52
|
|
|
42
53
|
_defineProperty(this, "getFlattenedTabWidth", style => {
|
|
43
54
|
const tabStyle = _reactNative.StyleSheet.flatten(style);
|
|
@@ -86,7 +97,7 @@ class TabBar extends React.Component {
|
|
|
86
97
|
const {
|
|
87
98
|
routes
|
|
88
99
|
} = props.navigationState;
|
|
89
|
-
return routes.reduce((acc, _, i) => acc + this.getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle)), 0);
|
|
100
|
+
return routes.reduce((acc, _, i) => acc + (i > 0 ? props.gap ?? 0 : 0) + this.getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle)), 0);
|
|
90
101
|
});
|
|
91
102
|
|
|
92
103
|
_defineProperty(this, "normalizeScrollValue", (props, state, value) => {
|
|
@@ -124,7 +135,7 @@ class TabBar extends React.Component {
|
|
|
124
135
|
const tabWidth = this.getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle)); // To get the current index centered we adjust scroll amount by width of indexes
|
|
125
136
|
// 0 through (i - 1) and add half the width of current index i
|
|
126
137
|
|
|
127
|
-
return total + (index === i ? tabWidth / 2 : tabWidth);
|
|
138
|
+
return total + (index === i ? (tabWidth + (props.gap ?? 0)) / 2 : tabWidth + (props.gap ?? 0));
|
|
128
139
|
}, 0);
|
|
129
140
|
const scrollAmount = centerDistance - layout.width / 2;
|
|
130
141
|
return this.normalizeScrollValue(props, state, scrollAmount);
|
|
@@ -132,10 +143,10 @@ class TabBar extends React.Component {
|
|
|
132
143
|
|
|
133
144
|
_defineProperty(this, "resetScroll", index => {
|
|
134
145
|
if (this.props.scrollEnabled) {
|
|
135
|
-
var _this$
|
|
146
|
+
var _this$flatListRef$cur;
|
|
136
147
|
|
|
137
|
-
(_this$
|
|
138
|
-
|
|
148
|
+
(_this$flatListRef$cur = this.flatListRef.current) === null || _this$flatListRef$cur === void 0 ? void 0 : _this$flatListRef$cur.scrollToOffset({
|
|
149
|
+
offset: this.getScrollAmount(this.props, this.state, index),
|
|
139
150
|
animated: true
|
|
140
151
|
});
|
|
141
152
|
}
|
|
@@ -209,7 +220,8 @@ class TabBar extends React.Component {
|
|
|
209
220
|
indicatorStyle,
|
|
210
221
|
contentContainerStyle,
|
|
211
222
|
style,
|
|
212
|
-
indicatorContainerStyle
|
|
223
|
+
indicatorContainerStyle,
|
|
224
|
+
gap = 0
|
|
213
225
|
} = this.props;
|
|
214
226
|
const {
|
|
215
227
|
layout,
|
|
@@ -220,6 +232,8 @@ class TabBar extends React.Component {
|
|
|
220
232
|
} = navigationState;
|
|
221
233
|
const isWidthDynamic = this.getFlattenedTabWidth(tabStyle) === 'auto';
|
|
222
234
|
const tabBarWidth = this.getTabBarWidth(this.props, this.state);
|
|
235
|
+
const separatorsWidth = Math.max(0, routes.length - 1) * gap;
|
|
236
|
+
const separatorPercent = separatorsWidth / tabBarWidth * 100;
|
|
223
237
|
const tabBarWidthPercent = `${routes.length * 40}%`;
|
|
224
238
|
const translateX = this.getTranslateX(this.scrollAmount, this.getMaxScrollDistance(tabBarWidth, layout.width));
|
|
225
239
|
return /*#__PURE__*/React.createElement(_reactNative.Animated.View, {
|
|
@@ -231,8 +245,8 @@ class TabBar extends React.Component {
|
|
|
231
245
|
transform: [{
|
|
232
246
|
translateX
|
|
233
247
|
}]
|
|
234
|
-
} : null, tabBarWidth ? {
|
|
235
|
-
width: tabBarWidth
|
|
248
|
+
} : null, tabBarWidth > separatorsWidth ? {
|
|
249
|
+
width: tabBarWidth - separatorsWidth
|
|
236
250
|
} : scrollEnabled ? {
|
|
237
251
|
width: tabBarWidthPercent
|
|
238
252
|
} : null, indicatorContainerStyle]
|
|
@@ -241,12 +255,15 @@ class TabBar extends React.Component {
|
|
|
241
255
|
layout,
|
|
242
256
|
navigationState,
|
|
243
257
|
jumpTo,
|
|
244
|
-
width: isWidthDynamic ? 'auto' : `${100 / routes.length}%`,
|
|
258
|
+
width: isWidthDynamic ? 'auto' : `${(100 - separatorPercent) / routes.length}%`,
|
|
245
259
|
style: indicatorStyle,
|
|
246
|
-
getTabWidth: i => this.getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle))
|
|
260
|
+
getTabWidth: i => this.getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle)),
|
|
261
|
+
gap
|
|
247
262
|
})), /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
248
263
|
style: styles.scroll
|
|
249
|
-
}, /*#__PURE__*/React.createElement(_reactNative.Animated.
|
|
264
|
+
}, /*#__PURE__*/React.createElement(_reactNative.Animated.FlatList, {
|
|
265
|
+
data: routes,
|
|
266
|
+
keyExtractor: item => item.key,
|
|
250
267
|
horizontal: true,
|
|
251
268
|
accessibilityRole: "tablist",
|
|
252
269
|
keyboardShouldPersistTaps: "handled",
|
|
@@ -255,12 +272,76 @@ class TabBar extends React.Component {
|
|
|
255
272
|
alwaysBounceHorizontal: false,
|
|
256
273
|
scrollsToTop: false,
|
|
257
274
|
showsHorizontalScrollIndicator: false,
|
|
275
|
+
showsVerticalScrollIndicator: false,
|
|
258
276
|
automaticallyAdjustContentInsets: false,
|
|
259
277
|
overScrollMode: "never",
|
|
260
278
|
contentContainerStyle: [styles.tabContent, scrollEnabled ? {
|
|
261
|
-
width: tabBarWidth
|
|
279
|
+
width: tabBarWidth > separatorsWidth ? tabBarWidth : tabBarWidthPercent
|
|
262
280
|
} : styles.container, contentContainerStyle],
|
|
263
281
|
scrollEventThrottle: 16,
|
|
282
|
+
renderItem: _ref2 => {
|
|
283
|
+
let {
|
|
284
|
+
item: route,
|
|
285
|
+
index
|
|
286
|
+
} = _ref2;
|
|
287
|
+
const props = {
|
|
288
|
+
key: route.key,
|
|
289
|
+
position: position,
|
|
290
|
+
route: route,
|
|
291
|
+
navigationState: navigationState,
|
|
292
|
+
getAccessibilityLabel: getAccessibilityLabel,
|
|
293
|
+
getAccessible: getAccessible,
|
|
294
|
+
getLabelText: getLabelText,
|
|
295
|
+
getTestID: getTestID,
|
|
296
|
+
renderBadge: renderBadge,
|
|
297
|
+
renderIcon: renderIcon,
|
|
298
|
+
renderLabel: renderLabel,
|
|
299
|
+
activeColor: activeColor,
|
|
300
|
+
inactiveColor: inactiveColor,
|
|
301
|
+
pressColor: pressColor,
|
|
302
|
+
pressOpacity: pressOpacity,
|
|
303
|
+
onLayout: isWidthDynamic ? e => {
|
|
304
|
+
this.measuredTabWidths[route.key] = e.nativeEvent.layout.width; // When we have measured widths for all of the tabs, we should updates the state
|
|
305
|
+
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
306
|
+
|
|
307
|
+
if (routes.every(r => typeof this.measuredTabWidths[r.key] === 'number')) {
|
|
308
|
+
this.setState({
|
|
309
|
+
tabWidths: { ...this.measuredTabWidths
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
} : undefined,
|
|
314
|
+
onPress: () => {
|
|
315
|
+
const event = {
|
|
316
|
+
route,
|
|
317
|
+
defaultPrevented: false,
|
|
318
|
+
preventDefault: () => {
|
|
319
|
+
event.defaultPrevented = true;
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
onTabPress === null || onTabPress === void 0 ? void 0 : onTabPress(event);
|
|
323
|
+
|
|
324
|
+
if (event.defaultPrevented) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
this.props.jumpTo(route.key);
|
|
329
|
+
},
|
|
330
|
+
onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress({
|
|
331
|
+
route
|
|
332
|
+
}),
|
|
333
|
+
labelStyle: labelStyle,
|
|
334
|
+
style: [tabStyle, // Calculate the deafult width for tab for FlatList to work.
|
|
335
|
+
this.getFlattenedTabWidth(tabStyle) === undefined && {
|
|
336
|
+
width: this.getComputedTabWidth(index, layout, routes, scrollEnabled, tabWidths, this.getFlattenedTabWidth(tabStyle))
|
|
337
|
+
}]
|
|
338
|
+
};
|
|
339
|
+
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
340
|
+
key: route.key
|
|
341
|
+
}, gap > 0 && index > 0 ? /*#__PURE__*/React.createElement(Separator, {
|
|
342
|
+
width: gap
|
|
343
|
+
}) : null, renderTabBarItem ? renderTabBarItem(props) : /*#__PURE__*/React.createElement(_TabBarItem.default, props));
|
|
344
|
+
},
|
|
264
345
|
onScroll: _reactNative.Animated.event([{
|
|
265
346
|
nativeEvent: {
|
|
266
347
|
contentOffset: {
|
|
@@ -270,59 +351,8 @@ class TabBar extends React.Component {
|
|
|
270
351
|
}], {
|
|
271
352
|
useNativeDriver: true
|
|
272
353
|
}),
|
|
273
|
-
ref: this.
|
|
274
|
-
}
|
|
275
|
-
const props = {
|
|
276
|
-
key: route.key,
|
|
277
|
-
position: position,
|
|
278
|
-
route: route,
|
|
279
|
-
navigationState: navigationState,
|
|
280
|
-
getAccessibilityLabel: getAccessibilityLabel,
|
|
281
|
-
getAccessible: getAccessible,
|
|
282
|
-
getLabelText: getLabelText,
|
|
283
|
-
getTestID: getTestID,
|
|
284
|
-
renderBadge: renderBadge,
|
|
285
|
-
renderIcon: renderIcon,
|
|
286
|
-
renderLabel: renderLabel,
|
|
287
|
-
activeColor: activeColor,
|
|
288
|
-
inactiveColor: inactiveColor,
|
|
289
|
-
pressColor: pressColor,
|
|
290
|
-
pressOpacity: pressOpacity,
|
|
291
|
-
onLayout: isWidthDynamic ? e => {
|
|
292
|
-
this.measuredTabWidths[route.key] = e.nativeEvent.layout.width; // When we have measured widths for all of the tabs, we should updates the state
|
|
293
|
-
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
294
|
-
|
|
295
|
-
if (routes.every(r => typeof this.measuredTabWidths[r.key] === 'number')) {
|
|
296
|
-
this.setState({
|
|
297
|
-
tabWidths: { ...this.measuredTabWidths
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
} : undefined,
|
|
302
|
-
onPress: () => {
|
|
303
|
-
const event = {
|
|
304
|
-
route,
|
|
305
|
-
defaultPrevented: false,
|
|
306
|
-
preventDefault: () => {
|
|
307
|
-
event.defaultPrevented = true;
|
|
308
|
-
}
|
|
309
|
-
};
|
|
310
|
-
onTabPress === null || onTabPress === void 0 ? void 0 : onTabPress(event);
|
|
311
|
-
|
|
312
|
-
if (event.defaultPrevented) {
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
this.props.jumpTo(route.key);
|
|
317
|
-
},
|
|
318
|
-
onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress({
|
|
319
|
-
route
|
|
320
|
-
}),
|
|
321
|
-
labelStyle: labelStyle,
|
|
322
|
-
style: tabStyle
|
|
323
|
-
};
|
|
324
|
-
return renderTabBarItem ? renderTabBarItem(props) : /*#__PURE__*/React.createElement(_TabBarItem.default, props);
|
|
325
|
-
}))));
|
|
354
|
+
ref: this.flatListRef
|
|
355
|
+
})));
|
|
326
356
|
}
|
|
327
357
|
|
|
328
358
|
}
|
|
@@ -330,19 +360,32 @@ class TabBar extends React.Component {
|
|
|
330
360
|
exports.default = TabBar;
|
|
331
361
|
|
|
332
362
|
_defineProperty(TabBar, "defaultProps", {
|
|
333
|
-
getLabelText:
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
route
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
route
|
|
344
|
-
}
|
|
345
|
-
|
|
363
|
+
getLabelText: _ref3 => {
|
|
364
|
+
let {
|
|
365
|
+
route
|
|
366
|
+
} = _ref3;
|
|
367
|
+
return route.title;
|
|
368
|
+
},
|
|
369
|
+
getAccessible: _ref4 => {
|
|
370
|
+
let {
|
|
371
|
+
route
|
|
372
|
+
} = _ref4;
|
|
373
|
+
return typeof route.accessible !== 'undefined' ? route.accessible : true;
|
|
374
|
+
},
|
|
375
|
+
getAccessibilityLabel: _ref5 => {
|
|
376
|
+
let {
|
|
377
|
+
route
|
|
378
|
+
} = _ref5;
|
|
379
|
+
return typeof route.accessibilityLabel === 'string' ? route.accessibilityLabel : typeof route.title === 'string' ? route.title : undefined;
|
|
380
|
+
},
|
|
381
|
+
getTestID: _ref6 => {
|
|
382
|
+
let {
|
|
383
|
+
route
|
|
384
|
+
} = _ref6;
|
|
385
|
+
return route.testID;
|
|
386
|
+
},
|
|
387
|
+
renderIndicator: props => /*#__PURE__*/React.createElement(_TabBarIndicator.default, props),
|
|
388
|
+
gap: 0
|
|
346
389
|
});
|
|
347
390
|
|
|
348
391
|
const styles = _reactNative.StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabBar.tsx"],"names":["TabBar","React","Component","layout","width","height","tabWidths","Animated","Value","createRef","style","tabStyle","StyleSheet","flatten","undefined","index","routes","scrollEnabled","flattenedWidth","key","endsWith","parseFloat","Number","isFinite","length","tabBarWidth","layoutWidth","props","state","navigationState","reduce","acc","_","i","getComputedTabWidth","getFlattenedTabWidth","value","getTabBarWidth","maxDistance","getMaxScrollDistance","scrollValue","Math","max","min","Platform","OS","I18nManager","isRTL","centerDistance","Array","from","total","tabWidth","scrollAmount","normalizeScrollValue","scrollViewRef","current","scrollTo","x","getScrollAmount","animated","e","nativeEvent","setState","maxScrollDistance","multiply","add","componentDidUpdate","prevProps","prevState","every","r","resetScroll","render","position","jumpTo","bounces","getAccessibilityLabel","getAccessible","getLabelText","getTestID","renderBadge","renderIcon","renderLabel","renderTabBarItem","activeColor","inactiveColor","pressColor","pressOpacity","onTabPress","onTabLongPress","labelStyle","indicatorStyle","contentContainerStyle","indicatorContainerStyle","isWidthDynamic","tabBarWidthPercent","translateX","getTranslateX","handleLayout","styles","tabBar","indicatorContainer","transform","renderIndicator","getTabWidth","scroll","tabContent","container","event","contentOffset","useNativeDriver","map","route","onLayout","measuredTabWidths","onPress","defaultPrevented","preventDefault","onLongPress","title","accessible","accessibilityLabel","testID","create","flex","overflow","select","default","web","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","zIndex","flexDirection","flexWrap","top","left","right","bottom"],"mappings":";;;;;;;AAAA;;AACA;;AAYA;;AACA;;;;;;;;;;AAsDe,MAAMA,MAAN,SAAsCC,KAAK,CAACC,SAA5C,CAGb;AAAA;AAAA;;AAAA,mCAiBe;AACbC,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE,CAAT;AAAYC,QAAAA,MAAM,EAAE;AAApB,OADK;AAEbC,MAAAA,SAAS,EAAE;AAFE,KAjBf;;AAAA,+CAoDuD,EApDvD;;AAAA,0CAsDuB,IAAIC,sBAASC,KAAb,CAAmB,CAAnB,CAtDvB;;AAAA,wDAwDwBP,KAAK,CAACQ,SAAN,EAxDxB;;AAAA,kDA0DgCC,KAAD,IAAiC;AAC9D,YAAMC,QAAQ,GAAGC,wBAAWC,OAAX,CAAmBH,KAAnB,CAAjB;;AAEA,aAAOC,QAAQ,GAAGA,QAAQ,CAACP,KAAZ,GAAoBU,SAAnC;AACD,KA9DD;;AAAA,iDAgE8B,CAC5BC,KAD4B,EAE5BZ,MAF4B,EAG5Ba,MAH4B,EAI5BC,aAJ4B,EAK5BX,SAL4B,EAM5BY,cAN4B,KAOzB;AACH,UAAIA,cAAc,KAAK,MAAvB,EAA+B;AAC7B,eAAOZ,SAAS,CAACU,MAAM,CAACD,KAAD,CAAN,CAAcI,GAAf,CAAT,IAAgC,CAAvC;AACD;;AAED,cAAQ,OAAOD,cAAf;AACE,aAAK,QAAL;AACE,iBAAOA,cAAP;;AACF,aAAK,QAAL;AACE,cAAIA,cAAc,CAACE,QAAf,CAAwB,GAAxB,CAAJ,EAAkC;AAChC,kBAAMhB,KAAK,GAAGiB,UAAU,CAACH,cAAD,CAAxB;;AACA,gBAAII,MAAM,CAACC,QAAP,CAAgBnB,KAAhB,CAAJ,EAA4B;AAC1B,qBAAOD,MAAM,CAACC,KAAP,IAAgBA,KAAK,GAAG,GAAxB,CAAP;AACD;AACF;;AATL;;AAYA,UAAIa,aAAJ,EAAmB;AACjB,eAAQd,MAAM,CAACC,KAAP,GAAe,CAAhB,GAAqB,CAA5B;AACD;;AAED,aAAOD,MAAM,CAACC,KAAP,GAAeY,MAAM,CAACQ,MAA7B;AACD,KA7FD;;AAAA,kDA+F+B,CAACC,WAAD,EAAsBC,WAAtB,KAC7BD,WAAW,GAAGC,WAhGhB;;AAAA,4CAkGyB,CAACC,KAAD,EAAkBC,KAAlB,KAAmC;AAC1D,YAAM;AAAEzB,QAAAA,MAAF;AAAUG,QAAAA;AAAV,UAAwBsB,KAA9B;AACA,YAAM;AAAEX,QAAAA,aAAF;AAAiBN,QAAAA;AAAjB,UAA8BgB,KAApC;AACA,YAAM;AAAEX,QAAAA;AAAF,UAAaW,KAAK,CAACE,eAAzB;AAEA,aAAOb,MAAM,CAACc,MAAP,CACL,CAACC,GAAD,EAAMC,CAAN,EAASC,CAAT,KACEF,GAAG,GACH,KAAKG,mBAAL,CACED,CADF,EAEE9B,MAFF,EAGEa,MAHF,EAIEC,aAJF,EAKEX,SALF,EAME,KAAK6B,oBAAL,CAA0BxB,QAA1B,CANF,CAHG,EAWL,CAXK,CAAP;AAaD,KApHD;;AAAA,kDAsH+B,CAC7BgB,KAD6B,EAE7BC,KAF6B,EAG7BQ,KAH6B,KAI1B;AACH,YAAM;AAAEjC,QAAAA;AAAF,UAAayB,KAAnB;AACA,YAAMH,WAAW,GAAG,KAAKY,cAAL,CAAoBV,KAApB,EAA2BC,KAA3B,CAApB;AACA,YAAMU,WAAW,GAAG,KAAKC,oBAAL,CAA0Bd,WAA1B,EAAuCtB,MAAM,CAACC,KAA9C,CAApB;AACA,YAAMoC,WAAW,GAAGC,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASP,KAAT,EAAgBE,WAAhB,CAAT,EAAuC,CAAvC,CAApB;;AAEA,UAAIM,sBAASC,EAAT,KAAgB,SAAhB,IAA6BC,yBAAYC,KAA7C,EAAoD;AAClD;AACA;AACA,eAAOT,WAAW,GAAGE,WAArB;AACD;;AAED,aAAOA,WAAP;AACD,KAvID;;AAAA,6CAyI0B,CAACb,KAAD,EAAkBC,KAAlB,EAAgCb,KAAhC,KAAkD;AAC1E,YAAM;AAAEZ,QAAAA,MAAF;AAAUG,QAAAA;AAAV,UAAwBsB,KAA9B;AACA,YAAM;AAAEX,QAAAA,aAAF;AAAiBN,QAAAA;AAAjB,UAA8BgB,KAApC;AACA,YAAM;AAAEX,QAAAA;AAAF,UAAaW,KAAK,CAACE,eAAzB;AAEA,YAAMmB,cAAc,GAAGC,KAAK,CAACC,IAAN,CAAW;AAAE1B,QAAAA,MAAM,EAAET,KAAK,GAAG;AAAlB,OAAX,EAAkCe,MAAlC,CACrB,CAACqB,KAAD,EAAQnB,CAAR,EAAWC,CAAX,KAAiB;AACf,cAAMmB,QAAQ,GAAG,KAAKlB,mBAAL,CACfD,CADe,EAEf9B,MAFe,EAGfa,MAHe,EAIfC,aAJe,EAKfX,SALe,EAMf,KAAK6B,oBAAL,CAA0BxB,QAA1B,CANe,CAAjB,CADe,CAUf;AACA;;AACA,eAAOwC,KAAK,IAAIpC,KAAK,KAAKkB,CAAV,GAAcmB,QAAQ,GAAG,CAAzB,GAA6BA,QAAjC,CAAZ;AACD,OAdoB,EAerB,CAfqB,CAAvB;AAkBA,YAAMC,YAAY,GAAGL,cAAc,GAAG7C,MAAM,CAACC,KAAP,GAAe,CAArD;AAEA,aAAO,KAAKkD,oBAAL,CAA0B3B,KAA1B,EAAiCC,KAAjC,EAAwCyB,YAAxC,CAAP;AACD,KAnKD;;AAAA,yCAqKuBtC,KAAD,IAAmB;AACvC,UAAI,KAAKY,KAAL,CAAWV,aAAf,EAA8B;AAAA;;AAC5B,sCAAKsC,aAAL,CAAmBC,OAAnB,gFAA4BC,QAA5B,CAAqC;AACnCC,UAAAA,CAAC,EAAE,KAAKC,eAAL,CAAqB,KAAKhC,KAA1B,EAAiC,KAAKC,KAAtC,EAA6Cb,KAA7C,CADgC;AAEnC6C,UAAAA,QAAQ,EAAE;AAFyB,SAArC;AAID;AACF,KA5KD;;AAAA,0CA8KwBC,CAAD,IAA0B;AAC/C,YAAM;AAAExD,QAAAA,MAAF;AAAUD,QAAAA;AAAV,UAAoByD,CAAC,CAACC,WAAF,CAAc3D,MAAxC;;AAEA,UACE,KAAKyB,KAAL,CAAWzB,MAAX,CAAkBC,KAAlB,KAA4BA,KAA5B,IACA,KAAKwB,KAAL,CAAWzB,MAAX,CAAkBE,MAAlB,KAA6BA,MAF/B,EAGE;AACA;AACD;;AAED,WAAK0D,QAAL,CAAc;AACZ5D,QAAAA,MAAM,EAAE;AACNE,UAAAA,MADM;AAEND,UAAAA;AAFM;AADI,OAAd;AAMD,KA9LD;;AAAA,2CAgMwB,CACtBiD,YADsB,EAEtBW,iBAFsB,KAItBzD,sBAAS0D,QAAT,CACErB,sBAASC,EAAT,KAAgB,SAAhB,IAA6BC,yBAAYC,KAAzC,GACIxC,sBAAS2D,GAAT,CAAaF,iBAAb,EAAgCzD,sBAAS0D,QAAT,CAAkBZ,YAAlB,EAAgC,CAAC,CAAjC,CAAhC,CADJ,GAEIA,YAHN,EAIEP,yBAAYC,KAAZ,GAAoB,CAApB,GAAwB,CAAC,CAJ3B,CApMF;AAAA;;AAsBAoB,EAAAA,kBAAkB,CAACC,SAAD,EAAsBC,SAAtB,EAAwC;AACxD,UAAM;AAAExC,MAAAA;AAAF,QAAsB,KAAKF,KAAjC;AACA,UAAM;AAAExB,MAAAA,MAAF;AAAUG,MAAAA;AAAV,QAAwB,KAAKsB,KAAnC;;AAEA,QACEwC,SAAS,CAACvC,eAAV,CAA0Bb,MAA1B,CAAiCQ,MAAjC,KACEK,eAAe,CAACb,MAAhB,CAAuBQ,MADzB,IAEA4C,SAAS,CAACvC,eAAV,CAA0Bd,KAA1B,KAAoCc,eAAe,CAACd,KAFpD,IAGAsD,SAAS,CAAClE,MAAV,CAAiBC,KAAjB,KAA2BD,MAAM,CAACC,KAHlC,IAIAiE,SAAS,CAAC/D,SAAV,KAAwBA,SAL1B,EAME;AACA,UACE,KAAK6B,oBAAL,CAA0B,KAAKR,KAAL,CAAWhB,QAArC,MAAmD,MAAnD,IACA,EACER,MAAM,CAACC,KAAP,IACAyB,eAAe,CAACb,MAAhB,CAAuBsD,KAAvB,CACGC,CAAD,IAAO,OAAOjE,SAAS,CAACiE,CAAC,CAACpD,GAAH,CAAhB,KAA4B,QADrC,CAFF,CAFF,EAQE;AACA;AACA;AACD;;AAED,WAAKqD,WAAL,CAAiB3C,eAAe,CAACd,KAAjC;AACD;AACF,GAhDD,CAkDA;AACA;;;AAwJA0D,EAAAA,MAAM,GAAG;AACP,UAAM;AACJC,MAAAA,QADI;AAEJ7C,MAAAA,eAFI;AAGJ8C,MAAAA,MAHI;AAIJ1D,MAAAA,aAJI;AAKJ2D,MAAAA,OALI;AAMJC,MAAAA,qBANI;AAOJC,MAAAA,aAPI;AAQJC,MAAAA,YARI;AASJC,MAAAA,SATI;AAUJC,MAAAA,WAVI;AAWJC,MAAAA,UAXI;AAYJC,MAAAA,WAZI;AAaJC,MAAAA,gBAbI;AAcJC,MAAAA,WAdI;AAeJC,MAAAA,aAfI;AAgBJC,MAAAA,UAhBI;AAiBJC,MAAAA,YAjBI;AAkBJC,MAAAA,UAlBI;AAmBJC,MAAAA,cAnBI;AAoBJ/E,MAAAA,QApBI;AAqBJgF,MAAAA,UArBI;AAsBJC,MAAAA,cAtBI;AAuBJC,MAAAA,qBAvBI;AAwBJnF,MAAAA,KAxBI;AAyBJoF,MAAAA;AAzBI,QA0BF,KAAKnE,KA1BT;AA2BA,UAAM;AAAExB,MAAAA,MAAF;AAAUG,MAAAA;AAAV,QAAwB,KAAKsB,KAAnC;AACA,UAAM;AAAEZ,MAAAA;AAAF,QAAaa,eAAnB;AAEA,UAAMkE,cAAc,GAAG,KAAK5D,oBAAL,CAA0BxB,QAA1B,MAAwC,MAA/D;AACA,UAAMc,WAAW,GAAG,KAAKY,cAAL,CAAoB,KAAKV,KAAzB,EAAgC,KAAKC,KAArC,CAApB;AACA,UAAMoE,kBAAkB,GAAI,GAAEhF,MAAM,CAACQ,MAAP,GAAgB,EAAG,GAAjD;AACA,UAAMyE,UAAU,GAAG,KAAKC,aAAL,CACjB,KAAK7C,YADY,EAEjB,KAAKd,oBAAL,CAA0Bd,WAA1B,EAAuCtB,MAAM,CAACC,KAA9C,CAFiB,CAAnB;AAKA,wBACE,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,QAAQ,EAAE,KAAK+F,YADjB;AAEE,MAAA,KAAK,EAAE,CAACC,MAAM,CAACC,MAAR,EAAgB3F,KAAhB;AAFT,oBAIE,oBAAC,qBAAD,CAAU,IAAV;AACE,MAAA,aAAa,EAAC,MADhB;AAEE,MAAA,KAAK,EAAE,CACL0F,MAAM,CAACE,kBADF,EAELrF,aAAa,GAAG;AAAEsF,QAAAA,SAAS,EAAE,CAAC;AAAEN,UAAAA;AAAF,SAAD;AAAb,OAAH,GAA4C,IAFpD,EAGLxE,WAAW,GACP;AAAErB,QAAAA,KAAK,EAAEqB;AAAT,OADO,GAEPR,aAAa,GACb;AAAEb,QAAAA,KAAK,EAAE4F;AAAT,OADa,GAEb,IAPC,EAQLF,uBARK;AAFT,OAaG,KAAKnE,KAAL,CAAW6E,eAAX,CAA2B;AAC1B9B,MAAAA,QAD0B;AAE1BvE,MAAAA,MAF0B;AAG1B0B,MAAAA,eAH0B;AAI1B8C,MAAAA,MAJ0B;AAK1BvE,MAAAA,KAAK,EAAE2F,cAAc,GAAG,MAAH,GAAa,GAAE,MAAM/E,MAAM,CAACQ,MAAO,GAL9B;AAM1Bd,MAAAA,KAAK,EAAEkF,cANmB;AAO1Ba,MAAAA,WAAW,EAAGxE,CAAD,IACX,KAAKC,mBAAL,CACED,CADF,EAEE9B,MAFF,EAGEa,MAHF,EAIEC,aAJF,EAKEX,SALF,EAME,KAAK6B,oBAAL,CAA0BxB,QAA1B,CANF;AARwB,KAA3B,CAbH,CAJF,eAmCE,oBAAC,iBAAD;AAAM,MAAA,KAAK,EAAEyF,MAAM,CAACM;AAApB,oBACE,oBAAC,qBAAD,CAAU,UAAV;AACE,MAAA,UAAU,MADZ;AAEE,MAAA,iBAAiB,EAAC,SAFpB;AAGE,MAAA,yBAAyB,EAAC,SAH5B;AAIE,MAAA,aAAa,EAAEzF,aAJjB;AAKE,MAAA,OAAO,EAAE2D,OALX;AAME,MAAA,sBAAsB,EAAE,KAN1B;AAOE,MAAA,YAAY,EAAE,KAPhB;AAQE,MAAA,8BAA8B,EAAE,KARlC;AASE,MAAA,gCAAgC,EAAE,KATpC;AAUE,MAAA,cAAc,EAAC,OAVjB;AAWE,MAAA,qBAAqB,EAAE,CACrBwB,MAAM,CAACO,UADc,EAErB1F,aAAa,GACT;AAAEb,QAAAA,KAAK,EAAEqB,WAAW,IAAIuE;AAAxB,OADS,GAETI,MAAM,CAACQ,SAJU,EAKrBf,qBALqB,CAXzB;AAkBE,MAAA,mBAAmB,EAAE,EAlBvB;AAmBE,MAAA,QAAQ,EAAEtF,sBAASsG,KAAT,CACR,CACE;AACE/C,QAAAA,WAAW,EAAE;AACXgD,UAAAA,aAAa,EAAE;AAAEpD,YAAAA,CAAC,EAAE,KAAKL;AAAV;AADJ;AADf,OADF,CADQ,EAQR;AAAE0D,QAAAA,eAAe,EAAE;AAAnB,OARQ,CAnBZ;AA6BE,MAAA,GAAG,EAAE,KAAKxD;AA7BZ,OA+BGvC,MAAM,CAACgG,GAAP,CAAYC,KAAD,IAAc;AACxB,YAAMtF,KAA2C,GAAG;AAClDR,QAAAA,GAAG,EAAE8F,KAAK,CAAC9F,GADuC;AAElDuD,QAAAA,QAAQ,EAAEA,QAFwC;AAGlDuC,QAAAA,KAAK,EAAEA,KAH2C;AAIlDpF,QAAAA,eAAe,EAAEA,eAJiC;AAKlDgD,QAAAA,qBAAqB,EAAEA,qBAL2B;AAMlDC,QAAAA,aAAa,EAAEA,aANmC;AAOlDC,QAAAA,YAAY,EAAEA,YAPoC;AAQlDC,QAAAA,SAAS,EAAEA,SARuC;AASlDC,QAAAA,WAAW,EAAEA,WATqC;AAUlDC,QAAAA,UAAU,EAAEA,UAVsC;AAWlDC,QAAAA,WAAW,EAAEA,WAXqC;AAYlDE,QAAAA,WAAW,EAAEA,WAZqC;AAalDC,QAAAA,aAAa,EAAEA,aAbmC;AAclDC,QAAAA,UAAU,EAAEA,UAdsC;AAelDC,QAAAA,YAAY,EAAEA,YAfoC;AAgBlD0B,QAAAA,QAAQ,EAAEnB,cAAc,GACnBlC,CAAD,IAAO;AACL,eAAKsD,iBAAL,CAAuBF,KAAK,CAAC9F,GAA7B,IACE0C,CAAC,CAACC,WAAF,CAAc3D,MAAd,CAAqBC,KADvB,CADK,CAIL;AACA;;AACA,cACEY,MAAM,CAACsD,KAAP,CACGC,CAAD,IACE,OAAO,KAAK4C,iBAAL,CAAuB5C,CAAC,CAACpD,GAAzB,CAAP,KAAyC,QAF7C,CADF,EAKE;AACA,iBAAK4C,QAAL,CAAc;AACZzD,cAAAA,SAAS,EAAE,EAAE,GAAG,KAAK6G;AAAV;AADC,aAAd;AAGD;AACF,SAjBmB,GAkBpBrG,SAlC8C;AAmClDsG,QAAAA,OAAO,EAAE,MAAM;AACb,gBAAMP,KAAuB,GAAG;AAC9BI,YAAAA,KAD8B;AAE9BI,YAAAA,gBAAgB,EAAE,KAFY;AAG9BC,YAAAA,cAAc,EAAE,MAAM;AACpBT,cAAAA,KAAK,CAACQ,gBAAN,GAAyB,IAAzB;AACD;AAL6B,WAAhC;AAQA5B,UAAAA,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAGoB,KAAH,CAAV;;AAEA,cAAIA,KAAK,CAACQ,gBAAV,EAA4B;AAC1B;AACD;;AAED,eAAK1F,KAAL,CAAWgD,MAAX,CAAkBsC,KAAK,CAAC9F,GAAxB;AACD,SAnDiD;AAoDlDoG,QAAAA,WAAW,EAAE,MAAM7B,cAAN,aAAMA,cAAN,uBAAMA,cAAc,CAAG;AAAEuB,UAAAA;AAAF,SAAH,CApDiB;AAqDlDtB,QAAAA,UAAU,EAAEA,UArDsC;AAsDlDjF,QAAAA,KAAK,EAAEC;AAtD2C,OAApD;AAyDA,aAAOyE,gBAAgB,GACrBA,gBAAgB,CAACzD,KAAD,CADK,gBAGrB,oBAAC,mBAAD,EAAgBA,KAAhB,CAHF;AAKD,KA/DA,CA/BH,CADF,CAnCF,CADF;AAwID;;AA1XD;;;;gBAHmB3B,M,kBAIG;AACpB+E,EAAAA,YAAY,EAAE,CAAC;AAAEkC,IAAAA;AAAF,GAAD,KAA6BA,KAAK,CAACO,KAD7B;AAEpB1C,EAAAA,aAAa,EAAE,CAAC;AAAEmC,IAAAA;AAAF,GAAD,KACb,OAAOA,KAAK,CAACQ,UAAb,KAA4B,WAA5B,GAA0CR,KAAK,CAACQ,UAAhD,GAA6D,IAH3C;AAIpB5C,EAAAA,qBAAqB,EAAE,CAAC;AAAEoC,IAAAA;AAAF,GAAD,KACrB,OAAOA,KAAK,CAACS,kBAAb,KAAoC,QAApC,GACIT,KAAK,CAACS,kBADV,GAEI,OAAOT,KAAK,CAACO,KAAb,KAAuB,QAAvB,GACAP,KAAK,CAACO,KADN,GAEA1G,SATc;AAUpBkE,EAAAA,SAAS,EAAE,CAAC;AAAEiC,IAAAA;AAAF,GAAD,KAA6BA,KAAK,CAACU,MAV1B;AAWpBnB,EAAAA,eAAe,EAAG7E,KAAD,iBACf,oBAAC,wBAAD,EAAqBA,KAArB;AAZkB,C;;AA4XxB,MAAMyE,MAAM,GAAGxF,wBAAWgH,MAAX,CAAkB;AAC/BhB,EAAAA,SAAS,EAAE;AACTiB,IAAAA,IAAI,EAAE;AADG,GADoB;AAI/BnB,EAAAA,MAAM,EAAE;AACNoB,IAAAA,QAAQ,EAAElF,sBAASmF,MAAT,CAAgB;AAAEC,MAAAA,OAAO,EAAE,QAAX;AAAqBC,MAAAA,GAAG,EAAEnH;AAA1B,KAAhB;AADJ,GAJuB;AAO/BuF,EAAAA,MAAM,EAAE;AACN6B,IAAAA,eAAe,EAAE,SADX;AAENC,IAAAA,SAAS,EAAE,CAFL;AAGNC,IAAAA,WAAW,EAAE,OAHP;AAINC,IAAAA,aAAa,EAAE,GAJT;AAKNC,IAAAA,YAAY,EAAE1H,wBAAW2H,aALnB;AAMNC,IAAAA,YAAY,EAAE;AACZnI,MAAAA,MAAM,EAAEO,wBAAW2H,aADP;AAEZnI,MAAAA,KAAK,EAAE;AAFK,KANR;AAUNqI,IAAAA,MAAM,EAAE;AAVF,GAPuB;AAmB/B9B,EAAAA,UAAU,EAAE;AACV+B,IAAAA,aAAa,EAAE,KADL;AAEVC,IAAAA,QAAQ,EAAE;AAFA,GAnBmB;AAuB/BrC,EAAAA,kBAAkB,EAAE;AAClB5B,IAAAA,QAAQ,EAAE,UADQ;AAElBkE,IAAAA,GAAG,EAAE,CAFa;AAGlBC,IAAAA,IAAI,EAAE,CAHY;AAIlBC,IAAAA,KAAK,EAAE,CAJW;AAKlBC,IAAAA,MAAM,EAAE;AALU;AAvBW,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n ScrollView,\n StyleProp,\n ViewStyle,\n TextStyle,\n LayoutChangeEvent,\n I18nManager,\n Platform,\n} from 'react-native';\nimport TabBarItem, { Props as TabBarItemProps } from './TabBarItem';\nimport TabBarIndicator, { Props as IndicatorProps } from './TabBarIndicator';\nimport type {\n Route,\n Scene,\n SceneRendererProps,\n NavigationState,\n Layout,\n Event,\n} from './types';\n\nexport type Props<T extends Route> = SceneRendererProps & {\n navigationState: NavigationState<T>;\n scrollEnabled?: boolean;\n bounces?: boolean;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (\n scene: Scene<T> & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderIcon?: (\n scene: Scene<T> & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n renderIndicator: (props: IndicatorProps<T>) => React.ReactNode;\n renderTabBarItem?: (\n props: TabBarItemProps<T> & { key: string }\n ) => React.ReactElement;\n onTabPress?: (scene: Scene<T> & Event) => void;\n onTabLongPress?: (scene: Scene<T>) => void;\n tabStyle?: StyleProp<ViewStyle>;\n indicatorStyle?: StyleProp<ViewStyle>;\n indicatorContainerStyle?: StyleProp<ViewStyle>;\n labelStyle?: StyleProp<TextStyle>;\n contentContainerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<ViewStyle>;\n};\n\ntype State = {\n layout: Layout;\n tabWidths: { [key: string]: number };\n};\n\nexport default class TabBar<T extends Route> extends React.Component<\n Props<T>,\n State\n> {\n static defaultProps = {\n getLabelText: ({ route }: Scene<Route>) => route.title,\n getAccessible: ({ route }: Scene<Route>) =>\n typeof route.accessible !== 'undefined' ? route.accessible : true,\n getAccessibilityLabel: ({ route }: Scene<Route>) =>\n typeof route.accessibilityLabel === 'string'\n ? route.accessibilityLabel\n : typeof route.title === 'string'\n ? route.title\n : undefined,\n getTestID: ({ route }: Scene<Route>) => route.testID,\n renderIndicator: (props: IndicatorProps<Route>) => (\n <TabBarIndicator {...props} />\n ),\n };\n\n state: State = {\n layout: { width: 0, height: 0 },\n tabWidths: {},\n };\n\n componentDidUpdate(prevProps: Props<T>, prevState: State) {\n const { navigationState } = this.props;\n const { layout, tabWidths } = this.state;\n\n if (\n prevProps.navigationState.routes.length !==\n navigationState.routes.length ||\n prevProps.navigationState.index !== navigationState.index ||\n prevState.layout.width !== layout.width ||\n prevState.tabWidths !== tabWidths\n ) {\n if (\n this.getFlattenedTabWidth(this.props.tabStyle) === 'auto' &&\n !(\n layout.width &&\n navigationState.routes.every(\n (r) => typeof tabWidths[r.key] === 'number'\n )\n )\n ) {\n // When tab width is dynamic, only adjust the scroll once we have all tab widths and layout\n return;\n }\n\n this.resetScroll(navigationState.index);\n }\n }\n\n // to store the layout.width of each tab\n // when all onLayout's are fired, this would be set in state\n private measuredTabWidths: { [key: string]: number } = {};\n\n private scrollAmount = new Animated.Value(0);\n\n private scrollViewRef = React.createRef<ScrollView>();\n\n private getFlattenedTabWidth = (style: StyleProp<ViewStyle>) => {\n const tabStyle = StyleSheet.flatten(style);\n\n return tabStyle ? tabStyle.width : undefined;\n };\n\n private getComputedTabWidth = (\n index: number,\n layout: Layout,\n routes: Route[],\n scrollEnabled: boolean | undefined,\n tabWidths: { [key: string]: number },\n flattenedWidth: string | number | undefined\n ) => {\n if (flattenedWidth === 'auto') {\n return tabWidths[routes[index].key] || 0;\n }\n\n switch (typeof flattenedWidth) {\n case 'number':\n return flattenedWidth;\n case 'string':\n if (flattenedWidth.endsWith('%')) {\n const width = parseFloat(flattenedWidth);\n if (Number.isFinite(width)) {\n return layout.width * (width / 100);\n }\n }\n }\n\n if (scrollEnabled) {\n return (layout.width / 5) * 2;\n }\n\n return layout.width / routes.length;\n };\n\n private getMaxScrollDistance = (tabBarWidth: number, layoutWidth: number) =>\n tabBarWidth - layoutWidth;\n\n private getTabBarWidth = (props: Props<T>, state: State) => {\n const { layout, tabWidths } = state;\n const { scrollEnabled, tabStyle } = props;\n const { routes } = props.navigationState;\n\n return routes.reduce<number>(\n (acc, _, i) =>\n acc +\n this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n ),\n 0\n );\n };\n\n private normalizeScrollValue = (\n props: Props<T>,\n state: State,\n value: number\n ) => {\n const { layout } = state;\n const tabBarWidth = this.getTabBarWidth(props, state);\n const maxDistance = this.getMaxScrollDistance(tabBarWidth, layout.width);\n const scrollValue = Math.max(Math.min(value, maxDistance), 0);\n\n if (Platform.OS === 'android' && I18nManager.isRTL) {\n // On Android, scroll value is not applied in reverse in RTL\n // so we need to manually adjust it to apply correct value\n return maxDistance - scrollValue;\n }\n\n return scrollValue;\n };\n\n private getScrollAmount = (props: Props<T>, state: State, index: number) => {\n const { layout, tabWidths } = state;\n const { scrollEnabled, tabStyle } = props;\n const { routes } = props.navigationState;\n\n const centerDistance = Array.from({ length: index + 1 }).reduce<number>(\n (total, _, i) => {\n const tabWidth = this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n );\n\n // To get the current index centered we adjust scroll amount by width of indexes\n // 0 through (i - 1) and add half the width of current index i\n return total + (index === i ? tabWidth / 2 : tabWidth);\n },\n 0\n );\n\n const scrollAmount = centerDistance - layout.width / 2;\n\n return this.normalizeScrollValue(props, state, scrollAmount);\n };\n\n private resetScroll = (index: number) => {\n if (this.props.scrollEnabled) {\n this.scrollViewRef.current?.scrollTo({\n x: this.getScrollAmount(this.props, this.state, index),\n animated: true,\n });\n }\n };\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n if (\n this.state.layout.width === width &&\n this.state.layout.height === height\n ) {\n return;\n }\n\n this.setState({\n layout: {\n height,\n width,\n },\n });\n };\n\n private getTranslateX = (\n scrollAmount: Animated.Value,\n maxScrollDistance: number\n ) =>\n Animated.multiply(\n Platform.OS === 'android' && I18nManager.isRTL\n ? Animated.add(maxScrollDistance, Animated.multiply(scrollAmount, -1))\n : scrollAmount,\n I18nManager.isRTL ? 1 : -1\n );\n\n render() {\n const {\n position,\n navigationState,\n jumpTo,\n scrollEnabled,\n bounces,\n getAccessibilityLabel,\n getAccessible,\n getLabelText,\n getTestID,\n renderBadge,\n renderIcon,\n renderLabel,\n renderTabBarItem,\n activeColor,\n inactiveColor,\n pressColor,\n pressOpacity,\n onTabPress,\n onTabLongPress,\n tabStyle,\n labelStyle,\n indicatorStyle,\n contentContainerStyle,\n style,\n indicatorContainerStyle,\n } = this.props;\n const { layout, tabWidths } = this.state;\n const { routes } = navigationState;\n\n const isWidthDynamic = this.getFlattenedTabWidth(tabStyle) === 'auto';\n const tabBarWidth = this.getTabBarWidth(this.props, this.state);\n const tabBarWidthPercent = `${routes.length * 40}%`;\n const translateX = this.getTranslateX(\n this.scrollAmount,\n this.getMaxScrollDistance(tabBarWidth, layout.width)\n );\n\n return (\n <Animated.View\n onLayout={this.handleLayout}\n style={[styles.tabBar, style]}\n >\n <Animated.View\n pointerEvents=\"none\"\n style={[\n styles.indicatorContainer,\n scrollEnabled ? { transform: [{ translateX }] as any } : null,\n tabBarWidth\n ? { width: tabBarWidth }\n : scrollEnabled\n ? { width: tabBarWidthPercent }\n : null,\n indicatorContainerStyle,\n ]}\n >\n {this.props.renderIndicator({\n position,\n layout,\n navigationState,\n jumpTo,\n width: isWidthDynamic ? 'auto' : `${100 / routes.length}%`,\n style: indicatorStyle,\n getTabWidth: (i: number) =>\n this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n ),\n })}\n </Animated.View>\n <View style={styles.scroll}>\n <Animated.ScrollView\n horizontal\n accessibilityRole=\"tablist\"\n keyboardShouldPersistTaps=\"handled\"\n scrollEnabled={scrollEnabled}\n bounces={bounces}\n alwaysBounceHorizontal={false}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n automaticallyAdjustContentInsets={false}\n overScrollMode=\"never\"\n contentContainerStyle={[\n styles.tabContent,\n scrollEnabled\n ? { width: tabBarWidth || tabBarWidthPercent }\n : styles.container,\n contentContainerStyle,\n ]}\n scrollEventThrottle={16}\n onScroll={Animated.event(\n [\n {\n nativeEvent: {\n contentOffset: { x: this.scrollAmount },\n },\n },\n ],\n { useNativeDriver: true }\n )}\n ref={this.scrollViewRef}\n >\n {routes.map((route: T) => {\n const props: TabBarItemProps<T> & { key: string } = {\n key: route.key,\n position: position,\n route: route,\n navigationState: navigationState,\n getAccessibilityLabel: getAccessibilityLabel,\n getAccessible: getAccessible,\n getLabelText: getLabelText,\n getTestID: getTestID,\n renderBadge: renderBadge,\n renderIcon: renderIcon,\n renderLabel: renderLabel,\n activeColor: activeColor,\n inactiveColor: inactiveColor,\n pressColor: pressColor,\n pressOpacity: pressOpacity,\n onLayout: isWidthDynamic\n ? (e) => {\n this.measuredTabWidths[route.key] =\n e.nativeEvent.layout.width;\n\n // When we have measured widths for all of the tabs, we should updates the state\n // We avoid doing separate setState for each layout since it triggers multiple renders and slows down app\n if (\n routes.every(\n (r) =>\n typeof this.measuredTabWidths[r.key] === 'number'\n )\n ) {\n this.setState({\n tabWidths: { ...this.measuredTabWidths },\n });\n }\n }\n : undefined,\n onPress: () => {\n const event: Scene<T> & Event = {\n route,\n defaultPrevented: false,\n preventDefault: () => {\n event.defaultPrevented = true;\n },\n };\n\n onTabPress?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n this.props.jumpTo(route.key);\n },\n onLongPress: () => onTabLongPress?.({ route }),\n labelStyle: labelStyle,\n style: tabStyle,\n };\n\n return renderTabBarItem ? (\n renderTabBarItem(props)\n ) : (\n <TabBarItem {...props} />\n );\n })}\n </Animated.ScrollView>\n </View>\n </Animated.View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n scroll: {\n overflow: Platform.select({ default: 'scroll', web: undefined }),\n },\n tabBar: {\n backgroundColor: '#2196f3',\n elevation: 4,\n shadowColor: 'black',\n shadowOpacity: 0.1,\n shadowRadius: StyleSheet.hairlineWidth,\n shadowOffset: {\n height: StyleSheet.hairlineWidth,\n width: 0,\n },\n zIndex: 1,\n },\n tabContent: {\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n indicatorContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"names":["Separator","width","TabBar","React","Component","layout","height","tabWidths","Animated","Value","createRef","style","tabStyle","StyleSheet","flatten","undefined","index","routes","scrollEnabled","flattenedWidth","key","endsWith","parseFloat","Number","isFinite","length","tabBarWidth","layoutWidth","props","state","navigationState","reduce","acc","_","i","gap","getComputedTabWidth","getFlattenedTabWidth","value","getTabBarWidth","maxDistance","getMaxScrollDistance","scrollValue","Math","max","min","Platform","OS","I18nManager","isRTL","centerDistance","Array","from","total","tabWidth","scrollAmount","normalizeScrollValue","flatListRef","current","scrollToOffset","offset","getScrollAmount","animated","e","nativeEvent","setState","maxScrollDistance","multiply","add","componentDidUpdate","prevProps","prevState","every","r","resetScroll","render","position","jumpTo","bounces","getAccessibilityLabel","getAccessible","getLabelText","getTestID","renderBadge","renderIcon","renderLabel","renderTabBarItem","activeColor","inactiveColor","pressColor","pressOpacity","onTabPress","onTabLongPress","labelStyle","indicatorStyle","contentContainerStyle","indicatorContainerStyle","isWidthDynamic","separatorsWidth","separatorPercent","tabBarWidthPercent","translateX","getTranslateX","handleLayout","styles","tabBar","indicatorContainer","transform","renderIndicator","getTabWidth","scroll","item","tabContent","container","route","onLayout","measuredTabWidths","onPress","event","defaultPrevented","preventDefault","onLongPress","contentOffset","x","useNativeDriver","title","accessible","accessibilityLabel","testID","create","flex","overflow","select","default","web","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","zIndex","flexDirection","flexWrap","top","left","right","bottom"],"sources":["TabBar.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n ViewStyle,\n TextStyle,\n LayoutChangeEvent,\n I18nManager,\n Platform,\n FlatList,\n ListRenderItemInfo,\n} from 'react-native';\nimport TabBarItem, { Props as TabBarItemProps } from './TabBarItem';\nimport TabBarIndicator, { Props as IndicatorProps } from './TabBarIndicator';\nimport type {\n Route,\n Scene,\n SceneRendererProps,\n NavigationState,\n Layout,\n Event,\n} from './types';\n\nexport type Props<T extends Route> = SceneRendererProps & {\n navigationState: NavigationState<T>;\n scrollEnabled?: boolean;\n bounces?: boolean;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (\n scene: Scene<T> & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderIcon?: (\n scene: Scene<T> & {\n focused: boolean;\n color: string;\n }\n ) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n renderIndicator: (props: IndicatorProps<T>) => React.ReactNode;\n renderTabBarItem?: (\n props: TabBarItemProps<T> & { key: string }\n ) => React.ReactElement;\n onTabPress?: (scene: Scene<T> & Event) => void;\n onTabLongPress?: (scene: Scene<T>) => void;\n tabStyle?: StyleProp<ViewStyle>;\n indicatorStyle?: StyleProp<ViewStyle>;\n indicatorContainerStyle?: StyleProp<ViewStyle>;\n labelStyle?: StyleProp<TextStyle>;\n contentContainerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<ViewStyle>;\n gap?: number;\n};\n\ntype State = {\n layout: Layout;\n tabWidths: { [key: string]: number };\n};\n\nconst Separator = ({ width }: { width: number }) => {\n return <View style={{ width }} />;\n};\n\nexport default class TabBar<T extends Route> extends React.Component<\n Props<T>,\n State\n> {\n static defaultProps = {\n getLabelText: ({ route }: Scene<Route>) => route.title,\n getAccessible: ({ route }: Scene<Route>) =>\n typeof route.accessible !== 'undefined' ? route.accessible : true,\n getAccessibilityLabel: ({ route }: Scene<Route>) =>\n typeof route.accessibilityLabel === 'string'\n ? route.accessibilityLabel\n : typeof route.title === 'string'\n ? route.title\n : undefined,\n getTestID: ({ route }: Scene<Route>) => route.testID,\n renderIndicator: (props: IndicatorProps<Route>) => (\n <TabBarIndicator {...props} />\n ),\n gap: 0,\n };\n\n state: State = {\n layout: { width: 0, height: 0 },\n tabWidths: {},\n };\n\n componentDidUpdate(prevProps: Props<T>, prevState: State) {\n const { navigationState } = this.props;\n const { layout, tabWidths } = this.state;\n\n if (\n prevProps.navigationState.routes.length !==\n navigationState.routes.length ||\n prevProps.navigationState.index !== navigationState.index ||\n prevState.layout.width !== layout.width ||\n prevState.tabWidths !== tabWidths\n ) {\n if (\n this.getFlattenedTabWidth(this.props.tabStyle) === 'auto' &&\n !(\n layout.width &&\n navigationState.routes.every(\n (r) => typeof tabWidths[r.key] === 'number'\n )\n )\n ) {\n // When tab width is dynamic, only adjust the scroll once we have all tab widths and layout\n return;\n }\n\n this.resetScroll(navigationState.index);\n }\n }\n\n // to store the layout.width of each tab\n // when all onLayout's are fired, this would be set in state\n private measuredTabWidths: { [key: string]: number } = {};\n\n private scrollAmount = new Animated.Value(0);\n\n private flatListRef = React.createRef<FlatList>();\n\n private getFlattenedTabWidth = (style: StyleProp<ViewStyle>) => {\n const tabStyle = StyleSheet.flatten(style);\n\n return tabStyle ? tabStyle.width : undefined;\n };\n\n private getComputedTabWidth = (\n index: number,\n layout: Layout,\n routes: Route[],\n scrollEnabled: boolean | undefined,\n tabWidths: { [key: string]: number },\n flattenedWidth: string | number | undefined\n ) => {\n if (flattenedWidth === 'auto') {\n return tabWidths[routes[index].key] || 0;\n }\n\n switch (typeof flattenedWidth) {\n case 'number':\n return flattenedWidth;\n case 'string':\n if (flattenedWidth.endsWith('%')) {\n const width = parseFloat(flattenedWidth);\n if (Number.isFinite(width)) {\n return layout.width * (width / 100);\n }\n }\n }\n\n if (scrollEnabled) {\n return (layout.width / 5) * 2;\n }\n return layout.width / routes.length;\n };\n\n private getMaxScrollDistance = (tabBarWidth: number, layoutWidth: number) =>\n tabBarWidth - layoutWidth;\n\n private getTabBarWidth = (props: Props<T>, state: State) => {\n const { layout, tabWidths } = state;\n const { scrollEnabled, tabStyle } = props;\n const { routes } = props.navigationState;\n\n return routes.reduce<number>(\n (acc, _, i) =>\n acc +\n (i > 0 ? props.gap ?? 0 : 0) +\n this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n ),\n 0\n );\n };\n\n private normalizeScrollValue = (\n props: Props<T>,\n state: State,\n value: number\n ) => {\n const { layout } = state;\n const tabBarWidth = this.getTabBarWidth(props, state);\n const maxDistance = this.getMaxScrollDistance(tabBarWidth, layout.width);\n const scrollValue = Math.max(Math.min(value, maxDistance), 0);\n\n if (Platform.OS === 'android' && I18nManager.isRTL) {\n // On Android, scroll value is not applied in reverse in RTL\n // so we need to manually adjust it to apply correct value\n return maxDistance - scrollValue;\n }\n\n return scrollValue;\n };\n\n private getScrollAmount = (props: Props<T>, state: State, index: number) => {\n const { layout, tabWidths } = state;\n const { scrollEnabled, tabStyle } = props;\n const { routes } = props.navigationState;\n\n const centerDistance = Array.from({ length: index + 1 }).reduce<number>(\n (total, _, i) => {\n const tabWidth = this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n );\n\n // To get the current index centered we adjust scroll amount by width of indexes\n // 0 through (i - 1) and add half the width of current index i\n return (\n total +\n (index === i\n ? (tabWidth + (props.gap ?? 0)) / 2\n : tabWidth + (props.gap ?? 0))\n );\n },\n 0\n );\n\n const scrollAmount = centerDistance - layout.width / 2;\n\n return this.normalizeScrollValue(props, state, scrollAmount);\n };\n\n private resetScroll = (index: number) => {\n if (this.props.scrollEnabled) {\n this.flatListRef.current?.scrollToOffset({\n offset: this.getScrollAmount(this.props, this.state, index),\n animated: true,\n });\n }\n };\n\n private handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n if (\n this.state.layout.width === width &&\n this.state.layout.height === height\n ) {\n return;\n }\n\n this.setState({\n layout: {\n height,\n width,\n },\n });\n };\n\n private getTranslateX = (\n scrollAmount: Animated.Value,\n maxScrollDistance: number\n ) =>\n Animated.multiply(\n Platform.OS === 'android' && I18nManager.isRTL\n ? Animated.add(maxScrollDistance, Animated.multiply(scrollAmount, -1))\n : scrollAmount,\n I18nManager.isRTL ? 1 : -1\n );\n\n render() {\n const {\n position,\n navigationState,\n jumpTo,\n scrollEnabled,\n bounces,\n getAccessibilityLabel,\n getAccessible,\n getLabelText,\n getTestID,\n renderBadge,\n renderIcon,\n renderLabel,\n renderTabBarItem,\n activeColor,\n inactiveColor,\n pressColor,\n pressOpacity,\n onTabPress,\n onTabLongPress,\n tabStyle,\n labelStyle,\n indicatorStyle,\n contentContainerStyle,\n style,\n indicatorContainerStyle,\n gap = 0,\n } = this.props;\n const { layout, tabWidths } = this.state;\n const { routes } = navigationState;\n\n const isWidthDynamic = this.getFlattenedTabWidth(tabStyle) === 'auto';\n const tabBarWidth = this.getTabBarWidth(this.props, this.state);\n const separatorsWidth = Math.max(0, routes.length - 1) * gap;\n const separatorPercent = (separatorsWidth / tabBarWidth) * 100;\n\n const tabBarWidthPercent = `${routes.length * 40}%`;\n const translateX = this.getTranslateX(\n this.scrollAmount,\n this.getMaxScrollDistance(tabBarWidth, layout.width)\n );\n\n return (\n <Animated.View\n onLayout={this.handleLayout}\n style={[styles.tabBar, style]}\n >\n <Animated.View\n pointerEvents=\"none\"\n style={[\n styles.indicatorContainer,\n scrollEnabled ? { transform: [{ translateX }] as any } : null,\n tabBarWidth > separatorsWidth\n ? { width: tabBarWidth - separatorsWidth }\n : scrollEnabled\n ? { width: tabBarWidthPercent }\n : null,\n indicatorContainerStyle,\n ]}\n >\n {this.props.renderIndicator({\n position,\n layout,\n navigationState,\n jumpTo,\n width: isWidthDynamic\n ? 'auto'\n : `${(100 - separatorPercent) / routes.length}%`,\n style: indicatorStyle,\n getTabWidth: (i: number) =>\n this.getComputedTabWidth(\n i,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n ),\n gap,\n })}\n </Animated.View>\n <View style={styles.scroll}>\n <Animated.FlatList\n data={routes as Animated.WithAnimatedValue<T>[]}\n keyExtractor={(item) => item.key}\n horizontal\n accessibilityRole=\"tablist\"\n keyboardShouldPersistTaps=\"handled\"\n scrollEnabled={scrollEnabled}\n bounces={bounces}\n alwaysBounceHorizontal={false}\n scrollsToTop={false}\n showsHorizontalScrollIndicator={false}\n showsVerticalScrollIndicator={false}\n automaticallyAdjustContentInsets={false}\n overScrollMode=\"never\"\n contentContainerStyle={[\n styles.tabContent,\n scrollEnabled\n ? {\n width:\n tabBarWidth > separatorsWidth\n ? tabBarWidth\n : tabBarWidthPercent,\n }\n : styles.container,\n contentContainerStyle,\n ]}\n scrollEventThrottle={16}\n renderItem={({ item: route, index }: ListRenderItemInfo<T>) => {\n const props: TabBarItemProps<T> & { key: string } = {\n key: route.key,\n position: position,\n route: route,\n navigationState: navigationState,\n getAccessibilityLabel: getAccessibilityLabel,\n getAccessible: getAccessible,\n getLabelText: getLabelText,\n getTestID: getTestID,\n renderBadge: renderBadge,\n renderIcon: renderIcon,\n renderLabel: renderLabel,\n activeColor: activeColor,\n inactiveColor: inactiveColor,\n pressColor: pressColor,\n pressOpacity: pressOpacity,\n onLayout: isWidthDynamic\n ? (e) => {\n this.measuredTabWidths[route.key] =\n e.nativeEvent.layout.width;\n\n // When we have measured widths for all of the tabs, we should updates the state\n // We avoid doing separate setState for each layout since it triggers multiple renders and slows down app\n if (\n routes.every(\n (r) =>\n typeof this.measuredTabWidths[r.key] === 'number'\n )\n ) {\n this.setState({\n tabWidths: { ...this.measuredTabWidths },\n });\n }\n }\n : undefined,\n onPress: () => {\n const event: Scene<T> & Event = {\n route,\n defaultPrevented: false,\n preventDefault: () => {\n event.defaultPrevented = true;\n },\n };\n\n onTabPress?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n this.props.jumpTo(route.key);\n },\n onLongPress: () => onTabLongPress?.({ route }),\n labelStyle: labelStyle,\n style: [\n tabStyle,\n // Calculate the deafult width for tab for FlatList to work.\n this.getFlattenedTabWidth(tabStyle) === undefined && {\n width: this.getComputedTabWidth(\n index,\n layout,\n routes,\n scrollEnabled,\n tabWidths,\n this.getFlattenedTabWidth(tabStyle)\n ),\n },\n ],\n };\n\n return (\n <React.Fragment key={route.key}>\n {gap > 0 && index > 0 ? <Separator width={gap} /> : null}\n {renderTabBarItem ? (\n renderTabBarItem(props)\n ) : (\n <TabBarItem {...props} />\n )}\n </React.Fragment>\n );\n }}\n onScroll={Animated.event(\n [\n {\n nativeEvent: {\n contentOffset: { x: this.scrollAmount },\n },\n },\n ],\n { useNativeDriver: true }\n )}\n ref={this.flatListRef}\n />\n </View>\n </Animated.View>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n scroll: {\n overflow: Platform.select({ default: 'scroll', web: undefined }),\n },\n tabBar: {\n backgroundColor: '#2196f3',\n elevation: 4,\n shadowColor: 'black',\n shadowOpacity: 0.1,\n shadowRadius: StyleSheet.hairlineWidth,\n shadowOffset: {\n height: StyleSheet.hairlineWidth,\n width: 0,\n },\n zIndex: 1,\n },\n tabContent: {\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n indicatorContainer: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n});\n"],"mappings":"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"}
|
|
@@ -16,8 +16,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
16
16
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
17
|
|
|
18
18
|
class TabBarIndicator extends React.Component {
|
|
19
|
-
constructor(
|
|
20
|
-
super(...
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
21
|
|
|
22
22
|
_defineProperty(this, "fadeInIndicator", () => {
|
|
23
23
|
const {
|
|
@@ -44,12 +44,12 @@ class TabBarIndicator extends React.Component {
|
|
|
44
44
|
|
|
45
45
|
_defineProperty(this, "opacity", new _reactNative.Animated.Value(this.props.width === 'auto' ? 0 : 1));
|
|
46
46
|
|
|
47
|
-
_defineProperty(this, "getTranslateX", (position, routes, getTabWidth) => {
|
|
47
|
+
_defineProperty(this, "getTranslateX", (position, routes, getTabWidth, gap) => {
|
|
48
48
|
const inputRange = routes.map((_, i) => i); // every index contains widths at all previous indices
|
|
49
49
|
|
|
50
50
|
const outputRange = routes.reduce((acc, _, i) => {
|
|
51
51
|
if (i === 0) return [0];
|
|
52
|
-
return [...acc, acc[i - 1] + getTabWidth(i - 1)];
|
|
52
|
+
return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];
|
|
53
53
|
}, []);
|
|
54
54
|
const translateX = position.interpolate({
|
|
55
55
|
inputRange,
|
|
@@ -75,7 +75,8 @@ class TabBarIndicator extends React.Component {
|
|
|
75
75
|
getTabWidth,
|
|
76
76
|
width,
|
|
77
77
|
style,
|
|
78
|
-
layout
|
|
78
|
+
layout,
|
|
79
|
+
gap
|
|
79
80
|
} = this.props;
|
|
80
81
|
const {
|
|
81
82
|
routes
|
|
@@ -83,7 +84,7 @@ class TabBarIndicator extends React.Component {
|
|
|
83
84
|
const transform = [];
|
|
84
85
|
|
|
85
86
|
if (layout.width) {
|
|
86
|
-
const translateX = routes.length > 1 ? this.getTranslateX(position, routes, getTabWidth) : 0;
|
|
87
|
+
const translateX = routes.length > 1 ? this.getTranslateX(position, routes, getTabWidth, gap) : 0;
|
|
87
88
|
transform.push({
|
|
88
89
|
translateX
|
|
89
90
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["TabBarIndicator","React","Component","navigationState","layout","width","getTabWidth","props","isIndicatorShown","routes","every","_","i","Animated","timing","opacity","toValue","duration","easing","Easing","in","linear","useNativeDriver","start","Value","position","gap","inputRange","map","outputRange","reduce","acc","translateX","interpolate","extrapolate","multiply","I18nManager","isRTL","componentDidMount","fadeInIndicator","componentDidUpdate","render","style","transform","length","getTranslateX","push","scaleX","styles","indicator","Platform","OS","left","index","StyleSheet","create","backgroundColor","bottom","right","height"],"sources":["TabBarIndicator.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n Easing,\n StyleSheet,\n I18nManager,\n StyleProp,\n ViewStyle,\n Platform,\n} from 'react-native';\n\nimport type { Route, SceneRendererProps, NavigationState } from './types';\n\nexport type GetTabWidth = (index: number) => number;\n\nexport type Props<T extends Route> = SceneRendererProps & {\n navigationState: NavigationState<T>;\n width: string | number;\n style?: StyleProp<ViewStyle>;\n getTabWidth: GetTabWidth;\n gap?: number;\n};\n\nexport default class TabBarIndicator<T extends Route> extends React.Component<\n Props<T>\n> {\n componentDidMount() {\n this.fadeInIndicator();\n }\n\n componentDidUpdate() {\n this.fadeInIndicator();\n }\n\n private fadeInIndicator = () => {\n const { navigationState, layout, width, getTabWidth } = this.props;\n\n if (\n !this.isIndicatorShown &&\n width === 'auto' &&\n layout.width &&\n // We should fade-in the indicator when we have widths for all the tab items\n navigationState.routes.every((_, i) => getTabWidth(i))\n ) {\n this.isIndicatorShown = true;\n\n Animated.timing(this.opacity, {\n toValue: 1,\n duration: 150,\n easing: Easing.in(Easing.linear),\n useNativeDriver: true,\n }).start();\n }\n };\n\n private isIndicatorShown = false;\n\n private opacity = new Animated.Value(this.props.width === 'auto' ? 0 : 1);\n\n private getTranslateX = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n getTabWidth: GetTabWidth,\n gap?: number\n ) => {\n const inputRange = routes.map((_, i) => i);\n\n // every index contains widths at all previous indices\n const outputRange = routes.reduce<number[]>((acc, _, i) => {\n if (i === 0) return [0];\n return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];\n }, []);\n\n const translateX = position.interpolate({\n inputRange,\n outputRange,\n extrapolate: 'clamp',\n });\n\n return Animated.multiply(translateX, I18nManager.isRTL ? -1 : 1);\n };\n\n render() {\n const {\n position,\n navigationState,\n getTabWidth,\n width,\n style,\n layout,\n gap,\n } = this.props;\n const { routes } = navigationState;\n\n const transform = [];\n\n if (layout.width) {\n const translateX =\n routes.length > 1\n ? this.getTranslateX(position, routes, getTabWidth, gap)\n : 0;\n\n transform.push({ translateX });\n }\n\n if (width === 'auto') {\n const inputRange = routes.map((_, i) => i);\n const outputRange = inputRange.map(getTabWidth);\n\n transform.push(\n {\n scaleX:\n routes.length > 1\n ? position.interpolate({\n inputRange,\n outputRange,\n extrapolate: 'clamp',\n })\n : outputRange[0],\n },\n { translateX: 0.5 }\n );\n }\n\n return (\n <Animated.View\n style={[\n styles.indicator,\n { width: width === 'auto' ? 1 : width },\n // If layout is not available, use `left` property for positioning the indicator\n // This avoids rendering delay until we are able to calculate translateX\n // If platform is macos use `left` property as `transform` is broken at the moment.\n // See: https://github.com/microsoft/react-native-macos/issues/280\n layout.width && Platform.OS !== 'macos'\n ? { left: 0 }\n : { left: `${(100 / routes.length) * navigationState.index}%` },\n { transform },\n width === 'auto' ? { opacity: this.opacity } : null,\n style,\n ]}\n />\n );\n }\n}\n\nconst styles = StyleSheet.create({\n indicator: {\n backgroundColor: '#ffeb3b',\n position: 'absolute',\n left: 0,\n bottom: 0,\n right: 0,\n height: 2,\n },\n});\n"],"mappings":"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"}
|
|
@@ -23,8 +23,8 @@ const DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';
|
|
|
23
23
|
const DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';
|
|
24
24
|
|
|
25
25
|
class TabBarItem extends React.Component {
|
|
26
|
-
constructor(
|
|
27
|
-
super(...
|
|
26
|
+
constructor() {
|
|
27
|
+
super(...arguments);
|
|
28
28
|
|
|
29
29
|
_defineProperty(this, "getActiveOpacity", (position, routes, tabIndex) => {
|
|
30
30
|
if (routes.length > 1) {
|
|
@@ -112,10 +112,11 @@ class TabBarItem extends React.Component {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
const renderLabel = renderLabelCustom !== undefined ? renderLabelCustom :
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
const renderLabel = renderLabelCustom !== undefined ? renderLabelCustom : _ref => {
|
|
116
|
+
let {
|
|
117
|
+
route,
|
|
118
|
+
color
|
|
119
|
+
} = _ref;
|
|
119
120
|
const labelText = getLabelText({
|
|
120
121
|
route
|
|
121
122
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabBarItem.tsx"],"names":["DEFAULT_ACTIVE_COLOR","DEFAULT_INACTIVE_COLOR","TabBarItem","React","Component","position","routes","tabIndex","length","inputRange","map","_","i","interpolate","outputRange","render","route","navigationState","renderLabel","renderLabelCustom","renderIcon","renderBadge","getLabelText","getTestID","getAccessibilityLabel","getAccessible","activeColor","activeColorCustom","inactiveColor","inactiveColorCustom","pressColor","pressOpacity","labelStyle","style","onLayout","onPress","onLongPress","props","indexOf","isFocused","index","labelColorFromStyle","StyleSheet","flatten","color","undefined","activeOpacity","getActiveOpacity","inactiveOpacity","getInactiveOpacity","icon","label","activeIcon","focused","inactiveIcon","styles","opacity","absoluteFill","labelText","marginTop","activeLabel","inactiveLabel","tabStyle","isWidthSet","width","tabContainerStyle","flex","scene","accessibilityLabel","badge","borderless","selected","pressable","item","create","margin","backgroundColor","textTransform","alignItems","justifyContent","padding","minHeight","top","right"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n LayoutChangeEvent,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport PlatformPressable from './PlatformPressable';\nimport type { Scene, Route, NavigationState } from './types';\n\nexport type Props<T extends Route> = {\n position: Animated.AnimatedInterpolation;\n route: T;\n navigationState: NavigationState<T>;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderIcon?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n onLayout?: (event: LayoutChangeEvent) => void;\n onPress: () => void;\n onLongPress: () => void;\n labelStyle?: StyleProp<TextStyle>;\n style: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';\nconst DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';\n\nexport default class TabBarItem<T extends Route> extends React.Component<\n Props<T>\n> {\n private getActiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === tabIndex ? 1 : 0)),\n });\n } else {\n return 1;\n }\n };\n\n private getInactiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_: Route, i: number) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i: number) => (i === tabIndex ? 0 : 1)),\n });\n } else {\n return 0;\n }\n };\n\n render() {\n const {\n route,\n position,\n navigationState,\n renderLabel: renderLabelCustom,\n renderIcon,\n renderBadge,\n getLabelText,\n getTestID,\n getAccessibilityLabel,\n getAccessible,\n activeColor: activeColorCustom,\n inactiveColor: inactiveColorCustom,\n pressColor,\n pressOpacity,\n labelStyle,\n style,\n onLayout,\n onPress,\n onLongPress,\n } = this.props;\n\n const tabIndex = navigationState.routes.indexOf(route);\n const isFocused = navigationState.index === tabIndex;\n\n const labelColorFromStyle = StyleSheet.flatten(labelStyle || {}).color;\n\n const activeColor =\n activeColorCustom !== undefined\n ? activeColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_ACTIVE_COLOR;\n const inactiveColor =\n inactiveColorCustom !== undefined\n ? inactiveColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_INACTIVE_COLOR;\n\n const activeOpacity = this.getActiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n const inactiveOpacity = this.getInactiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n\n let icon: React.ReactNode | null = null;\n let label: React.ReactNode | null = null;\n\n if (renderIcon) {\n const activeIcon = renderIcon({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveIcon = renderIcon({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n if (inactiveIcon != null && activeIcon != null) {\n icon = (\n <View style={styles.icon}>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveIcon}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeIcon}\n </Animated.View>\n </View>\n );\n }\n }\n\n const renderLabel =\n renderLabelCustom !== undefined\n ? renderLabelCustom\n : ({ route, color }: { route: T; color: string }) => {\n const labelText = getLabelText({ route });\n\n if (typeof labelText === 'string') {\n return (\n <Animated.Text\n style={[\n styles.label,\n icon ? { marginTop: 0 } : null,\n labelStyle,\n { color },\n ]}\n >\n {labelText}\n </Animated.Text>\n );\n }\n\n return labelText;\n };\n\n if (renderLabel) {\n const activeLabel = renderLabel({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveLabel = renderLabel({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n label = (\n <View>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveLabel}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeLabel}\n </Animated.View>\n </View>\n );\n }\n\n const tabStyle = StyleSheet.flatten(style);\n const isWidthSet = tabStyle?.width !== undefined;\n const tabContainerStyle: ViewStyle | null = isWidthSet ? null : { flex: 1 };\n\n const scene = { route };\n\n let accessibilityLabel = getAccessibilityLabel(scene);\n\n accessibilityLabel =\n typeof accessibilityLabel !== 'undefined'\n ? accessibilityLabel\n : getLabelText(scene);\n\n const badge = renderBadge ? renderBadge(scene) : null;\n\n return (\n <PlatformPressable\n android_ripple={{ borderless: true }}\n testID={getTestID(scene)}\n accessible={getAccessible(scene)}\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isFocused }}\n // @ts-ignore: this is to support older React Native versions\n accessibilityStates={isFocused ? ['selected'] : []}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n delayPressIn={0}\n onLayout={onLayout}\n onPress={onPress}\n onLongPress={onLongPress}\n style={[styles.pressable, tabContainerStyle]}\n >\n <View pointerEvents=\"none\" style={[styles.item, tabStyle]}>\n {icon}\n {label}\n {badge != null ? <View style={styles.badge}>{badge}</View> : null}\n </View>\n </PlatformPressable>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n label: {\n margin: 4,\n backgroundColor: 'transparent',\n textTransform: 'uppercase',\n },\n icon: {\n margin: 2,\n },\n item: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n minHeight: 48,\n },\n badge: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n pressable: {\n // The label is not pressable on Windows\n // Adding backgroundColor: 'transparent' seems to fix it\n backgroundColor: 'transparent',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"names":["DEFAULT_ACTIVE_COLOR","DEFAULT_INACTIVE_COLOR","TabBarItem","React","Component","position","routes","tabIndex","length","inputRange","map","_","i","interpolate","outputRange","render","route","navigationState","renderLabel","renderLabelCustom","renderIcon","renderBadge","getLabelText","getTestID","getAccessibilityLabel","getAccessible","activeColor","activeColorCustom","inactiveColor","inactiveColorCustom","pressColor","pressOpacity","labelStyle","style","onLayout","onPress","onLongPress","props","indexOf","isFocused","index","labelColorFromStyle","StyleSheet","flatten","color","undefined","activeOpacity","getActiveOpacity","inactiveOpacity","getInactiveOpacity","icon","label","activeIcon","focused","inactiveIcon","styles","opacity","absoluteFill","labelText","marginTop","activeLabel","inactiveLabel","tabStyle","isWidthSet","width","tabContainerStyle","flex","scene","accessibilityLabel","badge","borderless","selected","pressable","item","create","margin","backgroundColor","textTransform","alignItems","justifyContent","padding","minHeight","top","right"],"sources":["TabBarItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n StyleProp,\n LayoutChangeEvent,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport PlatformPressable from './PlatformPressable';\nimport type { Scene, Route, NavigationState } from './types';\n\nexport type Props<T extends Route> = {\n position: Animated.AnimatedInterpolation;\n route: T;\n navigationState: NavigationState<T>;\n activeColor?: string;\n inactiveColor?: string;\n pressColor?: string;\n pressOpacity?: number;\n getLabelText: (scene: Scene<T>) => string | undefined;\n getAccessible: (scene: Scene<T>) => boolean | undefined;\n getAccessibilityLabel: (scene: Scene<T>) => string | undefined;\n getTestID: (scene: Scene<T>) => string | undefined;\n renderLabel?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderIcon?: (scene: {\n route: T;\n focused: boolean;\n color: string;\n }) => React.ReactNode;\n renderBadge?: (scene: Scene<T>) => React.ReactNode;\n onLayout?: (event: LayoutChangeEvent) => void;\n onPress: () => void;\n onLongPress: () => void;\n labelStyle?: StyleProp<TextStyle>;\n style: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_ACTIVE_COLOR = 'rgba(255, 255, 255, 1)';\nconst DEFAULT_INACTIVE_COLOR = 'rgba(255, 255, 255, 0.7)';\n\nexport default class TabBarItem<T extends Route> extends React.Component<\n Props<T>\n> {\n private getActiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_, i) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i) => (i === tabIndex ? 1 : 0)),\n });\n } else {\n return 1;\n }\n };\n\n private getInactiveOpacity = (\n position: Animated.AnimatedInterpolation,\n routes: Route[],\n tabIndex: number\n ) => {\n if (routes.length > 1) {\n const inputRange = routes.map((_: Route, i: number) => i);\n\n return position.interpolate({\n inputRange,\n outputRange: inputRange.map((i: number) => (i === tabIndex ? 0 : 1)),\n });\n } else {\n return 0;\n }\n };\n\n render() {\n const {\n route,\n position,\n navigationState,\n renderLabel: renderLabelCustom,\n renderIcon,\n renderBadge,\n getLabelText,\n getTestID,\n getAccessibilityLabel,\n getAccessible,\n activeColor: activeColorCustom,\n inactiveColor: inactiveColorCustom,\n pressColor,\n pressOpacity,\n labelStyle,\n style,\n onLayout,\n onPress,\n onLongPress,\n } = this.props;\n\n const tabIndex = navigationState.routes.indexOf(route);\n const isFocused = navigationState.index === tabIndex;\n\n const labelColorFromStyle = StyleSheet.flatten(labelStyle || {}).color;\n\n const activeColor =\n activeColorCustom !== undefined\n ? activeColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_ACTIVE_COLOR;\n const inactiveColor =\n inactiveColorCustom !== undefined\n ? inactiveColorCustom\n : typeof labelColorFromStyle === 'string'\n ? labelColorFromStyle\n : DEFAULT_INACTIVE_COLOR;\n\n const activeOpacity = this.getActiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n const inactiveOpacity = this.getInactiveOpacity(\n position,\n navigationState.routes,\n tabIndex\n );\n\n let icon: React.ReactNode | null = null;\n let label: React.ReactNode | null = null;\n\n if (renderIcon) {\n const activeIcon = renderIcon({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveIcon = renderIcon({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n if (inactiveIcon != null && activeIcon != null) {\n icon = (\n <View style={styles.icon}>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveIcon}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeIcon}\n </Animated.View>\n </View>\n );\n }\n }\n\n const renderLabel =\n renderLabelCustom !== undefined\n ? renderLabelCustom\n : ({ route, color }: { route: T; color: string }) => {\n const labelText = getLabelText({ route });\n\n if (typeof labelText === 'string') {\n return (\n <Animated.Text\n style={[\n styles.label,\n icon ? { marginTop: 0 } : null,\n labelStyle,\n { color },\n ]}\n >\n {labelText}\n </Animated.Text>\n );\n }\n\n return labelText;\n };\n\n if (renderLabel) {\n const activeLabel = renderLabel({\n route,\n focused: true,\n color: activeColor,\n });\n const inactiveLabel = renderLabel({\n route,\n focused: false,\n color: inactiveColor,\n });\n\n label = (\n <View>\n <Animated.View style={{ opacity: inactiveOpacity }}>\n {inactiveLabel}\n </Animated.View>\n <Animated.View\n style={[StyleSheet.absoluteFill, { opacity: activeOpacity }]}\n >\n {activeLabel}\n </Animated.View>\n </View>\n );\n }\n\n const tabStyle = StyleSheet.flatten(style);\n const isWidthSet = tabStyle?.width !== undefined;\n const tabContainerStyle: ViewStyle | null = isWidthSet ? null : { flex: 1 };\n\n const scene = { route };\n\n let accessibilityLabel = getAccessibilityLabel(scene);\n\n accessibilityLabel =\n typeof accessibilityLabel !== 'undefined'\n ? accessibilityLabel\n : getLabelText(scene);\n\n const badge = renderBadge ? renderBadge(scene) : null;\n\n return (\n <PlatformPressable\n android_ripple={{ borderless: true }}\n testID={getTestID(scene)}\n accessible={getAccessible(scene)}\n accessibilityLabel={accessibilityLabel}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isFocused }}\n // @ts-ignore: this is to support older React Native versions\n accessibilityStates={isFocused ? ['selected'] : []}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n delayPressIn={0}\n onLayout={onLayout}\n onPress={onPress}\n onLongPress={onLongPress}\n style={[styles.pressable, tabContainerStyle]}\n >\n <View pointerEvents=\"none\" style={[styles.item, tabStyle]}>\n {icon}\n {label}\n {badge != null ? <View style={styles.badge}>{badge}</View> : null}\n </View>\n </PlatformPressable>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n label: {\n margin: 4,\n backgroundColor: 'transparent',\n textTransform: 'uppercase',\n },\n icon: {\n margin: 2,\n },\n item: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n minHeight: 48,\n },\n badge: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n pressable: {\n // The label is not pressable on Windows\n // Adding backgroundColor: 'transparent' seems to fix it\n backgroundColor: 'transparent',\n },\n});\n"],"mappings":"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"}
|