Vitral 0.2
Formulário

Slider

Escolha um valor, ou um intervalo, arrastando ao longo de uma trilha ou pelo teclado.

Importação

main.ts
import { Slider } from '@vitral/vue';

Básico

Volume
Value: 40
Opacity
Value: 0.6
<script setup lang="ts">import { Slider, StackPanel } from '@vitral/vue';import { ref } from 'vue'; const volume = ref(40);const opacity = ref(0.6);</script> <template>    <StackPanel orientation="horizontal" spacing="0.75rem" align="start" wrap>        <StackPanel spacing="0.375rem" class="slider-demo">            <span id="sl-volume">Volume</span>            <Slider v-model="volume" aria-labelledby="sl-volume" />            <small style="color: var(--vt-text-muted-color)">Value: {{ volume }}</small>        </StackPanel>        <StackPanel spacing="0.375rem" class="slider-demo">            <span id="sl-opacity">Opacity</span>            <Slider v-model="opacity" :min="0" :max="1" :step="0.05" aria-labelledby="sl-opacity" :format-value="(v: number) => `${Math.round(v * 100)}%`" />            <small style="color: var(--vt-text-muted-color)">Value: {{ opacity }}</small>        </StackPanel>    </StackPanel></template> <style scoped>.slider-demo {    width: 20rem;}</style>

Intervalo

v-model é [start, end]. Um só nome cobre as duas alças, que são diferenciadas como mínimo e máximo.

Price
R$ 200 – R$ 750
<script setup lang="ts">import { Slider, StackPanel } from '@vitral/vue';import { ref } from 'vue'; const price = ref([200, 750]);</script> <template>    <StackPanel spacing="0.375rem" class="slider-demo">        <span id="sl-price">Price</span>        <Slider v-model="price" range :min="0" :max="1000" :step="10" aria-labelledby="sl-price" :format-value="(v: number) => `R$ ${v}`" />        <small style="color: var(--vt-text-muted-color)">R$ {{ price[0] }} – R$ {{ price[1] }}</small>    </StackPanel></template> <style scoped>.slider-demo {    width: 20rem;}</style>

Vertical

O mínimo fica embaixo; Up e Right aumentam.

Bass 30 · Treble 70 · 21 °C
<script setup lang="ts">import { Slider } from '@vitral/vue';import { ref } from 'vue'; const bass = ref(30);const treble = ref(70);const temperature = ref(21);</script> <template>    <Slider v-model="bass" orientation="vertical" aria-label="Bass" />    <Slider v-model="treble" orientation="vertical" aria-label="Treble" />    <Slider v-model="temperature" orientation="vertical" :min="16" :max="30" :step="0.5" aria-label="Temperature" :format-value="(v: number) => `${v} °C`" />    <small style="color: var(--vt-text-muted-color)">Bass {{ bass }} · Treble {{ treble }} · {{ temperature }} °C</small></template>

Desabilitado

<script setup lang="ts">import { Slider, StackPanel } from '@vitral/vue';</script> <template>    <StackPanel orientation="horizontal" spacing="0.75rem" align="start" wrap>        <StackPanel spacing="0.375rem" class="slider-demo">            <Slider :model-value="60" disabled aria-label="Disabled" />        </StackPanel>        <StackPanel spacing="0.375rem" class="slider-demo">            <Slider :model-value="[25, 75]" range disabled :aria-label="['Disabled start', 'Disabled end']" />        </StackPanel>    </StackPanel></template> <style scoped>.slider-demo {    width: 20rem;}</style>

API

Lido de packages/vue/src/components/Slider/types.ts, então diz o que o componente aceita de fato.

Props

NomeTipoDescrição
minnumberO padrão é 0.
maxnumberO padrão é 100.
stepnumberDistância entre valores vizinhos; o padrão é 1. 0 deixa o marcador parar em qualquer ponto.
rangebooleanDois marcadores: o v-model é `[start, end]`, e os marcadores nunca se cruzam.
orientation'horizontal' | 'vertical'Um slider vertical tem o mínimo embaixo.
disabledboolean—
formatValue(value: number) => stringTexto que um leitor de tela anuncia para um valor (`aria-valuetext`): "20 °C" em vez de "20".
ariaLabelstring | string[]O nome acessível do marcador. Num intervalo, uma string nomeia os dois marcadores junto com o "minimum"/"maximum" do locale; um array nomeia cada um.
ariaLabelledbystring | string[]Id(s) do(s) elemento(s) que nomeiam os marcadores; um array nomeia cada marcador de um intervalo.

Mais pt, dt e unstyled de BaseProps; veja pass-through e modo sem estilo.

Emits

EventoPayloadDescrição
changevalue: SliderValueO valor foi confirmado: depois de uma tecla, ou quando um arrasto que o moveu termina.
slideendevent: SliderSlideEndEventUma interação do ponteiro terminou.