Field
Accessible, unstyled Field compound primitive for form label, help, and error wiring.
|
|
| Package |
@vizejs/ui/field |
| Maturity |
stable |
| Own the source |
vize lib pull field |
| Requires |
context, field-wiring, form |
| Aliases |
form field, field label, field description, field error message |
| Covers |
React Aria Field, Radix Form Field, Reka UI Form |
Usage
import { Field, FieldRoot, FieldDescription, FieldErrorMessage, FieldLabel } from "@vizejs/ui/field";
Or copy the source into your project with vize lib pull field (see Source Distribution).
API
Field
Source: src/families/form/field/field.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"div" |
Native element, custom element, or component to render. |
id |
string | null |
undefined |
Consumer-owned control id. null and undefined select a deterministic fallback. |
name (required) |
string |
required |
Normalized HTML form field name. |
errors |
readonly FormFieldError[] |
[] |
Full normalized form error list produced by the form helpers. |
invalid |
boolean |
undefined |
Consumer-owned invalid override. undefined derives invalid state from matching errors. |
hasDescription |
boolean |
false |
Whether a FieldDescription is rendered and should join aria-describedby. |
hasErrorMessage |
boolean |
true |
Whether a FieldErrorMessage is rendered while invalid and should be referenced. |
Events
| Event |
Payload |
Description |
invalid-change |
[invalid: boolean, errors: readonly FormFieldError[]] |
Fired after the derived invalid boolean changes. |
Slots
| Slot |
Slot props |
Description |
default |
FieldRootSlotState |
Renders the composed field body with ids, ARIA props, and normalized field state. |
Exposed
| Member |
Type |
Description |
descriptionProps |
— |
|
element |
Readonly<ShallowRef<HTMLElement | null>> |
Template ref to the rendered root element. |
errorMessage |
— |
|
errorMessageProps |
— |
|
errors |
— |
|
fieldProps |
— |
|
id |
— |
|
invalid |
— |
|
labelProps |
— |
|
name |
— |
|
FieldRoot
Source: src/families/form/field/field.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"div" |
Native element, custom element, or component to render. |
id |
string | null |
undefined |
Consumer-owned control id. null and undefined select a deterministic fallback. |
name (required) |
string |
required |
Normalized HTML form field name. |
errors |
readonly FormFieldError[] |
[] |
Full normalized form error list produced by the form helpers. |
invalid |
boolean |
undefined |
Consumer-owned invalid override. undefined derives invalid state from matching errors. |
hasDescription |
boolean |
false |
Whether a FieldDescription is rendered and should join aria-describedby. |
hasErrorMessage |
boolean |
true |
Whether a FieldErrorMessage is rendered while invalid and should be referenced. |
Events
| Event |
Payload |
Description |
invalid-change |
[invalid: boolean, errors: readonly FormFieldError[]] |
Fired after the derived invalid boolean changes. |
Slots
| Slot |
Slot props |
Description |
default |
FieldRootSlotState |
Renders the composed field body with ids, ARIA props, and normalized field state. |
Exposed
| Member |
Type |
Description |
id |
string |
Stable id for the consumer-rendered form control. |
name |
string |
Normalized HTML form field name. |
invalid |
boolean |
Whether this field is currently invalid. |
errors |
readonly FormFieldError[] |
Current normalized errors for this field only. |
errorMessage |
string | undefined |
First current error message for this field. |
fieldProps |
FieldControlProps |
Attributes to bind to the consumer-rendered form control. |
labelProps |
FieldLabelProps |
Attributes bound by FieldLabel. |
descriptionProps |
FieldTextProps |
Attributes bound by FieldDescription. |
errorMessageProps |
FieldTextProps |
Attributes bound by FieldErrorMessage. |
element |
PrimitiveElement | null |
Rendered root element or component instance. |
FieldDescription
Source: src/families/form/field/field-description.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"p" |
Native element, custom element, or component to render. |
Slots
| Slot |
Slot props |
Description |
default |
FieldDescriptionSlotState |
Renders descriptive help text with the resolved description id. |
Exposed
| Member |
Type |
Description |
element |
PrimitiveElement | null |
Rendered description element or component instance. |
FieldErrorMessage
Source: src/families/form/field/field-error-message.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"p" |
Native element, custom element, or component to render. |
forceMount |
boolean |
false |
Keep the error message element in the DOM while the field is valid. |
Slots
| Slot |
Slot props |
Description |
default |
FieldErrorMessageSlotState |
Renders validation text with the resolved error id and current field errors. |
Exposed
| Member |
Type |
Description |
element |
PrimitiveElement | null |
Rendered error message element or component instance. |
invalid |
boolean |
Whether this field is currently invalid. |
message |
string | undefined |
First current error message for this field. |
FieldLabel
Source: src/families/form/field/field-label.vue
Props
| Prop |
Type |
Default |
Description |
as |
PrimitiveAs |
"label" |
Native element, custom element, or component to render. |
Slots
| Slot |
Slot props |
Description |
default |
FieldLabelSlotState |
Renders visible label content with the resolved label and control ids. |
Exposed
| Member |
Type |
Description |
element |
PrimitiveElement | null |
Rendered label element or component instance. |
Behavior
Normative state x input -> outcome table for field.vue, field-label.vue,
field-description.vue, and field-error-message.vue (@vizejs/ui/field).
Every row is proven by the named test in src/families/form/field/field.test.ts
or src/families/form/field/field-ssr.test.ts; compile-only assertions live in
src/families/form/field/field.types.test-d.ts.
| ID |
State |
Input |
Outcome |
Test |
| FC1 |
valid |
render with label and control |
FieldLabel id and for match Field slot fieldProps |
wires label and described-by props through public SFCs |
| FC2 |
valid |
hasDescription with FieldDescription |
control receives the description id in aria-describedby |
wires label and described-by props through public SFCs |
| FC3 |
field error |
matching normalized error by name |
Field becomes invalid, error message renders, and ARIA error props bind |
renders normalized form errors and emits invalid changes |
| FC4 |
forced error |
invalid prop without matching errors |
Field becomes invalid while the message slot remains consumer-owned |
allows direct invalid overrides for native validation |
| FC5 |
invalid |
hasDescription=false |
description element can render, but the control omits its id |
suppresses optional ARIA relations when declared absent |
| FC6 |
invalid |
hasErrorMessage=false |
error element can render, but control omits aria-errormessage |
suppresses optional ARIA relations when declared absent |
| FC7 |
no provider |
Field part rendered outside Field |
setup throws the stable missing-context diagnostic |
rejects field parts outside a Field root |
| FC8 |
SSR |
isolated request renders with IdProvider |
byte-identical control, label, description, and error ids |
SSR test |
| FC9 |
public types |
malformed props and slot/expose misuse |
compilation rejects misuse |
src/families/form/field/field.types.test-d.ts |
Public contract
Field renders data-vize-ui="field", part="root", data-state,
data-invalid, and data-name.
FieldLabel renders data-vize-ui="field-label", part="label",
data-state, data-invalid, and data-name.
FieldDescription renders data-vize-ui="field-description",
part="description", data-state, data-invalid, and data-name.
FieldErrorMessage renders data-vize-ui="field-error-message",
part="error-message", data-state, data-invalid, and data-name while
the field is invalid or forceMount=true.
Field exposes no CSS custom properties and ships no opinionated styles.
hasDescription is the SSR-safe declaration that a description element is
present. FieldDescription does not mutate the parent relation implicitly.
hasErrorMessage is the SSR-safe declaration that an error message element
is present while invalid. Set it to false for native-only invalid state.