Skip to content

Containers

Containers hold other elements. Most produce no data themselves — the exceptions are Dynamic panel (an array of entries) and Tabs (whose active tab can be read in expressions).

Panel (panel)

A titled box that groups related fields.

PropertyWhat it does
Label / DescriptionPanel heading and sub-text. Hide header removes the heading row.
Background colorPanel surface color (e.g. #ffffff). Remove background disables it entirely.
Border style / color / widthsolid, dashed, dotted, double; color like #d9dce3; thickness like 1px. Borderless removes the border.
RadiusCorner radius (e.g. 12px).
ShadowCSS shadow (e.g. 0 8px 24px rgba(0,0,0,.12)).
Padding / Mobile paddingInner spacing per breakpoint (e.g. 12px or 1rem).
Min height / Max height / Height / Fit contentSizing; content past Max height scrolls (see Overflow).
Overflowvisible, auto, hidden, scroll, clip.
Opacity / Backdrop filterTransparency and glass-style effects.
Background image (+ position, size, repeat, overlay color, blend mode)Full image-background support for hero panels and cards.
Content displayHow children lay out: flex or grid.
Flex direction / Content gap / Content justify / Content align / Content wrap / Align content / Row & column gapFlex composition of the children.
Grid columns / Grid rows / Grid auto rowsGrid composition, e.g. repeat(2, minmax(0, 1fr)), minmax(120px, auto).

A panel's visibleIf hides the whole group at once — usually cleaner than hiding fields one by one. Disabling or making a panel read-only cascades to children (children can opt out by turning off Inherit parent state).

Tabs (tabs) and Tabs Pro (tabsPro)

Horizontal tabs, each with its own rows of elements. Tabs Pro adds richer header styling.

PropertyWhat it does
TabsThe tab list — value is the tab ID, label the name, visibleIf hides a tab conditionally.
Tabs data pathLoad the tab list dynamically from data or a source response.
Active tab data pathData path that stores/controls the active tab from outside.
Tabs positionHeaders on top or at the sides (left/right).
Tabs variantVisual style: underline, pills…
Full width tabsTab buttons fill the row in equal blocks.
Open firstFirst tab opens automatically.
Lazy contentTab content renders only when the user opens it.
Tab template / Tab template refFully custom tab header markup — inline or from the template library.

The active tab is available to expressions:

text
{myTabs.selectedTab}          → active tab name
{myTabs.selectedTabIndex}     → active tab index

Example: show a hint only on the second tab — visibleIf: {myTabs.selectedTabIndex} == 1.

Accordion (accordion)

Vertically stacked collapsible sections. Good for optional/advanced settings that most users skip.

PropertyWhat it does
ItemsThe section list.
Open firstFirst section opens automatically.
Allow multipleSeveral sections may stay open at once.
Item template / Item template refCustom section-header markup.

Dynamic panel (dynamicPanel)

A repeatable group. You design the fields once; users add, remove, and reorder entries. The value is an array of objects:

json
"addresses": [
  { "city": "Vilnius", "street": "Gedimino pr. 1" },
  { "city": "Kaunas",  "street": "Laisvės al. 10" }
]
PropertyWhat it does
Add row button text / Remove row button textButton captions.
Disallow adding / deleting rowsLock the entry count.
Max rowsUpper limit — the add button disables at the limit.
Confirm row deletion (+ title, message, button texts)Ask before removing an entry.
Empty state textShown when the panel has no entries.

Inside a dynamic panel, expressions get extra context:

TokenMeaning
panel.fieldNameA field in the same entry
panel.indexThis entry's position (0-based)
parentIndexIndex of the surrounding repeater when nested

Example — inside each address entry: visibleIf: panel.country == "LT".

Aggregate over all entries from outside the panel: sumInArray({orderLines}, "amount").

Dialog (dialog)

A modal window designed in the builder like a normal container. It stays hidden until opened by an action or condition:

  1. Add a Dialog element, give it a Name (e.g. confirmDialog) and content.
  2. On any button add an action: type dialog, dialog name confirmDialog, operation open (also close, toggle).
PropertyWhat it does
Dialog modemodal, draggable, or fullscreen.
Dialog width / height / max width / max heightSizing (e.g. 720px, 90%, 90vh).
Title heading levelh1h3 for the dialog title.
Show close buttonX in the header.
Close on backdropClicking outside closes the dialog.
Initially openOpen by default when the view loads.
Open ifExpression that opens the dialog while true.
Open data pathA boolean data path that controls opening — set it from actions or the host app.
Show trigger buttonA built-in button that opens the dialog.
Trigger text / icon / icon position / icon only / variant / color / text color / width / mobile width / alignmentFull styling of that trigger button.

Use dialogs for confirmations, quick sub-forms, and detail previews.

Splitter (splitter)

Two or more resizable side-by-side areas. Useful for list-detail layouts.

PropertyWhat it does
Orientationhorizontal or vertical.
PanelsThe panel list — each value is the panel key and content identifier.
Show panel headersA header for each panel.
Allow resizeUsers drag the handle to resize.
Gutter sizeGap/handle size in pixels.
Min panel sizeMinimum panel size as a percentage.
Stateful + State keyPersist panel sizes in localStorage under an optional custom key.

Spacer (spacer) and Divider (divider)

Pure layout elements.

PropertyWhat it does
AxisWhich direction the element occupies (vertical/horizontal).
Height (Spacer)The gap size.
Thickness (Divider)Line thickness.