Field
Menggabungkan label, kontrol, dan teks bantuan menjadi satu baris form yang mudah diakses.
Instalasi
npx shadcn-vue@latest add fieldPenggunaan
<script setup lang="ts">
import {
Field,
FieldContent,
FieldDescription,
FieldError,
FieldGroup,
FieldLabel,
FieldLegend,
FieldSeparator,
FieldSet,
FieldTitle,
} from '@/components/ui/field'
</script>
<template>
<FieldSet>
<FieldLegend>Profile</FieldLegend>
<FieldDescription>This appears on invoices and emails.</FieldDescription>
<FieldGroup>
<Field>
<FieldLabel for="name">
Full name
</FieldLabel>
<Input id="name" autocomplete="off" placeholder="Evil Rabbit" />
<FieldDescription>This appears on invoices and emails.</FieldDescription>
</Field>
<Field>
<FieldLabel for="username">
Username
</FieldLabel>
<Input id="username" autocomplete="off" aria-invalid />
<FieldError>Choose another username.</FieldError>
</Field>
<Field orientation="horizontal">
<Switch id="newsletter" />
<FieldLabel for="newsletter">
Subscribe to the newsletter
</FieldLabel>
</Field>
</FieldGroup>
</FieldSet>
</template>Anatomi
Keluarga komponen Field dirancang untuk menyusun form yang mudah diakses. Susunan satu field pada umumnya seperti ini:
<template>
<Field>
<FieldLabel for="input-id">
Label
</FieldLabel>
<!-- Input, Select, Switch, etc. -->
<FieldDescription>Optional helper text.</FieldDescription>
<FieldError>Validation message.</FieldError>
</Field>
</template>Fieldadalah pembungkus inti untuk satu field.FieldContentadalah kolom flex yang menyatukan label dan keterangan. Tidak perlu dipakai kalau field Anda tanpa keterangan.- Bungkus field-field yang berkaitan dengan
FieldGroup, dan pakaiFieldSetbersamaFieldLegenduntuk pengelompokan yang bermakna.
Contoh
Input
Textarea
Select
Select your department or area of work.
Slider
Set your budget range ($ 200 - 800).
Fieldset
Checkbox
Your Desktop & Documents folders are being synced with iCloud Drive. You can access them from other devices.
Radio
Switch
Enable multi-factor authentication. If you do not have a two-factor device, you can use a one-time code sent to your email.
Kartu Pilihan
Bungkus komponen Field di dalam FieldLabel untuk membuat kelompok field yang bisa dipilih. Cara ini berlaku untuk komponen RadioItem, Checkbox, dan Switch.
Field Group
Tumpuk komponen Field memakai FieldGroup. Tambahkan FieldSeparator untuk memisahkannya.
Tata Letak Responsif
Kalau Anda memakai Tailwind CSS v3, Anda perlu memasang @tailwindcss/container-queries.
- Field tegak: orientasi bawaan menumpuk label, kontrol, dan teks bantuan — cocok untuk tata letak yang mengutamakan mobile.
- Field mendatar: isi
orientation="horizontal"padaFieldagar label dan kontrolnya bersebelahan. Padukan denganFieldContentsupaya keterangannya tetap sejajar. - Field responsif: isi
orientation="responsive"agar susunan kolomnya menyesuaikan otomatis di dalam induk yang sadar ukuran container. Pakai class@container/field-grouppadaFieldGroupuntuk berganti orientasi di breakpoint tertentu.
Validasi dan Pesan Error
- Tambahkan
data-invalidpadaFielduntuk mengubah seluruh blok menjadi keadaan error. - Tambahkan
aria-invalidpada input-nya sendiri demi teknologi bantu. - Tempatkan
FieldErrortepat setelah kontrolnya, atau di dalamFieldContent, supaya pesan error tetap sejajar dengan field-nya.
<template>
<Field data-invalid>
<FieldLabel for="email">
Email
</FieldLabel>
<Input id="email" type="email" aria-invalid />
<FieldError>Enter a valid email address.</FieldError>
</Field>
</template>Aksesibilitas
FieldSetdanFieldLegendmenjaga kontrol yang berkaitan tetap satu kelompok bagi pengguna keyboard dan teknologi bantu.Fieldmenghasilkanrole="group", sehingga kontrol di dalamnya mewarisi pelabelan dariFieldLabeldanFieldLegend.- Pakai
FieldSeparatorseperlunya saja, supaya batas antar bagian tetap jelas terbaca pembaca layar.
Referensi API
FieldSet
Wadah yang menghasilkan fieldset bermakna, lengkap dengan pengaturan jarak bawaan.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<template>
<FieldSet>
<FieldLegend>Delivery</FieldLegend>
<FieldGroup>
<!-- Fields -->
</FieldGroup>
</FieldSet>
</template>FieldLegend
Elemen legend untuk sebuah FieldSet. Ganti ke varian label agar ukurannya selaras dengan label.
| Prop | Type | Default |
|---|---|---|
variant | "legend" | "label" | "legend" |
class | string |
<FieldLegend variant="label">
Notification Preferences
</FieldLegend>FieldLegend punya dua varian: legend dan label. Varian label memakai ukuran dan perataan seperti label — berguna kalau FieldSet Anda bersarang.
FieldGroup
Pembungkus tata letak yang menumpuk komponen Field dan mengaktifkan container query untuk orientasi responsif.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<template>
<FieldGroup class="@container/field-group flex flex-col gap-6">
<Field><!-- Fields --></Field>
<Field><!-- Fields --></Field>
</FieldGroup>
</template>Field
Pembungkus inti untuk satu field. Mengatur orientasi, style keadaan tidak valid, dan jarak antar elemen.
| Prop | Type | Default |
|---|---|---|
orientation | "vertical" | "horizontal" | "responsive" | "vertical" |
class | string | |
data-invalid | boolean |
<Field orientation="horizontal">
<FieldLabel for="remember">Remember me</FieldLabel>
<Switch id="remember" />
</Field>FieldContent
Kolom flex yang menyatukan kontrol dan keterangannya saat label berada di samping kontrol. Tidak perlu dipakai kalau field Anda tanpa keterangan.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<Field>
<Checkbox id="notifications" />
<FieldContent>
<FieldLabel for="notifications">Notifications</FieldLabel>
<FieldDescription>Email, SMS, and push options.</FieldDescription>
</FieldContent>
</Field>FieldLabel
Label yang style-nya cocok baik untuk input langsung maupun Field yang bersarang di dalamnya.
| Prop | Type | Default |
|---|---|---|
class | string | |
asChild | boolean | false |
<FieldLabel for="email">
Email
</FieldLabel>FieldTitle
Menampilkan judul bergaya label di dalam FieldContent.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<FieldContent>
<FieldTitle>Enable Touch ID</FieldTitle>
<FieldDescription>Unlock your device faster.</FieldDescription>
</FieldContent>FieldDescription
Slot teks bantuan yang otomatis menyeimbangkan baris panjang pada tata letak mendatar.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<FieldDescription>
We never share your email with anyone.
</FieldDescription>FieldSeparator
Pembatas visual antar bagian di dalam FieldGroup. Bisa diisi konten sebaris kalau perlu.
| Prop | Tipe | Bawaan |
|---|---|---|
class | string |
<FieldSeparator>
Or continue with
</FieldSeparator>FieldError
Wadah pesan error yang mudah diakses. Bisa diisi langsung, atau menerima array errors — misalnya dari vee-validate.
| Prop | Type | Default |
|---|---|---|
errors | Array<{ message?: string } | undefined> | |
class | string |
<FieldError :errors="errors.username" />Kalau array errors memuat lebih dari satu pesan, komponen ini otomatis menampilkannya sebagai daftar.
FieldError juga menerima issue dari validator mana pun yang menerapkan Standard Schema, termasuk Zod, Valibot, dan ArkType. Teruskan array issues dari hasil validasi skema untuk menampilkan daftar error yang seragam lintas library.