Form

表单容器,桥接 headless createForm,提供字段注册、校验、布局与 a11y。

设计文档

如何引入

import { Form, Form.Field, Form.List, Form.Input, Form.Select, Form.Checkbox, Form.Radio, Form.Switch, Form.Slider, Form.Rating, Form.DatePicker, Form.TagInput, Form.TreeSelect, Form.Cascader, Form.Upload, Form.Section, Form.Slot, Form.Label, Form.ErrorMessage } from '@chenzy-design/svelte';

基础校验

Form.Input 通过 rules 声明校验规则,onSubmit 返回 { valid, values }。

标签位置

支持 left / top / inset 三种标签位置,inset 在聚焦时上浮。

left(默认)

top

inset

表单控件

Form.Input / Select / DatePicker / Switch / Checkbox 等控件接管数据流,无须手动 value/onChange。

校验规则

required、内置 type、长度 min、自定义 validator(含异步)多种校验规则。

试试输入 admin

字段联动

dependencies 声明依赖字段,被依赖字段变化时自动重校验(如确认密码)。

动态字段

Form.List 动态增删行,每行子字段名由 name(item, sub) 拼接。

外部操作

getFormApi 拿到内部句柄,在表单外部命令式 setFieldsValue / validate / resetFields。

分组

Form.Section 把字段按语义分区,带分区标题。

基本信息
账号设置

API 参考

Form

Props

属性说明类型默认值
value受控整表单值;变更经 onChange 上报Record<string, unknown>undefined
initValues非受控初始值Record<string, unknown>{}
layout'vertical'|'horizontal'vertical
labelPosition'top'|'left'|'inset'top
labelWidthnumber | stringundefined
labelAlignLabel 文本对齐(spec §4)'left'|'right'left
size'small'|'default'|'large'default
disabledbooleanfalse
requiredMarkbooleantrue
colonbooleanfalse
scrollToError提交校验失败时滚动并聚焦首个错误字段booleanfalse
validateTrigger全局默认校验时机,字段可经 trigger 覆盖(spec §4)'change'|'blur'|'submit'|'mount'|string[]['blur','change']
showValidateIcon错误/警告文案是否带状态图标(spec §4)booleantrue
stopValidateWithError字段命中首条错误即停止该字段后续 rule(spec §4)booleanfalse
preventDefault是否拦截原生 submit 默认行为(spec §4)booleantrue
stopPropagation提交时是否阻止 submit 事件冒泡booleanfalse
allowEmpty收集值时是否保留空值字段键(spec §4)booleanfalse
getFormApiForm 挂载后一次性回传内部 FormApi 句柄,供父级外部命令式 setFieldsValue/validate/resetFields(Semi getFormApi)(formApi: FormApi) => voidundefined
onSubmit(r: { valid; values; errors }) => voidundefined
onChange(values: Record<string, unknown>) => voidundefined
onReset表单重置时回调(原生 reset 或 formApi.resetFields())(Semi onReset)() => voidundefined
onErrorChange任意字段错误集合变化时回调,入参为最新 errors(Semi onErrorChange)(errors: FieldErrors) => voidundefined
childrenSnippetundefined
footerSnippet<[{ submitting: boolean }]>undefined
Field.field字段名(必填)string
Field.labelstringundefined
Field.rulesRule[][]
Field.initValue字段级初始值,覆盖容器 initValues(spec §4.2)unknownundefined
Field.requiredbooleanfalse
Field.validateStatus外部强制校验态(受控展示,不经内部校验、不回写)(spec §4.2)'default'|'warning'|'error'undefined
Field.extraTextstringundefined
Field.noStyle仅注册收集、不渲染布局 DOM(纯收集)(spec §4.2 §190)booleanfalse
Field.spanForm.Section 栅格内占列(grid-column: span N)(spec §4.2)numberundefined
Field.transform提交前值转换(纯函数,不回写 state)(spec §4.2)(v, values) => unknownundefined
Field.dependencies依赖字段名;其值变化时本字段自动重校验string[]undefined
Field.trigger字段级校验时机覆盖(spec §4)'change'|'blur'|'submit'|'mount'|string[]继承容器
Field.valuePropName控件值属性名;如 Checkbox/Switch 用 'checked',snippet 参数即多出同名别名映射字段值string'value'
Field.childrensnippet 参数含通用 value 及按 valuePropName 命名的别名(默认 value);id 用于 label for/id 关联,describedBy 用于控件 aria-describedbySnippet<[{ value; [valuePropName]; onChange; onBlur; status; id; describedBy; disabled }]>undefined
Input.field字段名(必填)string
Input.labelstringundefined
Input.rulesRule[][]
Input.initValue字段级初始值,覆盖容器 initValues(spec §4.2)unknownundefined
Input.requiredbooleanfalse
Input.validateStatus外部强制校验态(受控展示)(spec §4.2)'default'|'warning'|'error'undefined
Input.extraTextstringundefined
Input.spanForm.Section 栅格内占列(spec §4.2)numberundefined
Input.transform提交前值转换(纯函数)(spec §4.2)(v, values) => unknownundefined
Input.placeholderstringundefined
Input.type'text'|'password'text
Input.clearablebooleanfalse
Input.maxLengthnumberundefined
Input.dependencies依赖字段名;其值变化时本字段自动重校验string[]undefined
Input.trigger字段级校验时机覆盖(spec §4)'change'|'blur'|'submit'|'mount'|string[]继承容器

