View source: R/selectControl.R
selectControlInput | R Documentation |
Create a select control widget to be included in a Shiny UI.
selectControlInput( inputId, label, choices, selected = NULL, multiple = FALSE, sortable = FALSE, optionsStyles = list(), controlStyles = list(), multiValueStyles = list(), multiValueLabelStyles = list(), multiValueRemoveStyles = list(), containerClass = "mt-4 col-md-6 col-offset-4", animated = FALSE, displayGroupSizes = TRUE, closeMenuOnSelect = !multiple, ignoreCaseOnFilter = TRUE, ignoreAccentsOnFilter = TRUE )
inputId |
the input slot that will be used to access the value |
label |
a label for the widget, can be a HTML element; |
choices |
a list of single choices or grouped choices; to use HTML, see
the functions |
selected |
the initially selected value; can be |
multiple |
Boolean, whether the selection of multiple items is allowed |
sortable |
Boolean, whether the multiple selections are sortable |
optionsStyles |
styles for the options, given as a list |
controlStyles |
styles for the control bar, given as a list |
multiValueStyles |
styles for the item boxes when
|
multiValueLabelStyles |
styles for the item labels when
|
multiValueRemoveStyles |
styles for the box containing the cross used to remove an item |
containerClass |
CSS class(es) for the container; the default value
assumes you use the 'bslib' package with
|
animated |
Boolean; this has an effect only when |
displayGroupSizes |
only for grouped choices, whether to display the number of elements of each group |
closeMenuOnSelect |
Boolean, whether to close the menu when doing a selection |
ignoreCaseOnFilter |
Boolean, whether to ignore the case when searching an option |
ignoreAccentsOnFilter |
Boolean, whether to ignore the accents when searching an option |
An input element that can be included in a Shiny UI definition.
# an example using KaTeX #### library(shiny) library(shinySelect) library(bslib) choices <- HTMLchoices( values = list("alpha", "beta", "gamma"), labels = list(katex("\\alpha"), katex("\\beta"), katex("\\gamma")) ) ui <- fluidPage( theme = bs_theme(version = 4), titlePanel("KaTeX example"), selectControlInput( "select", label = tags$h1("Make a choice", style="color: red;"), choices = choices, selected = "alpha", multiple = FALSE ), br(), verbatimTextOutput("textOutput") ) server <- function(input, output, session) { output[["textOutput"]] <- renderPrint({ sprintf("You selected: %s.", input[["select"]]) }) } if(interactive()){ shinyApp(ui, server) } # An example of `sortable = TRUE`, with fontawesome icons #### library(shiny) library(shinySelect) library(bslib) library(fontawesome) food <- HTMLchoices( labels = list( tags$span(fa_i("hamburger"), "Hamburger"), tags$span(fa_i("pizza-slice"), "Pizza"), tags$span(fa_i("fish"), "Fish") ), values = list("hamburger", "pizza", "fish") ) styles <- list( borderBottom = "2px solid orange", backgroundColor = list( selected = "cyan", focused = "lemonchiffon", otherwise = "seashell" ) ) ui <- fluidPage( theme = bs_theme(version = 4), titlePanel("Sortable example"), selectControlInput( "select", label = tags$h1("Make a choice", style="color: red;"), optionsStyles = styles, choices = food, selected = "hamburger", multiple = TRUE, sortable = TRUE, animated = TRUE ), br(), verbatimTextOutput("textOutput") ) server <- function(input, output, session) { output[["textOutput"]] <- renderPrint({ sprintf("You selected: %s.", toString(input[["select"]])) }) } if(interactive()){ shinyApp(ui, server) } # An example with tooltips #### library(shiny) library(bslib) library(shinySelect) data(Countries, package = "jsTreeR") continents <- unique(Countries[["continentName"]]) L <- lapply(continents, function(continent){ indices <- Countries[["continentName"]] == continent countries <- Countries[["countryName"]][indices] pop <- Countries[["population"]][indices] mapply(function(x, y){tags$span(x, `data-toggle`="tooltip", title=y)}, countries, pop, SIMPLIFY = FALSE, USE.NAMES = FALSE) }) countries <- lapply(continents, function(continent){ indices <- Countries[["continentName"]] == continent Countries[["countryName"]][indices] }) countries <- HTMLgroupedChoices( groups = lapply(continents, function(nm) tags$h2(nm, style="color: blue;")), labels = L, values = countries ) CSS <- ' .tooltip { pointer-events: none; } .tooltip > .tooltip-inner { pointer-events: none; background-color: #73AD21; color: #FFFFFF; border: 1px solid green; padding: 5px; font-size: 15px; text-align: justify; margin-left: 10px; max-width: 1000px; } .tooltip > .arrow::before { border-top-color: #73AD21; } ' ui <- fluidPage( theme = bs_theme(version = 4), tags$head( tags$style(HTML(CSS)) ), titlePanel("Tooltips example"), sidebarLayout( sidebarPanel( selectControlInput( "select", label = tags$h3("Choose some countries", style="color: red;"), containerClass = NULL, choices = countries, selected = c("Tonga", "Austria"), multiple = TRUE, animated = TRUE ) ), mainPanel( verbatimTextOutput("textOutput") ) ) ) server <- function(input, output, session) { output[["textOutput"]] <- renderPrint({ sprintf("You selected: %s.", toString(input[["select"]])) }) } if(interactive()){ shinyApp(ui, server) } # An example of custom styles #### library(shiny) library(shinySelect) states <- HTMLgroupedChoices( groups = lapply(list("East Coast", "West Coast", "Midwest"), function(x){ tags$h2(x, style="text-decoration: underline") }), labels = list( lapply(list("NY", "NJ", "CT"), function(x){ tags$span(HTML("•"), x, style="color: red") }), lapply(list("WA", "OR", "CA"), function(x){ tags$span(HTML("•"), x, style="color: green") }), lapply(list("MN", "WI", "IA"), function(x){ tags$span(HTML("•"), x, style="color: blue") }) ), values = list( list("NY", "NJ", "CT"), list("WA", "OR", "CA"), list("MN", "WI", "IA") ) ) styles <- list( borderBottom = "2px dotted orange", backgroundColor = list( selected = "cyan", focused = "lemonchiffon", otherwise = "seashell" ) ) controlStyles = list( marginTop = "0", marginRight = "50px", boxShadow = toString(c( "rgba(50, 50, 93, 0.25) 0px 50px 100px -20px", "rgba(0, 0, 0, 0.3) 0px 30px 60px -30px", "rgba(10, 37, 64, 0.35) 0px -2px 6px 0px inset;" )) ) multiValueStyles = list( backgroundColor = "lavenderblush" ) multiValueLabelStyles = list( fontStyle = "italic", fontWeight = "bold" ) multiValueRemoveStyles = list( color = "hotpink", ":hover" = list( backgroundColor = "navy", color = "white" ) ) CSS <- ' div[class$="-group"][id^="react-select"][id$="-heading"] { background: #0F2027; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #2C5364, #203A43, #0F2027); background: linear-gradient(to right, #2C5364, #203A43, #0F2027); }' ui <- fluidPage( tags$head( tags$style(HTML(CSS)) ), titlePanel("Custom styles example"), splitLayout( selectControlInput( "select", label = tags$h1("Choose some states", style="color: red;"), containerClass = NULL, optionsStyles = styles, controlStyles = controlStyles, multiValueStyles = multiValueStyles, multiValueLabelStyles = multiValueLabelStyles, multiValueRemoveStyles = multiValueRemoveStyles, choices = states, selected = list("NY", "CT"), multiple = TRUE, sortable = TRUE, animated = TRUE ), tagList( verbatimTextOutput("textOutput"), br(), actionButton("toggle", "Toggle menu", class = "btn-primary") ) ) ) server <- function(input, output, session) { output[["textOutput"]] <- renderPrint({ sprintf("You selected: %s.", toString(input[["select"]])) }) observeEvent(input[["toggle"]], { toggleMenu(session, "select") }) } if(interactive()){ shinyApp(ui, server) }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.