diff --git a/Examples/IconExplorer/icon-sets.js b/Examples/IconExplorer/icon-sets.js index 644438498..1d5ea7a5e 100644 --- a/Examples/IconExplorer/icon-sets.js +++ b/Examples/IconExplorer/icon-sets.js @@ -3,6 +3,7 @@ import Entypo from 'react-native-vector-icons/Entypo'; import EvilIcons from 'react-native-vector-icons/EvilIcons'; import Feather from 'react-native-vector-icons/Feather'; import FontAwesome from 'react-native-vector-icons/FontAwesome'; +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; import Foundation from 'react-native-vector-icons/Foundation'; import Ionicons from 'react-native-vector-icons/Ionicons'; import MaterialIcons from 'react-native-vector-icons/MaterialIcons'; @@ -13,6 +14,7 @@ import EntypoGlyphs from 'react-native-vector-icons/glyphmaps/Entypo.json'; import EvilIconsGlyphs from 'react-native-vector-icons/glyphmaps/EvilIcons.json'; import FeatherGlyphs from 'react-native-vector-icons/glyphmaps/Feather.json'; import FontAwesomeGlyphs from 'react-native-vector-icons/glyphmaps/FontAwesome.json'; +import FontAwesome5Glyphs from 'react-native-vector-icons/glyphmaps/FontAwesome5.json'; import FoundationGlyphs from 'react-native-vector-icons/glyphmaps/Foundation.json'; import IoniconsGlyphs from 'react-native-vector-icons/glyphmaps/Ionicons.json'; import MaterialIconsGlyphs from 'react-native-vector-icons/glyphmaps/MaterialIcons.json'; @@ -25,6 +27,7 @@ const GLYPH_MAPS = { EvilIcons: EvilIconsGlyphs, Feather: FeatherGlyphs, FontAwesome: FontAwesomeGlyphs, + FontAwesome5: FontAwesome5Glyphs.free, Foundation: FoundationGlyphs, Ionicons: IoniconsGlyphs, MaterialIcons: MaterialIconsGlyphs, @@ -38,6 +41,7 @@ const ICON_SETS = { EvilIcons, Feather, FontAwesome, + FontAwesome5, Foundation, Ionicons, MaterialIcons, diff --git a/Examples/IconExplorer/ios/IconExplorer.xcodeproj/project.pbxproj b/Examples/IconExplorer/ios/IconExplorer.xcodeproj/project.pbxproj index 35f18a329..4a23363bc 100644 --- a/Examples/IconExplorer/ios/IconExplorer.xcodeproj/project.pbxproj +++ b/Examples/IconExplorer/ios/IconExplorer.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; + 2BC9555751ED449AAD769B5C /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 20FD8D71DFB54B3F80E4B050 /* Ionicons.ttf */; }; + 4C43BFCACC3E4E3EAFAD02C3 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9E441B79C0854F4DA1F5E087 /* Entypo.ttf */; }; 5D07F03820BF582B00503A77 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D07F00820BF582A00503A77 /* Octicons.ttf */; }; 5D07F03A20BF582B00503A77 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D07F00920BF582A00503A77 /* Feather.ttf */; }; 5D07F03C20BF582B00503A77 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D07F00A20BF582A00503A77 /* Entypo.ttf */; }; @@ -34,8 +36,21 @@ 5D07F04A20BF582B00503A77 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D07F01120BF582A00503A77 /* SimpleLineIcons.ttf */; }; 5D07F04C20BF582B00503A77 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D07F01220BF582A00503A77 /* MaterialIcons.ttf */; }; 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; + 6D679DD5A612458DAD7B88D8 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A9233FB3A5CD41AC8ECB293F /* Zocial.ttf */; }; + 71DD013A44FA4DBC922E1730 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 87845696C0854BFA85480F0F /* Octicons.ttf */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; + 90453193F728455987160595 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F4F4994415B445CCAFC224D0 /* FontAwesome5_Solid.ttf */; }; + 963CCFA772234E67B5E4CF7B /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D6B70AEE398847C981C29AD7 /* FontAwesome5_Regular.ttf */; }; + 9BDF0474852F4A1E8012AABF /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE22BBA5F5014762BA62EFE6 /* SimpleLineIcons.ttf */; }; + A20E965B2F9E4205A47102C1 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EC819FA538FB45B8A4A5EEC8 /* FontAwesome5_Brands.ttf */; }; + A432664F77E746E1BE556D77 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0ADCA04A6EFC4FF081B66900 /* FontAwesome.ttf */; }; + A6D218F9D24F40DF81364C00 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 06E2211AFA2C427992620AD8 /* MaterialCommunityIcons.ttf */; }; + A877F9C73A6A45ECA785809D /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FDEC589A395A402CABEDCC50 /* EvilIcons.ttf */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; + B310281D696D4F70A20FFCA6 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D91FA5A2C2640E28BDC65FA /* Foundation.ttf */; }; + D67F584B46B54C4CBE4A1FD7 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 47B9709AFE3E4A0BB141C76F /* Feather.ttf */; }; + DF9F041F12594EAEB7FAC1C8 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 66369EFB69034F1A956C2A3C /* MaterialIcons.ttf */; }; + F04916D69BC74B8EB4DCA6EB /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A751F07AB3B40BA985A5BE8 /* libRNVectorIcons.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -317,6 +332,8 @@ 00E356EE1AD99517003FC87E /* IconExplorerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IconExplorerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* IconExplorerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IconExplorerTests.m; sourceTree = ""; }; + 06E2211AFA2C427992620AD8 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; + 0ADCA04A6EFC4FF081B66900 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* IconExplorer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IconExplorer.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -327,7 +344,10 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = IconExplorer/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = IconExplorer/main.m; sourceTree = ""; }; 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; + 20FD8D71DFB54B3F80E4B050 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; 2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 47B9709AFE3E4A0BB141C76F /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; + 4D91FA5A2C2640E28BDC65FA /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; 5D07F00820BF582A00503A77 /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Octicons.ttf; sourceTree = ""; }; 5D07F00920BF582A00503A77 /* Feather.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Feather.ttf; sourceTree = ""; }; 5D07F00A20BF582A00503A77 /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Entypo.ttf; sourceTree = ""; }; @@ -340,9 +360,20 @@ 5D07F01120BF582A00503A77 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SimpleLineIcons.ttf; sourceTree = ""; }; 5D07F01220BF582A00503A77 /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = ""; }; 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; + 66369EFB69034F1A956C2A3C /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; + 87845696C0854BFA85480F0F /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; + 8A751F07AB3B40BA985A5BE8 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; + 9E441B79C0854F4DA1F5E087 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; + A9233FB3A5CD41AC8ECB293F /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; + B8C36040387345ADA7F8D1B1 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; + BE22BBA5F5014762BA62EFE6 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + D6B70AEE398847C981C29AD7 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; + EC819FA538FB45B8A4A5EEC8 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; + F4F4994415B445CCAFC224D0 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; + FDEC589A395A402CABEDCC50 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -371,6 +402,7 @@ 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, + F04916D69BC74B8EB4DCA6EB /* libRNVectorIcons.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -436,6 +468,27 @@ name = "Supporting Files"; sourceTree = ""; }; + 04B794135C0D48B6BF4952FA /* Resources */ = { + isa = PBXGroup; + children = ( + 9E441B79C0854F4DA1F5E087 /* Entypo.ttf */, + FDEC589A395A402CABEDCC50 /* EvilIcons.ttf */, + 47B9709AFE3E4A0BB141C76F /* Feather.ttf */, + 0ADCA04A6EFC4FF081B66900 /* FontAwesome.ttf */, + EC819FA538FB45B8A4A5EEC8 /* FontAwesome5_Brands.ttf */, + D6B70AEE398847C981C29AD7 /* FontAwesome5_Regular.ttf */, + F4F4994415B445CCAFC224D0 /* FontAwesome5_Solid.ttf */, + 4D91FA5A2C2640E28BDC65FA /* Foundation.ttf */, + 20FD8D71DFB54B3F80E4B050 /* Ionicons.ttf */, + 06E2211AFA2C427992620AD8 /* MaterialCommunityIcons.ttf */, + 66369EFB69034F1A956C2A3C /* MaterialIcons.ttf */, + 87845696C0854BFA85480F0F /* Octicons.ttf */, + BE22BBA5F5014762BA62EFE6 /* SimpleLineIcons.ttf */, + A9233FB3A5CD41AC8ECB293F /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + }; 139105B71AF99BAD00B5F7CC /* Products */ = { isa = PBXGroup; children = ( @@ -553,6 +606,7 @@ 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, + B8C36040387345ADA7F8D1B1 /* RNVectorIcons.xcodeproj */, ); name = Libraries; sourceTree = ""; @@ -575,6 +629,8 @@ 00E356EF1AD99517003FC87E /* IconExplorerTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, + 04B794135C0D48B6BF4952FA /* Resources */, + D5DCBBCA20FF5D5B0070EC00 /* Recovered References */, ); indentWidth = 2; sourceTree = ""; @@ -599,6 +655,14 @@ name = Products; sourceTree = ""; }; + D5DCBBCA20FF5D5B0070EC00 /* Recovered References */ = { + isa = PBXGroup; + children = ( + 8A751F07AB3B40BA985A5BE8 /* libRNVectorIcons.a */, + ); + name = "Recovered References"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -644,7 +708,7 @@ 83CBB9F71A601CBA00E9B192 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0610; + LastUpgradeCheck = 610; ORGANIZATIONNAME = Facebook; TargetAttributes = { 00E356ED1AD99517003FC87E = { @@ -1009,6 +1073,20 @@ 5D07F03C20BF582B00503A77 /* Entypo.ttf in Resources */, 5D07F03E20BF582B00503A77 /* MaterialCommunityIcons.ttf in Resources */, 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, + 4C43BFCACC3E4E3EAFAD02C3 /* Entypo.ttf in Resources */, + A877F9C73A6A45ECA785809D /* EvilIcons.ttf in Resources */, + D67F584B46B54C4CBE4A1FD7 /* Feather.ttf in Resources */, + A432664F77E746E1BE556D77 /* FontAwesome.ttf in Resources */, + A20E965B2F9E4205A47102C1 /* FontAwesome5_Brands.ttf in Resources */, + 963CCFA772234E67B5E4CF7B /* FontAwesome5_Regular.ttf in Resources */, + 90453193F728455987160595 /* FontAwesome5_Solid.ttf in Resources */, + B310281D696D4F70A20FFCA6 /* Foundation.ttf in Resources */, + 2BC9555751ED449AAD769B5C /* Ionicons.ttf in Resources */, + A6D218F9D24F40DF81364C00 /* MaterialCommunityIcons.ttf in Resources */, + DF9F041F12594EAEB7FAC1C8 /* MaterialIcons.ttf in Resources */, + 71DD013A44FA4DBC922E1730 /* Octicons.ttf in Resources */, + 9BDF0474852F4A1E8012AABF /* SimpleLineIcons.ttf in Resources */, + 6D679DD5A612458DAD7B88D8 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1080,9 +1158,17 @@ "DEBUG=1", "$(inherited)", ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + ); INFOPLIST_FILE = IconExplorerTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1097,9 +1183,17 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + ); INFOPLIST_FILE = IconExplorerTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/$(TARGET_NAME)\"", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1115,6 +1209,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + ); INFOPLIST_FILE = IconExplorer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -1132,6 +1230,10 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CURRENT_PROJECT_VERSION = 1; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", + ); INFOPLIST_FILE = IconExplorer/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( diff --git a/Examples/IconExplorer/ios/IconExplorer/Info.plist b/Examples/IconExplorer/ios/IconExplorer/Info.plist index f2238a645..16fba726d 100644 --- a/Examples/IconExplorer/ios/IconExplorer/Info.plist +++ b/Examples/IconExplorer/ios/IconExplorer/Info.plist @@ -36,6 +36,10 @@ MaterialCommunityIcons.ttf Octicons.ttf Zocial.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + SimpleLineIcons.ttf UILaunchStoryboardName LaunchScreen @@ -52,9 +56,8 @@ UIViewControllerBasedStatusBarAppearance NSLocationWhenInUseUsageDescription - + NSAppTransportSecurity - NSExceptionDomains diff --git a/FONTAWESOME5.md b/FONTAWESOME5.md new file mode 100644 index 000000000..3d67f90d2 --- /dev/null +++ b/FONTAWESOME5.md @@ -0,0 +1,99 @@ +# FontAwesome 5 + +FontAwesome 5 is split into three different font files which makes it somewhat +harder to use in some cases. The implemented solution should be fairly +straightforward to use after it has been setup. +Android and iOS handles fonts differently which is why it could be +easily implemented without any additional setup. + +### Table of Content + +* [`Usage`](#usage) +* [`Upgrading to Pro`](#upgrading-to-pro) + +# Usage + +Using the standard icons works just like the standard icons in this library. + +```javascript +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; + +const icon = (); +``` + +Something special about the FontAwesome5 class is that you can also pass props +to change the style of the icon: + +```javascript +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; + +const icon = (); +const icon = (); +``` + +**Valid types** + +| Type | Description | +| --- | --- | +| **brand** | Uses the Brands font | +| **light** | Uses the Light font (pro) or Regular (Free) | +| **solid** | Uses the Solid font | + +No specified type indicates Regular font. + +Button, TabBarItem etc. works the same way: + +```javascript +import FontAwesome5 from 'react-native-vector-icons/FontAwesome5'; + +const regular_icon_btn = (); +const solid_icon_btn = (); +``` + +## getImageSource + +```getImageSource``` works a little different due to its native backend and how +the font is separated into different files. Therefore, the enum FA5Style is +defined to help setting the style of the font: + +```javascript +const FA5Style = { + regular: 0, + light: 1, + solid: 2, + brand: 3, +}; +``` + +Use this to select which style the generated image should have: + +```javascript +import FontAwesome5, { FA5Style } from 'react-native-vector-icons/FontAwesome5'; + +FontAwesome5.getImageSource("comments", 30, '#000', FA5Style.solid).then(source => this.setState({ image: source })); +``` + +Not passing a style will result in Regular style. + +# Upgrading to Pro + +You need your FontAwesome npm token which can be obtained by logging into your +account and then access the ```Services``` tab. + +Run ```./node_modules/.bin/fa5-upgrade``` and enter the token when asked to in order to +upgrade to the Pro version. + +## Manually + +If the shell script does not work you can install the Pro version manually. +All you really need to do is adding the Pro fonts to your project, there is +instructions on how to do this in main README.md. + +## Using the Pro version + +Just as easy as using the Free icons, just include the icon set like this: +```javascript +import FontAwesome5Pro from 'react-native-vector-icons/FontAwesome5Pro'; + +const icon = (); +``` diff --git a/FontAwesome5.js b/FontAwesome5.js new file mode 100644 index 000000000..5217784db --- /dev/null +++ b/FontAwesome5.js @@ -0,0 +1,20 @@ +/** + * FontAwesome5 icon set component. + * Usage: + */ + +import { createFA5iconSet } from './lib/create-icon-set-from-fontawesome5'; + +import glyphMap from './glyphmaps/FontAwesome5Free.json'; + +export { FA5Style } from './lib/create-icon-set-from-fontawesome5'; + +const iconSet = createFA5iconSet(glyphMap, false); + +export default iconSet; + +export const Button = iconSet.Button; +export const TabBarItem = iconSet.TabBarItem; +export const TabBarItemIOS = iconSet.TabBarItemIOS; +export const ToolbarAndroid = iconSet.ToolbarAndroid; +export const getImageSource = iconSet.getImageSource; diff --git a/FontAwesome5Pro.js b/FontAwesome5Pro.js new file mode 100644 index 000000000..65739b4a0 --- /dev/null +++ b/FontAwesome5Pro.js @@ -0,0 +1,20 @@ +/** + * FontAwesome5Pro icon set component. + * Usage: + */ + +import { createFA5iconSet } from './lib/create-icon-set-from-fontawesome5'; + +import glyphMap from './glyphmaps/FontAwesome5Pro.json'; + +export { FA5Style } from './lib/create-icon-set-from-fontawesome5'; + +const iconSet = createFA5iconSet(glyphMap, true); + +export default iconSet; + +export const Button = iconSet.Button; +export const TabBarItem = iconSet.TabBarItem; +export const TabBarItemIOS = iconSet.TabBarItemIOS; +export const ToolbarAndroid = iconSet.ToolbarAndroid; +export const getImageSource = iconSet.getImageSource; diff --git a/Fonts/FontAwesome5_Brands.ttf b/Fonts/FontAwesome5_Brands.ttf new file mode 100644 index 000000000..748fa4b6f Binary files /dev/null and b/Fonts/FontAwesome5_Brands.ttf differ diff --git a/Fonts/FontAwesome5_Regular.ttf b/Fonts/FontAwesome5_Regular.ttf new file mode 100644 index 000000000..3ba10c362 Binary files /dev/null and b/Fonts/FontAwesome5_Regular.ttf differ diff --git a/Fonts/FontAwesome5_Solid.ttf b/Fonts/FontAwesome5_Solid.ttf new file mode 100644 index 000000000..deae781f8 Binary files /dev/null and b/Fonts/FontAwesome5_Solid.ttf differ diff --git a/README.md b/README.md index 92d53887d..9e00bab9e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ Perfect for buttons, logos and nav/tab bars. Easy to extend, style and integrate * [`Entypo`](http://entypo.com) by Daniel Bruce (**411** icons) * [`EvilIcons`](http://evil-icons.io) by Alexander Madyankin & Roman Shamin (v1.8.0, **70** icons) * [`Feather`](http://feathericons.com) by Cole Bemis & Contributors (v4.7.0, **266** icons) -* [`FontAwesome`](http://fortawesome.github.io/Font-Awesome/icons/) by Dave Gandy (v4.7.0, **675** icons) +* [`FontAwesome`](http://fortawesome.github.io/Font-Awesome/icons/) by Dave Gandy (v4.7.0, **675** icons) +* [`FontAwesome 5`](https://fontawesome.com) by Fonticons, Inc. (v5.1.1, 1265 (free) **2067** (pro) icons) * [`Foundation`](http://zurb.com/playground/foundation-icon-fonts-3) by ZURB, Inc. (v3.0, **283** icons) * [`Ionicons`](https://ionicons.com/) by Ben Sperry (v4.2.4, **696** icons) * [`MaterialIcons`](https://www.google.com/design/icons/) by Google, Inc. (v3.0.1, **932** icons) @@ -24,6 +25,7 @@ Perfect for buttons, logos and nav/tab bars. Easy to extend, style and integrate 1. Run: `$ npm install react-native-vector-icons --save` 2. For each platform (iOS/Android/Windows) you plan to use, follow one of the options for the corresponding platform. +3. If you intend to use FontAwesome 5, check out [`this guide`](FONTAWESOME5.md) to get you started. ### iOS @@ -493,4 +495,3 @@ Both npm and android file hierarchies tend to get very deep and even worse when This project is licenced under the [MIT License](http://opensource.org/licenses/mit-license.html). Any bundled fonts are copyright to their respective authors and mostly under MIT or [SIL OFL](http://scripts.sil.org/OFL). - diff --git a/RNVectorIconsManager/RNVectorIconsManager.h b/RNVectorIconsManager/RNVectorIconsManager.h index dccb60ab6..58fb764d5 100644 --- a/RNVectorIconsManager/RNVectorIconsManager.h +++ b/RNVectorIconsManager/RNVectorIconsManager.h @@ -19,4 +19,13 @@ @interface RNVectorIconsManager : NSObject +- (NSString *)hexStringFromColor:(UIColor *)color; +- (NSString *)generateFilePath:(NSString *)glyph withFontName:(NSString *)fontName + withFontSize:(CGFloat)fontSize + withColor:(UIColor *)color + withExtraIdentifier:(NSString *)identifier; +- (BOOL)createAndSaveGlyphImage:(NSString *)glyph withFont:(UIFont *)font + withFilePath:(NSString *)filePath + withColor:(UIColor *)color; + @end diff --git a/RNVectorIconsManager/RNVectorIconsManager.m b/RNVectorIconsManager/RNVectorIconsManager.m index 46622adbf..0cfd4aea2 100644 --- a/RNVectorIconsManager/RNVectorIconsManager.m +++ b/RNVectorIconsManager/RNVectorIconsManager.m @@ -29,7 +29,8 @@ @implementation RNVectorIconsManager @synthesize bridge = _bridge; RCT_EXPORT_MODULE(); -- (NSString *)hexStringFromColor:(UIColor *)color { +- (NSString *)hexStringFromColor:(UIColor *)color +{ const CGFloat *components = CGColorGetComponents(color.CGColor); CGFloat r = components[0]; @@ -42,19 +43,28 @@ - (NSString *)hexStringFromColor:(UIColor *)color { lroundf(b * 255)]; } - -RCT_EXPORT_METHOD(getImageForFont:(NSString*)fontName withGlyph:(NSString*)glyph withFontSize:(CGFloat)fontSize withColor:(UIColor *)color callback:(RCTResponseSenderBlock)callback){ +- (NSString *)generateFilePath:(NSString *)glyph withFontName:(NSString *)fontName + withFontSize:(CGFloat)fontSize + withColor:(UIColor *)color + withExtraIdentifier:(NSString *)identifier +{ CGFloat screenScale = RCTScreenScale(); - NSString *hexColor = [self hexStringFromColor:color]; + NSString *fileName = [NSString stringWithFormat:@"tmp/RNVectorIcons_%@_%@_%hu_%.f%@@%.fx.png", + identifier, fontName, + [glyph characterAtIndex:0], + fontSize, hexColor, screenScale]; + + return [NSHomeDirectory() stringByAppendingPathComponent:fileName]; +} - NSString *fileName = [NSString stringWithFormat:@"tmp/RNVectorIcons_%@_%hu_%.f%@@%.fx.png", fontName, [glyph characterAtIndex:0], fontSize, hexColor, screenScale]; - NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:fileName]; - +- (BOOL)createAndSaveGlyphImage:(NSString *)glyph withFont:(UIFont *)font + withFilePath:(NSString *)filePath + withColor:(UIColor *)color +{ if(![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // No cached icon exists, we need to create it and persist to disk - UIFont *font = [UIFont fontWithName:fontName size:fontSize]; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:glyph attributes:@{NSFontAttributeName: font, NSForegroundColorAttributeName: color}]; CGSize iconSize = [attributedString size]; @@ -65,11 +75,73 @@ - (NSString *)hexStringFromColor:(UIColor *)color { UIGraphicsEndImageContext(); NSData *imageData = UIImagePNGRepresentation(iconImage); - BOOL success = [imageData writeToFile:filePath atomically:YES]; - if(!success) { - return callback(@[@"Failed to write rendered icon image"]); + return [imageData writeToFile:filePath atomically:YES]; + } + + return YES; +} + +RCT_EXPORT_METHOD(getImageForFont:(NSString *)fontName + withGlyph:(NSString *)glyph + withFontSize:(CGFloat)fontSize + withColor:(UIColor *)color + callback:(RCTResponseSenderBlock)callback) +{ + UIFont *font = [UIFont fontWithName:fontName size:fontSize]; + NSString *filePath = [self generateFilePath:glyph withFontName:fontName + withFontSize:fontSize + withColor:color + withExtraIdentifier:@""]; + + BOOL success = [self createAndSaveGlyphImage:glyph withFont:font + withFilePath:filePath + withColor:color]; + + if(!success) { + return callback(@[@"Failed to write rendered icon image"]); + } + + callback(@[[NSNull null], filePath]); +} + +RCT_EXPORT_METHOD(getImageForFontAwesome5:(NSString *)fontFamily + withGlyph:(NSString *)glyph + withFontSize:(CGFloat)fontSize + withFontStyle:(NSInteger)style + withColor:(UIColor *)color + callback:(RCTResponseSenderBlock)callback) +{ + NSNumber *fontWeight = [NSNumber numberWithDouble:UIFontWeightRegular]; + if (style == 1) + fontWeight = [NSNumber numberWithDouble:UIFontWeightUltraLight]; + else if (style == 2) + fontWeight = [NSNumber numberWithDouble:UIFontWeightBold]; + + NSString *identifier = [NSString stringWithFormat:@"FA5.%ld", (long)style]; + NSString *filePath = [self generateFilePath:glyph withFontName:fontFamily + withFontSize:fontSize + withColor:color + withExtraIdentifier: identifier]; + + UIFont *font = [UIFont fontWithName:fontFamily size:fontSize]; + for (NSString *fontString in [UIFont fontNamesForFamilyName:fontFamily]) { + UIFont *testFont = [UIFont fontWithName:fontString size:fontSize]; + NSDictionary *traits = [testFont.fontDescriptor objectForKey:UIFontDescriptorTraitsAttribute]; + NSNumber *testFontWeight = traits[UIFontWeightTrait]; + + if (testFontWeight.doubleValue == fontWeight.doubleValue) { + font = testFont; + break; } } + + BOOL success = [self createAndSaveGlyphImage:glyph withFont:font + withFilePath:filePath + withColor:color]; + if(!success) { + return callback(@[@"Failed to write rendered icon image"]); + } + callback(@[[NSNull null], filePath]); } @@ -105,4 +177,24 @@ - (NSString *)hexStringFromColor:(UIColor *)color { } } +RCT_EXPORT_METHOD(setupFontAwesome5) +{ + for (NSString *family in [UIFont familyNames]) { + if ([family hasPrefix:@"Font Awesome 5"]) { + for (NSString *fontName in [UIFont fontNamesForFamilyName:family]) { + UIFont *font = [UIFont fontWithName:fontName size:12]; + NSDictionary *traits = [font.fontDescriptor objectForKey:UIFontDescriptorTraitsAttribute]; + + if ([fontName hasSuffix:@"Light"]) { + [traits setValue:[NSNumber numberWithDouble:UIFontWeightUltraLight] forKey:UIFontWeightTrait]; + } else if ([fontName hasSuffix:@"Regular"]) { + [traits setValue:[NSNumber numberWithDouble:UIFontWeightRegular] forKey:UIFontWeightTrait]; + } else if ([fontName hasSuffix:@"Solid"]) { + [traits setValue:[NSNumber numberWithDouble:UIFontWeightBold] forKey:UIFontWeightTrait]; + } + } + } + } +} + @end diff --git a/bin/add-font-assets.js b/bin/add-font-assets.js new file mode 100755 index 000000000..3a291b1da --- /dev/null +++ b/bin/add-font-assets.js @@ -0,0 +1,24 @@ +#!/usr/bin/env node +/* eslint-disable no-console */ + +const fs = require('fs'); + +const json = require('../../package.json'); + +if (!json.rnpm) { + json.rnpm = { + assets: [], + }; +} else if (!json.rnpm.assets) { + json.rnpm.assets = []; +} + +if (json.rnpm.assets.indexOf('./assets/fonts') !== -1) process.exit(); + +json.rnpm.assets.push('./assets/fonts'); + +fs.writeFileSync( + './package.json', + `${JSON.stringify(json, null, 2)}\r\n`, + 'utf8' +); diff --git a/bin/fa5-upgrade.sh b/bin/fa5-upgrade.sh new file mode 100755 index 000000000..45697a56c --- /dev/null +++ b/bin/fa5-upgrade.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +echo "Setting up npm config" + +if [ $(npm config get @fortawesome:registry) = "undefined" ] +then + npm config set "@fortawesome:registry" https://npm.fontawesome.com/ +fi + +echo "Please enter your FontAwesome5 npm token:" +read fa5_token +npm config set "//npm.fontawesome.com/:_authToken" ${fa5_token} + +echo "Creating temporary folder" + +TEMP_DIR=$(mktemp -d -t rnvi) +echo "Created folder $TEMP_DIR" +pushd ${TEMP_DIR} + +echo "Downloading FontAwesome5 Pro" + +ARCHIVE=$(npm pack @fortawesome/fontawesome-pro --silent) +tar -xzf ${ARCHIVE} +mv package pro + +popd + +echo "Copying font files" + +mkdir -p assets/fonts + +cp ${TEMP_DIR}/pro/webfonts/fa-brands-400.ttf assets/fonts/FontAwesome5_Pro_Brands.ttf +cp ${TEMP_DIR}/pro/webfonts/fa-light-300.ttf assets/fonts/FontAwesome5_Pro_Light.ttf +cp ${TEMP_DIR}/pro/webfonts/fa-regular-400.ttf assets/fonts/FontAwesome5_Pro_Regular.ttf +cp ${TEMP_DIR}/pro/webfonts/fa-solid-900.ttf assets/fonts/FontAwesome5_Pro_Solid.ttf + +echo "Modifying package.json" + +/usr/bin/env node ./node_modules/react-native-vector-icons/bin/add-font-assets.js + +echo "Linking project" + +react-native link react-native-vector-icons + +echo "Done" diff --git a/directory/src/App.css b/directory/src/App.css index b2fd8bf2c..bb709c5a2 100755 --- a/directory/src/App.css +++ b/directory/src/App.css @@ -18,6 +18,11 @@ src: url('../../Fonts/FontAwesome.ttf') format('truetype'); } +@font-face { + font-family: 'FontAwesome5'; + src: url('../../Fonts/FontAwesome5_Solid.ttf') format('truetype'); +} + @font-face { font-family: 'Foundation'; src: url('../../Fonts/Foundation.ttf') format('truetype'); diff --git a/directory/src/App.js b/directory/src/App.js index b3bcd4bd8..ea3af4156 100755 --- a/directory/src/App.js +++ b/directory/src/App.js @@ -7,6 +7,7 @@ import Entypo from '../../glyphmaps/Entypo.json'; import EvilIcons from '../../glyphmaps/EvilIcons.json'; import Feather from '../../glyphmaps/Feather.json'; import FontAwesome from '../../glyphmaps/FontAwesome.json'; +import FontAwesome5 from '../../glyphmaps/FontAwesome5Free.json'; import Foundation from '../../glyphmaps/Foundation.json'; import Ionicons from '../../glyphmaps/Ionicons.json'; import MaterialCommunityIcons from '../../glyphmaps/MaterialCommunityIcons.json'; @@ -20,6 +21,7 @@ const IconFamilies = { EvilIcons, Feather, FontAwesome, + FontAwesome5, Foundation, Ionicons, MaterialCommunityIcons, @@ -64,7 +66,7 @@ class SearchBar extends PureComponent { state = { keyword: '' }; - + handleSubmit = (e) => { e.preventDefault(); this.props.onSubmit(this.inputRef.value); @@ -73,7 +75,7 @@ class SearchBar extends PureComponent { handleChange = (e) => { e.preventDefault(); clearInterval(this.timer); - + this.setState({ keyword: this.inputRef.value }); this.timer = setTimeout( diff --git a/glyphmaps/FontAwesome5Free.json b/glyphmaps/FontAwesome5Free.json new file mode 100644 index 000000000..1d8554334 --- /dev/null +++ b/glyphmaps/FontAwesome5Free.json @@ -0,0 +1,1114 @@ +{ + "500px": 62062, + "accessible-icon": 62312, + "accusoft": 62313, + "address-book": 62137, + "address-card": 62139, + "adjust": 61506, + "adn": 61808, + "adversal": 62314, + "affiliatetheme": 62315, + "algolia": 62316, + "align-center": 61495, + "align-justify": 61497, + "align-left": 61494, + "align-right": 61496, + "allergies": 62561, + "amazon": 62064, + "amazon-pay": 62508, + "ambulance": 61689, + "american-sign-language-interpreting": 62115, + "amilia": 62317, + "anchor": 61757, + "android": 61819, + "angellist": 61961, + "angle-double-down": 61699, + "angle-double-left": 61696, + "angle-double-right": 61697, + "angle-double-up": 61698, + "angle-down": 61703, + "angle-left": 61700, + "angle-right": 61701, + "angle-up": 61702, + "angry": 62806, + "angrycreative": 62318, + "angular": 62496, + "app-store": 62319, + "app-store-ios": 62320, + "apper": 62321, + "apple": 61817, + "apple-pay": 62485, + "archive": 61831, + "archway": 62807, + "arrow-alt-circle-down": 62296, + "arrow-alt-circle-left": 62297, + "arrow-alt-circle-right": 62298, + "arrow-alt-circle-up": 62299, + "arrow-circle-down": 61611, + "arrow-circle-left": 61608, + "arrow-circle-right": 61609, + "arrow-circle-up": 61610, + "arrow-down": 61539, + "arrow-left": 61536, + "arrow-right": 61537, + "arrow-up": 61538, + "arrows-alt": 61618, + "arrows-alt-h": 62263, + "arrows-alt-v": 62264, + "assistive-listening-systems": 62114, + "asterisk": 61545, + "asymmetrik": 62322, + "at": 61946, + "atlas": 62808, + "audible": 62323, + "audio-description": 62110, + "autoprefixer": 62492, + "avianex": 62324, + "aviato": 62497, + "award": 62809, + "aws": 62325, + "backspace": 62810, + "backward": 61514, + "balance-scale": 62030, + "ban": 61534, + "band-aid": 62562, + "bandcamp": 62165, + "barcode": 61482, + "bars": 61641, + "baseball-ball": 62515, + "basketball-ball": 62516, + "bath": 62157, + "battery-empty": 62020, + "battery-full": 62016, + "battery-half": 62018, + "battery-quarter": 62019, + "battery-three-quarters": 62017, + "bed": 62006, + "beer": 61692, + "behance": 61876, + "behance-square": 61877, + "bell": 61683, + "bell-slash": 61942, + "bezier-curve": 62811, + "bicycle": 61958, + "bimobject": 62328, + "binoculars": 61925, + "birthday-cake": 61949, + "bitbucket": 61809, + "bitcoin": 62329, + "bity": 62330, + "black-tie": 62078, + "blackberry": 62331, + "blender": 62743, + "blind": 62109, + "blogger": 62332, + "blogger-b": 62333, + "bluetooth": 62099, + "bluetooth-b": 62100, + "bold": 61490, + "bolt": 61671, + "bomb": 61922, + "bong": 62812, + "book": 61485, + "book-open": 62744, + "bookmark": 61486, + "bowling-ball": 62518, + "box": 62566, + "box-open": 62622, + "boxes": 62568, + "braille": 62113, + "briefcase": 61617, + "briefcase-medical": 62569, + "broadcast-tower": 62745, + "broom": 62746, + "brush": 62813, + "btc": 61786, + "bug": 61832, + "building": 61869, + "bullhorn": 61601, + "bullseye": 61760, + "burn": 62570, + "buromobelexperte": 62335, + "bus": 61959, + "bus-alt": 62814, + "buysellads": 61965, + "calculator": 61932, + "calendar": 61747, + "calendar-alt": 61555, + "calendar-check": 62068, + "calendar-minus": 62066, + "calendar-plus": 62065, + "calendar-times": 62067, + "camera": 61488, + "camera-retro": 61571, + "cannabis": 62815, + "capsules": 62571, + "car": 61881, + "caret-down": 61655, + "caret-left": 61657, + "caret-right": 61658, + "caret-square-down": 61776, + "caret-square-left": 61841, + "caret-square-right": 61778, + "caret-square-up": 61777, + "caret-up": 61656, + "cart-arrow-down": 61976, + "cart-plus": 61975, + "cc-amazon-pay": 62509, + "cc-amex": 61939, + "cc-apple-pay": 62486, + "cc-diners-club": 62028, + "cc-discover": 61938, + "cc-jcb": 62027, + "cc-mastercard": 61937, + "cc-paypal": 61940, + "cc-stripe": 61941, + "cc-visa": 61936, + "centercode": 62336, + "certificate": 61603, + "chalkboard": 62747, + "chalkboard-teacher": 62748, + "chart-area": 61950, + "chart-bar": 61568, + "chart-line": 61953, + "chart-pie": 61952, + "check": 61452, + "check-circle": 61528, + "check-double": 62816, + "check-square": 61770, + "chess": 62521, + "chess-bishop": 62522, + "chess-board": 62524, + "chess-king": 62527, + "chess-knight": 62529, + "chess-pawn": 62531, + "chess-queen": 62533, + "chess-rook": 62535, + "chevron-circle-down": 61754, + "chevron-circle-left": 61751, + "chevron-circle-right": 61752, + "chevron-circle-up": 61753, + "chevron-down": 61560, + "chevron-left": 61523, + "chevron-right": 61524, + "chevron-up": 61559, + "child": 61870, + "chrome": 62056, + "church": 62749, + "circle": 61713, + "circle-notch": 61902, + "clipboard": 62248, + "clipboard-check": 62572, + "clipboard-list": 62573, + "clock": 61463, + "clone": 62029, + "closed-captioning": 61962, + "cloud": 61634, + "cloud-download-alt": 62337, + "cloud-upload-alt": 62338, + "cloudscale": 62339, + "cloudsmith": 62340, + "cloudversify": 62341, + "cocktail": 62817, + "code": 61729, + "code-branch": 61734, + "codepen": 61899, + "codiepie": 62084, + "coffee": 61684, + "cog": 61459, + "cogs": 61573, + "coins": 62750, + "columns": 61659, + "comment": 61557, + "comment-alt": 62074, + "comment-dots": 62637, + "comment-slash": 62643, + "comments": 61574, + "compact-disc": 62751, + "compass": 61774, + "compress": 61542, + "concierge-bell": 62818, + "connectdevelop": 61966, + "contao": 62061, + "cookie": 62819, + "cookie-bite": 62820, + "copy": 61637, + "copyright": 61945, + "couch": 62648, + "cpanel": 62344, + "creative-commons": 62046, + "creative-commons-by": 62695, + "creative-commons-nc": 62696, + "creative-commons-nc-eu": 62697, + "creative-commons-nc-jp": 62698, + "creative-commons-nd": 62699, + "creative-commons-pd": 62700, + "creative-commons-pd-alt": 62701, + "creative-commons-remix": 62702, + "creative-commons-sa": 62703, + "creative-commons-sampling": 62704, + "creative-commons-sampling-plus": 62705, + "creative-commons-share": 62706, + "credit-card": 61597, + "crop": 61733, + "crop-alt": 62821, + "crosshairs": 61531, + "crow": 62752, + "crown": 62753, + "css3": 61756, + "css3-alt": 62347, + "cube": 61874, + "cubes": 61875, + "cut": 61636, + "cuttlefish": 62348, + "d-and-d": 62349, + "dashcube": 61968, + "database": 61888, + "deaf": 62116, + "delicious": 61861, + "deploydog": 62350, + "deskpro": 62351, + "desktop": 61704, + "deviantart": 61885, + "diagnoses": 62576, + "dice": 62754, + "dice-five": 62755, + "dice-four": 62756, + "dice-one": 62757, + "dice-six": 62758, + "dice-three": 62759, + "dice-two": 62760, + "digg": 61862, + "digital-ocean": 62353, + "digital-tachograph": 62822, + "discord": 62354, + "discourse": 62355, + "divide": 62761, + "dizzy": 62823, + "dna": 62577, + "dochub": 62356, + "docker": 62357, + "dollar-sign": 61781, + "dolly": 62578, + "dolly-flatbed": 62580, + "donate": 62649, + "door-closed": 62762, + "door-open": 62763, + "dot-circle": 61842, + "dove": 62650, + "download": 61465, + "draft2digital": 62358, + "drafting-compass": 62824, + "dribbble": 61821, + "dribbble-square": 62359, + "dropbox": 61803, + "drum": 62825, + "drum-steelpan": 62826, + "drupal": 61865, + "dumbbell": 62539, + "dyalog": 62361, + "earlybirds": 62362, + "ebay": 62708, + "edge": 62082, + "edit": 61508, + "eject": 61522, + "elementor": 62512, + "ellipsis-h": 61761, + "ellipsis-v": 61762, + "ember": 62499, + "empire": 61905, + "envelope": 61664, + "envelope-open": 62134, + "envelope-square": 61849, + "envira": 62105, + "equals": 62764, + "eraser": 61741, + "erlang": 62365, + "ethereum": 62510, + "etsy": 62167, + "euro-sign": 61779, + "exchange-alt": 62306, + "exclamation": 61738, + "exclamation-circle": 61546, + "exclamation-triangle": 61553, + "expand": 61541, + "expand-arrows-alt": 62238, + "expeditedssl": 62014, + "external-link-alt": 62301, + "external-link-square-alt": 62304, + "eye": 61550, + "eye-dropper": 61947, + "eye-slash": 61552, + "facebook": 61594, + "facebook-f": 62366, + "facebook-messenger": 62367, + "facebook-square": 61570, + "fast-backward": 61513, + "fast-forward": 61520, + "fax": 61868, + "feather": 62765, + "feather-alt": 62827, + "female": 61826, + "fighter-jet": 61691, + "file": 61787, + "file-alt": 61788, + "file-archive": 61894, + "file-audio": 61895, + "file-code": 61897, + "file-contract": 62828, + "file-download": 62829, + "file-excel": 61891, + "file-export": 62830, + "file-image": 61893, + "file-import": 62831, + "file-invoice": 62832, + "file-invoice-dollar": 62833, + "file-medical": 62583, + "file-medical-alt": 62584, + "file-pdf": 61889, + "file-powerpoint": 61892, + "file-prescription": 62834, + "file-signature": 62835, + "file-upload": 62836, + "file-video": 61896, + "file-word": 61890, + "fill": 62837, + "fill-drip": 62838, + "film": 61448, + "filter": 61616, + "fingerprint": 62839, + "fire": 61549, + "fire-extinguisher": 61748, + "firefox": 62057, + "first-aid": 62585, + "first-order": 62128, + "first-order-alt": 62730, + "firstdraft": 62369, + "fish": 62840, + "flag": 61476, + "flag-checkered": 61726, + "flask": 61635, + "flickr": 61806, + "flipboard": 62541, + "flushed": 62841, + "fly": 62487, + "folder": 61563, + "folder-open": 61564, + "font": 61489, + "font-awesome": 62132, + "font-awesome-alt": 62300, + "font-awesome-flag": 62501, + "font-awesome-logo-full": 62694, + "fonticons": 62080, + "fonticons-fi": 62370, + "football-ball": 62542, + "fort-awesome": 62086, + "fort-awesome-alt": 62371, + "forumbee": 61969, + "forward": 61518, + "foursquare": 61824, + "free-code-camp": 62149, + "freebsd": 62372, + "frog": 62766, + "frown": 61721, + "frown-open": 62842, + "fulcrum": 62731, + "futbol": 61923, + "galactic-republic": 62732, + "galactic-senate": 62733, + "gamepad": 61723, + "gas-pump": 62767, + "gavel": 61667, + "gem": 62373, + "genderless": 61997, + "get-pocket": 62053, + "gg": 62048, + "gg-circle": 62049, + "gift": 61547, + "git": 61907, + "git-square": 61906, + "github": 61595, + "github-alt": 61715, + "github-square": 61586, + "gitkraken": 62374, + "gitlab": 62102, + "gitter": 62502, + "glass-martini": 61440, + "glass-martini-alt": 62843, + "glasses": 62768, + "glide": 62117, + "glide-g": 62118, + "globe": 61612, + "globe-africa": 62844, + "globe-americas": 62845, + "globe-asia": 62846, + "gofore": 62375, + "golf-ball": 62544, + "goodreads": 62376, + "goodreads-g": 62377, + "google": 61856, + "google-drive": 62378, + "google-play": 62379, + "google-plus": 62131, + "google-plus-g": 61653, + "google-plus-square": 61652, + "google-wallet": 61934, + "graduation-cap": 61853, + "gratipay": 61828, + "grav": 62166, + "greater-than": 62769, + "greater-than-equal": 62770, + "grimace": 62847, + "grin": 62848, + "grin-alt": 62849, + "grin-beam": 62850, + "grin-beam-sweat": 62851, + "grin-hearts": 62852, + "grin-squint": 62853, + "grin-squint-tears": 62854, + "grin-stars": 62855, + "grin-tears": 62856, + "grin-tongue": 62857, + "grin-tongue-squint": 62858, + "grin-tongue-wink": 62859, + "grin-wink": 62860, + "grip-horizontal": 62861, + "grip-vertical": 62862, + "gripfire": 62380, + "grunt": 62381, + "gulp": 62382, + "h-square": 61693, + "hacker-news": 61908, + "hacker-news-square": 62383, + "hand-holding": 62653, + "hand-holding-heart": 62654, + "hand-holding-usd": 62656, + "hand-lizard": 62040, + "hand-paper": 62038, + "hand-peace": 62043, + "hand-point-down": 61607, + "hand-point-left": 61605, + "hand-point-right": 61604, + "hand-point-up": 61606, + "hand-pointer": 62042, + "hand-rock": 62037, + "hand-scissors": 62039, + "hand-spock": 62041, + "hands": 62658, + "hands-helping": 62660, + "handshake": 62133, + "hashtag": 62098, + "hdd": 61600, + "heading": 61916, + "headphones": 61477, + "headphones-alt": 62863, + "headset": 62864, + "heart": 61444, + "heartbeat": 61982, + "helicopter": 62771, + "highlighter": 62865, + "hips": 62546, + "hire-a-helper": 62384, + "history": 61914, + "hockey-puck": 62547, + "home": 61461, + "hooli": 62503, + "hornbill": 62866, + "hospital": 61688, + "hospital-alt": 62589, + "hospital-symbol": 62590, + "hot-tub": 62867, + "hotel": 62868, + "hotjar": 62385, + "hourglass": 62036, + "hourglass-end": 62035, + "hourglass-half": 62034, + "hourglass-start": 62033, + "houzz": 62076, + "html5": 61755, + "hubspot": 62386, + "i-cursor": 62022, + "id-badge": 62145, + "id-card": 62146, + "id-card-alt": 62591, + "image": 61502, + "images": 62210, + "imdb": 62168, + "inbox": 61468, + "indent": 61500, + "industry": 62069, + "infinity": 62772, + "info": 61737, + "info-circle": 61530, + "instagram": 61805, + "internet-explorer": 62059, + "ioxhost": 61960, + "italic": 61491, + "itunes": 62388, + "itunes-note": 62389, + "java": 62692, + "jedi-order": 62734, + "jenkins": 62390, + "joget": 62391, + "joint": 62869, + "joomla": 61866, + "js": 62392, + "js-square": 62393, + "jsfiddle": 61900, + "key": 61572, + "keybase": 62709, + "keyboard": 61724, + "keycdn": 62394, + "kickstarter": 62395, + "kickstarter-k": 62396, + "kiss": 62870, + "kiss-beam": 62871, + "kiss-wink-heart": 62872, + "kiwi-bird": 62773, + "korvue": 62511, + "language": 61867, + "laptop": 61705, + "laravel": 62397, + "lastfm": 61954, + "lastfm-square": 61955, + "laugh": 62873, + "laugh-beam": 62874, + "laugh-squint": 62875, + "laugh-wink": 62876, + "leaf": 61548, + "leanpub": 61970, + "lemon": 61588, + "less": 62493, + "less-than": 62774, + "less-than-equal": 62775, + "level-down-alt": 62398, + "level-up-alt": 62399, + "life-ring": 61901, + "lightbulb": 61675, + "line": 62400, + "link": 61633, + "linkedin": 61580, + "linkedin-in": 61665, + "linode": 62136, + "linux": 61820, + "lira-sign": 61845, + "list": 61498, + "list-alt": 61474, + "list-ol": 61643, + "list-ul": 61642, + "location-arrow": 61732, + "lock": 61475, + "lock-open": 62401, + "long-arrow-alt-down": 62217, + "long-arrow-alt-left": 62218, + "long-arrow-alt-right": 62219, + "long-arrow-alt-up": 62220, + "low-vision": 62120, + "luggage-cart": 62877, + "lyft": 62403, + "magento": 62404, + "magic": 61648, + "magnet": 61558, + "mailchimp": 62878, + "male": 61827, + "mandalorian": 62735, + "map": 62073, + "map-marked": 62879, + "map-marked-alt": 62880, + "map-marker": 61505, + "map-marker-alt": 62405, + "map-pin": 62070, + "map-signs": 62071, + "marker": 62881, + "mars": 61986, + "mars-double": 61991, + "mars-stroke": 61993, + "mars-stroke-h": 61995, + "mars-stroke-v": 61994, + "mastodon": 62710, + "maxcdn": 61750, + "medal": 62882, + "medapps": 62406, + "medium": 62010, + "medium-m": 62407, + "medkit": 61690, + "medrt": 62408, + "meetup": 62176, + "megaport": 62883, + "meh": 61722, + "meh-blank": 62884, + "meh-rolling-eyes": 62885, + "memory": 62776, + "mercury": 61987, + "microchip": 62171, + "microphone": 61744, + "microphone-alt": 62409, + "microphone-alt-slash": 62777, + "microphone-slash": 61745, + "microsoft": 62410, + "minus": 61544, + "minus-circle": 61526, + "minus-square": 61766, + "mix": 62411, + "mixcloud": 62089, + "mizuni": 62412, + "mobile": 61707, + "mobile-alt": 62413, + "modx": 62085, + "monero": 62416, + "money-bill": 61654, + "money-bill-alt": 62417, + "money-bill-wave": 62778, + "money-bill-wave-alt": 62779, + "money-check": 62780, + "money-check-alt": 62781, + "monument": 62886, + "moon": 61830, + "mortar-pestle": 62887, + "motorcycle": 61980, + "mouse-pointer": 62021, + "music": 61441, + "napster": 62418, + "neuter": 61996, + "newspaper": 61930, + "nimblr": 62888, + "nintendo-switch": 62488, + "node": 62489, + "node-js": 62419, + "not-equal": 62782, + "notes-medical": 62593, + "npm": 62420, + "ns8": 62421, + "nutritionix": 62422, + "object-group": 62023, + "object-ungroup": 62024, + "odnoklassniki": 62051, + "odnoklassniki-square": 62052, + "old-republic": 62736, + "opencart": 62013, + "openid": 61851, + "opera": 62058, + "optin-monster": 62012, + "osi": 62490, + "outdent": 61499, + "page4": 62423, + "pagelines": 61836, + "paint-brush": 61948, + "paint-roller": 62890, + "palette": 62783, + "palfed": 62424, + "pallet": 62594, + "paper-plane": 61912, + "paperclip": 61638, + "parachute-box": 62669, + "paragraph": 61917, + "parking": 62784, + "passport": 62891, + "paste": 61674, + "patreon": 62425, + "pause": 61516, + "pause-circle": 62091, + "paw": 61872, + "paypal": 61933, + "pen": 62212, + "pen-alt": 62213, + "pen-fancy": 62892, + "pen-nib": 62893, + "pen-square": 61771, + "pencil-alt": 62211, + "pencil-ruler": 62894, + "people-carry": 62670, + "percent": 62101, + "percentage": 62785, + "periscope": 62426, + "phabricator": 62427, + "phoenix-framework": 62428, + "phoenix-squadron": 62737, + "phone": 61589, + "phone-slash": 62429, + "phone-square": 61592, + "phone-volume": 62112, + "php": 62551, + "pied-piper": 62126, + "pied-piper-alt": 61864, + "pied-piper-hat": 62693, + "pied-piper-pp": 61863, + "piggy-bank": 62675, + "pills": 62596, + "pinterest": 61650, + "pinterest-p": 62001, + "pinterest-square": 61651, + "plane": 61554, + "plane-arrival": 62895, + "plane-departure": 62896, + "play": 61515, + "play-circle": 61764, + "playstation": 62431, + "plug": 61926, + "plus": 61543, + "plus-circle": 61525, + "plus-square": 61694, + "podcast": 62158, + "poo": 62206, + "portrait": 62432, + "pound-sign": 61780, + "power-off": 61457, + "prescription": 62897, + "prescription-bottle": 62597, + "prescription-bottle-alt": 62598, + "print": 61487, + "procedures": 62599, + "product-hunt": 62088, + "project-diagram": 62786, + "pushed": 62433, + "puzzle-piece": 61742, + "python": 62434, + "qq": 61910, + "qrcode": 61481, + "question": 61736, + "question-circle": 61529, + "quidditch": 62552, + "quinscape": 62553, + "quora": 62148, + "quote-left": 61709, + "quote-right": 61710, + "r-project": 62711, + "random": 61556, + "ravelry": 62169, + "react": 62491, + "readme": 62677, + "rebel": 61904, + "receipt": 62787, + "recycle": 61880, + "red-river": 62435, + "reddit": 61857, + "reddit-alien": 62081, + "reddit-square": 61858, + "redo": 61470, + "redo-alt": 62201, + "registered": 62045, + "rendact": 62436, + "renren": 61835, + "reply": 62437, + "reply-all": 61730, + "replyd": 62438, + "researchgate": 62712, + "resolving": 62439, + "retweet": 61561, + "rev": 62898, + "ribbon": 62678, + "road": 61464, + "robot": 62788, + "rocket": 61749, + "rocketchat": 62440, + "rockrms": 62441, + "rss": 61598, + "rss-square": 61763, + "ruble-sign": 61784, + "ruler": 62789, + "ruler-combined": 62790, + "ruler-horizontal": 62791, + "ruler-vertical": 62792, + "rupee-sign": 61782, + "sad-cry": 62899, + "sad-tear": 62900, + "safari": 62055, + "sass": 62494, + "save": 61639, + "schlix": 62442, + "school": 62793, + "screwdriver": 62794, + "scribd": 62090, + "search": 61442, + "search-minus": 61456, + "search-plus": 61454, + "searchengin": 62443, + "seedling": 62680, + "sellcast": 62170, + "sellsy": 61971, + "server": 62003, + "servicestack": 62444, + "share": 61540, + "share-alt": 61920, + "share-alt-square": 61921, + "share-square": 61773, + "shekel-sign": 61963, + "shield-alt": 62445, + "ship": 61978, + "shipping-fast": 62603, + "shirtsinbulk": 61972, + "shoe-prints": 62795, + "shopping-bag": 62096, + "shopping-basket": 62097, + "shopping-cart": 61562, + "shopware": 62901, + "shower": 62156, + "shuttle-van": 62902, + "sign": 62681, + "sign-in-alt": 62198, + "sign-language": 62119, + "sign-out-alt": 62197, + "signal": 61458, + "signature": 62903, + "simplybuilt": 61973, + "sistrix": 62446, + "sitemap": 61672, + "sith": 62738, + "skull": 62796, + "skyatlas": 61974, + "skype": 61822, + "slack": 61848, + "slack-hash": 62447, + "sliders-h": 61918, + "slideshare": 61927, + "smile": 61720, + "smile-beam": 62904, + "smile-wink": 62682, + "smoking": 62605, + "smoking-ban": 62797, + "snapchat": 62123, + "snapchat-ghost": 62124, + "snapchat-square": 62125, + "snowflake": 62172, + "solar-panel": 62906, + "sort": 61660, + "sort-alpha-down": 61789, + "sort-alpha-up": 61790, + "sort-amount-down": 61792, + "sort-amount-up": 61793, + "sort-down": 61661, + "sort-numeric-down": 61794, + "sort-numeric-up": 61795, + "sort-up": 61662, + "soundcloud": 61886, + "spa": 62907, + "space-shuttle": 61847, + "speakap": 62451, + "spinner": 61712, + "splotch": 62908, + "spotify": 61884, + "spray-can": 62909, + "square": 61640, + "square-full": 62556, + "squarespace": 62910, + "stack-exchange": 61837, + "stack-overflow": 61804, + "stamp": 62911, + "star": 61445, + "star-half": 61577, + "star-half-alt": 62912, + "staylinked": 62453, + "steam": 61878, + "steam-square": 61879, + "steam-symbol": 62454, + "step-backward": 61512, + "step-forward": 61521, + "stethoscope": 61681, + "sticker-mule": 62455, + "sticky-note": 62025, + "stop": 61517, + "stop-circle": 62093, + "stopwatch": 62194, + "store": 62798, + "store-alt": 62799, + "strava": 62504, + "stream": 62800, + "street-view": 61981, + "strikethrough": 61644, + "stripe": 62505, + "stripe-s": 62506, + "stroopwafel": 62801, + "studiovinari": 62456, + "stumbleupon": 61860, + "stumbleupon-circle": 61859, + "subscript": 61740, + "subway": 62009, + "suitcase": 61682, + "suitcase-rolling": 62913, + "sun": 61829, + "superpowers": 62173, + "superscript": 61739, + "supple": 62457, + "surprise": 62914, + "swatchbook": 62915, + "swimmer": 62916, + "swimming-pool": 62917, + "sync": 61473, + "sync-alt": 62193, + "syringe": 62606, + "table": 61646, + "table-tennis": 62557, + "tablet": 61706, + "tablet-alt": 62458, + "tablets": 62608, + "tachometer-alt": 62461, + "tag": 61483, + "tags": 61484, + "tape": 62683, + "tasks": 61614, + "taxi": 61882, + "teamspeak": 62713, + "telegram": 62150, + "telegram-plane": 62462, + "tencent-weibo": 61909, + "terminal": 61728, + "text-height": 61492, + "text-width": 61493, + "th": 61450, + "th-large": 61449, + "th-list": 61451, + "themeco": 62918, + "themeisle": 62130, + "thermometer": 62609, + "thermometer-empty": 62155, + "thermometer-full": 62151, + "thermometer-half": 62153, + "thermometer-quarter": 62154, + "thermometer-three-quarters": 62152, + "thumbs-down": 61797, + "thumbs-up": 61796, + "thumbtack": 61581, + "ticket-alt": 62463, + "times": 61453, + "times-circle": 61527, + "tint": 61507, + "tint-slash": 62919, + "tired": 62920, + "toggle-off": 61956, + "toggle-on": 61957, + "toolbox": 62802, + "tooth": 62921, + "trade-federation": 62739, + "trademark": 62044, + "train": 62008, + "transgender": 61988, + "transgender-alt": 61989, + "trash": 61944, + "trash-alt": 62189, + "tree": 61883, + "trello": 61825, + "tripadvisor": 62050, + "trophy": 61585, + "truck": 61649, + "truck-loading": 62686, + "truck-moving": 62687, + "tshirt": 62803, + "tty": 61924, + "tumblr": 61811, + "tumblr-square": 61812, + "tv": 62060, + "twitch": 61928, + "twitter": 61593, + "twitter-square": 61569, + "typo3": 62507, + "uber": 62466, + "uikit": 62467, + "umbrella": 61673, + "umbrella-beach": 62922, + "underline": 61645, + "undo": 61666, + "undo-alt": 62186, + "uniregistry": 62468, + "universal-access": 62106, + "university": 61852, + "unlink": 61735, + "unlock": 61596, + "unlock-alt": 61758, + "untappd": 62469, + "upload": 61587, + "usb": 62087, + "user": 61447, + "user-alt": 62470, + "user-alt-slash": 62714, + "user-astronaut": 62715, + "user-check": 62716, + "user-circle": 62141, + "user-clock": 62717, + "user-cog": 62718, + "user-edit": 62719, + "user-friends": 62720, + "user-graduate": 62721, + "user-lock": 62722, + "user-md": 61680, + "user-minus": 62723, + "user-ninja": 62724, + "user-plus": 62004, + "user-secret": 61979, + "user-shield": 62725, + "user-slash": 62726, + "user-tag": 62727, + "user-tie": 62728, + "user-times": 62005, + "users": 61632, + "users-cog": 62729, + "ussunnah": 62471, + "utensil-spoon": 62181, + "utensils": 62183, + "vaadin": 62472, + "vector-square": 62923, + "venus": 61985, + "venus-double": 61990, + "venus-mars": 61992, + "viacoin": 62007, + "viadeo": 62121, + "viadeo-square": 62122, + "vial": 62610, + "vials": 62611, + "viber": 62473, + "video": 61501, + "video-slash": 62690, + "vimeo": 62474, + "vimeo-square": 61844, + "vimeo-v": 62077, + "vine": 61898, + "vk": 61833, + "vnv": 62475, + "volleyball-ball": 62559, + "volume-down": 61479, + "volume-off": 61478, + "volume-up": 61480, + "vuejs": 62495, + "walking": 62804, + "wallet": 62805, + "warehouse": 62612, + "weebly": 62924, + "weibo": 61834, + "weight": 62614, + "weight-hanging": 62925, + "weixin": 61911, + "whatsapp": 62002, + "whatsapp-square": 62476, + "wheelchair": 61843, + "whmcs": 62477, + "wifi": 61931, + "wikipedia-w": 62054, + "window-close": 62480, + "window-maximize": 62160, + "window-minimize": 62161, + "window-restore": 62162, + "windows": 61818, + "wine-glass": 62691, + "wine-glass-alt": 62926, + "wix": 62927, + "wolf-pack-battalion": 62740, + "won-sign": 61785, + "wordpress": 61850, + "wordpress-simple": 62481, + "wpbeginner": 62103, + "wpexplorer": 62174, + "wpforms": 62104, + "wrench": 61613, + "x-ray": 62615, + "xbox": 62482, + "xing": 61800, + "xing-square": 61801, + "y-combinator": 62011, + "yahoo": 61854, + "yandex": 62483, + "yandex-international": 62484, + "yelp": 61929, + "yen-sign": 61783, + "yoast": 62129, + "youtube": 61799, + "youtube-square": 62513 +} \ No newline at end of file diff --git a/glyphmaps/FontAwesome5Pro.json b/glyphmaps/FontAwesome5Pro.json new file mode 100644 index 000000000..9b488f4f7 --- /dev/null +++ b/glyphmaps/FontAwesome5Pro.json @@ -0,0 +1,1361 @@ +{ + "500px": 62062, + "accessible-icon": 62312, + "accusoft": 62313, + "address-book": 62137, + "address-card": 62139, + "adjust": 61506, + "adn": 61808, + "adversal": 62314, + "affiliatetheme": 62315, + "alarm-clock": 62286, + "algolia": 62316, + "align-center": 61495, + "align-justify": 61497, + "align-left": 61494, + "align-right": 61496, + "allergies": 62561, + "amazon": 62064, + "amazon-pay": 62508, + "ambulance": 61689, + "american-sign-language-interpreting": 62115, + "amilia": 62317, + "anchor": 61757, + "android": 61819, + "angellist": 61961, + "angle-double-down": 61699, + "angle-double-left": 61696, + "angle-double-right": 61697, + "angle-double-up": 61698, + "angle-down": 61703, + "angle-left": 61700, + "angle-right": 61701, + "angle-up": 61702, + "angry": 62806, + "angrycreative": 62318, + "angular": 62496, + "app-store": 62319, + "app-store-ios": 62320, + "apper": 62321, + "apple": 61817, + "apple-pay": 62485, + "archive": 61831, + "archway": 62807, + "arrow-alt-circle-down": 62296, + "arrow-alt-circle-left": 62297, + "arrow-alt-circle-right": 62298, + "arrow-alt-circle-up": 62299, + "arrow-alt-down": 62292, + "arrow-alt-from-bottom": 62278, + "arrow-alt-from-left": 62279, + "arrow-alt-from-right": 62280, + "arrow-alt-from-top": 62281, + "arrow-alt-left": 62293, + "arrow-alt-right": 62294, + "arrow-alt-square-down": 62288, + "arrow-alt-square-left": 62289, + "arrow-alt-square-right": 62290, + "arrow-alt-square-up": 62291, + "arrow-alt-to-bottom": 62282, + "arrow-alt-to-left": 62283, + "arrow-alt-to-right": 62284, + "arrow-alt-to-top": 62285, + "arrow-alt-up": 62295, + "arrow-circle-down": 61611, + "arrow-circle-left": 61608, + "arrow-circle-right": 61609, + "arrow-circle-up": 61610, + "arrow-down": 61539, + "arrow-from-bottom": 62274, + "arrow-from-left": 62275, + "arrow-from-right": 62276, + "arrow-from-top": 62277, + "arrow-left": 61536, + "arrow-right": 61537, + "arrow-square-down": 62265, + "arrow-square-left": 62266, + "arrow-square-right": 62267, + "arrow-square-up": 62268, + "arrow-to-bottom": 62269, + "arrow-to-left": 62270, + "arrow-to-right": 62272, + "arrow-to-top": 62273, + "arrow-up": 61538, + "arrows": 61511, + "arrows-alt": 61618, + "arrows-alt-h": 62263, + "arrows-alt-v": 62264, + "arrows-h": 61566, + "arrows-v": 61565, + "assistive-listening-systems": 62114, + "asterisk": 61545, + "asymmetrik": 62322, + "at": 61946, + "atlas": 62808, + "audible": 62323, + "audio-description": 62110, + "autoprefixer": 62492, + "avianex": 62324, + "aviato": 62497, + "award": 62809, + "aws": 62325, + "backspace": 62810, + "backward": 61514, + "badge": 62261, + "badge-check": 62262, + "balance-scale": 62030, + "balance-scale-left": 62741, + "balance-scale-right": 62742, + "ban": 61534, + "band-aid": 62562, + "bandcamp": 62165, + "barcode": 61482, + "barcode-alt": 62563, + "barcode-read": 62564, + "barcode-scan": 62565, + "bars": 61641, + "baseball": 62514, + "baseball-ball": 62515, + "basketball-ball": 62516, + "basketball-hoop": 62517, + "bath": 62157, + "battery-bolt": 62326, + "battery-empty": 62020, + "battery-full": 62016, + "battery-half": 62018, + "battery-quarter": 62019, + "battery-slash": 62327, + "battery-three-quarters": 62017, + "bed": 62006, + "beer": 61692, + "behance": 61876, + "behance-square": 61877, + "bell": 61683, + "bell-slash": 61942, + "bezier-curve": 62811, + "bicycle": 61958, + "bimobject": 62328, + "binoculars": 61925, + "birthday-cake": 61949, + "bitbucket": 61809, + "bitcoin": 62329, + "bity": 62330, + "black-tie": 62078, + "blackberry": 62331, + "blanket": 62616, + "blender": 62743, + "blind": 62109, + "blogger": 62332, + "blogger-b": 62333, + "bluetooth": 62099, + "bluetooth-b": 62100, + "bold": 61490, + "bolt": 61671, + "bomb": 61922, + "bong": 62812, + "book": 61485, + "book-heart": 62617, + "book-open": 62744, + "bookmark": 61486, + "bowling-ball": 62518, + "bowling-pins": 62519, + "box": 62566, + "box-alt": 62618, + "box-check": 62567, + "box-fragile": 62619, + "box-full": 62620, + "box-heart": 62621, + "box-open": 62622, + "box-up": 62623, + "box-usd": 62624, + "boxes": 62568, + "boxes-alt": 62625, + "boxing-glove": 62520, + "braille": 62113, + "briefcase": 61617, + "briefcase-medical": 62569, + "broadcast-tower": 62745, + "broom": 62746, + "browser": 62334, + "brush": 62813, + "btc": 61786, + "bug": 61832, + "building": 61869, + "bullhorn": 61601, + "bullseye": 61760, + "burn": 62570, + "buromobelexperte": 62335, + "bus": 61959, + "bus-alt": 62814, + "buysellads": 61965, + "calculator": 61932, + "calendar": 61747, + "calendar-alt": 61555, + "calendar-check": 62068, + "calendar-edit": 62259, + "calendar-exclamation": 62260, + "calendar-minus": 62066, + "calendar-plus": 62065, + "calendar-times": 62067, + "camera": 61488, + "camera-alt": 62258, + "camera-retro": 61571, + "cannabis": 62815, + "capsules": 62571, + "car": 61881, + "caret-circle-down": 62253, + "caret-circle-left": 62254, + "caret-circle-right": 62256, + "caret-circle-up": 62257, + "caret-down": 61655, + "caret-left": 61657, + "caret-right": 61658, + "caret-square-down": 61776, + "caret-square-left": 61841, + "caret-square-right": 61778, + "caret-square-up": 61777, + "caret-up": 61656, + "cart-arrow-down": 61976, + "cart-plus": 61975, + "cc-amazon-pay": 62509, + "cc-amex": 61939, + "cc-apple-pay": 62486, + "cc-diners-club": 62028, + "cc-discover": 61938, + "cc-jcb": 62027, + "cc-mastercard": 61937, + "cc-paypal": 61940, + "cc-stripe": 61941, + "cc-visa": 61936, + "centercode": 62336, + "certificate": 61603, + "chalkboard": 62747, + "chalkboard-teacher": 62748, + "chart-area": 61950, + "chart-bar": 61568, + "chart-line": 61953, + "chart-pie": 61952, + "check": 61452, + "check-circle": 61528, + "check-double": 62816, + "check-square": 61770, + "chess": 62521, + "chess-bishop": 62522, + "chess-bishop-alt": 62523, + "chess-board": 62524, + "chess-clock": 62525, + "chess-clock-alt": 62526, + "chess-king": 62527, + "chess-king-alt": 62528, + "chess-knight": 62529, + "chess-knight-alt": 62530, + "chess-pawn": 62531, + "chess-pawn-alt": 62532, + "chess-queen": 62533, + "chess-queen-alt": 62534, + "chess-rook": 62535, + "chess-rook-alt": 62536, + "chevron-circle-down": 61754, + "chevron-circle-left": 61751, + "chevron-circle-right": 61752, + "chevron-circle-up": 61753, + "chevron-double-down": 62242, + "chevron-double-left": 62243, + "chevron-double-right": 62244, + "chevron-double-up": 62245, + "chevron-down": 61560, + "chevron-left": 61523, + "chevron-right": 61524, + "chevron-square-down": 62249, + "chevron-square-left": 62250, + "chevron-square-right": 62251, + "chevron-square-up": 62252, + "chevron-up": 61559, + "child": 61870, + "chrome": 62056, + "church": 62749, + "circle": 61713, + "circle-notch": 61902, + "clipboard": 62248, + "clipboard-check": 62572, + "clipboard-list": 62573, + "clock": 61463, + "clone": 62029, + "closed-captioning": 61962, + "cloud": 61634, + "cloud-download": 61677, + "cloud-download-alt": 62337, + "cloud-upload": 61678, + "cloud-upload-alt": 62338, + "cloudscale": 62339, + "cloudsmith": 62340, + "cloudversify": 62341, + "club": 62247, + "cocktail": 62817, + "code": 61729, + "code-branch": 61734, + "code-commit": 62342, + "code-merge": 62343, + "codepen": 61899, + "codiepie": 62084, + "coffee": 61684, + "cog": 61459, + "cogs": 61573, + "coins": 62750, + "columns": 61659, + "comment": 61557, + "comment-alt": 62074, + "comment-alt-check": 62626, + "comment-alt-dots": 62627, + "comment-alt-edit": 62628, + "comment-alt-exclamation": 62629, + "comment-alt-lines": 62630, + "comment-alt-minus": 62631, + "comment-alt-plus": 62632, + "comment-alt-slash": 62633, + "comment-alt-smile": 62634, + "comment-alt-times": 62635, + "comment-check": 62636, + "comment-dots": 62637, + "comment-edit": 62638, + "comment-exclamation": 62639, + "comment-lines": 62640, + "comment-minus": 62641, + "comment-plus": 62642, + "comment-slash": 62643, + "comment-smile": 62644, + "comment-times": 62645, + "comments": 61574, + "comments-alt": 62646, + "compact-disc": 62751, + "compass": 61774, + "compress": 61542, + "compress-alt": 62498, + "compress-wide": 62246, + "concierge-bell": 62818, + "connectdevelop": 61966, + "container-storage": 62647, + "contao": 62061, + "conveyor-belt": 62574, + "conveyor-belt-alt": 62575, + "cookie": 62819, + "cookie-bite": 62820, + "copy": 61637, + "copyright": 61945, + "couch": 62648, + "cpanel": 62344, + "creative-commons": 62046, + "creative-commons-by": 62695, + "creative-commons-nc": 62696, + "creative-commons-nc-eu": 62697, + "creative-commons-nc-jp": 62698, + "creative-commons-nd": 62699, + "creative-commons-pd": 62700, + "creative-commons-pd-alt": 62701, + "creative-commons-remix": 62702, + "creative-commons-sa": 62703, + "creative-commons-sampling": 62704, + "creative-commons-sampling-plus": 62705, + "creative-commons-share": 62706, + "creative-commons-zero": 62707, + "credit-card": 61597, + "credit-card-blank": 62345, + "credit-card-front": 62346, + "cricket": 62537, + "crop": 61733, + "crop-alt": 62821, + "crosshairs": 61531, + "crow": 62752, + "crown": 62753, + "css3": 61756, + "css3-alt": 62347, + "cube": 61874, + "cubes": 61875, + "curling": 62538, + "cut": 61636, + "cuttlefish": 62348, + "d-and-d": 62349, + "dashcube": 61968, + "database": 61888, + "deaf": 62116, + "delicious": 61861, + "deploydog": 62350, + "deskpro": 62351, + "desktop": 61704, + "desktop-alt": 62352, + "deviantart": 61885, + "diagnoses": 62576, + "diamond": 61977, + "dice": 62754, + "dice-five": 62755, + "dice-four": 62756, + "dice-one": 62757, + "dice-six": 62758, + "dice-three": 62759, + "dice-two": 62760, + "digg": 61862, + "digital-ocean": 62353, + "digital-tachograph": 62822, + "discord": 62354, + "discourse": 62355, + "divide": 62761, + "dizzy": 62823, + "dna": 62577, + "dochub": 62356, + "docker": 62357, + "dollar-sign": 61781, + "dolly": 62578, + "dolly-empty": 62579, + "dolly-flatbed": 62580, + "dolly-flatbed-alt": 62581, + "dolly-flatbed-empty": 62582, + "donate": 62649, + "door-closed": 62762, + "door-open": 62763, + "dot-circle": 61842, + "dove": 62650, + "download": 61465, + "draft2digital": 62358, + "drafting-compass": 62824, + "dribbble": 61821, + "dribbble-square": 62359, + "dropbox": 61803, + "drum": 62825, + "drum-steelpan": 62826, + "drupal": 61865, + "dumbbell": 62539, + "dyalog": 62361, + "earlybirds": 62362, + "ebay": 62708, + "edge": 62082, + "edit": 61508, + "eject": 61522, + "elementor": 62512, + "ellipsis-h": 61761, + "ellipsis-h-alt": 62363, + "ellipsis-v": 61762, + "ellipsis-v-alt": 62364, + "ember": 62499, + "empire": 61905, + "envelope": 61664, + "envelope-open": 62134, + "envelope-square": 61849, + "envira": 62105, + "equals": 62764, + "eraser": 61741, + "erlang": 62365, + "ethereum": 62510, + "etsy": 62167, + "euro-sign": 61779, + "exchange": 61676, + "exchange-alt": 62306, + "exclamation": 61738, + "exclamation-circle": 61546, + "exclamation-square": 62241, + "exclamation-triangle": 61553, + "expand": 61541, + "expand-alt": 62500, + "expand-arrows": 62237, + "expand-arrows-alt": 62238, + "expand-wide": 62240, + "expeditedssl": 62014, + "external-link": 61582, + "external-link-alt": 62301, + "external-link-square": 61772, + "external-link-square-alt": 62304, + "eye": 61550, + "eye-dropper": 61947, + "eye-slash": 61552, + "facebook": 61594, + "facebook-f": 62366, + "facebook-messenger": 62367, + "facebook-square": 61570, + "fast-backward": 61513, + "fast-forward": 61520, + "fax": 61868, + "feather": 62765, + "feather-alt": 62827, + "female": 61826, + "field-hockey": 62540, + "fighter-jet": 61691, + "file": 61787, + "file-alt": 61788, + "file-archive": 61894, + "file-audio": 61895, + "file-check": 62230, + "file-code": 61897, + "file-contract": 62828, + "file-download": 62829, + "file-edit": 62236, + "file-excel": 61891, + "file-exclamation": 62234, + "file-export": 62830, + "file-image": 61893, + "file-import": 62831, + "file-invoice": 62832, + "file-invoice-dollar": 62833, + "file-medical": 62583, + "file-medical-alt": 62584, + "file-minus": 62232, + "file-pdf": 61889, + "file-plus": 62233, + "file-powerpoint": 61892, + "file-prescription": 62834, + "file-signature": 62835, + "file-times": 62231, + "file-upload": 62836, + "file-video": 61896, + "file-word": 61890, + "fill": 62837, + "fill-drip": 62838, + "film": 61448, + "film-alt": 62368, + "filter": 61616, + "fingerprint": 62839, + "fire": 61549, + "fire-extinguisher": 61748, + "firefox": 62057, + "first-aid": 62585, + "first-order": 62128, + "first-order-alt": 62730, + "firstdraft": 62369, + "fish": 62840, + "flag": 61476, + "flag-checkered": 61726, + "flask": 61635, + "flickr": 61806, + "flipboard": 62541, + "flushed": 62841, + "fly": 62487, + "folder": 61563, + "folder-open": 61564, + "font": 61489, + "font-awesome": 62132, + "font-awesome-alt": 62300, + "font-awesome-flag": 62501, + "font-awesome-logo-full": 62694, + "fonticons": 62080, + "fonticons-fi": 62370, + "football-ball": 62542, + "football-helmet": 62543, + "forklift": 62586, + "fort-awesome": 62086, + "fort-awesome-alt": 62371, + "forumbee": 61969, + "forward": 61518, + "foursquare": 61824, + "fragile": 62651, + "free-code-camp": 62149, + "freebsd": 62372, + "frog": 62766, + "frown": 61721, + "frown-open": 62842, + "fulcrum": 62731, + "futbol": 61923, + "galactic-republic": 62732, + "galactic-senate": 62733, + "gamepad": 61723, + "gas-pump": 62767, + "gavel": 61667, + "gem": 62373, + "genderless": 61997, + "get-pocket": 62053, + "gg": 62048, + "gg-circle": 62049, + "gift": 61547, + "git": 61907, + "git-square": 61906, + "github": 61595, + "github-alt": 61715, + "github-square": 61586, + "gitkraken": 62374, + "gitlab": 62102, + "gitter": 62502, + "glass-martini": 61440, + "glass-martini-alt": 62843, + "glasses": 62768, + "glide": 62117, + "glide-g": 62118, + "globe": 61612, + "globe-africa": 62844, + "globe-americas": 62845, + "globe-asia": 62846, + "gofore": 62375, + "golf-ball": 62544, + "golf-club": 62545, + "goodreads": 62376, + "goodreads-g": 62377, + "google": 61856, + "google-drive": 62378, + "google-play": 62379, + "google-plus": 62131, + "google-plus-g": 61653, + "google-plus-square": 61652, + "google-wallet": 61934, + "graduation-cap": 61853, + "gratipay": 61828, + "grav": 62166, + "greater-than": 62769, + "greater-than-equal": 62770, + "grimace": 62847, + "grin": 62848, + "grin-alt": 62849, + "grin-beam": 62850, + "grin-beam-sweat": 62851, + "grin-hearts": 62852, + "grin-squint": 62853, + "grin-squint-tears": 62854, + "grin-stars": 62855, + "grin-tears": 62856, + "grin-tongue": 62857, + "grin-tongue-squint": 62858, + "grin-tongue-wink": 62859, + "grin-wink": 62860, + "grip-horizontal": 62861, + "grip-vertical": 62862, + "gripfire": 62380, + "grunt": 62381, + "gulp": 62382, + "h-square": 61693, + "h1": 62227, + "h2": 62228, + "h3": 62229, + "hacker-news": 61908, + "hacker-news-square": 62383, + "hand-heart": 62652, + "hand-holding": 62653, + "hand-holding-box": 62587, + "hand-holding-heart": 62654, + "hand-holding-seedling": 62655, + "hand-holding-usd": 62656, + "hand-holding-water": 62657, + "hand-lizard": 62040, + "hand-paper": 62038, + "hand-peace": 62043, + "hand-point-down": 61607, + "hand-point-left": 61605, + "hand-point-right": 61604, + "hand-point-up": 61606, + "hand-pointer": 62042, + "hand-receiving": 62588, + "hand-rock": 62037, + "hand-scissors": 62039, + "hand-spock": 62041, + "hands": 62658, + "hands-heart": 62659, + "hands-helping": 62660, + "hands-usd": 62661, + "handshake": 62133, + "handshake-alt": 62662, + "hashtag": 62098, + "hdd": 61600, + "heading": 61916, + "headphones": 61477, + "headphones-alt": 62863, + "headset": 62864, + "heart": 61444, + "heart-circle": 62663, + "heart-square": 62664, + "heartbeat": 61982, + "helicopter": 62771, + "hexagon": 62226, + "highlighter": 62865, + "hips": 62546, + "hire-a-helper": 62384, + "history": 61914, + "hockey-puck": 62547, + "hockey-sticks": 62548, + "home": 61461, + "home-heart": 62665, + "hooli": 62503, + "hornbill": 62866, + "hospital": 61688, + "hospital-alt": 62589, + "hospital-symbol": 62590, + "hot-tub": 62867, + "hotel": 62868, + "hotjar": 62385, + "hourglass": 62036, + "hourglass-end": 62035, + "hourglass-half": 62034, + "hourglass-start": 62033, + "houzz": 62076, + "html5": 61755, + "hubspot": 62386, + "i-cursor": 62022, + "id-badge": 62145, + "id-card": 62146, + "id-card-alt": 62591, + "image": 61502, + "images": 62210, + "imdb": 62168, + "inbox": 61468, + "inbox-in": 62224, + "inbox-out": 62225, + "indent": 61500, + "industry": 62069, + "industry-alt": 62387, + "infinity": 62772, + "info": 61737, + "info-circle": 61530, + "info-square": 62223, + "instagram": 61805, + "internet-explorer": 62059, + "inventory": 62592, + "ioxhost": 61960, + "italic": 61491, + "itunes": 62388, + "itunes-note": 62389, + "jack-o-lantern": 62222, + "java": 62692, + "jedi-order": 62734, + "jenkins": 62390, + "joget": 62391, + "joint": 62869, + "joomla": 61866, + "js": 62392, + "js-square": 62393, + "jsfiddle": 61900, + "key": 61572, + "keybase": 62709, + "keyboard": 61724, + "keycdn": 62394, + "kickstarter": 62395, + "kickstarter-k": 62396, + "kiss": 62870, + "kiss-beam": 62871, + "kiss-wink-heart": 62872, + "kiwi-bird": 62773, + "korvue": 62511, + "lamp": 62666, + "language": 61867, + "laptop": 61705, + "laravel": 62397, + "lastfm": 61954, + "lastfm-square": 61955, + "laugh": 62873, + "laugh-beam": 62874, + "laugh-squint": 62875, + "laugh-wink": 62876, + "leaf": 61548, + "leaf-heart": 62667, + "leanpub": 61970, + "lemon": 61588, + "less": 62493, + "less-than": 62774, + "less-than-equal": 62775, + "level-down": 61769, + "level-down-alt": 62398, + "level-up": 61768, + "level-up-alt": 62399, + "life-ring": 61901, + "lightbulb": 61675, + "line": 62400, + "link": 61633, + "linkedin": 61580, + "linkedin-in": 61665, + "linode": 62136, + "linux": 61820, + "lira-sign": 61845, + "list": 61498, + "list-alt": 61474, + "list-ol": 61643, + "list-ul": 61642, + "location-arrow": 61732, + "lock": 61475, + "lock-alt": 62221, + "lock-open": 62401, + "lock-open-alt": 62402, + "long-arrow-alt-down": 62217, + "long-arrow-alt-left": 62218, + "long-arrow-alt-right": 62219, + "long-arrow-alt-up": 62220, + "long-arrow-down": 61813, + "long-arrow-left": 61815, + "long-arrow-right": 61816, + "long-arrow-up": 61814, + "loveseat": 62668, + "low-vision": 62120, + "luchador": 62549, + "luggage-cart": 62877, + "lyft": 62403, + "magento": 62404, + "magic": 61648, + "magnet": 61558, + "mailchimp": 62878, + "male": 61827, + "mandalorian": 62735, + "map": 62073, + "map-marked": 62879, + "map-marked-alt": 62880, + "map-marker": 61505, + "map-marker-alt": 62405, + "map-pin": 62070, + "map-signs": 62071, + "marker": 62881, + "mars": 61986, + "mars-double": 61991, + "mars-stroke": 61993, + "mars-stroke-h": 61995, + "mars-stroke-v": 61994, + "mastodon": 62710, + "maxcdn": 61750, + "medal": 62882, + "medapps": 62406, + "medium": 62010, + "medium-m": 62407, + "medkit": 61690, + "medrt": 62408, + "meetup": 62176, + "megaport": 62883, + "meh": 61722, + "meh-blank": 62884, + "meh-rolling-eyes": 62885, + "memory": 62776, + "mercury": 61987, + "microchip": 62171, + "microphone": 61744, + "microphone-alt": 62409, + "microphone-alt-slash": 62777, + "microphone-slash": 61745, + "microsoft": 62410, + "minus": 61544, + "minus-circle": 61526, + "minus-hexagon": 62215, + "minus-octagon": 62216, + "minus-square": 61766, + "mix": 62411, + "mixcloud": 62089, + "mizuni": 62412, + "mobile": 61707, + "mobile-alt": 62413, + "mobile-android": 62414, + "mobile-android-alt": 62415, + "modx": 62085, + "monero": 62416, + "money-bill": 61654, + "money-bill-alt": 62417, + "money-bill-wave": 62778, + "money-bill-wave-alt": 62779, + "money-check": 62780, + "money-check-alt": 62781, + "monument": 62886, + "moon": 61830, + "mortar-pestle": 62887, + "motorcycle": 61980, + "mouse-pointer": 62021, + "music": 61441, + "napster": 62418, + "neuter": 61996, + "newspaper": 61930, + "nimblr": 62888, + "nintendo-switch": 62488, + "node": 62489, + "node-js": 62419, + "not-equal": 62782, + "notes-medical": 62593, + "npm": 62420, + "ns8": 62421, + "nutritionix": 62422, + "object-group": 62023, + "object-ungroup": 62024, + "octagon": 62214, + "odnoklassniki": 62051, + "odnoklassniki-square": 62052, + "old-republic": 62736, + "opencart": 62013, + "openid": 61851, + "opera": 62058, + "optin-monster": 62012, + "osi": 62490, + "outdent": 61499, + "page4": 62423, + "pagelines": 61836, + "paint-brush": 61948, + "paint-brush-alt": 62889, + "paint-roller": 62890, + "palette": 62783, + "palfed": 62424, + "pallet": 62594, + "pallet-alt": 62595, + "paper-plane": 61912, + "paperclip": 61638, + "parachute-box": 62669, + "paragraph": 61917, + "parking": 62784, + "passport": 62891, + "paste": 61674, + "patreon": 62425, + "pause": 61516, + "pause-circle": 62091, + "paw": 61872, + "paypal": 61933, + "pen": 62212, + "pen-alt": 62213, + "pen-fancy": 62892, + "pen-nib": 62893, + "pen-square": 61771, + "pencil": 61504, + "pencil-alt": 62211, + "pencil-ruler": 62894, + "pennant": 62550, + "people-carry": 62670, + "percent": 62101, + "percentage": 62785, + "periscope": 62426, + "person-carry": 62671, + "person-dolly": 62672, + "person-dolly-empty": 62673, + "phabricator": 62427, + "phoenix-framework": 62428, + "phoenix-squadron": 62737, + "phone": 61589, + "phone-plus": 62674, + "phone-slash": 62429, + "phone-square": 61592, + "phone-volume": 62112, + "php": 62551, + "pied-piper": 62126, + "pied-piper-alt": 61864, + "pied-piper-hat": 62693, + "pied-piper-pp": 61863, + "piggy-bank": 62675, + "pills": 62596, + "pinterest": 61650, + "pinterest-p": 62001, + "pinterest-square": 61651, + "plane": 61554, + "plane-alt": 62430, + "plane-arrival": 62895, + "plane-departure": 62896, + "play": 61515, + "play-circle": 61764, + "playstation": 62431, + "plug": 61926, + "plus": 61543, + "plus-circle": 61525, + "plus-hexagon": 62208, + "plus-octagon": 62209, + "plus-square": 61694, + "podcast": 62158, + "poo": 62206, + "portrait": 62432, + "pound-sign": 61780, + "power-off": 61457, + "prescription": 62897, + "prescription-bottle": 62597, + "prescription-bottle-alt": 62598, + "print": 61487, + "procedures": 62599, + "product-hunt": 62088, + "project-diagram": 62786, + "pushed": 62433, + "puzzle-piece": 61742, + "python": 62434, + "qq": 61910, + "qrcode": 61481, + "question": 61736, + "question-circle": 61529, + "question-square": 62205, + "quidditch": 62552, + "quinscape": 62553, + "quora": 62148, + "quote-left": 61709, + "quote-right": 61710, + "r-project": 62711, + "racquet": 62554, + "ramp-loading": 62676, + "random": 61556, + "ravelry": 62169, + "react": 62491, + "readme": 62677, + "rebel": 61904, + "receipt": 62787, + "rectangle-landscape": 62202, + "rectangle-portrait": 62203, + "rectangle-wide": 62204, + "recycle": 61880, + "red-river": 62435, + "reddit": 61857, + "reddit-alien": 62081, + "reddit-square": 61858, + "redo": 61470, + "redo-alt": 62201, + "registered": 62045, + "rendact": 62436, + "renren": 61835, + "repeat": 62307, + "repeat-1": 62309, + "repeat-1-alt": 62310, + "repeat-alt": 62308, + "reply": 62437, + "reply-all": 61730, + "replyd": 62438, + "researchgate": 62712, + "resolving": 62439, + "retweet": 61561, + "retweet-alt": 62305, + "rev": 62898, + "ribbon": 62678, + "road": 61464, + "robot": 62788, + "rocket": 61749, + "rocketchat": 62440, + "rockrms": 62441, + "route": 62679, + "rss": 61598, + "rss-square": 61763, + "ruble-sign": 61784, + "ruler": 62789, + "ruler-combined": 62790, + "ruler-horizontal": 62791, + "ruler-vertical": 62792, + "rupee-sign": 61782, + "sad-cry": 62899, + "sad-tear": 62900, + "safari": 62055, + "sass": 62494, + "save": 61639, + "scanner": 62600, + "scanner-keyboard": 62601, + "scanner-touchscreen": 62602, + "schlix": 62442, + "school": 62793, + "screwdriver": 62794, + "scribd": 62090, + "scrubber": 62200, + "search": 61442, + "search-minus": 61456, + "search-plus": 61454, + "searchengin": 62443, + "seedling": 62680, + "sellcast": 62170, + "sellsy": 61971, + "server": 62003, + "servicestack": 62444, + "share": 61540, + "share-all": 62311, + "share-alt": 61920, + "share-alt-square": 61921, + "share-square": 61773, + "shekel-sign": 61963, + "shield": 61746, + "shield-alt": 62445, + "shield-check": 62199, + "ship": 61978, + "shipping-fast": 62603, + "shipping-timed": 62604, + "shirtsinbulk": 61972, + "shoe-prints": 62795, + "shopping-bag": 62096, + "shopping-basket": 62097, + "shopping-cart": 61562, + "shopware": 62901, + "shower": 62156, + "shuttle-van": 62902, + "shuttlecock": 62555, + "sign": 62681, + "sign-in": 61584, + "sign-in-alt": 62198, + "sign-language": 62119, + "sign-out": 61579, + "sign-out-alt": 62197, + "signal": 61458, + "signature": 62903, + "simplybuilt": 61973, + "sistrix": 62446, + "sitemap": 61672, + "sith": 62738, + "skull": 62796, + "skyatlas": 61974, + "skype": 61822, + "slack": 61848, + "slack-hash": 62447, + "sliders-h": 61918, + "sliders-h-square": 62448, + "sliders-v": 62449, + "sliders-v-square": 62450, + "slideshare": 61927, + "smile": 61720, + "smile-beam": 62904, + "smile-plus": 62905, + "smile-wink": 62682, + "smoking": 62605, + "smoking-ban": 62797, + "snapchat": 62123, + "snapchat-ghost": 62124, + "snapchat-square": 62125, + "snowflake": 62172, + "solar-panel": 62906, + "sort": 61660, + "sort-alpha-down": 61789, + "sort-alpha-up": 61790, + "sort-amount-down": 61792, + "sort-amount-up": 61793, + "sort-down": 61661, + "sort-numeric-down": 61794, + "sort-numeric-up": 61795, + "sort-up": 61662, + "soundcloud": 61886, + "spa": 62907, + "space-shuttle": 61847, + "spade": 62196, + "speakap": 62451, + "spinner": 61712, + "spinner-third": 62452, + "splotch": 62908, + "spotify": 61884, + "spray-can": 62909, + "square": 61640, + "square-full": 62556, + "squarespace": 62910, + "stack-exchange": 61837, + "stack-overflow": 61804, + "stamp": 62911, + "star": 61445, + "star-exclamation": 62195, + "star-half": 61577, + "star-half-alt": 62912, + "staylinked": 62453, + "steam": 61878, + "steam-square": 61879, + "steam-symbol": 62454, + "step-backward": 61512, + "step-forward": 61521, + "stethoscope": 61681, + "sticker-mule": 62455, + "sticky-note": 62025, + "stop": 61517, + "stop-circle": 62093, + "stopwatch": 62194, + "store": 62798, + "store-alt": 62799, + "strava": 62504, + "stream": 62800, + "street-view": 61981, + "strikethrough": 61644, + "stripe": 62505, + "stripe-s": 62506, + "stroopwafel": 62801, + "studiovinari": 62456, + "stumbleupon": 61860, + "stumbleupon-circle": 61859, + "subscript": 61740, + "subway": 62009, + "suitcase": 61682, + "suitcase-rolling": 62913, + "sun": 61829, + "superpowers": 62173, + "superscript": 61739, + "supple": 62457, + "surprise": 62914, + "swatchbook": 62915, + "swimmer": 62916, + "swimming-pool": 62917, + "sync": 61473, + "sync-alt": 62193, + "syringe": 62606, + "table": 61646, + "table-tennis": 62557, + "tablet": 61706, + "tablet-alt": 62458, + "tablet-android": 62459, + "tablet-android-alt": 62460, + "tablet-rugged": 62607, + "tablets": 62608, + "tachometer": 61668, + "tachometer-alt": 62461, + "tag": 61483, + "tags": 61484, + "tape": 62683, + "tasks": 61614, + "taxi": 61882, + "teamspeak": 62713, + "telegram": 62150, + "telegram-plane": 62462, + "tencent-weibo": 61909, + "tennis-ball": 62558, + "terminal": 61728, + "text-height": 61492, + "text-width": 61493, + "th": 61450, + "th-large": 61449, + "th-list": 61451, + "themeco": 62918, + "themeisle": 62130, + "thermometer": 62609, + "thermometer-empty": 62155, + "thermometer-full": 62151, + "thermometer-half": 62153, + "thermometer-quarter": 62154, + "thermometer-three-quarters": 62152, + "thumbs-down": 61797, + "thumbs-up": 61796, + "thumbtack": 61581, + "ticket": 61765, + "ticket-alt": 62463, + "times": 61453, + "times-circle": 61527, + "times-hexagon": 62190, + "times-octagon": 62192, + "times-square": 62163, + "tint": 61507, + "tint-slash": 62919, + "tired": 62920, + "toggle-off": 61956, + "toggle-on": 61957, + "toolbox": 62802, + "tooth": 62921, + "trade-federation": 62739, + "trademark": 62044, + "train": 62008, + "transgender": 61988, + "transgender-alt": 61989, + "trash": 61944, + "trash-alt": 62189, + "tree": 61883, + "tree-alt": 62464, + "trello": 61825, + "triangle": 62188, + "tripadvisor": 62050, + "trophy": 61585, + "trophy-alt": 62187, + "truck": 61649, + "truck-container": 62684, + "truck-couch": 62685, + "truck-loading": 62686, + "truck-moving": 62687, + "truck-ramp": 62688, + "tshirt": 62803, + "tty": 61924, + "tumblr": 61811, + "tumblr-square": 61812, + "tv": 62060, + "tv-retro": 62465, + "twitch": 61928, + "twitter": 61593, + "twitter-square": 61569, + "typo3": 62507, + "uber": 62466, + "uikit": 62467, + "umbrella": 61673, + "umbrella-beach": 62922, + "underline": 61645, + "undo": 61666, + "undo-alt": 62186, + "uniregistry": 62468, + "universal-access": 62106, + "university": 61852, + "unlink": 61735, + "unlock": 61596, + "unlock-alt": 61758, + "untappd": 62469, + "upload": 61587, + "usb": 62087, + "usd-circle": 62184, + "usd-square": 62185, + "user": 61447, + "user-alt": 62470, + "user-alt-slash": 62714, + "user-astronaut": 62715, + "user-check": 62716, + "user-circle": 62141, + "user-clock": 62717, + "user-cog": 62718, + "user-edit": 62719, + "user-friends": 62720, + "user-graduate": 62721, + "user-lock": 62722, + "user-md": 61680, + "user-minus": 62723, + "user-ninja": 62724, + "user-plus": 62004, + "user-secret": 61979, + "user-shield": 62725, + "user-slash": 62726, + "user-tag": 62727, + "user-tie": 62728, + "user-times": 62005, + "users": 61632, + "users-cog": 62729, + "ussunnah": 62471, + "utensil-fork": 62179, + "utensil-knife": 62180, + "utensil-spoon": 62181, + "utensils": 62183, + "utensils-alt": 62182, + "vaadin": 62472, + "vector-square": 62923, + "venus": 61985, + "venus-double": 61990, + "venus-mars": 61992, + "viacoin": 62007, + "viadeo": 62121, + "viadeo-square": 62122, + "vial": 62610, + "vials": 62611, + "viber": 62473, + "video": 61501, + "video-plus": 62689, + "video-slash": 62690, + "vimeo": 62474, + "vimeo-square": 61844, + "vimeo-v": 62077, + "vine": 61898, + "vk": 61833, + "vnv": 62475, + "volleyball-ball": 62559, + "volume-down": 61479, + "volume-mute": 62178, + "volume-off": 61478, + "volume-up": 61480, + "vuejs": 62495, + "walking": 62804, + "wallet": 62805, + "warehouse": 62612, + "warehouse-alt": 62613, + "watch": 62177, + "weebly": 62924, + "weibo": 61834, + "weight": 62614, + "weight-hanging": 62925, + "weixin": 61911, + "whatsapp": 62002, + "whatsapp-square": 62476, + "wheelchair": 61843, + "whistle": 62560, + "whmcs": 62477, + "wifi": 61931, + "wikipedia-w": 62054, + "window": 62478, + "window-alt": 62479, + "window-close": 62480, + "window-maximize": 62160, + "window-minimize": 62161, + "window-restore": 62162, + "windows": 61818, + "wine-glass": 62691, + "wine-glass-alt": 62926, + "wix": 62927, + "wolf-pack-battalion": 62740, + "won-sign": 61785, + "wordpress": 61850, + "wordpress-simple": 62481, + "wpbeginner": 62103, + "wpexplorer": 62174, + "wpforms": 62104, + "wrench": 61613, + "x-ray": 62615, + "xbox": 62482, + "xing": 61800, + "xing-square": 61801, + "y-combinator": 62011, + "yahoo": 61854, + "yandex": 62483, + "yandex-international": 62484, + "yelp": 61929, + "yen-sign": 61783, + "yoast": 62129, + "youtube": 61799, + "youtube-square": 62513 +} \ No newline at end of file diff --git a/lib/create-icon-set-from-fontawesome5.js b/lib/create-icon-set-from-fontawesome5.js new file mode 100644 index 000000000..2c07b9a16 --- /dev/null +++ b/lib/create-icon-set-from-fontawesome5.js @@ -0,0 +1,166 @@ +import React, { PureComponent } from 'react'; + +import { PixelRatio, Platform, processColor } from 'react-native'; + +import PropTypes from 'prop-types'; + +import createIconSet, { + DEFAULT_ICON_COLOR, + DEFAULT_ICON_SIZE, + NativeIconAPI, +} from '../lib/create-icon-set'; + +import ensureNativeModuleAvailable from './ensure-native-module-available'; + +export const FA5Style = { + regular: 0, + light: 1, + solid: 2, + brand: 3, +}; + +let shouldSetupFA5 = true; + +export function createFA5iconSet(glyphMap, proVersion = false) { + if (Platform.OS === 'ios' && shouldSetupFA5) { + shouldSetupFA5 = false; + ensureNativeModuleAvailable(); + NativeIconAPI.setupFontAwesome5(); + } + + const familyName = `Font Awesome 5 ${proVersion ? 'Pro' : 'Free'}`; + + function createFA5iconSubset(type, weight = '400', family = familyName) { + const fontFileID = proVersion ? `Pro_${type}` : type; + + return createIconSet(glyphMap, family, `FontAwesome5_${fontFileID}.ttf`, { + fontWeight: Platform.OS === 'ios' ? weight : undefined, + }); + } + + const RegularSet = createFA5iconSubset('Regular'); + const SolidSet = createFA5iconSubset('Solid', '700'); + const LightSet = proVersion + ? createFA5iconSubset('Light', '100') + : RegularSet; + const BrandsSet = createFA5iconSubset( + 'Brands', + '400', + 'Font Awesome 5 Brands' + ); + + function getIconSetForProps(props) { + const { brand, light, solid } = props; + + if (brand) return BrandsSet; + if (light) return LightSet; + if (solid) return SolidSet; + + return RegularSet; + } + + function createFA5iconClass(baseClass, selectClass = iconSet => iconSet) { + class FA5iconClass extends PureComponent { + static propTypes = Object.create(baseClass.propTypes, { + brand: PropTypes.bool, + light: PropTypes.bool, + solid: PropTypes.bool, + }); + + static defaultProps = { + brand: false, + light: false, + solid: false, + }; + + render() { + const selectedIconSet = getIconSetForProps(this.props); + const SelectedIconClass = selectClass(selectedIconSet); + + return ; + } + } + + return FA5iconClass; + } + + const Base = RegularSet; + const FA5icon = createFA5iconClass(Base); + + FA5icon.Button = createFA5iconClass(Base.Button, iconSet => iconSet.Button); + FA5icon.TabBarItem = createFA5iconClass( + Base.TabBarItem, + iconSet => iconSet.TabBarItem + ); + FA5icon.TabBarItemIOS = createFA5iconClass( + Base.TabBarItemIOS, + iconSet => iconSet.TabBarItemIOS + ); + FA5icon.ToolbarAndroid = createFA5iconClass( + Base.ToolbarAndroid, + iconSet => iconSet.ToolbarAndroid + ); + + const imageSourceCache = {}; + + function getImageSource( + name, + size = DEFAULT_ICON_SIZE, + color = DEFAULT_ICON_COLOR, + type = FA5Style.regular + ) { + if (Platform.OS === 'ios' && type !== FA5Style.brand) { + let glyph = glyphMap[name] || '?'; + if (typeof glyph === 'number') { + glyph = String.fromCharCode(glyph); + } + + const processedColor = processColor(color); + const cacheKey = `${glyph}:${size}:${processedColor}:${type}`; + const scale = PixelRatio.get(); + + return new Promise((resolve, reject) => { + const cached = imageSourceCache[cacheKey]; + if (typeof cached !== 'undefined') { + if (!cached || cached instanceof Error) { + reject(cached); + } else { + resolve({ uri: cached, scale }); + } + } else { + NativeIconAPI.getImageForFontAwesome5( + familyName, + glyph, + size, + type, + processedColor, + (err, image) => { + const error = typeof err === 'string' ? new Error(err) : err; + imageSourceCache[cacheKey] = image || error || false; + if (!error && image) { + resolve({ uri: image, scale }); + } else { + reject(error); + } + } + ); + } + }); + } + + switch (type) { + case FA5Style.brand: + return BrandsSet.getImageSource(name, size, color); + case FA5Style.light: + return LightSet.getImageSource(name, size, color); + case FA5Style.solid: + return SolidSet.getImageSource(name, size, color); + default: + return RegularSet.getImageSource(name, size, color); + } + } + + FA5icon.getImageSource = getImageSource; + + return FA5icon; +} diff --git a/lib/create-icon-set.js b/lib/create-icon-set.js index 019313b9b..ec362a17d 100644 --- a/lib/create-icon-set.js +++ b/lib/create-icon-set.js @@ -8,17 +8,23 @@ import { Text, } from './react-native'; +import ensureNativeModuleAvailable from './ensure-native-module-available'; import createIconButtonComponent from './icon-button'; import createTabBarItemIOSComponent from './tab-bar-item-ios'; import createToolbarAndroidComponent from './toolbar-android'; -const NativeIconAPI = +export const NativeIconAPI = NativeModules.RNVectorIconsManager || NativeModules.RNVectorIconsModule; -const DEFAULT_ICON_SIZE = 12; -const DEFAULT_ICON_COLOR = 'black'; +export const DEFAULT_ICON_SIZE = 12; +export const DEFAULT_ICON_COLOR = 'black'; -export default function createIconSet(glyphMap, fontFamily, fontFile) { +export default function createIconSet( + glyphMap, + fontFamily, + fontFile, + fontStyle +) { let fontReference = fontFamily; // Android doesn't care about actual fontFamily name, it will only look in fonts folder. if (Platform.OS === 'android' && fontFile) { @@ -75,7 +81,7 @@ export default function createIconSet(glyphMap, fontFamily, fontFile) { fontStyle: 'normal', }; - props.style = [styleDefaults, style, styleOverrides]; + props.style = [styleDefaults, style, styleOverrides, fontStyle || {}]; props.ref = this.handleRef; return ( @@ -89,19 +95,6 @@ export default function createIconSet(glyphMap, fontFamily, fontFile) { const imageSourceCache = {}; - function ensureNativeModuleAvailable() { - if (!NativeIconAPI) { - if (Platform.OS === 'android') { - throw new Error( - 'RNVectorIconsModule not available, did you properly integrate the module? Try running `react-native link react-native-vector-icons` and recompiling.' - ); - } - throw new Error( - 'RNVectorIconsManager not available, did you add the library to your project and link with libRNVectorIcons.a? Try running `react-native link react-native-vector-icons` and recompiling.' - ); - } - } - function getImageSource( name, size = DEFAULT_ICON_SIZE, diff --git a/lib/ensure-native-module-available.js b/lib/ensure-native-module-available.js new file mode 100644 index 000000000..7a8433907 --- /dev/null +++ b/lib/ensure-native-module-available.js @@ -0,0 +1,16 @@ +import { Platform } from './react-native'; + +import { NativeIconAPI } from './create-icon-set'; + +export default function ensureNativeModuleAvailable() { + if (!NativeIconAPI) { + if (Platform.OS === 'android') { + throw new Error( + 'RNVectorIconsModule not available, did you properly integrate the module? Try running `react-native link react-native-vector-icons` and recompiling.' + ); + } + throw new Error( + 'RNVectorIconsManager not available, did you add the library to your project and link with libRNVectorIcons.a? Try running `react-native link react-native-vector-icons` and recompiling.' + ); + } +} diff --git a/package.json b/package.json index 5f275588d..a17693029 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "Customizable Icons for React Native with support for NavBar/TabBar/ToolbarAndroid, image source and full styling.", "main": "dist/index.js", "bin": { + "fa5-upgrade": "./bin/fa5-upgrade.sh", "generate-icon": "./bin/generate-icon.js" }, "scripts": { @@ -15,6 +16,7 @@ "build-entypo": "./scripts/entypo.sh", "build-evilicons": "./scripts/evilicons.sh", "build-fontawesome": "./scripts/fontawesome.sh", + "build-fontawesome5": "./scripts/fontawesome5.sh", "build-feather": "./scripts/feather.sh", "build-foundation": "./scripts/foundation.sh", "build-ionicons": "./scripts/ionicons.sh", diff --git a/scripts/build-icons.sh b/scripts/build-icons.sh index 050c98280..a429a9f91 100755 --- a/scripts/build-icons.sh +++ b/scripts/build-icons.sh @@ -5,6 +5,7 @@ mkdir Fonts glyphmaps ./scripts/entypo.sh ./scripts/evilicons.sh ./scripts/fontawesome.sh +./scripts/fontawesome5.sh ./scripts/foundation.sh ./scripts/ionicons.sh ./scripts/materialicons.sh diff --git a/scripts/fontawesome5.sh b/scripts/fontawesome5.sh new file mode 100755 index 000000000..046d15d09 --- /dev/null +++ b/scripts/fontawesome5.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +echo "Please enter your FontAwesome5 npm token:" + +read fa5_token + +echo "Setting up npm config" + +npm config set "@fortawesome:registry" https://npm.fontawesome.com/ +npm config set "//npm.fontawesome.com/:_authToken" ${fa5_token} + +echo "Creating temporary folder" + +TEMP_DIR=`mktemp -d -t rnvi` +echo "Created folder $TEMP_DIR" +pushd ${TEMP_DIR} + +echo "Downloading FontAwesome5" + +ARCHIVE=$(npm pack @fortawesome/fontawesome-free --silent) +tar -xzf ${ARCHIVE} +mv package free + +ARCHIVE=$(npm pack @fortawesome/fontawesome-pro --silent) +tar -xzf ${ARCHIVE} +mv package pro + +popd + +echo "Creating glyphmaps" + +node ./bin/generate-icon \ + ${TEMP_DIR}/free/css/all.css -g glyphmaps/FontAwesome5Free.json \ + --componentName FontAwesome5 --fontFamily fontawesome5 -p .fa- +node ./bin/generate-icon \ + ${TEMP_DIR}/pro/css/all.css -g glyphmaps/FontAwesome5Pro.json \ + --componentName FontAwesome5 --fontFamily fontawesome5 -p .fa- + +echo "Copying font files" + +cp ${TEMP_DIR}/free/webfonts/fa-brands-400.ttf Fonts/FontAwesome5_Brands.ttf +cp ${TEMP_DIR}/free/webfonts/fa-regular-400.ttf Fonts/FontAwesome5_Regular.ttf +cp ${TEMP_DIR}/free/webfonts/fa-solid-900.ttf Fonts/FontAwesome5_Solid.ttf + +echo "Removing temporary files" + +rm -r ${TEMP_DIR} + +echo "Done"