Creates an Element Plus slider with Vue instance, supporting single value and range modes, marks, vertical orientation, and optional numeric input box.
Usage
el_slider(
id = NULL,
value = 0,
min = 0,
max = 100,
step = 1,
range = FALSE,
disabled = FALSE,
show_input = FALSE,
show_stops = FALSE,
show_tooltip = TRUE,
vertical = FALSE,
height = NULL,
marks = NULL,
label = NULL,
input_size = NULL,
show_input_controls = NULL,
tooltip_class = NULL,
format_tooltip = NULL,
label_position = c("top", "left", "right"),
label_width = NULL,
label_suffix = NULL,
required = FALSE,
error = NULL,
show_message = TRUE,
inline_message = FALSE,
aria_label = NULL,
format_value_text = NULL,
persistent = NULL,
placement = NULL,
range_end_label = NULL,
range_start_label = NULL,
size = NULL,
validate_event = NULL,
width = NULL,
slots = NULL,
session = NULL
)
update_el_slider(
session = shiny::getDefaultReactiveDomain(),
id,
value = NULL,
min = NULL,
max = NULL,
step = NULL,
disabled = NULL,
label = NULL,
error = NULL,
show_input = NULL,
show_stops = NULL,
show_tooltip = NULL,
vertical = NULL,
height = NULL,
marks = NULL,
input_size = NULL,
show_input_controls = NULL,
tooltip_class = NULL,
format_tooltip = NULL,
aria_label = NULL,
format_value_text = NULL,
persistent = NULL,
placement = NULL,
range_end_label = NULL,
range_start_label = NULL,
size = NULL,
validate_event = NULL
)Arguments
- id
Slider ID. Auto-generated UUID if
NULL.- value
Initial value. A single number, or
c(low, high)whenrange = TRUE. Whenrange = TRUEand a scalar is supplied, the upper bound is set tomax.- min
Minimum value. Default
0.- max
Maximum value. Default
100.- step
Step size. Default
1.- range
Whether to enable range selection. Default
FALSE.- disabled
Whether the slider is disabled. Default
FALSE.- show_input
Whether to display a numeric input box beside the slider (non-range mode only). Default
FALSE.- show_stops
Whether to display stop markers at each step. Default
FALSE.- show_tooltip
Whether to display the tooltip when dragging. Default
TRUE.- vertical
Whether to display in vertical orientation. Default
FALSE.- height
Height of the slider in vertical mode (e.g.,
"200px"). Defaults to"200px"whenvertical = TRUEand not explicitly provided.- marks
Named list of mark labels, e.g.,
list("0" = "0km", "50" = "50km"). DefaultNULL(no marks).- label
A label shown with the component, as Shiny's inputs have: text or a tag.
NULL, the default, shows none. It is the component's accessible name too – tied to it withforwhere the component has a native input that takes the id<id>-input, else witharia-labelledby.- input_size
Size of the companion input when
show_input = TRUE.- show_input_controls
Whether the companion input shows its spinner buttons.
- tooltip_class
Extra class name for the value tooltip.
- format_tooltip
JS()function formatting the value shown in the tooltip.- label_position
Where the label sits, as
el_form()'slabel_position:"top"(the default, as Shiny's labels sit), or beside the component, its text aligned"left"or"right"– which shows oncelabel_widthgives the labels a common width.- label_width
Width of a label beside the component, as a CSS unit, so that several line up. Element's
label-width.- label_suffix
Text after the label, such as
":". Element'slabel-suffix.- required
Draw Element's red asterisk before the label. It marks the field; it does not check it – shinyvalidate or
el_form()does that.- error
An error message shown under the component in Element's style, the field framed in red. Element's
error.- show_message, inline_message
Whether
error's message is shown, and whether beside the component rather than under it. Element'sshow-messageandinline-message.- aria_label
Native
aria-labelattribute. Element Plus'saria-label(string).- format_value_text
Format to display the
aria-valuenowattribute for screen readers. Element Plus'sformat-value-text((value: number) => string).- persistent
When slider tooltip inactive and
persistentisfalse, tooltip will be destroyed.persistentalways befalsewhenshow-tooltipisfalse. Element Plus'spersistent(boolean).- placement
Position of Tooltip. Element Plus's
placement(enum).- range_end_label
When
rangeis true, screen reader label for the end of the range. Element Plus'srange-end-label(string).- range_start_label
When
rangeis true, screen reader label for the start of the range. Element Plus'srange-start-label(string).- size
Size of the slider wrapper, will not work in vertical mode. Element Plus's
size(” | 'large' | 'default' | 'small').- validate_event
Whether to trigger form validation. Element Plus's
validate-event(boolean).- width
Component width, as a CSS unit –
"200px","50%", or a number taken as pixels. Element's own markup carries it, so it behaves like thewidthargument of a Shiny input.- slots
Named list of Element slot contents, such as
list(title = shiny::tags$b("Bold")). A shiny.element component given here is absorbed rather than nested. For a scoped slot, write the template withtemplate().- session
In
el_slider(), deprecated: inside a module, wrapidinns(), as for any Shiny input; a session given here namespacesidonce more, with a warning. Inupdate_el_slider(), the Shiny session, the current one by default, as forshiny::updateTextInput().
Shiny inputs
input$<id> – Number (range = FALSE) or two-element array
(range = TRUE), updated when the user finishes dragging.
Updating from the server
Server-side update for el_slider(). Supports updating value, range bounds,
step size, and disabled state.
Every other argument of el_slider() that can change once it is
drawn is an argument here too, under the same name. One left NULL
stays as it is; NA returns it to Element's default.
update_el_slider() is called for its side effect and returns NULL invisibly.
Examples
# Basic usage
el_slider("slider1", value = 30, min = 0, max = 100)
#> <div id="slider1" data-shiny-vue style="display: contents">
#> <script type="text/x-template" data-shiny-vue-template><div id="slider1_container" style="display: contents">
#> <el-slider v-model="value" :min="min" :max="max" :step="step" :range="range" :disabled="disabled" :show-input="showInput" :show-stops="showStops" :show-tooltip="showTooltip" :vertical="vertical" @change="handleChange" :height="height === null ? undefined : height" :marks="marks === null ? undefined : marks" :label="label === null ? undefined : label" :input-size="inputSize === null ? undefined : inputSize" :show-input-controls="showInputControls === null ? undefined : showInputControls" :tooltip-class="tooltipClass === null ? undefined : tooltipClass" :format-tooltip="formatTooltip === null ? undefined : formatTooltip" @input="elEmitInput" :aria-label="ariaLabel === null ? undefined : ariaLabel" :format-value-text="formatValueText === null ? undefined : formatValueText" :persistent="persistent === null ? undefined : persistent" :placement="placement === null ? undefined : placement" :range-end-label="rangeEndLabel === null ? undefined : rangeEndLabel" :range-start-label="rangeStartLabel === null ? undefined : rangeStartLabel" :size="size === null ? undefined : size" :validate-event="validateEvent === null ? undefined : validateEvent"></el-slider>
#> </div></script>
#> <script type="application/json" data-shiny-vue-options>{"options":{"data":{"value":30,"min":0,"max":100,"step":1,"range":false,"disabled":false,"showInput":false,"showStops":false,"showTooltip":true,"vertical":false,"height":null,"marks":null,"label":null,"inputSize":null,"showInputControls":null,"tooltipClass":null,"formatTooltip":null,"ariaLabel":null,"formatValueText":null,"persistent":null,"placement":null,"rangeEndLabel":null,"rangeStartLabel":null,"size":null,"validateEvent":null},"methods":{"elEmitInput":"function() { window.shinyVue.emit('slider1', 'input', arguments, 200); }","handleChange":"function(value) { }"}},"input":"value","rate":{"policy":"debounce","delay":250},"type":null,"use":["shinyElement.plugin"],"evals":["options.methods.elEmitInput","options.methods.handleChange"]}</script>
#> </div>
# Range slider
el_slider("slider2", value = c(20, 80), range = TRUE)
#> <div id="slider2" data-shiny-vue style="display: contents">
#> <script type="text/x-template" data-shiny-vue-template><div id="slider2_container" style="display: contents">
#> <el-slider v-model="value" :min="min" :max="max" :step="step" :range="range" :disabled="disabled" :show-input="showInput" :show-stops="showStops" :show-tooltip="showTooltip" :vertical="vertical" @change="handleChange" :height="height === null ? undefined : height" :marks="marks === null ? undefined : marks" :label="label === null ? undefined : label" :input-size="inputSize === null ? undefined : inputSize" :show-input-controls="showInputControls === null ? undefined : showInputControls" :tooltip-class="tooltipClass === null ? undefined : tooltipClass" :format-tooltip="formatTooltip === null ? undefined : formatTooltip" @input="elEmitInput" :aria-label="ariaLabel === null ? undefined : ariaLabel" :format-value-text="formatValueText === null ? undefined : formatValueText" :persistent="persistent === null ? undefined : persistent" :placement="placement === null ? undefined : placement" :range-end-label="rangeEndLabel === null ? undefined : rangeEndLabel" :range-start-label="rangeStartLabel === null ? undefined : rangeStartLabel" :size="size === null ? undefined : size" :validate-event="validateEvent === null ? undefined : validateEvent"></el-slider>
#> </div></script>
#> <script type="application/json" data-shiny-vue-options>{"options":{"data":{"value":[20,80],"min":0,"max":100,"step":1,"range":true,"disabled":false,"showInput":false,"showStops":false,"showTooltip":true,"vertical":false,"height":null,"marks":null,"label":null,"inputSize":null,"showInputControls":null,"tooltipClass":null,"formatTooltip":null,"ariaLabel":null,"formatValueText":null,"persistent":null,"placement":null,"rangeEndLabel":null,"rangeStartLabel":null,"size":null,"validateEvent":null},"methods":{"elEmitInput":"function() { window.shinyVue.emit('slider2', 'input', arguments, 200); }","handleChange":"function(value) { }"}},"input":"value","rate":{"policy":"debounce","delay":250},"type":null,"use":["shinyElement.plugin"],"evals":["options.methods.elEmitInput","options.methods.handleChange"]}</script>
#> </div>
# Vertical slider with marks
el_slider(
"slider3",
value = 50,
vertical = TRUE,
height = "200px",
marks = list("0" = "0km", "50" = "50km", "100" = "100km")
)
#> <div id="slider3" data-shiny-vue style="display: contents">
#> <script type="text/x-template" data-shiny-vue-template><div id="slider3_container" style="display: contents">
#> <el-slider v-model="value" :min="min" :max="max" :step="step" :range="range" :disabled="disabled" :show-input="showInput" :show-stops="showStops" :show-tooltip="showTooltip" :vertical="vertical" @change="handleChange" :height="height === null ? undefined : height" :marks="marks === null ? undefined : marks" :label="label === null ? undefined : label" :input-size="inputSize === null ? undefined : inputSize" :show-input-controls="showInputControls === null ? undefined : showInputControls" :tooltip-class="tooltipClass === null ? undefined : tooltipClass" :format-tooltip="formatTooltip === null ? undefined : formatTooltip" @input="elEmitInput" :aria-label="ariaLabel === null ? undefined : ariaLabel" :format-value-text="formatValueText === null ? undefined : formatValueText" :persistent="persistent === null ? undefined : persistent" :placement="placement === null ? undefined : placement" :range-end-label="rangeEndLabel === null ? undefined : rangeEndLabel" :range-start-label="rangeStartLabel === null ? undefined : rangeStartLabel" :size="size === null ? undefined : size" :validate-event="validateEvent === null ? undefined : validateEvent"></el-slider>
#> </div></script>
#> <script type="application/json" data-shiny-vue-options>{"options":{"data":{"value":50,"min":0,"max":100,"step":1,"range":false,"disabled":false,"showInput":false,"showStops":false,"showTooltip":true,"vertical":true,"height":"200px","marks":{"0":"0km","50":"50km","100":"100km"},"label":null,"inputSize":null,"showInputControls":null,"tooltipClass":null,"formatTooltip":null,"ariaLabel":null,"formatValueText":null,"persistent":null,"placement":null,"rangeEndLabel":null,"rangeStartLabel":null,"size":null,"validateEvent":null},"methods":{"elEmitInput":"function() { window.shinyVue.emit('slider3', 'input', arguments, 200); }","handleChange":"function(value) { }"}},"input":"value","rate":{"policy":"debounce","delay":250},"type":null,"use":["shinyElement.plugin"],"evals":["options.methods.elEmitInput","options.methods.handleChange"]}</script>
#> </div>
# Shiny app example
if (interactive()) {
library(shiny)
library(shiny.element)
ui <- el_page(
el_slider("slider1", value = 50, min = 0, max = 100),
verbatimTextOutput("val")
)
server <- function(input, output, session) {
output$val <- renderPrint(input$slider1)
}
shinyApp(ui, server)
}
if (interactive()) {
# inside a server function
observeEvent(input$go, {
update_el_slider(session, "score", value = 80)
})
}