Skip to content

AI: Canonical properties reference

This is the authoritative property reference for AI JSON generation. Only properties listed here are supported. Do not invent or guess properties not found in this document.


Base properties (all elements)

Every element must have these three fields:

json
{
  "name": "fieldName",
  "label": "Field Label",
  "type": "text"
}

Additional base properties available on all element types:

PropertyTypeDescription
descriptionstringSubtitle or help text shown below the label
hiddenbooleanStatically hides the element
widthstringWidth (e.g. "100%", "300px")
tabletWidthstringWidth on tablet
mobileWidthstringWidth on mobile
dependsOnstring[]Limit expression recalculation to these field names
logicExecutionMode"onBlur" | "onChange" | "onInput"When logic/expression is re-evaluated
validationExecutionMode"onBlur" | "onChange" | "onInput"When validators are re-evaluated
status"default" | "readonly"Interaction status override
labelTooltipstringTooltip shown on label hover
fitContentbooleanWidth fits content

Logic fields (element level only — never inside validators)

These fields accept JEXL expressions using {fieldName} placeholder syntax.

FieldReturn typeBehavior
visibleIfbooleanElement visible when true (native field)
hideIfbooleanElement hidden when true — auto-converted to visibleIf: !(expr)
disableIfbooleanElement disabled when true
requireIfbooleanElement required when true
readonlyIfbooleanElement readonly when true (also readOnlyIf)
resetIfbooleanElement value cleared when true
expressionanyResult is set as element value; also for setElementProperty calls

All logic fields must contain valid JEXL expressions only.


Static state fields

FieldTypeDescription
requiredbooleanAlways required
disabledbooleanAlways disabled
readOnlybooleanAlways read-only

Validators

validators is an array of IValidator objects. Exact interface:

typescript
interface IValidator {
  type?: string;         // validator type (required)
  message?: string;      // error message shown to user
  value?: string | number; // threshold (minLength, maxLength, min, max, minDate, maxDate)
  condition?: string;    // JEXL — the FAILING check; error shown while this evaluates to true
  applyIf?: string;      // JEXL — validator runs only when this is truthy
}

Forbidden inside validators: expression, visibleIf, requireIf, disableIf, readonlyIf, resetIf.

json
{
  "validators": [
    { "type": "minLength", "value": 3, "message": "At least 3 characters" },
    { "type": "maxLength", "value": 100, "message": "Too long", "applyIf": "notEmpty({name})" },
    { "type": "min", "value": 0, "message": "Cannot be negative" },
    { "type": "max", "value": 999, "message": "Too large" },
    { "type": "minDate", "value": "today", "message": "Cannot be in the past" },
    { "type": "maxDate", "value": "today", "message": "Cannot be in the future" }
  ]
}

Events / Actions

events is an array of IElementActionConfig objects. Key fields:

FieldTypeValues / Notes
triggerstringclick submit input change blur focus beforeLoad onLoad afterLoad
typestringnavigate dataSource setValue setOptions reloadElements toast dialog validate submit
labelstringButton label (when rendered as action button)
iconstringIcon name
conditionstringJEXL — action runs only when truthy
validateFormbooleanValidate before executing
confirmEnabledbooleanShow confirmation dialog before action
confirmTitlestringConfirm dialog title
confirmMessagestringConfirm dialog body

By action type:

navigate: navigateTo (URL/route), openInNewTab (boolean)

dataSource: dataSourceName, responseMode (none download setValue), responseDataPath, responseTargetElement, reloadCurrentElementAfterSuccess, reloadOnReturnElementNames

toast: toastTitle, toastMessage, toastVariant (error warning info success), toastPosition (top-left top-center top-right bottom-left bottom-center bottom-right), toastAutoHide, toastAutoHideMs

dialog: dialogName, dialogOperation (open close toggle)

setValue: setValueTargetPath, setValueMode (contextPath template json), setValueValue

setOptions: setOptionsTargetElement, setOptionsMode (contextPath template json), setOptionsValue

reloadElements: reloadElementNames (comma-separated)

validate: no extra fields — validates the whole form and shows field errors, same as the built-in Validate toolbar button

submit: no extra fields — validates the form, then fires onComplete with { isValid, data, issues }, same as the built-in Submit toolbar button

Button appearance for action: buttonVariant (filled outlined text), buttonTone (primary risk neutral), hideText, useCustomButtonStyle


