Slider
Usage
v-model 지시어를 사용하여 Slider 값을 제어합니다.
<script setup lang="ts">
const value = ref(50)
</script>
<template>
<USlider v-model="value" />
</template><script setup lang="ts">
import { ref } from 'vue'
const value = ref(50)
</script>
<template>
<USlider v-model="value" />
</template>상태를 제어할 필요가 없을 때 default-value prop을 사용하여 초기값을 설정합니다.
<template>
<USlider :default-value="50" />
</template>aria-label 또는 aria-labelledby를 사용하여 단일 엄지 손가락의 이름을 Slider로 지정하면 slider 역할이있는 요소 인 엄지 손가락으로 전달됩니다.여러 엄지 손가락의 엄지 손가락 Slider는 위치에 따라 명명되어 구분할 수 있습니다. Minimum/Maximum는 두 엄지 손가락, Value n of m는 세 개 이상의 엄지 손가락을 의미합니다. 이러한 이름은 유지되며 aria-label는 모든 엄지 손가락에서 반복되는 대신 루트에서 group 역할을 통해 Slider를 전체적으로 이름 지정합니다.최소/최대
min 및 max props를 사용하여 Slider.Defaults의 최소값과 최대값을 0 및 100로 설정합니다.
<template>
<USlider :min="0" :max="50" :default-value="50" />
</template>Step (### Step)
step prop을 사용하여 Slider.기본값은 1로 설정합니다.
<template>
<USlider :step="10" :default-value="50" />
</template>Multiple 다중
v-model 지시어 또는 값 배열과 함께 default-value prop을 사용하여 범위 Slider를 만듭니다.
<script setup lang="ts">
const value = ref([
25,
75
])
</script>
<template>
<USlider v-model="value" />
</template><script setup lang="ts">
import { ref } from 'vue'
const value = ref([
25,
75
])
</script>
<template>
<USlider v-model="value" />
</template>min-steps-between-thumbs Prop을 사용하여 엄지손가락 사이의 최소 거리를 제한합니다.
<script setup lang="ts">
const value = ref([
25,
50,
75
])
</script>
<template>
<USlider v-model="value" :min-steps-between-thumbs="10" />
</template><script setup lang="ts">
import { ref } from 'vue'
const value = ref([
25,
50,
75
])
</script>
<template>
<USlider v-model="value" :min-steps-between-thumbs="10" />
</template>방향 지정
orientation Prop을 사용하여 Slider.기본값은 horizontal입니다.
<template>
<USlider orientation="vertical" :default-value="50" class="h-48" />
</template>Color 이미지
color Prop을 사용하여 Slider의 색상을 변경합니다.
<template>
<USlider color="neutral" :default-value="50" />
</template>Size
size Prop를 사용하여 Slider의 크기를 변경합니다.
<template>
<USlider size="xl" :default-value="50" />
</template>도구 팁
tooltip 소품을 사용하여 Slider 엄지손가락 주위에 Tooltip를 현재 값으로 표시합니다. 기본 동작을 위해 true로 설정하거나 객체를 전달하여 Tooltip 구성 요소의 속성으로 사용자 정의할 수 있습니다.
<template>
<USlider :default-value="50" tooltip />
</template>비활성 화
disabled Prop을 사용하여 Slider를 비활성화합니다.
<template>
<USlider disabled :default-value="50" />
</template>반전 됨
inverted Prop을 사용하여 Slider를 시각적으로 반전시킵니다.
<template>
<USlider inverted :default-value="25" />
</template>API
Props (### Props)
| Prop | Default | Type |
|---|---|---|
as | 'div' | anyThe element or component this component should render as. |
size | 'md' | "xs" | "sm" | "md" | "lg" | "xl" |
color | 'primary' | "primary" | "secondary" | "success" | "info" | "warning" | "error" | "neutral" |
orientation | 'horizontal' | "horizontal" | "vertical"The orientation of the slider. |
tooltip | false | boolean | TooltipProps Display a tooltip around the slider thumbs with the current value.
|
defaultValue | number | number[]The value of the slider when initially rendered. Use when you do not need to control the state of the slider. | |
name | stringThe name of the field. Submitted with its owning form as part of a name/value pair. | |
disabled | boolean When | |
inverted | boolean Whether the slider is visually inverted. | |
min | 0 | numberThe minimum value for the range. |
max | 100 | numberThe maximum value for the range. |
step | 1 | numberThe stepping interval. |
minStepsBetweenThumbs | numberThe minimum permitted steps between multiple thumbs. | |
modelValue | T | |
ui | { root?: SlotClass; track?: SlotClass; range?: SlotClass; thumb?: SlotClass; } |
Emits
| Event | Type |
|---|---|
change | [event: Event] |
update:modelValue | [value: T | undefined] |
Theme 본문
export default defineAppConfig({
ui: {
slider: {
slots: {
root: 'relative flex items-center select-none touch-none',
track: 'relative bg-accented overflow-hidden rounded-full grow',
range: 'absolute rounded-full',
thumb: 'rounded-full bg-default ring-2 focus-visible:outline-3 focus-visible:outline-offset-2'
},
variants: {
color: {
primary: {
range: 'bg-primary',
thumb: 'ring-primary outline-primary/25'
},
secondary: {
range: 'bg-secondary',
thumb: 'ring-secondary outline-secondary/25'
},
success: {
range: 'bg-success',
thumb: 'ring-success outline-success/25'
},
info: {
range: 'bg-info',
thumb: 'ring-info outline-info/25'
},
warning: {
range: 'bg-warning',
thumb: 'ring-warning outline-warning/25'
},
error: {
range: 'bg-error',
thumb: 'ring-error outline-error/25'
},
neutral: {
range: 'bg-inverted',
thumb: 'ring-inverted outline-inverted/25'
}
},
size: {
xs: {
thumb: 'size-3'
},
sm: {
thumb: 'size-3.5'
},
md: {
thumb: 'size-4'
},
lg: {
thumb: 'size-4.5'
},
xl: {
thumb: 'size-5'
}
},
orientation: {
horizontal: {
root: 'w-full',
range: 'h-full'
},
vertical: {
root: 'flex-col h-full',
range: 'w-full'
}
},
disabled: {
true: {
root: 'opacity-75 cursor-not-allowed'
}
}
},
compoundVariants: [
{
orientation: 'horizontal',
size: 'xs',
class: {
track: 'h-[6px]'
}
},
{
orientation: 'horizontal',
size: 'sm',
class: {
track: 'h-[7px]'
}
},
{
orientation: 'horizontal',
size: 'md',
class: {
track: 'h-[8px]'
}
},
{
orientation: 'horizontal',
size: 'lg',
class: {
track: 'h-[9px]'
}
},
{
orientation: 'horizontal',
size: 'xl',
class: {
track: 'h-[10px]'
}
},
{
orientation: 'vertical',
size: 'xs',
class: {
track: 'w-[6px]'
}
},
{
orientation: 'vertical',
size: 'sm',
class: {
track: 'w-[7px]'
}
},
{
orientation: 'vertical',
size: 'md',
class: {
track: 'w-[8px]'
}
},
{
orientation: 'vertical',
size: 'lg',
class: {
track: 'w-[9px]'
}
},
{
orientation: 'vertical',
size: 'xl',
class: {
track: 'w-[10px]'
}
}
],
defaultVariants: {
size: 'md',
color: 'primary'
}
}
}
})import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
slider: {
slots: {
root: 'relative flex items-center select-none touch-none',
track: 'relative bg-accented overflow-hidden rounded-full grow',
range: 'absolute rounded-full',
thumb: 'rounded-full bg-default ring-2 focus-visible:outline-3 focus-visible:outline-offset-2'
},
variants: {
color: {
primary: {
range: 'bg-primary',
thumb: 'ring-primary outline-primary/25'
},
secondary: {
range: 'bg-secondary',
thumb: 'ring-secondary outline-secondary/25'
},
success: {
range: 'bg-success',
thumb: 'ring-success outline-success/25'
},
info: {
range: 'bg-info',
thumb: 'ring-info outline-info/25'
},
warning: {
range: 'bg-warning',
thumb: 'ring-warning outline-warning/25'
},
error: {
range: 'bg-error',
thumb: 'ring-error outline-error/25'
},
neutral: {
range: 'bg-inverted',
thumb: 'ring-inverted outline-inverted/25'
}
},
size: {
xs: {
thumb: 'size-3'
},
sm: {
thumb: 'size-3.5'
},
md: {
thumb: 'size-4'
},
lg: {
thumb: 'size-4.5'
},
xl: {
thumb: 'size-5'
}
},
orientation: {
horizontal: {
root: 'w-full',
range: 'h-full'
},
vertical: {
root: 'flex-col h-full',
range: 'w-full'
}
},
disabled: {
true: {
root: 'opacity-75 cursor-not-allowed'
}
}
},
compoundVariants: [
{
orientation: 'horizontal',
size: 'xs',
class: {
track: 'h-[6px]'
}
},
{
orientation: 'horizontal',
size: 'sm',
class: {
track: 'h-[7px]'
}
},
{
orientation: 'horizontal',
size: 'md',
class: {
track: 'h-[8px]'
}
},
{
orientation: 'horizontal',
size: 'lg',
class: {
track: 'h-[9px]'
}
},
{
orientation: 'horizontal',
size: 'xl',
class: {
track: 'h-[10px]'
}
},
{
orientation: 'vertical',
size: 'xs',
class: {
track: 'w-[6px]'
}
},
{
orientation: 'vertical',
size: 'sm',
class: {
track: 'w-[7px]'
}
},
{
orientation: 'vertical',
size: 'md',
class: {
track: 'w-[8px]'
}
},
{
orientation: 'vertical',
size: 'lg',
class: {
track: 'w-[9px]'
}
},
{
orientation: 'vertical',
size: 'xl',
class: {
track: 'w-[10px]'
}
}
],
defaultVariants: {
size: 'md',
color: 'primary'
}
}
}
})
]
})