required marks an element (or an individual atom on a multi-field element) as mandatory. Empty inputs surface a FieldError with code: 'required'.
Defaults to false. When false, an empty input is treated as a valid “not provided” value: onChange emits value: null with no errors and submit() accepts the empty submission.
Single-input elements
email, fullName, phone, and companyName accept a top-level required?: boolean.
true, the element emits a FieldError with code: 'required' whenever its input is empty: at submit time, on blur, and from onChange as soon as the value becomes empty again. Backspacing to empty re-emits the required error immediately.
Split-mode fullName
required: true cascades to both halves. Each empty half emits its own FieldError with field: 'firstName' or field: 'lastName'.
Address elements
billingAddress and shippingAddress accept either a boolean or a per-atom record:
fields.fullName slot on an address element owns its own required knob (configured inside fields.fullName.required). It is not addressable through the address-level record.
Bank element
Both bank modes are implicitly required:- Plaid mode: the shopper must complete linking before submit succeeds. An unlinked submit surfaces a single
FieldErrorwithfield: 'bank'andcode: 'required'and the message"Please link your bank to continue.". - Manual mode: every visible atom (
accountType,routingNumber,accountNumber,confirmAccountNumber) is implicitly required and collects arequiredFieldErrorwhen empty.accountTypeonly trips the required-empty branch whenfields.accountType.placeholderis configured.
Card element
Every visible card field is required. Suppress optional atoms withfields.holderName.hidden, fields.postalCode.hidden, or fields.cardSecurityCode.hidden.
Custom elements
text, number, and select accept a top-level required?: boolean. An empty input (or the placeholder slot on select) emits a FieldError with code: 'required'.
checkbox interprets required: true as “must be checked”, matching the native HTML <input type="checkbox" required> semantic.
Wallets, submit button, and Checkout
Wallets (applePay, googlePay) run their own submission and submitButton has no value. Inside checkout, configure required on individual slots (contact.email.required, billingAddress.required, and so on).
Error shape
onChange.errors (live) or onError.fieldErrors (submit time). Both surfaces share the same FieldError shape.