Skip to content
ts
import Slider from "@ui/Slider.vue"

Slider

Let a user select a value along a line.

For each option, provide a description. Markdown is supported. Select a key from the options by setting v-model

ts
const options = {
  me: "Only I can find and edit this",
  pod: "Me and other users on the instance can find and edit this",
  everyone: "Everyone can find and edit this"
} as const;

const option = ref<keyof typeof options>("me");
template
<Slider :options="options" v-model="option" label="Privacy level" />

Add a label

Either specify the label prop or add custom Html into the #label slot.

Autofocus

Add the prop autofocus to focus the slider as soon as it renders. Make sure to only autofocus one element per page.

Undefined state

If you want to aggregate potentially mixed states, or start with no initial selection, you can set v-model to undefined.

ts
const optionWithUndefined = ref<keyof typeof options | undefined>(undefined)
template
<Slider
  v-model="optionWithUndefined"
  label="Privacy level?"
  :options="options"
/>

Functionality

  • Define a possible values
  • Select zero or one values as active (v-model)

User interaction

  • It mimics the functionality of a single range input:
    • to be operated with arrow keys or mouse
    • focus is indicated
    • ticks are indicated

Design

  • A pin (same as in the toggle component)

  • a range (very faint)

  • Ticks?

  • Constant dimensions, fitting the largest text box

  • Not to be confused with a pearls navigation patterns (list of dots; indicates temporal range)


Using this component

A11y Checklist

Accessible slider

vue
<Slider
  v-model="option"
  :options
  label="Receive E-Mails"
/>

See the complete Form example

Test this component in isolation against WCAG2 criteria