UNPKG

react-native-vector-icons

Version:

Customizable Icons for React Native with support for NavBar/TabBar/ToolbarAndroid, image source and full styling.

1 lines 6.86 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(exports,"__esModule",{value:true});exports.createFA5iconSet=createFA5iconSet;exports.FA5Style=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));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 _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _createIconSet=_interopRequireWildcard(require("./create-icon-set"));var _ensureNativeModuleAvailable=_interopRequireDefault(require("./ensure-native-module-available"));var _jsxFileName="/home/travis/build/oblador/react-native-vector-icons/lib/create-icon-set-from-fontawesome5.js";var FA5Style={regular:0,light:1,solid:2,brand:3};exports.FA5Style=FA5Style;function createFA5iconSet(glyphMap){var metadata=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var proVersion=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var familyName="Font Awesome 5 "+(proVersion?'Pro':'Free');var metadataKeys=Object.keys(metadata);function createFA5iconSubset(type){var weight=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'400';var family=arguments.length>2&&arguments[2]!==undefined?arguments[2]:familyName;var fontFileID=proVersion?"Pro_"+type:type;return(0,_createIconSet.default)(glyphMap,family,"FontAwesome5_"+fontFileID+".ttf",{fontWeight:_reactNative.Platform.OS==='ios'?weight:undefined});}var RegularSet=createFA5iconSubset('Regular');var SolidSet=createFA5iconSubset('Solid','700');var LightSet=proVersion?createFA5iconSubset('Light','100'):RegularSet;var BrandsSet=createFA5iconSubset('Brands','400','Font Awesome 5 Brands');function iconSetFromStyle(style){switch(style){case FA5Style.brand:return BrandsSet;case FA5Style.light:return LightSet;case FA5Style.solid:return SolidSet;default:return RegularSet;}}function iconSetFromFamily(family){switch(family){case'brands':return BrandsSet;case'regular':return LightSet;case'solid':return SolidSet;default:return RegularSet;}}function styleFromProps(props){var light=props.light,solid=props.solid;if(light)return FA5Style.light;if(solid)return FA5Style.solid;return FA5Style.regular;}function styleToFamily(style){switch(style){case FA5Style.brand:return'brands';case FA5Style.light:return'light';case FA5Style.solid:return'solid';default:return'regular';}}function familyToStyle(family){switch(family){case'brands':return FA5Style.brand;case'light':return FA5Style.light;case'solid':return FA5Style.solid;default:return FA5Style.regular;}}function fallbackForGlyph(glyph){for(var i=0;i<metadataKeys.length;i+=1){var family=metadataKeys[i];if(metadata[family].indexOf(glyph)!==-1)return family;}return'regular';}function hasIconForStyle(glyph,style){var family=styleToFamily(style);if(metadataKeys.indexOf(family)===-1)return false;return metadata[family].indexOf(glyph)!==-1;}function getIconSetForProps(props){var name=props.name;var style=styleFromProps(props);if(hasIconForStyle(name,style))return iconSetFromStyle(style);var fallbackFamily=fallbackForGlyph(name);return iconSetFromFamily(fallbackFamily);}function createFA5iconClass(baseClass){var selectClass=arguments.length>1&&arguments[1]!==undefined?arguments[1]:function(iconSet){return iconSet;};var FA5iconClass=function(_PureComponent){(0,_inherits2.default)(FA5iconClass,_PureComponent);function FA5iconClass(){(0,_classCallCheck2.default)(this,FA5iconClass);return(0,_possibleConstructorReturn2.default)(this,(0,_getPrototypeOf2.default)(FA5iconClass).apply(this,arguments));}(0,_createClass2.default)(FA5iconClass,[{key:"render",value:function render(){var selectedIconSet=getIconSetForProps(this.props);var SelectedIconClass=selectClass(selectedIconSet);var _this$props=this.props,light=_this$props.light,solid=_this$props.solid,restProps=(0,_objectWithoutProperties2.default)(_this$props,["light","solid"]);return _react.default.createElement(SelectedIconClass,(0,_extends2.default)({},restProps,{__source:{fileName:_jsxFileName,lineNumber:149}}));}}]);return FA5iconClass;}(_react.PureComponent);FA5iconClass.propTypes={light:_propTypes.default.bool,solid:_propTypes.default.bool};FA5iconClass.defaultProps={light:false,solid:false};return FA5iconClass;}var Base=RegularSet;var FA5icon=createFA5iconClass(Base);FA5icon.Button=createFA5iconClass(Base.Button,function(iconSet){return iconSet.Button;});FA5icon.TabBarItem=createFA5iconClass(Base.TabBarItem,function(iconSet){return iconSet.TabBarItem;});FA5icon.TabBarItemIOS=createFA5iconClass(Base.TabBarItemIOS,function(iconSet){return iconSet.TabBarItemIOS;});FA5icon.ToolbarAndroid=createFA5iconClass(Base.ToolbarAndroid,function(iconSet){return iconSet.ToolbarAndroid;});var imageSourceCache={};function getImageSource(name){var size=arguments.length>1&&arguments[1]!==undefined?arguments[1]:_createIconSet.DEFAULT_ICON_SIZE;var color=arguments.length>2&&arguments[2]!==undefined?arguments[2]:_createIconSet.DEFAULT_ICON_COLOR;var type=arguments.length>3&&arguments[3]!==undefined?arguments[3]:FA5Style.regular;(0,_ensureNativeModuleAvailable.default)();var style=type;if(!hasIconForStyle(name,style)){var fallbackFamily=fallbackForGlyph(name);style=familyToStyle(fallbackFamily);}if(_reactNative.Platform.OS==='ios'&&style!==FA5Style.brand){var glyph=glyphMap[name]||'?';if(typeof glyph==='number'){glyph=String.fromCharCode(glyph);}var processedColor=(0,_reactNative.processColor)(color);var cacheKey=glyph+":"+size+":"+processedColor+":"+type;var scale=_reactNative.PixelRatio.get();return new Promise(function(resolve,reject){var cached=imageSourceCache[cacheKey];if(typeof cached!=='undefined'){if(!cached||cached instanceof Error){reject(cached);}else{resolve({uri:cached,scale:scale});}}else{_createIconSet.NativeIconAPI.getImageForFontAwesome5(familyName,glyph,size,style,processedColor,function(err,image){var error=typeof err==='string'?new Error(err):err;imageSourceCache[cacheKey]=image||error||false;if(!error&&image){resolve({uri:image,scale:scale});}else{reject(error);}});}});}var iconSet=iconSetFromStyle(style);return iconSet.getImageSource(name,size,color);}FA5icon.getImageSource=getImageSource;return FA5icon;}