Custom Field
Renders a form field from a JSON definition instead of hand-written markup: one field with CustomFieldRenderer, a whole set with CustomFieldGroup. Covers 30+ types (text, choice, date and range pickers, sliders, rating, color, country, file) and ships the value helpers that go with them.
Single field
CustomFieldRenderer takes one definition and a v-model. Label, placeholder, help text and the required marker all come from the definition.
Shown on your booth signage.
Value: empty
Field group
CustomFieldGroup renders a list of definitions and keeps one value map keyed by field ulid — the shape you post back to the server.
Your details
We only use this to contact you about the event.
{}Field types
A sample across the catalog: choice, date and range pickers, sliders, rating, color and country all render from the same definition shape.
Validation errors
Pass the server's error bag. errorPrefix matches how your API keys them, and nested keys for range types (.start / .end) resolve automatically.
- The full name field is required.
- The end date must be on or after the start date.
Options and presets
Options accept { value, label } pairs, plain strings, or a translation map. settings.options_preset generates the list instead — years rolls over on its own.
Localized labels
Labels, placeholders, help text and option labels may be { locale: string } maps; the locale prop picks the language, falling back to English.
We pass this to the caterer.
Disabled and preview
disabled greys out the inputs; preview keeps a field interactive for a builder preview without wiring uploads.
Value helpers
The runtime helpers exported alongside the components: seed a blank value, normalize an incoming definition, and format a stored answer for tables.
normalizeField(field, "id")
{
"key": "h-role",
"type": "multi_select",
"label": "Bidang minat",
"options": [
{
"value": "design",
"label": "Desain"
},
{
"value": "dev",
"label": "Pengembangan"
}
],
"required": true
}defaultValueFor(field) → []
formatResponseValue(field, [
"design",
"dev"
], "id") → Desain, Pengembangan
API Reference
CustomFieldRenderer
CustomFieldGroup
CustomFieldFileUpload
Helpers (core)
Accessibility
Keyboard shortcuts and ARIA behavior.
- Every field renders a <label> bound to its input id, so the label, help text and required marker are announced together.
- Errors are rendered below the field and referenced by the input, including nested errors for range types.
- Section fields are layout-only headings: they render no input and are stripped from submitted values.
- Rich text fields load the editor lazily, so a form without one never pulls the editor bundle.