Form.Field

通用字段包裹器:注册字段、渲染 Label / 必填星标 / 错误提示,snippet 暴露 value/onChange/status/id 等,用于包装任意控件。

Form.List

动态字段数组:children snippet 暴露 items / add / remove / move / name(item, sub),用于可增删的重复字段组。

Form.Input

绑定字段的单行输入框(Field + Input)。

Form.Select

绑定字段的下拉选择(Field + Select)。

Form.Checkbox

绑定字段的复选框(Field + Checkbox,valuePropName=checked)。

Form.Radio

绑定字段的单选框(Field + Radio)。

Form.Switch

绑定字段的开关(Field + Switch,valuePropName=checked)。

Form.Slider

绑定字段的滑块(Field + Slider)。

Form.Rating

绑定字段的评分(Field + Rating)。

Form.DatePicker

绑定字段的日期选择(Field + DatePicker)。

Form.TagInput

绑定字段的标签输入(Field + TagInput)。

Form.TreeSelect

绑定字段的树选择(Field + TreeSelect)。

Form.Cascader

绑定字段的级联选择(Field + Cascader)。

Form.Upload

绑定字段的上传(Field + Upload)。

Form.Section

字段分组容器,带分区标题(text)。

Form.Slot

在表单布局内自由插入非字段内容(保持栅格/间距一致)。

Form.Label

可独立组合的字段标签原子。

Form.ErrorMessage

可独立组合的字段错误信息原子。

Accessibility

ARIA roleform
  • 原生 <form>,submit 经 preventDefault 接管
  • 字段错误用 role=alert,经 aria-describedby 关联控件
  • extraText 无错误时经 aria-describedby 关联
  • 必填星标 aria-hidden,必填语义由校验承载
  • Form.Input 经 Field 自动生成的 id 用 label for/id 精确关联控件(点击 label 聚焦 input);id 也可由 Input 外部传入

设计变量

变量默认值用法
--cd-color-form-alerticon-icon-default var(--cd-color-warning)警告图标颜色
--cd-color-form-label-disabled-text-default var(--cd-color-disabled-text)禁用表单项标签文字颜色
--cd-color-form-label-extra-text-default var(--cd-color-tertiary)表单项标签图标颜色
--cd-color-form-label-optional-text-default var(--cd-color-tertiary)表单项标签可选标记颜色
--cd-color-form-label-text-default var(--cd-color-text-0)表单项标签文字颜色
--cd-color-form-message-error-text-default var(--cd-color-danger)错误提示颜色
--cd-color-form-requiredmark-disabled-text-default var(--cd-color-danger)禁用表单项必填标记颜色
--cd-color-form-requiredmark-text-default var(--cd-color-danger)必填标记颜色
--cd-color-form-section-border-default var(--cd-color-border)表单分组标题底部描边颜色
--cd-color-form-section-text-default var(--cd-color-text-0)表单分组标题文字颜色