5d18031a3f125a3db523b4b03d5d815c.json
12 KB
{"ast":null,"code":"var _interopRequireWildcard=require(\"@babel/runtime/helpers/interopRequireWildcard\");var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _toConsumableArray2=_interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));var _classCallCheck2=_interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));var _createClass2=_interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));var _possibleConstructorReturn2=_interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));var _getPrototypeOf3=_interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));var _inherits2=_interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));var React=_interopRequireWildcard(require(\"react\"));var _StyleSheet=_interopRequireDefault(require(\"react-native-web/dist/exports/StyleSheet\"));var _I18nManager=_interopRequireDefault(require(\"react-native-web/dist/exports/I18nManager\"));var _reactNativeReanimated=_interopRequireWildcard(require(\"react-native-reanimated\"));var _memoize=_interopRequireDefault(require(\"./memoize\"));var _jsxFileName=\"/Users/satya/Workspace/Projects/react-native-tab-view/src/TabBarIndicator.tsx\";var interpolate=_reactNativeReanimated.default.interpolate,multiply=_reactNativeReanimated.default.multiply,Extrapolate=_reactNativeReanimated.default.Extrapolate;var TabBarIndicator=function(_React$Component){(0,_inherits2.default)(TabBarIndicator,_React$Component);function TabBarIndicator(){var _getPrototypeOf2;var _this;(0,_classCallCheck2.default)(this,TabBarIndicator);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=(0,_possibleConstructorReturn2.default)(this,(_getPrototypeOf2=(0,_getPrototypeOf3.default)(TabBarIndicator)).call.apply(_getPrototypeOf2,[this].concat(args)));_this.fadeInIndicator=function(){var _this$props=_this.props,navigationState=_this$props.navigationState,layout=_this$props.layout,width=_this$props.width,getTabWidth=_this$props.getTabWidth;if(!_this.isIndicatorShown&&width==='auto'&&layout.width&&navigationState.routes.every(function(_,i){return getTabWidth(i);})){_this.isIndicatorShown=true;_reactNativeReanimated.default.timing(_this.opacity,{duration:150,toValue:1,easing:_reactNativeReanimated.Easing.in(_reactNativeReanimated.Easing.linear)}).start();}};_this.isIndicatorShown=false;_this.opacity=new _reactNativeReanimated.default.Value(_this.props.width==='auto'?0:1);_this.getTranslateX=(0,_memoize.default)(function(position,routes,getTabWidth){var inputRange=routes.map(function(_,i){return i;});var outputRange=routes.reduce(function(acc,_,i){if(i===0)return[0];return[].concat((0,_toConsumableArray2.default)(acc),[acc[i-1]+getTabWidth(i-1)]);},[]);var transalteX=interpolate(position,{inputRange:inputRange,outputRange:outputRange,extrapolate:Extrapolate.CLAMP});return multiply(transalteX,_I18nManager.default.isRTL?-1:1);});_this.getWidth=(0,_memoize.default)(function(position,routes,getTabWidth){var inputRange=routes.map(function(_,i){return i;});var outputRange=inputRange.map(getTabWidth);return interpolate(position,{inputRange:inputRange,outputRange:outputRange,extrapolate:Extrapolate.CLAMP});});return _this;}(0,_createClass2.default)(TabBarIndicator,[{key:\"componentDidMount\",value:function componentDidMount(){this.fadeInIndicator();}},{key:\"componentDidUpdate\",value:function componentDidUpdate(){this.fadeInIndicator();}},{key:\"render\",value:function render(){var _this$props2=this.props,position=_this$props2.position,navigationState=_this$props2.navigationState,getTabWidth=_this$props2.getTabWidth,width=_this$props2.width,style=_this$props2.style,layout=_this$props2.layout;var routes=navigationState.routes;var translateX=routes.length>1?this.getTranslateX(position,routes,getTabWidth):0;var indicatorWidth=width==='auto'?routes.length>1?this.getWidth(position,routes,getTabWidth):getTabWidth(0):width;return React.createElement(_reactNativeReanimated.default.View,{style:[styles.indicator,{width:indicatorWidth},layout.width?{transform:[{translateX:translateX}]}:{left:100/routes.length*navigationState.index+\"%\"},width==='auto'?{opacity:this.opacity}:null,style],__source:{fileName:_jsxFileName,lineNumber:117}});}}]);return TabBarIndicator;}(React.Component);exports.default=TabBarIndicator;var styles=_StyleSheet.default.create({indicator:{backgroundColor:'#ffeb3b',position:'absolute',left:0,bottom:0,right:0,height:2}});","map":{"version":3,"sources":["TabBarIndicator.tsx"],"names":["interpolate","multiply","Extrapolate","Animated","TabBarIndicator","React","fadeInIndicator","navigationState","layout","width","getTabWidth","duration","toValue","easing","Easing","isIndicatorShown","opacity","getTranslateX","memoize","inputRange","routes","outputRange","i","acc","transalteX","extrapolate","I18nManager","getWidth","position","style","translateX","indicatorWidth","styles","transform","left","StyleSheet","indicator","backgroundColor","bottom","right","height"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, I18nManager, StyleProp, ViewStyle } from 'react-native';\nimport Animated, { Easing } from 'react-native-reanimated';\n\nimport memoize from './memoize';\nimport { 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;\n style?: StyleProp<ViewStyle>;\n getTabWidth: GetTabWidth;\n};\n\nconst { interpolate, multiply, Extrapolate } = Animated;\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 duration: 150,\n toValue: 1,\n easing: Easing.in(Easing.linear),\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 = memoize(\n (\n position: Animated.Node<number>,\n routes: Route[],\n getTabWidth: GetTabWidth\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)];\n }, []);\n\n const transalteX = interpolate(position, {\n inputRange,\n outputRange,\n extrapolate: Extrapolate.CLAMP,\n });\n\n return multiply(transalteX, I18nManager.isRTL ? -1 : 1);\n }\n );\n\n private getWidth = memoize(\n (\n position: Animated.Node<number>,\n routes: Route[],\n getTabWidth: GetTabWidth\n ) => {\n const inputRange = routes.map((_, i) => i);\n const outputRange = inputRange.map(getTabWidth);\n\n return interpolate(position, {\n inputRange,\n outputRange,\n extrapolate: Extrapolate.CLAMP,\n });\n }\n );\n\n render() {\n const {\n position,\n navigationState,\n getTabWidth,\n width,\n style,\n layout,\n } = this.props;\n const { routes } = navigationState;\n\n const translateX =\n routes.length > 1 ? this.getTranslateX(position, routes, getTabWidth) : 0;\n\n const indicatorWidth =\n width === 'auto'\n ? routes.length > 1\n ? this.getWidth(position, routes, getTabWidth)\n : getTabWidth(0)\n : width;\n\n return (\n <Animated.View\n style={[\n styles.indicator,\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 { width: indicatorWidth },\n layout.width\n ? { transform: [{ translateX }] as any }\n : { left: `${(100 / routes.length) * navigationState.index}%` },\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"]},"metadata":{},"sourceType":"script"}