FormFieldLast updated on
Last updated on
Field definitions for capturing user input
FormField is a union type representing all possible field types in a form. Each field type has a type discriminator and shares common base properties.
type FormField =
| TextField
| BooleanField
| NumberField
| CoordinateField
| BboxField
| MoneyField
| AddressField
| PhoneField
| DurationField
| EmailField
| UuidField
| UriField
| EnumField
| DateField
| DatetimeField
| TimeField
| PersonField
| OrganizationField
| IdentificationField
| MultiselectField
| PercentageField
| RatingField
| FieldsetFieldBaseField
All field types share these base properties:
Field Types
Each field type includes all BaseField properties plus the type-specific properties listed below.
TextField
Text input field for string values.
BooleanField
Boolean checkbox/toggle field.
NumberField
Numeric input field.
EnumField
Single-select dropdown field.
MultiselectField
Multi-select field allowing multiple selections.
DateField
Date input field (ISO 8601 format: YYYY-MM-DD).
DatetimeField
Datetime input field (ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ).
TimeField
Time input field (HH:MM:SS format).
EmailField
Email address input field.
UriField
URI/URL input field.
UuidField
UUID input field.
MoneyField
Monetary amount input field.
PercentageField
Percentage input field (0-100 by default).
RatingField
Rating input field (1-5 by default).
AddressField
Postal address input field.
PhoneField
Phone number input field.
CoordinateField
Geographic coordinate (latitude/longitude) input field.
BboxField
Geographic bounding box input field.
DurationField
Duration input field (ISO 8601 format).
PersonField
Person information input field.
OrganizationField
Organization information input field.
IdentificationField
Identification document input field.
FieldsetField
Nested fieldset containing other fields.
Examples
fields:
# Text field with validation
firstName:
type: text
label: First Name
required: true
minLength: 1
maxLength: 100
# Email field
email:
type: email
label: Email Address
required: true
# Enum dropdown
preferredContact:
type: enum
label: Preferred Contact Method
enum: [{ value: "email" }, { value: "phone" }, { value: "mail" }]
default: email
# Money field
annualIncome:
type: money
label: Annual Income
required: true
min: 0
# Date with constraints
birthDate:
type: date
label: Date of Birth
max: "2006-01-01"
# Conditional field
spouseName:
type: person
label: Spouse Information
visible: "fields.maritalStatus == 'married'"
required: "fields.maritalStatus == 'married'"
# Nested fieldset
emergencyContact:
type: fieldset
label: Emergency Contact
fields:
name:
type: text
label: Contact Name
required: true
phone:
type: phone
label: Contact Phone
required: trueVisibility cascade
visible and required compose into one effective status (hidden < optional < required), and that status cascades through fieldsets:
- A hidden fieldset hides its whole subtree. Children of a hidden container are hidden regardless of their own
visible. requiredfollows effective visibility: a field is only required if it is also visible. A hidden field is never required.- A parent's
requireddoes not force its children. An optional fieldset can still hold required children, and a required fieldset does not make its children required.
So you author two conditions (visible, required), and the engine resolves them into a single status per field, with hidden winning over everything below it.
Related
- Form - Form artifact overview
- Logic - The expression language for
visible/required - Primitives - Primitive types used as field defaults