Data Entryduskmoonimplemented6 demos

Form

Form coordinates form state, validation, field layout, and submit handling.

Import@duskmoon-dev/components/form
16API sections
77documented props
4behavior scenarios
Key API
forminitialValueslayoutdisabledlabelColwrapperCol

Usage

When to use

  • Use it inside forms, filters, settings, and any workflow that captures user input.
  • Prefer controlled props when the value must stay synchronized with application state.

Implementation notes

StylesheetImport @duskmoon-dev/components/styles.css once in the app or docs shell.
StateStart with default props for static examples, then switch to controlled props when state must be shared.
ThemeThe preview inherits the active DuskMoon data-theme value from the docs layout.

Features

Controlled and uncontrolled usage

Documents default values, value props, and change callbacks for form integration.

Validation state

Surfaces status, size, disabled, and option data patterns where the component supports them.

Primary API surface

Form is most often configured through `form`, `initialValues`, `layout`, `disabled`.

Covered behavior

Binds item values and submits form values

Feature Demos

Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.

Preview
The name shown in dashboards.

Basic usage

authored

Import the component stylesheet and Form from its package subpath, then render it with the core props.

Source
import "@duskmoon-dev/components/styles.css";
import { Form } from "@duskmoon-dev/components/form";

export function Example() {
  return (<Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>);
}
Preview
The name shown in dashboards.

Binds item values and submits form values

test-backed

Form scenario from the component test coverage: binds item values and submits form values.

Source
import "@duskmoon-dev/components/styles.css";
import { Form } from "@duskmoon-dev/components/form";

export function FormBindsItemValuesAndDemo() {
  return (<Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>);
}
Preview
The name shown in dashboards.

Validates required fields and renders item errors

test-backed

Form scenario from the component test coverage: validates required fields and renders item errors.

Source
import "@duskmoon-dev/components/styles.css";
import { Form } from "@duskmoon-dev/components/form";

export function FormValidatesRequiredFieldsAndDemo() {
  return (<Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>);
}
Preview
The name shown in dashboards.

Exposes useForm, useWatch, checked values, and reset

test-backed

Form scenario from the component test coverage: exposes useform, usewatch, checked values, and reset.

Source
import "@duskmoon-dev/components/styles.css";
import { Form } from "@duskmoon-dev/components/form";

export function FormExposesUseFormUseWatchCheckedDemo() {
  return (<Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>);
}
Preview
The name shown in dashboards.

Supports list operations and error list

test-backed

Form scenario from the component test coverage: supports list operations and error list.

Source
import "@duskmoon-dev/components/styles.css";
import { Form } from "@duskmoon-dev/components/form";

export function FormSupportsListOperationsAndDemo() {
  return (<Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>);
}
Preview
The name shown in dashboards.

Theme aware

authored

Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.

Source
<div data-theme="sunshine">
  <Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>
</div>

<div data-theme="moonlight">
  <Form
  layout="vertical"
  initialValues={{ project: "DuskMoon" }}
  onFinish={(values) => console.log(values)}
>
  <Form.Item
    name="project"
    label="Project"
    rules={[{ required: true, message: "Project is required" }]}
    extra="The name shown in dashboards."
  >
    <input placeholder="Project name" />
  </Form.Item>
  <Form.Item>
    <button type="submit">Save</button>
  </Form.Item>
</Form>
</div>

API

The API reference below lists every parsed exported type or interface for Form. Start with `form`, `initialValues`, `layout`, `disabled` for common usage.

