Showing preview only (6,815K chars total). Download the full file or copy to clipboard to get everything.
Repository: oblador/react-native-vector-icons
Branch: master
Commit: e0bbfad52ea7
Files: 821
Total size: 6.3 MB
Directory structure:
gitextract_vddmqzha/
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── funding.yml
│ └── workflows/
│ ├── codemod-tests.yaml
│ ├── deploy.yaml
│ ├── issue-handling.yml
│ ├── lint.yaml
│ └── tests.yaml
├── .gitignore
├── .knip.jsonc
├── .nxignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MIGRATION.md
├── README.md
├── TODO.md
├── biome.jsonc
├── docs/
│ ├── CREATE_FONT_PACKAGE.md
│ ├── SETUP-EXPO.md
│ ├── SETUP-REACT-NATIVE.md
│ └── SETUP-WEB.md
├── lefthook.yml
├── nx.json
├── package.json
├── packages/
│ ├── ant-design/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsAntDesignPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── AntDesign.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-ant-design.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── codemod/
│ │ ├── CHANGELOG.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── 11.0/
│ │ │ │ ├── icon-style-transform.ts
│ │ │ │ ├── import-transform.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── info-plist.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ ├── remove-fonts.ts
│ │ │ │ └── transform.ts
│ │ │ ├── 12.0/
│ │ │ │ ├── index.ts
│ │ │ │ ├── move-fonts.ts
│ │ │ │ ├── package-json.ts
│ │ │ │ └── transform.ts
│ │ │ ├── __tests__/
│ │ │ │ ├── 11.0-transform.test.ts
│ │ │ │ └── expo-import-transform.test.ts
│ │ │ ├── checkGitStatus.ts
│ │ │ ├── expo/
│ │ │ │ ├── import-transform.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── newFontImports.ts
│ │ │ │ └── package-json.ts
│ │ │ ├── getVersion.ts
│ │ │ ├── index.ts
│ │ │ └── readPackageDeps.ts
│ │ └── tsconfig.json
│ ├── common/
│ │ ├── .watchmanconfig
│ │ ├── CHANGELOG.md
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── create-icon-set.tsx
│ │ │ ├── create-icon-source-cache.ts
│ │ │ ├── defaults.ts
│ │ │ ├── dynamicLoading/
│ │ │ │ ├── dynamic-font-loading.ts
│ │ │ │ ├── dynamic-loading-setting.ts
│ │ │ │ └── types.ts
│ │ │ ├── get-image-library.ts
│ │ │ ├── get-image-source.ts
│ │ │ ├── index.ts
│ │ │ └── scripts/
│ │ │ ├── common.ts
│ │ │ └── updatePlist.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── directory/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── generate-font-styles.mts
│ │ │ └── generate-glyphmap-index.mts
│ │ ├── package.json
│ │ ├── public/
│ │ │ ├── index.html
│ │ │ ├── manifest.json
│ │ │ └── robots.txt
│ │ ├── src/
│ │ │ ├── App.css
│ │ │ ├── App.test.tsx
│ │ │ ├── App.tsx
│ │ │ ├── index.css
│ │ │ ├── index.tsx
│ │ │ ├── react-app-env.d.ts
│ │ │ ├── reportWebVitals.ts
│ │ │ └── setupTests.js
│ │ └── tsconfig.json
│ ├── entypo/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsEntypoPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Entypo.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-entypo.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── evil-icons/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsEvilIconsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── EvilIcons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-evil-icons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── feather/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFeatherPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Feather.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-feather.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomePackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesome.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-common/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── bin/
│ │ │ ├── fa-upgrade
│ │ │ ├── fa-upgrade5
│ │ │ └── fa-upgrade6
│ │ ├── generators/
│ │ │ └── app/
│ │ │ └── templates/
│ │ │ └── src/
│ │ │ └── index.tsx
│ │ ├── package.json
│ │ └── scripts/
│ │ ├── fetch-pro.sh
│ │ ├── generate-fontawesome-glyphmap.mts
│ │ └── generate-fontawesome-metadata.js
│ ├── fontawesome-free-brands/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeFreeBrandsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeFreeBrands.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-free-brands.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-free-regular/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeFreeRegularPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeFreeRegular.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-free-regular.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-free-solid/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeFreeSolidPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeFreeSolid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-free-solid.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-brands/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProBrandsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProBrands.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-brands.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-duotone-light/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProDuotoneLightPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProDuotoneLight.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-duotone-light.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-duotone-regular/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProDuotoneRegularPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProDuotoneRegular.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-duotone-regular.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-duotone-solid/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProDuotoneSolidPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProDuotoneSolid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-duotone-solid.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-duotone-thin/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProDuotoneThinPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProDuotoneThin.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-duotone-thin.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-light/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProLightPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProLight.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-light.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-regular/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProRegularPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProRegular.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-regular.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-duotone-light/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpDuotoneLightPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpDuotoneLight.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-light.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-duotone-regular/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpDuotoneRegularPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpDuotoneRegular.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-regular.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-duotone-solid/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpDuotoneSolidPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpDuotoneSolid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-solid.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-duotone-thin/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpDuotoneThinPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpDuotoneThin.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-thin.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-light/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpLightPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpLight.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-light.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-regular/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpRegularPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpRegular.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-regular.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-solid/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpSolidPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpSolid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-solid.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-sharp-thin/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSharpThinPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSharpThin.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-sharp-thin.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-solid/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProSolidPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProSolid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-solid.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome-pro-thin/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesomeProThinPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── FontAwesomeProThin.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome-pro-thin.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome5/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesome5Package.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ ├── FontAwesome5.json
│ │ │ ├── FontAwesome5_brand.json
│ │ │ ├── FontAwesome5_meta.json
│ │ │ ├── FontAwesome5_regular.json
│ │ │ └── FontAwesome5_solid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome5.podspec
│ │ ├── src/
│ │ │ ├── index.tsx
│ │ │ └── static.tsx
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome5-pro/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesome5ProPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ ├── FontAwesome5Pro.json
│ │ │ ├── FontAwesome5Pro_brand.json
│ │ │ ├── FontAwesome5Pro_duotone.json
│ │ │ ├── FontAwesome5Pro_light.json
│ │ │ ├── FontAwesome5Pro_meta.json
│ │ │ ├── FontAwesome5Pro_regular.json
│ │ │ └── FontAwesome5Pro_solid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome5-pro.podspec
│ │ ├── src/
│ │ │ ├── index.tsx
│ │ │ └── static.tsx
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome6/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesome6Package.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ ├── FontAwesome6.json
│ │ │ ├── FontAwesome6_brand.json
│ │ │ ├── FontAwesome6_meta.json
│ │ │ ├── FontAwesome6_regular.json
│ │ │ └── FontAwesome6_solid.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome6.podspec
│ │ ├── src/
│ │ │ ├── index.tsx
│ │ │ └── static.tsx
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontawesome6-pro/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontAwesome6ProPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ ├── FontAwesome6Pro.json
│ │ │ ├── FontAwesome6Pro_brand.json
│ │ │ ├── FontAwesome6Pro_duotone-light.json
│ │ │ ├── FontAwesome6Pro_duotone-regular.json
│ │ │ ├── FontAwesome6Pro_duotone-thin.json
│ │ │ ├── FontAwesome6Pro_duotone.json
│ │ │ ├── FontAwesome6Pro_light.json
│ │ │ ├── FontAwesome6Pro_meta.json
│ │ │ ├── FontAwesome6Pro_regular.json
│ │ │ ├── FontAwesome6Pro_sharp-duotone-light.json
│ │ │ ├── FontAwesome6Pro_sharp-duotone-regular.json
│ │ │ ├── FontAwesome6Pro_sharp-duotone-solid.json
│ │ │ ├── FontAwesome6Pro_sharp-duotone-thin.json
│ │ │ ├── FontAwesome6Pro_sharp.json
│ │ │ ├── FontAwesome6Pro_sharpLight.json
│ │ │ ├── FontAwesome6Pro_sharpSolid.json
│ │ │ ├── FontAwesome6Pro_sharpThin.json
│ │ │ ├── FontAwesome6Pro_solid.json
│ │ │ └── FontAwesome6Pro_thin.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontawesome6-pro.podspec
│ │ ├── src/
│ │ │ ├── index.tsx
│ │ │ └── static.tsx
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontcustom-docker/
│ │ ├── CHANGELOG.md
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ └── package.json
│ ├── fontello/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontelloPackage.kt
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontello.podspec
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── fontisto/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFontistoPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Fontisto.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-fontisto.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── foundation/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsFoundationPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Foundation.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-foundation.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── generator-react-native-vector-icons/
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── app/
│ │ │ ├── fontforge/
│ │ │ │ └── correct-direction.py
│ │ │ ├── generateGlyphmap.ts
│ │ │ ├── index.ts
│ │ │ └── templates/
│ │ │ ├── README.md
│ │ │ ├── android/
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── AndroidManifestNew.xml
│ │ │ │ └── java/
│ │ │ │ └── Package.kt
│ │ │ ├── babel.config.js
│ │ │ ├── font.podspec
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── static.ts
│ │ │ ├── tsconfig.build.json
│ │ │ └── tsconfig.json
│ │ └── tsconfig.json
│ ├── get-image/
│ │ ├── .watchmanconfig
│ │ ├── CHANGELOG.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ ├── gradle.properties
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── AndroidManifestNew.xml
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── reactnativevectoricons/
│ │ │ │ └── get_image/
│ │ │ │ ├── VectorIconsModule.kt
│ │ │ │ └── VectorIconsPackage.kt
│ │ │ ├── newarch/
│ │ │ │ └── VectorIconsSpec.kt
│ │ │ └── oldarch/
│ │ │ └── VectorIconsSpec.kt
│ │ ├── babel.config.js
│ │ ├── ios/
│ │ │ ├── VectorIcons.h
│ │ │ └── VectorIcons.mm
│ │ ├── package.json
│ │ ├── react-native-vector-icons.podspec
│ │ ├── react-native.config.js
│ │ ├── src/
│ │ │ ├── NativeVectorIcons.ts
│ │ │ ├── NativeVectorIcons.web.ts
│ │ │ ├── ensure-native-module-available.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.build.json
│ │ └── turbo.json
│ ├── icomoon/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsIcomoonPackage.kt
│ │ ├── babel.config.js
│ │ ├── package.json
│ │ ├── react-native-vector-icons-icomoon.podspec
│ │ ├── src/
│ │ │ └── index.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── icon-explorer/
│ │ ├── .gitignore
│ │ ├── .owl/
│ │ │ └── .gitignore
│ │ ├── .watchmanconfig
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ └── App.owl.tsx
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ ├── gradle/
│ │ │ │ └── wrapper/
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradle.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ └── settings.gradle
│ │ ├── app.json
│ │ ├── babel.config.js
│ │ ├── configPlugin.js
│ │ ├── index.js
│ │ ├── index.test.js
│ │ ├── ios/
│ │ │ └── Podfile
│ │ ├── jest.config.js
│ │ ├── macos/
│ │ │ └── Podfile
│ │ ├── metro.config.js
│ │ ├── owl.config.json
│ │ ├── package.json
│ │ ├── react-native.config.js
│ │ ├── set-rn-version.sh
│ │ ├── src/
│ │ │ ├── App.tsx
│ │ │ ├── Home.tsx
│ │ │ ├── IconList.tsx
│ │ │ ├── TestMode.tsx
│ │ │ ├── Types.tsx
│ │ │ ├── animatable.tsx
│ │ │ ├── configs/
│ │ │ │ ├── fontello.config.json
│ │ │ │ └── icomoon.config.json
│ │ │ └── icon-sets.tsx
│ │ ├── tsconfig.json
│ │ └── visionos/
│ │ └── Podfile
│ ├── ionicons/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsIoniconsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Ionicons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-ionicons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── lucide/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsLucidePackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Lucide.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-lucide.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── material-design-icons/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsMaterialDesignIconsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── MaterialDesignIcons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-material-design-icons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── material-icons/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsMaterialIconsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── MaterialIcons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-material-icons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── octicons/
│ │ ├── .fontcustom-manifest.json
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsOcticonsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── Octicons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-octicons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ ├── simple-line-icons/
│ │ ├── .yo-rc.json
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── android/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── AndroidManifestNew.xml
│ │ │ └── java/
│ │ │ └── VectorIconsSimpleLineIconsPackage.kt
│ │ ├── babel.config.js
│ │ ├── glyphmaps/
│ │ │ └── SimpleLineIcons.json
│ │ ├── package.json
│ │ ├── react-native-vector-icons-simple-line-icons.podspec
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── static.ts
│ │ ├── tsconfig.build.json
│ │ └── tsconfig.json
│ └── zocial/
│ ├── .yo-rc.json
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── android/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── AndroidManifestNew.xml
│ │ └── java/
│ │ └── VectorIconsZocialPackage.kt
│ ├── babel.config.js
│ ├── glyphmaps/
│ │ └── Zocial.json
│ ├── package.json
│ ├── react-native-vector-icons-zocial.podspec
│ ├── src/
│ │ ├── index.ts
│ │ └── static.ts
│ ├── tsconfig.build.json
│ └── tsconfig.json
├── pnpm-workspace.yaml
├── scripts/
│ ├── check-npm-publish-status.sh
│ ├── fix-glyphmaps.mjs
│ ├── generate-fonts.sh
│ └── setup-npm-trust.sh
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
================================================
FILE: .eslintignore
================================================
##############
# yeoman
##############
# Ignore the templates with <%= %> tags, we'll pickup the errors in the generated code
packages/generator-react-native-vector-icons/src/app/templates/src/index.ts
# Ignore yeomenan generated template
packages/generator-react-native-vector-icons/generators
packages/generator-react-native-vector-icons/src/app/templates
packages/fontawesome-common/generators
##############
# packages
##############
# Ignore built code
packages/*/lib
packages/directory/build
# Files we don't manage (react-native-test-app)
packages/icon-explorer/metro.config.js
packages/icon-explorer/react-native.config.js
================================================
FILE: .eslintrc.js
================================================
module.exports = {
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react/recommended'],
env: {
browser: true,
es2021: true,
jest: true,
},
overrides: [
{
files: ['*.ts', '*.js', '*.tsx', '*.jsx'],
extends: ['biome'],
},
{
files: ['.eslintrc.{js,cjs}', '*.config.js', 'react-native.config.js', 'configPlugin.js'],
env: {
node: true,
},
parserOptions: {
sourceType: 'script',
},
},
{
files: '*.test.js',
env: {
jest: true,
},
globals: {
device: false,
expect: false,
waitFor: false,
element: false,
by: false,
},
},
],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
},
plugins: ['@typescript-eslint', 'react', 'import', 'jsx-a11y'],
settings: {
react: {
version: 'detect',
},
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
'import/extensions': ['error', { js: 'never', jsx: 'never', ts: 'never', tsx: 'never', json: 'always' }],
'react/require-default-props': 'off',
'react/prop-types': 'off',
'react/jsx-props-no-spreading': 'off',
'react/jsx-filename-extension': ['error', { extensions: ['.jsx', '.tsx'] }],
'react/function-component-definition': ['error', { namedComponents: 'arrow-function' }],
'import/prefer-default-export': 'off',
// Prefer the typescript unsed vars rule
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': ['error'],
'no-shadow': 'off',
'@typescript-eslint/no-shadow': ['error'],
'react/react-in-jsx-scope': 'off',
},
};
================================================
FILE: .gitattributes
================================================
*.pbxproj -text
# specific for windows script files
*.bat text eol=crlf
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
---
name: "\U0001F41B Bug report"
description: Report a bug
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
Before filing a bug report:
- Review the documentation: https://github.com/react-native-vector-icons/react-native-vector-icons
- Search for existing issues (including closed issues): https://github.com/oblador/react-native-vector-icons/issues?q=is%3Aissue+
- type: dropdown
id: generation
attributes:
label: Which package are you using?
options:
- "@react-native-vector-icons/*"
- react-native-vector-icons
validations:
required: true
- type: dropdown
attributes:
label: What platform(s) does this occur on?
multiple: true
options:
- Android
- iOS
- web
validations:
required: true
- type: input
attributes:
label: Minimal reproducible example
description: |
A link to a GitHub repository containing a minimal reproducible example. This repository should include as little code as possible and not include extraneous dependencies.
Either provide a link to the repo that reproduces the bug or provide your version of the `App.tsx` file that reproduces the issue and that we can copy-paste and see the issue.
If a reproducible example is not provided, your issue is likely to be closed.
[Learn more about creating a minimal reproducible example](https://stackoverflow.com/help/mcve).
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: What happened?
description: |
Explain the issue and the steps we need to take to reproduce the issue. Include a video or screenshots if you think it may help.
Clearly describe what the expected behavior is and what instead is actually happening.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
- type: textarea
attributes:
render: text
label: Your computer environment
description: Run the `npx react-native info` command and paste its output in the field below.
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Community Support
url: https://github.com/oblador/react-native-vector-icons/discussions
about: Please ask and answer questions here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
---
name: Feature request
description: Suggest an idea for this project
labels: ["feature request", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to suggest a new feature!
Before requesting:
- Search for existing issues (including closed issues): https://github.com/oblador/react-native-vector-icons/issues?q=is%3Aissue+
- type: textarea
id: problem
attributes:
label: Is your feature request related to a problem?
description: |
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
- type: textarea
id: solution
attributes:
label: Describe the solution you'd like
description: |
A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Describe alternatives you've considered
description: |
A clear and concise description of any alternative solutions or features you've considered.
- type: textarea
id: context
attributes:
label: Additional context
description: |
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/funding.yml
================================================
github: [oblador]
================================================
FILE: .github/workflows/codemod-tests.yaml
================================================
---
name: Codemod Tests
on:
push:
branches:
- master
paths:
- ".github/workflows/codemod-tests.yaml"
- "packages/codemod/**"
pull_request:
paths:
- ".github/workflows/codemod-tests.yaml"
- "packages/codemod/**"
jobs:
test:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v5
with:
run_install: false
- uses: actions/setup-node@v6
with:
node-version: lts/*
cache: pnpm
- run: pnpm install --ignore-scripts --filter @react-native-vector-icons/codemod
- run: pnpm run --filter @react-native-vector-icons/codemod test
================================================
FILE: .github/workflows/deploy.yaml
================================================
name: Publish to NPM and Website
on:
workflow_dispatch:
inputs:
dry_run:
description: Perform a dry run
type: boolean
action:
type: choice
description: What to publish
options:
- npm
- website
- npm-republish-failed
packages:
type: string
description: 'Space-separated list of package dirs to republish (e.g. "codemod ionicons"). Only used with npm-republish-failed.'
pre_release:
type: boolean
description: Create a pre-release
permissions:
id-token: write # For NPM trusted publishing
contents: write # For git commits of Changelog
jobs:
npm:
name: NPM
runs-on: ubuntu-latest
if: github.event.inputs.action == 'npm'
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Needed for changelogs and tag comparison
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- name: Set up PNPM
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Install dependencies
run: pnpm install
- name: Set commit author
run: |
git config --local user.name 'github-actions[bot]'
git config --local user.email 'github-actions[bot]@users.noreply.github.com'
# Ensure npm 11.5.1 or later is installed
- name: Update npm
run: |
echo 'BEFORE'
npm -v
npm install -g npm@latest
echo 'AFTER'
npm -v
- name: Publish to NPM
if: github.event.inputs.pre_release != 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
pnpm run release --dry-run
else
pnpm run release --yes
fi
- name: Publish pre-release to NPM
if: github.event.inputs.pre_release == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
pnpm run prerelease --dry-run
else
pnpm run prerelease
fi
republish:
name: Republish failed packages
runs-on: ubuntu-latest
if: github.event.inputs.action == 'npm-republish-failed'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up PNPM
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Install dependencies
run: pnpm install
- name: Update npm
run: |
echo 'BEFORE'
npm -v
npm install -g npm@latest
echo 'AFTER'
npm -v
- name: Publish packages
env:
INPUT_PACKAGES: ${{ github.event.inputs.packages }}
DRY_RUN: ${{ github.event.inputs.dry_run }}
run: |
if [ -z "$INPUT_PACKAGES" ]; then
echo "Error: 'packages' input is required for npm-republish-failed"
exit 1
fi
FAILED=0
for pkg in $INPUT_PACKAGES; do
echo "========================================="
echo "Publishing packages/$pkg"
echo "========================================="
if [ "$DRY_RUN" == "true" ]; then
pnpm publish "packages/$pkg" --no-git-checks --dry-run || FAILED=1
else
pnpm publish "packages/$pkg" --no-git-checks || FAILED=1
fi
echo ""
done
exit $FAILED
website:
name: Directory website
runs-on: ubuntu-latest
if: github.event.inputs.action == 'website'
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- name: Set up PNPM
uses: pnpm/action-setup@v4
with:
run_install: false
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Install dependencies
run: pnpm install
working-directory: packages/directory
- name: Build directory
working-directory: packages/directory
run: |
pnpm prepare
pnpm run build
- name: Publish static assets to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: gh-pages
folder: packages/directory/build
================================================
FILE: .github/workflows/issue-handling.yml
================================================
name: 'Support requests'
on:
issues:
types: [labeled, unlabeled, reopened]
jobs:
support:
runs-on: ubuntu-latest
steps:
- uses: dessant/support-requests@v4
with:
github-token: ${{ github.token }}
support-label: 'missing-repro'
issue-comment: >
:wave: @{issue-author}, sorry you're having an issue. As the issue template explains, it's required that you provide a runnable example that reproduces your issue (see the [issue template](https://github.com/oblador/react-native-vector-icons/blob/master/.github/ISSUE_TEMPLATE/bug_report.yml)).
The reason is that a bug report is not actionable without a reproducer. Try to minimize the superfluous code and focus only on reproducing the bug.
Please create a new issue with this and one of the maintainers will do their best to review it!
close-issue: true
lock-issue: true
================================================
FILE: .github/workflows/lint.yaml
================================================
name: Lint
on:
push:
branches:
- master
pull_request:
jobs:
eslint:
name: eslint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Build
run: pnpm install
- name: Lint files
run: pnpm run lint:eslint
biome:
name: biome
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Build
run: pnpm install
- name: Lint files
run: pnpm run lint:biome
types:
name: types
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Build
run: pnpm install
- name: Typecheck files
run: pnpm run lint:types
knip:
name: knip
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Build
run: pnpm install
- name: Check for unused things
run: pnpm run lint:knip
================================================
FILE: .github/workflows/tests.yaml
================================================
---
name: Tests
on:
push:
branches:
- master
paths:
- ".github/workflows/tests.yaml"
- "packages/**"
- "!packages/directory/**"
- "!packages/codemod/**"
- "scripts/**"
pull_request:
paths:
- ".github/workflows/tests.yaml"
- "packages/**"
- "!packages/directory/**"
- "!packages/codemod/**"
- "scripts/**"
workflow_dispatch:
inputs:
all_versions:
description: Run tests against all versions
type: boolean
permissions:
# AWS
id-token: write
# test-reporter
contents: read
actions: read
checks: write
jobs:
android:
name: Android
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
api-level: [35]
rn-version: ${{ github.event.inputs.all_versions && fromJSON('["0.80", "0.79", "0.78", "0.77", "0.76", "0.75", "0.74", "0.73"]') || fromJSON('["0.80", "0.79", "0.77"]') }}
arch: ["new", "old"]
steps:
- uses: actions/checkout@v4
- uses: aws-actions/configure-aws-credentials@v4
if: always() # it fails for non maintainer PRs
with:
aws-region: us-east-2
role-to-assume: arn:aws:iam::119243932312:role/RNVI-S3-Buckert
role-skip-session-tagging: true
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Gradle cache
uses: gradle/actions/setup-gradle@v4
with:
add-job-summary: on-failure
# TODO: Remove this after we merge
cache-read-only: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/per-package-copy' }}
- name: AVD Deps
run: |
sudo apt update
sudo apt-get install -y libpulse0 libgl1
- name: AVD cache
uses: actions/cache@v4
id: avd-cache
with:
path: |
~/.android/avd/*
~/.android/adb*
key: avd-${{ matrix.api-level }}
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | \
sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@v2
with:
arch: x86_64
api-level: ${{ matrix.api-level }}
force-avd-creation: false
emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: false
script: echo "Created cachable AVD"
- name: Build
run: |
pnpm install
- name: Set up RN version
run: |
cd packages/icon-explorer
./set-rn-version.sh ${{ matrix.arch }} ${{ matrix.rn-version }}
- name: Build App
run: |
cd packages/icon-explorer
mv .owl/baseline-${{ matrix.arch }} .owl/baseline
# something strange where the owl build isn't generating the jni files
if [ "${{ matrix.rn-version }}" == "0.80" -a "${{ matrix.arch }}" == "new" ]; then
pnpm run android || true
fi
pnpm run test:android:build
- name: Run test
timeout-minutes: 3
id: tests
uses: reactivecircus/android-emulator-runner@v2
with:
arch: x86_64
api-level: ${{ matrix.api-level }}
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: adb shell settings put secure immersive_mode_confirmations confirmed && cd packages/icon-explorer && pnpm run test:android:run
- name: S3 Report
if: always()
run: |
cd packages/icon-explorer
sed -i.bak -e "s/Report/Report (RN: ${{ matrix.arch }} Arch: ${{ matrix.rn-version }}) $(date)/" .owl/report/index.html || true
ID="${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }}-${{ matrix.arch }}-${{ matrix.rn-version }}"
aws --region us-east-2 s3 sync .owl "s3://react-native-vector-icons/$ID" || true
if [ "${{ steps.tests.outcome }}" == "failure" ]; then
echo -n "* ❌ " >> $GITHUB_STEP_SUMMARY
elif [ "${{ steps.tests.outcome }}" == "success" ]; then
echo -n "* ✅ " >> $GITHUB_STEP_SUMMARY
else
exit 0
fi
echo "[Report ${{ matrix.arch }} ${{ matrix.rn-version }}](http://react-native-vector-icons.s3-website.us-east-2.amazonaws.com/$ID/report/index.html)" >> $GITHUB_STEP_SUMMARY
- uses: dorny/test-reporter@v2
if: always()
with:
name: JEST Tests android - ${{ matrix.arch }} ${{ matrix.rn-version }}
path: packages/icon-explorer/.owl/report/*.xml
reporter: jest-junit
ios:
name: iOS
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
rn-version: ${{ github.event.inputs.all_versions && fromJSON('["0.80", "0.79", "0.78", "0.77", "0.76", "0.75", "0.74", "0.73"]') || fromJSON('["0.80", "0.79", "0.77"]') }}
arch: ["new", "old"]
steps:
- uses: actions/checkout@v4
- uses: aws-actions/configure-aws-credentials@v4
if: always() # it fails for non maintainer PRs
with:
aws-region: us-east-2
role-to-assume: arn:aws:iam::119243932312:role/RNVI-S3-Buckert
role-skip-session-tagging: true
- uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
# Remove once setup-node supports corepack https://github.com/actions/setup-node/pull/901 lands
- uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- name: Build
run: |
pnpm install
- name: Set up RN version
run: |
cd packages/icon-explorer
./set-rn-version.sh ${{ matrix.arch }} ${{ matrix.rn-version }}
- name: Build App
run: |
cd packages/icon-explorer
# Try and work around strange build bug
mkdir -p /Users/runner/work/react-native-vector-icons/react-native-vector-icons/packages/icon-explorer/ios/build/Build/Products/Debug-iphonesimulator/ReactTestApp.app
mkdir -p /Users/runner/work/react-native-vector-icons/react-native-vector-icons/packages/icon-explorer/ios/build/Build/Products/Release-iphonesimulator/ReactTestApp.app
mv .owl/baseline-${{ matrix.arch }} .owl/baseline
pnpm run test:ios:build
- name: Run simulator
id: simulator
uses: futureware-tech/simulator-action@v3
with:
os: "iOS"
model: "iPhone 16"
- name: Run tests
timeout-minutes: 5
id: tests
run: |
cd packages/icon-explorer
tmp=$(mktemp)
jq '.ios.device = "${{ steps.simulator.outputs.udid }}"' owl.config.json > "$tmp" && mv "$tmp" owl.config.json
pnpm run test:ios:run
- name: S3 Report
if: always()
run: |
cd packages/icon-explorer
sed -i.bak -e "s/Report/Report (RN: ${{ matrix.arch }} Arch: ${{ matrix.rn-version }}) $(date)/" .owl/report/index.html || true
ID="${{ github.run_id }}-${{ github.run_attempt }}-${{ github.job }}-${{ matrix.arch }}-${{ matrix.rn-version }}"
aws --region us-east-2 s3 sync .owl "s3://react-native-vector-icons/$ID" || true
if [ "${{ steps.tests.outcome }}" == "failure" ]; then
echo -n "* ❌ " >> $GITHUB_STEP_SUMMARY
elif [ "${{ steps.tests.outcome }}" == "success" ]; then
echo -n "* ✅ " >> $GITHUB_STEP_SUMMARY
else
exit 0
fi
echo "[Report ${{ matrix.arch }} ${{ matrix.rn-version }}](http://react-native-vector-icons.s3-website.us-east-2.amazonaws.com/$ID/report/index.html)" >> $GITHUB_STEP_SUMMARY
- uses: dorny/test-reporter@v2
if: always()
with:
name: JEST Tests ios - ${{ matrix.arch }} ${{ matrix.rn-version }}
path: packages/icon-explorer/.owl/report/*.xml
reporter: jest-junit
================================================
FILE: .gitignore
================================================
# OSX
.DS_Store
# Xcode
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
# Android/IJ
.classpath
.cxx
.gradle
.idea
.project
.settings
local.properties
android.iml
# node.js
node_modules/
# BUCK
buck-out/
\.buckd/
android/app/libs
android/keystores/debug.keystore
# generated by bob
lib/
# Turborepo
.turbo/
# React Native Codegen
ios/generated
android/generated
# Nx
.nx/cache
.nx/workspace-data
# Diffenator
diffenator
================================================
FILE: .knip.jsonc
================================================
{
"$schema": "https://unpkg.com/knip@5/schema-jsonc.json",
"ignore": ["**/*.web.ts"],
"babel": true,
"workspaces": {
".": {
"ignoreDependencies": [
"yo",
"eslint-config-airbnb-typescript",
"generator-react-native-vector-icons",
"@commitlint/config-conventional",
"@nx/js",
"@evilmartians/lefthook"
],
"ignoreBinaries": ["scripts/generate-fonts.sh"]
},
"packages/*": {
"entry": [
"{index,cli,main}.{js,mjs,cjs,jsx,ts,tsx,mts,cts}!",
"src/{index,cli,main}.{js,mjs,cjs,jsx,ts,tsx,mts,cts}!"
]
},
"packages/common": {
"entry": ["src/index.ts", "src/scripts/{getFonts,updatePlist}.ts"],
"ignoreDependencies": ["@react-native/assets-registry", "@react-native-vector-icons/get-image"]
},
"packages/get-image": {
"entry": ["src/index.ts"],
"ignoreDependencies": ["turbo"],
"ignore": ["src/NativeVectorIcons.ts", "react-native.config.js"]
},
"packages/fontawesome-common": {
"entry": ["scripts/generate-fontawesome-metadata.js", "scripts/generate-fontawesome-glyphmap.mts"],
"ignore": ["generators/app/templates/src/*"],
"ignoreDependencies": ["@types/react"]
},
"packages/codemod": {
"entry": ["src/index.ts", "src/{11,12}.0/transform.ts"]
},
"packages/directory": {
"entry": [
"src/index.tsx",
"src/App.test.tsx",
"src/reportWebVitals.ts",
"src/setupTests.js",
"bin/generate-font-styles.mts",
"bin/generate-glyphmap-index.mts"
],
"ignoreDependencies": ["@testing-library/user-event"],
"ignoreBinaries": ["bin/generate-font-styles.mts", "bin/generate-glyphmap-index.mts"]
},
"packages/icon-explorer": {
"entry": ["index.js", "react-native.config.js", "configPlugin.js", "src/Types.tsx"],
"ignore": ["metro.config.js"],
"ignoreDependencies": [
"@react-native-vector-icons/get-image",
"@babel/preset-env",
"@react-native/eslint-config",
"@rnx-kit/align-deps",
"react-test-renderer",
"@types/react-test-renderer",
"@react-native-community/cli",
"@react-native-community/cli-platform-android",
"@react-native-community/cli-platform-ios"
]
},
"packages/generator-react-native-vector-icons": {
"entry": ["src/app/index.ts"],
"ignore": ["src/app/templates/**", "generators/app/templates/**"],
"ignoreDependencies": ["oslllo-svg-fixer"]
},
"packages/ant-design": {
"ignore": ["src/NativeVectorIconsAntDesign.ts"],
"ignoreDependencies": ["@ant-design/icons-svg"]
},
"packages/entypo": {
"ignore": ["src/NativeVectorIconsEntypo.ts"],
"ignoreDependencies": ["@entypo-icons/core"]
},
"packages/evil-icons": {
"ignore": ["src/NativeVectorIconsEvilIcons.ts"],
"ignoreDependencies": ["evil-icons"]
},
"packages/feather": {
"ignore": ["src/NativeVectorIconsFeather.ts"],
"ignoreDependencies": ["feather-icons"]
},
"packages/fontawesome": {
"ignore": ["src/NativeVectorIconsFontAwesome.ts"],
"ignoreDependencies": ["font-awesome"]
},
"packages/fontawesome-free-brands": {
"ignoreDependencies": ["@fortawesome/fontawesome-free"]
},
"packages/fontawesome-free-regular": {
"ignoreDependencies": ["@fortawesome/fontawesome-free"]
},
"packages/fontawesome-free-solid": {
"ignoreDependencies": ["@fortawesome/fontawesome-free"]
},
"packages/fontawesome5": {
"ignore": ["src/NativeVectorIconsFontAwesome5.ts"],
"ignoreDependencies": ["@fortawesome/fontawesome-free"]
},
"packages/fontawesome5-pro": {
"ignore": ["src/NativeVectorIconsFontAwesome5Pro.ts"],
"ignoreDependencies": ["@react-native-vector-icons/fontawesome-common"]
},
"packages/fontawesome6": {
"ignore": ["src/NativeVectorIconsFontAwesome6.ts"],
"ignoreDependencies": ["@fortawesome/fontawesome-free"]
},
"packages/fontawesome6-pro": {
"ignore": ["src/NativeVectorIconsFontAwesome6Pro.ts"],
"ignoreDependencies": ["@react-native-vector-icons/fontawesome-common"]
},
"packages/fontello": {
"ignore": ["src/NativeVectorIconsFontello.ts"]
},
"packages/fontisto": {
"ignore": ["src/NativeVectorIconsFontisto.ts"],
"ignoreDependencies": ["fontisto"]
},
"packages/foundation": {
"ignore": ["src/NativeVectorIconsFoundation.ts"],
"ignoreDependencies": ["foundation-icons"]
},
"packages/icomoon": {
"ignore": ["src/NativeVectorIconsIcomoon.ts"]
},
"packages/ionicons": {
"ignore": ["src/NativeVectorIconsIonicons.ts"],
"ignoreDependencies": ["ionicons"]
},
"packages/lucide": {
"ignore": ["src/NativeVectorIconsLucide.ts"],
"ignoreDependencies": ["lucide-static"]
},
"packages/material-design-icons": {
"ignore": ["src/NativeVectorIconsMaterialDesignIcons.ts"],
"ignoreDependencies": ["@mdi/font"]
},
"packages/material-icons": {
"ignore": ["src/NativeVectorIconsMaterialIcons.ts"]
},
"packages/simple-line-icons": {
"ignore": ["src/NativeVectorIconsSimpleLineIcons.ts"],
"ignoreDependencies": ["simple-line-icons"]
},
"packages/octicons": {
"ignore": ["src/NativeVectorIconsOcticons.ts"],
"ignoreDependencies": ["@primer/octicons"]
},
"packages/zocial": {
"ignore": ["src/NativeVectorIconsZocial.ts"],
"ignoreDependencies": ["css-social-buttons"]
}
}
}
================================================
FILE: .nxignore
================================================
# Files that shouldn't cause new versions to be created
pnpm-lock.yaml
README.md
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[INSERT CONTACT METHOD].
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Contributions are always welcome, no matter how large or small!
We want this community to be friendly and respectful to each other. Please follow it in all your interactions with the project. Before contributing, please read the [code of conduct](./CODE_OF_CONDUCT.md).
If you have found an issue or would like to request a new feature, simply create a new issue. Be sure to fill out as much information as possible.
## Reporting Bugs & Feature Requests
If you would like to submit a feature request or report a bug, we encourage you to first look through the [issues](https://github.com/oblador/react-native-vector-icons/issues) and [pull requests](https://github.com/oblador/react-native-vector-icons/pulls) before filing a new issue.
## Submitting a Pull Request
If you wish to submit a pull request for a new feature or issue, you should start by forking this repository first. This should get you setup on your local machine:
## Development workflow
This project is a monorepo managed using [pnpm workspaces](https://pnpm.io/workspaces). It contains the following packages:
- The library packages in `packages/common` and `packages/get-image`
- Example apps in `packages/icon-explorer` and `packages/directory`
- Fonts in `packages/fontname` e.g. `packages/fontawesome6`
To get started with the project, run `pnpm install` in the root directory to install the required dependencies for each package:
```sh
pnpm install
```
> Since the project relies on pnpm workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development.
[IconExplorer](/packages/icon-explorer/) demonstrates usage of the library. You need to run it to test any changes you make.
It is configured to use the local version of the library, so any changes you make to the library's source code will be reflected in the example app. Changes to the library's JavaScript code will be reflected in the example app without a rebuild, but native code changes will require a rebuild of the example app.
If you want to use Android Studio or XCode to edit the native code, you can open the `packages/IconExplorer/android` or `packages/IconExplorer/ios` directories respectively in those editors. To edit the Objective-C or Swift files, open `packages/IconExplorer/ios/IconExplorer.xcworkspace` in XCode and find the source files at `Pods > Development Pods > @react-native-vector-icons/ant-design`.
To edit the Java or Kotlin files, open `packages/icon-explorer/android` in Android studio and find the source files at `react-native-vector-icons` under `Android`.
You can use various commands from the root directory to work with the project.
To start the packager:
```sh
pnpm run example start
```
To run the example app on Android:
```sh
pnpm run example android
```
To run the example app on iOS:
```sh
pnpm run example ios
```
By default, the example is configured to build with the old architecture. To run the example with the new architecture, you can do the following:
1. For Android, run:
```sh
ORG_GRADLE_PROJECT_newArchEnabled=true pnpm run example android
```
2. For iOS, run:
```sh
RCT_NEW_ARCH_ENABLED=1 pod install example/ios
pnpm run example ios
```
If you are building for a different architecture than your previous build, make sure to remove the build folders first. You can run the following command to cleanup all build folders:
```sh
pnpm run clean
```
To confirm that the app is running with the new architecture, you can check the Metro logs for a message like this:
```sh
Running "IconExplorer" with {"fabric":true,"initialProps":{"concurrentRoot":true},"rootTag":1}
```
Note the `"fabric":true` and `"concurrentRoot":true` properties.
Make sure your code passes all of our linting. Run the following to verify:
```sh
pnpm run lint
```
To fix formatting errors, run the following:
```sh
pnpm run lint:biome --fix
```
Remember to add tests for your change if possible. Run the unit tests by:
```sh
pnpm run test
```
### Tests
We run tests again `new` and `old` architecture against the last 3 versions of React Native automatically via CI.
To run the these tests manually you should create an avd called test which is based on the Pixel 6 Pro profile. This is essential for the screenshot diffs to work
```sh
sdkmanager --install 'system-images;android-31;default;x86_64' --channel=0
avdmanager create avd --force -n test --abi 'default/x86_64' --package 'system-images;android-31;default;x86_64' --device 'pixel_6_pro'
```
You can then run the tests
```
cd packages/icon-explorer
pnpm run run test:android:build
pnpm run run test:android:run
pnpm run run test:ios:build
pnpm run run test:ios:run
```
You can switch versions of react native before running the tests with
```
cd packages/icon-explorer
# ./set-rn-version <arch> <version>
./set-rn-version new 0.74
./set-rn-version old 0.79
```
### Commit message convention
We follow the [conventional commits specification](https://www.conventionalcommits.org/en) for our commit messages:
- `fix`: bug fixes, e.g. fix crash due to deprecated method.
- `feat`: new features, e.g. add new method to the module.
- `refactor`: code refactor, e.g. migrate from class components to hooks.
- `docs`: changes into documentation, e.g. add usage example for the module..
- `test`: adding or updating tests, e.g. add integration tests using detox.
- `chore`: tooling changes, e.g. change CI config.
Our pre-commit hooks verify that your commit message matches this format when committing.
### Linting and tests
[ESLint](https://eslint.org/), [Prettier](https://prettier.io/), [TypeScript](https://www.typescriptlang.org/)
We use [TypeScript](https://www.typescriptlang.org/) for type checking, [ESLint](https://eslint.org/) with [Prettier](https://prettier.io/) for linting and formatting the code, and [Jest](https://jestjs.io/) for testing.
Our pre-commit hooks verify that the linter and tests pass when committing.
### Publishing to npm
We use `nx` to make it easier to publish new versions. It handles common tasks like bumping version based on semver, creating tags and releases etc.
To publish new versions, use the github action [release.yml](.github/workflows/deploy.yml) which is triggered manually.
### Scripts
The `package.json` file contains various scripts for common tasks:
- `pnpm i`: setup project by installing dependencies.
- `pnpm run lint:typecheck`: type-check files with TypeScript.
- `pnpm run lint:eslint`: lint files with ESLint.
- `pnpm run lint:biome`: lint files with Biome.
### Sending a pull request
> **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github).
When you're sending a pull request:
- Prefer small pull requests focused on one change.
- Verify that linters and tests are passing.
- Review the documentation to make sure it looks good.
- Follow the pull request template when opening a pull request.
- For pull requests that change the API or implementation, discuss with maintainers first by opening an issue.
### Font generation
All the font packages are automatically generated using a `yeoman` generator. This is driven by a `.yo-rc.json` file in the root of each font.
To make changes to common font files, edit the files in `packages/generator-react-native-vector-icons/src/app/templates/` and then at the root run:
```sh
# Generate all fonts
pnpm generate
# Generate a single font
pnpm generate ant-design
```
### Font versioning
Font package versions are now independent of upstream font versions, and we track the mapping in the README.md of each font
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2015 Joel Arvidsson
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MIGRATION.md
================================================
# Major version migration instructions
We provide a `codemod` to help migrate your code and settings between major versions.
> [!IMPORTANT]
> Make sure your code is committed to git or backed up before executing the codemod and review all changes before committing them.
```sh
npx @react-native-vector-icons/codemod
```
## Expo
To migrate from `@expo/vector-icons`, run the codemod in your Expo project. If you use `createIconSetFromIcoMoon` or `createIconSetFromFontello`, there may be some manual steps required after running the codemod:
```diff
-import createIconSetFromFontello from '@expo/vector-icons/createIconSetFromFontello';
+import createIconSetFromFontello from '@react-native-vector-icons/fontello';
-createIconSetFromFontello(fontelloConfig, 'fontello', require('path/to/fontello.ttf'));
+createIconSetFromFontello(fontelloConfig, {
+ fontSource: require('path/to/fontello.ttf')
+});
```
## React Native CLI projects
The codemod attempts to execute many of the manual steps listed below. Thoroughly check each section below for any steps that aren't automatically handled.
> [!NOTE]
> The codemod is a best effort, read through all the manual steps to ensure they have been completed.
## Migration from react-native-vector-icons to @react-native-vector-icons/\* v12.0+
In v12, the library has been simplified to require very little setup and does not require the explicit installation of `@react-native-vector-icons/common` package.
### package.json
Unless you are using `createIconSet` directly with your own font, remove `@react-native-vector-icons/common` from your `package.json`. If it's not there, go to the next step.
```sh
npm uninstall @react-native-vector-icons/common
```
### Move FontAwesome Pro, icomoon and fontello fonts
> [!WARNING]
> Only FontAwesome Pro fonts are supported by the codemod
These fonts should be in `rnvi-fonts` or a folder you defined in `package.json`
They need to be moved to a subfolder of `rnvi-fonts` with the name of the font package.
- fontawesome5-pro
- fontawesome6-pro
- fontello
- icomoon
### package.json
Remove `react-native-vector-icons` from your dependencies and replace with the fonts you intend to use, e.g. `@react-native-vector-icons/fontisto`.
### imports
Update your import statements to use the new library names
```js
// Old
import Fontisto from "react-native-vector-icons";
// New
import { Fontisto } from "@react-native-vector-icons/fontisto";
```
### Move to new props for Fontawesome 5 and 6
The FontAwesome 5 and 6 fonts now take an `iconType` prop instead of a style name prop
```jsx
// Old
<FontAwesome5 name="house" solid />
// New
<FontAwesome5 name="house" iconType="solid" />
```
Note: The codemod assumes you used the naming from the old README for your component e.g. `FontAwesome5` or `Icon`
If you have imported the component with another name you will need to modify the codemod or make the changes yourself.
### Remove unused fonts from Info.plist
You still need to add fonts in `Info.plist` - but only those which you have installed.
Check the [React Native Setup](./docs/SETUP-REACT-NATIVE.md) instructions for instructions on how to update it with our included script.
### iOS
> [!WARNING]
> This is not supported by the codemod
If you aren't using any other fonts, remove the `Fonts` folder and any fonts you have added.
Select your project in the navigator, choose your app's target, go to the Build Phases tab, and under Copy Bundle Resources, remove any fonts.
Remove any entries in `react-native.config.js`:
```js
// react-native.config.js;
module.exports = {
dependencies: {
// Remove any entries like this
"react-native-vector-icons": {
platforms: {
ios: null,
},
},
},
};
```
================================================
FILE: README.md
================================================

[](https://npmjs.com/package/@react-native-vector-icons/common) [](https://npmjs.com/package/@react-native-vector-icons/common)
# React Native Vector Icons
Elevate your React Native applications with the power of customizable vector
icons. Ideal for embellishing buttons, logos, and navigation or tab bars, these
icons seamlessly integrate into your projects. Their versatility makes
extension and styling effortless.
For the integration of `.svg` files natively, you can explore [`react-native-vector-image`](https://github.com/oblador/react-native-vector-image).
> [!TIP]
> If you are still using the old single package `react-native-vector-icons` visit <https://github.com/oblador/react-native-vector-icons/tree/10.x>. To migrate to the package-per-icon-set approach, see [MIGRATION.md](MIGRATION.md).
## Table of Contents
- [Sponsorship](#sponsorship)
- [Available Icon Sets](#available-icon-sets)
- [Installation](#installation)
- [Setup](#setup)
- [Icon Component](#icon-component)
- [Usage as PNG Image/Source Object](#usage-as-png-imagesource-object)
- [Multi-Style Fonts](#multi-style-fonts)
- [Custom Fonts](#custom-fonts)
- [Animation](#animation)
- [Dynamic icon font loading](#dynamic-icon-font-loading)
- [Usage Examples](#usage-examples)
- [Changelog](https://github.com/react-native-vector-icons/react-native-vector-icons/releases)
- [License](#license)
## Sponsorship
Should you find this library beneficial, kindly contemplate the option of
[sponsoring](https://github.com/sponsors/oblador).
## Available Icon Sets
[Explore all icons](https://oblador.github.io/react-native-vector-icons/).
RNVI comes with the following supported icons. You can [search NPM](https://www.npmjs.com/search?q=keywords%3Areact-native-vector-icons-icon) for third party icons.
### Actively maintained
- [`AntDesign`](https://ant.design/components/icon) from Ant Group (v4.4.2 with _449_ icons)
- [`Feather`](http://feathericons.com) created by Cole Bemis & Contributors (v4.29.2 featuring _287_ icons)
- [`FontAwesome`](https://fontawesome.com/search) designed by Fonticons, Inc. (v7.2.0 featuring _2,806_ free and _75,767_ pro icons)
- [`Foundation`](http://zurb.com/playground/foundation-icon-fonts-3) by ZURB, Inc. (v3.0 with _283_ icons)
- [`Ionicons`](https://ionic.io/ionicons) crafted by Ionic (v8.0.9 containing _1,357_ icons)
- [`MaterialDesignIcons`](https://pictogrammers.com/library/mdi/) from MaterialDesignIcons.com (v7.4.47 including _7448_ icons)
- [`Octicons`](https://primer.style/foundations/icons) designed by GitHub, Inc. (v19.22.0 with _339_ icons)
- [`Lucide`](https://lucide.dev/) designed by Lucide, (v0.576.0 with _1,639_ icons)
### No longer maintained upstream
- [`Entypo`](http://entypo.com) by Daniel Bruce (v1.0.1 with _411_ icons)
- [`EvilIcons`](http://evil-icons.io) designed by Alexander Madyankin & Roman Shamin (v1.10.1 with _70_ icons)
- [`FontAwesome 4`](https://fontawesome.com/v4/icons) by Fonticons, Inc. (v4.7.0 containing _785_ icons)
- [`FontAwesome 5`](https://fontawesome.com/v5/search) from Fonticons, Inc. (v5.15.4 offering _1611_ free and _7869_ pro icons)
- [`FontAwesome 6`](https://fontawesome.com/search) designed by Fonticons, Inc. (v6.7.2 featuring _2060_ free and _52663_ pro icons)
- [`Fontisto`](https://github.com/kenangundogan/fontisto) created by Kenan Gündoğan (v3.0.4 featuring _617_ icons)
- [`MaterialIcons`](https://fonts.google.com/icons?icon.set=Material+Icons) by Google, Inc. (v4.0.0 featuring _2234_ icons)
- [`SimpleLineIcons`](https://simplelineicons.github.io/) crafted by Sabbir & Contributors (v2.5.5 with _189_ icons)
- [`Zocial`](https://smcllns.github.io/css-social-buttons) by Sam Collins (v1.1.1 with _100_ icons)
## Migration
See [MIGRATION.md](MIGRATION.md) if you are migrating from `react-native-vector-icons` to the package-per-icon-set approach or between major versions.
## Installation
1. Install the packages for the icons you want to use
```sh
npm install @react-native-vector-icons/fontawesome-free-solid @react-native-vector-icons/evil-icons
```
2. Depending on the platform you're targeting (iOS/Android/Windows), follow the appropriate setup instructions below.
3. If you are using one of the following fonts, refer to their guides for further instructions
- [Fontello](packages/fontello/README.md)
- [Icomoon](packages/icomoon/README.md)
## Setup
Refer to the guide for [Expo](./docs/SETUP-EXPO.md), [React Native](./docs/SETUP-REACT-NATIVE.md) or [Web](./docs/SETUP-WEB.md) for further instructions.
### Font location customisation
For fonts like the FontAwesome Pro as well as Fontello and Icomoon where you provide the fonts, the default location for the font files is `rnvi-fonts` in the same directory as your package.json. This can be customized by setting the `fontDir` property in your `package.json` file.
```json
{
"reactNativeVectorIcons": {
"fontDir": "src/rnvi-fonts"
}
}
```
## `Icon` Component
You can either use one of the bundled icons above or roll your own custom font.
```js
import { FontAwesomeFreeSolid } from "@react-native-vector-icons/fontawesome-free-solid";
// or use the static version if you don't need [dynamic font loading](#dynamic-icon-font-loading) to get a slightly smaller bundle size
import { FontAwesomeFreeSolid } from "@react-native-vector-icons/fontawesome-free-solid/static";
<FontAwesomeFreeSolid name="rocket" size={30} color="#900" />;
```
### Props
Any [Text props](https://reactnative.dev/docs/text.html#props) and the following:
| Prop | Description | Default |
| ----------- | ----------------------------------------------------------------------- | ----------- |
| **`size`** | Size of the icon, can also be passed as `fontSize` in the style object. | `12` |
| **`name`** | What icon to show, see Icon Explorer app or one of the links above. | _None_ |
| **`color`** | Color of the icon. | _Inherited_ |
### Styling
Since `Icon` builds on top of the `Text` component, most [style properties](https://reactnative.dev/docs/style.html) will work as expected, you might find it useful to play around with these:
- `backgroundColor`
- `borderWidth`
- `borderColor`
- `borderRadius`
- `padding`
- `margin`
- `color`
- `fontSize`
By combining some of these you can create for example :


## Usage as PNG Image/Source Object
Convenient way to plug this in into other components that rely on bitmap images rather than scalable vector icons. Takes the arguments `name`, `size` and `color` as described above.
You need to install `@react-native-vector-icons/get-image` to use this feature.
```jsx
const source = Icon.getImageSourceSync('user', 20, 'red');
return <Image source={source} />;
```
Alternatively you may use the async method `Icon.getImageSource`.
Keep in mind that `Icon.getImageSourceSync` is blocking and might incur performance penalties. Subsequent calls will use cache however.
### Static methods
All static methods from `Icon` are supported by multi-styled fonts.
| Prop | Description |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`getImageSource`** | Returns a promise that resolving to the source of a bitmap version of the icon for use with `Image` component et al. Usage: `const source = await Icon.getImageSource(name, size, color)` |
| **`getImageSourceSync`** | Same as `getImageSource` but synchronous. Usage: `const source = Icon.getImageSourceSync(name, size, color)` |
## Custom Fonts
The best approach is to use our icon generator to create your own icon package.
See [CREATE_FONT_PACKAGE.md](./docs/CREATE_FONT_PACKAGE.md) to learn how to create your own font packages.
You can also use `createIconSet()` directly in your project. This
returns your own custom font based on the `glyphMap` where the key is the icon
name and the value is either a UTF-8 character or its character code.
`postScriptName` is the name of the postscript font. Open the font in <https://fontdrop.info/>,
Font Book.app or similar to learn the name. Also pass the `fontFileName` argument for Android support.
```js
import { createIconSet } from "@react-native-vector-icons/common";
const glyphMap = { "icon-name": 1234, test: "∆" };
// use createIconSet() with object parameter
// or use positional parameters for compatibility with version <= 10: `createIconSet(glyphMap, fontFamily[, fontFile])`
const Icon = createIconSet(glyphMap, {
postScriptName: "FontName",
fontFileName: "font-name.ttf",
fontSource: require("../fonts/font-name.ttf"), // optional, for dynamic loading. Can also be a local file uri.
});
```
If you aren't using dynamic font loading you need to make sure your font is copied into your bundle.
## Animation
React Native comes with an amazing animation library called
[`Animated`](https://reactnative.dev/docs/animated.html). To use it with an
icon, simply create an animated component with this line: `const AnimatedIcon =
Animated.createAnimatedComponent(Icon)`. You can also use the higher level
animation library
[react-native-animatable](https://github.com/oblador/react-native-animatable).
## Dynamic icon font loading
> Dynamic loading is supported on all platforms if you use Expo ([Expo Go](https://expo.dev/go) or a [development build](https://docs.expo.dev/develop/development-builds/introduction/)). In the future, it should become available for all React Native projects via React Native core.
Fonts can be available in an app statically (since build time) or loaded dynamically at runtime. The latter can be useful e.g. for apps that use over-the-air updates and want to [load](https://docs.expo.dev/versions/latest/sdk/font/#loadasyncfontfamilyorfontmap-source) new fonts with an update, or when you need to use a font from a remote location. If you don't use dynamic loading, use the `/static` imports (e.g. `"@react-native-vector-icons/ionicons/static"`).
Dynamic loading in `@react-native-vector-icons` is currently limited to those fonts that are bundled within the provided packages: it doesn't support Pro fonts (such as FontAwesome Pro). However, loading of custom fonts is not difficult to implement: use `createIconSet` as seen in [custom fonts](#custom-fonts) paragraph to obtain a icon font family with dynamic font loading enabled. See any of the free font packages for reference.
By default, dynamic loading is enabled if you run Expo SDK >= 52. It doesn't change the way you work with the package: If rendering an icon requires a font that is not known to the app, it will be loaded automatically and icon will render as expected.
`@react-native-vector-icons/common` exports several functions which you can use to control dynamic loading:
- `isDynamicLoadingEnabled`: Returns whether dynamic loading is enabled.
- `isDynamicLoadingSupported`: Returns whether dynamic loading is supported by your runtime (checks that necessary Expo features are present).
- `setDynamicLoadingEnabled`: Enables or disables dynamic loading.
- `setDynamicLoadingErrorCallback`: Sets a callback that is called (in the unlikely case) when an error occurs during dynamic loading. An example of when an error might happen is loading a misconfigured OTA update which doesn't include a necessary font file.
## Usage Examples
### Icon Explorer
Try the `IconExplorer` project in `Examples/IconExplorer` folder, there you can also search for any icon.

### Basic Example
```js
import { IonIcons } from "@react-native-vector-icons/ionicons/static";
const ExampleView = () => (
<IonIcons name="ios-person" size={30} color="#4F8EF7" />
);
```
### Inline Icons
```js
import { Text } from "react-native";
import { IonIcons } from "@react-native-vector-icons/ionicons/static";
const ExampleView = (props) => (
<Text>
Lorem <IonIcons name="ios-book" color="#4F8EF7" /> Ipsum
</Text>
);
```
## Testing
When running tests with `jest` you will need to mock out the native code loading to prevent errors.
In `jest.config.js` add
```js
// Mock out font loading
moduleNameMapper: {
'\\.(ttf)$': '<rootDir>/__mocks__/file-mock.js',
}
```
Create `__mocks__/file-mock.js`:
```js
module.exports = {};
```
Create `__mocks__/@react-native-vector-icons/common.js`:
```js
// Mock the entire common library so there are no native module loading errors
module.exports = {
createIconSet: () => "icon",
};
```
## [Changelog](https://github.com/oblador/react-native-vector-icons/releases)
## License
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).
================================================
FILE: TODO.md
================================================
# TODO
* Test the other targets
* macOS
* windows
* web
* When we stop supporting 0.73 move to generating codegen artifcats and shipping them in libraries
================================================
FILE: biome.jsonc
================================================
{
"$schema": "https://biomejs.dev/schemas/2.3.0/schema.json",
"files": {
"includes": [
"**",
// pnpm keeps these formatted
"!**/package.json",
"!**/packages/**/*/package.json",
// nx keeps this formatted
"!**/tsconfig.json",
"!**/packages/**/*/tsconfig.json",
"!nx.json",
// Files auto generated by us
"!**/packages/**/.yo-rc.json",
"!**/packages/**/*/lib",
"!**/packages/**/*/glyphmaps",
"!**/packages/generator-react-native-vector-icons/generators",
"!**/packages/**/*/.fontcustom-manifest.json",
"!**/packages/**/*/android/build",
"!**/packages/directory/src/generated",
"!**/packages/directory/build",
"!**/packages/icon-explorer/.owl",
"!**/.nx",
// Templates that have ejs
"!**/packages/fontawesome-common/generators/app/templates/src",
"!**/packages/generator-react-native-vector-icons/src/app/templates/src",
// Upstream files
"!**/packages/icon-explorer/src/configs/icomoon.config.json",
// native files
"!**/packages/icon-explorer/ios",
"!**/packages/icon-explorer/android",
"!**/packages/common/android",
"!**/packages/common/ios"
]
},
"assist": {
"actions": {
"source": {
"organizeImports": {
"level": "on",
"options": {
"groups": [
":NODE:",
":BLANK_LINE:",
["react", "react-native", "react-dom/client"],
":BLANK_LINE:",
[":PACKAGE:"],
":BLANK_LINE:",
[":PATH:", "!**/glyphmaps/*_meta.json"],
":BLANK_LINE:",
["**/glyphmaps/*_meta.json"]
]
}
}
}
}
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": {
"noForEach": "off"
}
}
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"lineWidth": 120
},
"javascript": {
"formatter": {
"quoteStyle": "single"
}
}
}
================================================
FILE: docs/CREATE_FONT_PACKAGE.md
================================================
# Creating a font package
You can create a new font package either via a PR to this repository or by publishing your own font package on NPM.
We use a yeoman generator to fully automate the generation the fonts from a configuration file.
In the future the idea is to automate this to automatically release new fonts in line with upstream.
Below we describe how to create a font in this monorepo, the process for creating your own package would be quite similar.
> **Note**: Before contributing a new font package, please read our [Contributing Guidelines](../CONTRIBUTING.md) and follow the [development workflow](../CONTRIBUTING.md#development-workflow) described there.
## Quick Start
1. **Set up development environment** (see [CONTRIBUTING.md](../CONTRIBUTING.md#development-workflow)):
```sh
pnpm install
```
2. **Create font package directory and config**:
```sh
mkdir packages/my-font
vi packages/my-font/.yo-rc.json
git add packages/my-font/.yo-rc.json
```
3. **Generate the font package**:
```sh
# Generate single font
pnpm generate my-font
# Or generate all fonts
pnpm generate
```
## Configuration Reference
The `.yo-rc.json` file contains all configuration for the font package generation. Here's the complete structure:
For most fonts you should be able to set the packageName and most other variaables will be derived from them, but you can adjust with the optional propertires when necessary.
### Required Properties
#### packageName
- **Type**: `string`
- **Description**: The name of the node package and directory name
- **Example**: `"material-symbols"`
- **Note**: Currently assumes package will live in `@react-native-vector-icons` namespace
### Optional Properties
#### name
- **Type**: `string`
- **Description**: The name in capitalised sentence from
- **Default**: Title Case of packageName
- **Example**: `"Material Symbols"` (from `material-symbols`)
#### className
- **Type**: `string`
- **Description**: Class name for generated components
- **Default**: PascalCase of packageName
- **Example**: `"MaterialSymbols"` (from `material-symbols`)
#### postScriptName
- **Type**: `string`
- **Description**: PostScript name for the font
- **Default**: Same as className
- **Example**: `"MaterialSymbols"`
#### fontFileName
- **Type**: `string`
- **Description**: Base filename for generated fonts
- **Default**: Same as className
- **Example**: `"MaterialSymbols"`
#### upstreamFont
- **Type**: `string | object`
- **Description**: The upstream font package dependency where the font comes from a node module
- **String format**: `"package-name"` - fetches latest version from npm
- **Object format**:
```json
{
"packageName": "@fortawesome/fontawesome-free",
"versionRange": "^6",
"registry": "https://registry.npmjs.org",
"versionOnly": false
}
```
#### customSrc
- **Type**: `string | boolean`
- **Description**: Path to custom source template or `true` to skip generation
- **Example**: `"../../../../fontawesome-common/generators/app/templates/src/index.tsx"`
#### customReadme
- **Type**: `boolean`
- **Description**: Skip README.md generation
- **Default**: `false`
#### copyCustomFonts
- **Type**: `boolean`
- **Description**: Copy custom font files instead of generating
- **Default**: `false`
#### commonPackage
- **Type**: `string`
- **Description**: Path to common package for shared functionality
- **Default**: `"common"`
- **Example**: `"fontawesome-common/fontawesome6"`
#### meta
- **Type**: `object`
- **Description**: Metadata for multi-style fonts
- **Example**:
```json
{
"defaultStyleName": "regular",
"styleNames": ["regular", "solid", "brand"],
"styles": {
"regular": {
"family": "FontAwesome6Free-Regular",
"name": "FontAwesome6_Regular.ttf",
"weight": 400
}
}
}
```
#### versions
- **Type**: `array`
- **Description**: Version history tracking. Updated when a new upstream font version is released.
- **Example**:
```json
[
{ "rnvi": "12.0.0", "upstream": "4.29.2" },
{ "rnvi": "12.0.1", "upstream": "4.30.0" }
]
```
### Build Steps
The `buildSteps` object defines the font generation pipeline. Steps are executed in this order:
#### preScript
Execute shell commands before font generation
```json
{
"preScript": {
"script": "mkdir -p fonts\ncurl https://example.com/font.ttf > fonts/font.ttf"
}
}
```
#### renameSVGs
Rename and filter SVG files
```json
{
"renameSVGs": {
"location": "../../node_modules/@primer/octicons/build/svg",
"keepPostfix": "-16"
}
}
```
- **location**: Source directory containing SVGs
- **keepPostfix**: Only keep files ending with this postfix, remove it from output
#### fixSVGPaths
Fix SVG path issues using oslllo-svg-fixer
```json
{
"fixSVGPaths": {
"location": "../../node_modules/ionicons/dist/svg",
"cleanup": true
}
}
```
- **location**: Source directory or `"renamedSVGs"` if after renameSVGs
- **cleanup**: Remove source directory after processing
#### fontCustom
Generate font TTF from SVGs using FontCustom
```json
{
"fontCustom": {
"location": "fixedSvg",
"cleanup": true
}
}
```
- **location**: Directory containing SVG files
- **cleanup**: Remove source directory after processing
#### fontforgeScript
Run FontForge script for font post-processing
```json
{
"fontforgeScript": {
"script": "correct-direction.py"
}
}
```
- **script**: Script name in the generator's fontforge directory
#### glyphmap
Generate icon mapping files
```json
{
"glyphmap": {
"mode": "css",
"location": "FontAwesome.css",
"prefix": ".fa-",
"cleanup": true
}
}
```
- **mode**: `"css"` or `"codepoints"`
- **location**: Source file or array of `[source, output]` pairs
- **prefix**: CSS class prefix (css mode only)
- **cleanup**: Remove source files after processing
#### copyFont
Copy existing font files
```json
{
"copyFont": {
"location": "../../node_modules/font-awesome/fonts/fontawesome-webfont.ttf"
}
}
```
- **location**: Source file path or array of `[source, output]` pairs
#### postScript
Execute shell commands after font generation
```json
{
"postScript": {
"script": "node ../scripts/generate-metadata.js"
}
}
```
## Configuration Examples
### SVG to Font Generation (Feather Icons)
```json
{
"generator-react-native-vector-icons": {
"packageName": "feather",
"upstreamFont": "feather-icons",
"buildSteps": {
"fontCustom": {
"location": "node_modules/feather-icons/dist/icons"
},
"glyphmap": {
"mode": "css",
"cleanup": true
}
},
"versions": [{ "rnvi": "12.0.0", "upstream": "4.29.2" }]
}
}
```
### CSS-based Font (FontAwesome)
```json
{
"generator-react-native-vector-icons": {
"packageName": "fontawesome",
"postScriptName": "FontAwesome",
"fontFileName": "FontAwesome",
"className": "FontAwesome",
"upstreamFont": "font-awesome",
"buildSteps": {
"glyphmap": {
"location": "../../node_modules/font-awesome/css/font-awesome.css",
"mode": "css",
"prefix": ".fa-"
},
"copyFont": {
"location": "../../node_modules/font-awesome/fonts/fontawesome-webfont.ttf"
}
},
"versions": [{ "rnvi": "12.0.0", "upstream": "4.7.0" }]
}
}
```
### Codepoints-based Font (Material Icons)
```json
{
"generator-react-native-vector-icons": {
"packageName": "material-icons",
"postScriptName": "MaterialIcons-Regular",
"buildSteps": {
"preScript": {
"script": "mkdir -p fonts\nREF='f7bd4f25f3764883717c09a1fd867f560c9a9581'\ncurl https://raw.githubusercontent.com/google/material-design-icons/$REF/font/MaterialIcons-Regular.codepoints -Ls > MaterialIcons-Regular.codepoints\ncurl https://raw.githubusercontent.com/google/material-design-icons/$REF/font/MaterialIcons-Regular.ttf -Ls > fonts/MaterialIcons.ttf"
},
"glyphmap": {
"location": "MaterialIcons-Regular.codepoints",
"mode": "codepoints",
"prefix": ".mdi-",
"cleanup": true
}
},
"versions": [{ "rnvi": "12.0.0", "upstream": "0.0.1" }]
}
}
```
### Multi-style Font (FontAwesome 6)
```json
{
"generator-react-native-vector-icons": {
"packageName": "fontawesome6",
"className": "FontAwesome6",
"commonPackage": "fontawesome-common/fontawesome6",
"customSrc": "../../../../fontawesome-common/generators/app/templates/src/index.tsx",
"customReadme": true,
"upstreamFont": {
"packageName": "@fortawesome/fontawesome-free",
"versionRange": "^6"
},
"meta": {
"defaultStyleName": "regular",
"styleNames": ["regular", "solid", "brand"],
"styles": {
"regular": {
"family": "FontAwesome6Free-Regular",
"name": "FontAwesome6_Regular.ttf",
"weight": 400
},
"solid": {
"family": "FontAwesome6Free-Solid",
"name": "FontAwesome6_Solid.ttf",
"weight": 900
},
"brand": {
"family": "FontAwesome6Brands-Regular",
"name": "FontAwesome6_Brands.ttf",
"weight": 400
}
}
},
"buildSteps": {
"glyphmap": {
"location": "node_modules/@fortawesome/fontawesome-free/css/all.css",
"mode": "css",
"prefix": ".fa-"
},
"copyFont": {
"location": [
["node_modules/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf", "FontAwesome6_Brands"],
["node_modules/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf", "FontAwesome6_Regular"],
["node_modules/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf", "FontAwesome6_Solid"]
]
},
"postScript": {
"script": "node ../fontawesome-common/scripts/generate-fontawesome-metadata --path node_modules/@fortawesome/fontawesome-free --output glyphmaps/FontAwesome6_meta.json"
}
},
"versions": [{ "rnvi": "12.0.0", "upstream": "6.7.2" }]
}
}
```
### SVG Processing with Fixes (Ionicons)
```json
{
"generator-react-native-vector-icons": {
"packageName": "ionicons",
"upstreamFont": "ionicons",
"buildSteps": {
"fixSVGPaths": {
"location": "../../node_modules/ionicons/dist/svg"
},
"fontCustom": {
"location": "fixedSvg",
"cleanup": true
},
"fontforgeScript": {
"script": "correct-direction.py"
},
"glyphmap": {
"mode": "css",
"cleanup": true
}
},
"versions": [{ "rnvi": "12.0.0", "upstream": "7.4.0" }, { "rnvi": "12.0.1", "upstream": "8.0.8" }]
}
}
```
### Custom Font Package (Fontello)
```json
{
"generator-react-native-vector-icons": {
"packageName": "fontello",
"customReadme": true,
"customSrc": true,
"copyCustomFonts": true
}
}
```
## Build Process
1. **Install Dependencies**: The generator installs upstream font packages
2. **Template Generation**: Creates package.json, TypeScript files, Android/iOS config
3. **Build Steps Execution**: Runs configured build steps in order
4. **Font Generation**: Uses FontCustom in Docker container if needed
5. **Glyph Mapping**: Generates JSON mapping files for icons
## Testing Your Font Package
After generating your font package, test it in the example app:
```sh
# Start the example app (see CONTRIBUTING.md for details)
pnpm run example start
pnpm run example android # or ios
```
## Development Workflow
For ongoing development and testing:
1. **Make template changes** to `packages/generator-react-native-vector-icons/src/app/templates/`
2. **Regenerate fonts**:
```sh
pnpm generate my-font
```
3. **Test changes** in the IconExplorer app
4. **Run linting and tests** (see [CONTRIBUTING.md](../CONTRIBUTING.md#linting-and-tests)):
```sh
pnpm run lint
pnpm run test
```
## Submitting Your Font Package
When ready to contribute your font package:
1. **Follow commit conventions** described in [CONTRIBUTING.md](../CONTRIBUTING.md#commit-message-convention)
2. **Create a pull request** following the [PR guidelines](../CONTRIBUTING.md#sending-a-pull-request)
3. **Include documentation** updates if needed
4. **Ensure all tests pass** in CI
## Font Versioning
Font package versions are independent of upstream font versions. We track the mapping in each font's README.md file as described in [CONTRIBUTING.md](../CONTRIBUTING.md#font-versioning).
## Manual Generator Execution
If needed, you can run the generator manually:
```sh
cd packages/my-font
npx yo react-native-vector-icons --current-version=1.0.0
```
> **Note**: The `pnpm generate` command is the preferred method as it handles version management automatically.
================================================
FILE: docs/SETUP-EXPO.md
================================================
# Setup guide for Expo Apps
> If you use React Native without Expo, please follow [this guide](./SETUP-REACT-NATIVE.md) instead. This guide applies to Expo apps only.
Icon packages from `@react-native-vector-icons` work out of the box with Expo, across all platforms. No additional configuration is required.
> [!WARNING]
> Avoid Manual Font Duplication: do not add fonts from `node_modules/@react-native-vector-icons/some-font` to `expo-font` plugin configuration unless you have a specific advanced use case.
================================================
FILE: docs/SETUP-REACT-NATIVE.md
================================================
# Setup guide for React Native Apps
> If you use Expo, please follow [this guide](./SETUP-EXPO.md) instead. This guide applies to vanilla React Native apps only.
### Android
1. Rebuild your app. No extra steps needed for Android.
### iOS
> [!TIP]
> You will need to follow these instructions any time you add a new font
1. To use the icon packages you previously installed on iOS, run:
```sh
npx rnvi-update-plist package.json ios/AppName/Info.plist
```
2. Open `ios/Info.plist` and verify that the property called **Fonts provided by application** (or **UIAppFonts** if opening the file in a text editor) is present and contains the expected entries. For example:
<details>
<summary>List of all available fonts that could be present in Info.plist</summary>
```xml
<key>UIAppFonts</key>
<array>
<string>FontAwesome6_Brands.ttf</string>
<string>FontAwesome6_Regular.ttf</string>
<string>FontAwesome6_Solid.ttf</string>
<string>Octicons.ttf</string>
</array>
```
</details>
3. Run `pod install` in the ios directory
```sh
cd ios && pod install
```
4. Rebuild your app
### macOS
This needs more work, see details in [#1624](https://github.com/oblador/react-native-vector-icons/issues/1624)
### Windows
1. Copy the needed fonts from `node_modules/react-native-vector-icons/Fonts/*` to `windows/<Project>/Assets/*`
2. Open your solution on Visual Studio, right click on Assets, add Add Assets, then select your fonts, save and quit Visual Studio.
3. Rebuild your project
================================================
FILE: docs/SETUP-WEB.md
================================================
# Setup guide for Web Apps
> This guide can probably be improved, please feel free to contribute.
### React-native-web Setup
To port a react-native mobile app to web using `react-native-web` you just need to ensure the fonts are known on the web-app side.
You will need add the font-family for each font you use to your css.
You can debug missing font-families by looking in the Developer console in your web browser when debugging your web app.
NOTE: if you're using webpack or similar you *may* need to configure webpack to handle loading of ttf fonts, using url-loader or file-loader. See [Web Setup](#web-setup) for more details.
In your `App.css` or similar add the font-family specifications:
```css
@font-face {
src: url(path/to/fonts/Ionicons.ttf);
font-family: "Ionicons";
}
@font-face {
src: url(path/to/fonts/FontAwesome.ttf);
font-family: "FontAwesome";
}
@font-face {
src: url(path/to/fonts/FontAwesome5_Brands.ttf);
font-family: "FontAwesome5_Brands";
font-weight: 400; /* Regular weight */
font-style: normal;
}
@font-face {
src: url(path/to/fonts/FontAwesome5_Regular.ttf);
font-family: "FontAwesome5_Regular";
font-weight: 400; /* Regular weight */
font-style: normal;
}
@font-face {
src: url(path/to/fonts/FontAwesome5_Solid.ttf);
font-family: "FontAwesome5_Solid";
font-weight: 900; /* Bold weight for solid */
font-style: normal;
}
@font-face {
src: url(path/to/fonts/MaterialIcons.ttf);
font-family: "MaterialIcons";
}
@font-face {
src: url(path/to/fonts/Feather.ttf);
font-family: "Feather";
}
@font-face {
src: url(path/to/fonts/MaterialCommunityIcons.ttf);
font-family: "MaterialCommunityIcons";
}
/* TODO: Add other icons fonts here */
```
### Web Setup
To integrate the library with your web project using [webpack](https://webpack.js.org/), follow these steps:
1. In your webpack configuration file, add a section to handle TTF files using `url-loader` or `file-loader`:
```js
{
test: /\.ttf$/,
loader: "url-loader", // or directly file-loader
include: path.resolve(__dirname, "node_modules/react-native-vector-icons"),
}
```
2. In your JavaScript entry point, consume the font files and inject the necessary style tag:
```js
import Icon from '@react-native-vector-icons/fontAwesome';
// Generate the required CSS
import iconFont from '@react-native-vector-icons/fontawesome/fonts/FontAwesome.ttf';
const iconFontStyles = `@font-face {
src: url(${iconFont});
font-family: FontAwesome;
}`;
// Create a stylesheet
const style = document.createElement('style');
style.type = 'text/css';
// Append the iconFontStyles to the stylesheet
if (style.styleSheet) {
style.styleSheet.cssText = iconFontStyles;
} else {
style.appendChild(document.createTextNode(iconFontStyles));
}
// Inject the stylesheet into the document head
document.head.appendChild(style);
```
By following these steps, you will seamlessly integrate the vector icons
library into your web project using [webpack](https://webpack.js.org/),
enabling you to effortlessly use the icons within your web application.
================================================
FILE: lefthook.yml
================================================
pre-commit:
parallel: true
commands:
eslint:
run: pnpm run lint:eslint
biome:
run: pnpm run lint:biome
# NOTE: Disabled because it is too slow
# types:
# glob: "*.{json,js,ts,tsx}"
# run: npm run lint:types
commit-msg:
parallel: true
commands:
commitlint:
run: npx commitlint --edit
================================================
FILE: nx.json
================================================
{
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"targetDefaults": {
"clean": {
"dependsOn": [
"^clean"
]
},
"prepare": {
"dependsOn": [
"^prepare"
]
},
"prepack": {
"dependsOn": [
"^prepack"
]
},
"postpack": {
"dependsOn": [
"^postpack"
]
}
},
"defaultBase": "master",
"release": {
"projects": [
"*",
"!@react-native-vector-icons/icon-explorer",
"!@react-native-vector-icons/fontcustom-docker",
"!@react-native-vector-icons/directory"
],
"projectsRelationship": "independent",
"changelog": {
"projectChangelogs": {
"createRelease": "github"
},
"workspaceChangelog": {
"createRelease": "github"
}
},
"version": {
"conventionalCommits": true,
"NOTE": "We want auto but it's overzealous for our purposes, see https://github.com/nrwl/nx/discussions/29135",
"updateDependents": "never"
}
}
}
================================================
FILE: package.json
================================================
{
"private": true,
"version": "0.0.1",
"scripts": {
"generate": "scripts/generate-fonts.sh",
"clean": "nx run-many -t clean",
"prepare": "nx run-many -t prepare",
"test": "nx run-many -t test",
"lint:eslint": "eslint .",
"lint:biome": "biome check .",
"lint:knip": "knip",
"lint:types": "bash -c 'for i in packages/*; do if [ -f $i/tsconfig.json ]; then tsc --noEmit -p $i/tsconfig.json; fi; done'",
"lint": "pnpm run '/^lint:.*/'",
"release": "nx release"
},
"devDependencies": {
"@biomejs/biome": "^2.3.0",
"@commitlint/config-conventional": "^20.0.0",
"@evilmartians/lefthook": "^2.0.1",
"@nx/js": "^22.5.2",
"@types/eslint": "^8.56.12",
"@types/node": "^20.19.23",
"@typescript-eslint/eslint-plugin": "^8.46.2",
"@typescript-eslint/parser": "^8.46.2",
"commitlint": "^20.1.0",
"eslint": "^8.57.1",
"eslint-config-biome": "^1.9.4",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.1.0",
"generator-react-native-vector-icons": "workspace:*",
"knip": "^5.66.2",
"nx": "^22.5.2",
"typescript": "^5.9.3",
"yo": "^5.1.0"
},
"engines": {
"node": ">= 18.0.0"
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"repository": {
"url": "https://github.com/oblador/react-native-vector-icons",
"type": "git"
},
"packageManager": "pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6"
}
================================================
FILE: packages/ant-design/.fontcustom-manifest.json
================================================
{
"checksum": {
"previous": "3a17bffd6a624425af737b4664e295508c3c5b8c76ebe37f1f393aa65105d542",
"current": "3a17bffd6a624425af737b4664e295508c3c5b8c76ebe37f1f393aa65105d542"
},
"fonts": [
"AntDesign/AntDesign.ttf",
"AntDesign/AntDesign.svg",
"AntDesign/AntDesign.woff",
"AntDesign/AntDesign.eot",
"AntDesign/AntDesign.woff2"
],
"glyphs": {
"account-book": {
"codepoint": 62454,
"source": "fixedSvg/account-book.svg"
},
"aim": {
"codepoint": 62455,
"source": "fixedSvg/aim.svg"
},
"alert": {
"codepoint": 62456,
"source": "fixedSvg/alert.svg"
},
"alibaba": {
"codepoint": 62457,
"source": "fixedSvg/alibaba.svg"
},
"align-center": {
"codepoint": 62458,
"source": "fixedSvg/align-center.svg"
},
"align-left": {
"codepoint": 61701,
"source": "fixedSvg/align-left.svg"
},
"align-right": {
"codepoint": 61702,
"source": "fixedSvg/align-right.svg"
},
"alipay": {
"codepoint": 62459,
"source": "fixedSvg/alipay.svg"
},
"alipay-circle": {
"codepoint": 62460,
"source": "fixedSvg/alipay-circle.svg"
},
"aliwangwang": {
"codepoint": 62461,
"source": "fixedSvg/aliwangwang.svg"
},
"aliyun": {
"codepoint": 62462,
"source": "fixedSvg/aliyun.svg"
},
"amazon": {
"codepoint": 62463,
"source": "fixedSvg/amazon.svg"
},
"android": {
"codepoint": 62464,
"source": "fixedSvg/android.svg"
},
"ant-cloud": {
"codepoint": 62465,
"source": "fixedSvg/ant-cloud.svg"
},
"ant-design": {
"codepoint": 62466,
"source": "fixedSvg/ant-design.svg"
},
"apartment": {
"codepoint": 62467,
"source": "fixedSvg/apartment.svg"
},
"api": {
"codepoint": 62468,
"source": "fixedSvg/api.svg"
},
"apple": {
"codepoint": 62469,
"source": "fixedSvg/apple.svg"
},
"appstore": {
"codepoint": 62470,
"source": "fixedSvg/appstore.svg"
},
"appstore-add": {
"codepoint": 62471,
"source": "fixedSvg/appstore-add.svg"
},
"area-chart": {
"codepoint": 62472,
"source": "fixedSvg/area-chart.svg"
},
"arrow-down": {
"codepoint": 61717,
"source": "fixedSvg/arrow-down.svg"
},
"arrow-left": {
"codepoint": 61718,
"source": "fixedSvg/arrow-left.svg"
},
"arrow-right": {
"codepoint": 61719,
"source": "fixedSvg/arrow-right.svg"
},
"arrow-up": {
"codepoint": 61720,
"source": "fixedSvg/arrow-up.svg"
},
"arrows-alt": {
"codepoint": 62473,
"source": "fixedSvg/arrows-alt.svg"
},
"audio": {
"codepoint": 62474,
"source": "fixedSvg/audio.svg"
},
"audio-muted": {
"codepoint": 62475,
"source": "fixedSvg/audio-muted.svg"
},
"audit": {
"codepoint": 62476,
"source": "fixedSvg/audit.svg"
},
"backward": {
"codepoint": 62477,
"source": "fixedSvg/backward.svg"
},
"baidu": {
"codepoint": 62801,
"source": "fixedSvg/baidu.svg"
},
"bank": {
"codepoint": 62478,
"source": "fixedSvg/bank.svg"
},
"bar-chart": {
"codepoint": 62479,
"source": "fixedSvg/bar-chart.svg"
},
"barcode": {
"codepoint": 62480,
"source": "fixedSvg/barcode.svg"
},
"bars": {
"codepoint": 62481,
"source": "fixedSvg/bars.svg"
},
"behance": {
"codepoint": 61730,
"source": "fixedSvg/behance.svg"
},
"behance-square": {
"codepoint": 62482,
"source": "fixedSvg/behance-square.svg"
},
"bell": {
"codepoint": 61732,
"source": "fixedSvg/bell.svg"
},
"bg-colors": {
"codepoint": 62483,
"source": "fixedSvg/bg-colors.svg"
},
"bilibili": {
"codepoint": 62802,
"source": "fixedSvg/bilibili.svg"
},
"block": {
"codepoint": 61734,
"source": "fixedSvg/block.svg"
},
"bold": {
"codepoint": 62484,
"source": "fixedSvg/bold.svg"
},
"book": {
"codepoint": 61736,
"source": "fixedSvg/book.svg"
},
"border": {
"codepoint": 62485,
"source": "fixedSvg/border.svg"
},
"border-bottom": {
"codepoint": 62486,
"source": "fixedSvg/border-bottom.svg"
},
"border-horizontal": {
"codepoint": 62487,
"source": "fixedSvg/border-horizontal.svg"
},
"border-inner": {
"codepoint": 62488,
"source": "fixedSvg/border-inner.svg"
},
"border-left": {
"codepoint": 62489,
"source": "fixedSvg/border-left.svg"
},
"border-outer": {
"codepoint": 62490,
"source": "fixedSvg/border-outer.svg"
},
"border-right": {
"codepoint": 62491,
"source": "fixedSvg/border-right.svg"
},
"border-top": {
"codepoint": 62492,
"source": "fixedSvg/border-top.svg"
},
"border-verticle": {
"codepoint": 62493,
"source": "fixedSvg/border-verticle.svg"
},
"borderless-table": {
"codepoint": 62494,
"source": "fixedSvg/borderless-table.svg"
},
"box-plot": {
"codepoint": 62495,
"source": "fixedSvg/box-plot.svg"
},
"branches": {
"codepoint": 62496,
"source": "fixedSvg/branches.svg"
},
"bug": {
"codepoint": 61749,
"source": "fixedSvg/bug.svg"
},
"build": {
"codepoint": 62497,
"source": "fixedSvg/build.svg"
},
"bulb": {
"codepoint": 62498,
"source": "fixedSvg/bulb.svg"
},
"calculator": {
"codepoint": 61752,
"source": "fixedSvg/calculator.svg"
},
"calendar": {
"codepoint": 61753,
"source": "fixedSvg/calendar.svg"
},
"camera": {
"codepoint": 61754,
"source": "fixedSvg/camera.svg"
},
"car": {
"codepoint": 62499,
"source": "fixedSvg/car.svg"
},
"caret-down": {
"codepoint": 62500,
"source": "fixedSvg/caret-down.svg"
},
"caret-left": {
"codepoint": 62501,
"source": "fixedSvg/caret-left.svg"
},
"caret-right": {
"codepoint": 62502,
"source": "fixedSvg/caret-right.svg"
},
"caret-up": {
"codepoint": 62503,
"source": "fixedSvg/caret-up.svg"
},
"carry-out": {
"codepoint": 62504,
"source": "fixedSvg/carry-out.svg"
},
"check": {
"codepoint": 61761,
"source": "fixedSvg/check.svg"
},
"check-circle": {
"codepoint": 62505,
"source": "fixedSvg/check-circle.svg"
},
"check-square": {
"codepoint": 62506,
"source": "fixedSvg/check-square.svg"
},
"chrome": {
"codepoint": 62507,
"source": "fixedSvg/chrome.svg"
},
"ci": {
"codepoint": 62508,
"source": "fixedSvg/ci.svg"
},
"ci-circle": {
"codepoint": 62509,
"source": "fixedSvg/ci-circle.svg"
},
"clear": {
"codepoint": 62510,
"source": "fixedSvg/clear.svg"
},
"clock-circle": {
"codepoint": 62511,
"source": "fixedSvg/clock-circle.svg"
},
"close": {
"codepoint": 62512,
"source": "fixedSvg/close.svg"
},
"close-circle": {
"codepoint": 62513,
"source": "fixedSvg/close-circle.svg"
},
"close-square": {
"codepoint": 62514,
"source": "fixedSvg/close-square.svg"
},
"cloud": {
"codepoint": 61772,
"source": "fixedSvg/cloud.svg"
},
"cloud-download": {
"codepoint": 62515,
"source": "fixedSvg/cloud-download.svg"
},
"cloud-server": {
"codepoint": 62516,
"source": "fixedSvg/cloud-server.svg"
},
"cloud-sync": {
"codepoint": 62517,
"source": "fixedSvg/cloud-sync.svg"
},
"cloud-upload": {
"codepoint": 62518,
"source": "fixedSvg/cloud-upload.svg"
},
"cluster": {
"codepoint": 62519,
"source": "fixedSvg/cluster.svg"
},
"code": {
"codepoint": 61778,
"source": "fixedSvg/code.svg"
},
"code-sandbox": {
"codepoint": 62520,
"source": "fixedSvg/code-sandbox.svg"
},
"codepen": {
"codepoint": 62521,
"source": "fixedSvg/codepen.svg"
},
"codepen-circle": {
"codepoint": 62522,
"source": "fixedSvg/codepen-circle.svg"
},
"coffee": {
"codepoint": 62523,
"source": "fixedSvg/coffee.svg"
},
"column-height": {
"codepoint": 62524,
"source": "fixedSvg/column-height.svg"
},
"column-width": {
"codepoint": 62525,
"source": "fixedSvg/column-width.svg"
},
"comment": {
"codepoint": 62526,
"source": "fixedSvg/comment.svg"
},
"compass": {
"codepoint": 61786,
"source": "fixedSvg/compass.svg"
},
"compress": {
"codepoint": 62527,
"source": "fixedSvg/compress.svg"
},
"console-sql": {
"codepoint": 62528,
"source": "fixedSvg/console-sql.svg"
},
"contacts": {
"codepoint": 62529,
"source": "fixedSvg/contacts.svg"
},
"container": {
"codepoint": 62530,
"source": "fixedSvg/container.svg"
},
"control": {
"codepoint": 62531,
"source": "fixedSvg/control.svg"
},
"copy": {
"codepoint": 61792,
"source": "fixedSvg/copy.svg"
},
"copyright": {
"codepoint": 62532,
"source": "fixedSvg/copyright.svg"
},
"copyright-circle": {
"codepoint": 62533,
"source": "fixedSvg/copyright-circle.svg"
},
"credit-card": {
"codepoint": 61795,
"source": "fixedSvg/credit-card.svg"
},
"crown": {
"codepoint": 62534,
"source": "fixedSvg/crown.svg"
},
"customer-service": {
"codepoint": 62535,
"source": "fixedSvg/customer-service.svg"
},
"dash": {
"codepoint": 62536,
"source": "fixedSvg/dash.svg"
},
"dashboard": {
"codepoint": 62537,
"source": "fixedSvg/dashboard.svg"
},
"database": {
"codepoint": 61800,
"source": "fixedSvg/database.svg"
},
"delete": {
"codepoint": 62538,
"source": "fixedSvg/delete.svg"
},
"delete-column": {
"codepoint": 62539,
"source": "fixedSvg/delete-column.svg"
},
"delete-row": {
"codepoint": 62540,
"source": "fixedSvg/delete-row.svg"
},
"delivered-procedure": {
"codepoint": 62541,
"source": "fixedSvg/delivered-procedure.svg"
},
"deployment-unit": {
"codepoint": 62542,
"source": "fixedSvg/deployment-unit.svg"
},
"desktop": {
"codepoint": 62543,
"source": "fixedSvg/desktop.svg"
},
"diff": {
"codepoint": 62544,
"source": "fixedSvg/diff.svg"
},
"dingding": {
"codepoint": 62545,
"source": "fixedSvg/dingding.svg"
},
"dingtalk": {
"codepoint": 62546,
"source": "fixedSvg/dingtalk.svg"
},
"disconnect": {
"codepoint": 62547,
"source": "fixedSvg/disconnect.svg"
},
"discord": {
"codepoint": 62803,
"source": "fixedSvg/discord.svg"
},
"dislike": {
"codepoint": 62548,
"source": "fixedSvg/dislike.svg"
},
"docker": {
"codepoint": 62804,
"source": "fixedSvg/docker.svg"
},
"dollar": {
"codepoint": 62549,
"source": "fixedSvg/dollar.svg"
},
"dollar-circle": {
"codepoint": 62550,
"source": "fixedSvg/dollar-circle.svg"
},
"dot-chart": {
"codepoint": 62551,
"source": "fixedSvg/dot-chart.svg"
},
"dot-net": {
"codepoint": 62805,
"source": "fixedSvg/dot-net.svg"
},
"double-left": {
"codepoint": 62552,
"source": "fixedSvg/double-left.svg"
},
"double-right": {
"codepoint": 62553,
"source": "fixedSvg/double-right.svg"
},
"down": {
"codepoint": 62554,
"source": "fixedSvg/down.svg"
},
"down-circle": {
"codepoint": 62555,
"source": "fixedSvg/down-circle.svg"
},
"down-square": {
"codepoint": 62556,
"source": "fixedSvg/down-square.svg"
},
"download": {
"codepoint": 61820,
"source": "fixedSvg/download.svg"
},
"drag": {
"codepoint": 62557,
"source": "fixedSvg/drag.svg"
},
"dribbble": {
"codepoint": 61822,
"source": "fixedSvg/dribbble.svg"
},
"dribbble-square": {
"codepoint": 62558,
"source": "fixedSvg/dribbble-square.svg"
},
"dropbox": {
"codepoint": 61824,
"source": "fixedSvg/dropbox.svg"
},
"edit": {
"codepoint": 61825,
"source": "fixedSvg/edit.svg"
},
"ellipsis": {
"codepoint": 62559,
"source": "fixedSvg/ellipsis.svg"
},
"enter": {
"codepoint": 62560,
"source": "fixedSvg/enter.svg"
},
"environment": {
"codepoint": 62561,
"source": "fixedSvg/environment.svg"
},
"euro": {
"codepoint": 62562,
"source": "fixedSvg/euro.svg"
},
"euro-circle": {
"codepoint": 62563,
"source": "fixedSvg/euro-circle.svg"
},
"exception": {
"codepoint": 62564,
"source": "fixedSvg/exception.svg"
},
"exclamation": {
"codepoint": 62565,
"source": "fixedSvg/exclamation.svg"
},
"exclamation-circle": {
"codepoint": 62566,
"source": "fixedSvg/exclamation-circle.svg"
},
"expand": {
"codepoint": 62567,
"source": "fixedSvg/expand.svg"
},
"expand-alt": {
"codepoint": 62568,
"source": "fixedSvg/expand-alt.svg"
},
"experiment": {
"codepoint": 62569,
"source": "fixedSvg/experiment.svg"
},
"export": {
"codepoint": 61837,
"source": "fixedSvg/export.svg"
},
"eye": {
"codepoint": 61838,
"source": "fixedSvg/eye.svg"
},
"eye-invisible": {
"codepoint": 62570,
"source": "fixedSvg/eye-invisible.svg"
},
"facebook": {
"codepoint": 61840,
"source": "fixedSvg/facebook.svg"
},
"fall": {
"codepoint": 62571,
"source": "fixedSvg/fall.svg"
},
"fast-backward": {
"codepoint": 62572,
"source": "fixedSvg/fast-backward.svg"
},
"fast-forward": {
"codepoint": 62573,
"source": "fixedSvg/fast-forward.svg"
},
"field-binary": {
"codepoint": 62574,
"source": "fixedSvg/field-binary.svg"
},
"field-number": {
"codepoint": 62575,
"source": "fixedSvg/field-number.svg"
},
"field-string": {
"codepoint": 62576,
"source": "fixedSvg/field-string.svg"
},
"field-time": {
"codepoint": 62577,
"source": "fixedSvg/field-time.svg"
},
"file": {
"codepoint": 62578,
"source": "fixedSvg/file.svg"
},
"file-add": {
"codepoint": 62579,
"source": "fixedSvg/file-add.svg"
},
"file-done": {
"codepoint": 62580,
"source": "fixedSvg/file-done.svg"
},
"file-excel": {
"codepoint": 62581,
"source": "fixedSvg/file-excel.svg"
},
"file-exclamation": {
"codepoint": 62582,
"source": "fixedSvg/file-exclamation.svg"
},
"file-gif": {
"codepoint": 62583,
"source": "fixedSvg/file-gif.svg"
},
"file-image": {
"codepoint": 62584,
"source": "fixedSvg/file-image.svg"
},
"file-jpg": {
"codepoint": 62585,
"source": "fixedSvg/file-jpg.svg"
},
"file-markdown": {
"codepoint": 62586,
"source": "fixedSvg/file-markdown.svg"
},
"file-pdf": {
"codepoint": 62587,
"source": "fixedSvg/file-pdf.svg"
},
"file-ppt": {
"codepoint": 62588,
"source": "fixedSvg/file-ppt.svg"
},
"file-protect": {
"codepoint": 62589,
"source": "fixedSvg/file-protect.svg"
},
"file-search": {
"codepoint": 62590,
"source": "fixedSvg/file-search.svg"
},
"file-sync": {
"codepoint": 62591,
"source": "fixedSvg/file-sync.svg"
},
"file-text": {
"codepoint": 62592,
"source": "fixedSvg/file-text.svg"
},
"file-unknown": {
"codepoint": 62593,
"source": "fixedSvg/file-unknown.svg"
},
"file-word": {
"codepoint": 62594,
"source": "fixedSvg/file-word.svg"
},
"file-zip": {
"codepoint": 62595,
"source": "fixedSvg/file-zip.svg"
},
"filter": {
"codepoint": 62596,
"source": "fixedSvg/filter.svg"
},
"fire": {
"codepoint": 62597,
"source": "fixedSvg/fire.svg"
},
"flag": {
"codepoint": 61868,
"source": "fixedSvg/flag.svg"
},
"folder": {
"codepoint": 61869,
"source": "fixedSvg/folder.svg"
},
"folder-add": {
"codepoint": 62598,
"source": "fixedSvg/folder-add.svg"
},
"folder-open": {
"codepoint": 62599,
"source": "fixedSvg/folder-open.svg"
},
"folder-view": {
"codepoint": 62600,
"source": "fixedSvg/folder-view.svg"
},
"font-colors": {
"codepoint": 62601,
"source": "fixedSvg/font-colors.svg"
},
"font-size": {
"codepoint": 62602,
"source": "fixedSvg/font-size.svg"
},
"fork": {
"codepoint": 62603,
"source": "fixedSvg/fork.svg"
},
"form": {
"codepoint": 62604,
"source": "fixedSvg/form.svg"
},
"format-painter": {
"codepoint": 62605,
"source": "fixedSvg/format-painter.svg"
},
"forward": {
"codepoint": 61878,
"source": "fixedSvg/forward.svg"
},
"frown": {
"codepoint": 62606,
"source": "fixedSvg/frown.svg"
},
"fullscreen": {
"codepoint": 62607,
"source": "fixedSvg/fullscreen.svg"
},
"fullscreen-exit": {
"codepoint": 62608,
"source": "fixedSvg/fullscreen-exit.svg"
},
"function": {
"codepoint": 62609,
"source": "fixedSvg/function.svg"
},
"fund": {
"codepoint": 62610,
"source": "fixedSvg/fund.svg"
},
"fund-projection-screen": {
"codepoint": 62611,
"source": "fixedSvg/fund-projection-screen.svg"
},
"fund-view": {
"codepoint": 62612,
"source": "fixedSvg/fund-view.svg"
},
"funnel-plot": {
"codepoint": 62613,
"source": "fixedSvg/funnel-plot.svg"
},
"gateway": {
"codepoint": 62614,
"source": "fixedSvg/gateway.svg"
},
"gif": {
"codepoint": 62615,
"source": "fixedSvg/gif.svg"
},
"gift": {
"codepoint": 62616,
"source": "fixedSvg/gift.svg"
},
"github": {
"codepoint": 61890,
"source": "fixedSvg/github.svg"
},
"gitlab": {
"codepoint": 62617,
"source": "fixedSvg/gitlab.svg"
},
"global": {
"codepoint": 62618,
"source": "fixedSvg/global.svg"
},
"gold": {
"codepoint": 62619,
"source": "fixedSvg/gold.svg"
},
"google": {
"codepoint": 62620,
"source": "fixedSvg/google.svg"
},
"google-plus": {
"codepoint": 62621,
"source": "fixedSvg/google-plus.svg"
},
"group": {
"codepoint": 62622,
"source": "fixedSvg/group.svg"
},
"harmony-o-s": {
"codepoint": 62806,
"source": "fixedSvg/harmony-o-s.svg"
},
"harmony-os": {
"codepoint": 62807,
"source": "fixedSvg/harmony-os.svg"
},
"hdd": {
"codepoint": 62623,
"source": "fixedSvg/hdd.svg"
},
"heart": {
"codepoint": 61898,
"source": "fixedSvg/heart.svg"
},
"heat-map": {
"codepoint": 62624,
"source": "fixedSvg/heat-map.svg"
},
"highlight": {
"codepoint": 62625,
"source": "fixedSvg/highlight.svg"
},
"history": {
"codepoint": 62626,
"source": "fixedSvg/history.svg"
},
"holder": {
"codepoint": 62627,
"source": "fixedSvg/holder.svg"
},
"home": {
"codepoint": 61903,
"source": "fixedSvg/home.svg"
},
"hourglass": {
"codepoint": 62628,
"source": "fixedSvg/hourglass.svg"
},
"html5": {
"codepoint": 62629,
"source": "fixedSvg/html5.svg"
},
"idcard": {
"codepoint": 62630,
"source": "fixedSvg/idcard.svg"
},
"ie": {
"codepoint": 62631,
"source": "fixedSvg/ie.svg"
},
"import": {
"codepoint": 62632,
"source": "fixedSvg/import.svg"
},
"inbox": {
"codepoint": 61909,
"source": "fixedSvg/inbox.svg"
},
"info": {
"codepoint": 61910,
"source": "fixedSvg/info.svg"
},
"info-circle": {
"codepoint": 62633,
"source": "fixedSvg/info-circle.svg"
},
"insert-row-above": {
"codepoint": 62634,
"source": "fixedSvg/insert-row-above.svg"
},
"insert-row-below": {
"codepoint": 62635,
"source": "fixedSvg/insert-row-below.svg"
},
"insert-row-left": {
"codepoint": 62636,
"source": "fixedSvg/insert-row-left.svg"
},
"insert-row-right": {
"codepoint": 62637,
"source": "fixedSvg/insert-row-right.svg"
},
"instagram": {
"codepoint": 61916,
"source": "fixedSvg/instagram.svg"
},
"insurance": {
"codepoint": 62638,
"source": "fixedSvg/insurance.svg"
},
"interaction": {
"codepoint": 62639,
"source": "fixedSvg/interaction.svg"
},
"issues-close": {
"codepoint": 62640,
"source": "fixedSvg/issues-close.svg"
},
"italic": {
"codepoint": 62641,
"source": "fixedSvg/italic.svg"
},
"java": {
"codepoint": 62808,
"source": "fixedSvg/java.svg"
},
"java-script": {
"codepoint": 62809,
"source": "fixedSvg/java-script.svg"
},
"key": {
"codepoint": 61921,
"source": "fixedSvg/key.svg"
},
"kubernetes": {
"codepoint": 62810,
"source": "fixedSvg/kubernetes.svg"
},
"laptop": {
"codepoint": 61922,
"source": "fixedSvg/laptop.svg"
},
"layout": {
"codepoint": 62642,
"source": "fixedSvg/layout.svg"
},
"left": {
"codepoint": 62643,
"source": "fixedSvg/left.svg"
},
"left-circle": {
"codepoint": 62644,
"source": "fixedSvg/left-circle.svg"
},
"left-square": {
"codepoint": 62645,
"source": "fixedSvg/left-square.svg"
},
"like": {
"codepoint": 62646,
"source": "fixedSvg/like.svg"
},
"line": {
"codepoint": 62647,
"source": "fixedSvg/line.svg"
},
"line-chart": {
"codepoint": 62648,
"source": "fixedSvg/line-chart.svg"
},
"line-height": {
"codepoint": 62649,
"source": "fixedSvg/line-height.svg"
},
"link": {
"codepoint": 61931,
"source": "fixedSvg/link.svg"
},
"linkedin": {
"codepoint": 61932,
"source": "fixedSvg/linkedin.svg"
},
"linux": {
"codepoint": 62811,
"source": "fixedSvg/linux.svg"
},
"loading": {
"codepoint": 62650,
"source": "fixedSvg/loading.svg"
},
"loading-3-quarters": {
"codepoint": 62651,
"source": "fixedSvg/loading-3-quarters.svg"
},
"lock": {
"codepoint": 61935,
"source": "fixedSvg/lock.svg"
},
"login": {
"codepoint": 61936,
"source": "fixedSvg/login.svg"
},
"logout": {
"codepoint": 62652,
"source": "fixedSvg/logout.svg"
},
"mac-command": {
"codepoint": 62653,
"source": "fixedSvg/mac-command.svg"
},
"mail": {
"codepoint": 61939,
"source": "fixedSvg/mail.svg"
},
"man": {
"codepoint": 61940,
"source": "fixedSvg/man.svg"
},
"medicine-box": {
"codepoint": 62654,
"source": "fixedSvg/medicine-box.svg"
},
"medium": {
"codepoint": 61942,
"source": "fixedSvg/medium.svg"
},
"medium-workmark": {
"codepoint": 62655,
"source": "fixedSvg/medium-workmark.svg"
},
"meh": {
"codepoint": 62656,
"source": "fixedSvg/meh.svg"
},
"menu": {
"codepoint": 61945,
"source": "fixedSvg/menu.svg"
},
"menu-fold": {
"codepoint": 62657,
"source": "fixedSvg/menu-fold.svg"
},
"menu-unfold": {
"codepoint": 62658,
"source": "fixedSvg/menu-unfold.svg"
},
"merge": {
"codepoint": 62812,
"source": "fixedSvg/merge.svg"
},
"merge-cells": {
"codepoint": 62659,
"source": "fixedSvg/merge-cells.svg"
},
"message": {
"codepoint": 61949,
"source": "fixedSvg/message.svg"
},
"minus": {
"codepoint": 61950,
"source": "fixedSvg/minus.svg"
},
"minus-circle": {
"codepoint": 62660,
"source": "fixedSvg/minus-circle.svg"
},
"minus-square": {
"codepoint": 62661,
"source": "fixedSvg/minus-square.svg"
},
"mobile": {
"codepoint": 61953,
"source": "fixedSvg/mobile.svg"
},
"money-collect": {
"codepoint": 62662,
"source": "fixedSvg/money-collect.svg"
},
"monitor": {
"codepoint": 62663,
"source": "fixedSvg/monitor.svg"
},
"moon": {
"codepoint": 62813,
"source": "fixedSvg/moon.svg"
},
"more": {
"codepoint": 62664,
"source": "fixedSvg/more.svg"
},
"muted": {
"codepoint": 62814,
"source": "fixedSvg/muted.svg"
},
"node-collapse": {
"codepoint": 62665,
"source": "fixedSvg/node-collapse.svg"
},
"node-expand": {
"codepoint": 62666,
"source": "fixedSvg/node-expand.svg"
},
"node-index": {
"codepoint": 62667,
"source": "fixedSvg/node-index.svg"
},
"notification": {
"codepoint": 61960,
"source": "fixedSvg/notification.svg"
},
"number": {
"codepoint": 62668,
"source": "fixedSvg/number.svg"
},
"one-to-one": {
"codepoint": 62669,
"source": "fixedSvg/one-to-one.svg"
},
"open-a-i": {
"codepoint": 62815,
"source": "fixedSvg/open-a-i.svg"
},
"open-ai": {
"codepoint": 62816,
"source": "fixedSvg/open-ai.svg"
},
"ordered-list": {
"codepoint": 62670,
"source": "fixedSvg/ordered-list.svg"
},
"paper-clip": {
"codepoint": 62671,
"source": "fixedSvg/paper-clip.svg"
},
"partition": {
"codepoint": 62672,
"source": "fixedSvg/partition.svg"
},
"pause": {
"codepoint": 62673,
"source": "fixedSvg/pause.svg"
},
"pause-circle": {
"codepoint": 62674,
"source": "fixedSvg/pause-circle.svg"
},
"pay-circle": {
"codepoint": 62675,
"source": "fixedSvg/pay-circle.svg"
},
"percentage": {
"codepoint": 62676,
"source": "fixedSvg/percentage.svg"
},
"phone": {
"codepoint": 61970,
"source": "fixedSvg/phone.svg"
},
"pic-center": {
"codepoint": 62677,
"source": "fixedSvg/pic-center.svg"
},
"pic-left": {
"codepoint": 62678,
"source": "fixedSvg/pic-left.svg"
},
"pic-right": {
"codepoint": 62679,
"source": "fixedSvg/pic-right.svg"
},
"picture": {
"codepoint": 62680,
"source": "fixedSvg/picture.svg"
},
"pie-chart": {
"codepoint": 61975,
"source": "fixedSvg/pie-chart.svg"
},
"pinterest": {
"codepoint": 62817,
"source": "fixedSvg/pinterest.svg"
},
"play-circle": {
"codepoint": 62681,
"source": "fixedSvg/play-circle.svg"
},
"play-square": {
"codepoint": 62682,
"source": "fixedSvg/play-square.svg"
},
"plus": {
"codepoint": 61978,
"source": "fixedSvg/plus.svg"
},
"plus-circle": {
"codepoint": 62683,
"source": "fixedSvg/plus-circle.svg"
},
"plus-square": {
"codepoint": 62684,
"source": "fixedSvg/plus-square.svg"
},
"pound": {
"codepoint": 62685,
"source": "fixedSvg/pound.svg"
},
"pound-circle": {
"codepoint": 62686,
"source": "fixedSvg/pound-circle.svg"
},
"poweroff": {
"codepoint": 62687,
"source": "fixedSvg/poweroff.svg"
},
"printer": {
"codepoint": 62688,
"source": "fixedSvg/printer.svg"
},
"product": {
"codepoint": 62818,
"source": "fixedSvg/product.svg"
},
"profile": {
"codepoint": 62689,
"source": "fixedSvg/profile.svg"
},
"project": {
"codepoint": 62690,
"source": "fixedSvg/project.svg"
},
"property-safety": {
"codepoint": 62691,
"source": "fixedSvg/property-safety.svg"
},
"pull-request": {
"codepoint": 62692,
"source": "fixedSvg/pull-request.svg"
},
"pushpin": {
"codepoint": 62693,
"source": "fixedSvg/pushpin.svg"
},
"python": {
"codepoint": 62819,
"source": "fixedSvg/python.svg"
},
"qq": {
"codepoint": 61990,
"source": "fixedSvg/qq.svg"
},
"qrcode": {
"codepoint": 62694,
"source": "fixedSvg/qrcode.svg"
},
"question": {
"codepoint": 62695,
"source": "fixedSvg/question.svg"
},
"question-circle": {
"codepoint": 62696,
"source": "fixedSvg/question-circle.svg"
},
"radar-chart": {
"codepoint": 62697,
"source": "fixedSvg/radar-chart.svg"
},
"radius-bottomleft": {
"codepoint": 62698,
"source": "fixedSvg/radius-bottomleft.svg"
},
"radius-bottomright": {
"codepoint": 62699,
"source": "fixedSvg/radius-bottomright.svg"
},
"radius-setting": {
"codepoint": 62700,
"source": "fixedSvg/radius-setting.svg"
},
"radius-upleft": {
"codepoint": 62701,
"source": "fixedSvg/radius-upleft.svg"
},
"radius-upright": {
"codepoint": 62702,
"source": "fixedSvg/radius-upright.svg"
},
"read": {
"codepoint": 62703,
"source": "fixedSvg/read.svg"
},
"reconciliation": {
"codepoint": 62704,
"source": "fixedSvg/reconciliation.svg"
},
"red-envelope": {
"codepoint": 62705,
"source": "fixedSvg/red-envelope.svg"
},
"reddit": {
"codepoint": 62706,
"source": "fixedSvg/reddit.svg"
},
"redo": {
"codepoint": 62707,
"source": "fixedSvg/redo.svg"
},
"reload": {
"codepoint": 62708,
"source": "fixedSvg/reload.svg"
},
"rest": {
"codepoint": 62709,
"source": "fixedSvg/rest.svg"
},
"retweet": {
"codepoint": 62007,
"source": "fixedSvg/retweet.svg"
},
"right": {
"codepoint": 62710,
"source": "fixedSvg/right.svg"
},
"right-circle": {
"codepoint": 62711,
"source": "fixedSvg/right-circle.svg"
},
"right-square": {
"codepoint": 62712,
"source": "fixedSvg/right-square.svg"
},
"rise": {
"codepoint": 62713,
"source": "fixedSvg/rise.svg"
},
"robot": {
"codepoint": 62714,
"source": "fixedSvg/robot.svg"
},
"rocket": {
"codepoint": 62013,
"source": "fixedSvg/rocket.svg"
},
"rollback": {
"codepoint": 62715,
"source": "fixedSvg/rollback.svg"
},
"rotate-left": {
"codepoint": 62716,
"source": "fixedSvg/rotate-left.svg"
},
"rotate-right": {
"codepoint": 62717,
"source": "fixedSvg/rotate-right.svg"
},
"ruby": {
"codepoint": 62820,
"source": "fixedSvg/ruby.svg"
},
"safety": {
"codepoint": 62718,
"source": "fixedSvg/safety.svg"
},
"safety-certificate": {
"codepoint": 62719,
"source": "fixedSvg/safety-certificate.svg"
},
"save": {
"codepoint": 62019,
"source": "fixedSvg/save.svg"
},
"scan": {
"codepoint": 62720,
"source": "fixedSvg/scan.svg"
},
"schedule": {
"codepoint": 62721,
"source": "fixedSvg/schedule.svg"
},
"scissor": {
"codepoint": 62722,
"source": "fixedSvg/scissor.svg"
},
"search": {
"codepoint": 62723,
"source": "fixedSvg/search.svg"
},
"security-scan": {
"codepoint": 62724,
"source": "fixedSvg/security-scan.svg"
},
"select": {
"codepoint": 62725,
"source": "fixedSvg/select.svg"
},
"send": {
"codepoint": 62726,
"source": "fixedSvg/send.svg"
},
"setting": {
"codepoint": 62727,
"source": "fixedSvg/setting.svg"
},
"shake": {
"codepoint": 62728,
"source": "fixedSvg/shake.svg"
},
"share-alt": {
"codepoint": 62729,
"source": "fixedSvg/share-alt.svg"
},
"shop": {
"codepoint": 62030,
"source": "fixedSvg/shop.svg"
},
"shopping": {
"codepoint": 62730,
"source": "fixedSvg/shopping.svg"
},
"shopping-cart": {
"codepoint": 62032,
"source": "fixedSvg/shopping-cart.svg"
},
"shrink": {
"codepoint": 62731,
"source": "fixedSvg/shrink.svg"
},
"signature": {
"codepoint": 62821,
"source": "fixedSvg/signature.svg"
},
"sisternode": {
"codepoint": 62732,
"source": "fixedSvg/sisternode.svg"
},
"sketch": {
"codepoint": 62733,
"source": "fixedSvg/sketch.svg"
},
"skin": {
"codepoint": 62734,
"source": "fixedSvg/skin.svg"
},
"skype": {
"codepoint": 62037,
"source": "fixedSvg/skype.svg"
},
"slack": {
"codepoint": 62735,
"source": "fixedSvg/slack.svg"
},
"slack-square": {
"codepoint": 62736,
"source": "fixedSvg/slack-square.svg"
},
"sliders": {
"codepoint": 62737,
"source": "fixedSvg/sliders.svg"
},
"small-dash": {
"codepoint": 62738,
"source": "fixedSvg/small-dash.svg"
},
"smile": {
"codepoint": 62739,
"source": "fixedSvg/smile.svg"
},
"snippets": {
"codepoint": 62740,
"source": "fixedSvg/snippets.svg"
},
"solution": {
"codepoint": 62741,
"source": "fixedSvg/solution.svg"
},
"sort-ascending": {
"codepoint": 62742,
"source": "fixedSvg/sort-ascending.svg"
},
"sort-descending": {
"codepoint": 62743,
"source": "fixedSvg/sort-descending.svg"
},
"sound": {
"codepoint": 62047,
"source": "fixedSvg/sound.svg"
},
"split-cells": {
"codepoint": 62744,
"source": "fixedSvg/split-cells.svg"
},
"spotify": {
"codepoint": 62822,
"source": "fixedSvg/spotify.svg"
},
"star": {
"codepoint": 62049,
"source": "fixedSvg/star.svg"
},
"step-backward": {
"codepoint": 62745,
"source": "fixedSvg/step-backward.svg"
},
"step-forward": {
"codepoint": 62746,
"source": "fixedSvg/step-forward.svg"
},
"stock": {
"codepoint": 62747,
"source": "fixedSvg/stock.svg"
},
"stop": {
"codepoint": 62748,
"source": "fixedSvg/stop.svg"
},
"strikethrough": {
"codepoint": 62749,
"source": "fixedSvg/strikethrough.svg"
},
"subnode": {
"codepoint": 62750,
"source": "fixedSvg/subnode.svg"
},
"sun": {
"codepoint": 62823,
"source": "fixedSvg/sun.svg"
},
"swap": {
"codepoint": 62056,
"source": "fixedSvg/swap.svg"
},
"swap-left": {
"codepoint": 62751,
"source": "fixedSvg/swap-left.svg"
},
"swap-right": {
"codepoint": 62752,
"source": "fixedSvg/swap-right.svg"
},
"switcher": {
"codepoint": 62753,
"source": "fixedSvg/switcher.svg"
},
"sync": {
"codepoint": 62754,
"source": "fixedSvg/sync.svg"
},
"table": {
"codepoint": 62755,
"source": "fixedSvg/table.svg"
},
"tablet": {
"codepoint": 62062,
"source": "fixedSvg/tablet.svg"
},
"tag": {
"codepoint": 62063,
"source": "fixedSvg/tag.svg"
},
"tags": {
"codepoint": 62756,
"source": "fixedSvg/tags.svg"
},
"taobao": {
"codepoint": 62757,
"source": "fixedSvg/taobao.svg"
},
"taobao-circle": {
"codepoint": 62758,
"source": "fixedSvg/taobao-circle.svg"
},
"team": {
"codepoint": 62759,
"source": "fixedSvg/team.svg"
},
"thunderbolt": {
"codepoint": 62760,
"source": "fixedSvg/thunderbolt.svg"
},
"tik-tok": {
"codepoint": 62824,
"source": "fixedSvg/tik-tok.svg"
},
"to-top": {
"codepoint": 62761,
"source": "fixedSvg/to-top.svg"
},
"tool": {
"codepoint": 62762,
"source": "fixedSvg/tool.svg"
},
"trademark": {
"codepoint": 62763,
"source": "fixedSvg/trademark.svg"
},
"trademark-circle": {
"codepoint": 62764,
"source": "fixedSvg/trademark-circle.svg"
},
"transaction": {
"codepoint": 62765,
"source": "fixedSvg/transaction.svg"
},
"translation": {
"codepoint": 62766,
"source": "fixedSvg/translation.svg"
},
"trophy": {
"codepoint": 62075,
"source": "fixedSvg/trophy.svg"
},
"truck": {
"codepoint": 62825,
"source": "fixedSvg/truck.svg"
},
"twitch": {
"codepoint": 62826,
"source": "fixedSvg/twitch.svg"
},
"twitter": {
"codepoint": 62076,
"source": "fixedSvg/twitter.svg"
},
"underline": {
"codepoint": 62767,
"source": "fixedSvg/underline.svg"
},
"undo": {
"codepoint": 62768,
"source": "fixedSvg/undo.svg"
},
"ungroup": {
"codepoint": 62769,
"source": "fixedSvg/ungroup.svg"
},
"unlock": {
"codepoint": 62770,
"source": "fixedSvg/unlock.svg"
},
"unordered-list": {
"codepoint": 62771,
"source": "fixedSvg/unordered-list.svg"
},
"up": {
"codepoint": 62772,
"source": "fixedSvg/up.svg"
},
"up-circle": {
"codepoint": 62773,
"source": "fixedSvg/up-circle.svg"
},
"up-square": {
"codepoint": 62774,
"source": "fixedSvg/up-square.svg"
},
"upload": {
"codepoint": 62085,
"source": "fixedSvg/upload.svg"
},
"usb": {
"codepoint": 62775,
"source": "fixedSvg/usb.svg"
},
"user": {
"codepoint": 62087,
"source": "fixedSvg/user.svg"
},
"user-add": {
"codepoint": 62776,
"source": "fixedSvg/user-add.svg"
},
"user-delete": {
"codepoint": 62777,
"source": "fixedSvg/user-delete.svg"
},
"user-switch": {
"codepoint": 62778,
"source": "fixedSvg/user-switch.svg"
},
"usergroup-add": {
"codepoint": 62779,
"source": "fixedSvg/usergroup-add.svg"
},
"usergroup-delete": {
"codepoint": 62780,
"source": "fixedSvg/usergroup-delete.svg"
},
"verified": {
"codepoint": 62781,
"source": "fixedSvg/verified.svg"
},
"vertical-align-bottom": {
"codepoint": 62782,
"source": "fixedSvg/vertical-align-bottom.svg"
},
"vertical-align-middle": {
"codepoint": 62783,
"source": "fixedSvg/vertical-align-middle.svg"
},
"vertical-align-top": {
"codepoint": 62784,
"source": "fixedSvg/vertical-align-top.svg"
},
"vertical-left": {
"codepoint": 62785,
"source": "fixedSvg/vertical-left.svg"
},
"vertical-right": {
"codepoint": 62786,
"source": "fixedSvg/vertical-right.svg"
},
"video-camera": {
"codepoint": 62099,
"source": "fixedSvg/video-camera.svg"
},
"video-camera-add": {
"codepoint": 62787,
"source": "fixedSvg/video-camera-add.svg"
},
"wallet": {
"codepoint": 62101,
"source": "fixedSvg/wallet.svg"
},
"warning": {
"codepoint": 62102,
"source": "fixedSvg/warning.svg"
},
"wechat": {
"codepoint": 62788,
"source": "fixedSvg/wechat.svg"
},
"wechat-work": {
"codepoint": 62827,
"source": "fixedSvg/wechat-work.svg"
},
"weibo": {
"codepoint": 62789,
"source": "fixedSvg/weibo.svg"
},
"weibo-circle": {
"codepoint": 62790,
"source": "fixedSvg/weibo-circle.svg"
},
"weibo-square": {
"codepoint": 62791,
"source": "fixedSvg/weibo-square.svg"
},
"whats-app": {
"codepoint": 62792,
"source": "fixedSvg/whats-app.svg"
},
"wifi": {
"codepoint": 62793,
"source": "fixedSvg/wifi.svg"
},
"windows": {
"codepoint": 62794,
"source": "fixedSvg/windows.svg"
},
"woman": {
"codepoint": 62795,
"source": "fixedSvg/woman.svg"
},
"x": {
"codepoint": 62828,
"source": "fixedSvg/x.svg"
},
"yahoo": {
"codepoint": 62796,
"source": "fixedSvg/yahoo.svg"
},
"youtube": {
"codepoint": 62112,
"source": "fixedSvg/youtube.svg"
},
"yuque": {
"codepoint": 62797,
"source": "fixedSvg/yuque.svg"
},
"zhihu": {
"codepoint": 62798,
"source": "fixedSvg/zhihu.svg"
},
"zoom-in": {
"codepoint": 62799,
"source": "fixedSvg/zoom-in.svg"
},
"zoom-out": {
"codepoint": 62800,
"source": "fixedSvg/zoom-out.svg"
}
},
"options": {
"autowidth": false,
"config": false,
"copyright": "",
"css3": false,
"css_selector": ".icon-{{glyph}}",
"debug": false,
"font_ascent": 448,
"font_descent": 64,
"font_design_size": 16,
"font_em": 512,
"font_name": "AntDesign",
"force": true,
"input": {
"templates": "fixedSvg",
"vectors": "fixedSvg"
},
"no_hash": true,
"output": {
"css": "AntDesign",
"fonts": "AntDesign",
"preview": "AntDesign"
},
"preprocessor_path": null,
"quiet": false,
"templates": [
"css"
]
},
"templates": [
"AntDesign/AntDesign.css"
]
}
================================================
FILE: packages/ant-design/.yo-rc.json
================================================
{
"generator-react-native-vector-icons": {
"packageName": "ant-design",
"upstreamFont": "@ant-design/icons-svg",
"buildSteps": {
"fixSVGPaths": {
"location": "../../node_modules/@ant-design/icons-svg/inline-namespaced-svg/outlined"
},
"fontCustom": {
"location": "fixedSvg",
"cleanup": true
},
"glyphmap": {
"mode": "css",
"cleanup": true
}
},
"versions": [
{
"rnvi": "12.0.0",
"upstream": "4.4.2"
}
]
}
}
================================================
FILE: packages/ant-design/CHANGELOG.md
================================================
## 12.5.0 (2026-03-20)
### 🚀 Features
- expose static export for icon families ([#1880](https://github.com/oblador/react-native-vector-icons/pull/1880))
### ❤️ Thank You
- Vojtech Novak @vonovak
## 12.4.3 (2026-03-17)
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.4.2
## 12.4.2 (2026-03-10)
### 🚀 Features
- **generator:** auto-update upstream versions in .yo-rc.json during generation ([#1873](https://github.com/oblador/react-native-vector-icons/pull/1873))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.4.1
### ❤️ Thank You
- John Ferlito @johnf
## 12.4.1 (2026-02-25)
### 🩹 Fixes
- add targetSdkVersion to avoid READ_PHONE_STATE permission ([#1866](https://github.com/oblador/react-native-vector-icons/pull/1866), [#1861](https://github.com/oblador/react-native-vector-icons/issues/1861))
### ❤️ Thank You
- Phecda Su
## 12.4.0 (2025-11-01)
### 🚀 Features
- upgrade FontAwesome to version 7 with new package strucutre ([#1857](https://github.com/oblador/react-native-vector-icons/pull/1857))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.4.0
### ❤️ Thank You
- John Ferlito @johnf
## 12.3.0 (2025-08-03)
### 🚀 Features
- export font files and glyphmaps ([#1827](https://github.com/oblador/react-native-vector-icons/pull/1827))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.3.0
### ❤️ Thank You
- Vojtech Novak @vonovak
## 12.2.0 (2025-07-20)
### 🚀 Features
- add 'use client' directive for RSC ([#1809](https://github.com/oblador/react-native-vector-icons/pull/1809))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.2.0
### ❤️ Thank You
- Vojtech Novak @vonovak
## 12.1.0 (2025-07-12)
### 🚀 Features
- export types for icon names ([#1761](https://github.com/oblador/react-native-vector-icons/pull/1761))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.1.0
### ❤️ Thank You
- John Ferlito @johnf
## 12.0.2 (2025-06-15)
### 🩹 Fixes
- new Ion Icons (no font changes) ([#1774](https://github.com/oblador/react-native-vector-icons/pull/1774))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.0.2
### ❤️ Thank You
- John Ferlito @johnf
## 12.0.1 (2025-06-15)
### 🩹 Fixes
- try to use root project's compile sdk to avoid aar metadata incompatability ([#1745](https://github.com/oblador/react-native-vector-icons/pull/1745))
- remove @fortawesome repo leakage ([#1767](https://github.com/oblador/react-native-vector-icons/pull/1767))
- convert directory scripts to typescript ([#1765](https://github.com/oblador/react-native-vector-icons/pull/1765))
- updated incorrect backlink in the Changelog. ([a2b967c](https://github.com/oblador/react-native-vector-icons/commit/a2b967c))
- **ionicons:** upgrade Ionicons to 8.0.8 ([#1742](https://github.com/oblador/react-native-vector-icons/pull/1742))
### 🧱 Updated Dependencies
- Updated @react-native-vector-icons/common to 12.0.1
### ❤️ Thank You
- Alexander Kucheryavenko @Red1tum
- John Ferlito @johnf
- Md. Jayed Hasan @JayedHasan232
# 12.0.0 (2025-05-04)
### 🚀 Features
- ⚠️ make font packages responsible for font copying ([#1711](https://github.com/oblador/react-native-vector-icons/pull/1711))
- add lucide icon ([#1702](https://github.com/oblador/react-native-vector-icons/pull/1702))
### 🩹 Fixes
- upgrade octicons to 19.14.0 ([#1691](https://github.com/oblador/react-native-vector-icons/pull/1691))
- upgrade fontawesome6 to 6.7.2 ([#1690](https://github.com/oblador/react-native-vector-icons/pull/1690))
- mac osx detection in glyphmap script ([2967ce99](https://github.com/oblador/react-native-vector-icons/commit/2967ce99))
### ⚠️ Breaking Changes
- ⚠️ make font packages responsible for font copying ([#1711](https://github.com/oblador/react-native-vector-icons/pull/1711))
### ❤️ Thank You
- Chanphirom Sok @chanphiromsok
- John Ferlito @johnf
================================================
FILE: packages/ant-design/README.md
================================================
# React Native Vector Icons - Ant Design
Ant Design font for React Native Vector Icons
See the [React Native Vector Icons README](../../README.md) for more details.
## Installation
```sh
npm install @react-native-vector-icons/ant-design
```
## Usage
```jsx
import { AntDesign } from '@react-native-vector-icons/ant-design';
// ...
<AntDesign name="house" color="#ff0000" size={20} />
```
## Versions
Prior to version 12, the version of this font package tracked the upstream version.
The table below tracks which font version is included in each package version.
| RNVI version | Upstream version |
| ------------ | ---------------- |
| > 12.0.0 | 4.4.2 |
## Contributing
See the [contributing guide](../../CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.
## License
MIT
================================================
FILE: packages/ant-design/android/build.gradle
================================================
// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates
// If you're contributing to react-native-vector-icons, make the change there, otherwise it'll be lost
def isNewArchitectureEnabled() {
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
}
def safeExtGet(prop, fallback) {
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}
apply plugin: "com.android.library"
apply plugin: "kotlin-android"
if (isNewArchitectureEnabled()) {
apply plugin: "com.facebook.react"
}
def supportsNamespace() {
def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
def major = parsed[0].toInteger()
def minor = parsed[1].toInteger()
// Namespace support was added in 7.3.0
return (major == 7 && minor >= 3) || major >= 8
}
android {
if (supportsNamespace()) {
namespace "com.reactnativevectoricons.ant_design"
sourceSets {
main {
manifest.srcFile "src/main/AndroidManifestNew.xml"
}
}
}
compileSdkVersion safeExtGet('compileSdkVersion', 31)
defaultConfig {
targetSdkVersion safeExtGet('targetSdkVersion', 31)
minSdkVersion safeExtGet('minSdkVersion', 24)
}
}
dependencies {
implementation "com.facebook.react:react-native:+"
}
if (isNewArchitectureEnabled()) {
react {
jsRootDir = file("../src/")
libraryName = "VectorIconsAntDesign"
codegenJavaPackageName = "com.reactnativevectoricons.ant_design"
}
}
android.sourceSets.main.assets.srcDirs += file("$buildDir/intermediates/RNVI-ant-design")
task copyFonts(type: Copy) {
from "../fonts"
include "*.ttf"
into "${buildDir}/intermediates/RNVI-ant-design/fonts"
eachFile { println "(RNVI:ant-design) Copying font ${it.file}" }
}
preBuild.dependsOn(copyFonts)
================================================
FILE: packages/ant-design/android/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.reactnativevectoricons.ant_design">
</manifest>
================================================
FILE: packages/ant-design/android/src/main/AndroidManifestNew.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
================================================
FILE: packages/ant-design/android/src/main/java/VectorIconsAntDesignPackage.kt
================================================
package com.reactnativevectoricons.ant_design
import com.facebook.react.TurboReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.module.model.ReactModuleInfoProvider
class VectorIconsAntDesignPackage : TurboReactPackage() {
override fun getModule(
name: String,
reactContext: ReactApplicationContext,
): NativeModule? = null
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider =
ReactModuleInfoProvider {
mapOf()
}
}
================================================
FILE: packages/ant-design/babel.config.js
================================================
// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates
// If you're contributing to react-native-vector-icons, make the change there, otherwise it'll be lost
module.exports = {
presets: [['module:react-native-builder-bob/babel-preset', { modules: 'commonjs' }]],
};
================================================
FILE: packages/ant-design/glyphmaps/AntDesign.json
================================================
{
"account-book": 62454,
"aim": 62455,
"alert": 62456,
"alibaba": 62457,
"align-center": 62458,
"align-left": 61701,
"align-right": 61702,
"alipay": 62459,
"alipay-circle": 62460,
"aliwangwang": 62461,
"aliyun": 62462,
"amazon": 62463,
"android": 62464,
"ant-cloud": 62465,
"ant-design": 62466,
"apartment": 62467,
"api": 62468,
"apple": 62469,
"appstore": 62470,
"appstore-add": 62471,
"area-chart": 62472,
"arrow-down": 61717,
"arrow-left": 61718,
"arrow-right": 61719,
"arrow-up": 61720,
"arrows-alt": 62473,
"audio": 62474,
"audio-muted": 62475,
"audit": 62476,
"backward": 62477,
"baidu": 62801,
"bank": 62478,
"bar-chart": 62479,
"barcode": 62480,
"bars": 62481,
"behance": 61730,
"behance-square": 62482,
"bell": 61732,
"bg-colors": 62483,
"bilibili": 62802,
"block": 61734,
"bold": 62484,
"book": 61736,
"border": 62485,
"border-bottom": 62486,
"border-horizontal": 62487,
"border-inner": 62488,
"border-left": 62489,
"border-outer": 62490,
"border-right": 62491,
"border-top": 62492,
"border-verticle": 62493,
"borderless-table": 62494,
"box-plot": 62495,
"branches": 62496,
"bug": 61749,
"build": 62497,
"bulb": 62498,
"calculator": 61752,
"calendar": 61753,
"camera": 61754,
"car": 62499,
"caret-down": 62500,
"caret-left": 62501,
"caret-right": 62502,
"caret-up": 62503,
"carry-out": 62504,
"check": 61761,
"check-circle": 62505,
"check-square": 62506,
"chrome": 62507,
"ci": 62508,
"ci-circle": 62509,
"clear": 62510,
"clock-circle": 62511,
"close": 62512,
"close-circle": 62513,
"close-square": 62514,
"cloud": 61772,
"cloud-download": 62515,
"cloud-server": 62516,
"cloud-sync": 62517,
"cloud-upload": 62518,
"cluster": 62519,
"code": 61778,
"code-sandbox": 62520,
"codepen": 62521,
"codepen-circle": 62522,
"coffee": 62523,
"column-height": 62524,
"column-width": 62525,
"comment": 62526,
"compass": 61786,
"compress": 62527,
"console-sql": 62528,
"contacts": 62529,
"container": 62530,
"control": 62531,
"copy": 61792,
"copyright": 62532,
"copyright-circle": 62533,
"credit-card": 61795,
"crown": 62534,
"customer-service": 62535,
"dash": 62536,
"dashboard": 62537,
"database": 61800,
"delete": 62538,
"delete-column": 62539,
"delete-row": 62540,
"delivered-procedure": 62541,
"deployment-unit": 62542,
"desktop": 62543,
"diff": 62544,
"dingding": 62545,
"dingtalk": 62546,
"disconnect": 62547,
"discord": 62803,
"dislike": 62548,
"docker": 62804,
"dollar": 62549,
"dollar-circle": 62550,
"dot-chart": 62551,
"dot-net": 62805,
"double-left": 62552,
"double-right": 62553,
"down": 62554,
"down-circle": 62555,
"down-square": 62556,
"download": 61820,
"drag": 62557,
"dribbble": 61822,
"dribbble-square": 62558,
"dropbox": 61824,
"edit": 61825,
"ellipsis": 62559,
"enter": 62560,
"environment": 62561,
"euro": 62562,
"euro-circle": 62563,
"exception": 62564,
"exclamation": 62565,
"exclamation-circle": 62566,
"expand": 62567,
"expand-alt": 62568,
"experiment": 62569,
"export": 61837,
"eye": 61838,
"eye-invisible": 62570,
"facebook": 61840,
"fall": 62571,
"fast-backward": 62572,
"fast-forward": 62573,
"field-binary": 62574,
"field-number": 62575,
"field-string": 62576,
"field-time": 62577,
"file": 62578,
"file-add": 62579,
"file-done": 62580,
"file-excel": 62581,
"file-exclamation": 62582,
"file-gif": 62583,
"file-image": 62584,
"file-jpg": 62585,
"file-markdown": 62586,
"file-pdf": 62587,
"file-ppt": 62588,
"file-protect": 62589,
"file-search": 62590,
"file-sync": 62591,
"file-text": 62592,
"file-unknown": 62593,
"file-word": 62594,
"file-zip": 62595,
"filter": 62596,
"fire": 62597,
"flag": 61868,
"folder": 61869,
"folder-add": 62598,
"folder-open": 62599,
"folder-view": 62600,
"font-colors": 62601,
"font-size": 62602,
"fork": 62603,
"form": 62604,
"format-painter": 62605,
"forward": 61878,
"frown": 62606,
"fullscreen": 62607,
"fullscreen-exit": 62608,
"function": 62609,
"fund": 62610,
"fund-projection-screen": 62611,
"fund-view": 62612,
"funnel-plot": 62613,
"gateway": 62614,
"gif": 62615,
"gift": 62616,
"github": 61890,
"gitlab": 62617,
"global": 62618,
"gold": 62619,
"google": 62620,
"google-plus": 62621,
"group": 62622,
"harmony-o-s": 62806,
"harmony-os": 62807,
"hdd": 62623,
"heart": 61898,
"heat-map": 62624,
"highlight": 62625,
"history": 62626,
"holder": 62627,
"home": 61903,
"hourglass": 62628,
"html5": 62629,
"idcard": 62630,
"ie": 62631,
"import": 62632,
"inbox": 61909,
"info": 61910,
"info-circle": 62633,
"insert-row-above": 62634,
"insert-row-below": 62635,
"insert-row-left": 62636,
"insert-row-right": 62637,
"instagram": 61916,
"insurance": 62638,
"interaction": 62639,
"issues-close": 62640,
"italic": 62641,
"java": 62808,
"java-script": 62809,
"key": 61921,
"kubernetes": 62810,
"laptop": 61922,
"layout": 62642,
"left": 62643,
"left-circle": 62644,
"left-square": 62645,
"like": 62646,
"line": 62647,
"line-chart": 62648,
"line-height": 62649,
"link": 61931,
"linkedin": 61932,
"linux": 62811,
"loading": 62650,
"loading-3-quarters": 62651,
"lock": 61935,
"login": 61936,
"logout": 62652,
"mac-command": 62653,
"mail": 61939,
"man": 61940,
"medicine-box": 62654,
"medium": 61942,
"medium-workmark": 62655,
"meh": 62656,
"menu": 61945,
"menu-fold": 62657,
"menu-unfold": 62658,
"merge": 62812,
"merge-cells": 62659,
"message": 61949,
"minus": 61950,
"minus-circle": 62660,
"minus-square": 62661,
"mobile": 61953,
"money-collect": 62662,
"monitor": 62663,
"moon": 62813,
"more": 62664,
"muted": 62814,
"node-collapse": 62665,
"node-expand": 62666,
"node-index": 62667,
"notification": 61960,
"number": 62668,
"one-to-one": 62669,
"open-a-i": 62815,
"open-ai": 62816,
"ordered-list": 62670,
"paper-clip": 62671,
"partition": 62672,
"pause": 62673,
"pause-circle": 62674,
"pay-circle": 62675,
"percentage": 62676,
"phone": 61970,
"pic-center": 62677,
"pic-left": 62678,
"pic-right": 62679,
"picture": 62680,
"pie-chart": 61975,
"pinterest": 62817,
"play-circle": 62681,
"play-square": 62682,
"plus": 61978,
"plus-circle": 62683,
"plus-square": 62684,
"pound": 62685,
"pound-circle": 62686,
"poweroff": 62687,
"printer": 62688,
"product": 62818,
"profile": 62689,
"project": 62690,
"property-safety": 62691,
"pull-request": 62692,
"pushpin": 62693,
"python": 62819,
"qq": 61990,
"qrcode": 62694,
"question": 62695,
"question-circle": 62696,
"radar-chart": 62697,
"radius-bottomleft": 62698,
"radius-bottomright": 62699,
"radius-setting": 62700,
"radius-upleft": 62701,
"radius-upright": 62702,
"read": 62703,
"reconciliation": 62704,
"red-envelope": 62705,
"reddit": 62706,
"redo": 62707,
"reload": 62708,
"rest": 62709,
"retweet": 62007,
"right": 62710,
"right-circle": 62711,
"right-square": 62712,
"rise": 62713,
"robot": 62714,
"rocket": 62013,
"rollback": 62715,
"rotate-left": 62716,
"rotate-right": 62717,
"ruby": 62820,
"safety": 62718,
"safety-certificate": 62719,
"save": 62019,
"scan": 62720,
"schedule": 62721,
"scissor": 62722,
"search": 62723,
"security-scan": 62724,
"select": 62725,
"send": 62726,
"setting": 62727,
"shake": 62728,
"share-alt": 62729,
"shop": 62030,
"shopping": 62730,
"shopping-cart": 62032,
"shrink": 62731,
"signature": 62821,
"sisternode": 62732,
"sketch": 62733,
"skin": 62734,
"skype": 62037,
"slack": 62735,
"slack-square": 62736,
"sliders": 62737,
"small-dash": 62738,
"smile": 62739,
"snippets": 62740,
"solution": 62741,
"sort-ascending": 62742,
"sort-descending": 62743,
"sound": 62047,
"split-cells": 62744,
"spotify": 62822,
"star": 62049,
"step-backward": 62745,
"step-forward": 62746,
"stock": 62747,
"stop": 62748,
"strikethrough": 62749,
"subnode": 62750,
"sun": 62823,
"swap": 62056,
"swap-left": 62751,
"swap-right": 62752,
"switcher": 62753,
"sync": 62754,
"table": 62755,
"tablet": 62062,
"tag": 62063,
"tags": 62756,
"taobao": 62757,
"taobao-circle": 62758,
"team": 62759,
"thunderbolt": 62760,
"tik-tok": 62824,
"to-top": 62761,
"tool": 62762,
"trademark": 62763,
"trademark-circle": 62764,
"transaction": 62765,
"translation": 62766,
"trophy": 62075,
"truck": 62825,
"twitch": 62826,
"twitter": 62076,
"underline": 62767,
"undo": 62768,
"ungroup": 62769,
"unlock": 62770,
"unordered-list": 62771,
"up": 62772,
"up-circle": 62773,
"up-square": 62774,
"upload": 62085,
"usb": 62775,
"user": 62087,
"user-add": 62776,
"user-delete": 62777,
"user-switch": 62778,
"usergroup-add": 62779,
"usergroup-delete": 62780,
"verified": 62781,
"vertical-align-bottom": 62782,
"vertical-align-middle": 62783,
"vertical-align-top": 62784,
"vertical-left": 62785,
"vertical-right": 62786,
"video-camera": 62099,
"video-camera-add": 62787,
"wallet": 62101,
"warning": 62102,
"wechat": 62788,
"wechat-work": 62827,
"weibo": 62789,
"weibo-circle": 62790,
"weibo-square": 62791,
"whats-app": 62792,
"wifi": 62793,
"windows": 62794,
"woman": 62795,
"x": 62828,
"yahoo": 62796,
"youtube": 62112,
"yuque": 62797,
"zhihu": 62798,
"zoom-in": 62799,
"zoom-out": 62800
}
================================================
FILE: packages/ant-design/package.json
================================================
{
"name": "@react-native-vector-icons/ant-design",
"version": "12.5.0",
"description": "Ant Design font for react native vector icons",
"source": "./src/index.ts",
"main": "./lib/commonjs/index.js",
"module": "./lib/module/index.js",
"types": "./lib/typescript/commonjs/src/index.d.ts",
"exports": {
".": {
"import": {
"types": "./lib/typescript/module/src/index.d.ts",
"default": "./lib/module/index.js"
},
"require": {
"types": "./lib/typescript/commonjs/src/index.d.ts",
"default": "./lib/commonjs/index.js"
}
},
"./static": {
"import": {
"types": "./lib/typescript/module/src/static.d.ts",
"default": "./lib/module/static.js"
},
"require": {
"types": "./lib/typescript/commonjs/src/static.d.ts",
"default": "./lib/commonjs/static.js"
}
},
"./glyphmaps/*.json": "./glyphmaps/*.json",
"./fonts/*.ttf": "./fonts/*.ttf"
},
"files": [
"src",
"lib",
"glyphmaps",
"fonts",
"android",
"ios",
"cpp",
"*.podspec",
"!ios/build",
"!android/build",
"!android/gradle",
"!android/gradlew",
"!android/gradlew.bat",
"!android/local.properties",
"!**/__tests__",
"!**/__fixtures__",
"!**/__mocks__",
"!**/.*"
],
"scripts": {
"clean": "del-cli android/build ios/build lib",
"prepare": "bob build && ../../scripts/fix-glyphmaps.mjs",
"watch": "onchange 'src/**' --initial -- pnpm run prepare"
},
"keywords": [
"react-native",
"ios",
"android",
"osx",
"windows",
"macos",
"react-component",
"react-native-component",
"react",
"mobile",
"ui",
"icon",
"icons",
"vector",
"retina",
"font",
"react-native-vector-icons-icon",
"ant-design"
],
"repository": {
"type": "git",
"url": "https://github.com/oblador/react-native-vector-icons.git",
"directory": "packages/ant-design"
},
"author": {
"name": "Joel Arvidsson",
"email": "joel@oblador.se"
},
"license": "MIT",
"bugs": {
"url": "https://github.com/oblador/react-native-vector-icons/issues"
},
"homepage": "https://github.com/oblador/react-native-vector-icons",
"publishConfig": {
"registry": "https://registry.npmjs.org/",
"access": "public"
},
"dependencies": {
"@react-native-vector-icons/common": "workspace:^"
},
"devDependencies": {
"@types/react": "^19.1.0",
"del-cli": "^6.0.0",
"onchange": "^7.1.0",
"react-native-builder-bob": "^0.35.2",
"typescript": "^5.7.2",
"@ant-design/icons-svg": "4.4.2"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
},
"engines": {
"node": ">= 18.0.0"
},
"react-native-builder-bob": {
"source": "src",
"output": "lib",
"targets": [
[
"commonjs",
{
"esm": true
}
],
[
"module",
{
"esm": true
}
],
[
"typescript",
{
"project": "tsconfig.build.json",
"esm": true
}
]
]
},
"create-react-native-library": {
"type": "library",
"version": "0.41.2"
}
}
================================================
FILE: packages/ant-design/react-native-vector-icons-ant-design.podspec
================================================
# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates
# If you're contributing to react-native-vector-icons, make the change there, otherwise it'll be lost
require 'json'
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
Pod::Spec.new do |s|
s.name = 'react-native-vector-icons-ant-design'
s.version = package['version']
s.summary = package['description']
s.homepage = package['homepage']
s.license = package['license']
s.authors = package['author']
s.platforms = { ios: min_ios_version_supported, tvos: '9.0', visionos: '1.0' }
s.source = { git: package['repository']['url'], tag: "v#{s.version}" }
s.resources = 'fonts/*.ttf'
end
================================================
FILE: packages/ant-design/src/index.ts
================================================
'use client';
/**
* This is a generated file. If you modify it manually, your changes will be lost!
* This file was generated from packages/generator-react-native-vector-icons/src/app/templates
* If you're contributing to react-native-vector-icons, make the change there; otherwise it'll be lost
*
* AntDesign icon set component.
* Usage: <AntDesign name="icon-name" size={20} color="#4F8EF7" />
*/
import { createIconSet } from '@react-native-vector-icons/common';
import glyphMap from '../glyphmaps/AntDesign.json';
export const AntDesign = createIconSet(glyphMap, {
postScriptName: 'AntDesign',
fontFileName: 'AntDesign.ttf',
fontSource: require('../fonts/AntDesign.ttf'), // eslint-disable-line @typescript-eslint/no-require-imports, global-require
});
export type AntDesignIconName = keyof typeof glyphMap;
/** @alias */
export default AntDesign;
================================================
FILE: packages/ant-design/src/static.ts
================================================
'use client';
/**
* This is a generated file. If you modify it manually, your changes will be lost!
* This file was generated from packages/generator-react-native-vector-icons/src/app/templates
* If you're contributing to react-native-vector-icons, make the change there; otherwise it'll be lost
*
* AntDesign icon set component.
* Usage: <AntDesign name="icon-name" size={20} color="#4F8EF7" />
*/
import { createIconSet } from '@react-native-vector-icons/common';
import glyphMap from '../glyphmaps/AntDesign.json';
export const AntDesign = createIconSet(glyphMap, {
postScriptName: 'AntDesign',
fontFileName: 'AntDesign.ttf',
});
export type AntDesignIconName = keyof typeof glyphMap;
/** @alias */
export default AntDesign;
================================================
FILE: packages/ant-design/tsconfig.build.json
================================================
{
"extends": "./tsconfig",
"exclude": ["example", "lib"]
}
================================================
FILE: packages/ant-design/tsconfig.json
================================================
{
"compilerOptions": {
"rootDir": ".",
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"jsx": "react-jsx",
"lib": ["ESNext"],
"module": "ESNext",
"moduleResolution": "Bundler",
"noEmit": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitUseStrict": false,
"noStrictGenericChecks": false,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"strict": true,
"target": "ESNext",
"verbatimModuleSyntax": true
}
}
================================================
FILE: packages/codemod/CHANGELOG.md
================================================
## 12.3.2 (2026-03-20)
### 🚀 Features
- **codemod:** support static imports ([#1884](https://github.com/oblador/react-native-vector-icons/pull/1884))
### ❤️ Thank You
- John Ferlito @johnf
- Vojtech Novak @vonovak
## 12.3.1 (2026-03-10)
### 🩹 Fixes
- **codemod:** update provenance details ([#1871](https://github.com/oblador/react-native-vector-icons/pull/1871))
### ❤️ Thank You
- John Ferlito @johnf
## 12.3.0 (2025-11-01)
### 🩹 Fixes
- update codemod simple-line-icon repository name ([#1856](https://github.com/oblador/react-native-vector-icons/pull/1856))
### ❤️ Thank You
- Mark @feyst
## 12.2.0 (2025-08-03)
### 🚀 Features
- **codemod:** add codemod for expo/vector-icons ([#1815](https://github.com/oblador/react-native-vector-icons/pull/1815))
### 🩹 Fixes
- **codemod:** add git status check, use npx expo install to add deps ([#1818](https://github.com/oblador/react-native-vector-icons/pull/1818))
### ❤️ Thank You
- Vojtech Novak @vonovak
## 12.1.0 (2025-07-12)
This was a version bump only for @react-native-vector-icons/codemod to align it with other projects, there were no code changes.
## 12.0.2 (2025-06-15)
### 🩹 Fixes
- new Ion Icons (no font changes) ([#1774](https://github.com/oblador/react-native-vector-icons/pull/1774))
### ❤️ Thank You
- John Ferlito @johnf
## 12.0.1 (2025-06-15)
### 🩹 Fixes
- remove @fortawesome repo leakage ([#1767](https://github.com/oblador/react-native-vector-icons/pull/1767))
- convert directory scripts to typescript ([#1765](https://github.com/oblador/react-native-vector-icons/pull/1765))
- updated incorrect backlink in the Changelog. ([a2b967c](https://github.com/oblador/react-native-vector-icons/commit/a2b967c))
- **ionicons:** upgrade Ionicons to 8.0.8 ([#1742](https://github.com/oblador/react-native-vector-icons/pull/1742))
### ❤️ Thank You
- John Ferlito @johnf
- Md. Jayed Hasan @JayedHasan232
# 12.0.0 (2025-05-04)
### 🚀 Features
- ⚠️ make font packages responsible for font copying ([#1711](https://github.com/oblador/react-native-vector-icons/pull/1711))
- add lucide icon ([#1702](https://github.com/oblador/react-native-vector-icons/pull/1702))
### 🩹 Fixes
- upgrade octicons to 19.14.0 ([#1691](https://github.com/oblador/react-native-vector-icons/pull/1691))
- upgrade fontawesome6 to 6.7.2 ([#1690](https://github.com/oblador/react-native-vector-icons/pull/1690))
### ⚠️ Breaking Changes
- ⚠️ make font packages responsible for font copying ([#1711](https://github.com/oblador/react-native-vector-icons/pull/1711))
### ❤️ Thank You
- Chanphirom Sok @chanphiromsok
- John Ferlito @johnf
================================================
FILE: packages/codemod/package.json
================================================
{
"name": "@react-native-vector-icons/codemod",
"version": "12.3.2",
"description": "Tool to help users migrate from react-native-vector-icons to @react-native-vector-icons/*",
"main": "lib/commonjs/index",
"module": "lib/module/index",
"types": "lib/typescript/src/index.d.ts",
"source": "src/index",
"bin": {
"react-native-vector-icons-codemod": "./lib/commonjs/index.js"
},
"files": [
"src",
"lib",
"!**/__tests__",
"!**/__fixtures__",
"!**/__mocks__",
"!**/.*"
],
"scripts": {
"clean": "del-cli lib",
"prepare": "bob build",
"test": "jest",
"watch": "onchange 'src/**' --initial -- pnpm run prepare"
},
"jest": {
"preset": "ts-jest",
"testEnvironment": "node",
"transform": {
"^.+\\.tsx?$": [
"ts-jest",
{
"tsconfig": {
"verbatimModuleSyntax": false
}
}
]
}
},
"keywords": [
"react-native",
"ios",
"android",
"osx",
"windows",
"macos",
"react-component",
"react-native-component",
"react",
"mobile",
"ui",
"icon",
"icons",
"vector",
"retina",
"font",
"migration"
],
"author": {
"name": "Joel Arvidsson",
"email": "joel@oblador.se"
},
"homepage": "https://github.com/react-native-vector-icons/react-native-vector-icons",
"bugs": {
"url": "https://github.com/react-native-vector-icons/react-native-vector-icons/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/oblador/react-native-vector-icons.git",
"directory": "packages/codemod"
},
"license": "MIT",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"dependencies": {
"jscodeshift": "^17.1.1",
"plist": "^3.1.0",
"resolve-from": "^5.0.0",
"semver": "^7.7.1"
},
"devDependencies": {
"@types/jest": "^30.0.0",
"@types/jscodeshift": "^0.12.0",
"@types/plist": "^3.0.5",
"@types/semver": "^7",
"del-cli": "^6.0.0",
"jest": "^29.7.0",
"onchange": "^7.1.0",
"react-native-builder-bob": "^0.35.2",
"ts-jest": "^29.2.5",
"typescript": "^5.7.2"
},
"engines": {
"node": ">= 18.0.0"
},
"react-native-builder-bob": {
"source": "src",
"output": "lib",
"targets": [
"commonjs",
"module",
[
"typescript",
{
"project": "tsconfig.json"
}
]
]
}
}
================================================
FILE: packages/codemod/src/11.0/icon-style-transform.ts
================================================
import type { Collection, JSCodeshift, JSXAttribute } from 'jscodeshift';
const componentNames = ['FontAwesome5', 'FontAwesome6', 'FontAwesome5Pro', 'FontAwesome6Pro', 'Icon'];
const iconStyles = ['brand', 'solid', 'light', 'thin', 'duotone', 'sharp', 'sharpSolid', 'sharpLight'];
export default (j: JSCodeshift, root: Collection) =>
root
.find(j.JSXOpeningElement)
.forEach((path) => {
if (path.node.name.type !== 'JSXIdentifier') {
return;
}
if (!componentNames.includes(path.node.name.name)) {
return;
}
const { node } = path;
iconStyles.forEach((style) => {
const styleAttr = node.attributes?.find((attr) => attr.type === 'JSXAttribute' && attr.name.name === style) as
| JSXAttribute
| undefined;
if (!styleAttr) {
return;
}
styleAttr.name = j.jsxIdentifier('iconStyle');
styleAttr.value = j.stringLiteral(style);
});
})
.toSource();
================================================
FILE: packages/codemod/src/11.0/import-transform.ts
================================================
import type { Collection, JSCodeshift } from 'jscodeshift';
const imports: [string, string][] = [
['react-native-vector-icons/AntDesign', '@react-native-vector-icons/ant-design/static'],
['react-native-vector-icons/Entypo', '@react-native-vector-icons/entypo/static'],
['react-native-vector-icons/EvilIcons', '@react-native-vector-icons/evil-icons/static'],
['react-native-vector-icons/Feather', '@react-native-vector-icons/feather/static'],
['react-native-vector-icons/FontAwesome5', '@react-native-vector-icons/fontawesome5/static'],
['react-native-vector-icons/FontAwesome5Pro', '@react-native-vector-icons/fontawesome5-pro/static'],
['react-native-vector-icons/FontAwesome6', '@react-native-vector-icons/fontawesome6/static'],
['react-native-vector-icons/FontAwesome6Pro', '@react-native-vector-icons/fontawesome6-pro/static'],
['react-native-vector-icons/FontAwesome', '@react-native-vector-icons/fontawesome/static'],
['react-native-vector-icons/Fontisto', '@react-native-vector-icons/fontisto/static'],
['react-native-vector-icons/Foundation', '@react-native-vector-icons/foundation/static'],
['react-native-vector-icons/Ionicons', '@react-native-vector-icons/ionicons/static'],
['react-native-vector-icons/MaterialCommunityIcons', '@react-native-vector-icons/material-design-icons/static'],
['react-native-vector-icons/MaterialIcons', '@react-native-vector-icons/material-icons/static'],
['react-native-vector-icons/Octicons', '@react-native-vector-icons/octicons/static'],
['react-native-vector-icons/SimpleLineIcons', '@react-native-vector-icons/SimpleLineIcons/static'],
['react-native-vector-icons/Zocial', '@react-native-vector-icons/zocial/static'],
];
export default (j: JSCodeshift, root: Collection, r: (msg: string) => void) => {
const pkgs = new Set<string>();
root
.find(j.ImportDeclaration)
.forEach((path) => {
imports.forEach(([from, to]) => {
if (path.node.source.value === from) {
path.node.source.value = to;
pkgs.add(to);
}
});
})
.toSource();
// biome-ignore lint/suspicious/useIterableCallbackReturn: biome bug??
pkgs.forEach((pkg) => r(`DEP_FOUND: ${pkg}`));
};
================================================
FILE: packages/codemod/src/11.0/index.ts
================================================
#!/usr/bin/env node
/* eslint-disable no-console */
import { exec } from 'node:child_process';
import path from 'node:path';
import infoPlistTransform from './info-plist';
import packageJsonTransform from './package-json';
import removeFonts from './remove-fonts';
const dir = process.argv[2];
if (!dir) {
console.error('Please specify a directory to transform');
process.exit(1);
}
const transformFilePath = path.join(__dirname, 'transform.js');
const cmd = `jscodeshift --transform ${transformFilePath} --extensions js,ts,jsx,tsx --parser tsx --ignore-pattern '**/node_modules/**' ${dir}`;
const proc = exec(cmd, { env: { ...process.env, FORCE_COLOR: 'true' } });
const pkgs = new Set<string>();
proc.stdout?.on('data', (data: string) => {
console.log(data);
const lines = data.split('\n');
lines.forEach((line) => {
if (line.match('DEP_FOUND: ')) {
pkgs.add(line.replace(/.*DEP_FOUND: /, '').trim());
}
});
});
proc.stderr?.on('data', (data) => {
console.error(data);
});
proc.on('exit', () => {
packageJsonTransform(pkgs);
infoPlistTransform();
removeFonts();
});
================================================
FILE: packages/codemod/src/11.0/info-plist.ts
================================================
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import plist from 'plist';
const fonts = [
'AntDesign.ttf',
'Entypo.ttf',
'EvilIcons.ttf',
'Feather.ttf',
'FontAwesome5_Brands.ttf',
'FontAwesome5_Regular.ttf',
'FontAwesome5_Solid.ttf',
'FontAwesome6_Brands.ttf',
'FontAwesome6_Regular.ttf',
'FontAwesome6_Solid.ttf',
'FontAwesome.ttf',
'Fontisto.ttf',
'Foundation.ttf',
'Ionicons.ttf',
'MaterialCommunityIcons.ttf',
'MaterialIcons.ttf',
'Octicons.ttf',
'SimpleLineIcons.ttf',
'Zocial.ttf',
'FontAwesome5_Pro_Light.ttf',
'FontAwesome5_Pro_Brands.ttf',
'FontAwesome5_Pro_Regular.ttf',
'FontAwesome5_Pro_Solid.ttf"',
'FontAwesome6_Pro_Light.ttf',
'FontAwesome6_Pro_Brands.ttf',
'FontAwesome6_Pro_Regular.ttf',
'FontAwesome6_Pro_Solid.ttf',
'FontAwesome6_Pro_Duotone.ttf',
'FontAwesome6_Pro_Thin.ttf',
'FontAwesome6_Pro_Sharp_Solid.ttf',
'FontAwesome6_Pro_Sharp_Light.ttf',
'FontAwesome6_Pro_Sharp_Regular.ttf',
];
export default () => {
const file = execSync('find ios -name Info.plist | grep -v Tests').toString().trim();
const obj = plist.parse(fs.readFileSync(file, 'utf8')) as { UIAppFonts: string[] };
// delete fonts that match list
obj.UIAppFonts = obj.UIAppFonts.filter((font) => !fonts.includes(font));
fs.writeFileSync(file, plist.build(obj));
};
================================================
FILE: packages/codemod/src/11.0/package-json.ts
================================================
import fs from 'node:fs';
import { getVersion } from '../getVersion';
export default async (pkgs: Set<string>) => {
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
const { dependencies } = packageJson;
const versionPromises = Array.from(pkgs).map(async (pkg) => {
if (!dependencies[pkg]) {
dependencies[pkg] = await getVersion(pkg);
}
});
await Promise.all(versionPromises);
if (pkgs.size > 0 && dependencies['react-native-vector-icons']) {
dependencies['react-native-vector-icons'] = undefined;
dependencies['@react-native-vector-icons/common'] = await getVersion('@react-native-vector-icons/common');
fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2));
}
};
================================================
FILE: packages/codemod/src/11.0/remove-fonts.ts
================================================
/* eslint-disable no-console */
import { execSync } from 'node:child_process';
import fs from 'node:fs';
const deletableFonts = [
'AntDesign.ttf',
'Entypo.ttf',
'EvilIcons.ttf',
'Feather.ttf',
'FontAwesome5_Brands.ttf',
'FontAwesome5_Regular.ttf',
'FontAwesome5_Solid.ttf',
'FontAwesome6_Brands.ttf',
'FontAwesome6_Regular.ttf',
'FontAwesome6_Solid.ttf',
'FontAwesome.ttf',
'Fontisto.ttf',
'Foundation.ttf',
'Ionicons.ttf',
'MaterialCommunityIcons.ttf',
'MaterialIcons.ttf',
'Octicons.ttf',
'SimpleLineIcons.ttf',
'Zocial.ttf',
];
const moveableFonts = [
'FontAwesome5_Pro_Light.ttf',
'FontAwesome5_Pro_Brands.ttf',
'FontAwesome5Pro_Brands.ttf',
'FontAwesome5_Pro_Regular.ttf',
'FontAwesome5_Pro_Solid.ttf"',
'FontAwesome6_Pro_Light.ttf',
'FontAwesome6_Pro_Brands.ttf',
'FontAwesome6_Pro_Regular.ttf',
'FontAwesome6_Pro_Solid.ttf',
'FontAwesome6_Pro_Duotone.ttf',
'FontAwesome6_Pro_Thin.ttf',
'FontAwesome6_Pro_Sharp_Solid.ttf',
'FontAwesome6_Pro_Sharp_Light.ttf',
'FontAwesome6_Pro_Sharp_Regular.ttf',
];
export default () => {
const files = execSync('find android/app/src/main/assets/fonts -name "*.ttf"')
.toString()
.split('\n')
.map((line) => line.trim());
console.log('Removing unused fonts');
const toDelete = files.filter((file) => deletableFonts.includes(file.replace(/.*\//, '')));
toDelete.forEach((file) => {
console.log(` - Removing ${file}`);
fs.rmSync(file);
});
console.log('Moving Pro fonts');
const toMove = files.filter((file) => moveableFonts.includes(file.replace(/.*\//, '')));
fs.mkdirSync('rnvi-fonts', { recursive: true });
toMove.forEach((file) => {
console.log(` - Removing ${file}`);
fs.renameSync(file, `rnvi-fonts/${file.replace(/.*\//, '')}`);
});
};
================================================
FILE: packages/codemod/src/11.0/transform.ts
================================================
import type { API, FileInfo } from 'jscodeshift';
import iconStyleTransform from './icon-style-transform';
import importTransform from './import-transform';
export default (file: FileInfo, api: API) => {
const j = api.jscodeshift;
const r = api.report;
const root = j(file.source);
// Apply each transform
importTransform(j, root, r);
iconStyleTransform(j, root);
return root.toSource();
};
================================================
FILE: packages/codemod/src/12.0/index.ts
================================================
#!/usr/bin/env node
/* eslint-disable no-console */
import { exec } from 'node:child_process';
import path from 'node:path';
import moveFonts from './move-fonts';
import packageJsonTransform from './package-json';
const dir = process.argv[2];
if (!dir) {
console.error('Please specify a directory to transform');
process.exit(1);
}
const transformFilePath = path.join(__dirname, 'transform.js');
const cmd = `jscodeshift --transform ${transformFilePath} --extensions js,ts,jsx,tsx --parser tsx --ignore-pattern '**/node_modules/**' ${dir}`;
const proc = exec(cmd, { env: { ...process.env, FORCE_COLOR: 'true' } });
proc.stdout?.on('data', (data: string) => {
console.log(data);
});
proc.stderr?.on('data', (data) => {
console.error(data);
});
proc.on('exit', () => {
packageJsonTransform();
moveFonts(dir);
});
================================================
FILE: packages/codemod/src/12.0/move-fonts.ts
================================================
/* eslint-disable no-console */
import fs, { mkdirSync, readdirSync } from 'node:fs';
import path from 'node:path';
const moveableFonts: Record<string, string> = {
'FontAwesome5_Pro_Light.ttf': 'fontawesome5-pro',
'FontAwesome5_Pro_Brands.ttf': 'fontawesome5-pro',
'FontAwesome5Pro_Brands.ttf': 'fontawesome5-pro',
'FontAwesome5_Pro_Regular.ttf': 'fontawesome5-pro',
'FontAwesome5_Pro_Solid.ttf"': 'fontawesome5-pro',
'FontAwesome6_Pro_Light.ttf': 'fontawesome5-pro',
'FontAwesome6_Pro_Brands.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Regular.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Solid.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Duotone.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Thin.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Sharp_Solid.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Sharp_Light.ttf': 'fontawesome6-pro',
'FontAwesome6_Pro_Sharp_Regular.ttf': 'fontawesome6-pro',
};
export default (rootDir: string) => {
const packageJsonPath = path.join(rootDir, 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
const rnviConfig = packageJson.reactNativeVectorIcons || { fontDir: 'rnvi-fonts' };
const fontDir = rnviConfig.fontDir || 'rnvi-fonts';
const files = readdirSync(fontDir);
console.log('Moving Pro fonts');
files.forEach((file) => {
const fontPath = path.join(fontDir, file);
const dir = moveableFonts[file];
if (!dir) {
console.log(` - Skipping ${file}`);
return;
}
console.log(` - Moving ${file} to ${dir}`);
mkdirSync(path.join(fontDir, dir), { recursive: true });
fs.renameSync(fontPath, `${fontDir}/${dir}/${file}`);
});
};
================================================
FILE: packages/codemod/src/12.0/package-json.ts
================================================
import fs from 'node:fs';
export default () => {
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
const { dependencies } = packageJson;
if (dependencies['@react-native-vector-icons/common']) {
dependencies['@react-native-vector-icons/common'] = undefined;
fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2));
}
};
================================================
FILE: packages/codemod/src/12.0/transform.ts
================================================
import type { API, FileInfo } from 'jscodeshift';
export default (file: FileInfo, api: API) => {
const j = api.jscodeshift;
// const r = api.report;
const root = j(file.source);
// Apply each transform
return root.toSource();
};
================================================
FILE: packages/codemod/src/__tests__/11.0-transform.test.ts
================================================
import type { API, FileInfo } from 'jscodeshift';
import jscodeshift from 'jscodeshift';
import transform from '../11.0/transform';
function applyTransform(source: string) {
const reported: string[] = [];
const fileInfo: FileInfo = { path: 'test.tsx', source };
const api: API = {
jscodeshift: jscodeshift.withParser('tsx'),
j: jscodeshift.withParser('tsx'),
stats: () => {},
report: (msg: string) => reported.push(msg),
};
const output = transform(fileInfo, api);
return { output, reported };
}
describe('11.0 transform', () => {
it('transforms an import and reports the dependency', () => {
const input = `import Ionicons from 'react-native-vector-icons/Ionicons';`;
const { output, reported } = applyTransform(input);
expect(output).toBe('import Ionicons from "@react-native-vector-icons/ionicons/static";');
expect(reported).toContain('DEP_FOUND: @react-native-vector-icons/ionicons/static');
});
it('transforms multiple imports from different icon sets', () => {
const input = [
`import Ionicons from 'react-native-vector-icons/Ionicons';`,
`import FontAwesome from 'react-native-vector-icons/FontAwesome';`,
].join('\n');
const { output, reported } = applyTransform(input);
expect(output).toContain('from "@react-native-vector-icons/ionicons/static"');
expect(output).toContain('from "@react-native-vector-icons/fontawesome/static"');
expect(reported).toHaveLength(2);
});
it('transforms renamed packages correctly', () => {
const cases: [string, string][] = [
['MaterialCommunityIcons', 'material-design-icons'],
['MaterialIcons', 'material-icons'],
['AntDesign', 'ant-design'],
['EvilIcons', 'evil-icons'],
];
for (const [oldName, newName] of cases) {
const input = `import Icon from 'react-native-vector-icons/${oldName}';`;
const { output } = applyTransform(input);
expect(output).toContain(`from "@react-native-vector-icons/${newName}/static"`);
}
});
it('preserves the local import name', () => {
const input = `import MyIcons from 'react-native-vector-icons/Entypo';`;
const { output } = applyTransform(input);
expect(output).toContain('import MyIcons from');
});
it('does not transform unrelated imports', () => {
const input = `import React from 'react';`;
const { output, reported } = applyTransform(input);
expect(output).toBe(input);
expect(reported).toHaveLength(0);
});
it('converts FontAwesome icon style boolean props to iconStyle', () => {
const input = `
import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
const App = () => <FontAwesome5 name="heart" solid />;
`;
const { output } = applyTransform(input);
expect(output).toContain('iconStyle="solid"');
expect(output).not.toContain(' solid />');
});
it('converts brand prop to iconStyle on FontAwesome6', () => {
const input = `
import FontAwesome6 from 'react-native-vector-icons/FontAwesome6';
const App = () => <FontAwesome6 name="github" brand />;
`;
const { output } = applyTransform(input);
expect(output).toContain('iconStyle="brand"');
expect(output).toContain('from "@react-native-vector-icons/fontawesome6/static"');
});
it('converts pro icon styles (light, thin, duotone, sharp)', () => {
const styles = ['light', 'thin', 'duotone', 'sharp', 'sharpSolid', 'sharpLight'];
for (const style of styles) {
const input = `
import FontAwesome6Pro from 'react-native-vector-icons/FontAwesome6Pro';
const App = () => <FontAwesome6Pro name="star" ${style} />;
`;
const { output } = applyTransform(input);
expect(output).toContain(`iconStyle="${style}"`);
}
});
it('does not convert icon style props on non-FontAwesome components', () => {
const input = `
import Ionicons from 'react-native-vector-icons/Ionicons';
const App = () => <Ionicons name="heart" solid />;
`;
const { output } = applyTransform(input);
// solid should remain untouched since Ionicons is not a FA component
expect(output).toContain('solid');
expect(output).not.toContain('iconStyle');
});
it('handles import transform and icon style transform together', () => {
const input = `
import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
import Ionicons from 'react-native-vector-icons/Ionicons';
const App = () => (
<>
<FontAwesome5 name="heart" solid size={24} />
<Ionicons name="home" size={24} />
</>
);
`;
const { output, reported } = applyTransform(input);
// imports transformed
expect(output).toContain('from "@react-native-vector-icons/fontawesome5/static"');
expect(output).toContain('from "@react-native-vector-icons/ionicons/static"');
// icon style transformed on FA5 only
expect(output).toContain('iconStyle="solid"');
// deps reported
expect(reported).toHaveLength(2);
});
});
================================================
FILE: packages/codemod/src/__tests__/expo-import-transform.test.ts
================================================
import type { API, FileInfo, Options } from 'jscodeshift';
import jscodeshift from 'jscodeshift';
import transform from '../expo/import-transform';
// Mock newFontImports to avoid file system side effects
jest.mock('../expo/newFontImports', () => ({
addNewFontImport: jest.fn(),
}));
function applyTransform(source: string, options: Options = {}): string | undefined {
const fileInfo: FileInfo = {
path: 'test.tsx',
source,
};
const api: API = {
jscodeshift: jscodeshift.withParser('tsx'),
j: jscodeshift.withParser('tsx'),
stats: () => {},
report: () => {},
};
return transform(fileInfo, api, options);
}
describe('expo import-transform', () => {
describe('named imports from @expo/vector-icons', () => {
it('splits named imports into multiple default imports', () => {
const input = `import { Ionicons, MaterialIcons } from '@expo/vector-icons';`;
const output = applyTransform(input);
expect(output).toContain('import Ionicons from "@react-native-vector-icons/ionicons"');
expect(output).toContain('import MaterialIcons from "@react-native-vector-icons/material-icons"');
});
it('appends /static when useStatic is true', () => {
const input = `import { Ionicons, MaterialIcons } from '@expo/vector-icons';`;
const output = applyTransform(input, { useStatic: true });
expect(output).toContain('import Ionicons from "@react-native-vector-icons/ionicons/static"');
expect(output).toContain('import MaterialIcons from "@react-native-vector-icons/material-icons/static"');
});
});
describe('default imports from @expo/vector-icons/<Family>', () => {
it('transforms a default import from a specific family', () => {
const input = `import Ionicons from '@expo/vector-icons/Ionicons';`;
const output = applyTransform(input);
expect(output).toBe('import Ionicons from "@react-native-vector-icons/ionicons";');
});
it('transforms a default import with /static when useStatic is true', () => {
const input = `import Feather from '@expo/vector-icons/Feather';`;
const output = applyTransform(input, { useStatic: true });
expect(output).toBe('import Feather from "@react-native-vector-icons/feather/static";');
});
it('strips /build/ from import paths', () => {
const input = `import Ionicons from '@expo/vector-icons/build/Ionicons';`;
const output = applyTransform(input);
expect(output).toBe('import Ionicons from "@react-native-vector-icons/ionicons";');
});
});
describe('non-icon-family imports', () => {
it('transforms createIconSetFromIcoMoon', () => {
const input = `import createIconSetFromIcoMoon from '@expo/vector-icons/createIconSetFromIcoMoon';`;
const output = applyTransform(input);
expect(output).toBe('import createIconSetFromIcoMoon from "@react-native-vector-icons/icomoon";');
});
it('transforms createIconSetFromFontello', () => {
const input = `import createIconSetFromFontello from '@expo/vector-icons/createIconSetFromFontello';`;
const output = applyTransform(input);
expect(output).toBe('import createIconSetFromFontello from "@react-native-vector-icons/fontello";');
});
});
describe('edge cases', () => {
it('returns undefined when no @expo/vector-icons imports are found', () => {
const input = `import React from 'react';`;
const output = applyTransform(input);
expect(output).toBeUndefined();
});
it('preserves the local import name for default imports', () => {
const input = `import MyIcons from '@expo/vector-icons/Entypo';`;
const output = applyTransform(input);
expect(output).toBe('import MyIcons from "@react-native-vector-icons/entypo";');
});
it('transforms all supported icon families', () => {
const families = [
['AntDesign', 'ant-design'],
['Entypo', 'entypo'],
['EvilIcons', 'evil-icons'],
['Feather', 'feather'],
['FontAwesome', 'fontawesome'],
['FontAwesome5', 'fontawesome5'],
['FontAwesome6', 'fontawesome6'],
['Fontisto', 'fontisto'],
['Foundation', 'foundation'],
['Ionicons', 'ionicons'],
['MaterialCommunityIcons', 'material-design-icons'],
['MaterialIcons', 'material-icons'],
['Octicons', 'octicons'],
['SimpleLineIcons', 'simple-line-icons'],
['Zocial', 'zocial'],
];
for (const [oldName, newName] of families) {
const input = `import Icon from '@expo/vector-icons/${oldName}';`;
const output = applyTransform(input);
expect(output).toContain(`from "@react-native-vector-icons/${newName}"`);
}
});
it('throws for unknown icon family in named import', () => {
const input = `import { UnknownFont } from '@expo/vector-icons';`;
expect(() => applyTransform(input)).toThrow('No mapping found for @expo/vector-icons/UnknownFont');
});
it('throws for unknown icon family in default import', () => {
const input = `import UnknownFont from '@expo/vector-icons/UnknownFont';`;
expect(() => applyTransform(input)).toThrow('No mapping found for @expo/vector-icons/UnknownFont');
});
});
});
================================================
FILE: packages/codemod/src/checkGitStatus.ts
================================================
/* eslint-disable no-console */
import { execSync } from 'node:child_process';
export function checkGitStatus(dir: string): void {
try {
// Check if the directory is a git repository
execSync('git rev-parse --git-dir', { cwd: dir, stdio: 'pipe' });
// Check if there are any uncommitted changes
const status = execSync('git status --porcelain', {
cwd: dir,
encoding: 'utf8',
});
if (status.trim()) {
console.error('❌ Git working directory not clean. Commit or stash your changes before running the codemod.');
console.error('Uncommitted changes:');
console.error(status);
process.exit(1);
}
console.log('✅ Git repository is clean');
} catch {
// If git rev-parse fails, the directory is not a git repository
console.log('! Directory is not a git repository. Proceeding without git status check.');
}
}
================================================
FILE: packages/codemod/src/expo/import-transform.ts
================================================
import type { API, FileInfo, Options } from 'jscodeshift';
import { addNewFontImport } from './newFontImports';
const importsMap: Record<string, string> = {
'@expo/vector-icons/AntDesign': '@react-native-vector-icons/ant-design',
'@expo/vector-icons/Entypo': '@react-native-vector-icons/entypo',
'@expo/vector-icons/EvilIcons': '@react-native-vector-icons/evil-icons',
'@expo/vector-icons/Feather': '@react-native-vector-icons/feather',
'@expo/vector-icons/FontAwesome5': '@react-native-vector-icons/fontawesome5',
'@expo/vector-icons/FontAwesome5Pro': '@react-native-vector-icons/fontawesome5-pro',
'@expo/vector-icons/FontAwesome6': '@react-native-vector-icons/fontawesome6',
'@expo/vector-icons/FontAwesome6Pro': '@react-native-vector-icons/fontawesome6-pro',
'@expo/vector-icons/FontAwesome': '@react-native-vector-icons/fontawesome',
'@expo/vector-icons/Fontisto': '@react-native-vector-icons/fontisto',
'@expo/vector-icons/Foundation': '@react-native-vector-icons/foundation',
'@expo/vector-icons/Ionicons': '@react-native-vector-icons/ionicons',
'@expo/vector-icons/MaterialCommunityIcons': '@react-native-vector-icons/material-design-icons',
'@expo/vector-icons/MaterialIcons': '@react-native-vector-icons/material-icons',
'@expo/vector-icons/Octicons': '@react-native-vector-icons/octicons',
'@expo/vector-icons/SimpleLineIcons': '@react-native-vector-icons/simple-line-icons',
'@expo/vector-icons/Zocial': '@react-native-vector-icons/zocial',
// non-icon-family imports
'@expo/vector-icons/createIconSetFromIcoMoon': '@react-native-vector-icons/icomoon',
'@expo/vector-icons/createIconSetFromFontello': '@react-native-vector-icons/fontello',
};
// prefer transforms to default imports as they are easier to get right than named imports
export default function transform(fileInfo: FileInfo, api: API, options: Options) {
const j = api.jscodeshift;
const root = j(fileInfo.source);
const useStatic = options.useStatic === true;
const newFontImports = new Set<string>();
const resolveImportPath = (basePath: string): string => {
return useStatic ? `${basePath}/static` : basePath;
};
// Transform import statements from @expo/vector-icons
root.find(j.ImportDeclaration).forEach((path) => {
const { source } = path.value;
// Handle named imports: import { Ionicons, MaterialIcons } from '@expo/vector-icons'
if (source.type === 'StringLiteral' && source.value === '@expo/vector-icons') {
const { specifiers } = path.value;
if (specifiers) {
const newImports = specifiers
.map((spec) => {
if (spec.type === 'ImportSpecifier') {
const fontName = spec.imported.name;
// Find the correct mapping for this font
const oldName = `@expo/vector-icons/${fontName}`;
const newFontPath = importsMap[oldName];
if (!newFontPath) {
throw new Error(`No mapping found for ${oldName}. Migrate this import manually.`);
}
newFontImports.add(newFontPath);
return j.importDeclaration(
[j.importDefaultSpecifier(j.identifier(fontName))],
j.literal(resolveImportPath(newFontPath)),
);
}
return null;
})
.filter(Boolean);
// Replace the original import with new imports
if (newImports.length > 0) {
j(path).replaceWith(newImports);
}
}
}
// Handle default imports: import Ionicons from '@expo/vector-icons/Ionicons'
// or 'import Ionicons from '@expo/vector-icons/build/Ionicons'
if (
source.type === 'StringLiteral' &&
typeof source.value === 'string' &&
source.value.startsWith('@expo/vector-icons/')
) {
const importPath = source.value.replace('/build/', '/');
const newFontPath = importsMap[importPath];
if (!newFontPath) {
throw new Error(`No mapping found for ${source.value}. Migrate this import manually.`);
}
newFontImports.add(newFontPath);
// Replace with new import
source.value = resolveImportPath(newFontPath);
}
});
if (newFontImports.size > 0) {
addNewFontImport(Array.from(newFontImports));
}
return newFontImports.size > 0 ? root.toSource() : undefined;
}
================================================
FILE: packages/codemod/src/expo/index.ts
================================================
/* eslint-disable no-console */
import { run as jscodeshift } from 'jscodeshift/src/Runner';
import resolveFrom from 'resolve-from';
import { updatePackageJson } from './package-json';
async function shouldUseStaticImports(dir: string): Promise<boolean> {
const hasExpoDevClient = resolveFrom.silent(dir, 'expo-dev-client/package.json') != null;
if (hasExpoDevClient) {
console.log(
'\nDetected expo-dev-client. Defaulting to /static imports (e.g. @react-native-vector-icons/material-icons/static).',
);
} else {
console.log(
'\nNo expo-dev-client detected (assuming Expo Go). Using default imports (e.g. @react-native-vector-icons/material-icons).',
);
}
return hasExpoDevClient;
}
export async function runExpoMigration(dir: string) {
const transformPath = require.resolve('./import-transform');
process.chdir(dir);
console.log(`Running Expo codemod in directory: ${dir}`);
const useStatic = await shouldUseStaticImports(dir);
await jscodeshift(transformPath, ['.'], {
verbose: process.env.VERBOSE === 'true' || process.env.VERBOSE === '1',
extensions: 'js,jsx,ts,tsx',
parser: 'tsx',
ignorePattern: '**/node_modules/**',
useStatic,
});
await updatePackageJson(dir);
}
================================================
FILE: packages/codemod/src/expo/newFontImports.ts
================================================
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
const tmpFile = path.join(os.tmpdir(), 'rnvi-codemod-new-imports.txt');
export function addNewFontImport(fontNames: string[]) {
// this should be atomic and safe to call from multiple processes
fs.appendFileSync(tmpFile, fontNames.join(os.EOL) + os.EOL);
}
export function getNewFontImports(): string[] {
if (!fs.existsSync(tmpFile)) {
return [];
}
const content = fs.readFileSync(tmpFile, 'utf8');
fs.unlinkSync(tmpFile);
return Array.from(new Set(content.split(os.EOL).filter(Boolean)));
}
================================================
FILE: packages/codemod/src/expo/package-json.ts
================================================
/* eslint-disable no-console */
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { getNewFontImports } from './newFontImports';
export async function updatePackageJson(dir: string) {
const packageJsonPath = path.join(dir, 'package.json');
if (!fs.existsSync(packageJsonPath)) {
console.error('package.json not found');
return;
}
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
if (!packageJson) {
console.error('package.json is not valid');
return;
}
if (packageJson.dependencies?.['@expo/vector-icons']) {
delete packageJson.dependencies['@expo/vector-icons'];
}
if (!packageJson.dependencies) {
packageJson.dependencies = {};
}
const newFontImports = getNewFontImports();
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + os.EOL);
execSync(`npx expo install ${newFontImports.join(' ')}`, {
cwd: dir,
stdio: 'inherit',
});
console.log(
`@expo/vector-icons was removed from package.json. As a replacement, the following ${newFontImports.length} packages were added: ${newFontImports.join(', ')}.`,
);
console.log('If you need to, you can add @expo/vector-icons back by running `npx expo install @expo/vector-icons`');
}
================================================
FILE: packages/codemod/src/getVersion.ts
================================================
export const getVersion = async (pkg: string) => {
const packageJson = await fetch(`https://registry.npmjs.org/${pkg}/latest`).then(
(res) => res.json() as unknown as { version: string },
);
return `^${packageJson.version}`;
};
================================================
FILE: packages/codemod/src/index.ts
================================================
#!/usr/bin/env node
/* eslint-disable no-console */
import path from 'node:path';
import semver from 'semver';
import { checkGitStatus } from './checkGitStatus';
import { runExpoMigration } from './expo';
import { readPackageDeps } from './readPackageDeps';
async function main() {
const dir = process.argv[2];
if (!dir) {
console.error('Specify a directory in which to run the codemod');
process.exit(1);
}
checkGitStatus(dir);
const { dependencies, error } = readPackageDeps(dir);
if (error) {
console.error(`Unable to read package.json in ${dir}: ${error.message}`);
process.exit(1);
}
let version: string | undefined;
const expoVectorIcons = dependencies['@expo/vector-icons'];
if (expoVectorIcons) {
await runExpoMigration(dir);
} else {
console.log('Running codemod in', dir);
if (dependencies['react-native-vector-icons']) {
version = '11.x';
await import('./11.0');
} else {
const currentVersion = dependencies['@react-native-vector-icons/common'];
if (currentVersion) {
if (semver.satisfies(currentVersion, '12.x')) {
version = '12.x';
await import('./12.0');
} else {
console.error('Unsupported version of react-native-vector-icons');
process.exit(1);
}
}
}
if (!version) {
console.error(
`Have not found anything to migrate. Do you have "react-native-vector-icons" or "@expo/vector-icons" at ${path.join(dir, 'package.json')}?`,
);
process.exit(1);
}
console.log(`
Transform complete!
Upgraded to version ${version}
NOTE: You may need to run again to upgrade to the next version.
NOTE: You may need to run 'npm install' to install new dependencies.
Check https://github.com/react-native-vector-icons/react-native-vector-icons/blob/master/MIGRATION.md for any manual steps
`);
}
}
main().catch((e) => {
console.error(e);
process.exit(1);
});
================================================
FILE: packages/codemod/src/readPackageDeps.ts
================================================
import fs from 'node:fs';
import path from 'node:path';
type Result =
| {
dependencies: Record<string, string>;
error: null;
}
| {
dependencies: null;
error: Error;
};
export const readPackageDeps = (dir: string): Result => {
try {
const packageJsonPath = path.join(dir, 'package.json');
const { dependencies: pkgDependencies } = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as {
dependencies: Record<string, string>;
};
return {
dependencies: pkgDependencies || {},
gitextract_vddmqzha/ ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ ├── funding.yml │ └── workflows/ │ ├── codemod-tests.yaml │ ├── deploy.yaml │ ├── issue-handling.yml │ ├── lint.yaml │ └── tests.yaml ├── .gitignore ├── .knip.jsonc ├── .nxignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MIGRATION.md ├── README.md ├── TODO.md ├── biome.jsonc ├── docs/ │ ├── CREATE_FONT_PACKAGE.md │ ├── SETUP-EXPO.md │ ├── SETUP-REACT-NATIVE.md │ └── SETUP-WEB.md ├── lefthook.yml ├── nx.json ├── package.json ├── packages/ │ ├── ant-design/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsAntDesignPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── AntDesign.json │ │ ├── package.json │ │ ├── react-native-vector-icons-ant-design.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── codemod/ │ │ ├── CHANGELOG.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── 11.0/ │ │ │ │ ├── icon-style-transform.ts │ │ │ │ ├── import-transform.ts │ │ │ │ ├── index.ts │ │ │ │ ├── info-plist.ts │ │ │ │ ├── package-json.ts │ │ │ │ ├── remove-fonts.ts │ │ │ │ └── transform.ts │ │ │ ├── 12.0/ │ │ │ │ ├── index.ts │ │ │ │ ├── move-fonts.ts │ │ │ │ ├── package-json.ts │ │ │ │ └── transform.ts │ │ │ ├── __tests__/ │ │ │ │ ├── 11.0-transform.test.ts │ │ │ │ └── expo-import-transform.test.ts │ │ │ ├── checkGitStatus.ts │ │ │ ├── expo/ │ │ │ │ ├── import-transform.ts │ │ │ │ ├── index.ts │ │ │ │ ├── newFontImports.ts │ │ │ │ └── package-json.ts │ │ │ ├── getVersion.ts │ │ │ ├── index.ts │ │ │ └── readPackageDeps.ts │ │ └── tsconfig.json │ ├── common/ │ │ ├── .watchmanconfig │ │ ├── CHANGELOG.md │ │ ├── babel.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── create-icon-set.tsx │ │ │ ├── create-icon-source-cache.ts │ │ │ ├── defaults.ts │ │ │ ├── dynamicLoading/ │ │ │ │ ├── dynamic-font-loading.ts │ │ │ │ ├── dynamic-loading-setting.ts │ │ │ │ └── types.ts │ │ │ ├── get-image-library.ts │ │ │ ├── get-image-source.ts │ │ │ ├── index.ts │ │ │ └── scripts/ │ │ │ ├── common.ts │ │ │ └── updatePlist.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── directory/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── generate-font-styles.mts │ │ │ └── generate-glyphmap-index.mts │ │ ├── package.json │ │ ├── public/ │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.test.tsx │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── react-app-env.d.ts │ │ │ ├── reportWebVitals.ts │ │ │ └── setupTests.js │ │ └── tsconfig.json │ ├── entypo/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsEntypoPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Entypo.json │ │ ├── package.json │ │ ├── react-native-vector-icons-entypo.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── evil-icons/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsEvilIconsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── EvilIcons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-evil-icons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── feather/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFeatherPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Feather.json │ │ ├── package.json │ │ ├── react-native-vector-icons-feather.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomePackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesome.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-common/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── bin/ │ │ │ ├── fa-upgrade │ │ │ ├── fa-upgrade5 │ │ │ └── fa-upgrade6 │ │ ├── generators/ │ │ │ └── app/ │ │ │ └── templates/ │ │ │ └── src/ │ │ │ └── index.tsx │ │ ├── package.json │ │ └── scripts/ │ │ ├── fetch-pro.sh │ │ ├── generate-fontawesome-glyphmap.mts │ │ └── generate-fontawesome-metadata.js │ ├── fontawesome-free-brands/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeFreeBrandsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeFreeBrands.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-free-brands.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-free-regular/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeFreeRegularPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeFreeRegular.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-free-regular.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-free-solid/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeFreeSolidPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeFreeSolid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-free-solid.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-brands/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProBrandsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProBrands.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-brands.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-duotone-light/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProDuotoneLightPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProDuotoneLight.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-duotone-light.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-duotone-regular/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProDuotoneRegularPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProDuotoneRegular.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-duotone-regular.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-duotone-solid/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProDuotoneSolidPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProDuotoneSolid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-duotone-solid.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-duotone-thin/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProDuotoneThinPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProDuotoneThin.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-duotone-thin.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-light/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProLightPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProLight.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-light.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-regular/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProRegularPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProRegular.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-regular.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-duotone-light/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpDuotoneLightPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpDuotoneLight.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-light.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-duotone-regular/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpDuotoneRegularPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpDuotoneRegular.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-regular.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-duotone-solid/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpDuotoneSolidPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpDuotoneSolid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-solid.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-duotone-thin/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpDuotoneThinPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpDuotoneThin.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-duotone-thin.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-light/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpLightPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpLight.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-light.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-regular/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpRegularPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpRegular.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-regular.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-solid/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpSolidPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpSolid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-solid.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-sharp-thin/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSharpThinPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSharpThin.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-sharp-thin.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-solid/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProSolidPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProSolid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-solid.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome-pro-thin/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesomeProThinPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── FontAwesomeProThin.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome-pro-thin.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome5/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesome5Package.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ ├── FontAwesome5.json │ │ │ ├── FontAwesome5_brand.json │ │ │ ├── FontAwesome5_meta.json │ │ │ ├── FontAwesome5_regular.json │ │ │ └── FontAwesome5_solid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome5.podspec │ │ ├── src/ │ │ │ ├── index.tsx │ │ │ └── static.tsx │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome5-pro/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesome5ProPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ ├── FontAwesome5Pro.json │ │ │ ├── FontAwesome5Pro_brand.json │ │ │ ├── FontAwesome5Pro_duotone.json │ │ │ ├── FontAwesome5Pro_light.json │ │ │ ├── FontAwesome5Pro_meta.json │ │ │ ├── FontAwesome5Pro_regular.json │ │ │ └── FontAwesome5Pro_solid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome5-pro.podspec │ │ ├── src/ │ │ │ ├── index.tsx │ │ │ └── static.tsx │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome6/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesome6Package.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ ├── FontAwesome6.json │ │ │ ├── FontAwesome6_brand.json │ │ │ ├── FontAwesome6_meta.json │ │ │ ├── FontAwesome6_regular.json │ │ │ └── FontAwesome6_solid.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome6.podspec │ │ ├── src/ │ │ │ ├── index.tsx │ │ │ └── static.tsx │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontawesome6-pro/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontAwesome6ProPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ ├── FontAwesome6Pro.json │ │ │ ├── FontAwesome6Pro_brand.json │ │ │ ├── FontAwesome6Pro_duotone-light.json │ │ │ ├── FontAwesome6Pro_duotone-regular.json │ │ │ ├── FontAwesome6Pro_duotone-thin.json │ │ │ ├── FontAwesome6Pro_duotone.json │ │ │ ├── FontAwesome6Pro_light.json │ │ │ ├── FontAwesome6Pro_meta.json │ │ │ ├── FontAwesome6Pro_regular.json │ │ │ ├── FontAwesome6Pro_sharp-duotone-light.json │ │ │ ├── FontAwesome6Pro_sharp-duotone-regular.json │ │ │ ├── FontAwesome6Pro_sharp-duotone-solid.json │ │ │ ├── FontAwesome6Pro_sharp-duotone-thin.json │ │ │ ├── FontAwesome6Pro_sharp.json │ │ │ ├── FontAwesome6Pro_sharpLight.json │ │ │ ├── FontAwesome6Pro_sharpSolid.json │ │ │ ├── FontAwesome6Pro_sharpThin.json │ │ │ ├── FontAwesome6Pro_solid.json │ │ │ └── FontAwesome6Pro_thin.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontawesome6-pro.podspec │ │ ├── src/ │ │ │ ├── index.tsx │ │ │ └── static.tsx │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontcustom-docker/ │ │ ├── CHANGELOG.md │ │ ├── Dockerfile │ │ ├── README.md │ │ └── package.json │ ├── fontello/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontelloPackage.kt │ │ ├── babel.config.js │ │ ├── package.json │ │ ├── react-native-vector-icons-fontello.podspec │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── fontisto/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFontistoPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Fontisto.json │ │ ├── package.json │ │ ├── react-native-vector-icons-fontisto.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── foundation/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsFoundationPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Foundation.json │ │ ├── package.json │ │ ├── react-native-vector-icons-foundation.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── generator-react-native-vector-icons/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ └── app/ │ │ │ ├── fontforge/ │ │ │ │ └── correct-direction.py │ │ │ ├── generateGlyphmap.ts │ │ │ ├── index.ts │ │ │ └── templates/ │ │ │ ├── README.md │ │ │ ├── android/ │ │ │ │ ├── build.gradle │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── AndroidManifestNew.xml │ │ │ │ └── java/ │ │ │ │ └── Package.kt │ │ │ ├── babel.config.js │ │ │ ├── font.podspec │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── static.ts │ │ │ ├── tsconfig.build.json │ │ │ └── tsconfig.json │ │ └── tsconfig.json │ ├── get-image/ │ │ ├── .watchmanconfig │ │ ├── CHANGELOG.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── AndroidManifestNew.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── reactnativevectoricons/ │ │ │ │ └── get_image/ │ │ │ │ ├── VectorIconsModule.kt │ │ │ │ └── VectorIconsPackage.kt │ │ │ ├── newarch/ │ │ │ │ └── VectorIconsSpec.kt │ │ │ └── oldarch/ │ │ │ └── VectorIconsSpec.kt │ │ ├── babel.config.js │ │ ├── ios/ │ │ │ ├── VectorIcons.h │ │ │ └── VectorIcons.mm │ │ ├── package.json │ │ ├── react-native-vector-icons.podspec │ │ ├── react-native.config.js │ │ ├── src/ │ │ │ ├── NativeVectorIcons.ts │ │ │ ├── NativeVectorIcons.web.ts │ │ │ ├── ensure-native-module-available.ts │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ └── turbo.json │ ├── icomoon/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsIcomoonPackage.kt │ │ ├── babel.config.js │ │ ├── package.json │ │ ├── react-native-vector-icons-icomoon.podspec │ │ ├── src/ │ │ │ └── index.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── icon-explorer/ │ │ ├── .gitignore │ │ ├── .owl/ │ │ │ └── .gitignore │ │ ├── .watchmanconfig │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── App.owl.tsx │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ └── settings.gradle │ │ ├── app.json │ │ ├── babel.config.js │ │ ├── configPlugin.js │ │ ├── index.js │ │ ├── index.test.js │ │ ├── ios/ │ │ │ └── Podfile │ │ ├── jest.config.js │ │ ├── macos/ │ │ │ └── Podfile │ │ ├── metro.config.js │ │ ├── owl.config.json │ │ ├── package.json │ │ ├── react-native.config.js │ │ ├── set-rn-version.sh │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── Home.tsx │ │ │ ├── IconList.tsx │ │ │ ├── TestMode.tsx │ │ │ ├── Types.tsx │ │ │ ├── animatable.tsx │ │ │ ├── configs/ │ │ │ │ ├── fontello.config.json │ │ │ │ └── icomoon.config.json │ │ │ └── icon-sets.tsx │ │ ├── tsconfig.json │ │ └── visionos/ │ │ └── Podfile │ ├── ionicons/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsIoniconsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Ionicons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-ionicons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── lucide/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsLucidePackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Lucide.json │ │ ├── package.json │ │ ├── react-native-vector-icons-lucide.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── material-design-icons/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsMaterialDesignIconsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── MaterialDesignIcons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-material-design-icons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── material-icons/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsMaterialIconsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── MaterialIcons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-material-icons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── octicons/ │ │ ├── .fontcustom-manifest.json │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsOcticonsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── Octicons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-octicons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ ├── simple-line-icons/ │ │ ├── .yo-rc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── android/ │ │ │ ├── build.gradle │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── AndroidManifestNew.xml │ │ │ └── java/ │ │ │ └── VectorIconsSimpleLineIconsPackage.kt │ │ ├── babel.config.js │ │ ├── glyphmaps/ │ │ │ └── SimpleLineIcons.json │ │ ├── package.json │ │ ├── react-native-vector-icons-simple-line-icons.podspec │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── static.ts │ │ ├── tsconfig.build.json │ │ └── tsconfig.json │ └── zocial/ │ ├── .yo-rc.json │ ├── CHANGELOG.md │ ├── README.md │ ├── android/ │ │ ├── build.gradle │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── AndroidManifestNew.xml │ │ └── java/ │ │ └── VectorIconsZocialPackage.kt │ ├── babel.config.js │ ├── glyphmaps/ │ │ └── Zocial.json │ ├── package.json │ ├── react-native-vector-icons-zocial.podspec │ ├── src/ │ │ ├── index.ts │ │ └── static.ts │ ├── tsconfig.build.json │ └── tsconfig.json ├── pnpm-workspace.yaml ├── scripts/ │ ├── check-npm-publish-status.sh │ ├── fix-glyphmaps.mjs │ ├── generate-fonts.sh │ └── setup-npm-trust.sh └── tsconfig.json
SYMBOL INDEX (232 symbols across 103 files)
FILE: packages/ant-design/src/index.ts
type AntDesignIconName (line 22) | type AntDesignIconName = keyof typeof glyphMap;
FILE: packages/ant-design/src/static.ts
type AntDesignIconName (line 21) | type AntDesignIconName = keyof typeof glyphMap;
FILE: packages/codemod/src/__tests__/11.0-transform.test.ts
function applyTransform (line 6) | function applyTransform(source: string) {
FILE: packages/codemod/src/__tests__/expo-import-transform.test.ts
function applyTransform (line 11) | function applyTransform(source: string, options: Options = {}): string |...
FILE: packages/codemod/src/checkGitStatus.ts
function checkGitStatus (line 4) | function checkGitStatus(dir: string): void {
FILE: packages/codemod/src/expo/import-transform.ts
function transform (line 29) | function transform(fileInfo: FileInfo, api: API, options: Options) {
FILE: packages/codemod/src/expo/index.ts
function shouldUseStaticImports (line 8) | async function shouldUseStaticImports(dir: string): Promise<boolean> {
function runExpoMigration (line 23) | async function runExpoMigration(dir: string) {
FILE: packages/codemod/src/expo/newFontImports.ts
function addNewFontImport (line 7) | function addNewFontImport(fontNames: string[]) {
function getNewFontImports (line 12) | function getNewFontImports(): string[] {
FILE: packages/codemod/src/expo/package-json.ts
function updatePackageJson (line 10) | async function updatePackageJson(dir: string) {
FILE: packages/codemod/src/index.ts
function main (line 13) | async function main() {
FILE: packages/codemod/src/readPackageDeps.ts
type Result (line 4) | type Result =
FILE: packages/common/src/create-icon-set.tsx
type ValueData (line 13) | type ValueData = { uri: string; scale: number };
type GetImageSourceSyncIconFunc (line 14) | type GetImageSourceSyncIconFunc<GM> = (name: GM, size?: number, color?: ...
type GetImageSourceIconFunc (line 15) | type GetImageSourceIconFunc<GM> = (
type IconProps (line 21) | type IconProps<T> = TextProps & {
type GlyphMap (line 28) | type GlyphMap = Record<string, number | string>;
type IconComponent (line 30) | type IconComponent<GM extends GlyphMap> = React.FC<
type CreateIconSetOptions (line 42) | type CreateIconSetOptions = {
function createIconSet (line 56) | function createIconSet<GM extends GlyphMap>(
FILE: packages/common/src/create-icon-source-cache.ts
type ValueData (line 1) | type ValueData = { uri: string; scale: number };
function createIconSourceCache (line 3) | function createIconSourceCache() {
FILE: packages/common/src/defaults.ts
constant DEFAULT_ICON_SIZE (line 1) | const DEFAULT_ICON_SIZE = 12;
constant DEFAULT_ICON_COLOR (line 2) | const DEFAULT_ICON_COLOR = 'black';
FILE: packages/common/src/dynamicLoading/dynamic-font-loading.ts
type AssetRegistryEntry (line 59) | type AssetRegistryEntry = {
FILE: packages/common/src/dynamicLoading/dynamic-loading-setting.ts
type ExpoAssetModule (line 5) | type ExpoAssetModule = {
type LoadAsyncAsset (line 12) | type LoadAsyncAsset = string | { uri: string; display: string };
type ExpoFontLoaderModule (line 14) | type ExpoFontLoaderModule = {
type RenderToImageResult (line 23) | type RenderToImageResult = {
type ExpoFontUtilsModule (line 43) | type ExpoFontUtilsModule = {
type ExpoGlobal (line 55) | interface ExpoGlobal {
type ExpoGlobalType (line 67) | type ExpoGlobalType = {
function getIsDynamicLoadingSupported (line 75) | function getIsDynamicLoadingSupported(globalObj: any): globalObj is {
function getIsRenderToImageSupported (line 87) | function getIsRenderToImageSupported(globalObj: any): globalObj is {
function assertExpoModulesPresent (line 97) | function assertExpoModulesPresent(globalObj: unknown): asserts globalObj...
type ErrorCallback (line 143) | type ErrorCallback = (args: { error: Error; fontFamily: string; fontSour...
FILE: packages/common/src/dynamicLoading/types.ts
type ModuleId (line 2) | type ModuleId = number;
type LocalFileSystemUri (line 3) | type LocalFileSystemUri = string;
type FontSource (line 5) | type FontSource = ModuleId | LocalFileSystemUri;
type DynamicLoader (line 7) | type DynamicLoader = {
FILE: packages/directory/src/App.tsx
constant WAITING_INTERVAL (line 15) | const WAITING_INTERVAL = 300;
type Match (line 17) | type Match = { family: string; names: string[] };
FILE: packages/entypo/src/index.ts
type EntypoIconName (line 22) | type EntypoIconName = keyof typeof glyphMap;
FILE: packages/entypo/src/static.ts
type EntypoIconName (line 21) | type EntypoIconName = keyof typeof glyphMap;
FILE: packages/evil-icons/src/index.ts
type EvilIconsIconName (line 22) | type EvilIconsIconName = keyof typeof glyphMap;
FILE: packages/evil-icons/src/static.ts
type EvilIconsIconName (line 21) | type EvilIconsIconName = keyof typeof glyphMap;
FILE: packages/feather/src/index.ts
type FeatherIconName (line 22) | type FeatherIconName = keyof typeof glyphMap;
FILE: packages/feather/src/static.ts
type FeatherIconName (line 21) | type FeatherIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-common/generators/app/templates/src/index.tsx
method endsWith (line 39) | endsWith('-pro')) { -%>
FILE: packages/fontawesome-free-brands/src/index.ts
type FontAwesomeFreeBrandsIconName (line 22) | type FontAwesomeFreeBrandsIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-free-brands/src/static.ts
type FontAwesomeFreeBrandsIconName (line 21) | type FontAwesomeFreeBrandsIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-free-regular/src/index.ts
type FontAwesomeFreeRegularIconName (line 22) | type FontAwesomeFreeRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-free-regular/src/static.ts
type FontAwesomeFreeRegularIconName (line 21) | type FontAwesomeFreeRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-free-solid/src/index.ts
type FontAwesomeFreeSolidIconName (line 22) | type FontAwesomeFreeSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-free-solid/src/static.ts
type FontAwesomeFreeSolidIconName (line 21) | type FontAwesomeFreeSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-brands/src/index.ts
type FontAwesomeProBrandsIconName (line 21) | type FontAwesomeProBrandsIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-brands/src/static.ts
type FontAwesomeProBrandsIconName (line 21) | type FontAwesomeProBrandsIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-light/src/index.ts
type FontAwesomeProDuotoneLightIconName (line 21) | type FontAwesomeProDuotoneLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-light/src/static.ts
type FontAwesomeProDuotoneLightIconName (line 21) | type FontAwesomeProDuotoneLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-regular/src/index.ts
type FontAwesomeProDuotoneRegularIconName (line 21) | type FontAwesomeProDuotoneRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-regular/src/static.ts
type FontAwesomeProDuotoneRegularIconName (line 21) | type FontAwesomeProDuotoneRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-solid/src/index.ts
type FontAwesomeProDuotoneSolidIconName (line 21) | type FontAwesomeProDuotoneSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-solid/src/static.ts
type FontAwesomeProDuotoneSolidIconName (line 21) | type FontAwesomeProDuotoneSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-thin/src/index.ts
type FontAwesomeProDuotoneThinIconName (line 21) | type FontAwesomeProDuotoneThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-duotone-thin/src/static.ts
type FontAwesomeProDuotoneThinIconName (line 21) | type FontAwesomeProDuotoneThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-light/src/index.ts
type FontAwesomeProLightIconName (line 21) | type FontAwesomeProLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-light/src/static.ts
type FontAwesomeProLightIconName (line 21) | type FontAwesomeProLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-regular/src/index.ts
type FontAwesomeProRegularIconName (line 21) | type FontAwesomeProRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-regular/src/static.ts
type FontAwesomeProRegularIconName (line 21) | type FontAwesomeProRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-light/src/index.ts
type FontAwesomeProSharpDuotoneLightIconName (line 21) | type FontAwesomeProSharpDuotoneLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-light/src/static.ts
type FontAwesomeProSharpDuotoneLightIconName (line 21) | type FontAwesomeProSharpDuotoneLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-regular/src/index.ts
type FontAwesomeProSharpDuotoneRegularIconName (line 21) | type FontAwesomeProSharpDuotoneRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-regular/src/static.ts
type FontAwesomeProSharpDuotoneRegularIconName (line 21) | type FontAwesomeProSharpDuotoneRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-solid/src/index.ts
type FontAwesomeProSharpDuotoneSolidIconName (line 21) | type FontAwesomeProSharpDuotoneSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-solid/src/static.ts
type FontAwesomeProSharpDuotoneSolidIconName (line 21) | type FontAwesomeProSharpDuotoneSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-thin/src/index.ts
type FontAwesomeProSharpDuotoneThinIconName (line 21) | type FontAwesomeProSharpDuotoneThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-duotone-thin/src/static.ts
type FontAwesomeProSharpDuotoneThinIconName (line 21) | type FontAwesomeProSharpDuotoneThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-light/src/index.ts
type FontAwesomeProSharpLightIconName (line 21) | type FontAwesomeProSharpLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-light/src/static.ts
type FontAwesomeProSharpLightIconName (line 21) | type FontAwesomeProSharpLightIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-regular/src/index.ts
type FontAwesomeProSharpRegularIconName (line 21) | type FontAwesomeProSharpRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-regular/src/static.ts
type FontAwesomeProSharpRegularIconName (line 21) | type FontAwesomeProSharpRegularIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-solid/src/index.ts
type FontAwesomeProSharpSolidIconName (line 21) | type FontAwesomeProSharpSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-solid/src/static.ts
type FontAwesomeProSharpSolidIconName (line 21) | type FontAwesomeProSharpSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-thin/src/index.ts
type FontAwesomeProSharpThinIconName (line 21) | type FontAwesomeProSharpThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-sharp-thin/src/static.ts
type FontAwesomeProSharpThinIconName (line 21) | type FontAwesomeProSharpThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-solid/src/index.ts
type FontAwesomeProSolidIconName (line 21) | type FontAwesomeProSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-solid/src/static.ts
type FontAwesomeProSolidIconName (line 21) | type FontAwesomeProSolidIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-thin/src/index.ts
type FontAwesomeProThinIconName (line 21) | type FontAwesomeProThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome-pro-thin/src/static.ts
type FontAwesomeProThinIconName (line 21) | type FontAwesomeProThinIconName = keyof typeof glyphMap;
FILE: packages/fontawesome/src/index.ts
type FontAwesomeIconName (line 22) | type FontAwesomeIconName = keyof typeof glyphMap;
FILE: packages/fontawesome/src/static.ts
type FontAwesomeIconName (line 21) | type FontAwesomeIconName = keyof typeof glyphMap;
FILE: packages/fontawesome5-pro/src/index.tsx
type FontAwesome5ProLightIconName (line 40) | type FontAwesome5ProLightIconName = keyof typeof lightGM;
type FontAwesome5ProRegularIconName (line 47) | type FontAwesome5ProRegularIconName = keyof typeof regularGM;
type FontAwesome5ProSolidIconName (line 54) | type FontAwesome5ProSolidIconName = keyof typeof solidGM;
type FontAwesome5ProDuotoneIconName (line 61) | type FontAwesome5ProDuotoneIconName = keyof typeof duotoneGM;
type FontAwesome5ProBrandIconName (line 68) | type FontAwesome5ProBrandIconName = keyof typeof brandGM;
type Props (line 69) | type Props =
type GetImageSourceFunc (line 109) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 161) | type GetImageSourceSyncFunc = {
type FontAwesome5ProIconName (line 213) | type FontAwesome5ProIconName = ComponentProps<typeof FontAwesome5Pro>['n...
FILE: packages/fontawesome5-pro/src/static.tsx
type FontAwesome5ProLightIconName (line 40) | type FontAwesome5ProLightIconName = keyof typeof lightGM;
type FontAwesome5ProRegularIconName (line 47) | type FontAwesome5ProRegularIconName = keyof typeof regularGM;
type FontAwesome5ProSolidIconName (line 54) | type FontAwesome5ProSolidIconName = keyof typeof solidGM;
type FontAwesome5ProDuotoneIconName (line 61) | type FontAwesome5ProDuotoneIconName = keyof typeof duotoneGM;
type FontAwesome5ProBrandIconName (line 68) | type FontAwesome5ProBrandIconName = keyof typeof brandGM;
type Props (line 69) | type Props =
type GetImageSourceFunc (line 109) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 161) | type GetImageSourceSyncFunc = {
type FontAwesome5ProIconName (line 213) | type FontAwesome5ProIconName = ComponentProps<typeof FontAwesome5Pro>['n...
FILE: packages/fontawesome5/src/index.tsx
type FontAwesome5RegularIconName (line 39) | type FontAwesome5RegularIconName = keyof typeof regularGM;
type FontAwesome5SolidIconName (line 47) | type FontAwesome5SolidIconName = keyof typeof solidGM;
type FontAwesome5BrandIconName (line 55) | type FontAwesome5BrandIconName = keyof typeof brandGM;
type Props (line 56) | type Props =
type GetImageSourceFunc (line 90) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 126) | type GetImageSourceSyncFunc = {
type FontAwesome5IconName (line 162) | type FontAwesome5IconName = ComponentProps<typeof FontAwesome5>['name'];
FILE: packages/fontawesome5/src/static.tsx
type FontAwesome5RegularIconName (line 38) | type FontAwesome5RegularIconName = keyof typeof regularGM;
type FontAwesome5SolidIconName (line 45) | type FontAwesome5SolidIconName = keyof typeof solidGM;
type FontAwesome5BrandIconName (line 52) | type FontAwesome5BrandIconName = keyof typeof brandGM;
type Props (line 53) | type Props =
type GetImageSourceFunc (line 87) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 123) | type GetImageSourceSyncFunc = {
type FontAwesome5IconName (line 159) | type FontAwesome5IconName = ComponentProps<typeof FontAwesome5>['name'];
FILE: packages/fontawesome6-pro/src/index.tsx
type FontAwesome6ProThinIconName (line 45) | type FontAwesome6ProThinIconName = keyof typeof thinGM;
type FontAwesome6ProLightIconName (line 52) | type FontAwesome6ProLightIconName = keyof typeof lightGM;
type FontAwesome6ProRegularIconName (line 59) | type FontAwesome6ProRegularIconName = keyof typeof regularGM;
type FontAwesome6ProSolidIconName (line 66) | type FontAwesome6ProSolidIconName = keyof typeof solidGM;
type FontAwesome6ProSharpThinIconName (line 73) | type FontAwesome6ProSharpThinIconName = keyof typeof sharpThinGM;
type FontAwesome6ProSharpLightIconName (line 80) | type FontAwesome6ProSharpLightIconName = keyof typeof sharpLightGM;
type FontAwesome6ProSharpIconName (line 87) | type FontAwesome6ProSharpIconName = keyof typeof sharpGM;
type FontAwesome6ProSharpSolidIconName (line 94) | type FontAwesome6ProSharpSolidIconName = keyof typeof sharpSolidGM;
type FontAwesome6ProDuotoneIconName (line 101) | type FontAwesome6ProDuotoneIconName = keyof typeof duotoneGM;
type FontAwesome6ProBrandIconName (line 108) | type FontAwesome6ProBrandIconName = keyof typeof brandGM;
type Props (line 109) | type Props =
type GetImageSourceFunc (line 164) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 256) | type GetImageSourceSyncFunc = {
type FontAwesome6ProIconName (line 348) | type FontAwesome6ProIconName = ComponentProps<typeof FontAwesome6Pro>['n...
FILE: packages/fontawesome6-pro/src/static.tsx
type FontAwesome6ProThinIconName (line 45) | type FontAwesome6ProThinIconName = keyof typeof thinGM;
type FontAwesome6ProLightIconName (line 52) | type FontAwesome6ProLightIconName = keyof typeof lightGM;
type FontAwesome6ProRegularIconName (line 59) | type FontAwesome6ProRegularIconName = keyof typeof regularGM;
type FontAwesome6ProSolidIconName (line 66) | type FontAwesome6ProSolidIconName = keyof typeof solidGM;
type FontAwesome6ProSharpThinIconName (line 73) | type FontAwesome6ProSharpThinIconName = keyof typeof sharpThinGM;
type FontAwesome6ProSharpLightIconName (line 80) | type FontAwesome6ProSharpLightIconName = keyof typeof sharpLightGM;
type FontAwesome6ProSharpIconName (line 87) | type FontAwesome6ProSharpIconName = keyof typeof sharpGM;
type FontAwesome6ProSharpSolidIconName (line 94) | type FontAwesome6ProSharpSolidIconName = keyof typeof sharpSolidGM;
type FontAwesome6ProDuotoneIconName (line 101) | type FontAwesome6ProDuotoneIconName = keyof typeof duotoneGM;
type FontAwesome6ProBrandIconName (line 108) | type FontAwesome6ProBrandIconName = keyof typeof brandGM;
type Props (line 109) | type Props =
type GetImageSourceFunc (line 164) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 256) | type GetImageSourceSyncFunc = {
type FontAwesome6ProIconName (line 348) | type FontAwesome6ProIconName = ComponentProps<typeof FontAwesome6Pro>['n...
FILE: packages/fontawesome6/src/index.tsx
type FontAwesome6RegularIconName (line 39) | type FontAwesome6RegularIconName = keyof typeof regularGM;
type FontAwesome6SolidIconName (line 47) | type FontAwesome6SolidIconName = keyof typeof solidGM;
type FontAwesome6BrandIconName (line 55) | type FontAwesome6BrandIconName = keyof typeof brandGM;
type Props (line 56) | type Props =
type GetImageSourceFunc (line 90) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 126) | type GetImageSourceSyncFunc = {
type FontAwesome6IconName (line 162) | type FontAwesome6IconName = ComponentProps<typeof FontAwesome6>['name'];
FILE: packages/fontawesome6/src/static.tsx
type FontAwesome6RegularIconName (line 38) | type FontAwesome6RegularIconName = keyof typeof regularGM;
type FontAwesome6SolidIconName (line 45) | type FontAwesome6SolidIconName = keyof typeof solidGM;
type FontAwesome6BrandIconName (line 52) | type FontAwesome6BrandIconName = keyof typeof brandGM;
type Props (line 53) | type Props =
type GetImageSourceFunc (line 87) | type GetImageSourceFunc = {
type GetImageSourceSyncFunc (line 123) | type GetImageSourceSyncFunc = {
type FontAwesome6IconName (line 159) | type FontAwesome6IconName = ComponentProps<typeof FontAwesome6>['name'];
FILE: packages/fontello/src/index.ts
type FontelloConfig (line 8) | type FontelloConfig = {
type FontelloComponent (line 23) | type FontelloComponent = IconComponent<Record<string, number>>;
type Options (line 26) | type Options = Partial<CreateIconSetOptions>;
function createIconSetFromFontello (line 34) | function createIconSetFromFontello(
FILE: packages/fontisto/src/index.ts
type FontistoIconName (line 22) | type FontistoIconName = keyof typeof glyphMap;
FILE: packages/fontisto/src/static.ts
type FontistoIconName (line 21) | type FontistoIconName = keyof typeof glyphMap;
FILE: packages/foundation/src/index.ts
type FoundationIconName (line 22) | type FoundationIconName = keyof typeof glyphMap;
FILE: packages/foundation/src/static.ts
type FoundationIconName (line 21) | type FoundationIconName = keyof typeof glyphMap;
FILE: packages/generator-react-native-vector-icons/src/app/index.ts
type Data (line 14) | interface Data {
type Arguments (line 72) | type Arguments = BaseOptions & {
method constructor (line 79) | constructor(args: string | string[], opts: Arguments) {
method writing (line 87) | async writing() {
method install (line 98) | async install() {
method end (line 105) | end() {
method _docker (line 109) | _docker(image: string, args: string[], options: string[] = []) {
method _writeTemplates (line 131) | _writeTemplates() {
method _fixPackageVersion (line 177) | async _fixPackageVersion() {
method _resolveUpstreamVersion (line 181) | async _resolveUpstreamVersion(): Promise<string | undefined> {
method _updateVersionTracking (line 210) | _updateVersionTracking(upstreamVersion: string) {
method _addFontDependencies (line 243) | async _addFontDependencies(resolvedVersion?: string) {
method _addDependencies (line 258) | async _addDependencies() {
method _buildSteps (line 270) | _buildSteps() {
method _preScript (line 281) | _preScript() {
method _renameSVGs (line 294) | _renameSVGs() {
method _fixSVGPaths (line 314) | _fixSVGPaths() {
method _buildFontCustom (line 339) | _buildFontCustom() {
method _fontForgeScript (line 373) | _fontForgeScript() {
method _buildGlyphmap (line 391) | _buildGlyphmap() {
method _copyFont (line 423) | _copyFont() {
method _postScript (line 465) | _postScript() {
method _data (line 478) | _data() {
FILE: packages/get-image/src/NativeVectorIcons.ts
type Spec (line 4) | interface Spec extends TurboModule {
FILE: packages/get-image/src/NativeVectorIcons.web.ts
method getImageForFont (line 4) | async getImageForFont() {
method getImageForFontSync (line 7) | getImageForFontSync() {
FILE: packages/get-image/src/ensure-native-module-available.ts
function ensureNativeModuleAvailable (line 3) | function ensureNativeModuleAvailable() {
FILE: packages/get-image/src/index.ts
constant LINKING_ERROR (line 5) | const LINKING_ERROR = `
method get (line 20) | get() {
function getImageForFont (line 26) | function getImageForFont(
function getImageForFontSync (line 35) | function getImageForFontSync(fontFamilyName: string, glyph: string, font...
FILE: packages/icomoon/src/index.ts
type IcoMoonIcon (line 8) | type IcoMoonIcon = {
type IcoMoonConfig (line 14) | type IcoMoonConfig = {
type IcoMoonComponent (line 25) | type IcoMoonComponent = IconComponent<Record<string, number>>;
type Options (line 28) | type Options = Partial<CreateIconSetOptions>;
function createIconSetFromIcoMoon (line 36) | function createIconSetFromIcoMoon(
FILE: packages/icon-explorer/src/App.tsx
type NavType (line 11) | type NavType = {
FILE: packages/icon-explorer/src/Home.tsx
constant STYLING (line 13) | const STYLING: (Parameters<typeof FontAwesome>[0] & {
constant INLINE (line 53) | const INLINE = [
constant GETIMAGE (line 67) | const GETIMAGE = [
constant ANIMATED (line 80) | const ANIMATED = [
type IconName (line 132) | type IconName = keyof typeof ICON_SETS;
type IconSet (line 133) | type IconSet = (typeof ICON_SETS)[IconName];
FILE: packages/icon-explorer/src/TestMode.tsx
type IconRowProps (line 42) | interface IconRowProps {
FILE: packages/ionicons/src/index.ts
type IoniconsIconName (line 22) | type IoniconsIconName = keyof typeof glyphMap;
FILE: packages/ionicons/src/static.ts
type IoniconsIconName (line 21) | type IoniconsIconName = keyof typeof glyphMap;
FILE: packages/lucide/src/index.ts
type LucideIconName (line 22) | type LucideIconName = keyof typeof glyphMap;
FILE: packages/lucide/src/static.ts
type LucideIconName (line 21) | type LucideIconName = keyof typeof glyphMap;
FILE: packages/material-design-icons/src/index.ts
type MaterialDesignIconsIconName (line 22) | type MaterialDesignIconsIconName = keyof typeof glyphMap;
FILE: packages/material-design-icons/src/static.ts
type MaterialDesignIconsIconName (line 21) | type MaterialDesignIconsIconName = keyof typeof glyphMap;
FILE: packages/material-icons/src/index.ts
type MaterialIconsIconName (line 22) | type MaterialIconsIconName = keyof typeof glyphMap;
FILE: packages/material-icons/src/static.ts
type MaterialIconsIconName (line 21) | type MaterialIconsIconName = keyof typeof glyphMap;
FILE: packages/octicons/src/index.ts
type OcticonsIconName (line 22) | type OcticonsIconName = keyof typeof glyphMap;
FILE: packages/octicons/src/static.ts
type OcticonsIconName (line 21) | type OcticonsIconName = keyof typeof glyphMap;
FILE: packages/simple-line-icons/src/index.ts
type SimpleLineIconsIconName (line 22) | type SimpleLineIconsIconName = keyof typeof glyphMap;
FILE: packages/simple-line-icons/src/static.ts
type SimpleLineIconsIconName (line 21) | type SimpleLineIconsIconName = keyof typeof glyphMap;
FILE: packages/zocial/src/index.ts
type ZocialIconName (line 22) | type ZocialIconName = keyof typeof glyphMap;
FILE: packages/zocial/src/static.ts
type ZocialIconName (line 21) | type ZocialIconName = keyof typeof glyphMap;
Condensed preview — 821 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,460K chars).
[
{
"path": ".editorconfig",
"chars": 324,
"preview": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# edit"
},
{
"path": ".eslintignore",
"chars": 636,
"preview": "##############\n# yeoman\n##############\n\n# Ignore the templates with <%= %> tags, we'll pickup the errors in the generate"
},
{
"path": ".eslintrc.js",
"chars": 1783,
"preview": "module.exports = {\n extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react/recommended'"
},
{
"path": ".gitattributes",
"chars": 72,
"preview": "*.pbxproj -text\n# specific for windows script files\n*.bat text eol=crlf\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 2455,
"preview": "---\nname: \"\\U0001F41B Bug report\"\ndescription: Report a bug\nlabels: [\"bug\", \"triage\"]\nbody:\n - type: markdown\n attri"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 194,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Community Support\n url: https://github.com/oblador/react-native-"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 1264,
"preview": "---\nname: Feature request\ndescription: Suggest an idea for this project\nlabels: [\"feature request\", \"triage\"]\nbody:\n - "
},
{
"path": ".github/funding.yml",
"chars": 18,
"preview": "github: [oblador]\n"
},
{
"path": ".github/workflows/codemod-tests.yaml",
"chars": 706,
"preview": "---\nname: Codemod Tests\n\non:\n push:\n branches:\n - master\n paths:\n - \".github/workflows/codemod-tests.ya"
},
{
"path": ".github/workflows/deploy.yaml",
"chars": 4908,
"preview": "name: Publish to NPM and Website\n\non:\n workflow_dispatch:\n inputs:\n dry_run:\n description: Perform a dry"
},
{
"path": ".github/workflows/issue-handling.yml",
"chars": 938,
"preview": "name: 'Support requests'\n\non:\n issues:\n types: [labeled, unlabeled, reopened]\n\njobs:\n support:\n runs-on: ubuntu-"
},
{
"path": ".github/workflows/lint.yaml",
"chars": 2038,
"preview": "name: Lint\n\non:\n push:\n branches:\n - master\n pull_request:\n\njobs:\n eslint:\n name: eslint\n runs-on: ubun"
},
{
"path": ".github/workflows/tests.yaml",
"chars": 8860,
"preview": "---\nname: Tests\n\non:\n push:\n branches:\n - master\n paths:\n - \".github/workflows/tests.yaml\"\n - \"pac"
},
{
"path": ".gitignore",
"chars": 605,
"preview": "# OSX\n.DS_Store\n\n# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.persp"
},
{
"path": ".knip.jsonc",
"chars": 5618,
"preview": "{\n \"$schema\": \"https://unpkg.com/knip@5/schema-jsonc.json\",\n \"ignore\": [\"**/*.web.ts\"],\n \"babel\": true,\n \"workspaces"
},
{
"path": ".nxignore",
"chars": 81,
"preview": "# Files that shouldn't cause new versions to be created\npnpm-lock.yaml\nREADME.md\n"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5489,
"preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
},
{
"path": "CONTRIBUTING.md",
"chars": 7722,
"preview": "# Contributing\n\nContributions are always welcome, no matter how large or small!\n\nWe want this community to be friendly a"
},
{
"path": "LICENSE",
"chars": 1070,
"preview": "MIT License\n\nCopyright (c) 2015 Joel Arvidsson\nPermission is hereby granted, free of charge, to any person obtaining a c"
},
{
"path": "MIGRATION.md",
"chars": 3756,
"preview": "# Major version migration instructions\n\nWe provide a `codemod` to help migrate your code and settings between major vers"
},
{
"path": "README.md",
"chars": 13793,
"preview": ""
},
{
"path": "docs/SETUP-REACT-NATIVE.md",
"chars": 1520,
"preview": "# Setup guide for React Native Apps\n\n> If you use Expo, please follow [this guide](./SETUP-EXPO.md) instead. This guide "
},
{
"path": "docs/SETUP-WEB.md",
"chars": 3206,
"preview": "# Setup guide for Web Apps\n\n> This guide can probably be improved, please feel free to contribute.\n\n### React-native-web"
},
{
"path": "lefthook.yml",
"chars": 341,
"preview": "pre-commit:\n parallel: true\n commands:\n eslint:\n run: pnpm run lint:eslint\n biome:\n run: pnpm run lint"
},
{
"path": "nx.json",
"chars": 1030,
"preview": "{\n \"$schema\": \"./node_modules/nx/schemas/nx-schema.json\",\n \"targetDefaults\": {\n \"clean\": {\n \"dependsOn\": [\n "
},
{
"path": "package.json",
"chars": 1654,
"preview": "{\n \"private\": true,\n \"version\": \"0.0.1\",\n \"scripts\": {\n \"generate\": \"scripts/generate-fonts.sh\",\n \"clean\": \"nx "
},
{
"path": "packages/ant-design/.fontcustom-manifest.json",
"chars": 42348,
"preview": "{\n \"checksum\": {\n \"previous\": \"3a17bffd6a624425af737b4664e295508c3c5b8c76ebe37f1f393aa65105d542\",\n \"current\": \"3a"
},
{
"path": "packages/ant-design/.yo-rc.json",
"chars": 538,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"ant-design\",\n \"upstreamFont\": \"@ant-design/icons-svg"
},
{
"path": "packages/ant-design/CHANGELOG.md",
"chars": 3982,
"preview": "## 12.5.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/ant-design/README.md",
"chars": 833,
"preview": "# React Native Vector Icons - Ant Design\n\nAnt Design font for React Native Vector Icons\n\nSee the [React Native Vector Ic"
},
{
"path": "packages/ant-design/android/build.gradle",
"chars": 1832,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/ant-design/android/src/main/AndroidManifest.xml",
"chars": 132,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.ant_design\">\n"
},
{
"path": "packages/ant-design/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/ant-design/android/src/main/java/VectorIconsAntDesignPackage.kt",
"chars": 581,
"preview": "package com.reactnativevectoricons.ant_design\n\nimport com.facebook.react.TurboReactPackage\nimport com.facebook.react.bri"
},
{
"path": "packages/ant-design/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/ant-design/glyphmaps/AntDesign.json",
"chars": 9656,
"preview": "{\n \"account-book\": 62454,\n \"aim\": 62455,\n \"alert\": 62456,\n \"alibaba\": 62457,\n \"align-center\": 62458,\n \"align-left\""
},
{
"path": "packages/ant-design/package.json",
"chars": 3233,
"preview": "{\n \"name\": \"@react-native-vector-icons/ant-design\",\n \"version\": \"12.5.0\",\n \"description\": \"Ant Design font for react "
},
{
"path": "packages/ant-design/react-native-vector-icons-ant-design.podspec",
"chars": 759,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/ant-design/src/index.ts",
"chars": 871,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/ant-design/src/static.ts",
"chars": 745,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/ant-design/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/ant-design/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/codemod/CHANGELOG.md",
"chars": 2606,
"preview": "## 12.3.2 (2026-03-20)\n\n### 🚀 Features\n\n- **codemod:** support static imports ([#1884](https://github.com/oblador/react-"
},
{
"path": "packages/codemod/package.json",
"chars": 2470,
"preview": "{\n \"name\": \"@react-native-vector-icons/codemod\",\n \"version\": \"12.3.2\",\n \"description\": \"Tool to help users migrate fr"
},
{
"path": "packages/codemod/src/11.0/icon-style-transform.ts",
"chars": 989,
"preview": "import type { Collection, JSCodeshift, JSXAttribute } from 'jscodeshift';\n\nconst componentNames = ['FontAwesome5', 'Font"
},
{
"path": "packages/codemod/src/11.0/import-transform.ts",
"chars": 2203,
"preview": "import type { Collection, JSCodeshift } from 'jscodeshift';\n\nconst imports: [string, string][] = [\n ['react-native-vect"
},
{
"path": "packages/codemod/src/11.0/index.ts",
"chars": 1114,
"preview": "#!/usr/bin/env node\n\n/* eslint-disable no-console */\n\nimport { exec } from 'node:child_process';\nimport path from 'node:"
},
{
"path": "packages/codemod/src/11.0/info-plist.ts",
"chars": 1357,
"preview": "import { execSync } from 'node:child_process';\nimport fs from 'node:fs';\n\nimport plist from 'plist';\n\nconst fonts = [\n "
},
{
"path": "packages/codemod/src/11.0/package-json.ts",
"chars": 750,
"preview": "import fs from 'node:fs';\n\nimport { getVersion } from '../getVersion';\n\nexport default async (pkgs: Set<string>) => {\n "
},
{
"path": "packages/codemod/src/11.0/remove-fonts.ts",
"chars": 1803,
"preview": "/* eslint-disable no-console */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\n\nconst deletab"
},
{
"path": "packages/codemod/src/11.0/transform.ts",
"chars": 409,
"preview": "import type { API, FileInfo } from 'jscodeshift';\n\nimport iconStyleTransform from './icon-style-transform';\nimport impor"
},
{
"path": "packages/codemod/src/12.0/index.ts",
"chars": 833,
"preview": "#!/usr/bin/env node\n\n/* eslint-disable no-console */\n\nimport { exec } from 'node:child_process';\nimport path from 'node:"
},
{
"path": "packages/codemod/src/12.0/move-fonts.ts",
"chars": 1687,
"preview": "/* eslint-disable no-console */\n\nimport fs, { mkdirSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\n\nco"
},
{
"path": "packages/codemod/src/12.0/package-json.ts",
"chars": 376,
"preview": "import fs from 'node:fs';\n\nexport default () => {\n const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8"
},
{
"path": "packages/codemod/src/12.0/transform.ts",
"chars": 242,
"preview": "import type { API, FileInfo } from 'jscodeshift';\n\nexport default (file: FileInfo, api: API) => {\n const j = api.jscode"
},
{
"path": "packages/codemod/src/__tests__/11.0-transform.test.ts",
"chars": 4912,
"preview": "import type { API, FileInfo } from 'jscodeshift';\nimport jscodeshift from 'jscodeshift';\n\nimport transform from '../11.0"
},
{
"path": "packages/codemod/src/__tests__/expo-import-transform.test.ts",
"chars": 5258,
"preview": "import type { API, FileInfo, Options } from 'jscodeshift';\nimport jscodeshift from 'jscodeshift';\n\nimport transform from"
},
{
"path": "packages/codemod/src/checkGitStatus.ts",
"chars": 889,
"preview": "/* eslint-disable no-console */\nimport { execSync } from 'node:child_process';\n\nexport function checkGitStatus(dir: stri"
},
{
"path": "packages/codemod/src/expo/import-transform.ts",
"chars": 4347,
"preview": "import type { API, FileInfo, Options } from 'jscodeshift';\n\nimport { addNewFontImport } from './newFontImports';\n\nconst "
},
{
"path": "packages/codemod/src/expo/index.ts",
"chars": 1251,
"preview": "/* eslint-disable no-console */\n\nimport { run as jscodeshift } from 'jscodeshift/src/Runner';\nimport resolveFrom from 'r"
},
{
"path": "packages/codemod/src/expo/newFontImports.ts",
"chars": 595,
"preview": "import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nconst tmpFile = path.join(os.tmpdir()"
},
{
"path": "packages/codemod/src/expo/package-json.ts",
"chars": 1337,
"preview": "/* eslint-disable no-console */\n\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from"
},
{
"path": "packages/codemod/src/getVersion.ts",
"chars": 238,
"preview": "export const getVersion = async (pkg: string) => {\n const packageJson = await fetch(`https://registry.npmjs.org/${pkg}/"
},
{
"path": "packages/codemod/src/index.ts",
"chars": 1984,
"preview": "#!/usr/bin/env node\n\n/* eslint-disable no-console */\n\nimport path from 'node:path';\n\nimport semver from 'semver';\n\nimpor"
},
{
"path": "packages/codemod/src/readPackageDeps.ts",
"chars": 651,
"preview": "import fs from 'node:fs';\nimport path from 'node:path';\n\ntype Result =\n | {\n dependencies: Record<string, string>;"
},
{
"path": "packages/codemod/tsconfig.json",
"chars": 665,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/common/.watchmanconfig",
"chars": 3,
"preview": "{}\n"
},
{
"path": "packages/common/CHANGELOG.md",
"chars": 3675,
"preview": "## 12.4.2 (2026-03-17)\n\n### 🩹 Fixes\n\n- simplify createIconSourceCache and remove error caching ([#1883](https://github.c"
},
{
"path": "packages/common/babel.config.js",
"chars": 110,
"preview": "module.exports = {\n presets: [['module:react-native-builder-bob/babel-preset', { modules: 'commonjs' }]],\n};\n"
},
{
"path": "packages/common/package.json",
"chars": 3308,
"preview": "{\n \"name\": \"@react-native-vector-icons/common\",\n \"version\": \"12.4.2\",\n \"description\": \"Customizable Icons for React N"
},
{
"path": "packages/common/src/create-icon-set.tsx",
"chars": 5412,
"preview": "// eslint-disable-next-line import/no-extraneous-dependencies\nimport React, { forwardRef, type Ref, useEffect } from 're"
},
{
"path": "packages/common/src/create-icon-source-cache.ts",
"chars": 295,
"preview": "type ValueData = { uri: string; scale: number };\n\nexport function createIconSourceCache() {\n const cache = new Map<stri"
},
{
"path": "packages/common/src/defaults.ts",
"chars": 80,
"preview": "export const DEFAULT_ICON_SIZE = 12;\nexport const DEFAULT_ICON_COLOR = 'black';\n"
},
{
"path": "packages/common/src/dynamicLoading/dynamic-font-loading.ts",
"chars": 2943,
"preview": "/*\n * The following imports are always present when react native is installed\n * in the future, more explicit apis will "
},
{
"path": "packages/common/src/dynamicLoading/dynamic-loading-setting.ts",
"chars": 5145,
"preview": "import { Platform } from 'react-native';\n\nimport type { FontSource } from './types';\n\ntype ExpoAssetModule = {\n // defi"
},
{
"path": "packages/common/src/dynamicLoading/types.ts",
"chars": 315,
"preview": "// the result of calling require('path')\ntype ModuleId = number;\ntype LocalFileSystemUri = string;\n\nexport type FontSour"
},
{
"path": "packages/common/src/get-image-library.ts",
"chars": 1828,
"preview": "import { getIsRenderToImageSupported } from './dynamicLoading/dynamic-loading-setting';\n\n// eslint-disable-next-line imp"
},
{
"path": "packages/common/src/get-image-source.ts",
"chars": 1905,
"preview": "import type { TextStyle } from 'react-native';\nimport { PixelRatio, processColor } from 'react-native';\n\nimport type { c"
},
{
"path": "packages/common/src/index.ts",
"chars": 386,
"preview": "export type { CreateIconSetOptions, IconComponent, IconProps } from './create-icon-set';\nexport { createIconSet } from '"
},
{
"path": "packages/common/src/scripts/common.ts",
"chars": 1887,
"preview": "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { findUpSync } from 'find-up';\n\n/**\n * Source vendored a"
},
{
"path": "packages/common/src/scripts/updatePlist.ts",
"chars": 1715,
"preview": "#!/usr/bin/env node\n/* eslint-disable no-console */\n\nimport fs from 'node:fs';\nimport * as path from 'node:path';\n\nimpor"
},
{
"path": "packages/common/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/common/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/directory/.gitignore",
"chars": 289,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "packages/directory/CHANGELOG.md",
"chars": 0,
"preview": ""
},
{
"path": "packages/directory/README.md",
"chars": 2115,
"preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
},
{
"path": "packages/directory/bin/generate-font-styles.mts",
"chars": 787,
"preview": "#!/usr/bin/env -S node --experimental-strip-types --disable-warning=ExperimentalWarning\n\nimport path from 'node:path';\n\n"
},
{
"path": "packages/directory/bin/generate-glyphmap-index.mts",
"chars": 1921,
"preview": "#!/usr/bin/env -S node --experimental-strip-types --disable-warning=ExperimentalWarning\n\nimport path from 'node:path';\n\n"
},
{
"path": "packages/directory/package.json",
"chars": 1459,
"preview": "{\n \"name\": \"@react-native-vector-icons/directory\",\n \"version\": \"12.0.0-alpha.20\",\n \"private\": true,\n \"homepage\": \"ht"
},
{
"path": "packages/directory/public/index.html",
"chars": 1997,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
},
{
"path": "packages/directory/public/manifest.json",
"chars": 504,
"preview": "{\n \"short_name\": \"Directory\",\n \"name\": \"React Native Vector Icons Directory\",\n \"icons\": [\n {\n \"src\": \"favicon"
},
{
"path": "packages/directory/public/robots.txt",
"chars": 67,
"preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
},
{
"path": "packages/directory/src/App.css",
"chars": 2300,
"preview": "@import url(./generated/fonts.css);\n\n* {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\nbody {\n overflo"
},
{
"path": "packages/directory/src/App.test.tsx",
"chars": 269,
"preview": "import { render, screen } from '@testing-library/react';\n\nimport App from './App';\n\ntest('renders directory link', () =>"
},
{
"path": "packages/directory/src/App.tsx",
"chars": 4492,
"preview": "import {\n type ChangeEvent,\n type FormEvent,\n type HTMLProps,\n memo,\n useCallback,\n useLayoutEffect,\n useRef,\n u"
},
{
"path": "packages/directory/src/index.css",
"chars": 362,
"preview": "body {\n margin: 0;\n font-family:\n -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Can"
},
{
"path": "packages/directory/src/index.tsx",
"chars": 553,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\n\nimport App from './App';\nimport reportWebVitals fro"
},
{
"path": "packages/directory/src/react-app-env.d.ts",
"chars": 40,
"preview": "/// <reference types=\"react-scripts\" />\n"
},
{
"path": "packages/directory/src/reportWebVitals.ts",
"chars": 432,
"preview": "import type { MetricType } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: (metric: MetricType) => void) => {"
},
{
"path": "packages/directory/src/setupTests.js",
"chars": 241,
"preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
},
{
"path": "packages/directory/tsconfig.json",
"chars": 503,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"es5\",\n \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n \"allowJs\": true,\n \"sk"
},
{
"path": "packages/entypo/.fontcustom-manifest.json",
"chars": 52073,
"preview": "{\n \"checksum\": {\n \"previous\": \"dd613052d4c6a03cd2d91507156628cd6c0c4fb1c5a820ff7c6958c0fabdcef0\",\n \"current\": \"dd"
},
{
"path": "packages/entypo/.yo-rc.json",
"chars": 409,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"entypo\",\n \"upstreamFont\": \"@entypo-icons/core\",\n "
},
{
"path": "packages/entypo/CHANGELOG.md",
"chars": 3982,
"preview": "## 12.5.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/entypo/README.md",
"chars": 811,
"preview": "# React Native Vector Icons - Entypo\n\nEntypo font for React Native Vector Icons\n\nSee the [React Native Vector Icons READ"
},
{
"path": "packages/entypo/android/build.gradle",
"chars": 1809,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/entypo/android/src/main/AndroidManifest.xml",
"chars": 128,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.entypo\">\n</ma"
},
{
"path": "packages/entypo/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/entypo/android/src/main/java/VectorIconsEntypoPackage.kt",
"chars": 574,
"preview": "package com.reactnativevectoricons.entypo\n\nimport com.facebook.react.TurboReactPackage\nimport com.facebook.react.bridge."
},
{
"path": "packages/entypo/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/entypo/glyphmaps/Entypo.json",
"chars": 9485,
"preview": "{\n \"500px\": 61696,\n \"500px-with-circle\": 61697,\n \"add-to-list\": 61698,\n \"add-user\": 61699,\n \"address\": 61700,\n \"ad"
},
{
"path": "packages/entypo/package.json",
"chars": 3214,
"preview": "{\n \"name\": \"@react-native-vector-icons/entypo\",\n \"version\": \"12.5.0\",\n \"description\": \"Entypo font for react native v"
},
{
"path": "packages/entypo/react-native-vector-icons-entypo.podspec",
"chars": 755,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/entypo/src/index.ts",
"chars": 844,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/entypo/src/static.ts",
"chars": 721,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/entypo/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/entypo/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/evil-icons/.fontcustom-manifest.json",
"chars": 9809,
"preview": "{\n \"checksum\": {\n \"previous\": \"79a1752fda5ce7dab8867765a9f1cfc076fddef04009d50daf870a670d42365d\",\n \"current\": \"79"
},
{
"path": "packages/evil-icons/.yo-rc.json",
"chars": 435,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"evil-icons\",\n \"upstreamFont\": \"evil-icons\",\n \"bui"
},
{
"path": "packages/evil-icons/CHANGELOG.md",
"chars": 3982,
"preview": "## 12.5.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/evil-icons/README.md",
"chars": 834,
"preview": "# React Native Vector Icons - Evil Icons\n\nEvil Icons font for React Native Vector Icons\n\nSee the [React Native Vector Ic"
},
{
"path": "packages/evil-icons/android/build.gradle",
"chars": 1832,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/evil-icons/android/src/main/AndroidManifest.xml",
"chars": 132,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.evil_icons\">\n"
},
{
"path": "packages/evil-icons/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/evil-icons/android/src/main/java/VectorIconsEvilIconsPackage.kt",
"chars": 581,
"preview": "package com.reactnativevectoricons.evil_icons\n\nimport com.facebook.react.TurboReactPackage\nimport com.facebook.react.bri"
},
{
"path": "packages/evil-icons/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/evil-icons/glyphmaps/EvilIcons.json",
"chars": 1454,
"preview": "{\n \"archive\": 61696,\n \"arrow-down\": 61697,\n \"arrow-left\": 61698,\n \"arrow-right\": 61699,\n \"arrow-up\": 61700,\n \"bell"
},
{
"path": "packages/evil-icons/package.json",
"chars": 3223,
"preview": "{\n \"name\": \"@react-native-vector-icons/evil-icons\",\n \"version\": \"12.5.0\",\n \"description\": \"Evil Icons font for react "
},
{
"path": "packages/evil-icons/react-native-vector-icons-evil-icons.podspec",
"chars": 759,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/evil-icons/src/index.ts",
"chars": 871,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/evil-icons/src/static.ts",
"chars": 745,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/evil-icons/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/evil-icons/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/feather/.fontcustom-manifest.json",
"chars": 35643,
"preview": "{\n \"checksum\": {\n \"previous\": \"71368e9f15daab2497d403b7b2371a0faeeab18a78cbf670ea75ca1aa76bd38f\",\n \"current\": \"71"
},
{
"path": "packages/feather/.yo-rc.json",
"chars": 406,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"feather\",\n \"upstreamFont\": \"feather-icons\",\n \"bui"
},
{
"path": "packages/feather/CHANGELOG.md",
"chars": 4113,
"preview": "## 12.5.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/feather/README.md",
"chars": 818,
"preview": "# React Native Vector Icons - Feather\n\nFeather font for React Native Vector Icons\n\nSee the [React Native Vector Icons RE"
},
{
"path": "packages/feather/android/build.gradle",
"chars": 1815,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/feather/android/src/main/AndroidManifest.xml",
"chars": 129,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.feather\">\n</m"
},
{
"path": "packages/feather/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/feather/android/src/main/java/VectorIconsFeatherPackage.kt",
"chars": 576,
"preview": "package com.reactnativevectoricons.feather\n\nimport com.facebook.react.TurboReactPackage\nimport com.facebook.react.bridge"
},
{
"path": "packages/feather/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/feather/glyphmaps/Feather.json",
"chars": 6098,
"preview": "{\n \"activity\": 61696,\n \"airplay\": 61697,\n \"alert-circle\": 61698,\n \"alert-octagon\": 61699,\n \"alert-triangle\": 61700,"
},
{
"path": "packages/feather/package.json",
"chars": 3214,
"preview": "{\n \"name\": \"@react-native-vector-icons/feather\",\n \"version\": \"12.5.0\",\n \"description\": \"Feather font for react native"
},
{
"path": "packages/feather/react-native-vector-icons-feather.podspec",
"chars": 756,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/feather/src/index.ts",
"chars": 853,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/feather/src/static.ts",
"chars": 729,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/feather/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/feather/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/fontawesome/.yo-rc.json",
"chars": 611,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"fontawesome\",\n \"postScriptName\": \"FontAwesome\",\n "
},
{
"path": "packages/fontawesome/CHANGELOG.md",
"chars": 3982,
"preview": "## 12.5.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/fontawesome/README.md",
"chars": 841,
"preview": "# React Native Vector Icons - Fontawesome\n\nFontawesome font for React Native Vector Icons\n\nSee the [React Native Vector "
},
{
"path": "packages/fontawesome/android/build.gradle",
"chars": 1839,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/fontawesome/android/src/main/AndroidManifest.xml",
"chars": 133,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.fontawesome\">"
},
{
"path": "packages/fontawesome/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/fontawesome/android/src/main/java/VectorIconsFontAwesomePackage.kt",
"chars": 584,
"preview": "package com.reactnativevectoricons.fontawesome\n\nimport com.facebook.react.TurboReactPackage\nimport com.facebook.react.br"
},
{
"path": "packages/fontawesome/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/fontawesome/glyphmaps/FontAwesome.json",
"chars": 17437,
"preview": "{\n \"glass\": 61440,\n \"music\": 61441,\n \"search\": 61442,\n \"envelope-o\": 61443,\n \"heart\": 61444,\n \"star\": 61445,\n \"st"
},
{
"path": "packages/fontawesome/package.json",
"chars": 3228,
"preview": "{\n \"name\": \"@react-native-vector-icons/fontawesome\",\n \"version\": \"12.5.0\",\n \"description\": \"Fontawesome font for reac"
},
{
"path": "packages/fontawesome/react-native-vector-icons-fontawesome.podspec",
"chars": 760,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/fontawesome/src/index.ts",
"chars": 889,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/fontawesome/src/static.ts",
"chars": 761,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/fontawesome/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/fontawesome/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/fontawesome-common/CHANGELOG.md",
"chars": 3306,
"preview": "## 12.4.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/rea"
},
{
"path": "packages/fontawesome-common/README.md",
"chars": 21,
"preview": "# FontAwesome Common\n"
},
{
"path": "packages/fontawesome-common/bin/fa-upgrade",
"chars": 4176,
"preview": "#!/bin/sh\n\nset -e\n\nTEMP_DIR_PATH=\"\"\nFONTAWESOME_PRO_DIR_NAME=\"\"\nVERSION=$1\nDEST_DIR_PATH=${2:-\"rnvi-fonts\"}\nif [ \"$VERSI"
},
{
"path": "packages/fontawesome-common/bin/fa-upgrade5",
"chars": 98,
"preview": "#!/bin/sh\n\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\n\n\"${SCRIPT_DIR}\"/fa-upgrade 5 \"$@\"\n"
},
{
"path": "packages/fontawesome-common/bin/fa-upgrade6",
"chars": 98,
"preview": "#!/bin/sh\n\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\n\n\"${SCRIPT_DIR}\"/fa-upgrade 6 \"$@\"\n"
},
{
"path": "packages/fontawesome-common/generators/app/templates/src/index.tsx",
"chars": 5938,
"preview": "/* eslint-disable react/jsx-pascal-case, no-console */\n\n/**\n * This is a generated file. If you modify it manually, your"
},
{
"path": "packages/fontawesome-common/package.json",
"chars": 1380,
"preview": "{\n \"name\": \"@react-native-vector-icons/fontawesome-common\",\n \"version\": \"12.4.0\",\n \"description\": \"Fontawesome 5 & 6 "
},
{
"path": "packages/fontawesome-common/scripts/fetch-pro.sh",
"chars": 607,
"preview": "#!/usr/bin/env bash\n\nset -e\n\nVERSION=$1\nif [ -z \"$VERSION\" ]; then\n echo \"Pass version as first argument\"\n exit 1\nfi\n\n"
},
{
"path": "packages/fontawesome-common/scripts/generate-fontawesome-glyphmap.mts",
"chars": 788,
"preview": "#!/usr/bin/env node\n\nimport fs from 'node:fs';\n\nconst css = process.argv[2];\nconst svgDir = process.argv[3];\n\nif (!css |"
},
{
"path": "packages/fontawesome-common/scripts/generate-fontawesome-metadata.js",
"chars": 1740,
"preview": "#!/usr/bin/env node\n\n// TODO: Rewrite this script in TypeScript\n\nconst fs = require('node:fs'); // eslint-disable-line @"
},
{
"path": "packages/fontawesome-free-brands/.yo-rc.json",
"chars": 788,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"fontawesome-free-brands\",\n \"upstreamFont\": \"@fortawe"
},
{
"path": "packages/fontawesome-free-brands/CHANGELOG.md",
"chars": 1318,
"preview": "## 0.2.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/reac"
},
{
"path": "packages/fontawesome-free-brands/README.md",
"chars": 931,
"preview": "# React Native Vector Icons - Fontawesome Free Brands\n\nFontawesome Free Brands font for React Native Vector Icons\n\nSee t"
},
{
"path": "packages/fontawesome-free-brands/android/build.gradle",
"chars": 1909,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/fontawesome-free-brands/android/src/main/AndroidManifest.xml",
"chars": 145,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.fontawesome_f"
},
{
"path": "packages/fontawesome-free-brands/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/fontawesome-free-brands/android/src/main/java/VectorIconsFontAwesomeFreeBrandsPackage.kt",
"chars": 606,
"preview": "package com.reactnativevectoricons.fontawesome_free_brands\n\nimport com.facebook.react.TurboReactPackage\nimport com.faceb"
},
{
"path": "packages/fontawesome-free-brands/babel.config.js",
"chars": 314,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/fontawesome-free-brands/glyphmaps/FontAwesomeFreeBrands.json",
"chars": 12183,
"preview": "{\n \"firefox-browser\": 57351,\n \"ideal\": 57363,\n \"microblog\": 57370,\n \"square-pied-piper\": 57374,\n \"pied-piper-square"
},
{
"path": "packages/fontawesome-free-brands/package.json",
"chars": 3292,
"preview": "{\n \"name\": \"@react-native-vector-icons/fontawesome-free-brands\",\n \"version\": \"0.2.0\",\n \"description\": \"Fontawesome Fr"
},
{
"path": "packages/fontawesome-free-brands/react-native-vector-icons-fontawesome-free-brands.podspec",
"chars": 772,
"preview": "# NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n# If you're contribut"
},
{
"path": "packages/fontawesome-free-brands/src/index.ts",
"chars": 968,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/fontawesome-free-brands/src/static.ts",
"chars": 838,
"preview": "'use client';\n\n/**\n * This is a generated file. If you modify it manually, your changes will be lost!\n * This file was g"
},
{
"path": "packages/fontawesome-free-brands/tsconfig.build.json",
"chars": 63,
"preview": "{\n \"extends\": \"./tsconfig\",\n \"exclude\": [\"example\", \"lib\"]\n}\n"
},
{
"path": "packages/fontawesome-free-brands/tsconfig.json",
"chars": 692,
"preview": "{\n \"compilerOptions\": {\n \"rootDir\": \".\",\n \"allowUnreachableCode\": false,\n \"allowUnusedLabels\": false,\n \"esM"
},
{
"path": "packages/fontawesome-free-regular/.yo-rc.json",
"chars": 992,
"preview": "{\n \"generator-react-native-vector-icons\": {\n \"packageName\": \"fontawesome-free-regular\",\n \"upstreamFont\": \"@fortaw"
},
{
"path": "packages/fontawesome-free-regular/CHANGELOG.md",
"chars": 1318,
"preview": "## 0.2.0 (2026-03-20)\n\n### 🚀 Features\n\n- expose static export for icon families ([#1880](https://github.com/oblador/reac"
},
{
"path": "packages/fontawesome-free-regular/README.md",
"chars": 937,
"preview": "# React Native Vector Icons - Fontawesome Free Regular\n\nFontawesome Free Regular font for React Native Vector Icons\n\nSee"
},
{
"path": "packages/fontawesome-free-regular/android/build.gradle",
"chars": 1915,
"preview": "// NOTE:This file was generated from packages/generator-react-native-vector-icons/src/app/templates\n// If you're contrib"
},
{
"path": "packages/fontawesome-free-regular/android/src/main/AndroidManifest.xml",
"chars": 146,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.reactnativevectoricons.fontawesome_f"
},
{
"path": "packages/fontawesome-free-regular/android/src/main/AndroidManifestNew.xml",
"chars": 82,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>\n"
},
{
"path": "packages/fontawesome-free-regular/android/src/main/java/VectorIconsFontAwesomeFreeRegularPackage.kt",
"chars": 608,
"preview": "package com.reactnativevectoricons.fontawesome_free_regular\n\nimport com.facebook.react.TurboReactPackage\nimport com.face"
}
]
// ... and 621 more files (download for full content)
About this extraction
This page contains the full source code of the oblador/react-native-vector-icons GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 821 files (6.3 MB), approximately 1.7M tokens, and a symbol index with 232 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.