Skip to Content

Widget Matrix

Use this document for:

  • FieldType -> WidgetType compatibility
  • widget examples
  • widget-specific widgetProps

Related docs:

  • Fields: core Field props, conditions, filters, Field.onChange, value contracts
  • Relation fields: RelationTable, SelectTree, OneToMany, ManyToMany

FieldType -> WidgetType Matrix

FieldTypeDefault behaviorSupported WidgetType
Stringsingle-line inputURL, Email, Text, RichText, TemplateEditor, Markdown, Code, Color
MultiStringtag-style comma/enter input-
Integernumeric inputMonetary, Percentage, Slider
Longnumeric inputMonetary, Percentage, Slider
Doublenumeric inputMonetary, Percentage, Slider
BigDecimaldecimal string inputMonetary, Percentage, Slider
BooleanswitchCheckBox
Datedate pickeryyyy-MM, MM-dd
DateTimedatetime input-
Timetime inputHH:mm:ss, HH:mm
Optionsingle selectRadio, StatusBar
MultiOptioncheckbox groupCheckBox
ManyToOnereference selectSelectTree
OneToOnereference selectSelectTree
ManyToManyrelation table + picker dialogSelectTree, TagList
OneToManyrelation table-
Filefile uploadImage
MultiFilemulti-file uploadMultiImage
JSONCodeMirror JSON editorJsonTree
Filtersfilter builder-
Ordersorder builder-
DTOCodeMirror JSON editorJsonTree

String Widgets

Default String

<Field fieldName="name" />

URL, Email, Color

<Field fieldName="homepage" widgetType="URL" /> <Field fieldName="contactEmail" widgetType="Email" /> <Field fieldName="themeColor" widgetType="Color" />

Text

<Field fieldName="description" widgetType="Text" />

RichText

Tiptap-based WYSIWYG rich text editor. Stores and reads HTML strings.

Toolbar: bold, italic, underline, strikethrough, headings (H1–H4), bullet/ordered lists, indent/outdent, text alignment, link, image, table, horizontal rule, highlight, undo/redo.

Two-level lazy loading: read-only mode renders raw HTML without loading the editor; edit mode lazy-loads the full Tiptap editor.

<Field fieldName="content" widgetType="RichText" />

TemplateEditor

Tiptap-based template editor for designing email templates, document templates, and other content intended for backend rendering and PDF generation.

Storage format: HTML with data-tpl-* attributes for template-specific nodes. The editor round-trips between stored HTML and Tiptap JSON automatically via custom parseHTML / renderHTML rules.

Features:

  • Field placeholders — insert model fields as inline chips. HTML output: <span data-tpl-field="fieldPath" data-tpl-label="label">{{fieldPath}}</span>
  • Relation field expansion — expand ManyToOne / OneToOne relations one level to insert nested paths (e.g. department.name)
  • Loop tables — insert OneToMany / ManyToMany relations as loop tables with selectable columns. HTML output: <table data-tpl-loop="relationField" data-tpl-model="RelatedModel"> with <th data-tpl-field="col"> headers
  • Field picker — toolbar “Insert Field” button opens a popover listing fields grouped by direct / relation / collection
  • Two-level lazy loading — same as RichText: read-only renders HTML without Tiptap; edit mode lazy-loads the full editor
<Field fieldName="offerLetterTemplate" widgetType="TemplateEditor" widgetProps={{ modelName: "Employee" }} />
<Field fieldName="htmlTemplate" widgetType="TemplateEditor" widgetProps={{ modelName: "{{ modelName }}" }} />

TemplateEditor widget props:

PropTypeDefaultNotes
modelNamestring-Model whose fields are available for insertion. Supports static values like "Employee" and field references like "{{ modelName }}".
minHeightnumber | string320pxMinimum editor height.

If modelName is omitted, falls back to the field’s own metaField.modelName.

Markdown

<Field fieldName="notes" widgetType="Markdown" widgetProps={{ mode: "split", minHeight: 360 }} />

Markdown widget props:

PropTypeDefaultNotes
mode"split" | "edit" | "preview""split"split shows editor + preview; edit editor only; preview preview only.
heightnumber | string-Fixed height for editor/preview panels.
minHeightnumber | string320pxMinimum panel height.
maxHeightnumber | string-Maximum panel height.
lineNumbersbooleantrueEditor gutter line numbers.
lineWrappingbooleantrueWrap long markdown lines.
tabSizenumber2Editor indentation size.
autoFocusbooleanfalseFocus editor after mount.

Preview is rendered by react-markdown with remark-gfm enabled by default.

Code

<Field fieldName="script" widgetType="Code" widgetProps={{ language: "python", minHeight: 320, lineNumbers: true }} />

