UX Nodes
Build interactive user-facing elements from graphs: choice menus, notices and text inputs, emitted to the interface and styled with Style Element.
5 nodes.
| Node | Registry path |
|---|---|
| Build Choice Element | ux/BuildChoiceElement |
| Build Notice Element | ux/BuildNoticeElement |
| Build Text Input Element | ux/BuildTextInputElement |
| Emit UX Element | ux/EmitElement |
| Style UX Element | ux/StyleElement |
Build Choice Element
ux/BuildChoiceElement
Builds a choice UX element payload.
A random id is generated when none is given. Raises an error if choices is
empty. Emit the resulting element with ux/EmitElement.
Inputs
| Input | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
(optional) str (optional; auto-generated when not set) |
closable |
bool |
bool (optional) |
timeout_seconds |
int |
(optional) int (optional; 0 = no timeout) |
title |
str |
str (optional) |
body |
str |
str (optional) |
choices |
list |
list (required) |
multi_select |
bool |
bool (optional) |
default |
any |
str|list[str] (optional) |
Outputs
| Output | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
the element id (resolved) |
closable |
bool |
bool (resolved) |
timeout_seconds |
int |
int (resolved) |
title |
str |
str (resolved) |
body |
str |
str (resolved) |
choices |
list |
list (passed through) |
multi_select |
bool |
bool (resolved) |
default |
any |
the resolved default selection |
ux_id |
str |
str |
ux_element |
ux_element |
dict |
Properties
| Property | Type | Default | Description |
|---|---|---|---|
closable |
bool |
True |
Whether the user can dismiss the element (dismissal cancels waiting) |
timeout_seconds |
int |
0 |
Optional timeout for the interaction (0 = no timeout). Min: 0. |
element_title |
str |
"" |
Title for the element |
element_body |
text |
"" |
Body/description for the element |
multi_select |
bool |
False |
Allow selecting multiple choices |
default |
any |
None |
Default selection (string or list of strings) |
Build Notice Element
ux/BuildNoticeElement
Builds a notice (display-only) UX element payload.
Fire-and-forget: EmitElement emits and returns immediately. The frontend renders the notice until the user dismisses it (when closable) or the client-side timeout expires.
Inputs
| Input | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
(optional) str (optional; auto-generated when not set) |
closable |
bool |
bool (optional) |
timeout_seconds |
int |
int (optional) |
title |
str |
str (optional) |
body |
str |
str (optional) |
Outputs
| Output | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
the element id (resolved) |
closable |
bool |
bool (resolved) |
timeout_seconds |
int |
int (resolved) |
title |
str |
str (resolved) |
body |
str |
str (resolved) |
ux_id |
str |
str |
ux_element |
ux_element |
dict |
Properties
| Property | Type | Default | Description |
|---|---|---|---|
closable |
bool |
True |
Whether the user can dismiss the element (dismissal cancels waiting) |
timeout_seconds |
int |
0 |
Optional timeout for the interaction (0 = no timeout). Min: 0. |
element_title |
str |
"" |
Title for the element |
element_body |
text |
"" |
Body/description for the element |
Build Text Input Element
ux/BuildTextInputElement
Builds a text input UX element payload.
A random id is generated when none is given. Emit the resulting element
with ux/EmitElement.
Inputs
| Input | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
(optional) str (optional; auto-generated when not set) |
closable |
bool |
bool (optional) |
timeout_seconds |
int |
(optional) int (optional; 0 = no timeout) |
title |
str |
str (optional) |
body |
str |
str (optional) |
multiline |
bool |
bool (optional) |
rows |
int |
int (optional) |
placeholder |
str |
str (optional) |
default |
str |
str (optional) |
trim |
bool |
bool (optional) |
Outputs
| Output | Type | Description |
|---|---|---|
state |
any |
any |
id |
str |
the element id (resolved) |
closable |
bool |
bool (resolved) |
timeout_seconds |
int |
int (resolved) |
title |
str |
str (resolved) |
body |
str |
str (resolved) |
multiline |
bool |
bool (resolved) |
rows |
int |
int (resolved) |
placeholder |
str |
str (resolved) |
default |
str |
str (resolved) |
trim |
bool |
bool (resolved) |
ux_id |
str |
str |
ux_element |
ux_element |
dict |
Properties
| Property | Type | Default | Description |
|---|---|---|---|
closable |
bool |
True |
Whether the user can dismiss the element (dismissal cancels waiting) |
timeout_seconds |
int |
0 |
Optional timeout for the interaction (0 = no timeout). Min: 0. |
element_title |
str |
"" |
Title for the element |
element_body |
text |
"" |
Body/description for the element |
multiline |
bool |
False |
Render as textarea (true) or single-line input (false) |
rows |
int |
0 |
Textarea rows (only used when multiline). Min: 0. |
placeholder |
str |
"" |
Input placeholder text |
default |
str |
"" |
Default input value |
trim |
bool |
True |
Whether to trim input before submission |
Emit UX Element
ux/EmitElement
Emits a UX element to the frontend (websocket passthrough).
Choice and text input elements are awaitable by design: emitting one will
wait for the user to submit/cancel (with optional element-defined timeout),
then close the UX element and return the captured interaction values.
A timeout is reported as both timed_out and cancelled. Notice elements
are fire-and-forget and return immediately.
Inputs
| Input | Type | Description |
|---|---|---|
state |
any |
any |
ux_element |
ux_element |
dict |
Outputs
| Output | Type | Description |
|---|---|---|
state |
any |
any |
ux_id |
str |
str |
ux_element |
ux_element |
dict |
value |
any |
any |
values |
any |
dict |
cancelled |
bool |
bool |
timed_out |
bool |
bool |
Style UX Element
ux/StyleElement
Pass-through node for styling UX elements.
Intended usage: connect between ux/Build*Element nodes and ux/EmitElement.
Inputs
| Input | Type | Description |
|---|---|---|
state |
any |
any |
ux_element |
ux_element |
dict |
tint |
str |
str (optional) - Vuetify color name |
icon |
str |
str (optional) - mdi-* icon name |
apply_scene_colors |
bool |
bool (optional) - render body through the scene-message parser for per-category colors |
compact |
bool |
bool (optional) - render the element in a condensed layout |
Outputs
| Output | Type | Description |
|---|---|---|
state |
any |
any |
ux_id |
str |
str |
ux_element |
ux_element |
dict |
Properties
| Property | Type | Default | Description |
|---|---|---|---|
tint |
str |
"muted" |
Color tint (Vuetify color name). Choices are generated at runtime. |
icon |
str |
"" |
Material Design Icon name (e.g., 'mdi-help-circle-outline', 'mdi-information'). Leave blank for no icon. |
apply_scene_colors |
bool |
False |
When true, the body text is rendered through the scene-message parser and gets its per-category colors (quotes/emphasis/parentheses/brackets). When false, body renders with markdown formatting but inherits the element's color. |
compact |
bool |
False |
When true, the frontend renders the element in a condensed layout: smaller icon and text, and the title leads inline into the body rather than sitting on its own row. |