# Using icons

## 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:

    download_fontawesome()
    download_ionicons()

`icon_installed()` tells you whether a library has already been downloaded:

    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 fontawesome("rocket", style = "solid")``, or from a code chunk:

    fontawesome("rocket", style = "solid")

The same icon can be accessed with `$`, which is handy for tab-completion:

    fontawesome$solid$rocket

If a name isn’t a valid R name (e.g. it contains a `-`), quote it:

    fontawesome$brands$`r-project`

## Styling icons

`icon_style()` customises an icon’s appearance:

    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):

    icon_dir <- tempfile()
    dir.create(icon_dir)
    writeLines(
      '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2 L22 22 L2 22 Z"/></svg>',
      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:

    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:

    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:

    shiny::div(fontawesome$solid$rocket, "Launch")
    shiny::actionButton("go", "Launch", icon = fontawesome$solid$rocket)