NEXT HMIDocs
The editor / Adding & arranging widgets

Adding & arranging widgets

Widgets are the pieces you drop on a page. This chapter covers placing them, moving and nesting them in the tree, and configuring them through the schema-driven properties panel.

Place a widget

  1. Open the Add-widget menu — Right-click a page or a container in the widget tree and open Add Widget. Built-in widgets are listed first; your reusable Components and any custom widgets follow, each grouped by its category. (Once a project has custom types, the built-ins move into their own Built-in sub-menu to keep the list short.)
  2. Pick a type — Choose the widget — say Button or Icon. It's inserted into the tree at the point you clicked and selected for you.
  3. Position it in the tree — Use Move up / Move down or drag the row to set stacking order, and drop it inside a Container to nest it.
  4. Configure it on the right — The properties panel now lists exactly the fields this widget declares. Fill them in — many can be bound to live data instead of typed literally.

Don't know the name? The same right-click menu has Browse widgets…, which opens a searchable picker showing every widget with its description — easier than scanning sub-menus when you're new to the catalog.

Containers are added their own way. A Container has its own Add Container menu item rather than living in the widget list, because it's the thing that hosts other widgets. Drop widgets into it to build layout — see Layout.

The properties panel for a selected shell region. Each row is one schema field; the small square on the left opens the source picker.
The properties panel for a selected shell region. Each row is one schema field; the small square on the left opens the source picker.

Schema-driven properties

Every widget declares a schema — the list of fields it exposes and the type of each. The panel renders the correct editor per field, so you never type a color into a text box:

  • a color field opens a color picker (with theme-token support),
  • an icon field opens the icon picker, an image field the asset picker,
  • a select shows a dropdown of allowed values,
  • a struct field (like a Button's bound variable) exposes its members to bind individually.

Most fields also carry a small source pill — that's where a static value becomes a live binding. Full detail in Dynamic properties.

Make controls do something: actions

Interactive widgets (Button, Menu Toggle) have an actions field. An action is what runs when the control is triggered:

  • Navigate — Go to another page or dialog in the tree.
  • Write a variable — Push a value to a writable tag — set a coil, a mode, a setpoint.
  • Call the backend — Run an async action, with onSuccess / onFailed / onSettled handlers that can read the $result.

Visibility & permissions. Most widgets expose Visible to and Interactable by group fields. Restrict a Start button to the operators group and it renders read-only for everyone else — no scripting.