From 3320aec7f6caaeeb655d58a0339a0d6818e9e88a Mon Sep 17 00:00:00 2001 From: Ken-ichi Date: Fri, 10 Mar 2023 12:21:09 -0800 Subject: [PATCH] Add icons to repo & use script to generate font (#518) This uses an npm package to convert SVGs into an icon font, allowing us to not step on each others' toes when adding new icons in branches and simplifying the icon addition process. It also allows us to track changes to the icons, and embed them directly as SVGs if we need to. --------- Co-authored-by: Johannes Klein --- Gemfile | 3 +- Gemfile.lock | 6 ++ README.md | 30 +----- .../app/src/main/assets/fonts/INatIcon.ttf | Bin 0 -> 17536 bytes .../main/assets/fonts/inaturalisticons.ttf | Bin 19104 -> 0 bytes android/link-assets-manifest.json | 8 +- assets/fonts/INatIcon.ttf | Bin 0 -> 17536 bytes assets/fonts/inaturalisticons.ttf | Bin 19104 -> 0 bytes .../project.pbxproj | 8 +- ios/iNaturalistReactNative/Info.plist | 2 +- ios/link-assets-manifest.json | 8 +- package.json | 3 +- scripts/clean-icon-svgs.rb | 44 +++++++++ scripts/update-icon-font.sh | 33 +++++++ src/components/AddObsModal.js | 4 +- src/components/Camera/StandardCamera.js | 12 +-- .../MediaViewer/MediaViewerModal.js | 2 +- src/components/ObsDetails/ObsDetails.js | 2 +- src/components/ObsEdit/DatePicker.js | 2 +- src/components/ObsEdit/EvidenceSection.js | 2 +- src/components/ObsEdit/Notes.js | 2 +- src/components/ObsEdit/OtherDataSection.js | 4 +- src/components/Observations/ObsListToolbar.js | 2 +- src/components/Observations/ObsStatus.js | 2 +- src/components/Observations/UploadButton.js | 2 +- src/components/PhotoImporter/GroupPhotos.js | 6 +- .../SharedComponents/Buttons/AddObsButton.js | 2 +- .../SharedComponents/Buttons/CloseButton.js | 2 +- .../SharedComponents/INatIcon/INatIcon.js | 80 +--------------- .../SharedComponents/INatIcon/glyphmap.json | 80 ++++++++++++++++ .../SharedComponents/INatIcon/index.js | 69 +++++++++++++- src/components/SharedComponents/KebabMenu.js | 2 +- .../SharedComponents/PhotoCarousel.js | 2 +- .../UploadStatus/UploadStatus.js | 89 +++++++++--------- src/components/UiLibrary.js | 15 ++- src/images/icons/add-comment-outline.svg | 4 + src/images/icons/arcamera.svg | 5 + .../icons/arrow-down-bold-circle-outline.svg | 4 + src/images/icons/arrow-down-bold-circle.svg | 4 + src/images/icons/arrow-turn-down-right.svg | 4 + .../icons/arrow-up-bold-circle-outline.svg | 4 + src/images/icons/arrow-up-bold-circle.svg | 4 + src/images/icons/arrow-up-circle-dots.svg | 4 + src/images/icons/arrow-up-small.svg | 4 + src/images/icons/arrow-up.svg | 4 + src/images/icons/binoculars.svg | 4 + src/images/icons/book.svg | 4 + src/images/icons/camera.svg | 4 + src/images/icons/check.svg | 4 + src/images/icons/checkmark-circle-outline.svg | 4 + src/images/icons/checkmark-circle.svg | 4 + src/images/icons/chevron-left-circle.svg | 4 + src/images/icons/chevron-left.svg | 6 ++ src/images/icons/chevron-right-circle.svg | 4 + src/images/icons/circle-dots.svg | 4 + src/images/icons/clock-outline.svg | 4 + src/images/icons/close-bold.svg | 4 + src/images/icons/close.svg | 4 + src/images/icons/comments-outline.svg | 4 + src/images/icons/comments.svg | 4 + src/images/icons/compass-rose-outline.svg | 4 + src/images/icons/copyright.svg | 4 + src/images/icons/crop.svg | 4 + src/images/icons/flag.svg | 4 + src/images/icons/flash-off.svg | 4 + src/images/icons/flash-on.svg | 4 + src/images/icons/flip.svg | 4 + src/images/icons/gallery.svg | 4 + src/images/icons/globe-outline.svg | 4 + src/images/icons/grid-square.svg | 4 + src/images/icons/grid.svg | 4 + src/images/icons/hamburger-menu.svg | 4 + src/images/icons/help-circle-outline.svg | 5 + src/images/icons/help.svg | 4 + src/images/icons/id-agree.svg | 6 ++ src/images/icons/info-circle-outline.svg | 4 + src/images/icons/kebab-menu.svg | 6 ++ src/images/icons/label-outline.svg | 4 + src/images/icons/label.svg | 4 + src/images/icons/layers.svg | 4 + src/images/icons/leaf.svg | 4 + src/images/icons/list-square.svg | 4 + src/images/icons/location-crosshairs.svg | 4 + src/images/icons/magnifying-glass.svg | 4 + src/images/icons/map-marker-outline.svg | 4 + src/images/icons/microphone-circle.svg | 4 + src/images/icons/microphone.svg | 4 + src/images/icons/noevidence.svg | 4 + src/images/icons/notifications-bell.svg | 4 + src/images/icons/pause-circle.svg | 4 + src/images/icons/pencil-outline.svg | 4 + src/images/icons/pencil.svg | 4 + src/images/icons/person.svg | 4 + src/images/icons/photos-outline.svg | 4 + src/images/icons/photos.svg | 4 + src/images/icons/play-circle.svg | 4 + src/images/icons/play.svg | 4 + src/images/icons/plus-bold.svg | 4 + src/images/icons/plus.svg | 4 + src/images/icons/pot-outline.svg | 4 + src/images/icons/rotate-exclamation.svg | 4 + src/images/icons/rotate-right.svg | 4 + src/images/icons/rotate.svg | 4 + src/images/icons/sliders.svg | 4 + src/images/icons/sound-bold-outline.svg | 4 + src/images/icons/sound-outline.svg | 4 + src/images/icons/sounds.svg | 4 + src/images/icons/sparkly-label.svg | 4 + src/images/icons/star-bold-outline.svg | 4 + src/images/icons/star.svg | 4 + src/images/icons/trash-outline.svg | 5 + src/images/icons/trash.svg | 4 + src/images/icons/triangle-exclamation.svg | 4 + src/navigation/BottomTabNavigator/index.js | 2 +- tests/unit/components/INatIcon.test.js | 8 +- .../__snapshots__/UploadStatus.test.js.snap | 12 +-- .../__snapshots__/INatIcon.test.js.snap | 4 +- 117 files changed, 666 insertions(+), 209 deletions(-) create mode 100644 android/app/src/main/assets/fonts/INatIcon.ttf delete mode 100644 android/app/src/main/assets/fonts/inaturalisticons.ttf create mode 100644 assets/fonts/INatIcon.ttf delete mode 100644 assets/fonts/inaturalisticons.ttf create mode 100755 scripts/clean-icon-svgs.rb create mode 100755 scripts/update-icon-font.sh create mode 100644 src/components/SharedComponents/INatIcon/glyphmap.json create mode 100644 src/images/icons/add-comment-outline.svg create mode 100644 src/images/icons/arcamera.svg create mode 100644 src/images/icons/arrow-down-bold-circle-outline.svg create mode 100644 src/images/icons/arrow-down-bold-circle.svg create mode 100644 src/images/icons/arrow-turn-down-right.svg create mode 100644 src/images/icons/arrow-up-bold-circle-outline.svg create mode 100644 src/images/icons/arrow-up-bold-circle.svg create mode 100644 src/images/icons/arrow-up-circle-dots.svg create mode 100644 src/images/icons/arrow-up-small.svg create mode 100644 src/images/icons/arrow-up.svg create mode 100644 src/images/icons/binoculars.svg create mode 100644 src/images/icons/book.svg create mode 100644 src/images/icons/camera.svg create mode 100644 src/images/icons/check.svg create mode 100644 src/images/icons/checkmark-circle-outline.svg create mode 100644 src/images/icons/checkmark-circle.svg create mode 100644 src/images/icons/chevron-left-circle.svg create mode 100644 src/images/icons/chevron-left.svg create mode 100644 src/images/icons/chevron-right-circle.svg create mode 100644 src/images/icons/circle-dots.svg create mode 100644 src/images/icons/clock-outline.svg create mode 100644 src/images/icons/close-bold.svg create mode 100644 src/images/icons/close.svg create mode 100644 src/images/icons/comments-outline.svg create mode 100644 src/images/icons/comments.svg create mode 100644 src/images/icons/compass-rose-outline.svg create mode 100644 src/images/icons/copyright.svg create mode 100644 src/images/icons/crop.svg create mode 100644 src/images/icons/flag.svg create mode 100644 src/images/icons/flash-off.svg create mode 100644 src/images/icons/flash-on.svg create mode 100644 src/images/icons/flip.svg create mode 100644 src/images/icons/gallery.svg create mode 100644 src/images/icons/globe-outline.svg create mode 100644 src/images/icons/grid-square.svg create mode 100644 src/images/icons/grid.svg create mode 100644 src/images/icons/hamburger-menu.svg create mode 100644 src/images/icons/help-circle-outline.svg create mode 100644 src/images/icons/help.svg create mode 100644 src/images/icons/id-agree.svg create mode 100644 src/images/icons/info-circle-outline.svg create mode 100644 src/images/icons/kebab-menu.svg create mode 100644 src/images/icons/label-outline.svg create mode 100644 src/images/icons/label.svg create mode 100644 src/images/icons/layers.svg create mode 100644 src/images/icons/leaf.svg create mode 100644 src/images/icons/list-square.svg create mode 100644 src/images/icons/location-crosshairs.svg create mode 100644 src/images/icons/magnifying-glass.svg create mode 100644 src/images/icons/map-marker-outline.svg create mode 100644 src/images/icons/microphone-circle.svg create mode 100644 src/images/icons/microphone.svg create mode 100644 src/images/icons/noevidence.svg create mode 100644 src/images/icons/notifications-bell.svg create mode 100644 src/images/icons/pause-circle.svg create mode 100644 src/images/icons/pencil-outline.svg create mode 100644 src/images/icons/pencil.svg create mode 100644 src/images/icons/person.svg create mode 100644 src/images/icons/photos-outline.svg create mode 100644 src/images/icons/photos.svg create mode 100644 src/images/icons/play-circle.svg create mode 100644 src/images/icons/play.svg create mode 100644 src/images/icons/plus-bold.svg create mode 100644 src/images/icons/plus.svg create mode 100644 src/images/icons/pot-outline.svg create mode 100644 src/images/icons/rotate-exclamation.svg create mode 100644 src/images/icons/rotate-right.svg create mode 100644 src/images/icons/rotate.svg create mode 100644 src/images/icons/sliders.svg create mode 100644 src/images/icons/sound-bold-outline.svg create mode 100644 src/images/icons/sound-outline.svg create mode 100644 src/images/icons/sounds.svg create mode 100644 src/images/icons/sparkly-label.svg create mode 100644 src/images/icons/star-bold-outline.svg create mode 100644 src/images/icons/star.svg create mode 100644 src/images/icons/trash-outline.svg create mode 100644 src/images/icons/trash.svg create mode 100644 src/images/icons/triangle-exclamation.svg diff --git a/Gemfile b/Gemfile index a376ef0b1..15a15e39e 100644 --- a/Gemfile +++ b/Gemfile @@ -3,4 +3,5 @@ source 'https://rubygems.org' ruby '2.7.5' gem 'cocoapods', '~> 1.11', '>= 1.11.2' -gem "fastlane" \ No newline at end of file +gem "fastlane" +gem "nokogiri" diff --git a/Gemfile.lock b/Gemfile.lock index 772033f7a..402b30e71 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -209,6 +209,7 @@ GEM memoist (0.16.2) mini_magick (4.11.0) mini_mime (1.1.2) + mini_portile2 (2.8.1) minitest (5.15.0) molinillo (0.8.0) multi_json (1.15.0) @@ -217,10 +218,14 @@ GEM nap (1.1.0) naturally (2.2.1) netrc (0.11.0) + nokogiri (1.14.2) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) optparse (0.1.1) os (1.1.4) plist (3.6.0) public_suffix (4.0.7) + racc (1.6.2) rake (13.0.6) representable (3.2.0) declarative (< 0.1.0) @@ -279,6 +284,7 @@ PLATFORMS DEPENDENCIES cocoapods (~> 1.11, >= 1.11.2) fastlane + nokogiri RUBY VERSION ruby 2.7.5p203 diff --git a/README.md b/README.md index 9a9222e72..8f5aeaad0 100644 --- a/README.md +++ b/README.md @@ -127,33 +127,13 @@ git commit -a -m "Updated translations" ## Styling We're using Nativewind, a styling system for React Native based on Tailwind CSS. Check the [Nativewind documentation](https://www.nativewind.dev/) to see what styles can be used in RN. -## Creating custom icons +## Icons -We manage our custom font with Fontastic, so these steps can probably only be done by staff. +We have a custom set of icons stored as SVG files and compiled into a font. New icons should be included with issues in a ready-to-use form, but some editing may be required. -1. `npm install -f react-native-asset`. You'll need this to link assets. -1. Get the new icon as an SVG file. Make sure the file name matches the icon name and no prefixes like `icon-` or `icn-`. If the icon is called "shield" the file name should be `shield.svg`. -1. Add new icon to the iNaturalist icon set in Fontastic. **Don't change any of the existing names** and **don't change any of the existing selections** (this could mess with other projects using the font). Just add your new icon(s) to the selection. -1. Click the "Publish" tab and click the "DOWNLOAD" button to download the zip of the font. Unzip it. -1. Create a glyph file from the CSS file in the zip you just downloaded, using the following command (be sure to replace /path/to/styles with your path): - ``` - npx generate-icon /path/to/styles.css --componentName=INatIcon --fontFamily=inaturalisticons > src/components/SharedComponents/INatIcon/INatIcon.js - ``` -1. When adding new icons, go to `src/components/SharedComponents/INatIcon/INatIcon.js` and make two manual changes: - 1. First, edit the line `const iconSet = createIconSet( glyphMap, "inaturalisticons", "INatIcon.ttf" );` to `inaturalisticons.ttf` to match the name of the `.ttf` file you downloaded. There's a discrepency here because the `generate-icon` script makes an assumption that the name of the .ttf file is the same as the name of the component. Components need to start with a capital letter, and `inaturalisticons.tff` is likely not a name we want to change, since we're using it on the web too. We'll probably want to write our own `generate-icon` script to do this automatically. - 1. Second, add the following to your exports to make sure a user can see all custom iNat icons in the UI library: - ``` - export { - glyphMap - }; - ``` -1. Add `inaturalisticons.ttf`, to `assets/fonts`. -1. Clean build folders for iOS/Android with `rm -rf ios/build && rm -rf android/app/build`. -1. Run `npx react-native-asset` to link the new assets. -1. Add your icon somewhere in the app using `` where name is set to the name of your new custom icon. -1. Build the app on either platform, and you should see your custom icons. - -If anything goes wrong, check the [troubleshooting steps](https://github.com/oblador/react-native-vector-icons#troubleshooting) from `react-native-vector-icons` instructions on creating a glyph map. +1. Add / edit SVGs to / in `src/images/icons/` (`git add` any new icons) +1. `npm run icons` +1. Rebuild the app (you'll have newly-linked assets that won't hot reload) ## Troubleshooting diff --git a/android/app/src/main/assets/fonts/INatIcon.ttf b/android/app/src/main/assets/fonts/INatIcon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d10d15d3a656727360e9dc3db1719a237110e57 GIT binary patch literal 17536 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 Wg=Lt^ZEY+stX>7icFicHQ2!T#Sn;m_ literal 0 HcmV?d00001 diff --git a/android/app/src/main/assets/fonts/inaturalisticons.ttf b/android/app/src/main/assets/fonts/inaturalisticons.ttf deleted file mode 100644 index be97f0c368e1fa871126bd1bd75f7f5e99bf36de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19104 zcmdsfd32m-dGGhW@3-&Y%(u*pMl+)sX-2j-YeqBUSe7h1PVAUCNfU4aNl0W_wnbz~ zk!2_88k(gnDU?9d7AWKZ-Dt}e%H`1I(#zJ;%hp?ZIKZLqg|Zb0w9vx|z2g3!Z$?hi zhRZqq^J-?k<^A6MeU{(zJntuoNs{D9_e(;$;p(fOfBdoT?C(g@u?LY_JaYJ|tEFAi z^KgF(_oeG^nrcqH;o8?o61xTWCzj4FZtS||%%>!YA4b{_&n%wb`0|J%0=C--Y`} zSJ#&ozx|OP&7(Z(kRCa=c<+Yv2L3@j-;4Xo+Tyw8Ti!CNO48v~q&>N@etzrA|9t*- zNxB;Ci~l3h*zkMwks}|x!`uG@$>Kk2y=zb*c9_EyE>@WD>_8 zVstF6DJ|PS$Z5(|{LdxoIkMo_%e6qa_(PrS*Ca*K*|qF6?vM1(Kald$gH%8<(tPQ` zfBI6o;q+Cfq=ie;rEA%xA77$Aq;1hy@VC=NI^#Fe|D?~bj-I6AM}KYn)}=t2!}$R` zG0`sl+0t&QC3U45j@L?iu)Zy68owKm-h9S5Un}jSvE%QgbOFZ&DJ$vey(Ep{Jd0lu zb2OEvVa;jXrDDH^f59E~xG2fe-{TxhK2oq!mnJVwU+P}kf9b%bgO`q6I(F$=)PX;Y zch9AnOZ(FFD=%HMlV1M!@>7yj{z3WsIDW7E-L%%;oMX-L*E>?{GG<$qH1yKIXf2G~ zmJVX%E@tEa+7F}*#t=#odXr#0Im}2w8bBWpNrO^JDoYhlN=13U@_BVZeMGBhzo>mhm-LGMl=))wE!M;KqxQF)lkSJTxBHI= zKbt9JKAgQ69*vsOBhfozIo=%~jUSCapYY^{+P9VGwIfARW%CZR`USsC3c>b+Hd?p z7DdUxbP(|{tnC`D#qVZGHYpa8Oep#({l09!KWCPbmY(RN!_`rPZgKIfN-ebiTIzD~PzK|xp z+ZyUU9BU;$K)y(52{>#2p6hcl^@nP7Z1s-%5SR4st~gZm$}F) zug?iCivxPJ6)5;foRyGvX=+^_W^wD6$d zX%kF-Nc-BX%7v(LC4*WyQx#7ZBfaL{T<1zCqyBlcB@1~z?Le%uVZsrf^b)Mc8)!XP zjN!VhQOC$;y7R2eaY*8yupaDH_K@9Q5L`WDK~h#q4=K+MK7(?rm@e?C3ZiY&iEe9s zO1)L*F*C%SLYA94&tQR13Ze9A_1pS2iXz`FbnQ6K7lZ~_hI&2rRrYU?xdC)(4X~pX zwIc9qV>2#0Ze0OG0W?wCY7jDjHi}JNMzy9Xq1KB6& zaB(9$C?CI>&ExXs<4P|pnt^U_ONZFsu)hFxU6fuWeSwugzcY6l_O*(@ET5&6$ZbnJ7)oUM2 z1b%5z-$^XSQOGtq6M`vRuu7z5%D&EpqN#?91comYe%??NB)CEms_sR;TPWtT?tq$z z&}Bg;iDV;WnxfgdEGxQeDZ1c{fn!wJry4w4(R?M4!vQ8U<){(Ac5r zL)(vAHXF6gz~-)MyBWsSOi{RwE;Gxt6eeWU!B8U`98_^af0>GUx$1LIWn9)FgdE1l z_m9nu&)FurYzg66vfw)70PbAK`FN)eP2;9xt6Vj0!D^u{vZ`S^{}Z_sRpCs|DO|Pb z8WK-2d(Bz8Y^b_ryRxS1Lbfd>u(U+QFf$q^in~I{xU+?<2_~vz_(bTo z{ND`E3Ifa5_Z@rj{@r6&+Ti*dXs4{~@s{dw0wPT? zJ;Vh>3;|36SdAv`s#*ie3k%Q@DgTm;&>(lTdQxq4iH{*eun>vbpbENRRgHa^sd{Le z`uve&`*e%hp{|ZS^3g}m2Ht`dRp)M*o4aNFK<7|?CU>ZF^gz}*U=LPD4mwtA-t*^z z-@3AWusBdG9_${O3!DSiF3UMMQe`jG&Da37kB%z35u5tlwM&mYvUL1*FF4?P^Hk^D zM)i7r_h7MD$lo|0S@YhN!-pKyG&ApH=iS9zVW4<$@4~?r;k7ww z0iFIJB(nt_CXJ-1xUJEtjRTWjdgwzRzVfAX{P2f9^x&1XQ>SXT9y(NAUcPmC`4r7L zY^Xlwt4iarMZ3~|SZq?aQHT0(Kua~c1PSm3!h%wnVp1D7t*uc z(&D7n?y68S-zsvMk#0?FLkc^QfYSy-|f@IW8izi z3#ap}(2A4-h9SesUSPj~`Ea4hCtxjNMzH#@J+Qhi^H?U;7g%sDO;Q0M+dwjHU`ee8 zH9rHzQDu^R-!*5inR7~pK7Qww=g)73`6v^yD9FV;VmVQ%EGU0)qIJzRt^H@>N!w<3 zUpe)HH^2D>Q)U#zj_DE+Sxz>}Bro%QEQ<~P*aDV(HFUHK>$d1r73Fqcgp z5Va9^@cGwvyVrKFoEaWzjzCTp0^LEq(+~4X2;lj-QK;|ogSH~*Jp^HO=*Jt8~b1I4vfKHATd}@ z(AzWxT0%?<*;rSI>cGd)%0L|Hf?j6o&RlAg)WFUzV-H@Rf5FW3fsG^Aj$D_2{+>?x z;I8@1;OzF7_l*wa_Cg&fJU674f|EnJlI`V&OdHa&n_>IdT_~A9cKpTy%H<%7v!$a~ z@0!i*6{=&hTF$l0g{v|pwVKm)wzp8;HH*IIrK{K{*~h^}d!+@eDDeznK(_<9(gNHD zgOEnR2V$oKd5`7mV68i?Ne00bCn1nYy#e`@gg`#^{5wx^%QVBXSB*Hjs@t-q7=ztg z_e?BIW#lO5?A}uxJU(dd=}f-);NS?DffZ*4KV)&s;OtGAbKH`H3KXPF>Qb?_T)kPp z#!#|qI}atswKY6i25=4PG7&=S%=t>lu1Yz?w)UO8`VksFL;1m+;3bbmY>d zh29}8*MiUO6PS&iazoM32+C+UH>iAm`)lm@6Hh$BPH(^d^=HnoPrUcN?``4-_629y zlFh!)zJIxV7JNJauTTx1pfT`F7gTWzw9d~-4@-|qZvual%<2Cc1a~nq)1Wvep3SHiEwCNf|DIV3(Mwhs*K2zV%v2Oc%7{1e(DHovcl=85Gyl5{DfC_EW*P z&DL}Yb{Uot9fNI=xB~8#1Xff$&)S`OyWdGtB2)@>v;S^nRhucQqX}JCm;w`4$yzUD z*5P1A2I4fsA$Emh83r)6Doouo8s<=<$*Q8NvcU`{>ptO7nLw!uZAkzWSX+RtVJb5X z_l7ID2;>1n7D*e>Rb+M91c=Usa>L{r*j~=G!R`R9j_jGAg{UUfn^fa&rt+B~pLS75?4-wFABrsJ4~5IE(UHFj|m` zJD3wwp`7zEB%RqjWQNU)9SsdR?okC3q(ix4STqcwsbm2;FaaRoOhf3dVsS^Y3|*jF zB?E+Ct`y2#OvIo?VQH3Xy7CZbrm4uDtfGTz@|AQ{Fi=3pE%;F3Vdi22$47}?Lx!r|%)9~~ztflg}QWVmaJ=5~o zV_f)N_2~F005SxOnlRTghDY}ujH-cZ9Cu^SvrPCRy3+0JuOUO<2yOyBHb9g;D|jB1 z3bmop5Bvn-M088`uNJBi5bq2KGexs7Zz&n1iwZRQ!E*&N#;4^nvVtMXN{mJmcX3I# zplkr4G>HuA9+7bHE$K>_xF+{>*r>9{ z15egrw0Z&em~brJW44uqieAbnhVEzOL6lY4kZR}^EQ=58%?s54n6-mxIm1KkHPRCJv?P?qH&DA|F=jd9adi|_~G zPv%9{G{+6bM+P%lv~Q~p_@)9=*hld&0A*Q`st#lo@QWP?)yRjkx!V=8Z)IFP@_j9n zR7&IHrAp#ho*(IM#`0z1?l$ERc8v&Z@R^bYJ=LV^*_RMSd!O`|peI!$+16-dqA`C- z9M)8b9g>L9Ff%w1w1!`z0a=H9aZ<05!=c)sqswvA!ZOhf9TPaJLoLD8EMy^8HG$73 zY?fv6>@~?PQDQhjk|j7b%e)B%)(o3)SG4e)&Pg+Zglwpg(He=m|48CmD%ME3h3tWv zWrS+D4?HNGu@D@{qj3wOgT6SB%b+K(ciLr2$^=uTpaIcf6-={e8cCoDo;?pjsN`Jxlux1!Swjer9&2~qM-G#%BXYUgk$H_SC?cu z?VmZ)ltpEvI1<+iZX|+%!bsvka=sxxEM~I{DB@(u?{}?q1A8xMxelwU0}JsO`b~-* z$Q2NlMgXG_iWX{}1QKLPvqa)#rcSD!lzU1|FcxFncRM7*qOioEO(E0Rjj-f~oD650 z5tbr|_$U($3T_;Zv^~$;cWjRqcb9(swZ46t{p|q7==*AqiPIQcY60KwOQ1&<7?M%>beW zKq~OB<5PpQPepD_PQwPobYG8PO)raDh+P+p2j zq&3f`!W?S>gMtK&Qcw9Bl+~*f&#AIr4XG@rEGizt`j~?czdlq2Yfi&q+yup8O&{gh)*Cv-hM*>pP{AM;9bG4fVknzQf*sS z+3(4Qs|NzEOoLpUmJ3GrOs2Z9ST)ZCUXja@YXcn1zU*_Mdx{I^tLr&-DF+lYgbLxK zgo?65E@!4nyLXphlJU^S=q-XktZeHDHt?g2Qm0j!*?@2E`v1rFo~frPJOlNzHdVan8H2cqs+NNt~*95E7IC#7*2I1|p7>tZ-D}3F#so1bI0F(G)%J z`RG$x-FXc7of1A&7@p5Gs*|jS4A3ahMf3rNhV1I+fycehj^?%61j`S*p{$2csk&zP z#lSQI3<;XV*E41uj|<;148wK20CS+a5dLsHJ6Q)#U*RHel#C14GcvC2qpT0Nwk5Jv zp11}m#@0MNlT`zUxh59Xf*La52gl;)1`W>@lsIb|CZGxi>?jHbYFG-8F(3yk7y--(0qm0Miv#Ra>~ExB zm3~Y5Jz&Dr90C^WEfAmt>=_21Cr|+<8JBoc*J|MR6zEMdfI_f3&;vBRi%=s3a=Ik3 z2Ae*WGzTDEkjJF}iwqz@h7LX@o>orli$&~G8stdSf@hF~(le|d4NagN45lQ8?mg*hAd>{cVIrM3& zU7${|7Lfc60&lQg5&I%_L@R`adip~vLP{7C9hFoy&iVVbrkXfo^Qk2O4)Kt`>tC*0Ua2C0iEmWrEhg*C1D;Wy3fWkq#rMzo|)l$JX zV5g~;W$A|OfDPZfr<(KkRjY%ug&_&rv$X-HiTDocKQ1mt|$ElYT%b{#@pa4RTrfR{=4!ok5 z@q=A)paR4a2zVlY3NW7e%AU#*7%-u&j2CVS7K#m1sqeNtPge*1*-RBS307JGZh$fr ziZ=-vB2=J5bd3BTPuq=Wuv$OGZq&d=m~MQg=>VXI1eb)Xickd>u{Dnv2ckg4i?F5tAmTtrLOgJ# zrkV=3T9nQU%?&=VZF+`shp4toBCU^hp8hh~B61kq3c99ff-lIys-0mqA?XD3RG zpMh^jS4~TcA`#&clA(!^j+9#F`!SXoXyof$HMq0st`tRFL|3+@kqnJ}j+JQ#OEjyx{S zz!Uuf=}ve|@5S6AsEwFBWOX%lmcf^X;gRV{G5AQaW>+<_h?-rhCXT0$PETYqb~OWNiy*hyZ9`vB zd$05%v2nQ zM&n4Kh|YD=^Q9MI&L5C|1#z@A*oa*Sa1nMBkM}~3#Oj?y17XuW9;n(N>xUx==~F_~ z%Q}Ts+u{4mIVc0nt~SCTHHw2!9gy>>IENfb10<=xns`Qo+x^K*QNiRs;hI?|%jADF zGk}(#0?cwOgz9amRi-G3tnq)04UtnmlPEB@#OHIe6&ddjP(%gzgmLBmtrzBu!f)$g ziC2EU5N1oSi(&bKKOhk;CfECyDB(;MQWqc|t;ii9e>KV(2tVZJ_jD4EO@>r0lQ3R&K z*gadrE=*?_#6k z5Cvm^fhhh96#x@>o?#Ooxzg}gou00;>YhEnAM7bHLY1g zNE`09L~GTOq}GJr_Q3SvJ$nvMA8P1Pq&J3=zfXqJ!yna}l&@J!;@XTB$9k)Z4Q1#e zeuvTLKZm5iK5T3>P-(vt!W-y9hkY})x4&eSt=HJtLwJ#44h))CG`f#WL80=!b^V*d;$eyBM0?>_}BjvgA8OfG3N+cbFg|moO!o z9?7IB5BNNOd(8dqZ<{X5uwBKs7kA<8niH=17SnaiDQw#^*o)~nWwP71zZOL-KjoR* zpDNbtMK*1EH$fVPu0uy`CCLX@VH9R*MG zCIuEq9OD}w;Oujd>GJl^YbxABpMt~A_P*_ep~L>d2?yauJzy9=fRg~Ta8zX_&G?K0 z%nyaQJ&7K@34ODmt&gIkJrR)#h@=BwH$)Z? z61mBM8gYxY!OlMr?Hm(n=OIbpK<_p&Dh!3V4}?=^#l54Wdq<~4#sHYU?f%;!Sa5B# zgA=kmagcq+vxW>?hD~A&!LYDiW_es1ExxNbN{2s2%wR~FJ8@zj+gj;b9-HTUeoU@z ze@nN`0>mv2Hi05^A8&$8vsbeJf%hn|$AD};^aT@#8ARv0ogXR6%ylwwnG z5Zyc%KjM6oVJ{;8k>Ke|DA<-FeFE!FZ=KvJy-WHEn_#EeMfO+hE6@j5^LzQj{H^@Y zfMB2*F$)0R9Vo1&_%N(u;3{&*qWWfc4luV??V@v(fGRt!0}P?Fw4?3%9PiAb z`-r(vX*JS9L`bklv@wHca;Ke+EJ}J~A55F*53)@WV9W}pAN|Dqv}ukS=zWz~8+9e^ z?#xdbf7lAsU8I+%pgQxD=AfBi4zS>uLyuLl5t}|;8e?y9)LtKvBO$))rz*5w7#5XG z;PQ!fW$YY<(FB8NEC@&SjDGUdmpQ^pMX1lT7FbmM83!$N+70RhW_(c4 zY=a(l=2|6)R0s1D>tkjR)lhyyrzpUQK9P4E8Pk9QVwzyZd4;0iFuq`VBZf>0n}Scc zfV&fPO7U`-`M3Z$?LEVh^J4@U@q}d&U?PhR0dFKBkb{6?>J%VPi~>)94)+9f4o8k& z^|*%hMUStC9~Tw~T2$c>rY5O59Uci-VO;fO#I`B!MLTHW7yw|yrH0Tq^(3u~$^sMf zpGlu%DCiX3ry1bVNYCh5I+)St=rgLJp;7D-d7ss1a!;kLQyxUZ(`lKd&QeEu%~aC% z=@u3c$5warAJ2ibFj|DAb~=JaDBh*O4@UDO447%X_TX%pL;olMhJx@;VmV-_(Hu~J zl;bj-&bR@f-#+u~*2phJ4JtJ2@OQh|bPI>s_cav7iow4C{0KW1K~rcop#dxk1QIYA z^dYcmAWN8q4;Icl7=7g6L4^rL3NU7m29A1Y{b;d!gGna?_vn&}jTO{Qj1_SO%7rYw zWu{yxqSVl3j0v_pvS3RDvQT9{S*qBgjDjd%L}U*>XEL>kq+nUf2qR%jGEx-NM^F@L z)D;|s3O5nQ155GYC)7C1f7+11T*K*gcnthB+t#a;(2ctQFD=(Adtyg-CQ+fei*oM5b_dqg$t{=`-aY(0Xg>#IFD z;&7jO(p9CW>0m)(PsVfC;j!ncBd%#NAP}0Qb^+9>-APy>(3y~n*w@vJ;FyJloNis} zH@$v~EDy+8Fa^X@%DODK8>TPG4WwWJ43Q;@1O>vsjok<;Z4byGYC(_TmBmH`*=msAixgd;oxY@|}I)0rq8Yb6XUx+f2+ zyWav&D^Z2Wt4dabuU`*>TrS8Xh9YF_#EH==(RNCqvTA@uz(PBW^3x02t}>=+d5?yv z)^&XlVKK#U3i*+de8W(D2pksaeigKXo&n4-?5)+=57`f46-o?otCEQDJ^_@^q}-T+ zKZ~}GcA7C8QASHcnmjaAV1>!C87nv&STkdjxEmUhwV~3eB65`+`-JR<*BzXgi?g~P zJBVgBn-CLD?CaThZsOo|p(_UkY&s^}t_mFWCBn|xbe|!jD(M?IwCj-eOtxF6Uw-;K z_&tf^lc!m5_~kD@d>TKTpRw06i+5f-sYTmK9T2b+i4KA5+SrPyC7_-e*tkTr(9J64 zAxo0*CjlQOqE@%T?(@dINiZ~|Q`>cKQ`MhoEHu(p;FIuU|Gcl>s;b*hs`{-uf`-9& z7q%DJ_dFD_^&I@?ZQH(0)lE51rHD_7)+Xh{>TTGVgJQORJKW&@_U8|6FQm4^D8~Ld z@N7bF9{KP*4Ux$SVppGWosfx6hB#i?i9GgxFN(bFqjbD{4X4G<9s8Y96qTYkr^i)X z;R}NTZ#=Wl0=w7XW0SIA8}iZs0LKJ%Agv=9lkV~y)p8DAK(D_-vTk|s)^Sz4e@n^545ZvfmjeS z=-WqRZ`EkMC7K<~jZ8uaolj9cSs1`~5ENu`bP{-no_^c$=@%W@?H_pX!4EvRT~1&5 zT#&`UxZu|a0zkX}j2tNBL&<4cj{PIDJ@|o-rSE^TgF=)&@vCBi^97vTJ;;IWDmdyI z(e$j8VIN}Ok*c_%mmE_J4d)naHUyLc2q;2%B+L+9YOtJDvfgZ3M#a1{F2#4Ms)pdc z2Dt@j_GQa@tLb}|WiD-h+>c|Qb(R2DuvL)q_%t8zZQwrukj*#%EB$$RYw-cJOYcRJ z10T(keS`Ne>CHuSVy3H+-9t0fwmdU(`cCyziCP)qlQImlA?J zs3PpuKo!&|*sa;_cA5!$NS23Xi|g2=IQ;bGX+@p7Qsx(Bagobc9_859sN=_Lic*7H zjc%C0&9`NlJaY!HOIF4g_ALDL?48fN3wQFc4?;y#C9+&Yjqs~ozB#Wb&7ATL!B;rG z;u}itNx3THYf&yH=sIne{rfd4lDuOs^`_RR0XUZNY(gPMZK0emu$bcpFFai9H+KgZiX4ZPV`7Fc#Im4Mj4ivDoOLXTsa+Z~y@4jy86iS2io4$Cpm%n0UL z>^>`CJ}&N1`6vRz{3*+4dYH9u`o_?ew$&*M>=(-dLhC{_5lPgyuwMl*{t9fxPpa&* z1?CysPr;mLEz{)z{6B0M8#?9vVbx$Y$1{I@;3LeOgww)eUz{6JWQX8gM^}GVYo5BA znTIMls1%xO_@LNlFxQY}^rGScHq`Trq}EX!1w%WgQW-mML6)fos8!jZuHUr%1qZLk zX$~S5On<%(cYvcklwwc3W{bDy4AXXuTMXT0Z3;=5_Vzblq&v207_Xw(GxW0hYT6!R zOOK^mi~8e(!%2gYNYd~>6?)eK{d;TwT1KAl^{?@k5i9hs5%pk4p#hj|AfuCQKGnZgq!{kOUb>1m$m-IHv?eV|TR>==IIrUVJnmMcB}A^)a4oH@ zEpA=dTwGl_zqPWozJ`<=rDX_;3&^}kfx{b@&sgAeFUmu!4$vybtMWUBREp`IYsx%Jd{|{tMNTP<_T9d&YI|@+zG0mL7l_nYTUEh|nV3 z_IUpduYHo&+-Cv2o>>+m5ECPmnPYh8iVd(LT>RuludpFjWi>X;Mp&IS*eKhD|3Wdw z#^F<%lw7#n_poW!WGyzs+HiPx*sMGjVGDp0)nv z>hkF=tCzaDa^~!o-n+iAkzHC{KfgS2^1{~E`r5?O%I4DQvcI&xabKFPpAalo7goYM3wpK1KYjk~TZP8shwY;{qa(ZQHaSMx-W?4Bkadvri!=x;$i}zvq-1KsJ z@zl!NnTeHCL3)dSt3yR5*4EdSqi3b8pFF>GVRQLZ_^i~8&6SIbTg&?D`kD1}i<@_u zycy8nD%E^_*%lB(5=fF&h z{?7Bw#ig@rE2kDQhF*b-%jeOr-u2Sf%G&zI*7D|kXI571e(LE9YiCw4wlvGi+WFEnWUtKxn z5dTlyv%YzXnhRIf&x1Htm)A}`UAelkypGBl^#g*lIkY#OY zWz{{qc<$r{$d=6s^z?!a$~&{uMI8jScn1019onD3WUZ_@=Qq&s>U|(GR4G#t?abop zDi%rKTD*60b8+pi9)~k%TYz-jz3bMQLSH))B9#rF{q|MwN7}RgKhysO DLgRG) diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json index 26d5edf7f..40970cc47 100644 --- a/android/link-assets-manifest.json +++ b/android/link-assets-manifest.json @@ -1,6 +1,10 @@ { "migIndex": 1, "data": [ + { + "path": "assets/fonts/INatIcon.ttf", + "sha1": "47a247e3585aec0da80245083a706f676a7e01c0" + }, { "path": "assets/fonts/Whitney-BookItalic-Pro.otf", "sha1": "15854f60175a0e82b794c259431ec45ea4b40103" @@ -12,10 +16,6 @@ { "path": "assets/fonts/Whitney-Medium-Pro.otf", "sha1": "33ca073c11f46dc266a7dc1adeaa102891bd76d1" - }, - { - "path": "assets/fonts/inaturalisticons.ttf", - "sha1": "db15c060c16ae5364838d3222510575577869ede" } ] } diff --git a/assets/fonts/INatIcon.ttf b/assets/fonts/INatIcon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d10d15d3a656727360e9dc3db1719a237110e57 GIT binary patch literal 17536 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 Wg=Lt^ZEY+stX>7icFicHQ2!T#Sn;m_ literal 0 HcmV?d00001 diff --git a/assets/fonts/inaturalisticons.ttf b/assets/fonts/inaturalisticons.ttf deleted file mode 100644 index be97f0c368e1fa871126bd1bd75f7f5e99bf36de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19104 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 DLgRG) diff --git a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj index ed92f14fa..e3ac9b875 100644 --- a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj +++ b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj @@ -8,13 +8,13 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* iNaturalistReactNativeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* iNaturalistReactNativeTests.m */; }; + 07603705D89842DD91992F31 /* INatIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3810FCEF1E284915A5A23AF5 /* INatIcon.ttf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 374CB22F29943E63005885ED /* Whitney-BookItalic-Pro.otf in Resources */ = {isa = PBXBuildFile; fileRef = 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */; }; 7EBBE0515B6D88FD724A5C47 /* libPods-iNaturalistReactNative.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DD42FAECED8C66268DDB37F /* libPods-iNaturalistReactNative.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - 9DD524C253234240A23EACC6 /* inaturalisticons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7036391F18E446B7BDBBADAD /* inaturalisticons.ttf */; }; A252B2AEA64E47C9AC1D20E8 /* Whitney-Light-Pro.otf in Resources */ = {isa = PBXBuildFile; fileRef = BA9D41ECEBFA4C38B74009B3 /* Whitney-Light-Pro.otf */; }; BA2479FA3D7B40A7BEF7B3CD /* Whitney-Medium-Pro.otf in Resources */ = {isa = PBXBuildFile; fileRef = D09FA3A0162844FF80A5EF96 /* Whitney-Medium-Pro.otf */; }; /* End PBXBuildFile section */ @@ -42,7 +42,7 @@ 19A5877328F8E3310016D128 /* iNaturalistReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iNaturalistReactNative-Bridging-Header.h"; sourceTree = ""; }; 27F9BBBBAB49ABBAF88433C9 /* Pods-iNaturalistReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.debug.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.debug.xcconfig"; sourceTree = ""; }; 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Whitney-BookItalic-Pro.otf"; path = "../assets/fonts/Whitney-BookItalic-Pro.otf"; sourceTree = ""; }; - 7036391F18E446B7BDBBADAD /* inaturalisticons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = inaturalisticons.ttf; path = ../assets/fonts/inaturalisticons.ttf; sourceTree = ""; }; + 3810FCEF1E284915A5A23AF5 /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = ""; }; 7DD42FAECED8C66268DDB37F /* libPods-iNaturalistReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iNaturalistReactNative.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = iNaturalistReactNative/LaunchScreen.storyboard; sourceTree = ""; }; BA9D41ECEBFA4C38B74009B3 /* Whitney-Light-Pro.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Whitney-Light-Pro.otf"; path = "../assets/fonts/Whitney-Light-Pro.otf"; sourceTree = ""; }; @@ -157,7 +157,7 @@ BA9D41ECEBFA4C38B74009B3 /* Whitney-Light-Pro.otf */, D09FA3A0162844FF80A5EF96 /* Whitney-Medium-Pro.otf */, 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */, - 7036391F18E446B7BDBBADAD /* inaturalisticons.ttf */, + 3810FCEF1E284915A5A23AF5 /* INatIcon.ttf */, ); name = Resources; sourceTree = ""; @@ -258,7 +258,7 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, A252B2AEA64E47C9AC1D20E8 /* Whitney-Light-Pro.otf in Resources */, BA2479FA3D7B40A7BEF7B3CD /* Whitney-Medium-Pro.otf in Resources */, - 9DD524C253234240A23EACC6 /* inaturalisticons.ttf in Resources */, + 07603705D89842DD91992F31 /* INatIcon.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/iNaturalistReactNative/Info.plist b/ios/iNaturalistReactNative/Info.plist index 54c2d057a..ef992379c 100644 --- a/ios/iNaturalistReactNative/Info.plist +++ b/ios/iNaturalistReactNative/Info.plist @@ -58,7 +58,7 @@ Whitney-Light-Pro.otf Whitney-Medium-Pro.otf Whitney-BookItalic-Pro.otf - inaturalisticons.ttf + INatIcon.ttf UILaunchStoryboardName LaunchScreen diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json index 26d5edf7f..40970cc47 100644 --- a/ios/link-assets-manifest.json +++ b/ios/link-assets-manifest.json @@ -1,6 +1,10 @@ { "migIndex": 1, "data": [ + { + "path": "assets/fonts/INatIcon.ttf", + "sha1": "47a247e3585aec0da80245083a706f676a7e01c0" + }, { "path": "assets/fonts/Whitney-BookItalic-Pro.otf", "sha1": "15854f60175a0e82b794c259431ec45ea4b40103" @@ -12,10 +16,6 @@ { "path": "assets/fonts/Whitney-Medium-Pro.otf", "sha1": "33ca073c11f46dc266a7dc1adeaa102891bd76d1" - }, - { - "path": "assets/fonts/inaturalisticons.ttf", - "sha1": "db15c060c16ae5364838d3222510575577869ede" } ] } diff --git a/package.json b/package.json index db494ba2f..1a84f4cbe 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "e2e:test:android": "npx detox test --configuration android.release", "e2e:test:ios": "npx detox test --configuration ios.release", "e2e:test": "npm run e2e:test:ios && npm run e2e:test:android", - "e2e": "npm run e2e:build && npm run e2e:test " + "e2e": "npm run e2e:build && npm run e2e:test", + "icons": "./scripts/update-icon-font.sh" }, "dependencies": { "@babel/eslint-parser": "^7.18.2", diff --git a/scripts/clean-icon-svgs.rb b/scripts/clean-icon-svgs.rb new file mode 100755 index 000000000..8743b66f1 --- /dev/null +++ b/scripts/clean-icon-svgs.rb @@ -0,0 +1,44 @@ +require "nokogiri" + +num_cleaned = 0 +[ARGV].flatten.each do | path | + unless path.end_with?( ".svg" ) + raise "#{path} is not a .svg file" + end + svg = File.read( path ) + doc = Nokogiri::XML( svg, &:noblanks ) + if doc.at( "svg" )["width"].to_i != 24 || doc.at( "svg" )["height"].to_i != 24 + raise "#{path} is not a 24x24 square" + end + doc.search( "//path" ).each do | path_node | + if path_node["fill-rule"] == "evenodd" || path_node["style"] =~ /fill-rule:\s+?evenodd/ + raise "#{path} has a path with evenodd. They should all have nonzero fill." + end + end + doc.at( "defs" )&.remove + if doc.namespaces.include?( "xmlns:sodipodi" ) + doc.search( "//sodipodi:namedview" ).each do | node | + node.remove + end + end + doc.traverse do | node | + next unless node.respond_to? :attributes + node.attributes.each do |key, val| + if ( + val&.namespace&.prefix == "sodipodi" || + val&.namespace&.prefix == "inkscape" || + %w(id style fill).include?( key ) + ) + val.remove + end + end + end + # doc.at("svg").remove_attribute "xmlns:inkscape" + # doc.at("svg").remove_attribute "xmlns:sodipodi" + doc.remove_namespaces! + File.open( path, "w" ) do | file | + file.write( doc.to_xml( indent: 2 ) ) + end + num_cleaned += 1 +end +puts "Cleaned #{num_cleaned} SVGs" diff --git a/scripts/update-icon-font.sh b/scripts/update-icon-font.sh new file mode 100755 index 000000000..f276f96f6 --- /dev/null +++ b/scripts/update-icon-font.sh @@ -0,0 +1,33 @@ +# Stop the script on error +set -e + +# Check for dependencies +if ! type fantasticon > /dev/null; then + echo "You need to npm install --location=global fantasticon for this to work" + exit +fi + +if ! type react-native-asset > /dev/null; then + echo "You need to npm install --location=global react-native-asset for this to work" + exit +fi + +bundle exec ruby scripts/clean-icon-svgs.rb src/images/icons/*.svg + +# Generate the font file and the glyphmap +fantasticon src/images/icons/ \ + --output assets/fonts/ \ + --font-types ttf \ + --name INatIcon \ + --asset-types json + +# Move the glyphmap into src +mv assets/fonts/INatIcon.json src/components/SharedComponents/INatIcon/glyphmap.json + +# Clean out the build folders +rm -rf ios/build && rm -rf android/app/build + +# Re-link the new font file asset +npx react-native-asset + +echo "Icons updated! Don't forget to rebuild the app." diff --git a/src/components/AddObsModal.js b/src/components/AddObsModal.js index f754fd391..e287d9c9a 100644 --- a/src/components/AddObsModal.js +++ b/src/components/AddObsModal.js @@ -91,14 +91,14 @@ const AddObsModal = ( { closeModal }: Props ): React.Node => { {renderIconButton( - "pen-and-paper", + "noevidence", "mx-2", navToObsEdit, t( "Navigate-to-observation-edit-screen" ), "observe-without-evidence-button" )} {renderIconButton( - "close-button-x", + "close", "self-center h-24 w-24 rounded-[99px]", ( ) => closeModal( ), t( "Close-camera-options-modal" ), diff --git a/src/components/Camera/StandardCamera.js b/src/components/Camera/StandardCamera.js index 4af3f78e6..04f7458e9 100644 --- a/src/components/Camera/StandardCamera.js +++ b/src/components/Camera/StandardCamera.js @@ -171,11 +171,11 @@ const StandardCamera = ( ): Node => { let testID = ""; let accessibilityLabel = ""; switch ( icon ) { - case "flash-on-circle": + case "flash-on": testID = "flash-button-label-flash"; accessibilityLabel = t( "Flash-button-label-flash" ); break; - case "camera": + case "flash-off": testID = "flash-button-label-flash-off"; accessibilityLabel = t( "Flash-button-label-flash-off" ); break; @@ -213,8 +213,8 @@ const StandardCamera = ( ): Node => { {hasFlash ? ( {takePhotoOptions.flash === "on" - ? renderFlashButton( "flash-on-circle" ) - : renderFlashButton( "camera" )} + ? renderFlashButton( "flash-on" ) + : renderFlashButton( "flash-off" )} ) : ( @@ -227,7 +227,7 @@ const StandardCamera = ( ): Node => { @@ -275,7 +275,7 @@ const StandardCamera = ( ): Node => { setDiscardState( INITIAL_DISCARD_STATE )} accessibilityLabel={t( "Cancel" )} accessibilityState={{ disabled: false }} diff --git a/src/components/MediaViewer/MediaViewerModal.js b/src/components/MediaViewer/MediaViewerModal.js index fbfc7183a..334e35434 100644 --- a/src/components/MediaViewer/MediaViewerModal.js +++ b/src/components/MediaViewer/MediaViewerModal.js @@ -57,7 +57,7 @@ const MediaViewerModal = ( { hideDialog={hideDialog} /> diff --git a/src/components/ObsDetails/ObsDetails.js b/src/components/ObsDetails/ObsDetails.js index 9f63de303..3ec0992a4 100644 --- a/src/components/ObsDetails/ObsDetails.js +++ b/src/components/ObsDetails/ObsDetails.js @@ -295,7 +295,7 @@ const ObsDetails = (): Node => { {/* TODO: a11y props are not passed down into this 3.party */} { onPress={openModal} className="flex-row flex-nowrap items-center" > - + {displayDate( ) || t( "Add-Date-Time" )} diff --git a/src/components/ObsEdit/EvidenceSection.js b/src/components/ObsEdit/EvidenceSection.js index 5582cbf97..b86a4a4f9 100644 --- a/src/components/ObsEdit/EvidenceSection.js +++ b/src/components/ObsEdit/EvidenceSection.js @@ -155,7 +155,7 @@ const EvidenceSection = ( { handleAddEvidence={handleAddEvidence} /> - + {currentObservation.place_guess} {shouldFetchLocation && } diff --git a/src/components/ObsEdit/Notes.js b/src/components/ObsEdit/Notes.js index b233856d9..b8ab9ae3c 100644 --- a/src/components/ObsEdit/Notes.js +++ b/src/components/ObsEdit/Notes.js @@ -21,7 +21,7 @@ const Notes = ( { addNotes, description, scrollToInput }: Props ): Node => { { > @@ -80,7 +80,7 @@ const OtherDataSection = ( { scrollToInput }: Props ): Node => { > diff --git a/src/components/Observations/ObsListToolbar.js b/src/components/Observations/ObsListToolbar.js index aca0e6ca6..3811e27f2 100644 --- a/src/components/Observations/ObsListToolbar.js +++ b/src/components/Observations/ObsListToolbar.js @@ -100,7 +100,7 @@ const Toolbar = ( { setLayout, layout }: Props ): Node => { {currentUser && ( navigation.navigate( "Explore" )} accessibilityLabel={t( "Explore" )} accessibilityHint={t( "Navigates-to-explore" )} diff --git a/src/components/Observations/ObsStatus.js b/src/components/Observations/ObsStatus.js index 2a56914d4..0dc7799bf 100644 --- a/src/components/Observations/ObsStatus.js +++ b/src/components/Observations/ObsStatus.js @@ -38,7 +38,7 @@ const ObsStatus = ( { return ( { return ( { setLoading( true ); diff --git a/src/components/PhotoImporter/GroupPhotos.js b/src/components/PhotoImporter/GroupPhotos.js index bc6d478bb..4ecd816f9 100644 --- a/src/components/PhotoImporter/GroupPhotos.js +++ b/src/components/PhotoImporter/GroupPhotos.js @@ -187,19 +187,19 @@ const GroupPhotos = (): Node => { {selectedObservations.length > 0 && ( combinePhotos()} disabled={noObsSelected || oneObsSelected} accessibilityLabel={t( "Combine-Photos" )} /> separatePhotos()} disabled={!obsWithMultiplePhotosSelected} accessibilityLabel={t( "Separate-Photos" )} /> removePhotos()} disabled={noObsSelected} accessibilityLabel={t( "Remove-Photos" )} diff --git a/src/components/SharedComponents/Buttons/AddObsButton.js b/src/components/SharedComponents/Buttons/AddObsButton.js index 8e55cbb9d..7f975d6d7 100644 --- a/src/components/SharedComponents/Buttons/AddObsButton.js +++ b/src/components/SharedComponents/Buttons/AddObsButton.js @@ -42,7 +42,7 @@ const AddObsButton = (): React.Node => { useAngle > - + diff --git a/src/components/SharedComponents/Buttons/CloseButton.js b/src/components/SharedComponents/Buttons/CloseButton.js index 901f9420e..00a1ce3e5 100644 --- a/src/components/SharedComponents/Buttons/CloseButton.js +++ b/src/components/SharedComponents/Buttons/CloseButton.js @@ -16,7 +16,7 @@ const CloseButton = ( { className }: Props ): Node => { return ( navigation.goBack( )} diff --git a/src/components/SharedComponents/INatIcon/INatIcon.js b/src/components/SharedComponents/INatIcon/INatIcon.js index a30a68925..a249cc1a0 100644 --- a/src/components/SharedComponents/INatIcon/INatIcon.js +++ b/src/components/SharedComponents/INatIcon/INatIcon.js @@ -1,80 +1,8 @@ -/** - * INatIcon icon set component. - * Usage: - */ - import createIconSet from "react-native-vector-icons/lib/create-icon-set"; -const glyphMap = { - "arrow-down": 57344, - "arrow-left": 57345, - "arrow-right": 57346, - "arrow-up": 57347, - "close-button-circle": 57348, - "copyright-circle": 57349, - "crop-photo-circle": 57350, - "close-button-x": 57351, - collapse: 57352, - "compass-rose": 57354, - expand: 57356, - "flash-on": 57357, - focus: 57358, - "icn-captive": 57360, - "icn-dna": 57361, - identification: 57362, - "icn-id-help": 57363, - "icn-layers": 57364, - "icn-leading-id": 57365, - "icn-location-none": 57366, - "icn-location-obscured": 57367, - "icn-location-private": 57369, - logomark: 57370, - "photo-grid": 57371, - "photo-quilt": 57372, - "species-unknown": 57373, - "iconic-amphibia": 57375, - "iconic-animalia": 57376, - "iconic-arachnida": 57377, - "iconic-aves": 57378, - "iconic-actinopterygii": 57379, - "iconic-fungi": 57380, - "iconic-insecta": 57381, - "iconic-chromista": 57382, - "iconic-mammalia": 57383, - "iconic-mollusca": 57384, - "iconic-plantae": 57385, - "iconic-protozoa": 57386, - "iconic-reptilia": 57387, - "iconic-unknown": 57388, - "icn-wild": 57389, - camera: 57392, - checkmark: 57393, - chatbubble: 57396, - comments: 57397, - plus: 57398, - trash: 57399, - "star-outline": 57402, - "triple-dots": 57404, - "pen-and-paper": 57407, - microphone: 57409, - "identification-solid": 57411, - "inat-wordmark": 57412, - "ios-calendar-outline": 57413, - people: 57414, - "notifications-bell": 57417, - treeview: 57418, - pencil: 57420, - "hamburger-menu": 57353, - "flag-outline": 57403, - "id-agree": 57359, - "arrow-up-plain": 57368, - "sparkly-label": 57355, - flag: 57374, - gallery: 57415, - taxarank: 57390 -}; +import glyphmap from "./glyphmap.json"; -const iconSet = createIconSet( glyphMap, "inaturalisticons", "inaturalisticons.ttf" ); +const iconSet = createIconSet( glyphmap, "INatIcon", "INatIcon.ttf" ); export default iconSet; export const { @@ -82,7 +10,3 @@ export const { getImageSource, getImageSourceSync } = iconSet; - -export { - glyphMap -}; diff --git a/src/components/SharedComponents/INatIcon/glyphmap.json b/src/components/SharedComponents/INatIcon/glyphmap.json new file mode 100644 index 000000000..232e5e4d8 --- /dev/null +++ b/src/components/SharedComponents/INatIcon/glyphmap.json @@ -0,0 +1,80 @@ +{ + "add-comment-outline": 61697, + "arcamera": 61698, + "arrow-down-bold-circle-outline": 61699, + "arrow-down-bold-circle": 61700, + "arrow-turn-down-right": 61701, + "arrow-up-bold-circle-outline": 61702, + "arrow-up-bold-circle": 61703, + "arrow-up-circle-dots": 61704, + "arrow-up-small": 61705, + "arrow-up": 61706, + "binoculars": 61707, + "book": 61708, + "camera": 61709, + "check": 61710, + "checkmark-circle-outline": 61711, + "checkmark-circle": 61712, + "chevron-left-circle": 61713, + "chevron-left": 61714, + "chevron-right-circle": 61715, + "circle-dots": 61716, + "clock-outline": 61717, + "close-bold": 61718, + "close": 61719, + "comments-outline": 61720, + "comments": 61721, + "compass-rose-outline": 61722, + "copyright": 61723, + "crop": 61724, + "flag": 61725, + "flash-off": 61726, + "flash-on": 61727, + "flip": 61728, + "gallery": 61729, + "globe-outline": 61730, + "grid-square": 61731, + "grid": 61732, + "hamburger-menu": 61733, + "help-circle-outline": 61734, + "help": 61735, + "id-agree": 61736, + "info-circle-outline": 61737, + "kebab-menu": 61738, + "label-outline": 61739, + "label": 61740, + "layers": 61741, + "leaf": 61742, + "list-square": 61743, + "location-crosshairs": 61744, + "magnifying-glass": 61745, + "map-marker-outline": 61746, + "microphone-circle": 61747, + "microphone": 61748, + "noevidence": 61749, + "notifications-bell": 61750, + "pause-circle": 61751, + "pencil-outline": 61752, + "pencil": 61753, + "person": 61754, + "photos-outline": 61755, + "photos": 61756, + "play-circle": 61757, + "play": 61758, + "plus-bold": 61759, + "plus": 61760, + "pot-outline": 61761, + "rotate-exclamation": 61762, + "rotate-right": 61763, + "rotate": 61764, + "sliders": 61765, + "sound-bold-outline": 61766, + "sound-outline": 61767, + "sounds": 61768, + "sparkly-label": 61769, + "star-bold-outline": 61770, + "star": 61771, + "trash-outline": 61772, + "trash": 61773, + "triangle-exclamation": 61774 +} \ No newline at end of file diff --git a/src/components/SharedComponents/INatIcon/index.js b/src/components/SharedComponents/INatIcon/index.js index 8b6e2b5aa..98f7f0b52 100644 --- a/src/components/SharedComponents/INatIcon/index.js +++ b/src/components/SharedComponents/INatIcon/index.js @@ -13,10 +13,77 @@ type Props = { size?: number }; +// Most of these are names for these icons used in design mapped to more +// consistent and deduped filenames. We might also put aliases of convenience +// here, e.g. "speech" and "chat" might both map to "comments" if we find +// ourselves forgetting the name "comments" +const ALIASES = { + addevidence: "plus", + "evidence-add": "plus-bold", + addid: "id-agree", + back: "chevron-left", + captive: "pot", + checkmark: "check", + "close-large": "close", + "close-small": "close-bold", + combine: "photos", + multiplephotos: "photos", + "multiplephotos-small": "photos-outline", + "comment-fill": "comments", + "comment-outline": "comments-outline", + copyrightcc: "copyright", + currentlocation: "location-crosshairs", + cv: "sparkly-label", + date: "clock", + delete: "trash-outline", + "downvote-active": "arrow-down-bold-circle", + "downvote-inactive": "arrow-down-bold-circle-outline", + notes: "pencil-outline", + edit: "pencil", + "evidence-close": "close-bold", + fail: "triangle-exclamation", + "fave-active": "star", + "fave-inactive": "star-bold-outline", + filters: "sliders", + flipcamera: "flip", + geoprivacy: "globe", + gridview: "grid-square", + listview: "list-square", + "help-circle": "help-circle-outline", + "id-large-fill": "label", + "id-small-outline": "label-outline", + journalposts: "book", + location: "map-marker-outline", + maplayers: "layers", + multiplesounds: "sounds", + notifications: "notifications-bell", + observations: "binoculars", + pass: "checkmark-circle", + recordsound: "microphone", + remark: "add-comment-outline", + reset: "rotate-right", + search: "magnifying-glass", + separate: "grid", + "sound-pause": "pause-circle", + "sound-play": "play-circle", + "sound-record": "microphone-circle", + "sound-small": "sound-bold-outline", + sound: "sound-outline", + species: "leaf", + sync: "rotate", + "sync-unsynced": "rotate-exclamation", + taxarankarrow: "info-circle-outline", + "upload-arrow": "arrow-up", + "upload-complete": "check", + "upload-saved": "arrow-up-circle-dots", + "upvote-active": "arrow-up-bold-circle", + "upvote-inactive": "arrow-up-bold-circle-outline" +}; + const INatIcon = ( { name, color, size }: Props ): Node => { const theme = useTheme(); // Use default color if none is specified - return ; + return ; }; export default INatIcon; diff --git a/src/components/SharedComponents/KebabMenu.js b/src/components/SharedComponents/KebabMenu.js index f162acceb..04b70c35b 100644 --- a/src/components/SharedComponents/KebabMenu.js +++ b/src/components/SharedComponents/KebabMenu.js @@ -18,7 +18,7 @@ const KebabMenu = ( { children, visible, setVisible }: Props ): Node => { const anchorButton = ( ); diff --git a/src/components/SharedComponents/PhotoCarousel.js b/src/components/SharedComponents/PhotoCarousel.js index 4d7a383c0..53c6159c9 100644 --- a/src/components/SharedComponents/PhotoCarousel.js +++ b/src/components/SharedComponents/PhotoCarousel.js @@ -113,7 +113,7 @@ const PhotoCarousel = ( { )} {( containerStyle === "camera" && deletePhotoMode ) && ( { accessibilityLabel={accessibilityLabelText()} className="relative items-center justify-center w-[49px] h-[67px]" > - {( progress < 0.05 ) - ? ( - <> - - - + {progress < 0.05 ? ( + <> + + + + + + + + ) : ( + <> + {progress < 1 ? ( - - ) - : ( - <> - {( progress < 1 ) - ? ( - - - - ) - : ( - - - - )} - - - )} + ) : ( + + + + )} + + + )} ); }; diff --git a/src/components/UiLibrary.js b/src/components/UiLibrary.js index afc4a4f32..9286f6e60 100644 --- a/src/components/UiLibrary.js +++ b/src/components/UiLibrary.js @@ -31,7 +31,7 @@ import { UserIcon } from "components/SharedComponents"; import AddObsButton from "components/SharedComponents/Buttons/AddObsButton"; -import { glyphMap } from "components/SharedComponents/INatIcon/INatIcon"; +import glyphmap from "components/SharedComponents/INatIcon/glyphmap.json"; import UserText from "components/SharedComponents/UserText"; import ViewWrapper from "components/SharedComponents/ViewWrapper"; import { fontMonoClass, ScrollView, View } from "components/styledComponents"; @@ -59,7 +59,7 @@ const UiLibrary = (): Node => { containerClass="mx-4 px-2 my-[100px]" > Floating Action Bar - + {/* TODO replace these text components with our typography header components */} @@ -182,7 +182,7 @@ const UiLibrary = (): Node => { Primary Alert.alert( "", "You tapped!" )} /> @@ -218,11 +218,7 @@ const UiLibrary = (): Node => { Custom iNaturalist Icons - - Make sure you're exporting glyphMap from components/INatIcon.js to see - all custom icons - - {Object.keys( glyphMap ) + {Object.keys( glyphmap ) .sort() .map( iconName => ( @@ -231,8 +227,9 @@ const UiLibrary = (): Node => { className="p-3" key={iconName} onPress={() => Alert.alert( "", `You tapped on the ${iconName} icon` )} - size={20} + size={14} /> + {" "} {iconName} ) )} diff --git a/src/images/icons/add-comment-outline.svg b/src/images/icons/add-comment-outline.svg new file mode 100644 index 000000000..29a58936a --- /dev/null +++ b/src/images/icons/add-comment-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arcamera.svg b/src/images/icons/arcamera.svg new file mode 100644 index 000000000..36943ae87 --- /dev/null +++ b/src/images/icons/arcamera.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/images/icons/arrow-down-bold-circle-outline.svg b/src/images/icons/arrow-down-bold-circle-outline.svg new file mode 100644 index 000000000..94550c5df --- /dev/null +++ b/src/images/icons/arrow-down-bold-circle-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-down-bold-circle.svg b/src/images/icons/arrow-down-bold-circle.svg new file mode 100644 index 000000000..e1d937eaa --- /dev/null +++ b/src/images/icons/arrow-down-bold-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-turn-down-right.svg b/src/images/icons/arrow-turn-down-right.svg new file mode 100644 index 000000000..a758774e5 --- /dev/null +++ b/src/images/icons/arrow-turn-down-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-up-bold-circle-outline.svg b/src/images/icons/arrow-up-bold-circle-outline.svg new file mode 100644 index 000000000..fd87a0fd6 --- /dev/null +++ b/src/images/icons/arrow-up-bold-circle-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-up-bold-circle.svg b/src/images/icons/arrow-up-bold-circle.svg new file mode 100644 index 000000000..39de7af75 --- /dev/null +++ b/src/images/icons/arrow-up-bold-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-up-circle-dots.svg b/src/images/icons/arrow-up-circle-dots.svg new file mode 100644 index 000000000..fa075113a --- /dev/null +++ b/src/images/icons/arrow-up-circle-dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-up-small.svg b/src/images/icons/arrow-up-small.svg new file mode 100644 index 000000000..282349759 --- /dev/null +++ b/src/images/icons/arrow-up-small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/arrow-up.svg b/src/images/icons/arrow-up.svg new file mode 100644 index 000000000..2af1e2c4a --- /dev/null +++ b/src/images/icons/arrow-up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/binoculars.svg b/src/images/icons/binoculars.svg new file mode 100644 index 000000000..5f569bea6 --- /dev/null +++ b/src/images/icons/binoculars.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/book.svg b/src/images/icons/book.svg new file mode 100644 index 000000000..d88e3a68f --- /dev/null +++ b/src/images/icons/book.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/camera.svg b/src/images/icons/camera.svg new file mode 100644 index 000000000..7312e7002 --- /dev/null +++ b/src/images/icons/camera.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/check.svg b/src/images/icons/check.svg new file mode 100644 index 000000000..07e0601ce --- /dev/null +++ b/src/images/icons/check.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/checkmark-circle-outline.svg b/src/images/icons/checkmark-circle-outline.svg new file mode 100644 index 000000000..ee03c6c15 --- /dev/null +++ b/src/images/icons/checkmark-circle-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/checkmark-circle.svg b/src/images/icons/checkmark-circle.svg new file mode 100644 index 000000000..b693707f8 --- /dev/null +++ b/src/images/icons/checkmark-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/chevron-left-circle.svg b/src/images/icons/chevron-left-circle.svg new file mode 100644 index 000000000..b198a1556 --- /dev/null +++ b/src/images/icons/chevron-left-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/chevron-left.svg b/src/images/icons/chevron-left.svg new file mode 100644 index 000000000..86893f837 --- /dev/null +++ b/src/images/icons/chevron-left.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/images/icons/chevron-right-circle.svg b/src/images/icons/chevron-right-circle.svg new file mode 100644 index 000000000..fa4a9f524 --- /dev/null +++ b/src/images/icons/chevron-right-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/circle-dots.svg b/src/images/icons/circle-dots.svg new file mode 100644 index 000000000..90aa9966c --- /dev/null +++ b/src/images/icons/circle-dots.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/clock-outline.svg b/src/images/icons/clock-outline.svg new file mode 100644 index 000000000..c323d5df9 --- /dev/null +++ b/src/images/icons/clock-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/close-bold.svg b/src/images/icons/close-bold.svg new file mode 100644 index 000000000..8e55de795 --- /dev/null +++ b/src/images/icons/close-bold.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/close.svg b/src/images/icons/close.svg new file mode 100644 index 000000000..24f2a321f --- /dev/null +++ b/src/images/icons/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/comments-outline.svg b/src/images/icons/comments-outline.svg new file mode 100644 index 000000000..80cc48e5c --- /dev/null +++ b/src/images/icons/comments-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/comments.svg b/src/images/icons/comments.svg new file mode 100644 index 000000000..d707effb5 --- /dev/null +++ b/src/images/icons/comments.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/compass-rose-outline.svg b/src/images/icons/compass-rose-outline.svg new file mode 100644 index 000000000..b61fb29b0 --- /dev/null +++ b/src/images/icons/compass-rose-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/copyright.svg b/src/images/icons/copyright.svg new file mode 100644 index 000000000..8bafd84fb --- /dev/null +++ b/src/images/icons/copyright.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/crop.svg b/src/images/icons/crop.svg new file mode 100644 index 000000000..ee11bfa63 --- /dev/null +++ b/src/images/icons/crop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/flag.svg b/src/images/icons/flag.svg new file mode 100644 index 000000000..dbccfb9c6 --- /dev/null +++ b/src/images/icons/flag.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/flash-off.svg b/src/images/icons/flash-off.svg new file mode 100644 index 000000000..1fac72bfd --- /dev/null +++ b/src/images/icons/flash-off.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/flash-on.svg b/src/images/icons/flash-on.svg new file mode 100644 index 000000000..20c47e801 --- /dev/null +++ b/src/images/icons/flash-on.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/flip.svg b/src/images/icons/flip.svg new file mode 100644 index 000000000..d10e91ac5 --- /dev/null +++ b/src/images/icons/flip.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/gallery.svg b/src/images/icons/gallery.svg new file mode 100644 index 000000000..6beb4fb74 --- /dev/null +++ b/src/images/icons/gallery.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/globe-outline.svg b/src/images/icons/globe-outline.svg new file mode 100644 index 000000000..127db41dd --- /dev/null +++ b/src/images/icons/globe-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/grid-square.svg b/src/images/icons/grid-square.svg new file mode 100644 index 000000000..b176c469b --- /dev/null +++ b/src/images/icons/grid-square.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/grid.svg b/src/images/icons/grid.svg new file mode 100644 index 000000000..2f71e57c9 --- /dev/null +++ b/src/images/icons/grid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/hamburger-menu.svg b/src/images/icons/hamburger-menu.svg new file mode 100644 index 000000000..1169bb23e --- /dev/null +++ b/src/images/icons/hamburger-menu.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/help-circle-outline.svg b/src/images/icons/help-circle-outline.svg new file mode 100644 index 000000000..6a82fe9f9 --- /dev/null +++ b/src/images/icons/help-circle-outline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/images/icons/help.svg b/src/images/icons/help.svg new file mode 100644 index 000000000..c128430a6 --- /dev/null +++ b/src/images/icons/help.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/id-agree.svg b/src/images/icons/id-agree.svg new file mode 100644 index 000000000..d6f0c9227 --- /dev/null +++ b/src/images/icons/id-agree.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/images/icons/info-circle-outline.svg b/src/images/icons/info-circle-outline.svg new file mode 100644 index 000000000..2d35e6280 --- /dev/null +++ b/src/images/icons/info-circle-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/kebab-menu.svg b/src/images/icons/kebab-menu.svg new file mode 100644 index 000000000..4e744f81d --- /dev/null +++ b/src/images/icons/kebab-menu.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/images/icons/label-outline.svg b/src/images/icons/label-outline.svg new file mode 100644 index 000000000..d90a63121 --- /dev/null +++ b/src/images/icons/label-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/label.svg b/src/images/icons/label.svg new file mode 100644 index 000000000..2a30266e3 --- /dev/null +++ b/src/images/icons/label.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/layers.svg b/src/images/icons/layers.svg new file mode 100644 index 000000000..9ad65ec70 --- /dev/null +++ b/src/images/icons/layers.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/leaf.svg b/src/images/icons/leaf.svg new file mode 100644 index 000000000..9843fbca5 --- /dev/null +++ b/src/images/icons/leaf.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/list-square.svg b/src/images/icons/list-square.svg new file mode 100644 index 000000000..66b222949 --- /dev/null +++ b/src/images/icons/list-square.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/location-crosshairs.svg b/src/images/icons/location-crosshairs.svg new file mode 100644 index 000000000..18c00ea80 --- /dev/null +++ b/src/images/icons/location-crosshairs.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/magnifying-glass.svg b/src/images/icons/magnifying-glass.svg new file mode 100644 index 000000000..c19e22783 --- /dev/null +++ b/src/images/icons/magnifying-glass.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/map-marker-outline.svg b/src/images/icons/map-marker-outline.svg new file mode 100644 index 000000000..b33ab6660 --- /dev/null +++ b/src/images/icons/map-marker-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/microphone-circle.svg b/src/images/icons/microphone-circle.svg new file mode 100644 index 000000000..90b72318e --- /dev/null +++ b/src/images/icons/microphone-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/microphone.svg b/src/images/icons/microphone.svg new file mode 100644 index 000000000..728006a98 --- /dev/null +++ b/src/images/icons/microphone.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/noevidence.svg b/src/images/icons/noevidence.svg new file mode 100644 index 000000000..d3dc44623 --- /dev/null +++ b/src/images/icons/noevidence.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/notifications-bell.svg b/src/images/icons/notifications-bell.svg new file mode 100644 index 000000000..9d567cae9 --- /dev/null +++ b/src/images/icons/notifications-bell.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/pause-circle.svg b/src/images/icons/pause-circle.svg new file mode 100644 index 000000000..5cd1c26f6 --- /dev/null +++ b/src/images/icons/pause-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/pencil-outline.svg b/src/images/icons/pencil-outline.svg new file mode 100644 index 000000000..3dbcd1c7a --- /dev/null +++ b/src/images/icons/pencil-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/pencil.svg b/src/images/icons/pencil.svg new file mode 100644 index 000000000..03c4c754a --- /dev/null +++ b/src/images/icons/pencil.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/person.svg b/src/images/icons/person.svg new file mode 100644 index 000000000..b6878d61f --- /dev/null +++ b/src/images/icons/person.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/photos-outline.svg b/src/images/icons/photos-outline.svg new file mode 100644 index 000000000..74b0b11c8 --- /dev/null +++ b/src/images/icons/photos-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/photos.svg b/src/images/icons/photos.svg new file mode 100644 index 000000000..fbd516926 --- /dev/null +++ b/src/images/icons/photos.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/play-circle.svg b/src/images/icons/play-circle.svg new file mode 100644 index 000000000..d8deb2a06 --- /dev/null +++ b/src/images/icons/play-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/play.svg b/src/images/icons/play.svg new file mode 100644 index 000000000..92e472f90 --- /dev/null +++ b/src/images/icons/play.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/plus-bold.svg b/src/images/icons/plus-bold.svg new file mode 100644 index 000000000..d5918fbec --- /dev/null +++ b/src/images/icons/plus-bold.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/plus.svg b/src/images/icons/plus.svg new file mode 100644 index 000000000..b2d705fea --- /dev/null +++ b/src/images/icons/plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/pot-outline.svg b/src/images/icons/pot-outline.svg new file mode 100644 index 000000000..571bb6c63 --- /dev/null +++ b/src/images/icons/pot-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/rotate-exclamation.svg b/src/images/icons/rotate-exclamation.svg new file mode 100644 index 000000000..1bb427a67 --- /dev/null +++ b/src/images/icons/rotate-exclamation.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/rotate-right.svg b/src/images/icons/rotate-right.svg new file mode 100644 index 000000000..04fa28423 --- /dev/null +++ b/src/images/icons/rotate-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/rotate.svg b/src/images/icons/rotate.svg new file mode 100644 index 000000000..7bf90409a --- /dev/null +++ b/src/images/icons/rotate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/sliders.svg b/src/images/icons/sliders.svg new file mode 100644 index 000000000..b60ad1fe5 --- /dev/null +++ b/src/images/icons/sliders.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/sound-bold-outline.svg b/src/images/icons/sound-bold-outline.svg new file mode 100644 index 000000000..428d31478 --- /dev/null +++ b/src/images/icons/sound-bold-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/sound-outline.svg b/src/images/icons/sound-outline.svg new file mode 100644 index 000000000..c9d36cc1f --- /dev/null +++ b/src/images/icons/sound-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/sounds.svg b/src/images/icons/sounds.svg new file mode 100644 index 000000000..01b7a03b1 --- /dev/null +++ b/src/images/icons/sounds.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/sparkly-label.svg b/src/images/icons/sparkly-label.svg new file mode 100644 index 000000000..0802fd2fc --- /dev/null +++ b/src/images/icons/sparkly-label.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/star-bold-outline.svg b/src/images/icons/star-bold-outline.svg new file mode 100644 index 000000000..80bdf37a2 --- /dev/null +++ b/src/images/icons/star-bold-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/star.svg b/src/images/icons/star.svg new file mode 100644 index 000000000..7de92b66e --- /dev/null +++ b/src/images/icons/star.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/trash-outline.svg b/src/images/icons/trash-outline.svg new file mode 100644 index 000000000..ff11d6500 --- /dev/null +++ b/src/images/icons/trash-outline.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/images/icons/trash.svg b/src/images/icons/trash.svg new file mode 100644 index 000000000..f09769938 --- /dev/null +++ b/src/images/icons/trash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/triangle-exclamation.svg b/src/images/icons/triangle-exclamation.svg new file mode 100644 index 000000000..1f87859f5 --- /dev/null +++ b/src/images/icons/triangle-exclamation.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/navigation/BottomTabNavigator/index.js b/src/navigation/BottomTabNavigator/index.js index 9fc10e36e..c73565341 100644 --- a/src/navigation/BottomTabNavigator/index.js +++ b/src/navigation/BottomTabNavigator/index.js @@ -49,7 +49,7 @@ const BottomTabs = () => { component={Explore} options={{ meta: { - icon: "compass-rose", + icon: "compass-rose-outline", testID: EXPLORE_SCREEN_ID, accessibilityLabel: t( "Explore" ), accessibilityHint: t( "Navigates-to-explore" ), diff --git a/tests/unit/components/INatIcon.test.js b/tests/unit/components/INatIcon.test.js index 3bbee6c52..bfd1a252c 100644 --- a/tests/unit/components/INatIcon.test.js +++ b/tests/unit/components/INatIcon.test.js @@ -1,6 +1,6 @@ import { render, screen } from "@testing-library/react-native"; import { INatIcon } from "components/SharedComponents"; -import { glyphMap } from "components/SharedComponents/INatIcon/INatIcon"; +import glyphmap from "components/SharedComponents/INatIcon/glyphmap.json"; import React from "react"; const iconName = "camera"; @@ -19,11 +19,11 @@ describe( "INatIcon", () => { } ); } ); -describe( "glyphMap", () => { +describe( "glyphmap", () => { it( "is an object", () => { - expect( glyphMap ).toBeInstanceOf( Object ); + expect( glyphmap ).toBeInstanceOf( Object ); } ); it( "has icon name as key", () => { - expect( glyphMap ).toHaveProperty( iconName ); + expect( glyphmap ).toHaveProperty( iconName ); } ); } ); diff --git a/tests/unit/components/SharedComponents/UploadStatus/__snapshots__/UploadStatus.test.js.snap b/tests/unit/components/SharedComponents/UploadStatus/__snapshots__/UploadStatus.test.js.snap index 22cbdbe5f..76ec3ea36 100644 --- a/tests/unit/components/SharedComponents/UploadStatus/__snapshots__/UploadStatus.test.js.snap +++ b/tests/unit/components/SharedComponents/UploadStatus/__snapshots__/UploadStatus.test.js.snap @@ -47,7 +47,7 @@ exports[`UploadStatus displays progress bar when progress is greater than 5% cor }, undefined, Object { - "fontFamily": "inaturalisticons", + "fontFamily": "INatIcon", "fontStyle": "normal", "fontWeight": "normal", }, @@ -55,7 +55,7 @@ exports[`UploadStatus displays progress bar when progress is greater than 5% cor ] } > - ? +  - ? +  - ? +  diff --git a/tests/unit/components/__snapshots__/INatIcon.test.js.snap b/tests/unit/components/__snapshots__/INatIcon.test.js.snap index 5a5ad21e2..8a774cc9e 100644 --- a/tests/unit/components/__snapshots__/INatIcon.test.js.snap +++ b/tests/unit/components/__snapshots__/INatIcon.test.js.snap @@ -12,7 +12,7 @@ exports[`INatIcon renders correctly 1`] = ` }, undefined, Object { - "fontFamily": "inaturalisticons", + "fontFamily": "INatIcon", "fontStyle": "normal", "fontWeight": "normal", }, @@ -20,6 +20,6 @@ exports[`INatIcon renders correctly 1`] = ` ] } > -  +  `;