Per-type additional properties

text

PropertyTypeNotes
placeholderstring
minlengthnumber
maxlengthnumber
showMaxLengthCounterbooleanShow counter when maxlength is set
patternstringRegex pattern
maskTypestringnone phoneLt phoneIntl personalCodeLt date time dateTime digits custom
maskPatternstringCustom mask (when maskType is custom)
inputModestringtext search email tel url numeric decimal
spellcheckboolean
autocompletestringBrowser autocomplete hint
requiredMessagestringCustom required error message

textarea

Same as text plus:

PropertyTypeNotes
rowsnumberVisible row count

number

PropertyTypeNotes
placeholderstring
minnumberMinimum value
maxnumberMaximum value
stepnumberIncrement step
inputModestringnumeric decimal
valueStorageTypestringnumber (default) or string
visualFormatEnabledbooleanEnable visual number formatting
visualFormatLocalestringLocale for formatting (e.g. "lt-LT")
visualFormatUseGroupingbooleanThousands separator
visualFormatMinFractionDigitsnumber
visualFormatMaxFractionDigitsnumber
requiredMessagestring

datepicker

Exact type string: "datepicker" (all lowercase)

PropertyTypeNotes
placeholderstring
pickerModestringdate (default) datetime time
includeSecondsbooleanFor datetime/time modes
formatstringOutput format string
minValuestringMin selectable date (JEXL or static)
maxValuestringMax selectable date (JEXL or static)
requiredMessagestring

dateRange

PropertyTypeNotes
placeholderstring
formatstring
minValuestring
maxValuestring
requiredMessagestring

Value shape: { "dateFrom": "YYYY-MM-DD", "dateTo": "YYYY-MM-DD" }

select / multiSelect / radio / checkbox / dropdown

PropertyTypeNotes
placeholderstring(select, multiSelect, dropdown)
optionsIOption[]Static options: [{ "value": "x", "label": "X" }]
dataSourceIElementDataSourceDynamic options from datasource
showSearchbooleanSearch box in dropdown (select)
strictOptionsbooleanValue must be from options list
filterIfEqualstringFilter options when datasource field equals value
filterIfNotEqualstringFilter options when datasource field not equals value
optionTemplatestringInline HTML template for each option
optionTemplateNamestringTemplate name reference
requiredMessagestring

Value shapes:

  • select / radio / dropdown: single value
  • multiSelect / checkbox: array

singleCheckbox / toggleSwitch / toggleButton

Value shape: boolean

PropertyTypeNotes
checkedValueanyValue when checked (toggleButton)
uncheckedValueanyValue when unchecked (toggleButton)

button

PropertyTypeNotes
textstringButton text
iconstringIcon name
iconPositionstringleft right top bottom
iconOnlybooleanShow icon only
variantstringsolid outline text
tonestringprimary neutral success info warning risk
sizestringsmall normal large
loadingbooleanShow loading spinner
badgestringBadge text
eventsIElementActionConfig[]Primary click actions
menuActionsIElementActionConfig[]Dropdown menu actions

fileUpload

