- 手风琴 (Accordion)
- 警告 (Alert)
- 警告对话框 (Alert Dialog)
- 宽高比 (Aspect Ratio)
- 头像 (Avatar)
- 徽章 (Badge)
- 面包屑 (Breadcrumb)
- 按钮 (Button)
- 按钮组 (Button Group)
- 日历 (Calendar)
- 卡片 (Card)
- 轮播图 (Carousel)
- 图表 (Chart)
- 复选框 (Checkbox)
- 折叠面板 (Collapsible)
- 组合框 (Combobox)
- 命令面板 (Command)
- 上下文菜单 (Context Menu)
- 数据表格 (Data Table)
- 日期选择器 (Date Picker)
- 对话框 (Dialog)
- 抽屉 (Drawer)
- 下拉菜单 (Dropdown Menu)
- 空状态 (Empty)
- 字段 (Field)
- 表单 (Form)
- 悬停卡片 (Hover Card)
- 输入框 (Input)
- 输入组 (Input Group)
- 验证码输入 (Input OTP)
- 项 (Item)
- 键盘按键 (Kbd)
- 标签 (Label)
- 菜单栏 (Menubar)
- 原生选择器 (Native Select)
- 导航菜单 (Navigation Menu)
- 数字输入框 (Number Field)
- 分页 (Pagination)
- 引脚输入 (Pin Input)
- 气泡卡片 (Popover)
- 进度条 (Progress)
- 单选框组 (Radio Group)
- 范围日历 (Range Calendar)
- 可调整大小 (Resizable)
- 滚动区域 (Scroll Area)
- 选择器 (Select)
- 分隔线 (Separator)
- 侧边栏抽屉 (Sheet)
- 侧边栏 (Sidebar)
- 骨架屏 (Skeleton)
- 滑块 (Slider)
- 轻量提示 (Sonner)
- 加载动画 (Spinner)
- 步骤条 (Stepper)
- 开关 (Switch)
- 表格 (Table)
- 标签页 (Tabs)
- 标签输入 (Tags Input)
- 文本域 (Textarea)
- 吐司提示 (Toast)
- 切换按钮 (Toggle)
- 切换按钮组 (Toggle Group)
- 工具提示 (Tooltip)
- 排版 (Typography)
<script setup lang="ts">
import { Button } from '@/components/ui/button'
import { Checkbox } from '@/components/ui/checkbox'
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
FieldLegend,
FieldSeparator,
FieldSet,
} from '@/components/ui/field'
import { Input } from '@/components/ui/input'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
import { Textarea } from '@/components/ui/textarea'
</script>
<template>
<div class="w-full max-w-md">
<form>
<FieldGroup>
<FieldSet>
<FieldLegend>Payment Method</FieldLegend>
<FieldDescription>
All transactions are secure and encrypted
</FieldDescription>
<FieldGroup>
<Field>
<FieldLabel for="checkout-7j9-card-name-43j">
Name on Card
</FieldLabel>
<Input
id="checkout-7j9-card-name-43j"
placeholder="Evil Rabbit"
required
/>
</Field>
<Field>
<FieldLabel for="checkout-7j9-card-number-uw1">
Card Number
</FieldLabel>
<Input
id="checkout-7j9-card-number-uw1"
placeholder="1234 5678 9012 3456"
required
/>
<FieldDescription>
Enter your 16-digit card number
</FieldDescription>
</Field>
<div class="grid grid-cols-3 gap-4">
<Field>
<FieldLabel for="checkout-exp-month-ts6">
Month
</FieldLabel>
<Select default-value="">
<SelectTrigger id="checkout-exp-month-ts6">
<SelectValue placeholder="MM" />
</SelectTrigger>
<SelectContent>
<SelectItem value="01">
01
</SelectItem>
<SelectItem value="02">
02
</SelectItem>
<SelectItem value="03">
03
</SelectItem>
<SelectItem value="04">
04
</SelectItem>
<SelectItem value="05">
05
</SelectItem>
<SelectItem value="06">
06
</SelectItem>
<SelectItem value="07">
07
</SelectItem>
<SelectItem value="08">
08
</SelectItem>
<SelectItem value="09">
09
</SelectItem>
<SelectItem value="10">
10
</SelectItem>
<SelectItem value="11">
11
</SelectItem>
<SelectItem value="12">
12
</SelectItem>
</SelectContent>
</Select>
</Field>
<Field>
<FieldLabel for="checkout-7j9-exp-year-f59">
Year
</FieldLabel>
<Select default-value="">
<SelectTrigger id="checkout-7j9-exp-year-f59">
<SelectValue placeholder="YYYY" />
</SelectTrigger>
<SelectContent>
<SelectItem value="2024">
2024
</SelectItem>
<SelectItem value="2025">
2025
</SelectItem>
<SelectItem value="2026">
2026
</SelectItem>
<SelectItem value="2027">
2027
</SelectItem>
<SelectItem value="2028">
2028
</SelectItem>
<SelectItem value="2029">
2029
</SelectItem>
</SelectContent>
</Select>
</Field>
<Field>
<FieldLabel for="checkout-7j9-cvv">
CVV
</FieldLabel>
<Input id="checkout-7j9-cvv" placeholder="123" required />
</Field>
</div>
</FieldGroup>
</FieldSet>
<FieldSeparator />
<FieldSet>
<FieldLegend>Billing Address</FieldLegend>
<FieldDescription>
The billing address associated with your payment method
</FieldDescription>
<FieldGroup>
<Field orientation="horizontal">
<Checkbox
id="checkout-7j9-same-as-shipping-wgm"
:default-value="true"
/>
<FieldLabel
for="checkout-7j9-same-as-shipping-wgm"
class="font-normal"
>
Same as shipping address
</FieldLabel>
</Field>
</FieldGroup>
</FieldSet>
<FieldSet>
<FieldGroup>
<Field>
<FieldLabel for="checkout-7j9-optional-comments">
Comments
</FieldLabel>
<Textarea
id="checkout-7j9-optional-comments"
placeholder="Add any additional comments"
class="resize-none"
/>
</Field>
</FieldGroup>
</FieldSet>
<Field orientation="horizontal">
<Button type="submit">
Submit
</Button>
<Button variant="outline" type="button">
Cancel
</Button>
</Field>
</FieldGroup>
</form>
</div>
</template>安装
pnpm dlx shadcn-vue@latest add field
使用方法
<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>结构说明
Field 系列旨在用于组合无障碍表单。典型字段结构如下
<template>
<Field>
<FieldLabel for="input-id">
Label
</FieldLabel>
<!-- Input, Select, Switch, etc. -->
<FieldDescription>Optional helper text.</FieldDescription>
<FieldError>Validation message.</FieldError>
</Field>
</template>Field是单个字段的核心包装器。FieldContent是一个 flex 列,用于对标签和描述进行分组。如果没有描述,则无需使用。- 使用
FieldGroup包装相关字段,并配合FieldLegend和FieldSet进行语义化分组。
示例
输入框
<script setup lang="ts">
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
FieldSet,
} from '@/components/ui/field'
import { Input } from '@/components/ui/input'
</script>
<template>
<div class="w-full max-w-md">
<FieldSet>
<FieldGroup>
<Field>
<FieldLabel for="username">
Username
</FieldLabel>
<Input id="username" type="text" placeholder="Max Leiter" />
<FieldDescription>
Choose a unique username for your account.
</FieldDescription>
</Field>
<Field>
<FieldLabel for="password">
Password
</FieldLabel>
<FieldDescription>
Must be at least 8 characters long.
</FieldDescription>
<Input id="password" type="password" placeholder="********" />
</Field>
</FieldGroup>
</FieldSet>
</div>
</template>文本域
<script setup lang="ts">
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
FieldSet,
} from '@/components/ui/field'
import { Textarea } from '@/components/ui/textarea'
</script>
<template>
<div class="w-full max-w-md">
<FieldSet>
<FieldGroup>
<Field>
<FieldLabel for="feedback">
Feedback
</FieldLabel>
<Textarea
id="feedback"
placeholder="Your feedback helps us improve..."
:rows="4"
/>
<FieldDescription>
Share your thoughts about our service.
</FieldDescription>
</Field>
</FieldGroup>
</FieldSet>
</div>
</template>选择
选择您的部门或工作领域。
<script setup lang="ts">
import {
Field,
FieldDescription,
FieldLabel,
} from '@/components/ui/field'
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@/components/ui/select'
</script>
<template>
<div class="w-full max-w-md">
<Field>
<FieldLabel>Department</FieldLabel>
<Select>
<SelectTrigger>
<SelectValue placeholder="Choose department" />
</SelectTrigger>
<SelectContent>
<SelectItem value="engineering">
Engineering
</SelectItem>
<SelectItem value="design">
Design
</SelectItem>
<SelectItem value="marketing">
Marketing
</SelectItem>
<SelectItem value="sales">
Sales
</SelectItem>
<SelectItem value="support">
Customer Support
</SelectItem>
<SelectItem value="hr">
Human Resources
</SelectItem>
<SelectItem value="finance">
Finance
</SelectItem>
<SelectItem value="operations">
Operations
</SelectItem>
</SelectContent>
</Select>
<FieldDescription>
Select your department or area of work.
</FieldDescription>
</Field>
</div>
</template>滑块 (Slider)
设置您的预算范围($ 200 - 800)。
<script setup lang="ts">
import { ref } from 'vue'
import {
Field,
FieldDescription,
FieldTitle,
} from '@/components/ui/field'
import { Slider } from '@/components/ui/slider'
const value = ref([200, 800])
</script>
<template>
<div class="w-full max-w-md">
<Field>
<FieldTitle>Price Range</FieldTitle>
<FieldDescription>
Set your budget range ($
<span class="font-medium tabular-nums">{{ value[0] }}</span> -
<span class="font-medium tabular-nums">{{ value[1] }}</span>).
</FieldDescription>
<Slider
v-model="value"
:max="1000"
:min="0"
:step="10"
class="mt-2 w-full"
aria-label="Price Range"
/>
</Field>
</div>
</template>字段集 (Fieldset)
<script setup lang="ts">
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
FieldLegend,
FieldSet,
} from '@/components/ui/field'
import { Input } from '@/components/ui/input'
</script>
<template>
<div class="w-full max-w-md space-y-6">
<FieldSet>
<FieldLegend>Address Information</FieldLegend>
<FieldDescription>
We need your address to deliver your order.
</FieldDescription>
<FieldGroup>
<Field>
<FieldLabel for="street">
Street Address
</FieldLabel>
<Input id="street" type="text" placeholder="123 Main St" />
</Field>
<div class="grid grid-cols-2 gap-4">
<Field>
<FieldLabel for="city">
City
</FieldLabel>
<Input id="city" type="text" placeholder="New York" />
</Field>
<Field>
<FieldLabel for="zip">
Postal Code
</FieldLabel>
<Input id="zip" type="text" placeholder="90502" />
</Field>
</div>
</FieldGroup>
</FieldSet>
</div>
</template>复选框
您的“桌面”和“文稿”文件夹正在与 iCloud 云盘同步。您可以从其他设备访问它们。
<script setup lang="ts">
import { Checkbox } from '@/components/ui/checkbox'
import {
Field,
FieldContent,
FieldDescription,
FieldGroup,
FieldLabel,
FieldLegend,
FieldSeparator,
FieldSet,
} from '@/components/ui/field'
</script>
<template>
<div class="w-full max-w-md">
<FieldGroup>
<FieldSet>
<FieldLegend variant="label">
Show these items on the desktop
</FieldLegend>
<FieldDescription>
Select the items you want to show on the desktop.
</FieldDescription>
<FieldGroup class="gap-3">
<Field orientation="horizontal">
<Checkbox id="finder-pref-9k2-hard-disks-ljj" />
<FieldLabel
for="finder-pref-9k2-hard-disks-ljj"
class="font-normal"
:default-value="true"
>
Hard disks
</FieldLabel>
</Field>
<Field orientation="horizontal">
<Checkbox id="finder-pref-9k2-external-disks-1yg" />
<FieldLabel
for="finder-pref-9k2-external-disks-1yg"
class="font-normal"
>
External disks
</FieldLabel>
</Field>
<Field orientation="horizontal">
<Checkbox id="finder-pref-9k2-cds-dvds-fzt" />
<FieldLabel
for="finder-pref-9k2-cds-dvds-fzt"
class="font-normal"
>
CDs, DVDs, and iPods
</FieldLabel>
</Field>
<Field orientation="horizontal">
<Checkbox id="finder-pref-9k2-connected-servers-6l2" />
<FieldLabel
for="finder-pref-9k2-connected-servers-6l2"
class="font-normal"
>
Connected servers
</FieldLabel>
</Field>
</FieldGroup>
</FieldSet>
<FieldSeparator />
<Field orientation="horizontal">
<Checkbox id="finder-pref-9k2-sync-folders-nep" :default-value="true" />
<FieldContent>
<FieldLabel for="finder-pref-9k2-sync-folders-nep">
Sync Desktop & Documents folders
</FieldLabel>
<FieldDescription>
Your Desktop & Documents folders are being synced with iCloud
Drive. You can access them from other devices.
</FieldDescription>
</FieldContent>
</Field>
</FieldGroup>
</div>
</template>单选框 (Radio)
<script setup lang="ts">
import {
Field,
FieldDescription,
FieldLabel,
FieldSet,
} from '@/components/ui/field'
import {
RadioGroup,
RadioGroupItem,
} from '@/components/ui/radio-group'
</script>
<template>
<div class="w-full max-w-md">
<FieldSet>
<FieldLabel>Subscription Plan</FieldLabel>
<FieldDescription>
Yearly and lifetime plans offer significant savings.
</FieldDescription>
<RadioGroup defaultvalue="monthly">
<Field orientation="horizontal">
<RadioGroupItem id="plan-monthly" value="monthly" />
<FieldLabel for="plan-monthly" class="font-normal">
Monthly ($9.99/month)
</FieldLabel>
</Field>
<Field orientation="horizontal">
<RadioGroupItem id="plan-yearly" value="yearly" />
<FieldLabel for="plan-yearly" class="font-normal">
Yearly ($99.99/year)
</FieldLabel>
</Field>
<Field orientation="horizontal">
<RadioGroupItem id="plan-lifetime" value="lifetime" />
<FieldLabel for="plan-lifetime" class="font-normal">
Lifetime ($299.99)
</FieldLabel>
</Field>
</RadioGroup>
</FieldSet>
</div>
</template>开关 (Switch)
启用多重身份验证。如果您没有双重身份验证设备,可以使用发送到您电子邮件的一次性验证码。
<script setup lang="ts">
import {
Field,
FieldContent,
FieldDescription,
FieldLabel,
} from '@/components/ui/field'
import { Switch } from '@/components/ui/switch'
</script>
<template>
<div class="w-full max-w-md">
<Field orientation="horizontal">
<FieldContent>
<FieldLabel for="2fa">
Multi-factor authentication
</FieldLabel>
<FieldDescription>
Enable multi-factor authentication. If you do not have a two-factor
device, you can use a one-time code sent to your email.
</FieldDescription>
</FieldContent>
<Switch id="2fa" />
</Field>
</div>
</template>选择卡片 (Choice Card)
将 Field 组件包装在 FieldLabel 中以创建可选择的字段组。这适用于 RadioItem、Checkbox 和 Switch 组件。
<script setup lang="ts">
import {
Field,
FieldContent,
FieldDescription,
FieldGroup,
FieldLabel,
FieldSet,
FieldTitle,
} from '@/components/ui/field'
import {
RadioGroup,
RadioGroupItem,
} from '@/components/ui/radio-group'
</script>
<template>
<div class="w-full max-w-md">
<FieldGroup>
<FieldSet>
<FieldLabel for="compute-environment-p8w">
Compute Environment
</FieldLabel>
<FieldDescription>
Select the compute environment for your cluster.
</FieldDescription>
<RadioGroup default-value="kubernetes">
<FieldLabel for="kubernetes-r2h">
<Field orientation="horizontal">
<FieldContent>
<FieldTitle>Kubernetes</FieldTitle>
<FieldDescription>
Run GPU workloads on a K8s configured cluster.
</FieldDescription>
</FieldContent>
<RadioGroupItem id="kubernetes-r2h" value="kubernetes" />
</Field>
</FieldLabel>
<FieldLabel for="vm-z4k">
<Field orientation="horizontal">
<FieldContent>
<FieldTitle>Virtual Machine</FieldTitle>
<FieldDescription>
Access a VM configured cluster to run GPU workloads.
</FieldDescription>
</FieldContent>
<RadioGroupItem id="vm-z4k" value="vm" />
</Field>
</FieldLabel>
</RadioGroup>
</FieldSet>
</FieldGroup>
</div>
</template>字段组 (Field Group)
使用 FieldGroup 堆叠 Field 组件。添加 FieldSeparator 进行分隔。
<script setup lang="ts">
import { Checkbox } from '@/components/ui/checkbox'
import {
Field,
FieldDescription,
FieldGroup,
FieldLabel,
FieldSeparator,
FieldSet,
} from '@/components/ui/field'
</script>
<template>
<div class="w-full max-w-md">
<FieldGroup>
<FieldSet>
<FieldLabel>Responses</FieldLabel>
<FieldDescription>
Get notified when ChatGPT responds to requests that take time, like
research or image generation.
</FieldDescription>
<FieldGroup data-slot="checkbox-group">
<Field orientation="horizontal">
<Checkbox id="push" :default-value="true" disabled />
<FieldLabel for="push" class="font-normal">
Push notifications
</FieldLabel>
</Field>
</FieldGroup>
</FieldSet>
<FieldSeparator />
<FieldSet>
<FieldLabel>Tasks</FieldLabel>
<FieldDescription>
Get notified when tasks you've created have updates.
<a href="#">Manage tasks</a>
</FieldDescription>
<FieldGroup data-slot="checkbox-group">
<Field orientation="horizontal">
<Checkbox id="push-tasks" />
<FieldLabel for="push-tasks" class="font-normal">
Push notifications
</FieldLabel>
</Field>
<Field orientation="horizontal">
<Checkbox id="email-tasks" />
<FieldLabel for="email-tasks" class="font-normal">
Email notifications
</FieldLabel>
</Field>
</FieldGroup>
</FieldSet>
</FieldGroup>
</div>
</template>响应式布局
如果您使用的是 tailwindcss v3,则需要安装 @tailwindcss/container-queries
- 垂直字段:默认方向堆叠标签、控件和辅助文本——非常适合移动优先的布局。
- 水平字段:在
Field上设置orientation="horizontal",使标签和控件并排对齐。配合FieldContent使用,可保持描述内容对齐。 - 响应式字段:设置
orientation="responsive",以便在感知容器的父元素中自动进行列式布局。在FieldGroup上应用@container/field-group类,以在特定断点处切换方向。
<script setup lang="ts">
import { Button } from '@/components/ui/button'
import {
Field,
FieldContent,
FieldDescription,
FieldGroup,
FieldLabel,
FieldLegend,
FieldSeparator,
FieldSet,
} from '@/components/ui/field'
import { Input } from '@/components/ui/input'
import { Textarea } from '@/components/ui/textarea'
</script>
<template>
<div class="w-full max-w-4xl">
<form>
<FieldSet>
<FieldLegend>Profile</FieldLegend>
<FieldDescription>Fill in your profile information.</FieldDescription>
<FieldSeparator />
<FieldGroup>
<Field orientation="responsive">
<FieldContent>
<FieldLabel for="name">
Name
</FieldLabel>
<FieldDescription>
Provide your full name for identification
</FieldDescription>
</FieldContent>
<Input id="name" placeholder="Evil Rabbit" required />
</Field>
<FieldSeparator />
<Field orientation="responsive">
<FieldContent>
<FieldLabel for="lastName">
Message
</FieldLabel>
<FieldDescription>
You can write your message here. Keep it short, preferably
under 100 characters.
</FieldDescription>
</FieldContent>
<Textarea
id="message"
placeholder="Hello, world!"
required
class="min-h-[100px] resize-none sm:min-w-[300px]"
/>
</Field>
<FieldSeparator />
<Field orientation="responsive">
<Button type="submit">
Submit
</Button>
<Button type="button" variant="outline">
Cancel
</Button>
</Field>
</FieldGroup>
</FieldSet>
</form>
</div>
</template>验证与错误
- 向
Field添加data-invalid,将整个块切换为错误状态。 - 在输入框本身添加
aria-invalid,以支持辅助技术。 - 在控件之后或在
FieldContent内部立即渲染FieldError,以保持错误信息与字段对齐。
<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>无障碍
FieldSet和FieldLegend将相关控件分组,方便键盘用户和辅助技术用户使用。Field输出role="group",因此嵌套的控件在组合时会继承FieldLabel和FieldLegend的标签。- 谨慎使用
FieldSeparator,确保屏幕阅读器能识别清晰的节边界。
API 参考
FieldSet
渲染带有预设间距的语义化 fieldset 的容器。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<template>
<FieldSet>
<FieldLegend>Delivery</FieldLegend>
<FieldGroup>
<!-- Fields -->
</FieldGroup>
</FieldSet>
</template>FieldLegend
FieldSet 的图例元素。切换至 label 变体以与标签尺寸对齐。
| 属性 | 类型 | 默认 |
|---|---|---|
variant | "legend" | "label" | "legend" |
class | string |
<FieldLegend variant="label">
Notification Preferences
</FieldLegend>FieldLegend 有两个变体:legend 和 label。label 变体应用标签尺寸和对齐方式。如果您有嵌套的 FieldSet,这会非常方便。
FieldGroup
用于堆叠 Field 组件并启用响应式方向容器查询的布局包装器。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<template>
<FieldGroup class="@container/field-group flex flex-col gap-6">
<Field><!-- Fields --></Field>
<Field><!-- Fields --></Field>
</FieldGroup>
</template>Field (字段)
单个字段的核心包装器。提供方向控制、无效状态样式和间距。
| 属性 | 类型 | 默认 |
|---|---|---|
orientation | "vertical" | "horizontal" | "responsive" | "vertical" |
class | string | |
data-invalid | boolean |
<Field orientation="horizontal">
<FieldLabel for="remember">Remember me</FieldLabel>
<Switch id="remember" />
</Field>FieldContent
当标签位于控件旁边时,对控件和描述进行分组的 flex 列。如果没有描述,则无需使用。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<Field>
<Checkbox id="notifications" />
<FieldContent>
<FieldLabel for="notifications">Notifications</FieldLabel>
<FieldDescription>Email, SMS, and push options.</FieldDescription>
</FieldContent>
</Field>FieldLabel
为直接输入框和嵌套的 Field 子元素设计的标签样式。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string | |
asChild | boolean | false |
<FieldLabel for="email">
Email
</FieldLabel>FieldTitle
在 FieldContent 内部渲染带有标签样式的标题。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<FieldContent>
<FieldTitle>Enable Touch ID</FieldTitle>
<FieldDescription>Unlock your device faster.</FieldDescription>
</FieldContent>FieldDescription
自动平衡水平布局中长行的帮助文本槽位。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<FieldDescription>
We never share your email with anyone.
</FieldDescription>FieldSeparator
用于分隔 FieldGroup 内部各个部分的视觉分割线。接受可选的行内内容。
| 属性 | 类型 | 默认 |
|---|---|---|
class | string |
<FieldSeparator>
Or continue with
</FieldSeparator>FieldError
可访问的错误容器,接受子元素或 errors 数组(例如来自 vee-validate)。
| 属性 | 类型 | 默认 |
|---|---|---|
errors | Array<{ message?: string } | undefined> | |
class | string |
<FieldError :errors="errors.username" />当 errors 数组包含多个消息时,组件会自动渲染列表。
FieldError 还接受任何实现 Standard Schema 的验证器所产生的问题,包括 Zod、Valibot 和 ArkType。将来自架构结果的 issues 数组直接传递进去,以跨库渲染统一的错误列表。