--- title: "shinyLottie" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{shinyLottie} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` 'shinyLottie' is an R package that allows users to easily integrate and control ['Lottie' animations](https://airbnb.io/lottie/#/) within ['shiny' applications](https://shiny.posit.co/), without the need for idiosyncratic expression or use of 'JavaScript'. This document introduces the most basic implementation of this package using the following functions: - `include_lottie()` is required in order for 'shinyLottie' functions to work - `lottie_animation()` generates a 'Lottie' animation object that can be inserted into a 'shiny' app's UI - `lottie_button()` converts a 'Lottie' animation object into a button; this is behaviourally identical to `actionButton()` ## Animations The following example demonstrates how to produce a simple 'shiny' app that includes a 'Lottie' animation. ```{r eval = FALSE} library(shiny) library(shinyLottie) ui <- fluidPage( include_lottie(), lottie_animation( path = "shinyLottie/example.json", name = "my_animation" ) ) server <- function(input, output, session) {} shinyApp(ui, server) ``` This relies on the use of two functions within the UI: 1. `include_lottie()` loads the necessary 'JavaScript' to enable 'Lottie' functionality 2. `lottie_animation()` generates a 'Lottie' animation sourced from the supplied `path` argument There are two types of `path` that can be used to reference a 'Lottie' animation: 1. A local file path to a JSON file - the `path` used in the above app references an example animation that is installed alongside 'shinyLottie' 2. A URL for web-hosted JSON files (i.e. [LottieFiles](https://app.lottiefiles.com/) asset link or [LottieLab](https://www.lottielab.com/?home) JSON URL) `lottie_animation()` also requires that we provide a `name`, which we can then reference when updating the animation during 'shiny' runtime. This process, along with further arguments that can be supplied to fine-tune playback behaviour, are explained in `vignette("Controlling-Animations")`. ## Buttons `lottie_button()` makes it simple to convert 'Lottie' animations into functional buttons. The simplest way to do this is to pipe in the output of `lottie_animation()` (this can be done with either R's native `|>` or [magrittr's](https://magrittr.tidyverse.org/) `%>%`). ```{r, eval = FALSE} library(shiny) library(shinyLottie) ui <- fluidPage( include_lottie(), lottie_animation( path = "shinyLottie/example.json", name = "my_animation", height = "100px", width = "100px" ) |> lottie_button(inputId = "my_button") ) server <- function(input, output, session) { observeEvent(input$my_button, { print("Button pressed") }) } shinyApp(ui, server) ``` Along with the animation object, we must also provide `lottie_button()` with an `inputId`. This makes it functionally identical to `actionButton()` - we can then observe the 'shiny' input slot of the same name (in this case `input$my_button`) to trigger reactive behaviour. Here, a simple message is printed to the console.