--- title: "Fresh themes" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Theme for shiny} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ```{r setup} library(fresh) ``` {fresh} allow to create custom themes to use in [{shiny}](https://github.com/rstudio/shiny) applications, currently you can create themes to use with: * shiny itself, with `shiny::fluidPage` or `shiny::navbarPage` or themes from [Bootswatch](https://bootswatch.com/3/) * [{shinydashboard}](https://rstudio.github.io/shinydashboard/): Shiny Dashboarding framework * [{bs4Dash}](https://rinterface.github.io/bs4Dash/index.html): Bootstrap 4 shinydashboard using AdminLTE3 ## Create a theme Use function `create_theme` to create a new theme, this function accept **variables** to set specific parameters of the theme. There's 3 type of variables depending on which framework you use: * `bs_vars_*` to create a shiny theme * `adminlte_*` to create a shinydashboard theme * `bs4dash_*` to create a bs4Dash theme When using `bs_vars_*`, you can specify `theme` argument to use a Bootswatch template. ```{r} create_theme( theme = "default", bs_vars_button( default_color = "#FFF", default_bg = "#112446", default_border = "#112446", border_radius_base = "15px" ), bs_vars_wells( bg = "#FFF", border = "#112446" ) ) ``` Here we modify `shiny::actionButton` appearance with `bs_vars_button` and appearance of `shiny::sidebarPanel` with `bs_vars_wells`. Result looks like : ```{r, eval=TRUE, echo=FALSE} knitr::include_graphics(path = "figures/example_shiny.png") ``` ## Use a theme There's two way to use a newly created theme : 1. inline in the UI (useful to quickly visualize your theme) 2. using a CSS file (recommended) ### Inline Don't specify an output file and use result of `create_theme()` in `use_theme()` directly in your application : ```{r} mytheme <- create_theme( theme = "default", bs_vars_navbar( default_bg = "#75b8d1", default_color = "#FFFFFF", default_link_color = "#FFFFFF", default_link_active_color = "#75b8d1", default_link_active_bg = "#FFFFFF", default_link_hover_color = "firebrick" ), output_file = NULL ) navbarPage( title = "Custom navbar", header = tagList( use_theme(mytheme) # <-- use your theme ), tabPanel("Tab 1"), tabPanel("Tab 2") ) ``` ### File When you create a theme, you can specify an output file : ```{r} create_theme( theme = "default", ..., output_file = "my-custom-theme.css" ) ``` Put the file `my-custom-theme.css` in the `www/` folder of your application, and reference it like that in your UI's `fluidPage` or `navbarPage` : ```r fluidPage( theme = "my-custom-theme.css", # ... ) # or if using a navbar page navbarPage( title = "My application", theme = "mytheme.css", # ... ) ``` In {shinydashboard} or {bs4Dash}, you can use `use_theme()` with a path inside `dashboardBody` or `bs4DashBody` : ```r dashboardBody( use_theme("path/to/theme.css") ) bs4DashBody( use_theme("path/to/theme.css") ) ``` Note that the path must be in the `www/` folder of your application.