--- title: "Using icons" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Using icons} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>") library(icons) have_fa <- icon_installed(fontawesome) ``` ## Installing icon sets Icon libraries aren't bundled with the package, keeping it small and letting you choose which version of each library you use. Download the ones you want once per machine: ```{r, eval = FALSE} download_fontawesome() download_ionicons() ``` `icon_installed()` tells you whether a library has already been downloaded: ```r icon_installed(fontawesome) ``` The rest of this vignette uses Font Awesome; swap in any other set (`ionicons`, `academicons`, `simple_icons`, `google_material`, `octicons`, `feather_icons`, `bioicons`, `super_tiny_icons`) the same way. ## Inserting icons Icons can be inserted inline, e.g. `` `r knitr::inline_expr('fontawesome("rocket", style = "solid")')` ``, or from a code chunk: ```{r icon-chunk, eval = have_fa} fontawesome("rocket", style = "solid") ``` The same icon can be accessed with `$`, which is handy for tab-completion: ```{r icon-dollar, eval = have_fa} fontawesome$solid$rocket ``` If a name isn't a valid R name (e.g. it contains a `-`), quote it: ```{r icon-syntax, eval = have_fa} fontawesome$brands$`r-project` ``` ## Styling icons `icon_style()` customises an icon's appearance: ```{r icon-style, eval = have_fa} icon_style(fontawesome("rocket", style = "solid"), scale = 2, fill = "red") ``` It accepts `scale`, `fill` and `rotate`, plus any other CSS property via `...` (for example `float = "right"`). ## Custom icon sets Any folder of SVG files can become an icon set with `icon_set()`, which is useful for icons that aren't from a supported library (including Font Awesome Pro icons): ```{r icon-custom} icon_dir <- tempfile() dir.create(icon_dir) writeLines( '', file.path(icon_dir, "triangle.svg") ) custom <- icon_set(icon_dir) custom$triangle ``` `icon_save()` does the reverse: it bundles icons you're already using into a folder, so a shared document or deployed app doesn't need the original library installed: ```{r icon-save, eval = FALSE} icon_save(list(rocket = fontawesome$solid$rocket), path = "app_icons") ``` ## Finding icons Not sure which library has the icon you want, or what it's called? Search everything you have installed: ```{r icon-find, eval = have_fa} icon_find("rocket") ``` ## Using icons in Shiny apps Icons can be used directly in Shiny UI code, both as ordinary content and as the `icon =` argument of an input: ```r shiny::div(fontawesome$solid$rocket, "Launch") shiny::actionButton("go", "Launch", icon = fontawesome$solid$rocket) ```