Skip to content

Slider ​

A neo-brutalist style slider built on top of reka-ui's Slider primitive, with v-model support.

Demo ​

Preview

基础用法

值:60

自定义范围 (min=0, max=200, step=10)

值:25

颜色变体 (variant=primary)

值:50

禁用状态

垂直方向

值:50

刻度标记

值:50

拖拽提示

值:50

Installation ​

pnpm dlx brutx-vue@latest add slider

Usage ​

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const value = ref([50])
</script>

<template>
    <Slider v-model="value" :max="100" :step="1" />
</template>

Range Slider ​

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const range = ref([25, 75])
</script>

<template>
    <Slider v-model="range" :max="100" :step="1" />
</template>

With Min/Max ​

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const value = ref([500])
</script>

<template>
    <Slider v-model="value" :min="0" :max="1000" :step="50" />
</template>

Disabled State ​

vue
<template>
    <Slider v-model="value" disabled />
</template>

Orientation ​

Use the orientation prop to switch between horizontal (horizontal) or vertical (vertical) layout. This prop is passed through to the reka-ui primitive. Vertical mode requires a height to be set on the container.

vue
<template>
    <div class="h-48">
        <Slider v-model="value" orientation="vertical" />
    </div>
</template>

Tick Marks ​

Pass a numeric array to the marks prop to render tick marks at the corresponding positions on the track.

vue
<template>
    <Slider v-model="value" :marks="[0, 25, 50, 75, 100]" />
</template>

Tooltip on Drag ​

Enable showTooltip to display the current value near the thumb when dragging or hovering.

vue
<template>
    <Slider v-model="value" show-tooltip />
</template>

API Reference ​

Slider — Props
NameTypeDefaultDescription
modelValue
number[] | undefined
undefined
The current slider values. One value renders a single thumb; two values create a range slider. Supports controlled v-model.
Details

Declared type

number[] | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:26

packages/ui/src/components/slider/Slider.vue

min
number | undefined
0
The minimum value and the fallback value when the model array is empty.
Details

Declared type

number | undefined

Default value details

Resolved value
0

Source

Slider.vue:27

packages/ui/src/components/slider/Slider.vue

max
number | undefined
100
The maximum permitted value.
Details

Declared type

number | undefined

Default value details

Resolved value
100

Source

Slider.vue:28

packages/ui/src/components/slider/Slider.vue

step
number | undefined
1
The increment used when adjusting the value by keyboard or pointer.
Details

Declared type

number | undefined

Default value details

Resolved value
1

Source

Slider.vue:29

packages/ui/src/components/slider/Slider.vue

disabled
boolean | undefined
false
Disables interaction with all slider thumbs.
Details

Declared type

boolean | undefined

Literal values

  • false
  • true

Default value details

Resolved value
false

Source

Slider.vue:30

packages/ui/src/components/slider/Slider.vue

ariaLabel
string | undefined
undefined
The accessible name passed to the slider primitive.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:31

packages/ui/src/components/slider/Slider.vue

ariaLabelledby
string | undefined
undefined
External element IDs that name the focusable thumb.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:32

packages/ui/src/components/slider/Slider.vue

ariaDescribedby
string | undefined
undefined
Thumb description IDs, combined with the built-in tooltip description.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:33

packages/ui/src/components/slider/Slider.vue

getValueText
((value: number, index: number) => string) | undefined
undefined
Callback function that generates aria-valuetext for each thumb.
Details

Declared type

((value: number, index: number) => string) | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:34

packages/ui/src/components/slider/Slider.vue

size
"default" | "lg" | "sm" | undefined
"default"
Sets the size preset for the track and thumb.
Details

Declared type

NonNullable<"default" | "lg" | "sm" | null | undefined> | undefined

Literal values

  • "default"
  • "lg"
  • "sm"

Default value details

Resolved value
"default"

Source

Slider.vue:35

packages/ui/src/components/slider/Slider.vue

variant
"accent" | "default" | "primary" | "secondary" | "success" | undefined
"default"
Sets the color variant for the range fill and thumb.
Details

Declared type

NonNullable<"default" | "primary" | "secondary" | "success" | "accent" | null | undefined> | undefined

Literal values

  • "accent"
  • "default"
  • "primary"
  • "secondary"
  • "success"

Default value details

Resolved value
"default"

Source

Slider.vue:36

packages/ui/src/components/slider/Slider.vue

orientation
"horizontal" | "vertical" | undefined
"horizontal"
Selects horizontal or vertical layout and positions marks and tooltips accordingly.
Details

Declared type

NonNullable<"vertical" | "horizontal" | null | undefined> | undefined

Literal values

  • "horizontal"
  • "vertical"

Default value details

Declaration
'horizontal'

Source: packages/ui/src/components/slider/Slider.vue

Resolved value
"horizontal"

Source

Slider.vue:37

packages/ui/src/components/slider/Slider.vue

marks
number[] | undefined
undefined
Values at which tick marks are drawn along the track.
Details

Declared type

number[] | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:38

packages/ui/src/components/slider/Slider.vue

showTooltip
boolean | undefined
false
Shows the value tooltip beside the currently focused or hovered thumb.
Details

Declared type

boolean | undefined

Literal values

  • false
  • true

Default value details

Resolved value
false

Source

Slider.vue:39

packages/ui/src/components/slider/Slider.vue

class
string | undefined
undefined
CSS classes added to the slider root container.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Slider.vue:40

packages/ui/src/components/slider/Slider.vue

Slider — Events
NameSignature or typeDescription
@update:modelValue
[value: number[]]
Emits the updated number array when the slider changes; a controlled value is applied when the parent updates modelValue.
Details

Declared type

[value: number[]]

Source

Slider.vue

packages/ui/src/components/slider/Slider.vue

Slider — Exposes
NameSignature or typeDescription
currentValue
number[]
The computed array of effective slider values. It is read-only and contains min when the model is omitted or empty.
Details

Declared type

number[]

Source

Slider.vue:71

packages/ui/src/components/slider/Slider.vue

setValue
(value: number[]) => void
Requests a new slider value array from the parent by emitting update:modelValue.
Details

Declared type

(value: number[]) => void

Source

Slider.vue:72

packages/ui/src/components/slider/Slider.vue

Accessibility ​

  • Keyboard: Supports arrow keys to adjust the value, Home / End to jump to min/max
  • ARIA Attributes: Automatically manages aria-valuemin, aria-valuemax, aria-valuenow, aria-orientation, etc.
  • Focus Management: The slider can be focused via the Tab key

Exposed Methods (defineExpose) ​

Use a component ref to call setValue and request a new slider value from the parent:

vue
<script setup>
import { ref } from 'vue'
import { Slider } from 'brutx-ui-vue'

const sliderRef = ref(null)
const value = ref([50])

function resetToCenter() {
    sliderRef.value?.setValue([50])
}
</script>

<template>
    <Slider ref="sliderRef" v-model="value" />
    <button @click="resetToCenter">Reset</button>
</template>

Brute force builds.