Skip to Content

Layout Components

Layout components are containers that organize child components and page structure.

This reference lists definition, custom configuration, data configuration, action configuration, and limitations. Shared Design fields: Design Panel.

General

Containers provide one or more sub-canvases. Children follow the parent’s layout and alignment.

Components overview

ComponentClientsData tabActionPattern
ViewWeb, Native AppBasic container
ListWeb, Native AppList item only ✓Repeat render
Tab ViewWeb, Native AppTab page only ✓Tab switching
Conditional ViewWeb, Native AppBranch only ✓Conditional branches

View

Definition

Basic layout container — group components, Flex alignment, local scroll, hover styles.

⌨️ Shortcut: F

Custom configuration

PropertyTypeDefault / optionsClients & conditionsDescription
Edit stateenumNormal / HoverHover Web onlySeparate Normal and Hover styles.
Convert to Conditional ViewAllConverts this View to a Conditional View at the end of the layout flow.

Action configuration

Triggers: On click, On hover, On enter viewport, On scroll in viewport. See Trigger List.


List

Definition

Repeats one List item template per record — product lists, comments, messages. Supports vertical/horizontal layout, grid, carousel, load more, and pull-to-refresh.

Custom configuration

PropertyTypeDefault / optionsClients & conditionsDescription
DirectionenumVertical / HorizontalAllScroll axis; editor adjusts aspect when switching.
Columnsinteger1Vertical, carousel offItems per row. Fixed uses value; Auto computes from container width, item width, column gap.
Rowsinteger1Horizontal, carousel offItems per column. Auto from height, item height, row gap.
Row gapinteger (px)emptyAllVertical spacing between items.
Column gapinteger (px)emptycolumns > 1Horizontal grid spacing.
HeaderbooleanfalseAllSticky header sub-canvas (single instance, not repeated).
CarouselbooleanfalseAllCarousel mode; locks columns/rows to 1.
AutoplaybooleanfalseCarousel onAuto-advance slides.
LoopbooleantrueCarousel onWrap from last to first slide.
IndicatorsbooleantrueCarousel onDot indicators.

Load settings

Open via the gear icon under custom configuration.

PropertyTypeDefault / optionsClients & conditionsDescription
Scroll to bottom on refreshenumNever / Always / Manual refresh / Auto refreshAllAfter refresh, scroll to bottom (chat, logs).
Reverse loadbooleanfalseAllLoad more when scrolling up (history from bottom).
Preserve child statebooleanfalseAllKeep inputs inside items across data refresh.

Data configuration

On the Data tab.

PropertyTypeDefault / optionsDescription
Data sourcedatasetemptyTable query/subscription with filter, sort, dedupe, limit. Subscription disables pull-to-refresh and load more.
FilterexpressionemptyFilter logic; empty filter variables may return unfiltered data.
SortenumemptySort order.
DedupebooleanfalseShow one row per duplicate key; sort field should match dedupe field.
LimitintegeremptyMax records per request.
Load morebooleantrueWhen limit > 0, append next page at scroll end. Requires fixed list height (not fit-content).
Pull to refreshbooleanfalseNative App pull gesture to reload.
⚠️

List pitfalls:

  1. Load more: List height must be fixed (px or %) — fit-content has no scroll region.
  2. Missing filter values: If a filter depends on an empty variable, you may get unfiltered rows (e.g. one arbitrary city when city is unset).

Row key: At runtime, the list assigns each row of data a stable, unique row key so list items can be identified and reused — for example, to tell which rows still exist and which are new after a refresh. The row key comes from the data source:

  • Table query/subscription: uses each record’s id by default. Record ids are generated when the record is created and are stable and unique, so no extra setup is usually needed.
  • Third-party API: uses the unique identifier field you select in the API query configuration. Choose a field that is genuinely unique and never changes, such as a product code or order number.
  • Local data / static arrays: each data object must carry its own unique id field.

Missing or duplicate row keys break how list items are identified and reused, which can show stale or mismatched content after an update and let temporary state such as input values leak between rows. With Preserve child state enabled, the list reuses items by row key across refresh and refetch to keep temporary state, so every row should carry a stable, unique id. The rendering mechanism uses keys to identify and reuse list elements — missing or duplicate keys corrupt list item state and updates; see Rendering Lists in the React documentation.

Action configuration

The list container has no action configuration. Configure List item (and children) for clicks, navigation, modals — use list item and index context.

Sub-components

List item

Template canvas — design once, repeat per row.

Binding:

FieldMeaningExample
List itemCurrent row objectlist item.name, list item.price
IndexZero-based row indexindex + 1 for display row number

Auto layout: With Auto columns/rows, runtime computes fit; Fill remaining width/height stretches items to fill the row/column.

Optional sticky top area — filters, column titles, batch actions. Binds page variables or static content, not per-row fields.


Tab View

Definition

Switch between tab panels on one screen — order status, categories, grouped info. Each tab has its own sub-canvas.

Custom configuration

PropertyTypeDefault / optionsClients & conditionsDescription
ModeenumDefault / CustomAllCustom adds Selected/Unselected tab style sub-canvases.
Default tab indexinteger0AllActive tab on load; bindable; invalid values fall back to 0.
Tabsarray2 initial tabsAllTitles and order; first two cannot be deleted.
Preserve state on switchbooleantrueAllKeep hidden tab input/scroll state.

Action configuration

Parent has no action configuration. Configure Tab page sub-canvas or children inside.

Sub-components

  • Tab page — content for each tab; only active tab visible.
  • Custom tab styles (Custom mode) — Selected tab and Unselected tab appearance.

Conditional View

Definition

Mutually exclusive branches — logged in/out, roles, business states. One branch visible at a time.

Custom configuration

PropertyTypeDefault / optionsClients & conditionsDescription
Preserve state on switchbooleantrueAllKeep hidden branch form/scroll state.

Branches

SettingTypeDefault / rulesDescription
Branchesarray1 normal + 1 init branchAdd, delete, reorder. Each normal branch has a sub-canvas.
Conditionboolean expressionnormal default: alwaysWhen true, branch can show. Put specific conditions first.
Init branchbuilt-incannot deleteShown while data/conditions are not ready; no condition field.

Notes:

  • Higher branches win when multiple conditions are true.
  • Fit-content height follows the active branch.
  • Use Switch conditional branch action on buttons to change branch programmatically.

Action configuration

Parent has no action configuration. Configure branch sub-canvas or children inside.

Sub-components

One sub-canvas per branch, including the built-in Init branch.

Last updated on