Skip to main content
Complete reference for the four custom element types and the options they share.

Factories

Shared options

Every custom element extends the same base:

Value shapes

text, number, and select emit null while empty or mid-typing an unparseable value. checkbox always has a state.

Events

Custom elements support the same six core events as built-in elements: onReady, onChange, onSubmit, onError, onFocus, onBlur, plus onEscapeKeyPressed. Wallet-only events (onClick, onExit) are not emitted.

Validation

  • Without validate, the only built-in check is the synchronous required empty check (unchecked-box on checkbox). Format checks are intentionally not provided because custom elements collect arbitrary merchant-defined data.
  • number adds built-in min and max range checks when validate is not supplied.
  • select accepts only values that match one of options[].value.
  • Providing validate skips every built-in check. The callback receives the current value (including null for empty inputs) and owns the entire validity contract. Return null for valid, or a non-empty string to surface a FieldError with code: 'custom'.

FieldError

field always equals the element’s name. Bucket errors by field to place them next to the matching input.

Imperative .value getter

Every custom element handle exposes a read-only .value property returning the current snapshot.
  • text, number, select return null when empty.
  • checkbox always returns a boolean.

Inside Checkout

Custom elements can be configured under customElements on overflow.checkout(). Each slot appears on the aggregated envelope as:
Subscribe to a single slot’s events with checkout.getCustomElement(name). Inside Checkout, appearance is not allowed on custom slots. Style the whole Checkout as one cohesive unit; see Theming.

Duplicate names

Two elements with the same name on the same Overflow instance log a warning; the second one returns a no-op handle. Its mount, on, update, and submit calls are silently ignored.

See also

Last modified on July 17, 2026