Types: packages/components/src/components/form/Form.types.tsScenarios: packages/components/src/components/form/Form.test.tsx
FormPropsinterface extends < T extends Record<string, unknown> = Record<string, unknown>, > extends Omit< ComponentProps<"form">, "children" | "onSubmit" | "onFinish" | "onChange" >
PropTypeRequiredDescription
childrenReactNodeNochildren configures Form.
formFormInstance<T>Noform configures Form.
initialValuesPartial<T>NoinitialValues configures Form.
layoutFormLayoutNolayout configures Form.
disabledbooleanNodisabled configures Form.
labelColunknownNolabelCol configures Form.
wrapperColunknownNowrapperCol configures Form.
colonbooleanNocolon configures Form.
requiredMarkbooleanNorequiredMark configures Form.
onFinish(values: Partial<T>) => voidNoonFinish configures Form.
onFinishFailed(errorInfo: {NoonFinishFailed configures Form.
errorFieldsFieldError[]YeserrorFields configures Form.
valuesPartial<T>Yesvalues configures Form.
onValuesChange(changedValues: Partial<T>, values: Partial<T>) => voidNoonValuesChange configures Form.
FormRuleinterface
PropTypeRequiredDescription
requiredbooleanNorequired configures Form.
messageReactNodeNomessage configures Form.
validator(rule: FormRule, value: unknown) => Promise<void> | voidNovalidator configures Form.
FieldErrorinterface
PropTypeRequiredDescription
nameFormNamePathYesname configures Form.
errorsReactNode[]Yeserrors configures Form.
FormInstanceinterface extends < T extends Record<string, unknown> = Record<string, unknown>, >
PropTypeRequiredDescription
getFieldValue(name: FormNamePath) => unknownYesgetFieldValue configures Form.
getFieldsValue() => Partial<T>YesgetFieldsValue configures Form.
setFieldValue(name: FormNamePath, value: unknown) => voidYessetFieldValue configures Form.
setFieldsValue(values: Partial<T>) => voidYessetFieldsValue configures Form.
resetFields(names?: FormNamePath[]) => voidYesresetFields configures Form.
validateFields(names?: FormNamePath[]) => Promise<Partial<T>>YesvalidateFields configures Form.
submit() => voidYessubmit configures Form.
FormContextValueinterface
PropTypeRequiredDescription
formFormInstanceYesform configures Form.
disabledbooleanNodisabled configures Form.
layoutFormLayoutYeslayout configures Form.
labelColunknownNolabelCol configures Form.
wrapperColunknownNowrapperCol configures Form.
colonbooleanNocolon configures Form.
requiredMarkbooleanNorequiredMark configures Form.
registerField(name: FormNamePath, rules?: FormRule[]) => () => voidYesregisterField configures Form.
getFieldError(name: FormNamePath) => ReactNode[]YesgetFieldError configures Form.
setFieldError(name: FormNamePath, errors: ReactNode[]) => voidYessetFieldError configures Form.
FormItemPropsinterface extends Omit< ComponentProps<"div">, "children" | "onChange" | "title" >
PropTypeRequiredDescription
childrenReactNodeNochildren configures Form.
nameFormNamePathNoname configures Form.
labelReactNodeNolabel configures Form.
rulesFormRule[]Norules configures Form.
requiredbooleanNorequired configures Form.
valuePropNamestringNovaluePropName configures Form.
triggerstringNotrigger configures Form.
extraReactNodeNoextra configures Form.
helpReactNodeNohelp configures Form.
noStylebooleanNonoStyle configures Form.
FormListFieldDatainterface
PropTypeRequiredDescription
keynumberYeskey configures Form.
namenumberYesname configures Form.
fieldKeynumberYesfieldKey configures Form.
FormListOperationinterface
PropTypeRequiredDescription
add(defaultValue?: unknown, insertIndex?: number) => voidYesadd configures Form.
remove(index: number | number[]) => voidYesremove configures Form.
move(from: number, to: number) => voidYesmove configures Form.
FormListPropsinterface
PropTypeRequiredDescription
nameFormNamePathYesname configures Form.
initialValueunknown[]NoinitialValue configures Form.
children(Yeschildren configures Form.
fieldsFormListFieldData[],Yesfields configures Form.
operationFormListOperation,Yesoperation configures Form.
meta{ errors: ReactNode[] },Yesmeta configures Form.
ErrorListPropsinterface extends ComponentProps<"div">
PropTypeRequiredDescription
errorsReactNode[]Noerrors configures Form.
FormProviderPropsinterface
PropTypeRequiredDescription
childrenReactNodeNochildren configures Form.
onFormChange(NoonFormChange configures Form.
namestring,Yesname configures Form.
info{ changedFields: unknown[]; forms: Record<string, FormInstance> },Yesinfo configures Form.
onFormFinish(NoonFormFinish configures Form.
namestring,Yesname configures Form.
info{ values: unknown; forms: Record<string, FormInstance> },Yesinfo configures Form.
FormComponentinterface
PropTypeRequiredDescription
propsFormProps<T> & RefAttributes<FormInstance<T>>,Yesprops configures Form.
useForm<T extends Record<string, unknown> = Record<string, unknown>>(YesuseForm configures Form.
formFormInstance<T>,Noform configures Form.
useFormInstance() => FormInstanceYesuseFormInstance configures Form.
useWatch(name: FormNamePath, form?: FormInstance) => unknownYesuseWatch configures Form.
ItemFormItemComponentYesItem configures Form.
ListFormListComponentYesList configures Form.
ErrorListForwardRefExoticComponent<YesErrorList configures Form.
Provider(props: FormProviderProps) => ReactElement | nullYesProvider configures Form.
ContextContext<FormContextValue | null>YesContext configures Form.
create() => voidYescreate configures Form.
FormNamePathtype
string | number | Array<string | number>
FormLayouttype
"horizontal" | "vertical" | "inline"
FormItemComponenttype
ForwardRefExoticComponent< FormItemProps & RefAttributes<HTMLDivElement> >
FormListComponenttype
(props: FormListProps) => ReactElement | null