Forms

Field reference

Every built-in field type with its supported settings and validation options.

Text inputs

  • text — single-line input.
  • textarea — multi-line input.
  • email — validates as an email.
  • url — validates as a URL.
  • phone — formatted phone input with country codes.

Numeric & dates

  • number — integer or float, with min/max.
  • rating — 1-to-N stars or faces.
  • date, datetime, time.
  • range — slider with step.

Choice

  • select — dropdown, single or multi.
  • radio — exclusive choice with visible options.
  • checkbox — single boolean or multi-select.

Advanced

  • file — with size/type restrictions.
  • signature — e-sign canvas with audit.
  • address — autocomplete + structured components.
  • section — group label and divider.

Address field

Stores a structured value with line 1 / line 2 / city / region / postal code / country, plus optional latitude and longitude. The public renderer drives autocomplete via Geoapify; the API key lives server-side and every keystroke is rate-limited per IP.

Validation modes:

  • off — accept any input.
  • format — postal code must match the country's pattern (US ZIP, UK postcode, etc.).
  • verified — value must come from the autocomplete dropdown. Pair with requireVerifiedPick to reject typed-only entries.

Configure restricted countries with ISO-3166-1 alpha-2 codes (US, CA, GB) — the picker hides results outside that set. Manual entry is allowed by default and can be disabled when a form needs every address to come from the provider.

On submission the address is stored as an object. CSV exports fan components into <field> (line1), <field> (city), etc. — and Salesforce / custom-DB integrations can map sub-components individually ({fieldId}.city, {fieldId}.postalCode, …) to their own destination columns.

typescript
{
  type: "address",
  label: "Shipping address",
  required: true,
  meta: {
    provider: "geoapify",
    validation: "verified",
    allowedCountries: ["US", "CA"],
    captureCoordinates: true,
    manualEntryAllowed: false,
    requireVerifiedPick: true,
  },
}

Custom validation

Attach a regex, min/max, or a custom function to any field:

typescript
{
  type: "text",
  label: "Invoice number",
  required: true,
  validation: {
    pattern: "^INV-\\d{4,}$",
    message: "Format is INV-XXXX where X is a digit.",
  },
}