HextaUI

Field

Kontrolüne bağlanmış etiketler, açıklamalar ve hatalar; doğrulama durumları ve formlar için düzenler içerir.

Shown on your profile.

"use client"

import { Form } from "@base-ui/react/form"
import { IconAt } from "@tabler/icons-react"

import { Button } from "@/components/ui/button"
import {
  Field,
  FieldCounter,
  FieldDescription,
  FieldError,
  FieldGroup,
  FieldLabel,
  FieldStatus,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"
import {
  InputGroup,
  InputGroupAddon,
  InputGroupInput,
  InputGroupTextarea,
} from "@/components/ui/input-group"

export function FieldDemo() {
  return (
    <Form
      className="w-full max-w-sm"
      onSubmit={(event) => event.preventDefault()}
    >
      <FieldGroup indicator="optional">
        <Field validationMode="onBlur">
          <FieldLabel>Display name</FieldLabel>
          <Input name="name" autoComplete="name" required />
          <FieldError match="valueMissing">
            Add the name people will see.
          </FieldError>
        </Field>
        <Field validationMode="onChange">
          <FieldLabel>Handle</FieldLabel>
          <InputGroup>
            <InputGroupInput
              name="handle"
              autoComplete="username"
              pattern="[a-z0-9_]{3,15}"
              maxLength={15}
              required
            />
            <InputGroupAddon>
              <IconAt />
            </InputGroupAddon>
            <InputGroupAddon align="inline-end">
              <FieldStatus />
            </InputGroupAddon>
          </InputGroup>
          <FieldError match="valueMissing">Pick a handle.</FieldError>
          <FieldError match="patternMismatch">
            Use 3–15 lowercase letters, numbers or underscores.
          </FieldError>
        </Field>
        <Field>
          <FieldLabel>Bio</FieldLabel>
          <InputGroup>
            <InputGroupTextarea name="bio" maxLength={160} />
          </InputGroup>
          <div className="flex items-baseline justify-between gap-3">
            <FieldDescription>Shown on your profile.</FieldDescription>
            <FieldCounter />
          </div>
        </Field>
        <Button type="submit">Save profile</Button>
      </FieldGroup>
    </Form>
  )
}
pnpm dlx shadcn@latest add https://hextaui.com/r/field.json

Bileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.

import {
  Field,
  FieldDescription,
  FieldError,
  FieldGroup,
  FieldLabel,
} from "@/components/ui/field"
<FieldGroup indicator="optional">
  <Field>
    <FieldLabel>Email</FieldLabel>
    <Input type="email" required />
    <FieldDescription>We’ll never share it.</FieldDescription>
    <FieldError />
  </Field>
</FieldGroup>

Herhangi bir HextaUI kontrolünü bir <Field /> içine koyun; otomatik olarak etiketlenir, tanımlanır ve doğrulanır. id, htmlFor veya aria-describedby değerlerini elle bağlamanıza gerek yoktur.

Etiketi, yardım metni ve doğrulamasıyla tek bir kontrol.

Field
├── FieldLabel
├── Input / Textarea / Select / …
├── FieldDescription
├── FieldError
├── FieldCounter
└── FieldStatus

Yanında metni olan bir switch veya checkbox.

Field
├── Switch / Checkbox
└── FieldContent
    ├── FieldLabel
    └── FieldDescription

Kartın tıklama hedefi olması için tüm bir alanı saran bir etiket.

FieldLabel
└── Field
    ├── Checkbox / RadioGroupItem
    └── FieldContent
        ├── FieldTitle
        └── FieldDescription

Eşit aralıklı ilgili alanlar.

FieldGroup
├── Field
├── FieldSeparator
└── Field

Başlıklı bir alan grubu veya her seçenek için bir öğe içeren bir radio ya da checkbox grubu.

FieldSet
├── FieldLegend
├── FieldDescription
└── FieldGroup
    └── Field

FieldSet
├── FieldLegend
└── FieldItem
    ├── RadioGroupItem / Checkbox
    └── FieldLabel

Input

Bir etiket, bir kontrol ve bir açıklama. Etikete tıklamak girdiye odaklanır ve ekran okuyucular açıklamayı etiketten sonra okur.

import { Field, FieldDescription, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldInput() {
  return (
    <Field className="max-w-sm">
      <FieldLabel>Username</FieldLabel>
      <Input placeholder="ada" autoComplete="username" />
      <FieldDescription>
        Shown on your profile. You can change it once a month.
      </FieldDescription>
    </Field>
  )
}

Doğrulama

required ve minLength gibi yerel kısıtlamalar blur'da denetlenir. Mesajı soruna göre ifade etmek için her <FieldError /> bileşenine bir match verin. Boş bir zorunlu alan yalnızca düzenlendikten sonra işaretlenir; bu yüzden Tab ile geçmek bağırmaz.

import {
  Field,
  FieldDescription,
  FieldError,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldValidation() {
  return (
    <Field validationMode="onBlur" className="max-w-sm">
      <FieldLabel>Password</FieldLabel>
      <Input
        type="password"
        autoComplete="new-password"
        required
        minLength={8}
      />
      <FieldDescription>At least 8 characters.</FieldDescription>
      <FieldError match="valueMissing">Choose a password.</FieldError>
      <FieldError match="tooShort">
        That’s too short. Use 8 or more characters.
      </FieldError>
    </Field>
  )
}

Özel doğrulama

Asenkron aramalar dahil her şeyi denetlemek için validate geçin. Başarısız olmak için bir mesaj, geçmek için hiçbir şey döndürün. validationMode="onChange" ve validationDebounceTime ile, her tuşta tetiklenmeden yazarken çalışır. “ada”yı deneyin.

"use client"

import {
  Field,
  FieldDescription,
  FieldError,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

const taken = ["admin", "ada", "hexta"]

async function checkUsername(value: unknown) {
  const name = String(value ?? "")
    .trim()
    .toLowerCase()
  if (name.length === 0) {
    return null
  }
  if (!/^[a-z0-9_]+$/.test(name)) {
    return "Use letters, numbers and underscores only."
  }
  await new Promise((resolve) => setTimeout(resolve, 400))
  return taken.includes(name) ? `“${name}” is taken.` : null
}

export function FieldCustomValidation() {
  return (
    <Field
      validationMode="onChange"
      validationDebounceTime={300}
      validate={checkUsername}
      className="max-w-sm"
    >
      <FieldLabel>Username</FieldLabel>
      <Input placeholder="Try “ada”" autoComplete="off" />
      <FieldDescription>Checked as you type.</FieldDescription>
      <FieldError />
    </Field>
  )
}

Zorunlu ve isteğe bağlı

Bir FieldGroup, FieldSet veya Field üzerinde indicator ayarlayın; içindeki her etiket kendini kontrolünün required niteliğine göre işaretler. "optional" kişilerin atlayabileceği alanları etiketler; alanların çoğu zorunluyken daha sakin okunur. "required" bir yıldız ekler. İşaret ekran okuyuculardan gizlenir, çünkü kontrol bunu zaten duyurur.

import {
  Field,
  FieldGroup,
  FieldLabel,
  FieldSeparator,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldIndicatorDemo() {
  return (
    <div className="flex w-full max-w-sm flex-col gap-8">
      <FieldGroup indicator="optional">
        <Field>
          <FieldLabel>Email</FieldLabel>
          <Input type="email" autoComplete="email" required />
        </Field>
        <Field>
          <FieldLabel>Company</FieldLabel>
          <Input autoComplete="organization" />
        </Field>
      </FieldGroup>
      <FieldSeparator />
      <FieldGroup indicator="required">
        <Field>
          <FieldLabel>Card number</FieldLabel>
          <Input inputMode="numeric" autoComplete="cc-number" required />
        </Field>
        <Field>
          <FieldLabel>Billing note</FieldLabel>
          <Input />
        </Field>
      </FieldGroup>
    </div>
  )
}

Durum

<FieldStatus /> düzenlenmiş bir alan doğrulamayı geçince bir onay işareti çizer, başarısız olduğu sürece bir uyarı simgesi gösterir. Alanın validationMode değerini izler; bu yüzden doğrulama çalışmadan önce bir alanı asla yargılamaz.

import {
  Field,
  FieldDescription,
  FieldError,
  FieldLabel,
  FieldStatus,
} from "@/components/ui/field"
import {
  InputGroup,
  InputGroupAddon,
  InputGroupInput,
} from "@/components/ui/input-group"

export function FieldStatusDemo() {
  return (
    <Field validationMode="onChange" className="max-w-sm">
      <FieldLabel>Invite code</FieldLabel>
      <InputGroup>
        <InputGroupInput
          name="code"
          pattern="HX-[0-9]{4}"
          placeholder="HX-0000"
          autoComplete="off"
        />
        <InputGroupAddon align="inline-end">
          <FieldStatus />
        </InputGroupAddon>
      </InputGroup>
      <FieldDescription>Try HX-2026.</FieldDescription>
      <FieldError match="patternMismatch">
        Codes look like HX- followed by four digits.
      </FieldError>
    </Field>
  )
}

Karakter sayısı

<FieldCounter /> alanındaki metin kontrolünü bulur ve maxLength değerine göre sayar. Yalnızca dinler; bu yüzden yazma asla yavaşlatılmaz veya değiştirilmez.

import {
  Field,
  FieldCounter,
  FieldDescription,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldCounterDemo() {
  return (
    <Field className="max-w-sm">
      <FieldLabel>Status</FieldLabel>
      <Input defaultValue="Shipping the field rework" maxLength={40} />
      <div className="flex items-baseline justify-between gap-3">
        <FieldDescription>Clears after 24 hours.</FieldDescription>
        <FieldCounter />
      </div>
    </Field>
  )
}

Bir form kütüphanesinden veya sunucudan gelen hatalar

Alana invalid, <FieldError /> bileşenine bir errors dizisi geçin. React Hook Form'un ve çoğu şema kütüphanesinin döndürdüğü { message } biçimini alır. Yinelenenler atılır ve birden çok mesaj bir liste olur. Mesajlar değiştiğinde yenileri solarak belirir ve yükseklik uymak için yumuşakça değişir; böylece altındaki hiçbir şey zıplamaz. Boş gönderin, sonra kuralları tek tek düzeltin.

"use client"

import * as React from "react"

import { Button } from "@/components/ui/button"
import {
  Field,
  FieldError,
  FieldGroup,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

type Errors = {
  email?: { message: string }[]
  password?: { message: string }[]
}

export function FieldErrors() {
  const [errors, setErrors] = React.useState<Errors>({})

  return (
    <form
      className="w-full max-w-sm"
      onSubmit={(event) => {
        event.preventDefault()
        const data = new FormData(event.currentTarget)
        const password = String(data.get("password") ?? "")
        const next: Errors = {}
        if (!String(data.get("email") ?? "").includes("@")) {
          next.email = [{ message: "Enter a valid email." }]
        }
        const problems = []
        if (password.length < 8) {
          problems.push({ message: "Use at least 8 characters." })
        }
        if (!/\d/.test(password)) {
          problems.push({ message: "Include a number." })
        }
        if (problems.length > 0) {
          next.password = problems
        }
        setErrors(next)
      }}
    >
      <FieldGroup>
        <Field invalid={Boolean(errors.email)}>
          <FieldLabel>Email</FieldLabel>
          <Input name="email" autoComplete="email" />
          <FieldError errors={errors.email ?? []} />
        </Field>
        <Field invalid={Boolean(errors.password)}>
          <FieldLabel>Password</FieldLabel>
          <Input name="password" type="password" autoComplete="new-password" />
          <FieldError errors={errors.password ?? []} />
        </Field>
        <Button type="submit">Sign up</Button>
      </FieldGroup>
    </form>
  )
}

Onay kutuları

Checkbox'ı etiketinin yanına koymak için orientation="horizontal" kullanın. Bir <FieldSet /> içinde legend tüm grubu adlandırır.

import { Checkbox, CheckboxGroup } from "@/components/ui/checkbox"
import {
  Field,
  FieldDescription,
  FieldLabel,
  FieldLegend,
  FieldSet,
} from "@/components/ui/field"

const options = [
  { value: "mentions", label: "Mentions" },
  { value: "replies", label: "Replies to my comments" },
  { value: "digest", label: "Weekly digest" },
]

export function FieldCheckbox() {
  return (
    <FieldSet className="w-full max-w-sm">
      <FieldLegend variant="label">Email me about</FieldLegend>
      <FieldDescription>Security alerts are always on.</FieldDescription>
      <CheckboxGroup defaultValue={["mentions", "replies"]}>
        {options.map((option) => (
          <Field key={option.value} orientation="horizontal">
            <Checkbox name="notifications" value={option.value} />
            <FieldLabel>{option.label}</FieldLabel>
          </Field>
        ))}
      </CheckboxGroup>
    </FieldSet>
  )
}

Seçim kartları

Kartı tıklama hedefi yapmak için tüm bir alanı <FieldLabel /> içine sarın. Etiketler iç içe geçemeyeceğinden içeride <FieldTitle /> kullanın. Kart işaretlendiğinde tonlanır ve checkbox'ı odaklandığında odak halkasını gösterir.

import { Checkbox } from "@/components/ui/checkbox"
import {
  Field,
  FieldContent,
  FieldDescription,
  FieldLabel,
  FieldLegend,
  FieldSet,
  FieldTitle,
} from "@/components/ui/field"

export function FieldChoiceCard() {
  return (
    <FieldSet className="w-full max-w-sm">
      <FieldLegend variant="label">Add-ons</FieldLegend>
      <div className="flex flex-col gap-3">
        <FieldLabel>
          <Field orientation="horizontal">
            <Checkbox name="backups" defaultChecked />
            <FieldContent>
              <FieldTitle>Daily backups</FieldTitle>
              <FieldDescription>
                Restore any day from the last 30.
              </FieldDescription>
            </FieldContent>
          </Field>
        </FieldLabel>
        <FieldLabel>
          <Field orientation="horizontal">
            <Checkbox name="support" />
            <FieldContent>
              <FieldTitle>Priority support</FieldTitle>
              <FieldDescription>Replies within four hours.</FieldDescription>
            </FieldContent>
          </Field>
        </FieldLabel>
        <FieldLabel>
          <Field orientation="horizontal" disabled>
            <Checkbox name="sso" />
            <FieldContent>
              <FieldTitle>Single sign-on</FieldTitle>
              <FieldDescription>
                Available on the Business plan.
              </FieldDescription>
            </FieldContent>
          </Field>
        </FieldLabel>
      </div>
    </FieldSet>
  )
}

Fieldset

<FieldSet /> ilgili alanları, grubun erişilebilir adı olan bir <FieldLegend /> altında gruplar. Alanları düz bir grid ile yan yana yerleştirin.

import {
  Field,
  FieldDescription,
  FieldGroup,
  FieldLabel,
  FieldLegend,
  FieldSet,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldFieldset() {
  return (
    <FieldSet className="w-full max-w-md">
      <FieldLegend>Shipping address</FieldLegend>
      <FieldDescription>Where should we send your order?</FieldDescription>
      <FieldGroup>
        <Field>
          <FieldLabel>Street address</FieldLabel>
          <Input autoComplete="street-address" />
        </Field>
        <div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
          <Field>
            <FieldLabel>City</FieldLabel>
            <Input autoComplete="address-level2" />
          </Field>
          <Field>
            <FieldLabel>Postal code</FieldLabel>
            <Input autoComplete="postal-code" />
          </Field>
        </div>
      </FieldGroup>
    </FieldSet>
  )
}

Duyarlı

orientation="responsive" dar alanlarda etiketi ve kontrolü üst üste dizer, çevreleyen <FieldGroup /> yeterince genişleyince yan yana koyar. Pencerenin değil, grubun genişliğine yanıt verir.

import {
  Field,
  FieldContent,
  FieldDescription,
  FieldGroup,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldResponsive() {
  return (
    <FieldGroup className="w-full max-w-xl">
      <Field orientation="responsive">
        <FieldContent>
          <FieldLabel>Display name</FieldLabel>
          <FieldDescription>Shown next to your messages.</FieldDescription>
        </FieldContent>
        <Input placeholder="Ada" className="sm:max-w-56" />
      </Field>
      <Field orientation="responsive">
        <FieldContent>
          <FieldLabel>Website</FieldLabel>
          <FieldDescription>Linked from your profile.</FieldDescription>
        </FieldContent>
        <Input placeholder="example.com" className="sm:max-w-56" />
      </Field>
    </FieldGroup>
  )
}

Devre dışı

Bir <FieldSet /> bileşenini devre dışı bırakmak, içindeki her alanı ve kontrolü devre dışı bırakır. Yalnızca birini devre dışı bırakmak için tek bir <Field /> bileşenine disabled geçin.

import { Checkbox } from "@/components/ui/checkbox"
import {
  Field,
  FieldDescription,
  FieldGroup,
  FieldLabel,
  FieldLegend,
  FieldSet,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldDisabled() {
  return (
    <FieldSet disabled className="w-full max-w-sm">
      <FieldLegend>Billing details</FieldLegend>
      <FieldDescription>Managed by your organization’s admin.</FieldDescription>
      <FieldGroup>
        <Field>
          <FieldLabel>Company</FieldLabel>
          <Input defaultValue="Acme Inc." />
        </Field>
        <Field orientation="horizontal">
          <Checkbox defaultChecked />
          <FieldLabel>Send invoices by email</FieldLabel>
        </Field>
      </FieldGroup>
    </FieldSet>
  )
}

Uzun içerik

Etiketler, açıklamalar ve hatalar dar formlarda, kırılmayan dizeler dahil, sarar ve düzeni asla genişletmez.

import {
  Field,
  FieldDescription,
  FieldError,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldLongContent() {
  return (
    <Field invalid className="w-72">
      <FieldLabel>
        A label long enough to wrap onto a second line in a narrow form
      </FieldLabel>
      <Input defaultValue="averyveryverylongunbrokenvaluethatkeepsgoing" />
      <FieldDescription>
        averyveryverylongunbrokendescriptionthatmustwrapinsteadofoverflowing
      </FieldDescription>
      <FieldError
        errors={[
          {
            message:
              "This message is long on purpose and wraps onto several lines without pushing anything wider.",
          },
        ]}
      />
    </Field>
  )
}

Sağdan sola

Metin, checkbox yerleşimi ve hata listeleri okuma yönünü izler.

import { Checkbox } from "@/components/ui/checkbox"
import {
  Field,
  FieldDescription,
  FieldError,
  FieldGroup,
  FieldLabel,
} from "@/components/ui/field"
import { Input } from "@/components/ui/input"

export function FieldRtl() {
  return (
    <div dir="rtl" className="w-full max-w-sm">
      <FieldGroup>
        <Field invalid>
          <FieldLabel>البريد الإلكتروني</FieldLabel>
          <Input type="email" defaultValue="ada@" />
          <FieldDescription>
            سنرسل رابط التأكيد إلى هذا العنوان.
          </FieldDescription>
          <FieldError errors={[{ message: "أدخل عنوان بريد صالحًا." }]} />
        </Field>
        <Field orientation="horizontal">
          <Checkbox defaultChecked />
          <FieldLabel>تذكرني</FieldLabel>
        </Field>
      </FieldGroup>
    </div>
  )
}
  • Etiket, açıklama ve görünür hatalar sizin için kontrole bağlanır; böylece ekran okuyucular kontrol odaklandığında üçünü de duyurur.
  • Geçersiz kontroller aria-invalid alır; bu aynı zamanda hata halkalarını da çizer.
  • Hatalar canlı bölge değildir. Kontrol odaklandığında okunurlar; bu yüzden değişimde doğrulamak yazmayı bölmez. Gönderimde odağı ilk geçersiz alana taşıyın.
  • Hatalar içeriği aşağı itmek yerine yerinde büyür ve solarak belirir. Azaltılmış hareket açıkken animasyonsuz görünürler.

Base UI field ve fieldset üzerine kuruludur. Her parça, render ettiği öğenin veya primitive'in prop'larını kabul eder.

PropTürVarsayılan
orientation
"vertical" | "horizontal" | "responsive""vertical"
indicatorEtiketi kontrolün required niteliğine göre işaretleyin. FieldGroup veya FieldSet'ten devralınır.
"required" | "optional" | null–
nameForm gönderildiğinde alanı tanımlar.
string–
validateBaşarısız olmak için bir veya daha fazla mesaj, geçmek için hiçbir şey döndürün. Asenkron desteklenir.
(value, formValues) => string | string[] | null | Promise<…>–
validationMode
"onSubmit" | "onBlur" | "onChange""onSubmit"
validationDebounceTimeonChange doğrulamaları arasında beklenecek milisaniye.
number0
invalidBir form kütüphanesinden veya sunucu yanıtından ayarlayın.
boolean–
disabled
booleanfalse
dirty
boolean–
touched
boolean–
actionsRefAlanı kod üzerinden doğrulayın.
RefObject<{ validate: () => void }>–
render
ReactElement | (props, state) => ReactElement<div>
ÖznitelikAçıklama
data-slot="field"CSS'te alanları hedefleyin.
data-orientationGeçerli yönelim.
data-disabledAlan devre dışı olduğunda bulunur.
data-validAlan geçerli olduğunda bulunur.
data-invalidAlan geçersiz olduğunda bulunur.
data-dirtyDeğer ilk değerinden değiştikten sonra bulunur.
data-touchedKontrole odaklanıp ayrıldıktan sonra bulunur.
data-filledKontrolün bir değeri olduğunda bulunur.
data-focusedKontrol odaktayken bulunur.
PropTürVarsayılan
nativeLabelrender etiketi etiket olmayan bir öğeyle değiştirdiğinde false yapın.
booleantrue
optionalTextindicator="optional" ile gösterilen metin.
ReactNode"Optional"
render
ReactElement | (props, state) => ReactElement<label>
ÖznitelikAçıklama
data-slot="field-label"CSS'te etiketleri hedefleyin. Bir alanın dışında düz bir etiket render eder; seçim kartları bu şekilde çalışır.
data-disabledAlan devre dışı olduğunda bulunur.
data-validAlan geçerli olduğunda bulunur.
data-invalidAlan geçersiz olduğunda bulunur.
data-dirtyDeğer ilk değerinden değiştikten sonra bulunur.
data-touchedKontrole odaklanıp ayrıldıktan sonra bulunur.
data-filledKontrolün bir değeri olduğunda bulunur.
data-focusedKontrol odaktayken bulunur.

Alanın geçerliliğini yansıtan bir simge. Anlamı hata mesajı taşıdığı için dekoratiftir.

ÖznitelikAçıklama
data-slot="field-status"CSS'te durum simgesini hedefleyin.
PropTürVarsayılan
threshold
number10% of maxLength, at most 20
announcementSayı eşiği geçtiğinde veya sınıra ulaştığında ekran okuyucular için mesaj.
(remaining: number) => string–
ÖznitelikAçıklama
data-slot="field-counter"CSS'te sayacı hedefleyin.
data-state="near" | "limit"Eşik içinde ve sınırda bulunur.
PropTürVarsayılan
render
ReactElement | (props, state) => ReactElement<p>
ÖznitelikAçıklama
data-slot="field-description"CSS'te açıklamaları hedefleyin.
data-disabledAlan devre dışı olduğunda bulunur.
data-validAlan geçerli olduğunda bulunur.
data-invalidAlan geçersiz olduğunda bulunur.
data-dirtyDeğer ilk değerinden değiştikten sonra bulunur.
data-touchedKontrole odaklanıp ayrıldıktan sonra bulunur.
data-filledKontrolün bir değeri olduğunda bulunur.
data-focusedKontrol odaktayken bulunur.
PropTürVarsayılan
matchYalnızca bu geçerlilik sorunu için gösterin. true her zaman gösterir.
boolean | "valueMissing" | "typeMismatch" | "tooShort" | "tooLong" | "patternMismatch" | "rangeOverflow" | "rangeUnderflow" | "stepMismatch" | "badInput" | "customError" | "valid"–
errorsBir form kütüphanesinden veya sunucudan gelen hatalar. Listede bir mesaj olduğunda gösterilir.
Array<{ message?: string } | undefined>–
childrenVarsayılan olarak doğrulama mesajıdır.
ReactNode–
render
ReactElement | (props, state) => ReactElement<div>
ÖznitelikAçıklama
data-slot="field-error"CSS'te hataları hedefleyin.
data-starting-styleHata büyürken bulunur.
data-ending-styleHata daralırken bulunur.
data-disabledAlan devre dışı olduğunda bulunur.
data-validAlan geçerli olduğunda bulunur.
data-invalidAlan geçersiz olduğunda bulunur.
data-dirtyDeğer ilk değerinden değiştikten sonra bulunur.
data-touchedKontrole odaklanıp ayrıldıktan sonra bulunur.
data-filledKontrolün bir değeri olduğunda bulunur.
data-focusedKontrol odaktayken bulunur.

Yatay bir alanda bir kontrolün yanına etiketi, açıklamayı ve hatayı üst üste dizer.

PropTürVarsayılan
render
ReactElement | (props, state) => ReactElement<div>

Seçim kartları gibi bir <FieldLabel /> içindeki içerik için etiket stilli bir başlık.

PropTürVarsayılan
render
ReactElement | (props, state) => ReactElement<div>

Alanları birbirinden ayırır ve duyarlı alanların ölçtüğü kapsayıcıdır.

PropTürVarsayılan
indicatorİçindeki her alana uygulanır.
"required" | "optional" | null–
render
ReactElement | (props, state) => ReactElement<div>
PropTürVarsayılan
indicatorİçindeki her alana uygulanır.
"required" | "optional" | null–
disabledİçindeki her alanı devre dışı bırakır.
booleanfalse
render
ReactElement | (props, state) => ReactElement<fieldset>
ÖznitelikAçıklama
data-slot="field-set"CSS'te fieldset'leri hedefleyin.
data-disabledFieldset devre dışı olduğunda bulunur.
PropTürVarsayılan
variantlabel, bir alan etiketinin boyutuyla eşleşir.
"legend" | "label""legend"
render
ReactElement | (props, state) => ReactElement<div>
ÖznitelikAçıklama
data-slot="field-legend"CSS'te legend'ları hedefleyin.
data-variantGeçerli varyant.

Formlar için aralıklandırılmış bir <Separator />; tüm prop'larını kabul eder.

PropTürVarsayılan
childrenÇizginin ortasında gösterilen isteğe bağlı metin.
ReactNode–
alignMetnin çizgi boyunca durduğu yer.
"start" | "center" | "end""center"
decorativeYalnızca görselse düz bir çizgiyi ekran okuyuculardan gizleyin.
booleanfalse
render
ReactElement | (props, state) => ReactElement<div>
ÖznitelikAçıklama
data-slot="field-separator"CSS'te alan ayırıcılarını hedefleyin.
data-contentAyırıcıda metin olduğunda bulunur.
data-slot="separator-label"Metni saran öğe.

Bir grup içinde tek bir checkbox veya radio'yu ve etiketini sarar; böylece her öğe ayrı ayrı devre dışı bırakılabilir.

PropTürVarsayılan
disabled
booleanfalse
render
ReactElement | (props, state) => ReactElement<div>

Alanın geçerlilik durumundan herhangi bir şeyi render eder; örneğin bir güç ölçer veya karakter sayacı.

PropTürVarsayılan
children
(state: { validity, errors, error, value }) => ReactNode–

Kullanıldığı bloklar

Field üzerine kurulan bloklar.