← Interface components

UI.Orbit

luastra/ui
UI.Orbit(input: Input): Node

Creates the bounded root for Constellation Orbit navigation and delegates geometry, semantic zoom, focus movement, inactive-depth isolation, themes, and reduced-motion behavior to the host.

Mental model

This is a declarative node: app.render describes it again from current state, while the host matches its stable id to the existing view.

Before you use it

Add luastra/ui to this module's dependencies in luastra.json, then import it with require("luastra/ui"). The project must declare the ui.render capability. app.render must return one UI.Screen root; place this node inside that tree rather than invoking it for a hidden side effect.

How it fits

The constructor validates its fields immediately and returns a UI.Node. After app.render returns, the host reconciles that node by stable id with the current semantic DOM-based interface. Current desktop and mobile hosts package the same web artifact; native adapters are used at capability boundaries.

When to use it

Use UI.Orbit when an application benefits from spatial discovery while still requiring a complete list fallback, stable navigation state, keyboard access, and identical meaning across host presentations.

Shared parameter groups

layoutsemantic

Parameters

ParameterType / valuesDescription
idlowercase path, requiredUnique Orbit ID.
presentationauto | spatial | list?Preferred presentation; unsafe spatial geometry still falls back to list.
orbitThemebuilt-in theme ID?One of the curated Orbit themes.
orbitMotionsystem | off?Orbit-owned motion preference.
maxVisibleinteger 4…32?Density bound before list fallback.
childrenOrbitPath | OrbitSearch | Constellation | FocusSurface[]Orbit experience content with at least one constellation.
gapnone | xs | sm | md | lg | xlSpace between children. Group: Layout and surfaces.
paddingnone | xs | sm | md | lg | xl | responsiveAll-side inner spacing; responsive is supported only by padding. Group: Layout and surfaces.
marginnone | xs | sm | md | lg | xlAll-side outer spacing. Group: Layout and surfaces.
paddingX / paddingYnone | xs | sm | md | lg | xlAxis-specific inner spacing. Group: Layout and surfaces.
paddingTop / paddingBottom / paddingStart / paddingEndnone | xs | sm | md | lg | xlLogical side-specific inner spacing. Group: Layout and surfaces.
marginX / marginYnone | xs | sm | md | lg | xlAxis-specific outer spacing. Group: Layout and surfaces.
marginTop / marginBottom / marginStart / marginEndnone | xs | sm | md | lg | xlLogical side-specific outer spacing. Group: Layout and surfaces.
surfaceplain | card | elevated | accentBackground, border, and elevation. Group: Layout and surfaces.
widthfull | content | wideAvailable width, 720 px maximum, or 1180 px maximum. Group: Layout and surfaces.
alignstart | center | end | stretch | betweenCross-axis alignment. Group: Layout and surfaces.
justifystart | center | end | betweenMain-axis alignment. Group: Layout and surfaces.
flowwrap | nowrapFlex wrapping. Group: Layout and surfaces.
responsivebooleanNarrow-screen adaptation. Group: Layout and surfaces.
classNamesafe string ≤ 256 bytesAdditional admitted class tokens. Group: Layout and surfaces.
tonemuted | error | successSemantic text tone. Group: State and semantics.
appearanceprimary | secondary | danger | ghostAction appearance. Group: State and semantics.
variantbody | subheading | heading | titleBody text or h3, h2, and h1 heading semantics. Group: State and semantics.
rolealert | group | statusSupported ARIA role. Group: State and semantics.
labelstringAccessible name. Group: State and semantics.
hiddenbooleanVisibility state. Group: State and semantics.
disabledbooleanDisabled state. Group: State and semantics.
busybooleanaria-busy state. Group: State and semantics.
requiredbooleanRequired input state. Group: State and semantics.
errorIdcomponent idAssociates a visible role=alert. Group: State and semantics.
textColortoken | #RRGGBBLocal or inherited foreground. Group: Text and local colors.
backgroundColortoken | #RRGGBBComponent-box background. Group: Text and local colors.
Color tokensaccent | danger | muted | surface | success | text | transparent | warningCurrent Screen theme colors. Group: Text and local colors.

Children and layout

Orbit experience content with at least one constellation.

Accessibility and keyboard

The host preserves one semantic model across spatial and list presentations and isolates every inactive constellation from interaction.

Common mistakes

  • Adding application-owned absolute coordinates.
  • Assuming spatial mode is guaranteed when bounds require the list fallback.

Returns

Node — a validated declarative UI node that becomes part of the next host-neutral render tree.

What happens next

A validated declarative node appears after it is returned as part of the current render tree.

Failures and fixes

Invalid fields, duplicate IDs, unsupported child combinations, or a missing ui.render capability fail during check, render-tree validation, or host startup.

Availability

Experimental Constellation Orbit API in 0.5.0-alpha. Verify it against the selected SDK before depending on its shape.

Focused example

UI.Orbit {
    id = "map",
    label = "Application map",
    UI.Constellation {
        id = "map/root",
        UI.OrbitCenter { id = "map/root/center", title = "My app" },
        UI.OrbitNode { id = "map/start", title = "Start", onTap = "start" },
    },
}

Continue learning

Prerequisites

UI.ConstellationUI.OrbitCenterUI.OrbitNode

Next steps

UI.OrbitSearch

Complete inventory

View all pages in Interface components
← Previous: UI.ModalNext: UI.OrbitPath →