number-field
Number field in form
Number field in form
Загрузка превью…
src/number-field/c-number-field-6.vue
<!--
Упрощение (не влияет на статичный рендер, тот же приём, что и в
`c-autocomplete-12.vue`): `react-hook-form`/`zod`/`sonner` из оригинала не
подтянуты — форма ни разу не отправляется в статичном скриншоте, поэтому
валидация и toast-уведомление никогда не видны. Значение поля — обычный
`ref`, `data-invalid` всегда `"false"` (форма не тронута, ошибки нет),
что даёт тот же закрытый DOM, что и у оригинала до первого submit.
Голый `data-invalid` во Vue-шаблоне компилируется в пустую строку и не
матчится темой (docs/PORTING.md §16) — значение передано явно.
-->
<script setup lang="ts">
import { ref } from "vue"
import { NumberField, NumberFieldDecrement, NumberFieldGroup, NumberFieldIncrement, NumberFieldInput } from "@/components/reui/number-field"
import { Button } from "@/components/ui/button"
import { Field, FieldDescription, FieldGroup, FieldLabel, FieldSet } from "@/components/ui/field"
const amount = ref(5)
function reset() {
amount.value = 5
}
</script>
<template>
<div class="w-full max-w-68">
<form @submit.prevent>
<FieldGroup>
<FieldSet>
<FieldGroup>
<Field data-invalid="false">
<FieldLabel for="number-field-amount">Amount</FieldLabel>
<NumberField id="number-field-amount" v-model="amount" :min="0" :max="100">
<NumberFieldGroup :aria-invalid="false">
<NumberFieldDecrement />
<NumberFieldInput />
<NumberFieldIncrement />
</NumberFieldGroup>
</NumberField>
<FieldDescription>Enter an amount between 10 and 100.</FieldDescription>
</Field>
</FieldGroup>
</FieldSet>
<Field orientation="horizontal">
<Button variant="outline" type="button" class="flex-1" @click="reset">Cancel</Button>
<Button type="submit" class="flex-1">Submit</Button>
</Field>
</FieldGroup>
</form>
</div>
</template>
Установка
npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-number-field-6.jsonЗависимости реестра
Источник: порт из ReUI (Keenthemes, MIT)