Portal Community

The Display Control Types

label

Plain text paragraph. Uses the description field as content. Ideal for instructions and help text.

header

Section heading. Supports h1–h6 levels and optional divider line. Use to visually separate form sections.

image

Inline image. Set src, alt, and responsive width. Supports external URLs and base64.

html

Rich HTML content. Rendered through a 6-layer XSS sanitisation pipeline. Supports links, bold, lists, code blocks.

file-upload

File attachment widget. Supports single and multiple files, file type filtering, size limits, and upload progress display.

Display Controls vs Input Controls

CharacteristicDisplay ControlsInput Controls
User interactionRead-only (file-upload is interactive)Interactive, accept user input
Writes to data modelNo (file-upload fires a callback)Yes, via binding
ValidationNot applicableFull validation support
Visible in view modeConfigurable per controlConfigurable per control
Design palette group"display""input"

Common Properties

Display controls share a subset of the common control properties. Note that required, validation, and binding are not applicable to most display controls:

PropertyApplies toDescription
idAllUnique control identifier
typeAllControl type string
labelfile-uploadLabel shown above (most display controls use description instead)
descriptionlabel, htmlThe text/HTML content to display
orderAllPosition within section
widthAllColumn span: full / half / third
hiddenAllHide the control in all modes
modeVisibilitySettingsAllShow/hide per operating mode
visibilityRuleAllExpression-based conditional visibility

Placement in Form Schema

Display controls are placed in the same controls[] array as input controls. They appear in the section at the position defined by order:

{
  "controls": [
    {
      "id": "section-intro",
      "type": "html",
      "order": 1,
      "width": "full",
      "description": "<p>Please complete all fields in this section. Fields marked with * are required.</p>"
    },
    {
      "id": "first-name",
      "type": "text",
      "label": "First Name",
      "order": 2,
      "required": true,
      "width": "half"
    }
  ]
}

XSS Security Note

The html control passes all content through a 6-layer sanitisation pipeline before rendering. Never bypass this pipeline. See HTML Control Security for the full security model.