PropertyTypeNotes
acceptstringAccepted MIME types or extensions, e.g. .pdf,image/*
multiplebooleanAllow multiple files
maxFilesnumberMax number of attached files (default 5)
maxFileSizeMbnumberMax file size in megabytes, not bytes
uploadDataSourceName / downloadDataSourceName / deleteDataSourceNamestringNames of REST data sources; empty uploadDataSourceName means files never leave the browser (local metadata only)
uploadFormFieldNamestringmultipart/form-data field name for the file (default file) — upload always sends single-field FormData, never JSON/base64
fileKeyField / fileNameField / fileTypeField / fileSizeFieldstringField names read from the server's response object (defaults key, name, contentType, size; the older fil_key/fil_name/fil_content_type/fil_size names are still recognized as fallback aliases)

Value shape: the upload response object stored verbatim (or an array of them when multiple), keyed under the element's name — never file bytes/base64. Full request/response wire contract: File upload requests.

panel

PropertyTypeNotes
headerTemplatestringInline HTML for panel header
headerTemplateNamestringTemplate name reference
maxHeightstringMax panel height
panelPaddingstringInternal padding
mobilePaddingstringMobile padding
panelRadiusstringBorder radius
panelShadowstringBox shadow CSS
showBorderbooleanShow panel border
panelBorderWidthstringBorder width (when showBorder)
panelBorderColorstringBorder color (when showBorder)
panelBackgroundColorstringBackground color
titleUnderlinebooleanShow underline below title
contentJustifystringFlexbox justify: flex-start center flex-end space-between space-around space-evenly
contentAlignstringFlexbox align: flex-start center flex-end stretch
contentGapstringGap between child elements

dynamicPanel

Same as panel plus inherits repeatable container behavior. Value shape: array of objects.

dynamicTable

PropertyTypeNotes
emptyMessagestringMessage when no rows
addRowButtonTextstringAdd row button label
itemsPathstringData path for pre-populating rows
disallowAddRowsboolean
disallowDeleteRowsboolean
maxRowsnumber
confirmRowDeletionboolean
confirmDeleteTitlestring
confirmDeleteMessagestring
confirmDeleteConfirmLabelstring
confirmDeleteCancelLabelstring
hideRowIfstringJEXL — hides individual rows
columnsIDynamicTableColumn[]Column definitions
dataSourceIElementDataSourcePre-populate from datasource

Value shape: array of objects.

table

columnsConfig entries use key (NOT name). Minimum column:

json
{
  "key": "firstName",
  "label": "First Name",
  "showInTable": true
}

Column type values: text number date boolean html status toggleSwitch singleCheckbox

PropertyTypeNotes
columnsConfigITableColumnConfig[]Column definitions — use key not name
dataSourceIElementDataSourceClient-side table only (lazyLoad: false) — must return all rows in one response; the table paginates/sorts/filters in the browser
tableDataSourceNamestringServer-side table (lazyLoad: true) — the source referenced must accept the TABLE-POST paging/filter contract below
lazyLoadbooleantrue = server-side paging/sort/search per request; false = load everything once
tableItemsPath / tableTotalPathstringResponse paths for rows / total count; both optional — common shapes (items/data/results/rows, total/totalCount/totalRecords/count/cnt) are auto-detected
pageSizenumberDefault page size
rowActionsITableRowActionConfig[]Row action buttons — go through the generic action/data-source pipeline, not this contract

Do not use ITableDataSourceConfig — it exists in the type definitions but is dead code, never wired to anything; the real per-table binding is the flat tableDataSourceName/tableItemsPath/tableTotalPath trio above.

When lazyLoad: true and the data source's method is the literal string TABLE-POST (sent over the wire as a real POST), NGX View Builder auto-merges the current page/sort/search state into the request body:

json
{
  "pagingParams": { "cnt": null, "orderClause": "lastName DESC", "pageSize": 25, "skipRows": 50, "totalCountUsed": false },
  "params": [ ["tenantId", "42"] ],
  "extendedParams": [
    { "paramName": "quickSearch", "paramValue": { "condition": "%-%", "value": "acme" } },
    { "paramName": "status", "paramValue": { "condition": "=", "value": "active" } }
  ]
}

condition values: %-% contains, !%-% not contains, %- starts with, -% ends with, =/!= equals/not equals, >/>=/</<= for numbers and dates. Full contract, response shape, row-action/inline-edit context, and export behavior: Table: server-side paging & filtering.

tabs / tabsPro

Contains named tab sections. Child rows assigned via column.tabRows.

accordion

Collapsible sections with label per panel.

dialog

Modal element. Configure via settings.dialog* fields:

SettingNotes
settings.renderMode"dialog"
settings.dialogTitleDialog title
settings.dialogDescriptionSubtitle
settings.dialogWidthWidth
settings.dialogShowCloseButtonboolean
settings.dialogPaddingCSS padding
settings.dialogMaxWidthMax width
settings.dialogMaxHeightMax height

richText / richTextViewer

Value shape: string (HTML).

messageCard

PropertyTypeNotes
tonestringprimary success warning risk neutral info
iconstringIcon name
textstringCard message text

statsCard

PropertyTypeNotes
valuestringMain numeric/text value
trendstringTrend direction
trendValuestringTrend amount

badge

PropertyTypeNotes
textstringBadge content
tonestringprimary success warning risk neutral info

image

PropertyTypeNotes
srcstringImage URL or JEXL expression
altstringAlt text
objectFitstringCSS object-fit

icon

PropertyTypeNotes
iconstringIcon name
sizestringIcon size
tonestringColor tone

divider

No additional properties beyond base.

spacer

PropertyTypeNotes
heightstringSpacer height

pageTitle

PropertyTypeNotes
titlestringHeading text
subtitlestringSubheading text
PropertyTypeNotes
itemsarrayBreadcrumb items

iframe

PropertyTypeNotes
srcstringSource URL
heightstringFrame height
scrollingboolean

slider

PropertyTypeNotes
minnumber
maxnumber
stepnumber
valueStorageTypestringnumber or string

numberStepper

PropertyTypeNotes
stepnumberIncrement/decrement step
minnumberMin value
maxnumberMax value

Value shape: number.

timePicker

PropertyTypeNotes
placeholderstring
minuteStepnumberMinute increment shown in the picker

Value shape: time string.

signaturePad

PropertyTypeNotes
canvasHeightnumberCanvas height in px
clearLabelstringClear button label
strokeColor / strokeWidth / backgroundColorstring / number / stringDrawing style
exportFormatstringpng or jpeg

Value shape: signature image data (per exportFormat), keyed under the element's name.

listBox

PropertyTypeNotes
selectionModestringsingle or multiple
dataSourceIElementDataSourceOptions from a datasource
optionsarrayStatic options
maxHeightnumberList height in px

Value shape: single value (selectionMode: "single") or array (selectionMode: "multiple").

selectButton

PropertyTypeNotes
multiplebooleanAllow selecting more than one option
allowEmptybooleanAllow deselecting to no value
variantstringbuttons or segmented
orientationstringhorizontal or vertical
sizestringsmall normal large
tonestringprimary neutral success info warning risk

Value shape: single value, or array when multiple is true.

progressBar

PropertyTypeNotes
min / maxnumberValue bounds
expressionstringComputes the current value
dataSource / progressDataPath / progressValuePath / progressMaxPathDrive the value from a datasource
displayTypestringlinear or circular
valueLabelModestringpercent value fraction

Value shape: number (0 to max, default 100).


ISettings fields

Only include settings actually needed by the form.

FieldTypeNotes
languagestringRequired. E.g. "en", "lt"
localestringE.g. "en-US", "lt-LT"
widthstringForm width
widthUnit"px" | "%"
renderMode"page" | "dialog"
theme"light" | "dark"
pageNavigationMode"default" | "stepper"
allowStepWithoutValidationboolean
pageNavigationPosition"top" | "bottom" | "both" | "none"
stepperPosition"top" | "bottom" | "both" | "none"
actionButtonsPosition"top" | "bottom" | "both" | "none"
showSubmitButtonboolean
showValidateButtonboolean
showValidationIssuesModalboolean
elementSpacingstringGap between rows
customCssstringRaw CSS injected
lazyElementRenderingbooleanLazy-render off-screen elements

IDataSource fields (top-level dataSources array)

json
{
  "name": "loadCities",
  "title": "Load cities",
  "type": "rest",
  "params": {}
}

type values: rest route local


IElementDataSource (element-level dataSource field)

json
{
  "dataSource": {
    "name": "loadCities",
    "useFor": "option",
    "optionValue": "id",
    "optionLabel": "name",
    "refreshPaths": ["countryField"],
    "params": [{ "name": "country", "value": "{countryField}" }]
  }
}
FieldTypeNotes
namestringReferences a top-level dataSource name
useFor"option" | "value"Whether datasource feeds options or element value
optionValuestringProperty path for option value
optionLabelstringProperty path for option label
filterOptionsBystringJEXL expression using item.* to filter options
paramsIDataSourceParamMapping[][{ "name": "key", "value": "{field}" }]
refreshOnChangebooleanRe-fetch when any dependency changes
refreshPathsstring[]Re-fetch only when these fields change

Canonical type string list

text | textarea | number | slider | phoneInput | code | fileUpload | button | numberStepper | signaturePad
select | multiSelect | radio | checkbox | singleCheckbox | toggleSwitch | toggleButton | dropdown | autocomplete | selectButton | listBox
datepicker | dateRange | timePicker
panel | dynamicPanel | tabs | tabsPro | accordion | dialog | splitter | progressFlow | emptyBlock
dynamicTable | table | listGrid | chart
richText | richTextViewer | customHtml | htmlSnippet | image | video | iframe | avatar | icon
divider | spacer | breadcrumbs | pageTitle | badge | messageCard | statsCard | toast | progressBar
page

Type strings are exact and case-sensitive. Never alter capitalization.