Form

A form component with per-field validation, error messages, and ARIA accessibility.

Basic Form

A simple contact form with required fields.

Your full name.

We'll never share your email.

With Validation Rules

Form fields with min/max length and pattern validation.

Must be 3-20 characters, letters and numbers only.

Maximum 500 characters.

Live Validation (onChange)

Validates fields as you type.

Enter a number between 1 and 5.

Usage

julia
using Suite

Form(action="/api/submit",
    FormField(name="email",
        FormItem(
            FormLabel("Email"),
            FormControl(
                Input(type="email", placeholder="Enter your email"),
            ),
            FormDescription("We'll never share your email."),
            FormMessage(),
        ),
        required=true,
        pattern="[^@]+@[^@]+",
        pattern_message="Please enter a valid email address",
    ),
    Button(type="submit", "Submit"),
)

Component Structure

Form fields follow a consistent nesting pattern for accessibility and validation:

julia
Form(...)               # Form container
FormField(name=...,     # Field with validation rules
    FormItem(            # Layout wrapper
        FormLabel(...),      # Accessible label
        FormControl(         # Control wrapper (display:contents)
            Input(...),      #   Your actual input/textarea/select
        ),
        FormDescription(...), # Helper text
        FormMessage(),        # Error message (hidden until invalid)
    ),
)

Validation Modes

ModeDescription
"submit"Validate all fields on form submit (default)
"change"Validate each field as the user types
"blur"Validate each field when it loses focus

API Reference

Form

PropTypeDefaultDescription
actionString""Form action URL
methodString"post"Form method
validate_onString"submit"Validation mode: submit, change, or blur
classString""Additional CSS classes
themeSymbol:defaultTheme name

FormField

PropTypeDefaultDescription
nameStringrequiredField name
requiredBoolfalseWhether the field is required
required_messageString"This field is required"Custom required error message
min_lengthInt0Minimum length (0 = no minimum)
min_length_messageString""Custom min length error message
max_lengthInt0Maximum length (0 = no maximum)
max_length_messageString""Custom max length error message
patternString""Regex pattern for validation
pattern_messageString""Custom pattern error message
minString""Minimum value (for number inputs)
maxString""Maximum value (for number inputs)
custom_messageString""Default error message