From 4134ecf17f528893e7d51cba082ced94a583406c Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 11:35:44 -0400 Subject: [PATCH 01/24] feat: input_action_button --- DESCRIPTION | 1 + NAMESPACE | 2 ++ R/shiny-input_action_button.R | 46 +++++++++++++++++++++++++++++ R/utils-shiny.R | 7 +++++ man/input_action_button.Rd | 48 ++++++++++++++++++++++++++++++ man/update_action_button.Rd | 55 +++++++++++++++++++++++++++++++++++ 6 files changed, 159 insertions(+) create mode 100644 R/shiny-input_action_button.R create mode 100644 man/input_action_button.Rd create mode 100644 man/update_action_button.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 5473ca1eb..bdcfbba63 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -147,6 +147,7 @@ Collate: 'precompiled.R' 'print.R' 'shiny-devmode.R' + 'shiny-input_action_button.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index d475ea23b..39440dc15 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -79,6 +79,7 @@ export(font_collection) export(font_face) export(font_google) export(font_link) +export(input_action_button) export(input_dark_mode) export(input_switch) export(input_task_button) @@ -144,6 +145,7 @@ export(toggle_sidebar) export(toggle_switch) export(toggle_tooltip) export(tooltip) +export(update_action_button) export(update_popover) export(update_switch) export(update_task_button) diff --git a/R/shiny-input_action_button.R b/R/shiny-input_action_button.R new file mode 100644 index 000000000..efdcf79b8 --- /dev/null +++ b/R/shiny-input_action_button.R @@ -0,0 +1,46 @@ +#' @inherit shiny::actionButton params return title description details sections references +#' +#' @param id An input id. +#' @param label An input label. +#' +#' @family Shiny input aliases +#' @export +input_action_button <- function( + id, + label, + ..., + icon = NULL, + width = NULL, + disabled = FALSE +) { + shiny::actionButton( + inputId = id, + label = list(icon, label), # avoid shiny's icon validation + width = width, + disabled = disabled, + ... + ) +} + +#' @inherit shiny::updateActionButton params return title description details sections references +#' @inheritParams input_action_button +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_action_button <- function( + id, + ..., + label = NULL, + icon = NULL, + disabled = NULL, + session = get_current_session() +) { + # In-lined to avoid shiny's icon validation + validate_session_object(session, "update_action_button") + + if (!is.null(icon)) icon <- as.character(icon) + message <- dropNulls(list(label=label, icon=icon, disabled=disabled)) + session$sendInputMessage(id, message) +} diff --git a/R/utils-shiny.R b/R/utils-shiny.R index 72bc1c555..f7048ad7a 100644 --- a/R/utils-shiny.R +++ b/R/utils-shiny.R @@ -30,6 +30,13 @@ get_current_theme <- function() { if (isNamespaceLoaded("shiny")) shiny::getCurrentTheme() } +validate_session_object <- function(session, label) { + if (is.null(label)) { + label <- as.character(sys.call(sys.parent())[[1]]) + } + asNamespace("shiny")[["validate_session_object"]](session, label) +} + # Shiny internal funcs needed for nav_panel() (i.e., tabPanel()) logic diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd new file mode 100644 index 000000000..63e14bb49 --- /dev/null +++ b/man/input_action_button.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_action_button.R +\name{input_action_button} +\alias{input_action_button} +\title{Action button/link} +\usage{ +input_action_button( + id, + label, + ..., + icon = NULL, + width = NULL, + disabled = FALSE +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{An input label.} + +\item{...}{Named attributes to be applied to the button or link.} + +\item{icon}{An optional \code{\link[shiny:icon]{icon()}} to appear on the button.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{disabled}{If \code{TRUE}, the button will not be clickable. Use +\code{\link[shiny:updateActionButton]{updateActionButton()}} to dynamically enable/disable the button.} +} +\description{ +Creates an action button or link whose value is initially zero, and increments by one +each time it is pressed. +} +\section{Server value}{ + + +An integer of class \code{"shinyActionButtonValue"}. This class differs from +ordinary integers in that a value of 0 is considered "falsy". +This implies two things: +\itemize{ +\item Event handlers (e.g., \code{\link[shiny:observeEvent]{observeEvent()}}, \code{\link[shiny:eventReactive]{eventReactive()}}) won't execute on initial load. +\item Input validation (e.g., \code{\link[shiny:req]{req()}}, \code{\link[shiny:need]{need()}}) will fail on initial load. +} + +} + +\concept{Shiny input aliases} diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd new file mode 100644 index 000000000..f5d400225 --- /dev/null +++ b/man/update_action_button.Rd @@ -0,0 +1,55 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_action_button.R +\name{update_action_button} +\alias{update_action_button} +\title{Change the label or icon of an action button on the client} +\usage{ +update_action_button( + id, + ..., + label = NULL, + icon = NULL, + disabled = NULL, + session = get_current_session() +) +} +\arguments{ +\item{id}{An input id.} + +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{icon}{An optional \code{\link[shiny:icon]{icon()}} to appear on the button.} + +\item{disabled}{If \code{TRUE}, the button will not be clickable; if \code{FALSE}, it +will be.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the label or icon of an action button on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_link}()} +} +\concept{Shiny update aliases} From beeba25097c2d6d4cae683704f4979c8e58014f2 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:34:40 -0400 Subject: [PATCH 02/24] feat: input_action_link --- DESCRIPTION | 1 + NAMESPACE | 2 ++ R/shiny-input_action_link.R | 38 +++++++++++++++++++++++++++ man/input_action_button.Rd | 4 +++ man/input_action_link.Rd | 40 +++++++++++++++++++++++++++++ man/update_action_link.Rd | 51 +++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+) create mode 100644 R/shiny-input_action_link.R create mode 100644 man/input_action_link.Rd create mode 100644 man/update_action_link.Rd diff --git a/DESCRIPTION b/DESCRIPTION index bdcfbba63..f6eaad696 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -148,6 +148,7 @@ Collate: 'print.R' 'shiny-devmode.R' 'shiny-input_action_button.R' + 'shiny-input_action_link.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index 39440dc15..b68014501 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -80,6 +80,7 @@ export(font_face) export(font_google) export(font_link) export(input_action_button) +export(input_action_link) export(input_dark_mode) export(input_switch) export(input_task_button) @@ -146,6 +147,7 @@ export(toggle_switch) export(toggle_tooltip) export(tooltip) export(update_action_button) +export(update_action_link) export(update_popover) export(update_switch) export(update_task_button) diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R new file mode 100644 index 000000000..9d7f3d187 --- /dev/null +++ b/R/shiny-input_action_link.R @@ -0,0 +1,38 @@ +#' @inherit shiny::actionLink params return title description details sections references +#' +#' @inheritParams input_action_button +#' +#' @family Shiny input aliases +#' @export +input_action_link <- function( + id, + label, + icon = NULL, + ... +) { + shiny::actionLink( + inputId = id, + label = list(icon, label), # avoid shiny's icon validation + ... + ) +} + +#' @inherit shiny::updateActionLink params return title description details sections references +#' @inheritParams update_action_button +#' +#' @family Shiny update aliases +#' @export +update_action_link <- function( + id, + ..., + label = NULL, + icon = NULL, + session = get_current_session +) { + update_action_button( + id = id, + label = label, + icon = icon, + session = session + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 63e14bb49..49137b4c3 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -45,4 +45,8 @@ This implies two things: } +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_link}()} +} \concept{Shiny input aliases} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd new file mode 100644 index 000000000..a1c370844 --- /dev/null +++ b/man/input_action_link.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_action_link.R +\name{input_action_link} +\alias{input_action_link} +\title{Action button/link} +\usage{ +input_action_link(id, label, icon = NULL, ...) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{The contents of the button or link--usually a text label, but +you could also use any other HTML, like an image.} + +\item{icon}{An optional \code{\link[shiny:icon]{icon()}} to appear on the button.} + +\item{...}{Named attributes to be applied to the button or link.} +} +\description{ +Creates an action button or link whose value is initially zero, and increments by one +each time it is pressed. +} +\section{Server value}{ + + +An integer of class \code{"shinyActionButtonValue"}. This class differs from +ordinary integers in that a value of 0 is considered "falsy". +This implies two things: +\itemize{ +\item Event handlers (e.g., \code{\link[shiny:observeEvent]{observeEvent()}}, \code{\link[shiny:eventReactive]{eventReactive()}}) won't execute on initial load. +\item Input validation (e.g., \code{\link[shiny:req]{req()}}, \code{\link[shiny:need]{need()}}) will fail on initial load. +} + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()} +} +\concept{Shiny input aliases} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd new file mode 100644 index 000000000..12c2c2786 --- /dev/null +++ b/man/update_action_link.Rd @@ -0,0 +1,51 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_action_link.R +\name{update_action_link} +\alias{update_action_link} +\title{Change the label or icon of an action button on the client} +\usage{ +update_action_link( + id, + ..., + label = NULL, + icon = NULL, + session = get_current_session +) +} +\arguments{ +\item{id}{An input id.} + +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{icon}{An optional \code{\link[shiny:icon]{icon()}} to appear on the button.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the label or icon of an action button on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()} +} +\concept{Shiny update aliases} From a6ea91ef8448ccea29a43ef28fc358fa931cee54 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:39:51 -0400 Subject: [PATCH 03/24] feat: input_select --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_select.R | 49 ++++++++++++++++++++++ man/input_action_button.Rd | 3 +- man/input_action_link.Rd | 3 +- man/input_select.Rd | 84 +++++++++++++++++++++++++++++++++++++ man/update_action_button.Rd | 3 +- man/update_action_link.Rd | 3 +- man/update_select.Rd | 62 +++++++++++++++++++++++++++ 9 files changed, 206 insertions(+), 4 deletions(-) create mode 100644 R/shiny-input_select.R create mode 100644 man/input_select.Rd create mode 100644 man/update_select.Rd diff --git a/DESCRIPTION b/DESCRIPTION index f6eaad696..4ca75ce06 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -149,6 +149,7 @@ Collate: 'shiny-devmode.R' 'shiny-input_action_button.R' 'shiny-input_action_link.R' + 'shiny-input_select.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index b68014501..507eaa269 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -82,6 +82,7 @@ export(font_link) export(input_action_button) export(input_action_link) export(input_dark_mode) +export(input_select) export(input_switch) export(input_task_button) export(is.card_item) @@ -149,6 +150,7 @@ export(tooltip) export(update_action_button) export(update_action_link) export(update_popover) +export(update_select) export(update_switch) export(update_task_button) export(update_tooltip) diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R new file mode 100644 index 000000000..c20dc6fce --- /dev/null +++ b/R/shiny-input_select.R @@ -0,0 +1,49 @@ +#' @inherit shiny::selectInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' +#' @family Shiny input aliases +#' @export +input_select <- function( + id, + label, + choices, + selected = NULL, + multiple = FALSE, + selectize = FALSE, # Match Shiny for Python + width = NULL, + size = NULL +) { + shiny::selectInput( + inputId = id, + label = label, + choices = choices, + selected = selected, + multiple = multiple, + selectize = selectize, + width = width, + size = size + ) +} + +#' @inherit shiny::updateSelectInput params return title description details sections references +#' @inheritParams update_action_button +#' +#' @family Shiny update aliases +#' @export +update_select <- function( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + session = get_current_session() +) { + shiny::updateSelectInput( + session = session, + inputId = id, + label = label, + choices = choices, + selected = selected + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 49137b4c3..f577d5fa7 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -47,6 +47,7 @@ This implies two things: \seealso{ Other Shiny input aliases: -\code{\link{input_action_link}()} +\code{\link{input_action_link}()}, +\code{\link{input_select}()} } \concept{Shiny input aliases} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index a1c370844..a7c3d4fa9 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -35,6 +35,7 @@ This implies two things: \seealso{ Other Shiny input aliases: -\code{\link{input_action_button}()} +\code{\link{input_action_button}()}, +\code{\link{input_select}()} } \concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd new file mode 100644 index 000000000..afd866f03 --- /dev/null +++ b/man/input_select.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_select.R +\name{input_select} +\alias{input_select} +\title{Create a select list input control} +\usage{ +input_select( + id, + label, + choices, + selected = NULL, + multiple = FALSE, + selectize = FALSE, + width = NULL, + size = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{choices}{List of values to select from. If elements of the list are +named, then that name --- rather than the value --- is displayed to the +user. It's also possible to group related inputs by providing a named list +whose elements are (either named or unnamed) lists, vectors, or factors. In +this case, the outermost names will be used as the group labels (leveraging +the \verb{} HTML tag) for the elements in the respective sublist. See +the example section for a small demo of this feature.} + +\item{selected}{The initially selected value (or multiple values if \code{multiple = TRUE}). If not specified then defaults to the first value for +single-select lists and no values for multiple select lists.} + +\item{multiple}{Is selection of multiple items allowed?} + +\item{selectize}{Whether to use \pkg{selectize.js} or not.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{size}{Number of items to show in the selection box; a larger number +will result in a taller box. Not compatible with \code{selectize=TRUE}. +Normally, when \code{multiple=FALSE}, a select input will be a drop-down list, +but when \code{size} is set, it will be a box instead.} +} +\value{ +A select list control that can be added to a UI definition. +} +\description{ +Create a select list that can be used to choose a single or multiple items +from a list of values. +} +\details{ +By default, \code{selectInput()} and \code{selectizeInput()} use the JavaScript library +\pkg{selectize.js} (\url{https://selectize.dev/}) instead of +the basic select input element. To use the standard HTML select input +element, use \code{selectInput()} with \code{selectize=FALSE}. + +In selectize mode, if the first element in \code{choices} has a value of \code{""}, its +name will be treated as a placeholder prompt. For example: +\code{selectInput("letter", "Letter", c("Choose one" = "", LETTERS))} + +\strong{Performance note:} \code{selectInput()} and \code{selectizeInput()} can slow down +significantly when thousands of choices are used; with legacy browsers like +Internet Explorer, the user interface may hang for many seconds. For large +numbers of choices, Shiny offers a "server-side selectize" option that +massively improves performance and efficiency; see +\href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} +on the Shiny Dev Center for details. +} +\section{Server value}{ + + A vector of character strings, usually of length +1, with the value of the selected items. When \code{multiple=TRUE} and +nothing is selected, this value will be \code{NULL}. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()} +} +\concept{Shiny input aliases} diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index f5d400225..606ab034d 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -50,6 +50,7 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ Other Shiny update aliases: -\code{\link{update_action_link}()} +\code{\link{update_action_link}()}, +\code{\link{update_select}()} } \concept{Shiny update aliases} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 12c2c2786..d8a745e92 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -46,6 +46,7 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ Other Shiny update aliases: -\code{\link{update_action_button}()} +\code{\link{update_action_button}()}, +\code{\link{update_select}()} } \concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd new file mode 100644 index 000000000..bd779351c --- /dev/null +++ b/man/update_select.Rd @@ -0,0 +1,62 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_select.R +\name{update_select} +\alias{update_select} +\title{Change the value of a select input on the client} +\usage{ +update_select( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + session = get_current_session() +) +} +\arguments{ +\item{id}{An input id.} + +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{choices}{List of values to select from. If elements of the list are +named, then that name --- rather than the value --- is displayed to the +user. It's also possible to group related inputs by providing a named list +whose elements are (either named or unnamed) lists, vectors, or factors. In +this case, the outermost names will be used as the group labels (leveraging +the \verb{} HTML tag) for the elements in the respective sublist. See +the example section for a small demo of this feature.} + +\item{selected}{The initially selected value (or multiple values if \code{multiple = TRUE}). If not specified then defaults to the first value for +single-select lists and no values for multiple select lists.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a select input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()} +} +\concept{Shiny update aliases} From 7d08ead8c88e5c558c504bb7767d6242978d0845 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:41:25 -0400 Subject: [PATCH 04/24] feat: input_selectize --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_selectize.R | 45 ++++++++++++++++++++++ man/input_action_button.Rd | 3 +- man/input_action_link.Rd | 3 +- man/input_select.Rd | 3 +- man/input_selectize.Rd | 61 ++++++++++++++++++++++++++++++ man/update_action_button.Rd | 3 +- man/update_action_link.Rd | 3 +- man/update_select.Rd | 3 +- man/update_selectize.Rd | 75 +++++++++++++++++++++++++++++++++++++ 11 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 R/shiny-input_selectize.R create mode 100644 man/input_selectize.Rd create mode 100644 man/update_selectize.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 4ca75ce06..431be09aa 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -150,6 +150,7 @@ Collate: 'shiny-input_action_button.R' 'shiny-input_action_link.R' 'shiny-input_select.R' + 'shiny-input_selectize.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index 507eaa269..6f2eff360 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -83,6 +83,7 @@ export(input_action_button) export(input_action_link) export(input_dark_mode) export(input_select) +export(input_selectize) export(input_switch) export(input_task_button) export(is.card_item) @@ -151,6 +152,7 @@ export(update_action_button) export(update_action_link) export(update_popover) export(update_select) +export(update_selectize) export(update_switch) export(update_task_button) export(update_tooltip) diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R new file mode 100644 index 000000000..6dd53b5af --- /dev/null +++ b/R/shiny-input_selectize.R @@ -0,0 +1,45 @@ +#' @inherit shiny::selectizeInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' +#' @family Shiny input aliases +#' @export +input_selectize <- function( + id, + ..., + options = NULL, + width = NULL +) { + shiny::selectizeInput( + inputId = id, + ..., + options = options, + width = width + ) +} + +#' @inherit shiny::updateSelectizeInput params return title description details sections references +#' @inheritParams update_action_button +#' +#' @family Shiny update aliases +#' @export +update_selectize <- function( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + options = list(), + server = FALSE, + session = get_current_session() +) { + shiny::updateSelectizeInput( + session = session, + inputId = id, + label = label, + choices = choices, + selected = selected, + options = options, + server = server + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index f577d5fa7..dc451b3e9 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -48,6 +48,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_link}()}, -\code{\link{input_select}()} +\code{\link{input_select}()}, +\code{\link{input_selectize}()} } \concept{Shiny input aliases} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index a7c3d4fa9..a9a88d6d0 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -36,6 +36,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_button}()}, -\code{\link{input_select}()} +\code{\link{input_select}()}, +\code{\link{input_selectize}()} } \concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index afd866f03..5391731f1 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -79,6 +79,7 @@ nothing is selected, this value will be \code{NULL}. \seealso{ Other Shiny input aliases: \code{\link{input_action_button}()}, -\code{\link{input_action_link}()} +\code{\link{input_action_link}()}, +\code{\link{input_selectize}()} } \concept{Shiny input aliases} diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd new file mode 100644 index 000000000..74b7c82ae --- /dev/null +++ b/man/input_selectize.Rd @@ -0,0 +1,61 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_selectize.R +\name{input_selectize} +\alias{input_selectize} +\title{Create a select list input control} +\usage{ +input_selectize(id, ..., options = NULL, width = NULL) +} +\arguments{ +\item{id}{An input id.} + +\item{...}{Arguments passed to \code{selectInput()}.} + +\item{options}{A list of options. See the documentation of \pkg{selectize.js}(\url{https://selectize.dev/docs/usage}) +for possible options (character option values inside \code{\link[base:AsIs]{base::I()}} will +be treated as literal JavaScript code; see \code{\link[shiny:renderDataTable]{renderDataTable()}} +for details).} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} +} +\value{ +A select list control that can be added to a UI definition. +} +\description{ +Create a select list that can be used to choose a single or multiple items +from a list of values. +} +\details{ +By default, \code{selectInput()} and \code{selectizeInput()} use the JavaScript library +\pkg{selectize.js} (\url{https://selectize.dev/}) instead of +the basic select input element. To use the standard HTML select input +element, use \code{selectInput()} with \code{selectize=FALSE}. + +In selectize mode, if the first element in \code{choices} has a value of \code{""}, its +name will be treated as a placeholder prompt. For example: +\code{selectInput("letter", "Letter", c("Choose one" = "", LETTERS))} + +\strong{Performance note:} \code{selectInput()} and \code{selectizeInput()} can slow down +significantly when thousands of choices are used; with legacy browsers like +Internet Explorer, the user interface may hang for many seconds. For large +numbers of choices, Shiny offers a "server-side selectize" option that +massively improves performance and efficiency; see +\href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} +on the Shiny Dev Center for details. +} +\section{Server value}{ + + A vector of character strings, usually of length +1, with the value of the selected items. When \code{multiple=TRUE} and +nothing is selected, this value will be \code{NULL}. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_select}()} +} +\concept{Shiny input aliases} diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 606ab034d..95785d08a 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -51,6 +51,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_link}()}, -\code{\link{update_select}()} +\code{\link{update_select}()}, +\code{\link{update_selectize}()} } \concept{Shiny update aliases} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index d8a745e92..f08725da7 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -47,6 +47,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, -\code{\link{update_select}()} +\code{\link{update_select}()}, +\code{\link{update_selectize}()} } \concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index bd779351c..700c5c688 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -57,6 +57,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, -\code{\link{update_action_link}()} +\code{\link{update_action_link}()}, +\code{\link{update_selectize}()} } \concept{Shiny update aliases} diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd new file mode 100644 index 000000000..6fb05b10c --- /dev/null +++ b/man/update_selectize.Rd @@ -0,0 +1,75 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_selectize.R +\name{update_selectize} +\alias{update_selectize} +\title{Change the value of a select input on the client} +\usage{ +update_selectize( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + options = list(), + server = FALSE, + session = get_current_session() +) +} +\arguments{ +\item{id}{An input id.} + +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{choices}{List of values to select from. If elements of the list are +named, then that name --- rather than the value --- is displayed to the +user. It's also possible to group related inputs by providing a named list +whose elements are (either named or unnamed) lists, vectors, or factors. In +this case, the outermost names will be used as the group labels (leveraging +the \verb{} HTML tag) for the elements in the respective sublist. See +the example section for a small demo of this feature.} + +\item{selected}{The initially selected value (or multiple values if \code{multiple = TRUE}). If not specified then defaults to the first value for +single-select lists and no values for multiple select lists.} + +\item{options}{A list of options. See the documentation of \pkg{selectize.js}(\url{https://selectize.dev/docs/usage}) +for possible options (character option values inside \code{\link[base:AsIs]{base::I()}} will +be treated as literal JavaScript code; see \code{\link[shiny:renderDataTable]{renderDataTable()}} +for details).} + +\item{server}{whether to store \code{choices} on the server side, and load +the select options dynamically on searching, instead of writing all +\code{choices} into the page at once (i.e., only use the client-side +version of \pkg{selectize.js})} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a select input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_select}()} +} +\concept{Shiny update aliases} From 84b742cec154c4edb86998f593298cf342d5d837 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:44:39 -0400 Subject: [PATCH 05/24] feat: input_slider --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_action_link.R | 2 +- R/shiny-input_select.R | 2 +- R/shiny-input_selectize.R | 2 +- R/shiny-input_slider.R | 75 +++++++++++++++++++++++++ man/input_action_button.Rd | 3 +- man/input_action_link.Rd | 3 +- man/input_select.Rd | 3 +- man/input_selectize.Rd | 3 +- man/input_slider.Rd | 107 ++++++++++++++++++++++++++++++++++++ man/update_action_button.Rd | 3 +- man/update_action_link.Rd | 5 +- man/update_select.Rd | 5 +- man/update_selectize.Rd | 5 +- man/update_slider.Rd | 82 +++++++++++++++++++++++++++ 16 files changed, 286 insertions(+), 17 deletions(-) create mode 100644 R/shiny-input_slider.R create mode 100644 man/input_slider.Rd create mode 100644 man/update_slider.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 431be09aa..534ea583f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -151,6 +151,7 @@ Collate: 'shiny-input_action_link.R' 'shiny-input_select.R' 'shiny-input_selectize.R' + 'shiny-input_slider.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index 6f2eff360..183a9eb87 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -84,6 +84,7 @@ export(input_action_link) export(input_dark_mode) export(input_select) export(input_selectize) +export(input_slider) export(input_switch) export(input_task_button) export(is.card_item) @@ -153,6 +154,7 @@ export(update_action_link) export(update_popover) export(update_select) export(update_selectize) +export(update_slider) export(update_switch) export(update_task_button) export(update_tooltip) diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R index 9d7f3d187..9a4720b66 100644 --- a/R/shiny-input_action_link.R +++ b/R/shiny-input_action_link.R @@ -18,7 +18,7 @@ input_action_link <- function( } #' @inherit shiny::updateActionLink params return title description details sections references -#' @inheritParams update_action_button +#' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R index c20dc6fce..89b76ae63 100644 --- a/R/shiny-input_select.R +++ b/R/shiny-input_select.R @@ -27,7 +27,7 @@ input_select <- function( } #' @inherit shiny::updateSelectInput params return title description details sections references -#' @inheritParams update_action_button +#' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R index 6dd53b5af..51455bc9f 100644 --- a/R/shiny-input_selectize.R +++ b/R/shiny-input_selectize.R @@ -19,7 +19,7 @@ input_selectize <- function( } #' @inherit shiny::updateSelectizeInput params return title description details sections references -#' @inheritParams update_action_button +#' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_slider.R b/R/shiny-input_slider.R new file mode 100644 index 000000000..90ce49d16 --- /dev/null +++ b/R/shiny-input_slider.R @@ -0,0 +1,75 @@ +#' @inherit shiny::sliderInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_slider <- function( + id, + label, + min, + max, + value, + ..., + step = NULL, + round = FALSE, + ticks = TRUE, + animate = FALSE, + width = NULL, + sep = ",", + pre = NULL, + post = NULL, + timeFormat = NULL, + timezone = NULL, + dragRange = TRUE +) { + shiny::sliderInput( + inputId = id, + label = label, + min = min, + max = max, + value = value, + step = step, + round = round, + ticks = ticks, + animate = animate, + width = width, + sep = sep, + pre = pre, + post = post, + timeFormat = timeFormat, + timezone = timezone, + dragRange = dragRange + ) +} + +#' @inherit shiny::updateSliderInput params return title description details sections references +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_slider <- function( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + step = NULL, + timeFormat = NULL, + timezone = NULL, + session = get_current_session() +) { + shiny::updateSliderInput( + session = session, + inputId = id, + label = label, + value = value, + min = min, + max = max, + step = step, + timeFormat = timeFormat, + timezone = timezone + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index dc451b3e9..1512ca130 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -49,6 +49,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_link}()}, \code{\link{input_select}()}, -\code{\link{input_selectize}()} +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} } \concept{Shiny input aliases} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index a9a88d6d0..86bcf77b6 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -37,6 +37,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_select}()}, -\code{\link{input_selectize}()} +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} } \concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index 5391731f1..6b1fd15b9 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -80,6 +80,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, -\code{\link{input_selectize}()} +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} } \concept{Shiny input aliases} diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 74b7c82ae..c2f5b8cab 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -56,6 +56,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, -\code{\link{input_select}()} +\code{\link{input_select}()}, +\code{\link{input_slider}()} } \concept{Shiny input aliases} diff --git a/man/input_slider.Rd b/man/input_slider.Rd new file mode 100644 index 000000000..0aefa5185 --- /dev/null +++ b/man/input_slider.Rd @@ -0,0 +1,107 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_slider.R +\name{input_slider} +\alias{input_slider} +\title{Slider Input Widget} +\usage{ +input_slider( + id, + label, + min, + max, + value, + ..., + step = NULL, + round = FALSE, + ticks = TRUE, + animate = FALSE, + width = NULL, + sep = ",", + pre = NULL, + post = NULL, + timeFormat = NULL, + timezone = NULL, + dragRange = TRUE +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{min, max}{The minimum and maximum values (inclusive) that can be +selected.} + +\item{value}{The initial value of the slider, either a number, a date +(class Date), or a date-time (class POSIXt). A length one vector will +create a regular slider; a length two vector will create a double-ended +range slider. Must lie between \code{min} and \code{max}.} + +\item{...}{Ignored, included for future expansion.} + +\item{step}{Specifies the interval between each selectable value on the +slider. Either \code{NULL}, the default, which uses a heuristic to determine the +step size or a single number. If the values are dates, \code{step} is in days; +if the values are date-times, \code{step} is in seconds.} + +\item{round}{\code{TRUE} to round all values to the nearest integer; +\code{FALSE} if no rounding is desired; or an integer to round to that +number of digits (for example, 1 will round to the nearest 10, and -2 will +round to the nearest .01). Any rounding will be applied after snapping to +the nearest step.} + +\item{ticks}{\code{FALSE} to hide tick marks, \code{TRUE} to show them +according to some simple heuristics.} + +\item{animate}{\code{TRUE} to show simple animation controls with default +settings; \code{FALSE} not to; or a custom settings list, such as those +created using \code{\link[shiny:animationOptions]{animationOptions()}}.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{sep}{Separator between thousands places in numbers.} + +\item{pre}{A prefix string to put in front of the value.} + +\item{post}{A suffix string to put after the value.} + +\item{timeFormat}{Only used if the values are Date or POSIXt objects. A time +format string, to be passed to the Javascript strftime library. See +\url{https://github.com/samsonjs/strftime} for more details. The allowed +format specifications are very similar, but not identical, to those for R's +\code{\link[base:strptime]{base::strftime()}} function. For Dates, the default is \code{"\%F"} +(like \code{"2015-07-01"}), and for POSIXt, the default is \code{"\%F \%T"} +(like \code{"2015-07-01 15:32:10"}).} + +\item{timezone}{Only used if the values are POSIXt objects. A string +specifying the time zone offset for the displayed times, in the format +\code{"+HHMM"} or \code{"-HHMM"}. If \code{NULL} (the default), times will +be displayed in the browser's time zone. The value \code{"+0000"} will +result in UTC time.} + +\item{dragRange}{This option is used only if it is a range slider (with two +values). If \code{TRUE} (the default), the range can be dragged. In other +words, the min and max can be dragged together. If \code{FALSE}, the range +cannot be dragged.} +} +\description{ +Constructs a slider widget to select a number, date, or date-time from a +range. +} +\section{Server value}{ + + +A number, date, or date-time (depending on the class of \code{value}), or +in the case of slider range, a vector of two numbers/dates/date-times. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()} +} +\concept{Shiny input aliases} diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 95785d08a..7489120cf 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -52,6 +52,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_link}()}, \code{\link{update_select}()}, -\code{\link{update_selectize}()} +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} } \concept{Shiny update aliases} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index f08725da7..e036c88cb 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -13,8 +13,6 @@ update_action_link( ) } \arguments{ -\item{id}{An input id.} - \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} @@ -48,6 +46,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_select}()}, -\code{\link{update_selectize}()} +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} } \concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index 700c5c688..ded037c34 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -14,8 +14,6 @@ update_select( ) } \arguments{ -\item{id}{An input id.} - \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} @@ -58,6 +56,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, -\code{\link{update_selectize}()} +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} } \concept{Shiny update aliases} diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 6fb05b10c..f713d4e4e 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -16,8 +16,6 @@ update_selectize( ) } \arguments{ -\item{id}{An input id.} - \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} @@ -70,6 +68,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, -\code{\link{update_select}()} +\code{\link{update_select}()}, +\code{\link{update_slider}()} } \concept{Shiny update aliases} diff --git a/man/update_slider.Rd b/man/update_slider.Rd new file mode 100644 index 000000000..fc6101151 --- /dev/null +++ b/man/update_slider.Rd @@ -0,0 +1,82 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_slider.R +\name{update_slider} +\alias{update_slider} +\title{Update Slider Input Widget} +\usage{ +update_slider( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + step = NULL, + timeFormat = NULL, + timezone = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{The initial value of the slider, either a number, a date +(class Date), or a date-time (class POSIXt). A length one vector will +create a regular slider; a length two vector will create a double-ended +range slider. Must lie between \code{min} and \code{max}.} + +\item{min, max}{The minimum and maximum values (inclusive) that can be +selected.} + +\item{step}{Specifies the interval between each selectable value on the +slider. Either \code{NULL}, the default, which uses a heuristic to determine the +step size or a single number. If the values are dates, \code{step} is in days; +if the values are date-times, \code{step} is in seconds.} + +\item{timeFormat}{Only used if the values are Date or POSIXt objects. A time +format string, to be passed to the Javascript strftime library. See +\url{https://github.com/samsonjs/strftime} for more details. The allowed +format specifications are very similar, but not identical, to those for R's +\code{\link[base:strptime]{base::strftime()}} function. For Dates, the default is \code{"\%F"} +(like \code{"2015-07-01"}), and for POSIXt, the default is \code{"\%F \%T"} +(like \code{"2015-07-01 15:32:10"}).} + +\item{timezone}{Only used if the values are POSIXt objects. A string +specifying the time zone offset for the displayed times, in the format +\code{"+HHMM"} or \code{"-HHMM"}. If \code{NULL} (the default), times will +be displayed in the browser's time zone. The value \code{"+0000"} will +result in UTC time.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a slider input on the client. +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()} +} +\concept{Shiny update aliases} From 19218828134623d945e7b74ef2dcca8984235279 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:46:18 -0400 Subject: [PATCH 06/24] feat: input_date --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_date.R | 64 +++++++++++++++++++++ man/input_action_button.Rd | 1 + man/input_action_link.Rd | 1 + man/input_date.Rd | 108 ++++++++++++++++++++++++++++++++++++ man/input_select.Rd | 1 + man/input_selectize.Rd | 1 + man/input_slider.Rd | 1 + man/update_action_button.Rd | 1 + man/update_action_link.Rd | 1 + man/update_date.Rd | 63 +++++++++++++++++++++ man/update_select.Rd | 1 + man/update_selectize.Rd | 1 + man/update_slider.Rd | 1 + 15 files changed, 248 insertions(+) create mode 100644 R/shiny-input_date.R create mode 100644 man/input_date.Rd create mode 100644 man/update_date.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 534ea583f..a4485bcca 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -149,6 +149,7 @@ Collate: 'shiny-devmode.R' 'shiny-input_action_button.R' 'shiny-input_action_link.R' + 'shiny-input_date.R' 'shiny-input_select.R' 'shiny-input_selectize.R' 'shiny-input_slider.R' diff --git a/NAMESPACE b/NAMESPACE index 183a9eb87..a8667861e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -82,6 +82,7 @@ export(font_link) export(input_action_button) export(input_action_link) export(input_dark_mode) +export(input_date) export(input_select) export(input_selectize) export(input_slider) @@ -151,6 +152,7 @@ export(toggle_tooltip) export(tooltip) export(update_action_button) export(update_action_link) +export(update_date) export(update_popover) export(update_select) export(update_selectize) diff --git a/R/shiny-input_date.R b/R/shiny-input_date.R new file mode 100644 index 000000000..a3e329d03 --- /dev/null +++ b/R/shiny-input_date.R @@ -0,0 +1,64 @@ +#' @inherit shiny::dateInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_date <- function( + id, + label, + value = NULL, + ..., + min = NULL, + max = NULL, + format = "yyyy-mm-dd", + startview = "month", + weekstart = 0, + language = "en", + width = NULL, + autoclose = TRUE, + datesdisabled = NULL, + daysofweekdisabled = NULL +) { + shiny::dateInput( + inputId = id, + label = label, + value = value, + min = min, + max = max, + format = format, + startview = startview, + weekstart = weekstart, + language = language, + width = width, + autoclose = autoclose, + datesdisabled = datesdisabled, + daysofweekdisabled = daysofweekdisabled + ) +} + +#' @inherit shiny::updateDateInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_date <- function( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + session = get_current_session() +) { + shiny::updateDateInput( + session = session, + inputId = id, + label = label, + value = value, + min = min, + max = max + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 1512ca130..d10337e35 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -48,6 +48,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_link}()}, +\code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 86bcf77b6..1b5eb1b3a 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -36,6 +36,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_button}()}, +\code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_date.Rd b/man/input_date.Rd new file mode 100644 index 000000000..f44d82fed --- /dev/null +++ b/man/input_date.Rd @@ -0,0 +1,108 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_date.R +\name{input_date} +\alias{input_date} +\title{Create date input} +\usage{ +input_date( + id, + label, + value = NULL, + ..., + min = NULL, + max = NULL, + format = "yyyy-mm-dd", + startview = "month", + weekstart = 0, + language = "en", + width = NULL, + autoclose = TRUE, + datesdisabled = NULL, + daysofweekdisabled = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{The starting date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current date +in the client's time zone.} + +\item{...}{Ignored, included for future expansion.} + +\item{min}{The minimum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{max}{The maximum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{format}{The format of the date to display in the browser. Defaults to +\code{"yyyy-mm-dd"}.} + +\item{startview}{The date range shown when the input object is first clicked. +Can be "month" (the default), "year", or "decade".} + +\item{weekstart}{Which day is the start of the week. Should be an integer +from 0 (Sunday) to 6 (Saturday).} + +\item{language}{The language used for month and day names. Default is "en". +Other valid values include "ar", "az", "bg", "bs", "ca", "cs", "cy", "da", +"de", "el", "en-AU", "en-GB", "eo", "es", "et", "eu", "fa", "fi", "fo", +"fr-CH", "fr", "gl", "he", "hr", "hu", "hy", "id", "is", "it-CH", "it", +"ja", "ka", "kh", "kk", "ko", "kr", "lt", "lv", "me", "mk", "mn", "ms", +"nb", "nl-BE", "nl", "no", "pl", "pt-BR", "pt", "ro", "rs-latin", "rs", +"ru", "sk", "sl", "sq", "sr-latin", "sr", "sv", "sw", "th", "tr", "uk", +"vi", "zh-CN", and "zh-TW".} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{autoclose}{Whether or not to close the datepicker immediately when a +date is selected.} + +\item{datesdisabled}{Which dates should be disabled. Either a Date object, +or a string in \code{yyyy-mm-dd} format.} + +\item{daysofweekdisabled}{Days of the week that should be disabled. Should be +a integer vector with values from 0 (Sunday) to 6 (Saturday).} +} +\description{ +Creates a text input which, when clicked on, brings up a calendar that +the user can click on to select dates. +} +\details{ +The date \code{format} string specifies how the date will be displayed in +the browser. It allows the following values: + +\itemize{ +\item \code{yy} Year without century (12) +\item \code{yyyy} Year with century (2012) +\item \code{mm} Month number, with leading zero (01-12) +\item \code{m} Month number, without leading zero (1-12) +\item \code{M} Abbreviated month name +\item \code{MM} Full month name +\item \code{dd} Day of month with leading zero +\item \code{d} Day of month without leading zero +\item \code{D} Abbreviated weekday name +\item \code{DD} Full weekday name +} +} +\section{Server value}{ + + +A \link{Date} vector of length 1. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_date_range}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} +} +\concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index 6b1fd15b9..dbabc73c3 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -80,6 +80,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_date}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} } diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index c2f5b8cab..67f80cc40 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -56,6 +56,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_slider}()} } diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 0aefa5185..e59c9998f 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -101,6 +101,7 @@ in the case of slider range, a vector of two numbers/dates/date-times. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()} } diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 7489120cf..64141d107 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -51,6 +51,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_link}()}, +\code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index e036c88cb..3003b8953 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -45,6 +45,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, +\code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_date.Rd b/man/update_date.Rd new file mode 100644 index 000000000..6546782db --- /dev/null +++ b/man/update_date.Rd @@ -0,0 +1,63 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_date.R +\name{update_date} +\alias{update_date} +\title{Change the value of a date input on the client} +\usage{ +update_date( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{The starting date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current date +in the client's time zone.} + +\item{min}{The minimum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{max}{The maximum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a date input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} +} +\concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index ded037c34..69d00c57c 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -56,6 +56,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_date}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} } diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index f713d4e4e..ac0f4a38e 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -68,6 +68,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_slider}()} } diff --git a/man/update_slider.Rd b/man/update_slider.Rd index fc6101151..45b10017f 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -76,6 +76,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()} } From b3aa6ddf3097f1122e9ac69d5641f987dd011aa8 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:48:25 -0400 Subject: [PATCH 07/24] feat: input_date_range --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_date_range.R | 65 ++++++++++++++++++++++ man/input_action_button.Rd | 1 + man/input_action_link.Rd | 1 + man/input_date_range.Rd | 108 ++++++++++++++++++++++++++++++++++++ man/input_select.Rd | 1 + man/input_selectize.Rd | 1 + man/input_slider.Rd | 1 + man/update_action_button.Rd | 1 + man/update_action_link.Rd | 1 + man/update_date.Rd | 1 + man/update_date_range.Rd | 69 +++++++++++++++++++++++ man/update_select.Rd | 1 + man/update_selectize.Rd | 1 + man/update_slider.Rd | 1 + 16 files changed, 256 insertions(+) create mode 100644 R/shiny-input_date_range.R create mode 100644 man/input_date_range.Rd create mode 100644 man/update_date_range.Rd diff --git a/DESCRIPTION b/DESCRIPTION index a4485bcca..0a9db5fc5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -150,6 +150,7 @@ Collate: 'shiny-input_action_button.R' 'shiny-input_action_link.R' 'shiny-input_date.R' + 'shiny-input_date_range.R' 'shiny-input_select.R' 'shiny-input_selectize.R' 'shiny-input_slider.R' diff --git a/NAMESPACE b/NAMESPACE index a8667861e..5cc4bd8d3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -83,6 +83,7 @@ export(input_action_button) export(input_action_link) export(input_dark_mode) export(input_date) +export(input_date_range) export(input_select) export(input_selectize) export(input_slider) @@ -153,6 +154,7 @@ export(tooltip) export(update_action_button) export(update_action_link) export(update_date) +export(update_date_range) export(update_popover) export(update_select) export(update_selectize) diff --git a/R/shiny-input_date_range.R b/R/shiny-input_date_range.R new file mode 100644 index 000000000..1da521952 --- /dev/null +++ b/R/shiny-input_date_range.R @@ -0,0 +1,65 @@ +#' @inherit shiny::dateRangeInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' +#' @family Shiny input aliases +#' @export +input_date_range <- function( + id, + label, + start = NULL, + end = NULL, + ..., + min = NULL, + max = NULL, + format = "yyyy-mm-dd", + startview = "month", + weekstart = 0, + language = "en", + separator = " to ", + width = NULL, + autoclose = TRUE +) { + shiny::dateRangeInput( + inputId = id, + label = label, + start = start, + end = end, + min = min, + max = max, + format = format, + startview = startview, + weekstart = weekstart, + language = language, + separator = separator, + width = width, + autoclose = autoclose + ) +} + +#' @inherit shiny::updateDateRangeInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_date_range <- function( + id, + ..., + label = NULL, + start = NULL, + end = NULL, + min = NULL, + max = NULL, + session = get_current_session() +) { + shiny::updateDateRangeInput( + session = session, + inputId = id, + label = label, + start = start, + end = end, + min = min, + max = max + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index d10337e35..0fcf3be8a 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -49,6 +49,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_link}()}, \code{\link{input_date}()}, +\code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 1b5eb1b3a..158ee4ef7 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -37,6 +37,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_date}()}, +\code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd new file mode 100644 index 000000000..883b63d00 --- /dev/null +++ b/man/input_date_range.Rd @@ -0,0 +1,108 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_date_range.R +\name{input_date_range} +\alias{input_date_range} +\title{Create date range input} +\usage{ +input_date_range( + id, + label, + start = NULL, + end = NULL, + ..., + min = NULL, + max = NULL, + format = "yyyy-mm-dd", + startview = "month", + weekstart = 0, + language = "en", + separator = " to ", + width = NULL, + autoclose = TRUE +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{start}{The initial start date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current +date in the client's time zone.} + +\item{end}{The initial end date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current +date in the client's time zone.} + +\item{...}{Named attributes to be applied to the button or link.} + +\item{min}{The minimum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{max}{The maximum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{format}{The format of the date to display in the browser. Defaults to +\code{"yyyy-mm-dd"}.} + +\item{startview}{The date range shown when the input object is first clicked. +Can be "month" (the default), "year", or "decade".} + +\item{weekstart}{Which day is the start of the week. Should be an integer +from 0 (Sunday) to 6 (Saturday).} + +\item{language}{The language used for month and day names. Default is "en". +Other valid values include "ar", "az", "bg", "bs", "ca", "cs", "cy", "da", +"de", "el", "en-AU", "en-GB", "eo", "es", "et", "eu", "fa", "fi", "fo", +"fr-CH", "fr", "gl", "he", "hr", "hu", "hy", "id", "is", "it-CH", "it", +"ja", "ka", "kh", "kk", "ko", "kr", "lt", "lv", "me", "mk", "mn", "ms", +"nb", "nl-BE", "nl", "no", "pl", "pt-BR", "pt", "ro", "rs-latin", "rs", +"ru", "sk", "sl", "sq", "sr-latin", "sr", "sv", "sw", "th", "tr", "uk", +"vi", "zh-CN", and "zh-TW".} + +\item{separator}{String to display between the start and end input boxes.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{autoclose}{Whether or not to close the datepicker immediately when a +date is selected.} +} +\description{ +Creates a pair of text inputs which, when clicked on, bring up calendars that +the user can click on to select dates. +} +\details{ +The date \code{format} string specifies how the date will be displayed in +the browser. It allows the following values: + +\itemize{ +\item \code{yy} Year without century (12) +\item \code{yyyy} Year with century (2012) +\item \code{mm} Month number, with leading zero (01-12) +\item \code{m} Month number, without leading zero (1-12) +\item \code{M} Abbreviated month name +\item \code{MM} Full month name +\item \code{dd} Day of month with leading zero +\item \code{d} Day of month without leading zero +\item \code{D} Abbreviated weekday name +\item \code{DD} Full weekday name +} +} +\section{Server value}{ + + +A \link{Date} vector of length 2. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_date}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} +} +\concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index dbabc73c3..1c2be60d1 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -81,6 +81,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_date}()}, +\code{\link{input_date_range}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} } diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 67f80cc40..aa06f70ed 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -57,6 +57,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_date}()}, +\code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_slider}()} } diff --git a/man/input_slider.Rd b/man/input_slider.Rd index e59c9998f..7436ba06a 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -102,6 +102,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_date}()}, +\code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()} } diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 64141d107..5600695af 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -52,6 +52,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_link}()}, \code{\link{update_date}()}, +\code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 3003b8953..c2ef06938 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -46,6 +46,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_date}()}, +\code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_date.Rd b/man/update_date.Rd index 6546782db..49d686f35 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -56,6 +56,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd new file mode 100644 index 000000000..1f8bf0c80 --- /dev/null +++ b/man/update_date_range.Rd @@ -0,0 +1,69 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_date_range.R +\name{update_date_range} +\alias{update_date_range} +\title{Change the start and end values of a date range input on the client} +\usage{ +update_date_range( + id, + ..., + label = NULL, + start = NULL, + end = NULL, + min = NULL, + max = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{start}{The initial start date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current +date in the client's time zone.} + +\item{end}{The initial end date. Either a Date object, or a string in +\code{yyyy-mm-dd} format. If NULL (the default), will use the current +date in the client's time zone.} + +\item{min}{The minimum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{max}{The maximum allowed date. Either a Date object, or a string in +\code{yyyy-mm-dd} format.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the start and end values of a date range input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_date}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} +} +\concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index 69d00c57c..0c88b0d01 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -57,6 +57,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_date}()}, +\code{\link{update_date_range}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} } diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index ac0f4a38e..12db3b2f8 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -69,6 +69,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_date}()}, +\code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_slider}()} } diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 45b10017f..299368c72 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -77,6 +77,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_date}()}, +\code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()} } From cdda09936d229527c6f79092cdb751b277b9b49a Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:49:42 -0400 Subject: [PATCH 08/24] feat: input_checkbox --- DESCRIPTION | 1 + NAMESPACE | 2 ++ R/shiny-input_checkbox.R | 42 ++++++++++++++++++++++++++++ man/input_action_button.Rd | 1 + man/input_action_link.Rd | 1 + man/input_checkbox.Rd | 44 +++++++++++++++++++++++++++++ man/input_date.Rd | 1 + man/input_date_range.Rd | 1 + man/input_select.Rd | 1 + man/input_selectize.Rd | 1 + man/input_slider.Rd | 1 + man/update_action_button.Rd | 1 + man/update_action_link.Rd | 1 + man/update_checkbox.Rd | 55 +++++++++++++++++++++++++++++++++++++ man/update_date.Rd | 1 + man/update_date_range.Rd | 1 + man/update_select.Rd | 1 + man/update_selectize.Rd | 1 + man/update_slider.Rd | 1 + 19 files changed, 158 insertions(+) create mode 100644 R/shiny-input_checkbox.R create mode 100644 man/input_checkbox.Rd create mode 100644 man/update_checkbox.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 0a9db5fc5..3cfb0b8d5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -149,6 +149,7 @@ Collate: 'shiny-devmode.R' 'shiny-input_action_button.R' 'shiny-input_action_link.R' + 'shiny-input_checkbox.R' 'shiny-input_date.R' 'shiny-input_date_range.R' 'shiny-input_select.R' diff --git a/NAMESPACE b/NAMESPACE index 5cc4bd8d3..72ed6c6be 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -81,6 +81,7 @@ export(font_google) export(font_link) export(input_action_button) export(input_action_link) +export(input_checkbox) export(input_dark_mode) export(input_date) export(input_date_range) @@ -153,6 +154,7 @@ export(toggle_tooltip) export(tooltip) export(update_action_button) export(update_action_link) +export(update_checkbox) export(update_date) export(update_date_range) export(update_popover) diff --git a/R/shiny-input_checkbox.R b/R/shiny-input_checkbox.R new file mode 100644 index 000000000..8b4a257ab --- /dev/null +++ b/R/shiny-input_checkbox.R @@ -0,0 +1,42 @@ +#' @inherit shiny::checkboxInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_checkbox <- function( + id, + label, + value = FALSE, + ..., + width = NULL +) { + shiny::checkboxInput( + inputId = id, + label = label, + value = value, + width = width + ) +} + +#' @inherit shiny::updateCheckboxInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_checkbox <- function( + id, + ..., + label = NULL, + value = NULL, + session = get_current_session() +) { + shiny::updateCheckboxInput( + session = session, + inputId = id, + label = label, + value = value + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 0fcf3be8a..b9ed8bc37 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -48,6 +48,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 158ee4ef7..93e3d4951 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -36,6 +36,7 @@ This implies two things: \seealso{ Other Shiny input aliases: \code{\link{input_action_button}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd new file mode 100644 index 000000000..acdf60539 --- /dev/null +++ b/man/input_checkbox.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_checkbox.R +\name{input_checkbox} +\alias{input_checkbox} +\title{Checkbox Input Control} +\usage{ +input_checkbox(id, label, value = FALSE, ..., width = NULL) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{Initial value (\code{TRUE} or \code{FALSE}).} + +\item{...}{Ignored, included for future expansion.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} +} +\value{ +A checkbox control that can be added to a UI definition. +} +\description{ +Create a checkbox that can be used to specify logical values. +} +\section{Server value}{ + + +\code{TRUE} if checked, \code{FALSE} otherwise. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} +} +\concept{Shiny input aliases} diff --git a/man/input_date.Rd b/man/input_date.Rd index f44d82fed..095d0bc63 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -100,6 +100,7 @@ A \link{Date} vector of length 1. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 883b63d00..75368ce9a 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -100,6 +100,7 @@ A \link{Date} vector of length 2. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, diff --git a/man/input_select.Rd b/man/input_select.Rd index 1c2be60d1..837631a98 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -80,6 +80,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_selectize}()}, diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index aa06f70ed..64956bc98 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -56,6 +56,7 @@ nothing is selected, this value will be \code{NULL}. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 7436ba06a..a2e0a5f19 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -101,6 +101,7 @@ in the case of slider range, a vector of two numbers/dates/date-times. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 5600695af..e8a86de29 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -51,6 +51,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index c2ef06938..918e95190 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -45,6 +45,7 @@ can be cleared by using \code{selected=character(0)}. \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd new file mode 100644 index 000000000..302295002 --- /dev/null +++ b/man/update_checkbox.Rd @@ -0,0 +1,55 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_checkbox.R +\name{update_checkbox} +\alias{update_checkbox} +\title{Change the value of a checkbox input on the client} +\usage{ +update_checkbox( + id, + ..., + label = NULL, + value = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{Initial value (\code{TRUE} or \code{FALSE}).} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a checkbox input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} +} +\concept{Shiny update aliases} diff --git a/man/update_date.Rd b/man/update_date.Rd index 49d686f35..42fa426c4 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -56,6 +56,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 1f8bf0c80..347f877c1 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -61,6 +61,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, diff --git a/man/update_select.Rd b/man/update_select.Rd index 0c88b0d01..8ef5ded99 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -56,6 +56,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_selectize}()}, diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 12db3b2f8..dfc640bb9 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -68,6 +68,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 299368c72..17bd77feb 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -76,6 +76,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, From fb2bc937bdfbf15ee44710894e3d8b448a1b45a7 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:51:55 -0400 Subject: [PATCH 09/24] feat: input_checkbox_group --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_checkbox_group.R | 58 +++++++++++++++++++++++++ man/input_action_button.Rd | 1 + man/input_action_link.Rd | 1 + man/input_checkbox.Rd | 1 + man/input_checkbox_group.Rd | 75 ++++++++++++++++++++++++++++++++ man/input_date.Rd | 1 + man/input_date_range.Rd | 1 + man/input_select.Rd | 1 + man/input_selectize.Rd | 1 + man/input_slider.Rd | 1 + man/update_action_button.Rd | 1 + man/update_action_link.Rd | 1 + man/update_checkbox.Rd | 1 + man/update_checkbox_group.Rd | 78 ++++++++++++++++++++++++++++++++++ man/update_date.Rd | 1 + man/update_date_range.Rd | 1 + man/update_select.Rd | 1 + man/update_selectize.Rd | 1 + man/update_slider.Rd | 1 + 21 files changed, 230 insertions(+) create mode 100644 R/shiny-input_checkbox_group.R create mode 100644 man/input_checkbox_group.Rd create mode 100644 man/update_checkbox_group.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 3cfb0b8d5..c8baa435c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -150,6 +150,7 @@ Collate: 'shiny-input_action_button.R' 'shiny-input_action_link.R' 'shiny-input_checkbox.R' + 'shiny-input_checkbox_group.R' 'shiny-input_date.R' 'shiny-input_date_range.R' 'shiny-input_select.R' diff --git a/NAMESPACE b/NAMESPACE index 72ed6c6be..3f6c13b9b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -82,6 +82,7 @@ export(font_link) export(input_action_button) export(input_action_link) export(input_checkbox) +export(input_checkbox_group) export(input_dark_mode) export(input_date) export(input_date_range) @@ -155,6 +156,7 @@ export(tooltip) export(update_action_button) export(update_action_link) export(update_checkbox) +export(update_checkbox_group) export(update_date) export(update_date_range) export(update_popover) diff --git a/R/shiny-input_checkbox_group.R b/R/shiny-input_checkbox_group.R new file mode 100644 index 000000000..63b5f4071 --- /dev/null +++ b/R/shiny-input_checkbox_group.R @@ -0,0 +1,58 @@ +#' @inherit shiny::checkboxGroupInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_checkbox_group <- function( + id, + label, + choices = NULL, + selected = NULL, + ..., + inline = FALSE, + width = NULL, + choiceNames = NULL, + choiceValues = NULL +) { + shiny::checkboxGroupInput( + inputId = id, + label = label, + choices = choices, + selected = selected, + inline = inline, + width = width, + choiceNames = choiceNames, + choiceValues = choiceValues + ) +} + +#' @inherit shiny::updateCheckboxGroupInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_checkbox_group <- function( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + inline = FALSE, + choiceNames = NULL, + choiceValues = NULL, + session = get_current_session() +) { + shiny::updateCheckboxGroupInput( + session = session, + inputId = id, + label = label, + choices = choices, + selected = selected, + inline = inline, + choiceNames = choiceNames, + choiceValues = choiceValues + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index b9ed8bc37..bdaae2095 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -49,6 +49,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 93e3d4951..97a6c1e82 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -37,6 +37,7 @@ This implies two things: Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index acdf60539..30b09a652 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -35,6 +35,7 @@ Create a checkbox that can be used to specify logical values. Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd new file mode 100644 index 000000000..3e2f8e5e1 --- /dev/null +++ b/man/input_checkbox_group.Rd @@ -0,0 +1,75 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_checkbox_group.R +\name{input_checkbox_group} +\alias{input_checkbox_group} +\title{Checkbox Group Input Control} +\usage{ +input_checkbox_group( + id, + label, + choices = NULL, + selected = NULL, + ..., + inline = FALSE, + width = NULL, + choiceNames = NULL, + choiceValues = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{choices}{List of values to show checkboxes for. If elements of the list +are named then that name rather than the value is displayed to the user. If +this argument is provided, then \code{choiceNames} and \code{choiceValues} +must not be provided, and vice-versa. The values should be strings; other +types (such as logicals and numbers) will be coerced to strings.} + +\item{selected}{The values that should be initially selected, if any.} + +\item{...}{Ignored, included for future expansion.} + +\item{inline}{If \code{TRUE}, render the choices inline (i.e. horizontally)} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{choiceNames, choiceValues}{List of names and values, respectively, +that are displayed to the user in the app and correspond to the each +choice (for this reason, \code{choiceNames} and \code{choiceValues} +must have the same length). If either of these arguments is +provided, then the other \emph{must} be provided and \code{choices} +\emph{must not} be provided. The advantage of using both of these over +a named list for \code{choices} is that \code{choiceNames} allows any +type of UI object to be passed through (tag objects, icons, HTML code, +...), instead of just simple text. See Examples.} +} +\value{ +A list of HTML elements that can be added to a UI definition. +} +\description{ +Create a group of checkboxes that can be used to toggle multiple choices +independently. The server will receive the input as a character vector of the +selected values. +} +\section{Server value}{ + + +Character vector of values corresponding to the boxes that are checked. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} +} +\concept{Shiny input aliases} diff --git a/man/input_date.Rd b/man/input_date.Rd index 095d0bc63..5a4622d4e 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -101,6 +101,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 75368ce9a..d105b2872 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -101,6 +101,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, diff --git a/man/input_select.Rd b/man/input_select.Rd index 837631a98..c8a1b658e 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -81,6 +81,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_selectize}()}, diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 64956bc98..e04486b8b 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -57,6 +57,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/input_slider.Rd b/man/input_slider.Rd index a2e0a5f19..418b7ae86 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -102,6 +102,7 @@ Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, \code{\link{input_select}()}, diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index e8a86de29..69996f71f 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -52,6 +52,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 918e95190..105c357aa 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -46,6 +46,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index 302295002..0d6ceb55e 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -46,6 +46,7 @@ can be cleared by using \code{selected=character(0)}. Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd new file mode 100644 index 000000000..4410c4a93 --- /dev/null +++ b/man/update_checkbox_group.Rd @@ -0,0 +1,78 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_checkbox_group.R +\name{update_checkbox_group} +\alias{update_checkbox_group} +\title{Change the value of a checkbox group input on the client} +\usage{ +update_checkbox_group( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + inline = FALSE, + choiceNames = NULL, + choiceValues = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{choices}{List of values to show checkboxes for. If elements of the list +are named then that name rather than the value is displayed to the user. If +this argument is provided, then \code{choiceNames} and \code{choiceValues} +must not be provided, and vice-versa. The values should be strings; other +types (such as logicals and numbers) will be coerced to strings.} + +\item{selected}{The values that should be initially selected, if any.} + +\item{inline}{If \code{TRUE}, render the choices inline (i.e. horizontally)} + +\item{choiceNames, choiceValues}{List of names and values, respectively, +that are displayed to the user in the app and correspond to the each +choice (for this reason, \code{choiceNames} and \code{choiceValues} +must have the same length). If either of these arguments is +provided, then the other \emph{must} be provided and \code{choices} +\emph{must not} be provided. The advantage of using both of these over +a named list for \code{choices} is that \code{choiceNames} allows any +type of UI object to be passed through (tag objects, icons, HTML code, +...), instead of just simple text. See Examples.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a checkbox group input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} +} +\concept{Shiny update aliases} diff --git a/man/update_date.Rd b/man/update_date.Rd index 42fa426c4..9e2d4b278 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -57,6 +57,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 347f877c1..5196c614d 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -62,6 +62,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, diff --git a/man/update_select.Rd b/man/update_select.Rd index 8ef5ded99..a61523929 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -57,6 +57,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_selectize}()}, diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index dfc640bb9..5e915f9de 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -69,6 +69,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 17bd77feb..24619ab19 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -77,6 +77,7 @@ Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, \code{\link{update_select}()}, From d43a463fc132dea750f5b440c809c173f54f095a Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:54:30 -0400 Subject: [PATCH 10/24] feat: input_radio_buttons --- DESCRIPTION | 1 + NAMESPACE | 2 + R/shiny-input_radio_buttons.R | 58 +++++++++++++++++++++++++ man/input_action_button.Rd | 1 + man/input_action_link.Rd | 1 + man/input_checkbox.Rd | 1 + man/input_checkbox_group.Rd | 1 + man/input_date.Rd | 1 + man/input_date_range.Rd | 1 + man/input_radio_buttons.Rd | 82 +++++++++++++++++++++++++++++++++++ man/input_select.Rd | 1 + man/input_selectize.Rd | 1 + man/input_slider.Rd | 1 + man/update_action_button.Rd | 1 + man/update_action_link.Rd | 1 + man/update_checkbox.Rd | 1 + man/update_checkbox_group.Rd | 1 + man/update_date.Rd | 1 + man/update_date_range.Rd | 1 + man/update_radio_buttons.Rd | 80 ++++++++++++++++++++++++++++++++++ man/update_select.Rd | 1 + man/update_selectize.Rd | 1 + man/update_slider.Rd | 1 + 23 files changed, 241 insertions(+) create mode 100644 R/shiny-input_radio_buttons.R create mode 100644 man/input_radio_buttons.Rd create mode 100644 man/update_radio_buttons.Rd diff --git a/DESCRIPTION b/DESCRIPTION index c8baa435c..9f16cf8f4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -153,6 +153,7 @@ Collate: 'shiny-input_checkbox_group.R' 'shiny-input_date.R' 'shiny-input_date_range.R' + 'shiny-input_radio_buttons.R' 'shiny-input_select.R' 'shiny-input_selectize.R' 'shiny-input_slider.R' diff --git a/NAMESPACE b/NAMESPACE index 3f6c13b9b..615dae680 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -86,6 +86,7 @@ export(input_checkbox_group) export(input_dark_mode) export(input_date) export(input_date_range) +export(input_radio_buttons) export(input_select) export(input_selectize) export(input_slider) @@ -160,6 +161,7 @@ export(update_checkbox_group) export(update_date) export(update_date_range) export(update_popover) +export(update_radio_buttons) export(update_select) export(update_selectize) export(update_slider) diff --git a/R/shiny-input_radio_buttons.R b/R/shiny-input_radio_buttons.R new file mode 100644 index 000000000..91e0d6a88 --- /dev/null +++ b/R/shiny-input_radio_buttons.R @@ -0,0 +1,58 @@ +#' @inherit shiny::radioButtons params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_radio_buttons <- function( + id, + label, + choices = NULL, + selected = NULL, + ..., + inline = FALSE, + width = NULL, + choiceNames = NULL, + choiceValues = NULL +) { + shiny::radioButtons( + inputId = id, + label = label, + choices = choices, + selected = selected, + inline = inline, + width = width, + choiceNames = choiceNames, + choiceValues = choiceValues + ) +} + +#' @inherit shiny::updateRadioButtons params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_radio_buttons <- function( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + inline = FALSE, + choiceNames = NULL, + choiceValues = NULL, + session = get_current_session() +) { + shiny::updateRadioButtons( + session = session, + inputId = id, + label = label, + choices = choices, + selected = selected, + inline = inline, + choiceNames = choiceNames, + choiceValues = choiceValues + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index bdaae2095..2b77752ca 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -52,6 +52,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 97a6c1e82..e63855825 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -40,6 +40,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index 30b09a652..7b246c4a4 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -38,6 +38,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd index 3e2f8e5e1..063b889e2 100644 --- a/man/input_checkbox_group.Rd +++ b/man/input_checkbox_group.Rd @@ -68,6 +68,7 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_date.Rd b/man/input_date.Rd index 5a4622d4e..e6cf24f63 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -103,6 +103,7 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_checkbox_group}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index d105b2872..21ac5e8b7 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -103,6 +103,7 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd new file mode 100644 index 000000000..03094f7e8 --- /dev/null +++ b/man/input_radio_buttons.Rd @@ -0,0 +1,82 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_radio_buttons.R +\name{input_radio_buttons} +\alias{input_radio_buttons} +\title{Create radio buttons} +\usage{ +input_radio_buttons( + id, + label, + choices = NULL, + selected = NULL, + ..., + inline = FALSE, + width = NULL, + choiceNames = NULL, + choiceValues = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{choices}{List of values to select from (if elements of the list are +named then that name rather than the value is displayed to the user). If +this argument is provided, then \code{choiceNames} and \code{choiceValues} must not +be provided, and vice-versa. The values should be strings; other types +(such as logicals and numbers) will be coerced to strings.} + +\item{selected}{The initially selected value. If not specified, then it +defaults to the first item in \code{choices}. To start with no items selected, +use \code{character(0)}.} + +\item{...}{Ignored, included for future expansion.} + +\item{inline}{If \code{TRUE}, render the choices inline (i.e. horizontally)} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{choiceNames, choiceValues}{List of names and values, respectively, that +are displayed to the user in the app and correspond to the each choice (for +this reason, \code{choiceNames} and \code{choiceValues} must have the same length). +If either of these arguments is provided, then the other \emph{must} be provided +and \code{choices} \emph{must not} be provided. The advantage of using both of these +over a named list for \code{choices} is that \code{choiceNames} allows any type of UI +object to be passed through (tag objects, icons, HTML code, ...), instead +of just simple text. See Examples.} +} +\value{ +A set of radio buttons that can be added to a UI definition. +} +\description{ +Create a set of radio buttons used to select an item from a list. +} +\details{ +If you need to represent a "None selected" state, it's possible to default +the radio buttons to have no options selected by using \code{selected = character(0)}. However, this is not recommended, as it gives the user no way +to return to that state once they've made a selection. Instead, consider +having the first of your choices be \code{c("None selected" = "")}. +} +\section{Server value}{ + + + +A character string containing the value of the selected button. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()} +} +\concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index c8a1b658e..678af3779 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -84,6 +84,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_selectize}()}, \code{\link{input_slider}()} } diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index e04486b8b..25f602e55 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -60,6 +60,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_slider}()} } diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 418b7ae86..94d3761d7 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -105,6 +105,7 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()} } diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 69996f71f..9c692e99f 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -55,6 +55,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 105c357aa..662c55250 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -49,6 +49,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index 0d6ceb55e..f1ffd87e9 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -49,6 +49,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index 4410c4a93..c97d0e259 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -71,6 +71,7 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_date.Rd b/man/update_date.Rd index 9e2d4b278..4d19ff53a 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -59,6 +59,7 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_checkbox_group}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 5196c614d..37bd37f7d 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -64,6 +64,7 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd new file mode 100644 index 000000000..e6350aef4 --- /dev/null +++ b/man/update_radio_buttons.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_radio_buttons.R +\name{update_radio_buttons} +\alias{update_radio_buttons} +\title{Change the value of a radio input on the client} +\usage{ +update_radio_buttons( + id, + ..., + label = NULL, + choices = NULL, + selected = NULL, + inline = FALSE, + choiceNames = NULL, + choiceValues = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{choices}{List of values to select from (if elements of the list are +named then that name rather than the value is displayed to the user). If +this argument is provided, then \code{choiceNames} and \code{choiceValues} must not +be provided, and vice-versa. The values should be strings; other types +(such as logicals and numbers) will be coerced to strings.} + +\item{selected}{The initially selected value. If not specified, then it +defaults to the first item in \code{choices}. To start with no items selected, +use \code{character(0)}.} + +\item{inline}{If \code{TRUE}, render the choices inline (i.e. horizontally)} + +\item{choiceNames, choiceValues}{List of names and values, respectively, that +are displayed to the user in the app and correspond to the each choice (for +this reason, \code{choiceNames} and \code{choiceValues} must have the same length). +If either of these arguments is provided, then the other \emph{must} be provided +and \code{choices} \emph{must not} be provided. The advantage of using both of these +over a named list for \code{choices} is that \code{choiceNames} allows any type of UI +object to be passed through (tag objects, icons, HTML code, ...), instead +of just simple text. See Examples.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a radio input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()} +} +\concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index a61523929..dd7a29736 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -60,6 +60,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_selectize}()}, \code{\link{update_slider}()} } diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 5e915f9de..2a1a07115 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -72,6 +72,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_slider}()} } diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 24619ab19..3f5931262 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -80,6 +80,7 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()} } From b41a7e2b523e81e9f36ba8823cdb45c340e369b6 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 12:57:42 -0400 Subject: [PATCH 11/24] feat: input_numeric, input_text, input_text_area, input_password --- DESCRIPTION | 4 ++ NAMESPACE | 7 +++ R/shiny-input_numeric.R | 54 +++++++++++++++++++++++ R/shiny-input_password.R | 23 ++++++++++ R/shiny-input_text.R | 46 ++++++++++++++++++++ R/shiny-input_text_area.R | 54 +++++++++++++++++++++++ man/input_action_button.Rd | 6 ++- man/input_action_link.Rd | 6 ++- man/input_checkbox.Rd | 6 ++- man/input_checkbox_group.Rd | 6 ++- man/input_date.Rd | 6 ++- man/input_date_range.Rd | 6 ++- man/input_numeric.Rd | 65 ++++++++++++++++++++++++++++ man/input_password.Rd | 55 ++++++++++++++++++++++++ man/input_radio_buttons.Rd | 6 ++- man/input_select.Rd | 6 ++- man/input_selectize.Rd | 6 ++- man/input_slider.Rd | 6 ++- man/input_text.Rd | 55 ++++++++++++++++++++++++ man/input_text_area.Rd | 83 ++++++++++++++++++++++++++++++++++++ man/update_action_button.Rd | 5 ++- man/update_action_link.Rd | 5 ++- man/update_checkbox.Rd | 5 ++- man/update_checkbox_group.Rd | 5 ++- man/update_date.Rd | 5 ++- man/update_date_range.Rd | 5 ++- man/update_numeric.Rd | 69 ++++++++++++++++++++++++++++++ man/update_radio_buttons.Rd | 5 ++- man/update_select.Rd | 5 ++- man/update_selectize.Rd | 5 ++- man/update_slider.Rd | 5 ++- man/update_text.Rd | 65 ++++++++++++++++++++++++++++ man/update_text_area.Rd | 65 ++++++++++++++++++++++++++++ 33 files changed, 735 insertions(+), 20 deletions(-) create mode 100644 R/shiny-input_numeric.R create mode 100644 R/shiny-input_password.R create mode 100644 R/shiny-input_text.R create mode 100644 R/shiny-input_text_area.R create mode 100644 man/input_numeric.Rd create mode 100644 man/input_password.Rd create mode 100644 man/input_text.Rd create mode 100644 man/input_text_area.Rd create mode 100644 man/update_numeric.Rd create mode 100644 man/update_text.Rd create mode 100644 man/update_text_area.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 9f16cf8f4..50a02edcd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -153,10 +153,14 @@ Collate: 'shiny-input_checkbox_group.R' 'shiny-input_date.R' 'shiny-input_date_range.R' + 'shiny-input_numeric.R' + 'shiny-input_password.R' 'shiny-input_radio_buttons.R' 'shiny-input_select.R' 'shiny-input_selectize.R' 'shiny-input_slider.R' + 'shiny-input_text.R' + 'shiny-input_text_area.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index 615dae680..da10a79b6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -86,12 +86,16 @@ export(input_checkbox_group) export(input_dark_mode) export(input_date) export(input_date_range) +export(input_numeric) +export(input_password) export(input_radio_buttons) export(input_select) export(input_selectize) export(input_slider) export(input_switch) export(input_task_button) +export(input_text) +export(input_text_area) export(is.card_item) export(is_bs_theme) export(is_fill_carrier) @@ -160,6 +164,7 @@ export(update_checkbox) export(update_checkbox_group) export(update_date) export(update_date_range) +export(update_numeric) export(update_popover) export(update_radio_buttons) export(update_select) @@ -167,6 +172,8 @@ export(update_selectize) export(update_slider) export(update_switch) export(update_task_button) +export(update_text) +export(update_text_area) export(update_tooltip) export(value_box) export(value_box_theme) diff --git a/R/shiny-input_numeric.R b/R/shiny-input_numeric.R new file mode 100644 index 000000000..f415fea66 --- /dev/null +++ b/R/shiny-input_numeric.R @@ -0,0 +1,54 @@ +#' @inherit shiny::numericInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_numeric <- function( + id, + label, + value, + ..., + min = NA, + max = NA, + step = NA, + width = NULL +) { + shiny::numericInput( + inputId = id, + label = label, + value = value, + min = min, + max = max, + step = step, + width = width + ) +} + +#' @inherit shiny::updateNumericInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_numeric <- function( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + step = NULL, + session = get_current_session() +) { + shiny::updateNumericInput( + session = session, + inputId = id, + label = label, + value = value, + min = min, + max = max, + step = step + ) +} diff --git a/R/shiny-input_password.R b/R/shiny-input_password.R new file mode 100644 index 000000000..d3693e97a --- /dev/null +++ b/R/shiny-input_password.R @@ -0,0 +1,23 @@ +#' @inherit shiny::passwordInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_password <- function( + id, + label, + value = "", + ..., + width = NULL, + placeholder = NULL +) { + shiny::passwordInput( + inputId = id, + label = label, + value = value, + width = width, + placeholder = placeholder + ) +} diff --git a/R/shiny-input_text.R b/R/shiny-input_text.R new file mode 100644 index 000000000..5c18eab96 --- /dev/null +++ b/R/shiny-input_text.R @@ -0,0 +1,46 @@ +#' @inherit shiny::textInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_text <- function( + id, + label, + value = "", + ..., + width = NULL, + placeholder = NULL +) { + shiny::textInput( + inputId = id, + label = label, + value = value, + width = width, + placeholder = placeholder + ) +} + +#' @inherit shiny::updateTextInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_text <- function( + id, + ..., + label = NULL, + value = NULL, + placeholder = NULL, + session = get_current_session() +) { + shiny::updateTextInput( + session = session, + inputId = id, + label = label, + value = value, + placeholder = placeholder + ) +} diff --git a/R/shiny-input_text_area.R b/R/shiny-input_text_area.R new file mode 100644 index 000000000..2b1874e48 --- /dev/null +++ b/R/shiny-input_text_area.R @@ -0,0 +1,54 @@ +#' @inherit shiny::textAreaInput params return title description details sections references +#' +#' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny input aliases +#' @export +input_text_area <- function( + id, + label, + value = "", + ..., + width = NULL, + height = NULL, + cols = NULL, + rows = NULL, + placeholder = NULL, + resize = NULL +) { + shiny::textAreaInput( + inputId = id, + label = label, + value = value, + width = width, + height = height, + cols = cols, + rows = rows, + placeholder = placeholder, + resize = resize + ) +} + +#' @inherit shiny::updateTextAreaInput params return title description details sections references +#' +#' @param ... Ignored, included for future expansion. +#' +#' @family Shiny update aliases +#' @export +update_text_area <- function( + id, + ..., + label = NULL, + value = NULL, + placeholder = NULL, + session = get_current_session() +) { + shiny::updateTextAreaInput( + session = session, + inputId = id, + label = label, + value = value, + placeholder = placeholder + ) +} diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 2b77752ca..b4b85079a 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -52,9 +52,13 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index e63855825..ec4451186 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -40,9 +40,13 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index 7b246c4a4..cb09e680e 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -38,9 +38,13 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd index 063b889e2..3ca74f4c7 100644 --- a/man/input_checkbox_group.Rd +++ b/man/input_checkbox_group.Rd @@ -68,9 +68,13 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_date.Rd b/man/input_date.Rd index e6cf24f63..6d72ec4fe 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -103,9 +103,13 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_checkbox_group}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 21ac5e8b7..94389ab49 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -103,9 +103,13 @@ Other Shiny input aliases: \code{\link{input_checkbox}()}, \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd new file mode 100644 index 000000000..82fa6f9bd --- /dev/null +++ b/man/input_numeric.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_numeric.R +\name{input_numeric} +\alias{input_numeric} +\title{Create a numeric input control} +\usage{ +input_numeric( + id, + label, + value, + ..., + min = NA, + max = NA, + step = NA, + width = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{Initial value.} + +\item{...}{Ignored, included for future expansion.} + +\item{min}{Minimum allowed value} + +\item{max}{Maximum allowed value} + +\item{step}{Interval to use when stepping between min and max} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} +} +\value{ +A numeric input control that can be added to a UI definition. +} +\description{ +Create an input control for entry of numeric values +} +\section{Server value}{ + + +A numeric vector of length 1. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_password}()}, +\code{\link{input_radio_buttons}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} +} +\concept{Shiny input aliases} diff --git a/man/input_password.Rd b/man/input_password.Rd new file mode 100644 index 000000000..78bdc182c --- /dev/null +++ b/man/input_password.Rd @@ -0,0 +1,55 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_password.R +\name{input_password} +\alias{input_password} +\title{Create a password input control} +\usage{ +input_password(id, label, value = "", ..., width = NULL, placeholder = NULL) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{Initial value.} + +\item{...}{Ignored, included for future expansion.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{placeholder}{A character string giving the user a hint as to what can +be entered into the control. Internet Explorer 8 and 9 do not support this +option.} +} +\value{ +A text input control that can be added to a UI definition. +} +\description{ +Create an password control for entry of passwords. +} +\section{Server value}{ + + +A character string of the password input. The default value is \code{""} +unless \code{value} is provided. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_radio_buttons}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} +} +\concept{Shiny input aliases} diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd index 03094f7e8..76f386385 100644 --- a/man/input_radio_buttons.Rd +++ b/man/input_radio_buttons.Rd @@ -75,8 +75,12 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_select}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_select.Rd b/man/input_select.Rd index 678af3779..0fa0b1d7b 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -84,8 +84,12 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_selectize}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 25f602e55..83a1b8a19 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -60,8 +60,12 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, -\code{\link{input_slider}()} +\code{\link{input_slider}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 94d3761d7..dac0af4cf 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -105,8 +105,12 @@ Other Shiny input aliases: \code{\link{input_checkbox_group}()}, \code{\link{input_date}()}, \code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, \code{\link{input_radio_buttons}()}, \code{\link{input_select}()}, -\code{\link{input_selectize}()} +\code{\link{input_selectize}()}, +\code{\link{input_text}()}, +\code{\link{input_text_area}()} } \concept{Shiny input aliases} diff --git a/man/input_text.Rd b/man/input_text.Rd new file mode 100644 index 000000000..3bffa01ba --- /dev/null +++ b/man/input_text.Rd @@ -0,0 +1,55 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_text.R +\name{input_text} +\alias{input_text} +\title{Create a text input control} +\usage{ +input_text(id, label, value = "", ..., width = NULL, placeholder = NULL) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{Initial value.} + +\item{...}{Ignored, included for future expansion.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{placeholder}{A character string giving the user a hint as to what can +be entered into the control. Internet Explorer 8 and 9 do not support this +option.} +} +\value{ +A text input control that can be added to a UI definition. +} +\description{ +Create an input control for entry of unstructured text values +} +\section{Server value}{ + + +A character string of the text input. The default value is \code{""} +unless \code{value} is provided. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, +\code{\link{input_radio_buttons}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()}, +\code{\link{input_text_area}()} +} +\concept{Shiny input aliases} diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd new file mode 100644 index 000000000..f3dfbacf7 --- /dev/null +++ b/man/input_text_area.Rd @@ -0,0 +1,83 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_text_area.R +\name{input_text_area} +\alias{input_text_area} +\title{Create a textarea input control} +\usage{ +input_text_area( + id, + label, + value = "", + ..., + width = NULL, + height = NULL, + cols = NULL, + rows = NULL, + placeholder = NULL, + resize = NULL +) +} +\arguments{ +\item{id}{An input id.} + +\item{label}{Display label for the control, or \code{NULL} for no label.} + +\item{value}{Initial value.} + +\item{...}{Ignored, included for future expansion.} + +\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'}; +see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{height}{The height of the input, e.g. \code{'400px'}, or \code{'100\%'}; see +\code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} + +\item{cols}{Value of the visible character columns of the input, e.g. \code{80}. +This argument will only take effect if there is not a CSS \code{width} rule +defined for this element; such a rule could come from the \code{width} argument +of this function or from a containing page layout such as +\code{\link[shiny:fluidPage]{fluidPage()}}.} + +\item{rows}{The value of the visible character rows of the input, e.g. \code{6}. +If the \code{height} argument is specified, \code{height} will take precedence in the +browser's rendering.} + +\item{placeholder}{A character string giving the user a hint as to what can +be entered into the control. Internet Explorer 8 and 9 do not support this +option.} + +\item{resize}{Which directions the textarea box can be resized. Can be one of +\code{"both"}, \code{"none"}, \code{"vertical"}, and \code{"horizontal"}. The default, \code{NULL}, +will use the client browser's default setting for resizing textareas.} +} +\value{ +A textarea input control that can be added to a UI definition. +} +\description{ +Create a textarea input control for entry of unstructured text values. +} +\section{Server value}{ + + +A character string of the text input. The default value is \code{""} +unless \code{value} is provided. + +} + +\seealso{ +Other Shiny input aliases: +\code{\link{input_action_button}()}, +\code{\link{input_action_link}()}, +\code{\link{input_checkbox}()}, +\code{\link{input_checkbox_group}()}, +\code{\link{input_date}()}, +\code{\link{input_date_range}()}, +\code{\link{input_numeric}()}, +\code{\link{input_password}()}, +\code{\link{input_radio_buttons}()}, +\code{\link{input_select}()}, +\code{\link{input_selectize}()}, +\code{\link{input_slider}()}, +\code{\link{input_text}()} +} +\concept{Shiny input aliases} diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 9c692e99f..9e88f3b5f 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -55,9 +55,12 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 662c55250..c52690c5c 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -49,9 +49,12 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index f1ffd87e9..4921ffa32 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -49,9 +49,12 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index c97d0e259..b3474e544 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -71,9 +71,12 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_date.Rd b/man/update_date.Rd index 4d19ff53a..d9d20c611 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -59,9 +59,12 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_checkbox_group}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 37bd37f7d..eb3209a0a 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -64,9 +64,12 @@ Other Shiny update aliases: \code{\link{update_checkbox}()}, \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd new file mode 100644 index 000000000..bd27b379a --- /dev/null +++ b/man/update_numeric.Rd @@ -0,0 +1,69 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_numeric.R +\name{update_numeric} +\alias{update_numeric} +\title{Change the value of a number input on the client} +\usage{ +update_numeric( + id, + ..., + label = NULL, + value = NULL, + min = NULL, + max = NULL, + step = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{Initial value.} + +\item{min}{Minimum allowed value} + +\item{max}{Maximum allowed value} + +\item{step}{Interval to use when stepping between min and max} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a number input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_radio_buttons}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} +} +\concept{Shiny update aliases} diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd index e6350aef4..e981503d9 100644 --- a/man/update_radio_buttons.Rd +++ b/man/update_radio_buttons.Rd @@ -73,8 +73,11 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_select}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_select.Rd b/man/update_select.Rd index dd7a29736..17b5b2953 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -60,8 +60,11 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_selectize}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 2a1a07115..6c8db9439 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -72,8 +72,11 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, -\code{\link{update_slider}()} +\code{\link{update_slider}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 3f5931262..a6da952f6 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -80,8 +80,11 @@ Other Shiny update aliases: \code{\link{update_checkbox_group}()}, \code{\link{update_date}()}, \code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, \code{\link{update_radio_buttons}()}, \code{\link{update_select}()}, -\code{\link{update_selectize}()} +\code{\link{update_selectize}()}, +\code{\link{update_text}()}, +\code{\link{update_text_area}()} } \concept{Shiny update aliases} diff --git a/man/update_text.Rd b/man/update_text.Rd new file mode 100644 index 000000000..eccfacb14 --- /dev/null +++ b/man/update_text.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_text.R +\name{update_text} +\alias{update_text} +\title{Change the value of a text input on the client} +\usage{ +update_text( + id, + ..., + label = NULL, + value = NULL, + placeholder = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{Initial value.} + +\item{placeholder}{A character string giving the user a hint as to what can +be entered into the control. Internet Explorer 8 and 9 do not support this +option.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a text input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, +\code{\link{update_radio_buttons}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()}, +\code{\link{update_text_area}()} +} +\concept{Shiny update aliases} diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd new file mode 100644 index 000000000..5f8999071 --- /dev/null +++ b/man/update_text_area.Rd @@ -0,0 +1,65 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-input_text_area.R +\name{update_text_area} +\alias{update_text_area} +\title{Change the value of a textarea input on the client} +\usage{ +update_text_area( + id, + ..., + label = NULL, + value = NULL, + placeholder = NULL, + session = get_current_session() +) +} +\arguments{ +\item{...}{Ignored, included for future expansion.} + +\item{label}{The label to set for the input object.} + +\item{value}{Initial value.} + +\item{placeholder}{A character string giving the user a hint as to what can +be entered into the control. Internet Explorer 8 and 9 do not support this +option.} + +\item{session}{The \code{session} object passed to function given to +\code{shinyServer}. Default is \code{getDefaultReactiveDomain()}.} +} +\description{ +Change the value of a textarea input on the client +} +\details{ +The input updater functions send a message to the client, telling it to +change the settings of an input object. The messages are collected and sent +after all the observers (including outputs) have finished running. + +The syntax of these functions is similar to the functions that created the +inputs in the first place. For example, \code{\link[shiny]{numericInput}()} and +\code{updateNumericInput()} take a similar set of arguments. + +Any arguments with NULL values will be ignored; they will not result in any +changes to the input object on the client. + +For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}()} and +\code{\link[shiny]{selectInput}()}, the set of choices can be cleared by using +\code{choices=character(0)}. Similarly, for these inputs, the selected item +can be cleared by using \code{selected=character(0)}. +} +\seealso{ +Other Shiny update aliases: +\code{\link{update_action_button}()}, +\code{\link{update_action_link}()}, +\code{\link{update_checkbox}()}, +\code{\link{update_checkbox_group}()}, +\code{\link{update_date}()}, +\code{\link{update_date_range}()}, +\code{\link{update_numeric}()}, +\code{\link{update_radio_buttons}()}, +\code{\link{update_select}()}, +\code{\link{update_selectize}()}, +\code{\link{update_slider}()}, +\code{\link{update_text}()} +} +\concept{Shiny update aliases} From 97d2d4bbd3c86a8ce397607d17844f984da7385e Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 13:11:42 -0400 Subject: [PATCH 12/24] docs: improve param inheriting in update functions --- R/shiny-input_action_button.R | 1 + R/shiny-input_action_link.R | 1 + R/shiny-input_checkbox.R | 1 + R/shiny-input_checkbox_group.R | 1 + R/shiny-input_date.R | 1 + R/shiny-input_date_range.R | 1 + R/shiny-input_numeric.R | 1 + R/shiny-input_radio_buttons.R | 1 + R/shiny-input_select.R | 1 + R/shiny-input_selectize.R | 1 + R/shiny-input_slider.R | 1 + R/shiny-input_text.R | 1 + R/shiny-input_text_area.R | 1 + man/update_action_link.Rd | 2 ++ man/update_checkbox.Rd | 2 ++ man/update_checkbox_group.Rd | 2 ++ man/update_date.Rd | 2 ++ man/update_date_range.Rd | 2 ++ man/update_numeric.Rd | 2 ++ man/update_radio_buttons.Rd | 2 ++ man/update_select.Rd | 2 ++ man/update_selectize.Rd | 2 ++ man/update_slider.Rd | 2 ++ man/update_text.Rd | 2 ++ man/update_text_area.Rd | 2 ++ 25 files changed, 37 insertions(+) diff --git a/R/shiny-input_action_button.R b/R/shiny-input_action_button.R index efdcf79b8..eb9999104 100644 --- a/R/shiny-input_action_button.R +++ b/R/shiny-input_action_button.R @@ -25,6 +25,7 @@ input_action_button <- function( #' @inherit shiny::updateActionButton params return title description details sections references #' @inheritParams input_action_button #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R index 9a4720b66..9eb3b5825 100644 --- a/R/shiny-input_action_link.R +++ b/R/shiny-input_action_link.R @@ -18,6 +18,7 @@ input_action_link <- function( } #' @inherit shiny::updateActionLink params return title description details sections references +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_checkbox.R b/R/shiny-input_checkbox.R index 8b4a257ab..ddd082d80 100644 --- a/R/shiny-input_checkbox.R +++ b/R/shiny-input_checkbox.R @@ -22,6 +22,7 @@ input_checkbox <- function( #' @inherit shiny::updateCheckboxInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_checkbox_group.R b/R/shiny-input_checkbox_group.R index 63b5f4071..1e5a53d18 100644 --- a/R/shiny-input_checkbox_group.R +++ b/R/shiny-input_checkbox_group.R @@ -30,6 +30,7 @@ input_checkbox_group <- function( #' @inherit shiny::updateCheckboxGroupInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_date.R b/R/shiny-input_date.R index a3e329d03..855fe2d0a 100644 --- a/R/shiny-input_date.R +++ b/R/shiny-input_date.R @@ -40,6 +40,7 @@ input_date <- function( #' @inherit shiny::updateDateInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_date_range.R b/R/shiny-input_date_range.R index 1da521952..97c4c1d2f 100644 --- a/R/shiny-input_date_range.R +++ b/R/shiny-input_date_range.R @@ -39,6 +39,7 @@ input_date_range <- function( #' @inherit shiny::updateDateRangeInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_numeric.R b/R/shiny-input_numeric.R index f415fea66..2970c75fe 100644 --- a/R/shiny-input_numeric.R +++ b/R/shiny-input_numeric.R @@ -28,6 +28,7 @@ input_numeric <- function( #' @inherit shiny::updateNumericInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_radio_buttons.R b/R/shiny-input_radio_buttons.R index 91e0d6a88..2930dc110 100644 --- a/R/shiny-input_radio_buttons.R +++ b/R/shiny-input_radio_buttons.R @@ -30,6 +30,7 @@ input_radio_buttons <- function( #' @inherit shiny::updateRadioButtons params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R index 89b76ae63..1f98c6c46 100644 --- a/R/shiny-input_select.R +++ b/R/shiny-input_select.R @@ -27,6 +27,7 @@ input_select <- function( } #' @inherit shiny::updateSelectInput params return title description details sections references +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R index 51455bc9f..493eec656 100644 --- a/R/shiny-input_selectize.R +++ b/R/shiny-input_selectize.R @@ -19,6 +19,7 @@ input_selectize <- function( } #' @inherit shiny::updateSelectizeInput params return title description details sections references +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_slider.R b/R/shiny-input_slider.R index 90ce49d16..374ad2ce7 100644 --- a/R/shiny-input_slider.R +++ b/R/shiny-input_slider.R @@ -45,6 +45,7 @@ input_slider <- function( } #' @inherit shiny::updateSliderInput params return title description details sections references +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_text.R b/R/shiny-input_text.R index 5c18eab96..3fc28186d 100644 --- a/R/shiny-input_text.R +++ b/R/shiny-input_text.R @@ -24,6 +24,7 @@ input_text <- function( #' @inherit shiny::updateTextInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/R/shiny-input_text_area.R b/R/shiny-input_text_area.R index 2b1874e48..be81624f6 100644 --- a/R/shiny-input_text_area.R +++ b/R/shiny-input_text_area.R @@ -32,6 +32,7 @@ input_text_area <- function( #' @inherit shiny::updateTextAreaInput params return title description details sections references #' +#' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' #' @family Shiny update aliases diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index c52690c5c..d124b7a54 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -13,6 +13,8 @@ update_action_link( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index 4921ffa32..9fa5612c9 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -13,6 +13,8 @@ update_checkbox( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index b3474e544..7f0339859 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -17,6 +17,8 @@ update_checkbox_group( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_date.Rd b/man/update_date.Rd index d9d20c611..5be41f626 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -15,6 +15,8 @@ update_date( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index eb3209a0a..00c3daf00 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -16,6 +16,8 @@ update_date_range( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd index bd27b379a..d75daf0ab 100644 --- a/man/update_numeric.Rd +++ b/man/update_numeric.Rd @@ -16,6 +16,8 @@ update_numeric( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd index e981503d9..738e1e1b7 100644 --- a/man/update_radio_buttons.Rd +++ b/man/update_radio_buttons.Rd @@ -17,6 +17,8 @@ update_radio_buttons( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_select.Rd b/man/update_select.Rd index 17b5b2953..523808ca1 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -14,6 +14,8 @@ update_select( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 6c8db9439..d93c7a7b1 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -16,6 +16,8 @@ update_selectize( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_slider.Rd b/man/update_slider.Rd index a6da952f6..80206386f 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -18,6 +18,8 @@ update_slider( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_text.Rd b/man/update_text.Rd index eccfacb14..e8916cd5f 100644 --- a/man/update_text.Rd +++ b/man/update_text.Rd @@ -14,6 +14,8 @@ update_text( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd index 5f8999071..95e25c97a 100644 --- a/man/update_text_area.Rd +++ b/man/update_text_area.Rd @@ -14,6 +14,8 @@ update_text_area( ) } \arguments{ +\item{id}{An input id.} + \item{...}{Ignored, included for future expansion.} \item{label}{The label to set for the input object.} From 7cf9152a5c36ad18cff834e919288f3e371a9a6c Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 13:44:28 -0400 Subject: [PATCH 13/24] docs: Add note calling out the aliasing --- DESCRIPTION | 1 + R/shiny-input.R | 11 +++++++++++ R/shiny-input_action_button.R | 4 ++++ R/shiny-input_action_link.R | 4 ++++ R/shiny-input_checkbox.R | 4 ++++ R/shiny-input_checkbox_group.R | 4 ++++ R/shiny-input_date.R | 4 ++++ R/shiny-input_date_range.R | 5 +++++ R/shiny-input_numeric.R | 4 ++++ R/shiny-input_password.R | 2 ++ R/shiny-input_radio_buttons.R | 4 ++++ R/shiny-input_select.R | 6 ++++++ R/shiny-input_selectize.R | 5 +++++ R/shiny-input_slider.R | 4 ++++ R/shiny-input_text.R | 4 ++++ R/shiny-input_text_area.R | 4 ++++ man/input_action_button.Rd | 3 +++ man/input_action_link.Rd | 3 +++ man/input_checkbox.Rd | 3 +++ man/input_checkbox_group.Rd | 3 +++ man/input_date.Rd | 3 +++ man/input_date_range.Rd | 5 ++++- man/input_numeric.Rd | 3 +++ man/input_password.Rd | 3 +++ man/input_radio_buttons.Rd | 3 +++ man/input_select.Rd | 6 ++++++ man/input_selectize.Rd | 5 ++++- man/input_slider.Rd | 3 +++ man/input_text.Rd | 3 +++ man/input_text_area.Rd | 3 +++ man/update_action_button.Rd | 3 +++ man/update_action_link.Rd | 3 +++ man/update_checkbox.Rd | 3 +++ man/update_checkbox_group.Rd | 3 +++ man/update_date.Rd | 3 +++ man/update_date_range.Rd | 3 +++ man/update_numeric.Rd | 3 +++ man/update_radio_buttons.Rd | 3 +++ man/update_select.Rd | 3 +++ man/update_selectize.Rd | 3 +++ man/update_slider.Rd | 3 +++ man/update_text.Rd | 3 +++ man/update_text_area.Rd | 3 +++ 43 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 R/shiny-input.R diff --git a/DESCRIPTION b/DESCRIPTION index 50a02edcd..fb2b18a01 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -147,6 +147,7 @@ Collate: 'precompiled.R' 'print.R' 'shiny-devmode.R' + 'shiny-input.R' 'shiny-input_action_button.R' 'shiny-input_action_link.R' 'shiny-input_checkbox.R' diff --git a/R/shiny-input.R b/R/shiny-input.R new file mode 100644 index 000000000..5826f5635 --- /dev/null +++ b/R/shiny-input.R @@ -0,0 +1,11 @@ +docs_callout_shiny_alias <- function(new, old) { + sprintf( + paste0( + "This function is an alias for `shiny::%s()` and is included to ", + "maintain more consistent naming conventions in Shiny apps that use ", + "\\pkg{bslib}. The documentation may still refer to the original ", + "function names. You can replace `shiny::%s()` with `%s()`." + ), + old, old, new + ) +} diff --git a/R/shiny-input_action_button.R b/R/shiny-input_action_button.R index eb9999104..fdc1abd8a 100644 --- a/R/shiny-input_action_button.R +++ b/R/shiny-input_action_button.R @@ -3,6 +3,8 @@ #' @param id An input id. #' @param label An input label. #' +#' @note `r docs_callout_shiny_alias("input_action_button", "actionButton")` +#' #' @family Shiny input aliases #' @export input_action_button <- function( @@ -28,6 +30,8 @@ input_action_button <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_action_button", "updateActionButton")` +#' #' @family Shiny update aliases #' @export update_action_button <- function( diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R index 9eb3b5825..d00ca3bb5 100644 --- a/R/shiny-input_action_link.R +++ b/R/shiny-input_action_link.R @@ -2,6 +2,8 @@ #' #' @inheritParams input_action_button #' +#' @note `r docs_callout_shiny_alias("input_action_link", "actionLink")` +#' #' @family Shiny input aliases #' @export input_action_link <- function( @@ -21,6 +23,8 @@ input_action_link <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_action_link", "updateActionLink")` +#' #' @family Shiny update aliases #' @export update_action_link <- function( diff --git a/R/shiny-input_checkbox.R b/R/shiny-input_checkbox.R index ddd082d80..95dfd3642 100644 --- a/R/shiny-input_checkbox.R +++ b/R/shiny-input_checkbox.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_checkbox", "checkboxInput")` +#' #' @family Shiny input aliases #' @export input_checkbox <- function( @@ -25,6 +27,8 @@ input_checkbox <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_checkbox", "updateCheckboxInput")` +#' #' @family Shiny update aliases #' @export update_checkbox <- function( diff --git a/R/shiny-input_checkbox_group.R b/R/shiny-input_checkbox_group.R index 1e5a53d18..51322ad72 100644 --- a/R/shiny-input_checkbox_group.R +++ b/R/shiny-input_checkbox_group.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_checkbox_group", "checkboxGroupInput")` +#' #' @family Shiny input aliases #' @export input_checkbox_group <- function( @@ -33,6 +35,8 @@ input_checkbox_group <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_checkbox_group", "updateCheckboxGroupInput")` +#' #' @family Shiny update aliases #' @export update_checkbox_group <- function( diff --git a/R/shiny-input_date.R b/R/shiny-input_date.R index 855fe2d0a..df98ad1b5 100644 --- a/R/shiny-input_date.R +++ b/R/shiny-input_date.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_date", "dateInput")` +#' #' @family Shiny input aliases #' @export input_date <- function( @@ -43,6 +45,8 @@ input_date <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_date", "updateDateInput")` +#' #' @family Shiny update aliases #' @export update_date <- function( diff --git a/R/shiny-input_date_range.R b/R/shiny-input_date_range.R index 97c4c1d2f..3fc6bd6ee 100644 --- a/R/shiny-input_date_range.R +++ b/R/shiny-input_date_range.R @@ -1,6 +1,9 @@ #' @inherit shiny::dateRangeInput params return title description details sections references #' #' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @note `r docs_callout_shiny_alias("input_date_range", "dateRangeInput")` #' #' @family Shiny input aliases #' @export @@ -42,6 +45,8 @@ input_date_range <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_date_range", "updateDateRangeInput")` +#' #' @family Shiny update aliases #' @export update_date_range <- function( diff --git a/R/shiny-input_numeric.R b/R/shiny-input_numeric.R index 2970c75fe..102524c4e 100644 --- a/R/shiny-input_numeric.R +++ b/R/shiny-input_numeric.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_numeric", "numericInput")` +#' #' @family Shiny input aliases #' @export input_numeric <- function( @@ -31,6 +33,8 @@ input_numeric <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_numeric", "updateNumericInput")` +#' #' @family Shiny update aliases #' @export update_numeric <- function( diff --git a/R/shiny-input_password.R b/R/shiny-input_password.R index d3693e97a..ac97b8811 100644 --- a/R/shiny-input_password.R +++ b/R/shiny-input_password.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_password", "passwordInput")` +#' #' @family Shiny input aliases #' @export input_password <- function( diff --git a/R/shiny-input_radio_buttons.R b/R/shiny-input_radio_buttons.R index 2930dc110..524bf6569 100644 --- a/R/shiny-input_radio_buttons.R +++ b/R/shiny-input_radio_buttons.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_radio_buttons", "radioButtons")` +#' #' @family Shiny input aliases #' @export input_radio_buttons <- function( @@ -33,6 +35,8 @@ input_radio_buttons <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_radio_buttons", "updateRadioButtons")` +#' #' @family Shiny update aliases #' @export update_radio_buttons <- function( diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R index 1f98c6c46..2589e0336 100644 --- a/R/shiny-input_select.R +++ b/R/shiny-input_select.R @@ -1,6 +1,9 @@ #' @inherit shiny::selectInput params return title description details sections references #' #' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @note `r docs_callout_shiny_alias("input_select", "selectInput")` #' #' @family Shiny input aliases #' @export @@ -9,6 +12,7 @@ input_select <- function( label, choices, selected = NULL, + ..., multiple = FALSE, selectize = FALSE, # Match Shiny for Python width = NULL, @@ -30,6 +34,8 @@ input_select <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_select", "updateSelectInput")` +#' #' @family Shiny update aliases #' @export update_select <- function( diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R index 493eec656..fb5563133 100644 --- a/R/shiny-input_selectize.R +++ b/R/shiny-input_selectize.R @@ -1,6 +1,9 @@ #' @inherit shiny::selectizeInput params return title description details sections references #' #' @inheritParams input_action_button +#' @param ... Ignored, included for future expansion. +#' +#' @note `r docs_callout_shiny_alias("input_selectize", "selectizeInput")` #' #' @family Shiny input aliases #' @export @@ -22,6 +25,8 @@ input_selectize <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_selectize", "updateSelectizeInput")` +#' #' @family Shiny update aliases #' @export update_selectize <- function( diff --git a/R/shiny-input_slider.R b/R/shiny-input_slider.R index 374ad2ce7..be4027298 100644 --- a/R/shiny-input_slider.R +++ b/R/shiny-input_slider.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_slider", "sliderInput")` +#' #' @family Shiny input aliases #' @export input_slider <- function( @@ -48,6 +50,8 @@ input_slider <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_slider", "updateSliderInput")` +#' #' @family Shiny update aliases #' @export update_slider <- function( diff --git a/R/shiny-input_text.R b/R/shiny-input_text.R index 3fc28186d..df9981221 100644 --- a/R/shiny-input_text.R +++ b/R/shiny-input_text.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_text", "textInput")` +#' #' @family Shiny input aliases #' @export input_text <- function( @@ -27,6 +29,8 @@ input_text <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_text", "updateTextInput")` +#' #' @family Shiny update aliases #' @export update_text <- function( diff --git a/R/shiny-input_text_area.R b/R/shiny-input_text_area.R index be81624f6..608fefbd9 100644 --- a/R/shiny-input_text_area.R +++ b/R/shiny-input_text_area.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("input_text_area", "textAreaInput")` +#' #' @family Shiny input aliases #' @export input_text_area <- function( @@ -35,6 +37,8 @@ input_text_area <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @note `r docs_callout_shiny_alias("update_text_area", "updateTextAreaInput")` +#' #' @family Shiny update aliases #' @export update_text_area <- function( diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index b4b85079a..44626642e 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -32,6 +32,9 @@ see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} Creates an action button or link whose value is initially zero, and increments by one each time it is pressed. } +\note{ +This function is an alias for \code{shiny::actionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionButton()} with \code{input_action_button()}. +} \section{Server value}{ diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index ec4451186..34f9ee595 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -20,6 +20,9 @@ you could also use any other HTML, like an image.} Creates an action button or link whose value is initially zero, and increments by one each time it is pressed. } +\note{ +This function is an alias for \code{shiny::actionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionLink()} with \code{input_action_link()}. +} \section{Server value}{ diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index cb09e680e..343261804 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -24,6 +24,9 @@ A checkbox control that can be added to a UI definition. \description{ Create a checkbox that can be used to specify logical values. } +\note{ +This function is an alias for \code{shiny::checkboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxInput()} with \code{input_checkbox()}. +} \section{Server value}{ diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd index 3ca74f4c7..4f75ad1a3 100644 --- a/man/input_checkbox_group.Rd +++ b/man/input_checkbox_group.Rd @@ -54,6 +54,9 @@ Create a group of checkboxes that can be used to toggle multiple choices independently. The server will receive the input as a character vector of the selected values. } +\note{ +This function is an alias for \code{shiny::checkboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxGroupInput()} with \code{input_checkbox_group()}. +} \section{Server value}{ diff --git a/man/input_date.Rd b/man/input_date.Rd index 6d72ec4fe..624b42d7c 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -89,6 +89,9 @@ the browser. It allows the following values: \item \code{DD} Full weekday name } } +\note{ +This function is an alias for \code{shiny::dateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateInput()} with \code{input_date()}. +} \section{Server value}{ diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 94389ab49..82f235a73 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -34,7 +34,7 @@ date in the client's time zone.} \code{yyyy-mm-dd} format. If NULL (the default), will use the current date in the client's time zone.} -\item{...}{Named attributes to be applied to the button or link.} +\item{...}{Ignored, included for future expansion.} \item{min}{The minimum allowed date. Either a Date object, or a string in \code{yyyy-mm-dd} format.} @@ -89,6 +89,9 @@ the browser. It allows the following values: \item \code{DD} Full weekday name } } +\note{ +This function is an alias for \code{shiny::dateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateRangeInput()} with \code{input_date_range()}. +} \section{Server value}{ diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd index 82fa6f9bd..3802cf145 100644 --- a/man/input_numeric.Rd +++ b/man/input_numeric.Rd @@ -39,6 +39,9 @@ A numeric input control that can be added to a UI definition. \description{ Create an input control for entry of numeric values } +\note{ +This function is an alias for \code{shiny::numericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::numericInput()} with \code{input_numeric()}. +} \section{Server value}{ diff --git a/man/input_password.Rd b/man/input_password.Rd index 78bdc182c..3e7434444 100644 --- a/man/input_password.Rd +++ b/man/input_password.Rd @@ -28,6 +28,9 @@ A text input control that can be added to a UI definition. \description{ Create an password control for entry of passwords. } +\note{ +This function is an alias for \code{shiny::passwordInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::passwordInput()} with \code{input_password()}. +} \section{Server value}{ diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd index 76f386385..dda2f5497 100644 --- a/man/input_radio_buttons.Rd +++ b/man/input_radio_buttons.Rd @@ -59,6 +59,9 @@ the radio buttons to have no options selected by using \code{selected = characte to return to that state once they've made a selection. Instead, consider having the first of your choices be \code{c("None selected" = "")}. } +\note{ +This function is an alias for \code{shiny::radioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::radioButtons()} with \code{input_radio_buttons()}. +} \section{Server value}{ diff --git a/man/input_select.Rd b/man/input_select.Rd index 0fa0b1d7b..a5c8b3819 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -9,6 +9,7 @@ input_select( label, choices, selected = NULL, + ..., multiple = FALSE, selectize = FALSE, width = NULL, @@ -31,6 +32,8 @@ the example section for a small demo of this feature.} \item{selected}{The initially selected value (or multiple values if \code{multiple = TRUE}). If not specified then defaults to the first value for single-select lists and no values for multiple select lists.} +\item{...}{Ignored, included for future expansion.} + \item{multiple}{Is selection of multiple items allowed?} \item{selectize}{Whether to use \pkg{selectize.js} or not.} @@ -68,6 +71,9 @@ massively improves performance and efficiency; see \href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} on the Shiny Dev Center for details. } +\note{ +This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}. +} \section{Server value}{ A vector of character strings, usually of length diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 83a1b8a19..65d52f8c7 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -9,7 +9,7 @@ input_selectize(id, ..., options = NULL, width = NULL) \arguments{ \item{id}{An input id.} -\item{...}{Arguments passed to \code{selectInput()}.} +\item{...}{Ignored, included for future expansion.} \item{options}{A list of options. See the documentation of \pkg{selectize.js}(\url{https://selectize.dev/docs/usage}) for possible options (character option values inside \code{\link[base:AsIs]{base::I()}} will @@ -44,6 +44,9 @@ massively improves performance and efficiency; see \href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} on the Shiny Dev Center for details. } +\note{ +This function is an alias for \code{shiny::selectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectizeInput()} with \code{input_selectize()}. +} \section{Server value}{ A vector of character strings, usually of length diff --git a/man/input_slider.Rd b/man/input_slider.Rd index dac0af4cf..1b8dcc3da 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -89,6 +89,9 @@ cannot be dragged.} Constructs a slider widget to select a number, date, or date-time from a range. } +\note{ +This function is an alias for \code{shiny::sliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::sliderInput()} with \code{input_slider()}. +} \section{Server value}{ diff --git a/man/input_text.Rd b/man/input_text.Rd index 3bffa01ba..fd5e5e374 100644 --- a/man/input_text.Rd +++ b/man/input_text.Rd @@ -28,6 +28,9 @@ A text input control that can be added to a UI definition. \description{ Create an input control for entry of unstructured text values } +\note{ +This function is an alias for \code{shiny::textInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textInput()} with \code{input_text()}. +} \section{Server value}{ diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd index f3dfbacf7..55f13b463 100644 --- a/man/input_text_area.Rd +++ b/man/input_text_area.Rd @@ -56,6 +56,9 @@ A textarea input control that can be added to a UI definition. \description{ Create a textarea input control for entry of unstructured text values. } +\note{ +This function is an alias for \code{shiny::textAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textAreaInput()} with \code{input_text_area()}. +} \section{Server value}{ diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 9e88f3b5f..f1679fd49 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -48,6 +48,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateActionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionButton()} with \code{update_action_button()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_link}()}, diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index d124b7a54..8b3f0aca1 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -44,6 +44,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateActionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionLink()} with \code{update_action_link()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index 9fa5612c9..dd7e263fa 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -44,6 +44,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateCheckboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxInput()} with \code{update_checkbox()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index 7f0339859..807089579 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -66,6 +66,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateCheckboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxGroupInput()} with \code{update_checkbox_group()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_date.Rd b/man/update_date.Rd index 5be41f626..9a5e20170 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -54,6 +54,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateDateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateInput()} with \code{update_date()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 00c3daf00..356604dd9 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -59,6 +59,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateDateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateRangeInput()} with \code{update_date_range()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd index d75daf0ab..49e164ba6 100644 --- a/man/update_numeric.Rd +++ b/man/update_numeric.Rd @@ -53,6 +53,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateNumericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateNumericInput()} with \code{update_numeric()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd index 738e1e1b7..b0ee36b9d 100644 --- a/man/update_radio_buttons.Rd +++ b/man/update_radio_buttons.Rd @@ -67,6 +67,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateRadioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateRadioButtons()} with \code{update_radio_buttons()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_select.Rd b/man/update_select.Rd index 523808ca1..0c3066ac8 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -54,6 +54,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateSelectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectInput()} with \code{update_select()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index d93c7a7b1..c0583ca96 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -66,6 +66,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateSelectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectizeInput()} with \code{update_selectize()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_slider.Rd b/man/update_slider.Rd index 80206386f..a1cbdbe71 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -74,6 +74,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateSliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSliderInput()} with \code{update_slider()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_text.Rd b/man/update_text.Rd index e8916cd5f..de66cef32 100644 --- a/man/update_text.Rd +++ b/man/update_text.Rd @@ -49,6 +49,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateTextInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextInput()} with \code{update_text()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd index 95e25c97a..85e2bd2c2 100644 --- a/man/update_text_area.Rd +++ b/man/update_text_area.Rd @@ -49,6 +49,9 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } +\note{ +This function is an alias for \code{shiny::updateTextAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextAreaInput()} with \code{update_text_area()}. +} \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, From 552ad0b1be3df413cb3c98da46da118b678f880c Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 13:50:47 -0400 Subject: [PATCH 14/24] docs: add to pkgdown index --- _pkgdown.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index 7bf7cabff..378a92a74 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -204,6 +204,21 @@ reference: - input_task_button - bind_task_button +- title: Shiny Aliases + desc: > + These functions are generally aliases for their counterparts in Shiny, but + using modern naming conventions that are consistent with bslib and are + more in line with the conventions of the broader R community. + + In the future, we may update these functions to take advantage of newer + Bootstrap features. +- subtitle: Shiny Inputs + contents: + - has_concept("Shiny input aliases") +- subtitle: Shiny Input Updating Functions + contents: + - has_concept("Shiny update aliases") + - title: Theming desc: > bslib provides a flexible interface for customizing Bootstrap themes. You From 139a01380a1177d3576acd64c4516dfc7363e0af Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 13:53:44 -0400 Subject: [PATCH 15/24] docs: Use "Aliased from Shiny" instead of note --- R/shiny-input_action_button.R | 4 ++-- R/shiny-input_action_link.R | 4 ++-- R/shiny-input_checkbox.R | 4 ++-- R/shiny-input_checkbox_group.R | 4 ++-- R/shiny-input_date.R | 4 ++-- R/shiny-input_date_range.R | 4 ++-- R/shiny-input_numeric.R | 4 ++-- R/shiny-input_password.R | 2 +- R/shiny-input_radio_buttons.R | 4 ++-- R/shiny-input_select.R | 4 ++-- R/shiny-input_selectize.R | 4 ++-- R/shiny-input_slider.R | 4 ++-- R/shiny-input_text.R | 4 ++-- R/shiny-input_text_area.R | 4 ++-- man/input_action_button.Rd | 5 +++-- man/input_action_link.Rd | 5 +++-- man/input_checkbox.Rd | 5 +++-- man/input_checkbox_group.Rd | 5 +++-- man/input_date.Rd | 5 +++-- man/input_date_range.Rd | 5 +++-- man/input_numeric.Rd | 5 +++-- man/input_password.Rd | 5 +++-- man/input_radio_buttons.Rd | 5 +++-- man/input_select.Rd | 5 +++-- man/input_selectize.Rd | 5 +++-- man/input_slider.Rd | 5 +++-- man/input_text.Rd | 5 +++-- man/input_text_area.Rd | 5 +++-- man/update_action_button.Rd | 5 +++-- man/update_action_link.Rd | 5 +++-- man/update_checkbox.Rd | 5 +++-- man/update_checkbox_group.Rd | 5 +++-- man/update_date.Rd | 5 +++-- man/update_date_range.Rd | 5 +++-- man/update_numeric.Rd | 5 +++-- man/update_radio_buttons.Rd | 5 +++-- man/update_select.Rd | 5 +++-- man/update_selectize.Rd | 5 +++-- man/update_slider.Rd | 5 +++-- man/update_text.Rd | 5 +++-- man/update_text_area.Rd | 5 +++-- 41 files changed, 108 insertions(+), 81 deletions(-) diff --git a/R/shiny-input_action_button.R b/R/shiny-input_action_button.R index fdc1abd8a..b331b3768 100644 --- a/R/shiny-input_action_button.R +++ b/R/shiny-input_action_button.R @@ -3,7 +3,7 @@ #' @param id An input id. #' @param label An input label. #' -#' @note `r docs_callout_shiny_alias("input_action_button", "actionButton")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_action_button", "actionButton")` #' #' @family Shiny input aliases #' @export @@ -30,7 +30,7 @@ input_action_button <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_action_button", "updateActionButton")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_action_button", "updateActionButton")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R index d00ca3bb5..7aceaea11 100644 --- a/R/shiny-input_action_link.R +++ b/R/shiny-input_action_link.R @@ -2,7 +2,7 @@ #' #' @inheritParams input_action_button #' -#' @note `r docs_callout_shiny_alias("input_action_link", "actionLink")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_action_link", "actionLink")` #' #' @family Shiny input aliases #' @export @@ -23,7 +23,7 @@ input_action_link <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_action_link", "updateActionLink")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_action_link", "updateActionLink")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_checkbox.R b/R/shiny-input_checkbox.R index 95dfd3642..ede9daa99 100644 --- a/R/shiny-input_checkbox.R +++ b/R/shiny-input_checkbox.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_checkbox", "checkboxInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_checkbox", "checkboxInput")` #' #' @family Shiny input aliases #' @export @@ -27,7 +27,7 @@ input_checkbox <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_checkbox", "updateCheckboxInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_checkbox", "updateCheckboxInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_checkbox_group.R b/R/shiny-input_checkbox_group.R index 51322ad72..d8a2e5668 100644 --- a/R/shiny-input_checkbox_group.R +++ b/R/shiny-input_checkbox_group.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_checkbox_group", "checkboxGroupInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_checkbox_group", "checkboxGroupInput")` #' #' @family Shiny input aliases #' @export @@ -35,7 +35,7 @@ input_checkbox_group <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_checkbox_group", "updateCheckboxGroupInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_checkbox_group", "updateCheckboxGroupInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_date.R b/R/shiny-input_date.R index df98ad1b5..f3c1332f2 100644 --- a/R/shiny-input_date.R +++ b/R/shiny-input_date.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_date", "dateInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_date", "dateInput")` #' #' @family Shiny input aliases #' @export @@ -45,7 +45,7 @@ input_date <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_date", "updateDateInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_date", "updateDateInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_date_range.R b/R/shiny-input_date_range.R index 3fc6bd6ee..7990583c3 100644 --- a/R/shiny-input_date_range.R +++ b/R/shiny-input_date_range.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_date_range", "dateRangeInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_date_range", "dateRangeInput")` #' #' @family Shiny input aliases #' @export @@ -45,7 +45,7 @@ input_date_range <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_date_range", "updateDateRangeInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_date_range", "updateDateRangeInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_numeric.R b/R/shiny-input_numeric.R index 102524c4e..b0d60fae8 100644 --- a/R/shiny-input_numeric.R +++ b/R/shiny-input_numeric.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_numeric", "numericInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_numeric", "numericInput")` #' #' @family Shiny input aliases #' @export @@ -33,7 +33,7 @@ input_numeric <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_numeric", "updateNumericInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_numeric", "updateNumericInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_password.R b/R/shiny-input_password.R index ac97b8811..3da850e2f 100644 --- a/R/shiny-input_password.R +++ b/R/shiny-input_password.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_password", "passwordInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_password", "passwordInput")` #' #' @family Shiny input aliases #' @export diff --git a/R/shiny-input_radio_buttons.R b/R/shiny-input_radio_buttons.R index 524bf6569..1b6f0efda 100644 --- a/R/shiny-input_radio_buttons.R +++ b/R/shiny-input_radio_buttons.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_radio_buttons", "radioButtons")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_radio_buttons", "radioButtons")` #' #' @family Shiny input aliases #' @export @@ -35,7 +35,7 @@ input_radio_buttons <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_radio_buttons", "updateRadioButtons")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_radio_buttons", "updateRadioButtons")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R index 2589e0336..b9e90d5bb 100644 --- a/R/shiny-input_select.R +++ b/R/shiny-input_select.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_select", "selectInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_select", "selectInput")` #' #' @family Shiny input aliases #' @export @@ -34,7 +34,7 @@ input_select <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_select", "updateSelectInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_select", "updateSelectInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R index fb5563133..edeb844d9 100644 --- a/R/shiny-input_selectize.R +++ b/R/shiny-input_selectize.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_selectize", "selectizeInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_selectize", "selectizeInput")` #' #' @family Shiny input aliases #' @export @@ -25,7 +25,7 @@ input_selectize <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_selectize", "updateSelectizeInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_selectize", "updateSelectizeInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_slider.R b/R/shiny-input_slider.R index be4027298..487b59fb9 100644 --- a/R/shiny-input_slider.R +++ b/R/shiny-input_slider.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_slider", "sliderInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_slider", "sliderInput")` #' #' @family Shiny input aliases #' @export @@ -50,7 +50,7 @@ input_slider <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_slider", "updateSliderInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_slider", "updateSliderInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_text.R b/R/shiny-input_text.R index df9981221..28c801006 100644 --- a/R/shiny-input_text.R +++ b/R/shiny-input_text.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_text", "textInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_text", "textInput")` #' #' @family Shiny input aliases #' @export @@ -29,7 +29,7 @@ input_text <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_text", "updateTextInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_text", "updateTextInput")` #' #' @family Shiny update aliases #' @export diff --git a/R/shiny-input_text_area.R b/R/shiny-input_text_area.R index 608fefbd9..d4abc4d6e 100644 --- a/R/shiny-input_text_area.R +++ b/R/shiny-input_text_area.R @@ -3,7 +3,7 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("input_text_area", "textAreaInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_text_area", "textAreaInput")` #' #' @family Shiny input aliases #' @export @@ -37,7 +37,7 @@ input_text_area <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @note `r docs_callout_shiny_alias("update_text_area", "updateTextAreaInput")` +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_text_area", "updateTextAreaInput")` #' #' @family Shiny update aliases #' @export diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 44626642e..512c8e029 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -32,9 +32,10 @@ see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.} Creates an action button or link whose value is initially zero, and increments by one each time it is pressed. } -\note{ -This function is an alias for \code{shiny::actionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionButton()} with \code{input_action_button()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::actionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionButton()} with \code{input_action_button()}. } + \section{Server value}{ diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 34f9ee595..898ef473a 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -20,9 +20,10 @@ you could also use any other HTML, like an image.} Creates an action button or link whose value is initially zero, and increments by one each time it is pressed. } -\note{ -This function is an alias for \code{shiny::actionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionLink()} with \code{input_action_link()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::actionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionLink()} with \code{input_action_link()}. } + \section{Server value}{ diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index 343261804..4d3c14fd3 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -24,9 +24,10 @@ A checkbox control that can be added to a UI definition. \description{ Create a checkbox that can be used to specify logical values. } -\note{ -This function is an alias for \code{shiny::checkboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxInput()} with \code{input_checkbox()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::checkboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxInput()} with \code{input_checkbox()}. } + \section{Server value}{ diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd index 4f75ad1a3..7aaa173a6 100644 --- a/man/input_checkbox_group.Rd +++ b/man/input_checkbox_group.Rd @@ -54,9 +54,10 @@ Create a group of checkboxes that can be used to toggle multiple choices independently. The server will receive the input as a character vector of the selected values. } -\note{ -This function is an alias for \code{shiny::checkboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxGroupInput()} with \code{input_checkbox_group()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::checkboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxGroupInput()} with \code{input_checkbox_group()}. } + \section{Server value}{ diff --git a/man/input_date.Rd b/man/input_date.Rd index 624b42d7c..38e65a329 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -89,9 +89,10 @@ the browser. It allows the following values: \item \code{DD} Full weekday name } } -\note{ -This function is an alias for \code{shiny::dateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateInput()} with \code{input_date()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::dateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateInput()} with \code{input_date()}. } + \section{Server value}{ diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 82f235a73..2aeae38c7 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -89,9 +89,10 @@ the browser. It allows the following values: \item \code{DD} Full weekday name } } -\note{ -This function is an alias for \code{shiny::dateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateRangeInput()} with \code{input_date_range()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::dateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateRangeInput()} with \code{input_date_range()}. } + \section{Server value}{ diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd index 3802cf145..f442c6fe9 100644 --- a/man/input_numeric.Rd +++ b/man/input_numeric.Rd @@ -39,9 +39,10 @@ A numeric input control that can be added to a UI definition. \description{ Create an input control for entry of numeric values } -\note{ -This function is an alias for \code{shiny::numericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::numericInput()} with \code{input_numeric()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::numericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::numericInput()} with \code{input_numeric()}. } + \section{Server value}{ diff --git a/man/input_password.Rd b/man/input_password.Rd index 3e7434444..4057bf850 100644 --- a/man/input_password.Rd +++ b/man/input_password.Rd @@ -28,9 +28,10 @@ A text input control that can be added to a UI definition. \description{ Create an password control for entry of passwords. } -\note{ -This function is an alias for \code{shiny::passwordInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::passwordInput()} with \code{input_password()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::passwordInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::passwordInput()} with \code{input_password()}. } + \section{Server value}{ diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd index dda2f5497..c3752f7f8 100644 --- a/man/input_radio_buttons.Rd +++ b/man/input_radio_buttons.Rd @@ -59,9 +59,10 @@ the radio buttons to have no options selected by using \code{selected = characte to return to that state once they've made a selection. Instead, consider having the first of your choices be \code{c("None selected" = "")}. } -\note{ -This function is an alias for \code{shiny::radioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::radioButtons()} with \code{input_radio_buttons()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::radioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::radioButtons()} with \code{input_radio_buttons()}. } + \section{Server value}{ diff --git a/man/input_select.Rd b/man/input_select.Rd index a5c8b3819..be65c86a8 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -71,9 +71,10 @@ massively improves performance and efficiency; see \href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} on the Shiny Dev Center for details. } -\note{ -This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}. } + \section{Server value}{ A vector of character strings, usually of length diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 65d52f8c7..09e1ce189 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -44,9 +44,10 @@ massively improves performance and efficiency; see \href{https://shiny.rstudio.com/articles/selectize.html}{this selectize article} on the Shiny Dev Center for details. } -\note{ -This function is an alias for \code{shiny::selectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectizeInput()} with \code{input_selectize()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::selectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectizeInput()} with \code{input_selectize()}. } + \section{Server value}{ A vector of character strings, usually of length diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 1b8dcc3da..1ccdadf06 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -89,9 +89,10 @@ cannot be dragged.} Constructs a slider widget to select a number, date, or date-time from a range. } -\note{ -This function is an alias for \code{shiny::sliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::sliderInput()} with \code{input_slider()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::sliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::sliderInput()} with \code{input_slider()}. } + \section{Server value}{ diff --git a/man/input_text.Rd b/man/input_text.Rd index fd5e5e374..cd66e4aad 100644 --- a/man/input_text.Rd +++ b/man/input_text.Rd @@ -28,9 +28,10 @@ A text input control that can be added to a UI definition. \description{ Create an input control for entry of unstructured text values } -\note{ -This function is an alias for \code{shiny::textInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textInput()} with \code{input_text()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::textInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textInput()} with \code{input_text()}. } + \section{Server value}{ diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd index 55f13b463..44f8aaec9 100644 --- a/man/input_text_area.Rd +++ b/man/input_text_area.Rd @@ -56,9 +56,10 @@ A textarea input control that can be added to a UI definition. \description{ Create a textarea input control for entry of unstructured text values. } -\note{ -This function is an alias for \code{shiny::textAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textAreaInput()} with \code{input_text_area()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::textAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textAreaInput()} with \code{input_text_area()}. } + \section{Server value}{ diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index f1679fd49..02bdad645 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -48,9 +48,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateActionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionButton()} with \code{update_action_button()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateActionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionButton()} with \code{update_action_button()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_link}()}, diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 8b3f0aca1..79207a406 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -44,9 +44,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateActionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionLink()} with \code{update_action_link()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateActionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionLink()} with \code{update_action_link()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index dd7e263fa..19af1c524 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -44,9 +44,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateCheckboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxInput()} with \code{update_checkbox()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateCheckboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxInput()} with \code{update_checkbox()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index 807089579..0f9d7938b 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -66,9 +66,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateCheckboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxGroupInput()} with \code{update_checkbox_group()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateCheckboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxGroupInput()} with \code{update_checkbox_group()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_date.Rd b/man/update_date.Rd index 9a5e20170..e18e61e4a 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -54,9 +54,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateDateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateInput()} with \code{update_date()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateDateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateInput()} with \code{update_date()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 356604dd9..2f8c93a85 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -59,9 +59,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateDateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateRangeInput()} with \code{update_date_range()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateDateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateRangeInput()} with \code{update_date_range()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd index 49e164ba6..8df38353c 100644 --- a/man/update_numeric.Rd +++ b/man/update_numeric.Rd @@ -53,9 +53,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateNumericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateNumericInput()} with \code{update_numeric()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateNumericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateNumericInput()} with \code{update_numeric()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd index b0ee36b9d..6d0bf7159 100644 --- a/man/update_radio_buttons.Rd +++ b/man/update_radio_buttons.Rd @@ -67,9 +67,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateRadioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateRadioButtons()} with \code{update_radio_buttons()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateRadioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateRadioButtons()} with \code{update_radio_buttons()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_select.Rd b/man/update_select.Rd index 0c3066ac8..d0507046d 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -54,9 +54,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateSelectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectInput()} with \code{update_select()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateSelectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectInput()} with \code{update_select()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index c0583ca96..0034193a7 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -66,9 +66,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateSelectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectizeInput()} with \code{update_selectize()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateSelectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectizeInput()} with \code{update_selectize()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_slider.Rd b/man/update_slider.Rd index a1cbdbe71..e342367fa 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -74,9 +74,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateSliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSliderInput()} with \code{update_slider()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateSliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSliderInput()} with \code{update_slider()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_text.Rd b/man/update_text.Rd index de66cef32..edc91c413 100644 --- a/man/update_text.Rd +++ b/man/update_text.Rd @@ -49,9 +49,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateTextInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextInput()} with \code{update_text()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateTextInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextInput()} with \code{update_text()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd index 85e2bd2c2..909be0a73 100644 --- a/man/update_text_area.Rd +++ b/man/update_text_area.Rd @@ -49,9 +49,10 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}( \code{choices=character(0)}. Similarly, for these inputs, the selected item can be cleared by using \code{selected=character(0)}. } -\note{ -This function is an alias for \code{shiny::updateTextAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextAreaInput()} with \code{update_text_area()}. +\section{Aliased from Shiny}{ + This function is an alias for \code{shiny::updateTextAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextAreaInput()} with \code{update_text_area()}. } + \seealso{ Other Shiny update aliases: \code{\link{update_action_button}()}, From 962940df6b62e194a3a3869d96b27ed462984009 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 14:13:13 -0400 Subject: [PATCH 16/24] Add seealso links to connect inputs to updaters --- R/shiny-input_action_button.R | 5 +++++ R/shiny-input_action_link.R | 4 ++++ R/shiny-input_checkbox.R | 4 ++++ R/shiny-input_checkbox_group.R | 5 +++++ R/shiny-input_date.R | 4 ++++ R/shiny-input_date_range.R | 4 ++++ R/shiny-input_numeric.R | 4 ++++ R/shiny-input_password.R | 2 ++ R/shiny-input_radio_buttons.R | 5 +++++ R/shiny-input_select.R | 11 ++++++++++- R/shiny-input_selectize.R | 4 ++++ R/shiny-input_slider.R | 4 ++++ R/shiny-input_text.R | 4 ++++ R/shiny-input_text_area.R | 4 ++++ man/input_action_button.Rd | 3 +++ man/input_action_link.Rd | 2 ++ man/input_checkbox.Rd | 2 ++ man/input_checkbox_group.Rd | 3 +++ man/input_date.Rd | 2 ++ man/input_date_range.Rd | 2 ++ man/input_numeric.Rd | 2 ++ man/input_password.Rd | 2 ++ man/input_radio_buttons.Rd | 3 +++ man/input_select.Rd | 9 ++++++++- man/input_selectize.Rd | 2 ++ man/input_slider.Rd | 2 ++ man/input_text.Rd | 2 ++ man/input_text_area.Rd | 2 ++ man/update_action_button.Rd | 2 ++ man/update_action_link.Rd | 2 ++ man/update_checkbox.Rd | 2 ++ man/update_checkbox_group.Rd | 2 ++ man/update_date.Rd | 2 ++ man/update_date_range.Rd | 2 ++ man/update_numeric.Rd | 2 ++ man/update_radio_buttons.Rd | 2 ++ man/update_select.Rd | 2 ++ man/update_selectize.Rd | 2 ++ man/update_slider.Rd | 2 ++ man/update_text.Rd | 2 ++ man/update_text_area.Rd | 2 ++ 41 files changed, 126 insertions(+), 2 deletions(-) diff --git a/R/shiny-input_action_button.R b/R/shiny-input_action_button.R index b331b3768..000c9c8d7 100644 --- a/R/shiny-input_action_button.R +++ b/R/shiny-input_action_button.R @@ -5,6 +5,9 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_action_button", "actionButton")` #' +#' @seealso [update_action_button()] to programmatically update an action +#' button. +#' #' @family Shiny input aliases #' @export input_action_button <- function( @@ -32,6 +35,8 @@ input_action_button <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_action_button", "updateActionButton")` #' +#' @seealso [input_action_button()] to create an action button. +#' #' @family Shiny update aliases #' @export update_action_button <- function( diff --git a/R/shiny-input_action_link.R b/R/shiny-input_action_link.R index 7aceaea11..c6074b4ad 100644 --- a/R/shiny-input_action_link.R +++ b/R/shiny-input_action_link.R @@ -4,6 +4,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_action_link", "actionLink")` #' +#' @seealso [update_action_link()] to programmatically update an action link. +#' #' @family Shiny input aliases #' @export input_action_link <- function( @@ -25,6 +27,8 @@ input_action_link <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_action_link", "updateActionLink")` #' +#' @seealso [input_action_link()] to create an action link. +#' #' @family Shiny update aliases #' @export update_action_link <- function( diff --git a/R/shiny-input_checkbox.R b/R/shiny-input_checkbox.R index ede9daa99..00eedbf5c 100644 --- a/R/shiny-input_checkbox.R +++ b/R/shiny-input_checkbox.R @@ -3,6 +3,8 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @seealso [update_checkbox()] to programmatically update a checkbox. +#' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_checkbox", "checkboxInput")` #' #' @family Shiny input aliases @@ -27,6 +29,8 @@ input_checkbox <- function( #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' +#' @seealso [input_checkbox()] to create a checkbox. +#' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_checkbox", "updateCheckboxInput")` #' #' @family Shiny update aliases diff --git a/R/shiny-input_checkbox_group.R b/R/shiny-input_checkbox_group.R index d8a2e5668..d0513ba23 100644 --- a/R/shiny-input_checkbox_group.R +++ b/R/shiny-input_checkbox_group.R @@ -5,6 +5,9 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_checkbox_group", "checkboxGroupInput")` #' +#' @seealso [update_checkbox_group()] to programmatically update a checkbox +#' group. +#' #' @family Shiny input aliases #' @export input_checkbox_group <- function( @@ -37,6 +40,8 @@ input_checkbox_group <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_checkbox_group", "updateCheckboxGroupInput")` #' +#' @seealso [input_checkbox_group()] to create a checkbox group. +#' #' @family Shiny update aliases #' @export update_checkbox_group <- function( diff --git a/R/shiny-input_date.R b/R/shiny-input_date.R index f3c1332f2..7b86837c4 100644 --- a/R/shiny-input_date.R +++ b/R/shiny-input_date.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_date", "dateInput")` #' +#' @seealso [update_date()] to programmatically update a date input. +#' #' @family Shiny input aliases #' @export input_date <- function( @@ -47,6 +49,8 @@ input_date <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_date", "updateDateInput")` #' +#' @seealso [input_date()] to create a date input. +#' #' @family Shiny update aliases #' @export update_date <- function( diff --git a/R/shiny-input_date_range.R b/R/shiny-input_date_range.R index 7990583c3..f5602b348 100644 --- a/R/shiny-input_date_range.R +++ b/R/shiny-input_date_range.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_date_range", "dateRangeInput")` #' +#' @seealso [update_date_range()] to programmatically update a date range input. +#' #' @family Shiny input aliases #' @export input_date_range <- function( @@ -47,6 +49,8 @@ input_date_range <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_date_range", "updateDateRangeInput")` #' +#' @seealso [input_date_range()] to create a date range input. +#' #' @family Shiny update aliases #' @export update_date_range <- function( diff --git a/R/shiny-input_numeric.R b/R/shiny-input_numeric.R index b0d60fae8..a29f632fb 100644 --- a/R/shiny-input_numeric.R +++ b/R/shiny-input_numeric.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_numeric", "numericInput")` #' +#' @seealso [update_numeric()] to programmatically update a numeric input. +#' #' @family Shiny input aliases #' @export input_numeric <- function( @@ -35,6 +37,8 @@ input_numeric <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_numeric", "updateNumericInput")` #' +#' @seealso [input_numeric()] to create a numeric input. +#' #' @family Shiny update aliases #' @export update_numeric <- function( diff --git a/R/shiny-input_password.R b/R/shiny-input_password.R index 3da850e2f..f751c9fc9 100644 --- a/R/shiny-input_password.R +++ b/R/shiny-input_password.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_password", "passwordInput")` #' +#' @seealso [update_text()] is used to programmatically update a password input. +#' #' @family Shiny input aliases #' @export input_password <- function( diff --git a/R/shiny-input_radio_buttons.R b/R/shiny-input_radio_buttons.R index 1b6f0efda..286d35adf 100644 --- a/R/shiny-input_radio_buttons.R +++ b/R/shiny-input_radio_buttons.R @@ -5,6 +5,9 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_radio_buttons", "radioButtons")` #' +#' @seealso [update_radio_buttons()] to programmatically update a radio button +#' input. +#' #' @family Shiny input aliases #' @export input_radio_buttons <- function( @@ -37,6 +40,8 @@ input_radio_buttons <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_radio_buttons", "updateRadioButtons")` #' +#' @seealso [input_radio_buttons()] to create a radio button input. +#' #' @family Shiny update aliases #' @export update_radio_buttons <- function( diff --git a/R/shiny-input_select.R b/R/shiny-input_select.R index b9e90d5bb..eb5c4b3c9 100644 --- a/R/shiny-input_select.R +++ b/R/shiny-input_select.R @@ -3,7 +3,14 @@ #' @inheritParams input_action_button #' @param ... Ignored, included for future expansion. #' -#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_select", "selectInput")` +#' @section Aliased from Shiny: +#' `r docs_callout_shiny_alias("input_select", "selectInput")` +#' +#' Note that, unlike in [shiny::selectInput()], `input_select()` does not +#' use selectize.js by default. Insttead, set `selectize = TRUE` or call +#' [input_selectize()] directly. +#' +#' @seealso [update_select()] to programmatically update a select input. #' #' @family Shiny input aliases #' @export @@ -36,6 +43,8 @@ input_select <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_select", "updateSelectInput")` #' +#' @seealso [input_select()] to create a select input. +#' #' @family Shiny update aliases #' @export update_select <- function( diff --git a/R/shiny-input_selectize.R b/R/shiny-input_selectize.R index edeb844d9..dad494d4a 100644 --- a/R/shiny-input_selectize.R +++ b/R/shiny-input_selectize.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_selectize", "selectizeInput")` #' +#' @seealso [update_selectize()] to programmatically update a selectize input. +#' #' @family Shiny input aliases #' @export input_selectize <- function( @@ -27,6 +29,8 @@ input_selectize <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_selectize", "updateSelectizeInput")` #' +#' @seealso [input_selectize()] to create a selectize input. +#' #' @family Shiny update aliases #' @export update_selectize <- function( diff --git a/R/shiny-input_slider.R b/R/shiny-input_slider.R index 487b59fb9..4221802c4 100644 --- a/R/shiny-input_slider.R +++ b/R/shiny-input_slider.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_slider", "sliderInput")` #' +#' @seealso [update_slider()] to programmatically update a slider input. +#' #' @family Shiny input aliases #' @export input_slider <- function( @@ -52,6 +54,8 @@ input_slider <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_slider", "updateSliderInput")` #' +#' @seealso [input_slider()] to create a slider input. +#' #' @family Shiny update aliases #' @export update_slider <- function( diff --git a/R/shiny-input_text.R b/R/shiny-input_text.R index 28c801006..dfe35deee 100644 --- a/R/shiny-input_text.R +++ b/R/shiny-input_text.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_text", "textInput")` #' +#' @seealso [update_text()] to programmatically update a text input. +#' #' @family Shiny input aliases #' @export input_text <- function( @@ -31,6 +33,8 @@ input_text <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_text", "updateTextInput")` #' +#' @seealso [input_text()] to create a text input. +#' #' @family Shiny update aliases #' @export update_text <- function( diff --git a/R/shiny-input_text_area.R b/R/shiny-input_text_area.R index d4abc4d6e..58d66053d 100644 --- a/R/shiny-input_text_area.R +++ b/R/shiny-input_text_area.R @@ -5,6 +5,8 @@ #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_text_area", "textAreaInput")` #' +#' @seealso [update_text_area()] to programmatically update a text area input. +#' #' @family Shiny input aliases #' @export input_text_area <- function( @@ -39,6 +41,8 @@ input_text_area <- function( #' #' @section Aliased from Shiny: `r docs_callout_shiny_alias("update_text_area", "updateTextAreaInput")` #' +#' @seealso [input_text_area()] to create a text area input. +#' #' @family Shiny update aliases #' @export update_text_area <- function( diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd index 512c8e029..0e653f1cd 100644 --- a/man/input_action_button.Rd +++ b/man/input_action_button.Rd @@ -50,6 +50,9 @@ This implies two things: } \seealso{ +\code{\link[=update_action_button]{update_action_button()}} to programmatically update an action +button. + Other Shiny input aliases: \code{\link{input_action_link}()}, \code{\link{input_checkbox}()}, diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd index 898ef473a..d372d4e84 100644 --- a/man/input_action_link.Rd +++ b/man/input_action_link.Rd @@ -38,6 +38,8 @@ This implies two things: } \seealso{ +\code{\link[=update_action_link]{update_action_link()}} to programmatically update an action link. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_checkbox}()}, diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd index 4d3c14fd3..7396891cf 100644 --- a/man/input_checkbox.Rd +++ b/man/input_checkbox.Rd @@ -36,6 +36,8 @@ Create a checkbox that can be used to specify logical values. } \seealso{ +\code{\link[=update_checkbox]{update_checkbox()}} to programmatically update a checkbox. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd index 7aaa173a6..601c02374 100644 --- a/man/input_checkbox_group.Rd +++ b/man/input_checkbox_group.Rd @@ -66,6 +66,9 @@ Character vector of values corresponding to the boxes that are checked. } \seealso{ +\code{\link[=update_checkbox_group]{update_checkbox_group()}} to programmatically update a checkbox +group. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_date.Rd b/man/input_date.Rd index 38e65a329..9ff3aef33 100644 --- a/man/input_date.Rd +++ b/man/input_date.Rd @@ -101,6 +101,8 @@ A \link{Date} vector of length 1. } \seealso{ +\code{\link[=update_date]{update_date()}} to programmatically update a date input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd index 2aeae38c7..037180e7c 100644 --- a/man/input_date_range.Rd +++ b/man/input_date_range.Rd @@ -101,6 +101,8 @@ A \link{Date} vector of length 2. } \seealso{ +\code{\link[=update_date_range]{update_date_range()}} to programmatically update a date range input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd index f442c6fe9..b440b8556 100644 --- a/man/input_numeric.Rd +++ b/man/input_numeric.Rd @@ -51,6 +51,8 @@ A numeric vector of length 1. } \seealso{ +\code{\link[=update_numeric]{update_numeric()}} to programmatically update a numeric input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_password.Rd b/man/input_password.Rd index 4057bf850..fdf7338e1 100644 --- a/man/input_password.Rd +++ b/man/input_password.Rd @@ -41,6 +41,8 @@ unless \code{value} is provided. } \seealso{ +\code{\link[=update_text]{update_text()}} is used to programmatically update a password input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd index c3752f7f8..739b813f6 100644 --- a/man/input_radio_buttons.Rd +++ b/man/input_radio_buttons.Rd @@ -72,6 +72,9 @@ A character string containing the value of the selected button. } \seealso{ +\code{\link[=update_radio_buttons]{update_radio_buttons()}} to programmatically update a radio button +input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_select.Rd b/man/input_select.Rd index be65c86a8..320e25f35 100644 --- a/man/input_select.Rd +++ b/man/input_select.Rd @@ -72,7 +72,12 @@ massively improves performance and efficiency; see on the Shiny Dev Center for details. } \section{Aliased from Shiny}{ - This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}. + +This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}. + +Note that, unlike in \code{\link[shiny:selectInput]{shiny::selectInput()}}, \code{input_select()} does not +use selectize.js by default. Insttead, set \code{selectize = TRUE} or call +\code{\link[=input_selectize]{input_selectize()}} directly. } \section{Server value}{ @@ -84,6 +89,8 @@ nothing is selected, this value will be \code{NULL}. } \seealso{ +\code{\link[=update_select]{update_select()}} to programmatically update a select input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd index 09e1ce189..558ba972f 100644 --- a/man/input_selectize.Rd +++ b/man/input_selectize.Rd @@ -57,6 +57,8 @@ nothing is selected, this value will be \code{NULL}. } \seealso{ +\code{\link[=update_selectize]{update_selectize()}} to programmatically update a selectize input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_slider.Rd b/man/input_slider.Rd index 1ccdadf06..60a396c0a 100644 --- a/man/input_slider.Rd +++ b/man/input_slider.Rd @@ -102,6 +102,8 @@ in the case of slider range, a vector of two numbers/dates/date-times. } \seealso{ +\code{\link[=update_slider]{update_slider()}} to programmatically update a slider input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_text.Rd b/man/input_text.Rd index cd66e4aad..283be409a 100644 --- a/man/input_text.Rd +++ b/man/input_text.Rd @@ -41,6 +41,8 @@ unless \code{value} is provided. } \seealso{ +\code{\link[=update_text]{update_text()}} to programmatically update a text input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd index 44f8aaec9..8640339a1 100644 --- a/man/input_text_area.Rd +++ b/man/input_text_area.Rd @@ -69,6 +69,8 @@ unless \code{value} is provided. } \seealso{ +\code{\link[=update_text_area]{update_text_area()}} to programmatically update a text area input. + Other Shiny input aliases: \code{\link{input_action_button}()}, \code{\link{input_action_link}()}, diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd index 02bdad645..c287fc757 100644 --- a/man/update_action_button.Rd +++ b/man/update_action_button.Rd @@ -53,6 +53,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_action_button]{input_action_button()}} to create an action button. + Other Shiny update aliases: \code{\link{update_action_link}()}, \code{\link{update_checkbox}()}, diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd index 79207a406..230923b29 100644 --- a/man/update_action_link.Rd +++ b/man/update_action_link.Rd @@ -49,6 +49,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_action_link]{input_action_link()}} to create an action link. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_checkbox}()}, diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd index 19af1c524..cc8dcbea7 100644 --- a/man/update_checkbox.Rd +++ b/man/update_checkbox.Rd @@ -49,6 +49,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_checkbox]{input_checkbox()}} to create a checkbox. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd index 0f9d7938b..a0ffff22b 100644 --- a/man/update_checkbox_group.Rd +++ b/man/update_checkbox_group.Rd @@ -71,6 +71,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_checkbox_group]{input_checkbox_group()}} to create a checkbox group. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_date.Rd b/man/update_date.Rd index e18e61e4a..003658099 100644 --- a/man/update_date.Rd +++ b/man/update_date.Rd @@ -59,6 +59,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_date]{input_date()}} to create a date input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd index 2f8c93a85..0068db516 100644 --- a/man/update_date_range.Rd +++ b/man/update_date_range.Rd @@ -64,6 +64,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_date_range]{input_date_range()}} to create a date range input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd index 8df38353c..b60a17ab2 100644 --- a/man/update_numeric.Rd +++ b/man/update_numeric.Rd @@ -58,6 +58,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_numeric]{input_numeric()}} to create a numeric input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd index 6d0bf7159..0ae6a782e 100644 --- a/man/update_radio_buttons.Rd +++ b/man/update_radio_buttons.Rd @@ -72,6 +72,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_radio_buttons]{input_radio_buttons()}} to create a radio button input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_select.Rd b/man/update_select.Rd index d0507046d..2f5c74e37 100644 --- a/man/update_select.Rd +++ b/man/update_select.Rd @@ -59,6 +59,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_select]{input_select()}} to create a select input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd index 0034193a7..1e0f31b66 100644 --- a/man/update_selectize.Rd +++ b/man/update_selectize.Rd @@ -71,6 +71,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_selectize]{input_selectize()}} to create a selectize input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_slider.Rd b/man/update_slider.Rd index e342367fa..1636afad2 100644 --- a/man/update_slider.Rd +++ b/man/update_slider.Rd @@ -79,6 +79,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_slider]{input_slider()}} to create a slider input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_text.Rd b/man/update_text.Rd index edc91c413..2f750556d 100644 --- a/man/update_text.Rd +++ b/man/update_text.Rd @@ -54,6 +54,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_text]{input_text()}} to create a text input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd index 909be0a73..c04d2c8ae 100644 --- a/man/update_text_area.Rd +++ b/man/update_text_area.Rd @@ -54,6 +54,8 @@ can be cleared by using \code{selected=character(0)}. } \seealso{ +\code{\link[=input_text_area]{input_text_area()}} to create a text area input. + Other Shiny update aliases: \code{\link{update_action_button}()}, \code{\link{update_action_link}()}, From daf862547a3dfd225ad621531ade6d164f8ef436 Mon Sep 17 00:00:00 2001 From: Garrick Aden-Buie Date: Fri, 14 Jun 2024 16:51:21 -0400 Subject: [PATCH 17/24] feat: Aliases for output and render functions --- DESCRIPTION | 6 ++ NAMESPACE | 12 ++++ R/shiny-output_image.R | 57 ++++++++++++++++ R/shiny-output_plot.R | 67 +++++++++++++++++++ R/shiny-output_table.R | 55 ++++++++++++++++ R/shiny-output_text.R | 37 +++++++++++ R/shiny-output_text_verbatim.R | 38 +++++++++++ R/shiny-output_ui.R | 40 +++++++++++ _pkgdown.yml | 6 ++ man/output_image.Rd | 117 +++++++++++++++++++++++++++++++++ man/output_plot.Rd | 117 +++++++++++++++++++++++++++++++++ man/output_table.Rd | 27 ++++++++ man/output_text.Rd | 37 +++++++++++ man/output_text_verbatim.Rd | 36 ++++++++++ man/output_ui.Rd | 53 +++++++++++++++ man/render_image.Rd | 74 +++++++++++++++++++++ man/render_plot.Rd | 109 ++++++++++++++++++++++++++++++ man/render_table.Rd | 105 +++++++++++++++++++++++++++++ man/render_text.Rd | 68 +++++++++++++++++++ man/render_text_verbatim.Rd | 67 +++++++++++++++++++ man/render_ui.Rd | 48 ++++++++++++++ 21 files changed, 1176 insertions(+) create mode 100644 R/shiny-output_image.R create mode 100644 R/shiny-output_plot.R create mode 100644 R/shiny-output_table.R create mode 100644 R/shiny-output_text.R create mode 100644 R/shiny-output_text_verbatim.R create mode 100644 R/shiny-output_ui.R create mode 100644 man/output_image.Rd create mode 100644 man/output_plot.Rd create mode 100644 man/output_table.Rd create mode 100644 man/output_text.Rd create mode 100644 man/output_text_verbatim.Rd create mode 100644 man/output_ui.Rd create mode 100644 man/render_image.Rd create mode 100644 man/render_plot.Rd create mode 100644 man/render_table.Rd create mode 100644 man/render_text.Rd create mode 100644 man/render_text_verbatim.Rd create mode 100644 man/render_ui.Rd diff --git a/DESCRIPTION b/DESCRIPTION index fb2b18a01..eb4aea852 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -162,6 +162,12 @@ Collate: 'shiny-input_slider.R' 'shiny-input_text.R' 'shiny-input_text_area.R' + 'shiny-output_image.R' + 'shiny-output_plot.R' + 'shiny-output_table.R' + 'shiny-output_text.R' + 'shiny-output_text_verbatim.R' + 'shiny-output_ui.R' 'sidebar.R' 'staticimports.R' 'tooltip.R' diff --git a/NAMESPACE b/NAMESPACE index da10a79b6..46d6c4e22 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -134,6 +134,12 @@ export(navset_pill) export(navset_pill_list) export(navset_tab) export(navset_underline) +export(output_image) +export(output_plot) +export(output_table) +export(output_text) +export(output_text_verbatim) +export(output_ui) export(page) export(page_fill) export(page_fillable) @@ -144,6 +150,12 @@ export(page_sidebar) export(popover) export(precompiled_css_path) export(remove_all_fill) +export(render_image) +export(render_plot) +export(render_table) +export(render_text) +export(render_text_verbatim) +export(render_ui) export(run_with_themer) export(showcase_bottom) export(showcase_left_center) diff --git a/R/shiny-output_image.R b/R/shiny-output_image.R new file mode 100644 index 000000000..3bf795bed --- /dev/null +++ b/R/shiny-output_image.R @@ -0,0 +1,57 @@ +#' @inherit shiny::imageOutput params return title description details sections references +#' +#' @inheritParams output_text +#' @param ... Ignored, included for future expansion. +#' +#' @seealso [render_image()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_image <- function( + id, + width = "100%", + height = "400px", + ..., + click = NULL, + dblclick = NULL, + hover = NULL, + brush = NULL, + inline = FALSE, + fill = FALSE +) { + shiny::imageOutput( + outputId = id, + width = width, + height = height, + click = click, + dblclick = dblclick, + hover = hover, + brush = brush, + inline = inline, + fill = fill + ) +} + +#' @inherit shiny::renderImage params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_image", "renderImage")` +#' +#' @seealso [output_image()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_image <- function( + expr, + env = parent.frame(), + quoted = FALSE, + deleteFile, + outputArgs = list() +) { + shiny::renderImage( + expr = expr, + env = env, + quoted = quoted, + deleteFile = deleteFile, + outputArgs = outputArgs + ) +} diff --git a/R/shiny-output_plot.R b/R/shiny-output_plot.R new file mode 100644 index 000000000..ad7933a79 --- /dev/null +++ b/R/shiny-output_plot.R @@ -0,0 +1,67 @@ +#' @inherit shiny::plotOutput params return title description details sections references +#' +#' @inheritParams output_text +#' @param ... Ignored, included for future expansion. +#' +#' @seealso [render_plot()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_plot <- function( + id, + width = "100%", + height = "400px", + ..., + click = NULL, + dblclick = NULL, + hover = NULL, + brush = NULL, + inline = FALSE, + fill = !inline +) { + shiny::plotOutput( + outputId = id, + width = width, + height = height, + click = click, + dblclick = dblclick, + hover = hover, + brush = brush, + inline = inline, + fill = fill + ) +} + +#' @inherit shiny::renderPlot params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_plot", "renderPlot")` +#' +#' @seealso [output_plot()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_plot <- function( + expr, + width = "auto", + height = "auto", + res = 72, + ..., + alt = NA, + env = parent.frame(), + quoted = FALSE, + execOnResize = FALSE, + outputArgs = list() +) { + shiny::renderPlot( + expr = expr, + width = width, + height = height, + res = res, + ..., + alt = alt, + env = env, + quoted = quoted, + execOnResize = execOnResize, + outputArgs = outputArgs + ) +} diff --git a/R/shiny-output_table.R b/R/shiny-output_table.R new file mode 100644 index 000000000..33dbc72ff --- /dev/null +++ b/R/shiny-output_table.R @@ -0,0 +1,55 @@ +#' @inherit shiny::tableOutput params return title description details sections references +#' +#' @inheritParams output_text +#' +#' @seealso [render_table()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_table <- function(id) { + shiny::tableOutput(outputId = id) +} + +#' @inherit shiny::renderTable params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_table", "renderTable")` +#' +#' @seealso [output_table()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_table <- function( + expr, + ..., + striped = FALSE, + hover = FALSE, + bordered = FALSE, + spacing = c("s", "xs", "m", "l"), + width = "auto", + align = NULL, + rownames = FALSE, + colnames = TRUE, + digits = NULL, + na = "NA", + env = parent.frame(), + quoted = FALSE, + outputArgs = list() +) { + shiny::renderTable( + expr = expr, + striped = striped, + hover = hover, + bordered = bordered, + spacing = spacing, + width = width, + align = align, + rownames = rownames, + colnames = colnames, + digits = digits, + na = na, + ..., + env = env, + quoted = quoted, + outputArgs = outputArgs + ) +} diff --git a/R/shiny-output_text.R b/R/shiny-output_text.R new file mode 100644 index 000000000..babbb0442 --- /dev/null +++ b/R/shiny-output_text.R @@ -0,0 +1,37 @@ +#' @inherit shiny::textOutput params return title description details sections references +#' +#' @seealso [render_text()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_text <- function( + id, + inline = FALSE, + container = if (inline) span else div +) { + shiny::textOutput(outputId = id, container = container, inline = inline) +} + +#' @inherit shiny::renderText params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_text", "renderText")` +#' +#' @seealso [output_text()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_text <- function( + expr, + env = parent.frame(), + quoted = FALSE, + outputArgs = list(), + sep = " " +) { + shiny::renderText( + expr = expr, + env = env, + quoted = quoted, + outputArgs = outputArgs, + sep = sep + ) +} diff --git a/R/shiny-output_text_verbatim.R b/R/shiny-output_text_verbatim.R new file mode 100644 index 000000000..8da9ec705 --- /dev/null +++ b/R/shiny-output_text_verbatim.R @@ -0,0 +1,38 @@ +#' @inherit shiny::verbatimTextOutput params return title description details sections references +#' +#' @inheritParams output_text +#' +#' @seealso [render_text_verbatim()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_text_verbatim <- function( + id, + placeholder = FALSE +) { + shiny::verbatimTextOutput(outputId = id, placeholder = placeholder) +} + +#' @inherit shiny::renderPrint params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_text_verbatim", "renderPrint")` +#' +#' @seealso [output_text_verbatim()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_text_verbatim <- function( + expr, + env = parent.frame(), + quoted = FALSE, + width = getOption("width"), + outputArgs = list() +) { + shiny::renderPrint( + expr = expr, + env = env, + quoted = quoted, + width = width, + outputArgs = outputArgs + ) +} diff --git a/R/shiny-output_ui.R b/R/shiny-output_ui.R new file mode 100644 index 000000000..f6fcb0f56 --- /dev/null +++ b/R/shiny-output_ui.R @@ -0,0 +1,40 @@ +#' @inherit shiny::uiOutput params return title description details sections references +#' +#' @inheritParams output_text +#' +#' @seealso [render_ui()] to reactively update the `new_output()`. +#' +#' @family Shiny output aliases +#' @export +output_ui <- function( + id, + ..., + inline = FALSE, + container = if (inline) span else div, + fill = FALSE +) { + shiny::uiOutput( + outputId = id, + inline = inline, + container = container, + fill = fill, + ... + ) +} + +#' @inherit shiny::renderUI params return title description details sections references +#' +#' @section Aliased from Shiny: `r docs_callout_shiny_alias("render_ui", "renderUI")` +#' +#' @seealso [output_ui()] to create an output in the UI. +#' +#' @family Shiny render aliases +#' @export +render_ui <- function( + expr, + env = parent.frame(), + quoted = FALSE, + outputArgs = list() +) { + shiny::renderUI(expr = expr, env = env, quoted = quoted, outputArgs = outputArgs) +} diff --git a/_pkgdown.yml b/_pkgdown.yml index 378a92a74..7945035fc 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -218,6 +218,12 @@ reference: - subtitle: Shiny Input Updating Functions contents: - has_concept("Shiny update aliases") +- subtitle: Shiny Output Functions + contents: + - has_concept("Shiny output aliases") +- subtitle: Shiny Render Functions + contents: + - has_concept("Shiny render aliases") - title: Theming desc: > diff --git a/man/output_image.Rd b/man/output_image.Rd new file mode 100644 index 000000000..eec5496ab --- /dev/null +++ b/man/output_image.Rd @@ -0,0 +1,117 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-output_image.R +\name{output_image} +\alias{output_image} +\title{Create an plot or image output element} +\usage{ +output_image( + id, + width = "100\%", + height = "400px", + ..., + click = NULL, + dblclick = NULL, + hover = NULL, + brush = NULL, + inline = FALSE, + fill = FALSE +) +} +\arguments{ +\item{width, height}{Image width/height. Must be a valid CSS unit (like +\code{"100\%"}, \code{"400px"}, \code{"auto"}) or a number, which will be +coerced to a string and have \code{"px"} appended. These two arguments are +ignored when \code{inline = TRUE}, in which case the width/height of a plot +must be specified in \code{renderPlot()}. Note that, for height, using +\code{"auto"} or \code{"100\%"} generally will not work as expected, +because of how height is computed with HTML/CSS.} + +\item{...}{Ignored, included for future expansion.} + +\item{click}{This can be \code{NULL} (the default), a string, or an object +created by the \code{\link[shiny:clickOpts]{clickOpts()}} function. If you use a value like +\code{"plot_click"} (or equivalently, \code{clickOpts(id="plot_click")}), +the plot will send coordinates to the server whenever it is clicked, and +the value will be accessible via \code{input$plot_click}. The value will be +a named list with \code{x} and \code{y} elements indicating the mouse +position.} + +\item{dblclick}{This is just like the \code{click} argument, but for +double-click events.} + +\item{hover}{Similar to the \code{click} argument, this can be \code{NULL} +(the default), a string, or an object created by the +\code{\link[shiny:hoverOpts]{hoverOpts()}} function. If you use a value like +\code{"plot_hover"} (or equivalently, \code{hoverOpts(id="plot_hover")}), +the plot will send coordinates to the server pauses on the plot, and the +value will be accessible via \code{input$plot_hover}. The value will be a +named list with \code{x} and \code{y} elements indicating the mouse +position. To control the hover time or hover delay type, you must use +\code{\link[shiny:hoverOpts]{hoverOpts()}}.} + +\item{brush}{Similar to the \code{click} argument, this can be \code{NULL} +(the default), a string, or an object created by the +\code{\link[shiny:brushOpts]{brushOpts()}} function. If you use a value like +\code{"plot_brush"} (or equivalently, \code{brushOpts(id="plot_brush")}), +the plot will allow the user to "brush" in the plotting area, and will send +information about the brushed area to the server, and the value will be +accessible via \code{input$plot_brush}. Brushing means that the user will +be able to draw a rectangle in the plotting area and drag it around. The +value will be a named list with \code{xmin}, \code{xmax}, \code{ymin}, and +\code{ymax} elements indicating the brush area. To control the brush +behavior, use \code{\link[shiny:brushOpts]{brushOpts()}}. Multiple +\code{imageOutput}/\code{plotOutput} calls may share the same \code{id} +value; brushing one image or plot will cause any other brushes with the +same \code{id} to disappear.} + +\item{inline}{use an inline (\code{span()}) or block container (\code{div()}) +for the output} + +\item{fill}{Whether or not the returned tag should be treated as a fill item, +meaning that its \code{height} is allowed to grow/shrink to fit a fill container +with an opinionated height (see \code{\link[htmltools:bindFillRole]{htmltools::bindFillRole()}}) with an +opinionated height. Examples of fill containers include \code{bslib::card()} and +\code{bslib::card_body_fill()}.} +} +\value{ +A plot or image output element that can be included in a panel. +} +\description{ +Render a \code{\link[shiny:renderPlot]{renderPlot()}} or \code{\link[shiny:renderImage]{renderImage()}} within an +application page. +} +\section{Interactive plots}{ + + + +Plots and images in Shiny support mouse-based interaction, via clicking, +double-clicking, hovering, and brushing. When these interaction events +occur, the mouse coordinates will be sent to the server as \verb{input$} +variables, as specified by \code{click}, \code{dblclick}, \code{hover}, or +\code{brush}. + +For \code{plotOutput}, the coordinates will be sent scaled to the data +space, if possible. (At the moment, plots generated by base graphics and +ggplot2 support this scaling, although plots generated by lattice and +others do not.) If scaling is not possible, the raw pixel coordinates will +be sent. For \code{imageOutput}, the coordinates will be sent in raw pixel +coordinates. + +With ggplot2 graphics, the code in \code{renderPlot} should return a ggplot +object; if instead the code prints the ggplot2 object with something like +\code{print(p)}, then the coordinates for interactive graphics will not be +properly scaled to the data space. + +} + +\seealso{ +\code{\link[=render_image]{render_image()}} to reactively update the \code{new_output()}. + +Other Shiny output aliases: +\code{\link{output_plot}()}, +\code{\link{output_table}()}, +\code{\link{output_text}()}, +\code{\link{output_text_verbatim}()}, +\code{\link{output_ui}()} +} +\concept{Shiny output aliases} diff --git a/man/output_plot.Rd b/man/output_plot.Rd new file mode 100644 index 000000000..763be7da2 --- /dev/null +++ b/man/output_plot.Rd @@ -0,0 +1,117 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-output_plot.R +\name{output_plot} +\alias{output_plot} +\title{Create an plot or image output element} +\usage{ +output_plot( + id, + width = "100\%", + height = "400px", + ..., + click = NULL, + dblclick = NULL, + hover = NULL, + brush = NULL, + inline = FALSE, + fill = !inline +) +} +\arguments{ +\item{width, height}{Image width/height. Must be a valid CSS unit (like +\code{"100\%"}, \code{"400px"}, \code{"auto"}) or a number, which will be +coerced to a string and have \code{"px"} appended. These two arguments are +ignored when \code{inline = TRUE}, in which case the width/height of a plot +must be specified in \code{renderPlot()}. Note that, for height, using +\code{"auto"} or \code{"100\%"} generally will not work as expected, +because of how height is computed with HTML/CSS.} + +\item{...}{Ignored, included for future expansion.} + +\item{click}{This can be \code{NULL} (the default), a string, or an object +created by the \code{\link[shiny:clickOpts]{clickOpts()}} function. If you use a value like +\code{"plot_click"} (or equivalently, \code{clickOpts(id="plot_click")}), +the plot will send coordinates to the server whenever it is clicked, and +the value will be accessible via \code{input$plot_click}. The value will be +a named list with \code{x} and \code{y} elements indicating the mouse +position.} + +\item{dblclick}{This is just like the \code{click} argument, but for +double-click events.} + +\item{hover}{Similar to the \code{click} argument, this can be \code{NULL} +(the default), a string, or an object created by the +\code{\link[shiny:hoverOpts]{hoverOpts()}} function. If you use a value like +\code{"plot_hover"} (or equivalently, \code{hoverOpts(id="plot_hover")}), +the plot will send coordinates to the server pauses on the plot, and the +value will be accessible via \code{input$plot_hover}. The value will be a +named list with \code{x} and \code{y} elements indicating the mouse +position. To control the hover time or hover delay type, you must use +\code{\link[shiny:hoverOpts]{hoverOpts()}}.} + +\item{brush}{Similar to the \code{click} argument, this can be \code{NULL} +(the default), a string, or an object created by the +\code{\link[shiny:brushOpts]{brushOpts()}} function. If you use a value like +\code{"plot_brush"} (or equivalently, \code{brushOpts(id="plot_brush")}), +the plot will allow the user to "brush" in the plotting area, and will send +information about the brushed area to the server, and the value will be +accessible via \code{input$plot_brush}. Brushing means that the user will +be able to draw a rectangle in the plotting area and drag it around. The +value will be a named list with \code{xmin}, \code{xmax}, \code{ymin}, and +\code{ymax} elements indicating the brush area. To control the brush +behavior, use \code{\link[shiny:brushOpts]{brushOpts()}}. Multiple +\code{imageOutput}/\code{plotOutput} calls may share the same \code{id} +value; brushing one image or plot will cause any other brushes with the +same \code{id} to disappear.} + +\item{inline}{use an inline (\code{span()}) or block container (\code{div()}) +for the output} + +\item{fill}{Whether or not the returned tag should be treated as a fill item, +meaning that its \code{height} is allowed to grow/shrink to fit a fill container +with an opinionated height (see \code{\link[htmltools:bindFillRole]{htmltools::bindFillRole()}}) with an +opinionated height. Examples of fill containers include \code{bslib::card()} and +\code{bslib::card_body_fill()}.} +} +\value{ +A plot or image output element that can be included in a panel. +} +\description{ +Render a \code{\link[shiny:renderPlot]{renderPlot()}} or \code{\link[shiny:renderImage]{renderImage()}} within an +application page. +} +\section{Interactive plots}{ + + + +Plots and images in Shiny support mouse-based interaction, via clicking, +double-clicking, hovering, and brushing. When these interaction events +occur, the mouse coordinates will be sent to the server as \verb{input$} +variables, as specified by \code{click}, \code{dblclick}, \code{hover}, or +\code{brush}. + +For \code{plotOutput}, the coordinates will be sent scaled to the data +space, if possible. (At the moment, plots generated by base graphics and +ggplot2 support this scaling, although plots generated by lattice and +others do not.) If scaling is not possible, the raw pixel coordinates will +be sent. For \code{imageOutput}, the coordinates will be sent in raw pixel +coordinates. + +With ggplot2 graphics, the code in \code{renderPlot} should return a ggplot +object; if instead the code prints the ggplot2 object with something like +\code{print(p)}, then the coordinates for interactive graphics will not be +properly scaled to the data space. + +} + +\seealso{ +\code{\link[=render_plot]{render_plot()}} to reactively update the \code{new_output()}. + +Other Shiny output aliases: +\code{\link{output_image}()}, +\code{\link{output_table}()}, +\code{\link{output_text}()}, +\code{\link{output_text_verbatim}()}, +\code{\link{output_ui}()} +} +\concept{Shiny output aliases} diff --git a/man/output_table.Rd b/man/output_table.Rd new file mode 100644 index 000000000..f135e2122 --- /dev/null +++ b/man/output_table.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-output_table.R +\name{output_table} +\alias{output_table} +\title{Table Output} +\usage{ +output_table(id) +} +\description{ +The \code{tableOuptut()}/\code{renderTable()} pair creates a reactive table that is +suitable for display small matrices and data frames. The columns are +formatted with \code{\link[xtable:xtable]{xtable::xtable()}}. + +See \code{\link[shiny:renderDataTable]{renderDataTable()}} for data frames that are too big to fit on a single +page. +} +\seealso{ +\code{\link[=render_table]{render_table()}} to reactively update the \code{new_output()}. + +Other Shiny output aliases: +\code{\link{output_image}()}, +\code{\link{output_plot}()}, +\code{\link{output_text}()}, +\code{\link{output_text_verbatim}()}, +\code{\link{output_ui}()} +} +\concept{Shiny output aliases} diff --git a/man/output_text.Rd b/man/output_text.Rd new file mode 100644 index 000000000..2591977e5 --- /dev/null +++ b/man/output_text.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/shiny-output_text.R +\name{output_text} +\alias{output_text} +\title{Create a text output element} +\usage{ +output_text(id, inline = FALSE, container = if (inline) span else div) +} +\arguments{ +\item{inline}{use an inline (\code{span()}) or block container (\code{div()}) +for the output} + +\item{container}{a function to generate an HTML element to contain the text} +} +\value{ +An output element for use in UI. +} +\description{ +Render a reactive output variable as text within an application page. +\code{textOutput()} is usually paired with \code{\link[shiny:renderText]{renderText()}} and puts regular text +in \verb{
} or \verb{}; \code{verbatimTextOutput()} is usually paired with +\code{\link[shiny:renderPrint]{renderPrint()}} and provides fixed-width text in a \verb{
}.
+}
+\details{
+In both functions, text is HTML-escaped prior to rendering.
+}
+\seealso{
+\code{\link[=render_text]{render_text()}} to reactively update the \code{new_output()}.
+
+Other Shiny output aliases: 
+\code{\link{output_image}()},
+\code{\link{output_plot}()},
+\code{\link{output_table}()},
+\code{\link{output_text_verbatim}()},
+\code{\link{output_ui}()}
+}
+\concept{Shiny output aliases}
diff --git a/man/output_text_verbatim.Rd b/man/output_text_verbatim.Rd
new file mode 100644
index 000000000..42ade4419
--- /dev/null
+++ b/man/output_text_verbatim.Rd
@@ -0,0 +1,36 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_text_verbatim.R
+\name{output_text_verbatim}
+\alias{output_text_verbatim}
+\title{Create a text output element}
+\usage{
+output_text_verbatim(id, placeholder = FALSE)
+}
+\arguments{
+\item{placeholder}{if the output is empty or \code{NULL}, should an empty
+rectangle be displayed to serve as a placeholder? (does not affect
+behavior when the output is nonempty)}
+}
+\value{
+An output element for use in UI.
+}
+\description{
+Render a reactive output variable as text within an application page.
+\code{textOutput()} is usually paired with \code{\link[shiny:renderText]{renderText()}} and puts regular text
+in \verb{
} or \verb{}; \code{verbatimTextOutput()} is usually paired with +\code{\link[shiny:renderPrint]{renderPrint()}} and provides fixed-width text in a \verb{
}.
+}
+\details{
+In both functions, text is HTML-escaped prior to rendering.
+}
+\seealso{
+\code{\link[=render_text_verbatim]{render_text_verbatim()}} to reactively update the \code{new_output()}.
+
+Other Shiny output aliases: 
+\code{\link{output_image}()},
+\code{\link{output_plot}()},
+\code{\link{output_table}()},
+\code{\link{output_text}()},
+\code{\link{output_ui}()}
+}
+\concept{Shiny output aliases}
diff --git a/man/output_ui.Rd b/man/output_ui.Rd
new file mode 100644
index 000000000..9363ddd75
--- /dev/null
+++ b/man/output_ui.Rd
@@ -0,0 +1,53 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_ui.R
+\name{output_ui}
+\alias{output_ui}
+\title{Create an HTML output element}
+\usage{
+output_ui(
+  id,
+  ...,
+  inline = FALSE,
+  container = if (inline) span else div,
+  fill = FALSE
+)
+}
+\arguments{
+\item{...}{Other arguments to pass to the container tag function. This is
+useful for providing additional classes for the tag.}
+
+\item{inline}{use an inline (\code{span()}) or block container (\code{div()})
+for the output}
+
+\item{container}{a function to generate an HTML element to contain the text}
+
+\item{fill}{If \code{TRUE}, the result of \code{container} is treated as \emph{both} a fill
+item and container (see \code{\link[htmltools:bindFillRole]{htmltools::bindFillRole()}}), which means both the
+\code{container} as well as its immediate children (i.e., the result of
+\code{renderUI()}) are allowed to grow/shrink to fit a fill container with an
+opinionated height. Set \code{fill = "item"} or \code{fill = "container"} to treat
+\code{container} as just a fill item or a fill container.}
+}
+\value{
+An HTML output element that can be included in a panel
+}
+\description{
+Render a reactive output variable as HTML within an application page. The
+text will be included within an HTML \code{div} tag, and is presumed to contain
+HTML content which should not be escaped.
+}
+\details{
+\code{uiOutput} is intended to be used with \code{renderUI} on the server side. It is
+currently just an alias for \code{htmlOutput}.
+}
+\seealso{
+\code{\link[=render_ui]{render_ui()}} to reactively update the \code{new_output()}.
+
+Other Shiny output aliases: 
+\code{\link{output_image}()},
+\code{\link{output_plot}()},
+\code{\link{output_table}()},
+\code{\link{output_text}()},
+\code{\link{output_text_verbatim}()}
+}
+\concept{Shiny output aliases}
diff --git a/man/render_image.Rd b/man/render_image.Rd
new file mode 100644
index 000000000..9fcc7f54b
--- /dev/null
+++ b/man/render_image.Rd
@@ -0,0 +1,74 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_image.R
+\name{render_image}
+\alias{render_image}
+\title{Image file output}
+\usage{
+render_image(
+  expr,
+  env = parent.frame(),
+  quoted = FALSE,
+  deleteFile,
+  outputArgs = list()
+)
+}
+\arguments{
+\item{expr}{An expression that returns a list.}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{deleteFile}{Should the file in \code{func()$src} be deleted after
+it is sent to the client browser? Generally speaking, if the image is a
+temp file generated within \code{func}, then this should be \code{TRUE};
+if the image is not a temp file, this should be \code{FALSE}. (For backward
+compatibility reasons, if this argument is missing, a warning will be
+emitted, and if the file is in the temp directory it will be deleted. In
+the future, this warning will become an error.)}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:imageOutput]{imageOutput()}} when \code{renderImage} is used in an
+interactive R Markdown document.}
+}
+\description{
+Renders a reactive image that is suitable for assigning to an \code{output}
+slot.
+}
+\details{
+The expression \code{expr} must return a list containing the attributes for
+the \code{img} object on the client web page. For the image to display,
+properly, the list must have at least one entry, \code{src}, which is the
+path to the image file. It may also useful to have a \code{contentType}
+entry specifying the MIME type of the image. If one is not provided,
+\code{renderImage} will try to autodetect the type, based on the file
+extension.
+
+Other elements such as \code{width}, \code{height}, \code{class}, and
+\code{alt}, can also be added to the list, and they will be used as
+attributes in the \code{img} object.
+
+The corresponding HTML output tag should be \code{div} or \code{img} and have
+the CSS class name \code{shiny-image-output}.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderImage()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderImage()} with \code{render_image()}.
+}
+
+\seealso{
+\code{\link[=output_image]{output_image()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_plot}()},
+\code{\link{render_table}()},
+\code{\link{render_text}()},
+\code{\link{render_text_verbatim}()},
+\code{\link{render_ui}()}
+}
+\concept{Shiny render aliases}
diff --git a/man/render_plot.Rd b/man/render_plot.Rd
new file mode 100644
index 000000000..c990a4dce
--- /dev/null
+++ b/man/render_plot.Rd
@@ -0,0 +1,109 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_plot.R
+\name{render_plot}
+\alias{render_plot}
+\title{Plot Output}
+\usage{
+render_plot(
+  expr,
+  width = "auto",
+  height = "auto",
+  res = 72,
+  ...,
+  alt = NA,
+  env = parent.frame(),
+  quoted = FALSE,
+  execOnResize = FALSE,
+  outputArgs = list()
+)
+}
+\arguments{
+\item{expr}{An expression that generates a plot.}
+
+\item{width, height}{Height and width can be specified in three ways:
+\itemize{
+\item \code{"auto"}, the default, uses the size specified by \code{\link[shiny:plotOutput]{plotOutput()}}
+(i.e. the \code{offsetWidth}/`offsetHeight`` of the HTML element bound to
+this plot.)
+\item An integer, defining the width/height in pixels.
+\item A function that returns the width/height in pixels (or \code{"auto"}).
+The function is executed in a reactive context so that you can refer to
+reactive values and expression to make the width/height reactive.
+}
+
+When rendering an inline plot, you must provide numeric values (in pixels)
+to both \code{width} and \code{height}.}
+
+\item{res}{Resolution of resulting plot, in pixels per inch. This value is
+passed to \code{\link[shiny:plotPNG]{plotPNG()}}. Note that this affects the resolution of PNG
+rendering in R; it won't change the actual ppi of the browser.}
+
+\item{...}{Arguments to be passed through to \code{\link[shiny:plotPNG]{plotPNG()}}.
+These can be used to set the width, height, background color, etc.}
+
+\item{alt}{Alternate text for the HTML \verb{} tag if it cannot be displayed
+or viewed (i.e., the user uses a screen reader). In addition to a character
+string, the value may be a reactive expression (or a function referencing
+reactive values) that returns a character string. If the value is \code{NA} (the
+default), then \code{ggplot2::get_alt_text()} is used to extract alt text from
+ggplot objects; for other plots, \code{NA} results in alt text of "Plot object".
+\code{NULL} or \code{""} is not recommended because those should be limited to
+decorative images.}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{execOnResize}{If \code{FALSE} (the default), then when a plot is
+resized, Shiny will \emph{replay} the plot drawing commands with
+\code{\link[grDevices:recordplot]{grDevices::replayPlot()}} instead of re-executing \code{expr}.
+This can result in faster plot redrawing, but there may be rare cases where
+it is undesirable. If you encounter problems when resizing a plot, you can
+have Shiny re-execute the code on resize by setting this to \code{TRUE}.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:plotOutput]{plotOutput()}} when \code{renderPlot} is used in an
+interactive R Markdown document.}
+}
+\description{
+Renders a reactive plot that is suitable for assigning to an \code{output}
+slot.
+}
+\details{
+The corresponding HTML output tag should be \code{div} or \code{img} and have
+the CSS class name \code{shiny-plot-output}.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderPlot()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderPlot()} with \code{render_plot()}.
+}
+
+\section{Interactive plots}{
+
+
+
+With ggplot2 graphics, the code in \code{renderPlot} should return a ggplot
+object; if instead the code prints the ggplot2 object with something like
+\code{print(p)}, then the coordinates for interactive graphics will not be
+properly scaled to the data space.
+
+See \code{\link[shiny:plotOutput]{plotOutput()}} for more information about interactive plots.
+
+}
+
+\seealso{
+\code{\link[=output_plot]{output_plot()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_image}()},
+\code{\link{render_table}()},
+\code{\link{render_text}()},
+\code{\link{render_text_verbatim}()},
+\code{\link{render_ui}()}
+}
+\concept{Shiny render aliases}
diff --git a/man/render_table.Rd b/man/render_table.Rd
new file mode 100644
index 000000000..041171328
--- /dev/null
+++ b/man/render_table.Rd
@@ -0,0 +1,105 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_table.R
+\name{render_table}
+\alias{render_table}
+\title{Table Output}
+\usage{
+render_table(
+  expr,
+  ...,
+  striped = FALSE,
+  hover = FALSE,
+  bordered = FALSE,
+  spacing = c("s", "xs", "m", "l"),
+  width = "auto",
+  align = NULL,
+  rownames = FALSE,
+  colnames = TRUE,
+  digits = NULL,
+  na = "NA",
+  env = parent.frame(),
+  quoted = FALSE,
+  outputArgs = list()
+)
+}
+\arguments{
+\item{expr}{An expression that returns an R object that can be used with
+\code{\link[xtable:xtable]{xtable::xtable()}}.}
+
+\item{...}{Arguments to be passed through to \code{\link[xtable:xtable]{xtable::xtable()}}
+and \code{\link[xtable:print.xtable]{xtable::print.xtable()}}.}
+
+\item{striped, hover, bordered}{Logicals: if \code{TRUE}, apply the
+corresponding Bootstrap table format to the output table.}
+
+\item{spacing}{The spacing between the rows of the table (\code{xs}
+stands for "extra small", \code{s} for "small", \code{m} for "medium"
+and \code{l} for "large").}
+
+\item{width}{Table width. Must be a valid CSS unit (like "100\%", "400px",
+"auto") or a number, which will be coerced to a string and
+have "px" appended.}
+
+\item{align}{A string that specifies the column alignment. If equal to
+\code{'l'}, \code{'c'} or \code{'r'}, then all columns will be,
+respectively, left-, center- or right-aligned. Otherwise, \code{align}
+must have the same number of characters as the resulting table (if
+\code{rownames = TRUE}, this will be equal to \code{ncol()+1}), with
+the \emph{i}-th character specifying the alignment for the
+\emph{i}-th column (besides \code{'l'}, \code{'c'} and
+\code{'r'}, \code{'?'} is also permitted - \code{'?'} is a placeholder
+for that particular column, indicating that it should keep its default
+alignment). If \code{NULL}, then all numeric/integer columns (including
+the row names, if they are numbers) will be right-aligned and
+everything else will be left-aligned (\code{align = '?'} produces the
+same result).}
+
+\item{rownames, colnames}{Logicals: include rownames? include colnames
+(column headers)?}
+
+\item{digits}{An integer specifying the number of decimal places for
+the numeric columns (this will not apply to columns with an integer
+class). If \code{digits} is set to a negative value, then the numeric
+columns will be displayed in scientific format with a precision of
+\code{abs(digits)} digits.}
+
+\item{na}{The string to use in the table cells whose values are missing
+(i.e. they either evaluate to \code{NA} or \code{NaN}).}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{outputArgs}{A list of arguments to be passed through to the
+implicit call to \code{\link[shiny:tableOutput]{tableOutput()}} when \code{renderTable} is
+used in an interactive R Markdown document.}
+}
+\description{
+The \code{tableOuptut()}/\code{renderTable()} pair creates a reactive table that is
+suitable for display small matrices and data frames. The columns are
+formatted with \code{\link[xtable:xtable]{xtable::xtable()}}.
+
+See \code{\link[shiny:renderDataTable]{renderDataTable()}} for data frames that are too big to fit on a single
+page.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderTable()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderTable()} with \code{render_table()}.
+}
+
+\seealso{
+\code{\link[=output_table]{output_table()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_image}()},
+\code{\link{render_plot}()},
+\code{\link{render_text}()},
+\code{\link{render_text_verbatim}()},
+\code{\link{render_ui}()}
+}
+\concept{Shiny render aliases}
diff --git a/man/render_text.Rd b/man/render_text.Rd
new file mode 100644
index 000000000..1a112d156
--- /dev/null
+++ b/man/render_text.Rd
@@ -0,0 +1,68 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_text.R
+\name{render_text}
+\alias{render_text}
+\title{Text Output}
+\usage{
+render_text(
+  expr,
+  env = parent.frame(),
+  quoted = FALSE,
+  outputArgs = list(),
+  sep = " "
+)
+}
+\arguments{
+\item{expr}{An expression to evaluate.}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:verbatimTextOutput]{verbatimTextOutput()}} or \code{\link[shiny:textOutput]{textOutput()}} when the functions are
+used in an interactive RMarkdown document.}
+
+\item{sep}{A separator passed to \code{cat} to be appended after each
+element.}
+}
+\value{
+For \code{renderPrint()}, note the given expression returns \code{NULL} then \code{NULL}
+will actually be visible in the output. To display nothing, make your
+function return \code{\link[=invisible]{invisible()}}.
+}
+\description{
+\code{renderPrint()} prints the result of \code{expr}, while \code{renderText()} pastes it
+together into a single string. \code{renderPrint()} is equivalent to \code{\link[=print]{print()}};
+\code{renderText()} is equivalent to \code{\link[=cat]{cat()}}. Both functions capture all other
+printed output generated while evaluating \code{expr}.
+
+\code{renderPrint()} is usually paired with \code{\link[shiny:verbatimTextOutput]{verbatimTextOutput()}};
+\code{renderText()} is usually paired with \code{\link[shiny:textOutput]{textOutput()}}.
+}
+\details{
+The corresponding HTML output tag can be anything (though \code{pre} is
+recommended if you need a monospace font and whitespace preserved) and should
+have the CSS class name \code{shiny-text-output}.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderText()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderText()} with \code{render_text()}.
+}
+
+\seealso{
+\code{\link[=output_text]{output_text()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_image}()},
+\code{\link{render_plot}()},
+\code{\link{render_table}()},
+\code{\link{render_text_verbatim}()},
+\code{\link{render_ui}()}
+}
+\concept{Shiny render aliases}
diff --git a/man/render_text_verbatim.Rd b/man/render_text_verbatim.Rd
new file mode 100644
index 000000000..62b5a6d01
--- /dev/null
+++ b/man/render_text_verbatim.Rd
@@ -0,0 +1,67 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_text_verbatim.R
+\name{render_text_verbatim}
+\alias{render_text_verbatim}
+\title{Text Output}
+\usage{
+render_text_verbatim(
+  expr,
+  env = parent.frame(),
+  quoted = FALSE,
+  width = getOption("width"),
+  outputArgs = list()
+)
+}
+\arguments{
+\item{expr}{An expression to evaluate.}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{width}{Width of printed output.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:verbatimTextOutput]{verbatimTextOutput()}} or \code{\link[shiny:textOutput]{textOutput()}} when the functions are
+used in an interactive RMarkdown document.}
+}
+\value{
+For \code{renderPrint()}, note the given expression returns \code{NULL} then \code{NULL}
+will actually be visible in the output. To display nothing, make your
+function return \code{\link[=invisible]{invisible()}}.
+}
+\description{
+\code{renderPrint()} prints the result of \code{expr}, while \code{renderText()} pastes it
+together into a single string. \code{renderPrint()} is equivalent to \code{\link[=print]{print()}};
+\code{renderText()} is equivalent to \code{\link[=cat]{cat()}}. Both functions capture all other
+printed output generated while evaluating \code{expr}.
+
+\code{renderPrint()} is usually paired with \code{\link[shiny:verbatimTextOutput]{verbatimTextOutput()}};
+\code{renderText()} is usually paired with \code{\link[shiny:textOutput]{textOutput()}}.
+}
+\details{
+The corresponding HTML output tag can be anything (though \code{pre} is
+recommended if you need a monospace font and whitespace preserved) and should
+have the CSS class name \code{shiny-text-output}.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderPrint()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderPrint()} with \code{render_text_verbatim()}.
+}
+
+\seealso{
+\code{\link[=output_text_verbatim]{output_text_verbatim()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_image}()},
+\code{\link{render_plot}()},
+\code{\link{render_table}()},
+\code{\link{render_text}()},
+\code{\link{render_ui}()}
+}
+\concept{Shiny render aliases}
diff --git a/man/render_ui.Rd b/man/render_ui.Rd
new file mode 100644
index 000000000..1fbbff5e4
--- /dev/null
+++ b/man/render_ui.Rd
@@ -0,0 +1,48 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-output_ui.R
+\name{render_ui}
+\alias{render_ui}
+\title{UI Output}
+\usage{
+render_ui(expr, env = parent.frame(), quoted = FALSE, outputArgs = list())
+}
+\arguments{
+\item{expr}{An expression that returns a Shiny tag object, \code{\link[shiny:HTML]{HTML()}},
+or a list of such objects.}
+
+\item{env}{The parent environment for the reactive expression. By default,
+this is the calling environment, the same as when defining an ordinary
+non-reactive expression. If \code{expr} is a quosure and \code{quoted} is \code{TRUE},
+then \code{env} is ignored.}
+
+\item{quoted}{If it is \code{TRUE}, then the \code{\link[=quote]{quote()}}ed value of \code{expr}
+will be used when \code{expr} is evaluated. If \code{expr} is a quosure and you
+would like to use its expression as a value for \code{expr}, then you must set
+\code{quoted} to \code{TRUE}.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:uiOutput]{uiOutput()}} when \code{renderUI} is used in an
+interactive R Markdown document.}
+}
+\description{
+Renders reactive HTML using the Shiny UI library.
+}
+\details{
+The corresponding HTML output tag should be \code{div} and have the CSS class
+name \code{shiny-html-output} (or use \code{\link[shiny:uiOutput]{uiOutput()}}).
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::renderUI()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderUI()} with \code{render_ui()}.
+}
+
+\seealso{
+\code{\link[=output_ui]{output_ui()}} to create an output in the UI.
+
+Other Shiny render aliases: 
+\code{\link{render_image}()},
+\code{\link{render_plot}()},
+\code{\link{render_table}()},
+\code{\link{render_text}()},
+\code{\link{render_text_verbatim}()}
+}
+\concept{Shiny render aliases}

From 2287726b0d961bbae6e9eb9c040dde9bd9fe8534 Mon Sep 17 00:00:00 2001
From: Garrick Aden-Buie 
Date: Fri, 14 Jun 2024 16:51:48 -0400
Subject: [PATCH 18/24] docs: Move Shiny aliases after theming section in
 reference

---
 _pkgdown.yml | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/_pkgdown.yml b/_pkgdown.yml
index 7945035fc..429207275 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -204,27 +204,6 @@ reference:
     - input_task_button
     - bind_task_button
 
-- title: Shiny Aliases
-  desc: >
-    These functions are generally aliases for their counterparts in Shiny, but
-    using modern naming conventions that are consistent with bslib and are
-    more in line with the conventions of the broader R community.
-
-    In the future, we may update these functions to take advantage of newer
-    Bootstrap features.
-- subtitle: Shiny Inputs
-  contents:
-    - has_concept("Shiny input aliases")
-- subtitle: Shiny Input Updating Functions
-  contents:
-  - has_concept("Shiny update aliases")
-- subtitle: Shiny Output Functions
-  contents:
-  - has_concept("Shiny output aliases")
-- subtitle: Shiny Render Functions
-  contents:
-  - has_concept("Shiny render aliases")
-
 - title: Theming
   desc: >
     bslib provides a flexible interface for customizing Bootstrap themes. You
@@ -271,6 +250,27 @@ reference:
   contents:
     - bs_remove
 
+- title: Shiny Aliases
+  desc: >
+    These functions are generally aliases for their counterparts in Shiny, but
+    using modern naming conventions that are consistent with bslib and are
+    more in line with the conventions of the broader R community.
+
+    In the future, we may update these functions to take advantage of newer
+    Bootstrap features.
+- subtitle: Shiny Inputs
+  contents:
+    - has_concept("Shiny input aliases")
+- subtitle: Shiny Input Updating Functions
+  contents:
+  - has_concept("Shiny update aliases")
+- subtitle: Shiny Output Functions
+  contents:
+  - has_concept("Shiny output aliases")
+- subtitle: Shiny Render Functions
+  contents:
+  - has_concept("Shiny render aliases")
+
 - title: Utility Functions
 - subtitle: Fill items and fillable containers
   desc: |

From c52d0d9278c85dbf95bd398a21cadbf3fca380a8 Mon Sep 17 00:00:00 2001
From: Garrick Aden-Buie 
Date: Fri, 14 Jun 2024 16:52:43 -0400
Subject: [PATCH 19/24] docs: tweak aliases callout

---
 DESCRIPTION                          | 2 +-
 R/{shiny-input.R => shiny-aliases.R} | 4 ++--
 man/input_action_button.Rd           | 2 +-
 man/input_action_link.Rd             | 2 +-
 man/input_checkbox.Rd                | 2 +-
 man/input_checkbox_group.Rd          | 2 +-
 man/input_date.Rd                    | 2 +-
 man/input_date_range.Rd              | 2 +-
 man/input_numeric.Rd                 | 2 +-
 man/input_password.Rd                | 2 +-
 man/input_radio_buttons.Rd           | 2 +-
 man/input_select.Rd                  | 2 +-
 man/input_selectize.Rd               | 2 +-
 man/input_slider.Rd                  | 2 +-
 man/input_text.Rd                    | 2 +-
 man/input_text_area.Rd               | 2 +-
 man/render_image.Rd                  | 2 +-
 man/render_plot.Rd                   | 2 +-
 man/render_table.Rd                  | 2 +-
 man/render_text.Rd                   | 2 +-
 man/render_text_verbatim.Rd          | 2 +-
 man/render_ui.Rd                     | 2 +-
 man/update_action_button.Rd          | 2 +-
 man/update_action_link.Rd            | 2 +-
 man/update_checkbox.Rd               | 2 +-
 man/update_checkbox_group.Rd         | 2 +-
 man/update_date.Rd                   | 2 +-
 man/update_date_range.Rd             | 2 +-
 man/update_numeric.Rd                | 2 +-
 man/update_radio_buttons.Rd          | 2 +-
 man/update_select.Rd                 | 2 +-
 man/update_selectize.Rd              | 2 +-
 man/update_slider.Rd                 | 2 +-
 man/update_text.Rd                   | 2 +-
 man/update_text_area.Rd              | 2 +-
 35 files changed, 36 insertions(+), 36 deletions(-)
 rename R/{shiny-input.R => shiny-aliases.R} (62%)

diff --git a/DESCRIPTION b/DESCRIPTION
index eb4aea852..f829c3da6 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -146,8 +146,8 @@ Collate:
     'popover.R'
     'precompiled.R'
     'print.R'
+    'shiny-aliases.R'
     'shiny-devmode.R'
-    'shiny-input.R'
     'shiny-input_action_button.R'
     'shiny-input_action_link.R'
     'shiny-input_checkbox.R'
diff --git a/R/shiny-input.R b/R/shiny-aliases.R
similarity index 62%
rename from R/shiny-input.R
rename to R/shiny-aliases.R
index 5826f5635..a4801efb1 100644
--- a/R/shiny-input.R
+++ b/R/shiny-aliases.R
@@ -3,8 +3,8 @@ docs_callout_shiny_alias <- function(new, old) {
     paste0(
       "This function is an alias for `shiny::%s()` and is included to ",
       "maintain more consistent naming conventions in Shiny apps that use ",
-      "\\pkg{bslib}. The documentation may still refer to the original ",
-      "function names. You can replace `shiny::%s()` with `%s()`."
+      "\\pkg{bslib}. The documentation on this page may still refer to the ",
+      "original function names. You can replace `shiny::%s()` with `%s()`."
     ),
     old, old, new
   )
diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd
index 0e653f1cd..1d3591c34 100644
--- a/man/input_action_button.Rd
+++ b/man/input_action_button.Rd
@@ -33,7 +33,7 @@ Creates an action button or link whose value is initially zero, and increments b
 each time it is pressed.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::actionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionButton()} with \code{input_action_button()}.
+ This function is an alias for \code{shiny::actionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::actionButton()} with \code{input_action_button()}.
 }
 
 \section{Server value}{
diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd
index d372d4e84..d4be4bf5d 100644
--- a/man/input_action_link.Rd
+++ b/man/input_action_link.Rd
@@ -21,7 +21,7 @@ Creates an action button or link whose value is initially zero, and increments b
 each time it is pressed.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::actionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::actionLink()} with \code{input_action_link()}.
+ This function is an alias for \code{shiny::actionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::actionLink()} with \code{input_action_link()}.
 }
 
 \section{Server value}{
diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd
index 7396891cf..53094c472 100644
--- a/man/input_checkbox.Rd
+++ b/man/input_checkbox.Rd
@@ -25,7 +25,7 @@ A checkbox control that can be added to a UI definition.
 Create a checkbox that can be used to specify logical values.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::checkboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxInput()} with \code{input_checkbox()}.
+ This function is an alias for \code{shiny::checkboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::checkboxInput()} with \code{input_checkbox()}.
 }
 
 \section{Server value}{
diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd
index 601c02374..cdee64856 100644
--- a/man/input_checkbox_group.Rd
+++ b/man/input_checkbox_group.Rd
@@ -55,7 +55,7 @@ independently. The server will receive the input as a character vector of the
 selected values.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::checkboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::checkboxGroupInput()} with \code{input_checkbox_group()}.
+ This function is an alias for \code{shiny::checkboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::checkboxGroupInput()} with \code{input_checkbox_group()}.
 }
 
 \section{Server value}{
diff --git a/man/input_date.Rd b/man/input_date.Rd
index 9ff3aef33..a0e1479ed 100644
--- a/man/input_date.Rd
+++ b/man/input_date.Rd
@@ -90,7 +90,7 @@ the browser. It allows the following values:
 }
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::dateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateInput()} with \code{input_date()}.
+ This function is an alias for \code{shiny::dateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::dateInput()} with \code{input_date()}.
 }
 
 \section{Server value}{
diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd
index 037180e7c..888eac545 100644
--- a/man/input_date_range.Rd
+++ b/man/input_date_range.Rd
@@ -90,7 +90,7 @@ the browser. It allows the following values:
 }
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::dateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::dateRangeInput()} with \code{input_date_range()}.
+ This function is an alias for \code{shiny::dateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::dateRangeInput()} with \code{input_date_range()}.
 }
 
 \section{Server value}{
diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd
index b440b8556..5209e3efd 100644
--- a/man/input_numeric.Rd
+++ b/man/input_numeric.Rd
@@ -40,7 +40,7 @@ A numeric input control that can be added to a UI definition.
 Create an input control for entry of numeric values
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::numericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::numericInput()} with \code{input_numeric()}.
+ This function is an alias for \code{shiny::numericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::numericInput()} with \code{input_numeric()}.
 }
 
 \section{Server value}{
diff --git a/man/input_password.Rd b/man/input_password.Rd
index fdf7338e1..e6e29246e 100644
--- a/man/input_password.Rd
+++ b/man/input_password.Rd
@@ -29,7 +29,7 @@ A text input control that can be added to a UI definition.
 Create an password control for entry of passwords.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::passwordInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::passwordInput()} with \code{input_password()}.
+ This function is an alias for \code{shiny::passwordInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::passwordInput()} with \code{input_password()}.
 }
 
 \section{Server value}{
diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd
index 739b813f6..dde294fcb 100644
--- a/man/input_radio_buttons.Rd
+++ b/man/input_radio_buttons.Rd
@@ -60,7 +60,7 @@ to return to that state once they've made a selection. Instead, consider
 having the first of your choices be \code{c("None selected" = "")}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::radioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::radioButtons()} with \code{input_radio_buttons()}.
+ This function is an alias for \code{shiny::radioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::radioButtons()} with \code{input_radio_buttons()}.
 }
 
 \section{Server value}{
diff --git a/man/input_select.Rd b/man/input_select.Rd
index 320e25f35..a5defe29b 100644
--- a/man/input_select.Rd
+++ b/man/input_select.Rd
@@ -73,7 +73,7 @@ on the Shiny Dev Center for details.
 }
 \section{Aliased from Shiny}{
 
-This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}.
+This function is an alias for \code{shiny::selectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::selectInput()} with \code{input_select()}.
 
 Note that, unlike in \code{\link[shiny:selectInput]{shiny::selectInput()}}, \code{input_select()} does not
 use selectize.js by default. Insttead, set \code{selectize = TRUE} or call
diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd
index 558ba972f..715c2b278 100644
--- a/man/input_selectize.Rd
+++ b/man/input_selectize.Rd
@@ -45,7 +45,7 @@ massively improves performance and efficiency; see
 on the Shiny Dev Center for details.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::selectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::selectizeInput()} with \code{input_selectize()}.
+ This function is an alias for \code{shiny::selectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::selectizeInput()} with \code{input_selectize()}.
 }
 
 \section{Server value}{
diff --git a/man/input_slider.Rd b/man/input_slider.Rd
index 60a396c0a..6bd4d357f 100644
--- a/man/input_slider.Rd
+++ b/man/input_slider.Rd
@@ -90,7 +90,7 @@ Constructs a slider widget to select a number, date, or date-time from a
 range.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::sliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::sliderInput()} with \code{input_slider()}.
+ This function is an alias for \code{shiny::sliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::sliderInput()} with \code{input_slider()}.
 }
 
 \section{Server value}{
diff --git a/man/input_text.Rd b/man/input_text.Rd
index 283be409a..611a95c5a 100644
--- a/man/input_text.Rd
+++ b/man/input_text.Rd
@@ -29,7 +29,7 @@ A text input control that can be added to a UI definition.
 Create an input control for entry of unstructured text values
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::textInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textInput()} with \code{input_text()}.
+ This function is an alias for \code{shiny::textInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::textInput()} with \code{input_text()}.
 }
 
 \section{Server value}{
diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd
index 8640339a1..2f15c8115 100644
--- a/man/input_text_area.Rd
+++ b/man/input_text_area.Rd
@@ -57,7 +57,7 @@ A textarea input control that can be added to a UI definition.
 Create a textarea input control for entry of unstructured text values.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::textAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::textAreaInput()} with \code{input_text_area()}.
+ This function is an alias for \code{shiny::textAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::textAreaInput()} with \code{input_text_area()}.
 }
 
 \section{Server value}{
diff --git a/man/render_image.Rd b/man/render_image.Rd
index 9fcc7f54b..2493ed30b 100644
--- a/man/render_image.Rd
+++ b/man/render_image.Rd
@@ -58,7 +58,7 @@ The corresponding HTML output tag should be \code{div} or \code{img} and have
 the CSS class name \code{shiny-image-output}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderImage()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderImage()} with \code{render_image()}.
+ This function is an alias for \code{shiny::renderImage()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderImage()} with \code{render_image()}.
 }
 
 \seealso{
diff --git a/man/render_plot.Rd b/man/render_plot.Rd
index c990a4dce..ecba78cfc 100644
--- a/man/render_plot.Rd
+++ b/man/render_plot.Rd
@@ -80,7 +80,7 @@ The corresponding HTML output tag should be \code{div} or \code{img} and have
 the CSS class name \code{shiny-plot-output}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderPlot()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderPlot()} with \code{render_plot()}.
+ This function is an alias for \code{shiny::renderPlot()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderPlot()} with \code{render_plot()}.
 }
 
 \section{Interactive plots}{
diff --git a/man/render_table.Rd b/man/render_table.Rd
index 041171328..ccc89909d 100644
--- a/man/render_table.Rd
+++ b/man/render_table.Rd
@@ -89,7 +89,7 @@ See \code{\link[shiny:renderDataTable]{renderDataTable()}} for data frames that
 page.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderTable()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderTable()} with \code{render_table()}.
+ This function is an alias for \code{shiny::renderTable()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderTable()} with \code{render_table()}.
 }
 
 \seealso{
diff --git a/man/render_text.Rd b/man/render_text.Rd
index 1a112d156..ccc8cb93b 100644
--- a/man/render_text.Rd
+++ b/man/render_text.Rd
@@ -52,7 +52,7 @@ recommended if you need a monospace font and whitespace preserved) and should
 have the CSS class name \code{shiny-text-output}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderText()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderText()} with \code{render_text()}.
+ This function is an alias for \code{shiny::renderText()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderText()} with \code{render_text()}.
 }
 
 \seealso{
diff --git a/man/render_text_verbatim.Rd b/man/render_text_verbatim.Rd
index 62b5a6d01..f24c311f6 100644
--- a/man/render_text_verbatim.Rd
+++ b/man/render_text_verbatim.Rd
@@ -51,7 +51,7 @@ recommended if you need a monospace font and whitespace preserved) and should
 have the CSS class name \code{shiny-text-output}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderPrint()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderPrint()} with \code{render_text_verbatim()}.
+ This function is an alias for \code{shiny::renderPrint()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderPrint()} with \code{render_text_verbatim()}.
 }
 
 \seealso{
diff --git a/man/render_ui.Rd b/man/render_ui.Rd
index 1fbbff5e4..f40204092 100644
--- a/man/render_ui.Rd
+++ b/man/render_ui.Rd
@@ -32,7 +32,7 @@ The corresponding HTML output tag should be \code{div} and have the CSS class
 name \code{shiny-html-output} (or use \code{\link[shiny:uiOutput]{uiOutput()}}).
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::renderUI()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::renderUI()} with \code{render_ui()}.
+ This function is an alias for \code{shiny::renderUI()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::renderUI()} with \code{render_ui()}.
 }
 
 \seealso{
diff --git a/man/update_action_button.Rd b/man/update_action_button.Rd
index c287fc757..ae9a41476 100644
--- a/man/update_action_button.Rd
+++ b/man/update_action_button.Rd
@@ -49,7 +49,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateActionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionButton()} with \code{update_action_button()}.
+ This function is an alias for \code{shiny::updateActionButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateActionButton()} with \code{update_action_button()}.
 }
 
 \seealso{
diff --git a/man/update_action_link.Rd b/man/update_action_link.Rd
index 230923b29..79c7f55ae 100644
--- a/man/update_action_link.Rd
+++ b/man/update_action_link.Rd
@@ -45,7 +45,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateActionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateActionLink()} with \code{update_action_link()}.
+ This function is an alias for \code{shiny::updateActionLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateActionLink()} with \code{update_action_link()}.
 }
 
 \seealso{
diff --git a/man/update_checkbox.Rd b/man/update_checkbox.Rd
index cc8dcbea7..8a9c97915 100644
--- a/man/update_checkbox.Rd
+++ b/man/update_checkbox.Rd
@@ -45,7 +45,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateCheckboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxInput()} with \code{update_checkbox()}.
+ This function is an alias for \code{shiny::updateCheckboxInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateCheckboxInput()} with \code{update_checkbox()}.
 }
 
 \seealso{
diff --git a/man/update_checkbox_group.Rd b/man/update_checkbox_group.Rd
index a0ffff22b..a2ab0030a 100644
--- a/man/update_checkbox_group.Rd
+++ b/man/update_checkbox_group.Rd
@@ -67,7 +67,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateCheckboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateCheckboxGroupInput()} with \code{update_checkbox_group()}.
+ This function is an alias for \code{shiny::updateCheckboxGroupInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateCheckboxGroupInput()} with \code{update_checkbox_group()}.
 }
 
 \seealso{
diff --git a/man/update_date.Rd b/man/update_date.Rd
index 003658099..524aac828 100644
--- a/man/update_date.Rd
+++ b/man/update_date.Rd
@@ -55,7 +55,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateDateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateInput()} with \code{update_date()}.
+ This function is an alias for \code{shiny::updateDateInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateDateInput()} with \code{update_date()}.
 }
 
 \seealso{
diff --git a/man/update_date_range.Rd b/man/update_date_range.Rd
index 0068db516..a8a54250a 100644
--- a/man/update_date_range.Rd
+++ b/man/update_date_range.Rd
@@ -60,7 +60,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateDateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateDateRangeInput()} with \code{update_date_range()}.
+ This function is an alias for \code{shiny::updateDateRangeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateDateRangeInput()} with \code{update_date_range()}.
 }
 
 \seealso{
diff --git a/man/update_numeric.Rd b/man/update_numeric.Rd
index b60a17ab2..ec969c249 100644
--- a/man/update_numeric.Rd
+++ b/man/update_numeric.Rd
@@ -54,7 +54,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateNumericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateNumericInput()} with \code{update_numeric()}.
+ This function is an alias for \code{shiny::updateNumericInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateNumericInput()} with \code{update_numeric()}.
 }
 
 \seealso{
diff --git a/man/update_radio_buttons.Rd b/man/update_radio_buttons.Rd
index 0ae6a782e..04b1a3862 100644
--- a/man/update_radio_buttons.Rd
+++ b/man/update_radio_buttons.Rd
@@ -68,7 +68,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateRadioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateRadioButtons()} with \code{update_radio_buttons()}.
+ This function is an alias for \code{shiny::updateRadioButtons()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateRadioButtons()} with \code{update_radio_buttons()}.
 }
 
 \seealso{
diff --git a/man/update_select.Rd b/man/update_select.Rd
index 2f5c74e37..fa8667624 100644
--- a/man/update_select.Rd
+++ b/man/update_select.Rd
@@ -55,7 +55,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateSelectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectInput()} with \code{update_select()}.
+ This function is an alias for \code{shiny::updateSelectInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateSelectInput()} with \code{update_select()}.
 }
 
 \seealso{
diff --git a/man/update_selectize.Rd b/man/update_selectize.Rd
index 1e0f31b66..3a63132ac 100644
--- a/man/update_selectize.Rd
+++ b/man/update_selectize.Rd
@@ -67,7 +67,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateSelectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSelectizeInput()} with \code{update_selectize()}.
+ This function is an alias for \code{shiny::updateSelectizeInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateSelectizeInput()} with \code{update_selectize()}.
 }
 
 \seealso{
diff --git a/man/update_slider.Rd b/man/update_slider.Rd
index 1636afad2..486278a91 100644
--- a/man/update_slider.Rd
+++ b/man/update_slider.Rd
@@ -75,7 +75,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateSliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateSliderInput()} with \code{update_slider()}.
+ This function is an alias for \code{shiny::updateSliderInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateSliderInput()} with \code{update_slider()}.
 }
 
 \seealso{
diff --git a/man/update_text.Rd b/man/update_text.Rd
index 2f750556d..acc84527d 100644
--- a/man/update_text.Rd
+++ b/man/update_text.Rd
@@ -50,7 +50,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateTextInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextInput()} with \code{update_text()}.
+ This function is an alias for \code{shiny::updateTextInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateTextInput()} with \code{update_text()}.
 }
 
 \seealso{
diff --git a/man/update_text_area.Rd b/man/update_text_area.Rd
index c04d2c8ae..b30c8e136 100644
--- a/man/update_text_area.Rd
+++ b/man/update_text_area.Rd
@@ -50,7 +50,7 @@ For \code{\link[shiny]{radioButtons}()}, \code{\link[shiny]{checkboxGroupInput}(
 can be cleared by using \code{selected=character(0)}.
 }
 \section{Aliased from Shiny}{
- This function is an alias for \code{shiny::updateTextAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation may still refer to the original function names. You can replace \code{shiny::updateTextAreaInput()} with \code{update_text_area()}.
+ This function is an alias for \code{shiny::updateTextAreaInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::updateTextAreaInput()} with \code{update_text_area()}.
 }
 
 \seealso{

From ee7f9d648bb9ae56e247f3b6200ad70b83694d59 Mon Sep 17 00:00:00 2001
From: Garrick Aden-Buie 
Date: Fri, 14 Jun 2024 17:00:16 -0400
Subject: [PATCH 20/24] feat: input_file

---
 DESCRIPTION                 |   1 +
 NAMESPACE                   |   1 +
 R/shiny-input_file.R        |  31 ++++++++++
 man/input_action_button.Rd  |   1 +
 man/input_action_link.Rd    |   1 +
 man/input_checkbox.Rd       |   1 +
 man/input_checkbox_group.Rd |   1 +
 man/input_date.Rd           |   1 +
 man/input_date_range.Rd     |   1 +
 man/input_file.Rd           | 118 ++++++++++++++++++++++++++++++++++++
 man/input_numeric.Rd        |   1 +
 man/input_password.Rd       |   1 +
 man/input_radio_buttons.Rd  |   1 +
 man/input_select.Rd         |   1 +
 man/input_selectize.Rd      |   1 +
 man/input_slider.Rd         |   1 +
 man/input_text.Rd           |   1 +
 man/input_text_area.Rd      |   1 +
 18 files changed, 165 insertions(+)
 create mode 100644 R/shiny-input_file.R
 create mode 100644 man/input_file.Rd

diff --git a/DESCRIPTION b/DESCRIPTION
index f829c3da6..3003a1cc4 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -154,6 +154,7 @@ Collate:
     'shiny-input_checkbox_group.R'
     'shiny-input_date.R'
     'shiny-input_date_range.R'
+    'shiny-input_file.R'
     'shiny-input_numeric.R'
     'shiny-input_password.R'
     'shiny-input_radio_buttons.R'
diff --git a/NAMESPACE b/NAMESPACE
index 46d6c4e22..1662d9a61 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -86,6 +86,7 @@ export(input_checkbox_group)
 export(input_dark_mode)
 export(input_date)
 export(input_date_range)
+export(input_file)
 export(input_numeric)
 export(input_password)
 export(input_radio_buttons)
diff --git a/R/shiny-input_file.R b/R/shiny-input_file.R
new file mode 100644
index 000000000..6341b0b81
--- /dev/null
+++ b/R/shiny-input_file.R
@@ -0,0 +1,31 @@
+#' @inherit shiny::fileInput params return title description details sections references
+#'
+#' @inheritParams input_action_button
+#' @param ... Ignored, included for future expansion.
+#'
+#' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_file", "fileInput")`
+#'
+#' @family Shiny input aliases
+#' @export
+input_file <- function(
+  id,
+  label,
+  ...,
+  multiple = FALSE,
+  accept = NULL,
+  width = NULL,
+  buttonLabel = "Browse...",
+  placeholder = "No file selected",
+  capture = NULL
+) {
+  shiny::fileInput(
+    inputId = id,
+    label = label,
+    multiple = multiple,
+    accept = accept,
+    width = width,
+    buttonLabel = buttonLabel,
+    placeholder = placeholder,
+    capture = capture
+  )
+}
diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd
index 1d3591c34..982627ebe 100644
--- a/man/input_action_button.Rd
+++ b/man/input_action_button.Rd
@@ -59,6 +59,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd
index d4be4bf5d..20d8b0d4c 100644
--- a/man/input_action_link.Rd
+++ b/man/input_action_link.Rd
@@ -46,6 +46,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd
index 53094c472..5750be011 100644
--- a/man/input_checkbox.Rd
+++ b/man/input_checkbox.Rd
@@ -44,6 +44,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd
index cdee64856..0472acfc2 100644
--- a/man/input_checkbox_group.Rd
+++ b/man/input_checkbox_group.Rd
@@ -75,6 +75,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_date.Rd b/man/input_date.Rd
index a0e1479ed..2549ee405 100644
--- a/man/input_date.Rd
+++ b/man/input_date.Rd
@@ -109,6 +109,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd
index 888eac545..e26a00f83 100644
--- a/man/input_date_range.Rd
+++ b/man/input_date_range.Rd
@@ -109,6 +109,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_file.Rd b/man/input_file.Rd
new file mode 100644
index 000000000..96a6d7e0c
--- /dev/null
+++ b/man/input_file.Rd
@@ -0,0 +1,118 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-input_file.R
+\name{input_file}
+\alias{input_file}
+\title{File Upload Control}
+\usage{
+input_file(
+  id,
+  label,
+  ...,
+  multiple = FALSE,
+  accept = NULL,
+  width = NULL,
+  buttonLabel = "Browse...",
+  placeholder = "No file selected",
+  capture = NULL
+)
+}
+\arguments{
+\item{id}{An input id.}
+
+\item{label}{Display label for the control, or \code{NULL} for no label.}
+
+\item{...}{Ignored, included for future expansion.}
+
+\item{multiple}{Whether the user should be allowed to select and upload
+multiple files at once. \strong{Does not work on older browsers, including
+Internet Explorer 9 and earlier.}}
+
+\item{accept}{A character vector of "unique file type specifiers" which gives
+the browser a hint as to the type of file the server expects. Many browsers
+use this prevent the user from selecting an invalid file.
+
+A unique file type specifier can be:
+\itemize{
+\item A case insensitive extension like \code{.csv} or \code{.rds}.
+\item A valid MIME type, like \code{text/plain} or \code{application/pdf}
+\item One of \verb{audio/*}, \verb{video/*}, or \verb{image/*} meaning any audio, video,
+or image type, respectively.
+}}
+
+\item{width}{The width of the input, e.g. \code{'400px'}, or \code{'100\%'};
+see \code{\link[shiny:validateCssUnit]{validateCssUnit()}}.}
+
+\item{buttonLabel}{The label used on the button. Can be text or an HTML tag
+object.}
+
+\item{placeholder}{The text to show before a file has been uploaded.}
+
+\item{capture}{What source to use for capturing image, audio or video data.
+This attribute facilitates user access to a device's media capture
+mechanism, such as a camera, or microphone, from within a file upload
+control.
+
+A value of \code{user} indicates that the user-facing camera and/or microphone
+should be used. A value of \code{environment} specifies that the outward-facing
+camera and/or microphone should be used.
+
+By default on most phones, this will accept still photos or video. For
+still photos only, also use \code{accept="image/*"}. For video only, use
+\code{accept="video/*"}.}
+}
+\description{
+Create a file upload control that can be used to upload one or more files.
+}
+\details{
+Whenever a file upload completes, the corresponding input variable is set to
+a dataframe. See the \verb{Server value} section.
+
+Each time files are uploaded, they are written to a new random subdirectory
+inside of R's process-level temporary directory. The Shiny user session keeps
+track of all uploads in the session, and when the session ends, Shiny deletes
+all of the subdirectories where files where uploaded to.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::fileInput()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::fileInput()} with \code{input_file()}.
+}
+
+\section{Server value}{
+
+
+
+A \code{data.frame} that contains one row for each selected file, and following
+columns:
+\describe{
+\item{\code{name}}{The filename provided by the web browser. This is
+\strong{not} the path to read to get at the actual data that was uploaded
+(see
+\code{datapath} column).}
+\item{\code{size}}{The size of the uploaded data, in
+bytes.}
+\item{\code{type}}{The MIME type reported by the browser (for example,
+\code{text/plain}), or empty string if the browser didn't know.}
+\item{\code{datapath}}{The path to a temp file that contains the data that was
+uploaded. This file may be deleted if the user performs another upload
+operation.}
+}
+
+}
+
+\seealso{
+Other Shiny input aliases: 
+\code{\link{input_action_button}()},
+\code{\link{input_action_link}()},
+\code{\link{input_checkbox}()},
+\code{\link{input_checkbox_group}()},
+\code{\link{input_date}()},
+\code{\link{input_date_range}()},
+\code{\link{input_numeric}()},
+\code{\link{input_password}()},
+\code{\link{input_radio_buttons}()},
+\code{\link{input_select}()},
+\code{\link{input_selectize}()},
+\code{\link{input_slider}()},
+\code{\link{input_text}()},
+\code{\link{input_text_area}()}
+}
+\concept{Shiny input aliases}
diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd
index 5209e3efd..96ce07cca 100644
--- a/man/input_numeric.Rd
+++ b/man/input_numeric.Rd
@@ -60,6 +60,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
 \code{\link{input_select}()},
diff --git a/man/input_password.Rd b/man/input_password.Rd
index e6e29246e..291fbe3f3 100644
--- a/man/input_password.Rd
+++ b/man/input_password.Rd
@@ -50,6 +50,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_radio_buttons}()},
 \code{\link{input_select}()},
diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd
index dde294fcb..5c2f4ed7a 100644
--- a/man/input_radio_buttons.Rd
+++ b/man/input_radio_buttons.Rd
@@ -82,6 +82,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_select}()},
diff --git a/man/input_select.Rd b/man/input_select.Rd
index a5defe29b..49a9d6040 100644
--- a/man/input_select.Rd
+++ b/man/input_select.Rd
@@ -98,6 +98,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd
index 715c2b278..a3fca0a17 100644
--- a/man/input_selectize.Rd
+++ b/man/input_selectize.Rd
@@ -66,6 +66,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_slider.Rd b/man/input_slider.Rd
index 6bd4d357f..19a54a8b1 100644
--- a/man/input_slider.Rd
+++ b/man/input_slider.Rd
@@ -111,6 +111,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_text.Rd b/man/input_text.Rd
index 611a95c5a..99ddfa3dc 100644
--- a/man/input_text.Rd
+++ b/man/input_text.Rd
@@ -50,6 +50,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd
index 2f15c8115..a7816161c 100644
--- a/man/input_text_area.Rd
+++ b/man/input_text_area.Rd
@@ -78,6 +78,7 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
+\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},

From 3a8bbf640751eacfdcfa0f9ff5f958dde3d22f18 Mon Sep 17 00:00:00 2001
From: Garrick Aden-Buie 
Date: Fri, 14 Jun 2024 17:10:43 -0400
Subject: [PATCH 21/24] feat: download_button, download_link, download_handler

---
 DESCRIPTION                 |  1 +
 NAMESPACE                   |  3 ++
 R/shiny-download_button.R   | 69 +++++++++++++++++++++++++++++++++++++
 R/shiny-input_file.R        |  2 +-
 _pkgdown.yml                |  3 ++
 man/download_button.Rd      | 42 ++++++++++++++++++++++
 man/download_handler.Rd     | 54 +++++++++++++++++++++++++++++
 man/download_link.Rd        | 34 ++++++++++++++++++
 man/input_action_button.Rd  |  1 -
 man/input_action_link.Rd    |  1 -
 man/input_checkbox.Rd       |  1 -
 man/input_checkbox_group.Rd |  1 -
 man/input_date.Rd           |  1 -
 man/input_date_range.Rd     |  1 -
 man/input_file.Rd           | 21 +++--------
 man/input_numeric.Rd        |  1 -
 man/input_password.Rd       |  1 -
 man/input_radio_buttons.Rd  |  1 -
 man/input_select.Rd         |  1 -
 man/input_selectize.Rd      |  1 -
 man/input_slider.Rd         |  1 -
 man/input_text.Rd           |  1 -
 man/input_text_area.Rd      |  1 -
 23 files changed, 212 insertions(+), 31 deletions(-)
 create mode 100644 R/shiny-download_button.R
 create mode 100644 man/download_button.Rd
 create mode 100644 man/download_handler.Rd
 create mode 100644 man/download_link.Rd

diff --git a/DESCRIPTION b/DESCRIPTION
index 3003a1cc4..1546de138 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -148,6 +148,7 @@ Collate:
     'print.R'
     'shiny-aliases.R'
     'shiny-devmode.R'
+    'shiny-download_button.R'
     'shiny-input_action_button.R'
     'shiny-input_action_link.R'
     'shiny-input_checkbox.R'
diff --git a/NAMESPACE b/NAMESPACE
index 1662d9a61..81ccac562 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -75,6 +75,9 @@ export(card_footer)
 export(card_header)
 export(card_image)
 export(card_title)
+export(download_button)
+export(download_handler)
+export(download_link)
 export(font_collection)
 export(font_face)
 export(font_google)
diff --git a/R/shiny-download_button.R b/R/shiny-download_button.R
new file mode 100644
index 000000000..a17517344
--- /dev/null
+++ b/R/shiny-download_button.R
@@ -0,0 +1,69 @@
+#' @inherit shiny::downloadButton params return title description details sections references
+#'
+#' @inheritParams input_action_button
+#'
+#' @section Aliased from Shiny: `r docs_callout_shiny_alias("download_button", "downloadButton")`
+#'
+#' @family Shiny upload/download aliases
+#' @export
+download_button <- function(
+  id,
+  label = "Download",
+  ...,
+  class = NULL,
+  icon = shiny::icon("download")
+) {
+  shiny::downloadButton(
+    outputId = id,
+    label = "Download",
+    class = NULL,
+    ...,
+    icon = shiny::icon("download")
+  )
+}
+
+#' @inherit shiny::downloadLink params return title description details sections references
+#'
+#' @inheritParams input_action_button
+#'
+#' @section Aliased from Shiny: `r docs_callout_shiny_alias("download_link", "downloadLink")`
+#'
+#' @family Shiny upload/download aliases
+#' @export
+download_link <- function(
+  id,
+  label = "Download",
+  ...,
+  class = NULL
+) {
+  shiny::downloadLink(
+    outputId = id,
+    label = "Download",
+    class = NULL,
+    ...
+  )
+}
+
+#' @inherit shiny::downloadHandler params return title description details sections references
+#'
+#' @section Aliased from Shiny: `r docs_callout_shiny_alias("download_handler", "downloadHandler")`
+#'
+#' @seealso
+#'   * [download_button()] creates a download button in the UI.
+#'   * [download_link()] creates a download link in the UI.
+#'
+#' @family Shiny upload/download aliases
+#' @export
+download_handler <- function(
+  filename,
+  content,
+  contentType = NULL,
+  outputArgs = list()
+) {
+  shiny::downloadHandler(
+    filename = filename,
+    content = content,
+    contentType = contentType,
+    outputArgs = outputArgs
+  )
+}
diff --git a/R/shiny-input_file.R b/R/shiny-input_file.R
index 6341b0b81..bd23a5527 100644
--- a/R/shiny-input_file.R
+++ b/R/shiny-input_file.R
@@ -5,7 +5,7 @@
 #'
 #' @section Aliased from Shiny: `r docs_callout_shiny_alias("input_file", "fileInput")`
 #'
-#' @family Shiny input aliases
+#' @family Shiny upload/download aliases
 #' @export
 input_file <- function(
   id,
diff --git a/_pkgdown.yml b/_pkgdown.yml
index 429207275..61a5cef49 100644
--- a/_pkgdown.yml
+++ b/_pkgdown.yml
@@ -270,6 +270,9 @@ reference:
 - subtitle: Shiny Render Functions
   contents:
   - has_concept("Shiny render aliases")
+- subtitle: Shiny Upload/Download Functions
+  contents:
+  - has_concept("Shiny upload/download aliases")
 
 - title: Utility Functions
 - subtitle: Fill items and fillable containers
diff --git a/man/download_button.Rd b/man/download_button.Rd
new file mode 100644
index 000000000..a7d520fd0
--- /dev/null
+++ b/man/download_button.Rd
@@ -0,0 +1,42 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-download_button.R
+\name{download_button}
+\alias{download_button}
+\title{Create a download button or link}
+\usage{
+download_button(
+  id,
+  label = "Download",
+  ...,
+  class = NULL,
+  icon = shiny::icon("download")
+)
+}
+\arguments{
+\item{id}{An input id.}
+
+\item{label}{The label that should appear on the button.}
+
+\item{...}{Other arguments to pass to the container tag function.}
+
+\item{class}{Additional CSS classes to apply to the tag, if any.}
+
+\item{icon}{An \code{\link[shiny:icon]{icon()}} to appear on the button. Default is \code{icon("download")}.}
+}
+\description{
+Use these functions to create a download button or link; when clicked, it
+will initiate a browser download. The filename and contents are specified by
+the corresponding \code{\link[shiny:downloadHandler]{downloadHandler()}} defined in the server
+function.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::downloadButton()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::downloadButton()} with \code{download_button()}.
+}
+
+\seealso{
+Other Shiny upload/download aliases: 
+\code{\link{download_handler}()},
+\code{\link{download_link}()},
+\code{\link{input_file}()}
+}
+\concept{Shiny upload/download aliases}
diff --git a/man/download_handler.Rd b/man/download_handler.Rd
new file mode 100644
index 000000000..59ba08286
--- /dev/null
+++ b/man/download_handler.Rd
@@ -0,0 +1,54 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-download_button.R
+\name{download_handler}
+\alias{download_handler}
+\title{File Downloads}
+\usage{
+download_handler(filename, content, contentType = NULL, outputArgs = list())
+}
+\arguments{
+\item{filename}{A string of the filename, including extension, that the
+user's web browser should default to when downloading the file; or a
+function that returns such a string. (Reactive values and functions may be
+used from this function.)}
+
+\item{content}{A function that takes a single argument \code{file} that is a
+file path (string) of a nonexistent temp file, and writes the content to
+that file path. (Reactive values and functions may be used from this
+function.)}
+
+\item{contentType}{A string of the download's
+\href{https://en.wikipedia.org/wiki/Internet_media_type}{content type}, for
+example \code{"text/csv"} or \code{"image/png"}. If \code{NULL}, the content type
+will be guessed based on the filename extension, or
+\code{application/octet-stream} if the extension is unknown.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link[shiny:downloadButton]{downloadButton()}} when \code{downloadHandler} is used
+in an interactive R Markdown document.}
+}
+\description{
+Allows content from the Shiny application to be made available to the user as
+file downloads (for example, downloading the currently visible data as a CSV
+file). Both filename and contents can be calculated dynamically at the time
+the user initiates the download. Assign the return value to a slot on
+\code{output} in your server function, and in the UI use
+\code{\link[shiny:downloadButton]{downloadButton()}} or \code{\link[shiny:downloadLink]{downloadLink()}} to make the
+download available.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::downloadHandler()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::downloadHandler()} with \code{download_handler()}.
+}
+
+\seealso{
+\itemize{
+\item \code{\link[=download_button]{download_button()}} creates a download button in the UI.
+\item \code{\link[=download_link]{download_link()}} creates a download link in the UI.
+}
+
+Other Shiny upload/download aliases: 
+\code{\link{download_button}()},
+\code{\link{download_link}()},
+\code{\link{input_file}()}
+}
+\concept{Shiny upload/download aliases}
diff --git a/man/download_link.Rd b/man/download_link.Rd
new file mode 100644
index 000000000..8df65d4b3
--- /dev/null
+++ b/man/download_link.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shiny-download_button.R
+\name{download_link}
+\alias{download_link}
+\title{Create a download button or link}
+\usage{
+download_link(id, label = "Download", ..., class = NULL)
+}
+\arguments{
+\item{id}{An input id.}
+
+\item{label}{The label that should appear on the button.}
+
+\item{...}{Other arguments to pass to the container tag function.}
+
+\item{class}{Additional CSS classes to apply to the tag, if any.}
+}
+\description{
+Use these functions to create a download button or link; when clicked, it
+will initiate a browser download. The filename and contents are specified by
+the corresponding \code{\link[shiny:downloadHandler]{downloadHandler()}} defined in the server
+function.
+}
+\section{Aliased from Shiny}{
+ This function is an alias for \code{shiny::downloadLink()} and is included to maintain more consistent naming conventions in Shiny apps that use \pkg{bslib}. The documentation on this page may still refer to the original function names. You can replace \code{shiny::downloadLink()} with \code{download_link()}.
+}
+
+\seealso{
+Other Shiny upload/download aliases: 
+\code{\link{download_button}()},
+\code{\link{download_handler}()},
+\code{\link{input_file}()}
+}
+\concept{Shiny upload/download aliases}
diff --git a/man/input_action_button.Rd b/man/input_action_button.Rd
index 982627ebe..1d3591c34 100644
--- a/man/input_action_button.Rd
+++ b/man/input_action_button.Rd
@@ -59,7 +59,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_action_link.Rd b/man/input_action_link.Rd
index 20d8b0d4c..d4be4bf5d 100644
--- a/man/input_action_link.Rd
+++ b/man/input_action_link.Rd
@@ -46,7 +46,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_checkbox.Rd b/man/input_checkbox.Rd
index 5750be011..53094c472 100644
--- a/man/input_checkbox.Rd
+++ b/man/input_checkbox.Rd
@@ -44,7 +44,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_checkbox_group.Rd b/man/input_checkbox_group.Rd
index 0472acfc2..cdee64856 100644
--- a/man/input_checkbox_group.Rd
+++ b/man/input_checkbox_group.Rd
@@ -75,7 +75,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_date.Rd b/man/input_date.Rd
index 2549ee405..a0e1479ed 100644
--- a/man/input_date.Rd
+++ b/man/input_date.Rd
@@ -109,7 +109,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_date_range.Rd b/man/input_date_range.Rd
index e26a00f83..888eac545 100644
--- a/man/input_date_range.Rd
+++ b/man/input_date_range.Rd
@@ -109,7 +109,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox}()},
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_file.Rd b/man/input_file.Rd
index 96a6d7e0c..89bd057ed 100644
--- a/man/input_file.Rd
+++ b/man/input_file.Rd
@@ -99,20 +99,9 @@ operation.}
 }
 
 \seealso{
-Other Shiny input aliases: 
-\code{\link{input_action_button}()},
-\code{\link{input_action_link}()},
-\code{\link{input_checkbox}()},
-\code{\link{input_checkbox_group}()},
-\code{\link{input_date}()},
-\code{\link{input_date_range}()},
-\code{\link{input_numeric}()},
-\code{\link{input_password}()},
-\code{\link{input_radio_buttons}()},
-\code{\link{input_select}()},
-\code{\link{input_selectize}()},
-\code{\link{input_slider}()},
-\code{\link{input_text}()},
-\code{\link{input_text_area}()}
+Other Shiny upload/download aliases: 
+\code{\link{download_button}()},
+\code{\link{download_handler}()},
+\code{\link{download_link}()}
 }
-\concept{Shiny input aliases}
+\concept{Shiny upload/download aliases}
diff --git a/man/input_numeric.Rd b/man/input_numeric.Rd
index 96ce07cca..5209e3efd 100644
--- a/man/input_numeric.Rd
+++ b/man/input_numeric.Rd
@@ -60,7 +60,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
 \code{\link{input_select}()},
diff --git a/man/input_password.Rd b/man/input_password.Rd
index 291fbe3f3..e6e29246e 100644
--- a/man/input_password.Rd
+++ b/man/input_password.Rd
@@ -50,7 +50,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_radio_buttons}()},
 \code{\link{input_select}()},
diff --git a/man/input_radio_buttons.Rd b/man/input_radio_buttons.Rd
index 5c2f4ed7a..dde294fcb 100644
--- a/man/input_radio_buttons.Rd
+++ b/man/input_radio_buttons.Rd
@@ -82,7 +82,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_select}()},
diff --git a/man/input_select.Rd b/man/input_select.Rd
index 49a9d6040..a5defe29b 100644
--- a/man/input_select.Rd
+++ b/man/input_select.Rd
@@ -98,7 +98,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_selectize.Rd b/man/input_selectize.Rd
index a3fca0a17..715c2b278 100644
--- a/man/input_selectize.Rd
+++ b/man/input_selectize.Rd
@@ -66,7 +66,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_slider.Rd b/man/input_slider.Rd
index 19a54a8b1..6bd4d357f 100644
--- a/man/input_slider.Rd
+++ b/man/input_slider.Rd
@@ -111,7 +111,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_text.Rd b/man/input_text.Rd
index 99ddfa3dc..611a95c5a 100644
--- a/man/input_text.Rd
+++ b/man/input_text.Rd
@@ -50,7 +50,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},
diff --git a/man/input_text_area.Rd b/man/input_text_area.Rd
index a7816161c..2f15c8115 100644
--- a/man/input_text_area.Rd
+++ b/man/input_text_area.Rd
@@ -78,7 +78,6 @@ Other Shiny input aliases:
 \code{\link{input_checkbox_group}()},
 \code{\link{input_date}()},
 \code{\link{input_date_range}()},
-\code{\link{input_file}()},
 \code{\link{input_numeric}()},
 \code{\link{input_password}()},
 \code{\link{input_radio_buttons}()},

From 00fae701ef9eff04a0c589192c90ec9ad029a670 Mon Sep 17 00:00:00 2001
From: Garrick Aden-Buie 
Date: Fri, 14 Jun 2024 22:01:08 -0400
Subject: [PATCH 22/24] fix: render_* functions

---
 R/shiny-aliases.R              | 15 +++++++++++++++
 R/shiny-output_image.R         |  4 +++-
 R/shiny-output_plot.R          |  4 +++-
 R/shiny-output_table.R         |  4 +++-
 R/shiny-output_text.R          |  4 +++-
 R/shiny-output_text_verbatim.R |  4 +++-
 R/shiny-output_ui.R            |  9 ++++++++-
 7 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/R/shiny-aliases.R b/R/shiny-aliases.R
index a4801efb1..b66379ae6 100644
--- a/R/shiny-aliases.R
+++ b/R/shiny-aliases.R
@@ -9,3 +9,18 @@ docs_callout_shiny_alias <- function(new, old) {
     old, old, new
   )
 }
+
+shiny_quote_if_unquoted <- function(
+  expr,
+  quoted = FALSE,
+  ...,
+  env = parent.frame()
+) {
+  if (quoted) return(expr)
+  # installExprFunction() quotes using its parent.frame(), which will not be
+  # the right frame when `shiny::renderPrint()` or similar are called from
+  # within a wrapping function. This function is a workaround to quote the
+  # expression, in the right environment, so that we always pass quoted
+  # expressions to `shiny::renderPrint()`.
+  eval(substitute(substitute(expr)), env)
+}
diff --git a/R/shiny-output_image.R b/R/shiny-output_image.R
index 3bf795bed..3cc17a362 100644
--- a/R/shiny-output_image.R
+++ b/R/shiny-output_image.R
@@ -47,10 +47,12 @@ render_image <- function(
   deleteFile,
   outputArgs = list()
 ) {
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
   shiny::renderImage(
     expr = expr,
     env = env,
-    quoted = quoted,
+    quoted = TRUE,
     deleteFile = deleteFile,
     outputArgs = outputArgs
   )
diff --git a/R/shiny-output_plot.R b/R/shiny-output_plot.R
index ad7933a79..8422bdbbd 100644
--- a/R/shiny-output_plot.R
+++ b/R/shiny-output_plot.R
@@ -52,6 +52,8 @@ render_plot <- function(
   execOnResize = FALSE,
   outputArgs = list()
 ) {
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
   shiny::renderPlot(
     expr = expr,
     width = width,
@@ -60,7 +62,7 @@ render_plot <- function(
     ...,
     alt = alt,
     env = env,
-    quoted = quoted,
+    quoted = TRUE,
     execOnResize = execOnResize,
     outputArgs = outputArgs
   )
diff --git a/R/shiny-output_table.R b/R/shiny-output_table.R
index 33dbc72ff..e774a7b9e 100644
--- a/R/shiny-output_table.R
+++ b/R/shiny-output_table.R
@@ -35,6 +35,8 @@ render_table <- function(
   quoted = FALSE,
   outputArgs = list()
 ) {
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
   shiny::renderTable(
     expr = expr,
     striped = striped,
@@ -49,7 +51,7 @@ render_table <- function(
     na = na,
     ...,
     env = env,
-    quoted = quoted,
+    quoted = TRUE,
     outputArgs = outputArgs
   )
 }
diff --git a/R/shiny-output_text.R b/R/shiny-output_text.R
index babbb0442..0534e6c8f 100644
--- a/R/shiny-output_text.R
+++ b/R/shiny-output_text.R
@@ -27,10 +27,12 @@ render_text <- function(
   outputArgs = list(),
   sep = " "
 ) {
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
   shiny::renderText(
     expr = expr,
     env = env,
-    quoted = quoted,
+    quoted = TRUE,
     outputArgs = outputArgs,
     sep = sep
   )
diff --git a/R/shiny-output_text_verbatim.R b/R/shiny-output_text_verbatim.R
index 8da9ec705..6d6828ad1 100644
--- a/R/shiny-output_text_verbatim.R
+++ b/R/shiny-output_text_verbatim.R
@@ -28,10 +28,12 @@ render_text_verbatim <- function(
   width = getOption("width"),
   outputArgs = list()
 ) {
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
   shiny::renderPrint(
     expr = expr,
     env = env,
-    quoted = quoted,
+    quoted = TRUE,
     width = width,
     outputArgs = outputArgs
   )
diff --git a/R/shiny-output_ui.R b/R/shiny-output_ui.R
index f6fcb0f56..bf8c34682 100644
--- a/R/shiny-output_ui.R
+++ b/R/shiny-output_ui.R
@@ -36,5 +36,12 @@ render_ui <- function(
   quoted = FALSE,
   outputArgs = list()
 ) {
-  shiny::renderUI(expr = expr, env = env, quoted = quoted, outputArgs = outputArgs)
+  expr <- shiny_quote_if_unquoted(expr, quoted)
+
+  shiny::renderUI(
+    expr = expr,
+    env = env,
+    quoted = TRUE,
+    outputArgs = outputArgs
+  )
 }

From 080c1e6114f5a6086e2dd5e1611303686b486091 Mon Sep 17 00:00:00 2001
From: gadenbuie 
Date: Sat, 15 Jun 2024 02:47:39 +0000
Subject: [PATCH 23/24] Resave data (GitHub Action)

---
 R/sysdata.rda | Bin 210422 -> 216760 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/R/sysdata.rda b/R/sysdata.rda
index 4f1e9570584970bd0246457763e139c911fdce30..f7b8eeeb96980f583c65574922bd9a25b1885090 100644
GIT binary patch
literal 216760
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 z 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

(u^^qNu-pDO7Q3qP9Y~+ltizwwvi5JP%P*3$D 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 j)t&1#K!GB$M^PSSW_cB$AWrVq;bI_9&V1?%9 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

K^W2?rUd6_^dkq-*(u}UR$ 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 Date: Thu, 20 Jun 2024 11:53:23 -0400 Subject: [PATCH 24/24] docs: Document output `id` --- R/shiny-output_text.R | 2 ++ man/output_image.Rd | 2 ++ man/output_plot.Rd | 2 ++ man/output_table.Rd | 3 +++ man/output_text.Rd | 2 ++ man/output_text_verbatim.Rd | 2 ++ man/output_ui.Rd | 2 ++ 7 files changed, 15 insertions(+) diff --git a/R/shiny-output_text.R b/R/shiny-output_text.R index 0534e6c8f..ff72dc8d3 100644 --- a/R/shiny-output_text.R +++ b/R/shiny-output_text.R @@ -1,5 +1,7 @@ #' @inherit shiny::textOutput params return title description details sections references #' +#' @param id An output id. +#' #' @seealso [render_text()] to reactively update the `new_output()`. #' #' @family Shiny output aliases diff --git a/man/output_image.Rd b/man/output_image.Rd index eec5496ab..554bcec6d 100644 --- a/man/output_image.Rd +++ b/man/output_image.Rd @@ -18,6 +18,8 @@ output_image( ) } \arguments{ +\item{id}{An output id.} + \item{width, height}{Image width/height. Must be a valid CSS unit (like \code{"100\%"}, \code{"400px"}, \code{"auto"}) or a number, which will be coerced to a string and have \code{"px"} appended. These two arguments are diff --git a/man/output_plot.Rd b/man/output_plot.Rd index 763be7da2..91a8df3e7 100644 --- a/man/output_plot.Rd +++ b/man/output_plot.Rd @@ -18,6 +18,8 @@ output_plot( ) } \arguments{ +\item{id}{An output id.} + \item{width, height}{Image width/height. Must be a valid CSS unit (like \code{"100\%"}, \code{"400px"}, \code{"auto"}) or a number, which will be coerced to a string and have \code{"px"} appended. These two arguments are diff --git a/man/output_table.Rd b/man/output_table.Rd index f135e2122..92b030b96 100644 --- a/man/output_table.Rd +++ b/man/output_table.Rd @@ -6,6 +6,9 @@ \usage{ output_table(id) } +\arguments{ +\item{id}{An output id.} +} \description{ The \code{tableOuptut()}/\code{renderTable()} pair creates a reactive table that is suitable for display small matrices and data frames. The columns are diff --git a/man/output_text.Rd b/man/output_text.Rd index 2591977e5..2cccfc545 100644 --- a/man/output_text.Rd +++ b/man/output_text.Rd @@ -7,6 +7,8 @@ output_text(id, inline = FALSE, container = if (inline) span else div) } \arguments{ +\item{id}{An output id.} + \item{inline}{use an inline (\code{span()}) or block container (\code{div()}) for the output} diff --git a/man/output_text_verbatim.Rd b/man/output_text_verbatim.Rd index 42ade4419..9d46f0918 100644 --- a/man/output_text_verbatim.Rd +++ b/man/output_text_verbatim.Rd @@ -7,6 +7,8 @@ output_text_verbatim(id, placeholder = FALSE) } \arguments{ +\item{id}{An output id.} + \item{placeholder}{if the output is empty or \code{NULL}, should an empty rectangle be displayed to serve as a placeholder? (does not affect behavior when the output is nonempty)} diff --git a/man/output_ui.Rd b/man/output_ui.Rd index 9363ddd75..c6d7f71e0 100644 --- a/man/output_ui.Rd +++ b/man/output_ui.Rd @@ -13,6 +13,8 @@ output_ui( ) } \arguments{ +\item{id}{An output id.} + \item{...}{Other arguments to pass to the container tag function. This is useful for providing additional classes for the tag.}