Code widget props:

PropTypeDefaultNotes
language"plain" | "java" | "html" | "json" | "markdown" | "python" | "sql" | "yaml" | "yml""plain"Syntax highlighting language.
heightnumber | string-Fixed editor height.
minHeightnumber | string240pxMinimum editor height.
maxHeightnumber | string-Maximum editor height.
lineNumbersbooleantrueEditor gutter line numbers.
lineWrappingbooleantrueWrap long lines.
tabSizenumber2Editor indentation size.
autoFocusbooleanfalseFocus editor after mount.

MultiString

<Field fieldName="tags" />

Numeric Widgets

Monetary

<Field fieldName="amount" widgetType="Monetary" />

Percentage

<Field fieldName="ratio" widgetType="Percentage" />

Slider

<Field fieldName="score" widgetType="Slider" widgetProps={{ minValue: 0, maxValue: 100, step: 5 }} />

Slider widget props:

PropTypeDefaultNotes
minValuenumber0Minimum slider value.
maxValuenumber100Maximum slider value.
stepnumberinferred from field type / scaleStep size.

Boolean And Option Widgets

CheckBox

<Field fieldName="active" widgetType="CheckBox" />

Radio

<Field fieldName="status" widgetType="Radio" />

Radio widget props:

PropTypeDefaultNotes
direction"horizontal" | "vertical""vertical"Radio item layout direction.

StatusBar

<Field fieldName="status" widgetType="StatusBar" />

StatusBar widget props:

PropTypeDefaultNotes
wrapbooleantrueAllow status items to wrap.

Date And Time Widgets

<Field fieldName="period" widgetType="yyyy-MM" /> <Field fieldName="anniversary" widgetType="MM-dd" /> <Field fieldName="startTime" widgetType="HH:mm" /> <Field fieldName="startTime" widgetType="HH:mm:ss" />

Relation Widgets

SelectTree

<Field fieldName="departmentId" widgetType="SelectTree" />

TagList

<Field fieldName="userIds" widgetType="TagList" tableView={userTableView} />

See Relation Fields for relation-specific behavior, query rules, and RelationTable.

File And Image Widgets

Image

<Field fieldName="avatar" widgetType="Image" /> <Field fieldName="photo" widgetType="Image" widgetProps={{ display: "avatar", avatarSize: "xl", previewUrl: userInfo.photoUrl, crop: { enabled: true, aspect: 1, shape: "round" }, }} />

Image widget props:

PropTypeDefaultNotes
acceptstring"image/*"Native file input accept string.
aspectRationumber | string-Preview ratio only.
objectFit"cover" | "contain""cover"Preview image fit mode.
uploadTextstring"Upload image" or "Upload photo"Empty-state upload text.
helperTextstring-Widget-local helper text.
display"card" | "avatar""card"avatar is the compact profile-photo layout.
avatarSize"sm" | "md" | "lg" | "xl""lg"Only used when display="avatar".
previewUrlstring-Existing image URL when the field value is still a saved file id string.
crop.enabledbooleanfalseEnable crop flow before upload.
crop.aspectnumber1 in avatar mode; otherwise derived from aspectRatio, else 4 / 3Crop ratio. 1 means square.
crop.shape"rect" | "round""rect"Crop shape.
crop.zoombooleantrueEnable zoom control.
crop.minZoomnumber1Minimum zoom.
crop.maxZoomnumber3Maximum zoom.

MultiImage

<Field fieldName="photos" widgetType="MultiImage" />

MultiImage adds:

PropTypeDefaultNotes
maxCountnumber-Maximum number of uploaded images.
columns2 | 3 | 4 | 5 | 64Gallery grid columns.

Structured Value Widgets

JsonTree

<Field fieldName="config" widgetType="JsonTree" />

JSON editor widget props:

PropTypeDefaultNotes
heightnumber | string-Fixed editor height.
minHeightnumber | string240pxMinimum editor height.
maxHeightnumber | string-Maximum editor height.
lineNumbersbooleantrueEditor gutter line numbers.
lineWrappingbooleantrueWrap long lines.
tabSizenumber2Indentation size.
formatOnBlurbooleantrueReformat valid JSON on blur.
autoFocusbooleanfalseFocus editor after mount.

Filters

<Field fieldName="filters" />

Filters widget props:

PropTypeDefaultNotes
allowedFieldsstring[]-Whitelist searchable fields.
excludeFieldsstring[]-Hide fields from the builder.

Orders

<Field fieldName="orders" />

Orders widget props:

PropTypeDefaultNotes
allowedFieldsstring[]-Whitelist sortable fields.
excludeFieldsstring[]-Hide fields from builder.
Last updated on