Skip to main content
Version: Next

Orbiter

ui-orbiter powers Orbiter, formerly OrbitingCircles, as the framework-agnostic orbital motion primitive from @editora/ui-core. It arranges slotted items around one or more circular paths with an optional center node, making it useful for launch heroes, product diagrams, status clusters, and motion-forward navigation or system maps.

Best For​

  • Hero sections that need structured motion
  • Product or AI system maps
  • Status clusters around a single control center
  • Branded, premium motion surfaces that still keep content legible

Import​

import '@editora/ui-core';

Basic Usage​

<ui-orbiter variant="glass" tone="brand" rings="2" path="true" pause-on-hover>
<div slot="center" data-ui-orbiter-center>Core</div>

<button data-ui-orbiter-item aria-label="Search">🔎</button>
<button data-ui-orbiter-item aria-label="Alerts">🔔</button>
<button data-ui-orbiter-item aria-label="Assets">📁</button>
</ui-orbiter>

Multi-Ring Layout​

<ui-orbiter
variant="solid"
tone="info"
size="lg"
rings="3"
radius="84"
ring-gap="26"
center-size="148"
icon-size="46"
direction="alternate"
animation="snappy"
path="true"
>
<div slot="center" data-ui-orbiter-center>
<strong>Synced</strong>
<div>12 active systems</div>
</div>

<button data-ui-orbiter-item aria-label="Signals">⚡</button>
<button data-ui-orbiter-item aria-label="Alerts">🔔</button>
<button data-ui-orbiter-item aria-label="Trust">🛡️</button>
<button data-ui-orbiter-item aria-label="Metrics">📈</button>
</ui-orbiter>

Slot Structure​

Use these markers:

  • data-ui-orbiter-item: marks an orbiting node
  • slot="center" and data-ui-orbiter-center: marks the center node

If you omit the marker attributes, the element will apply them automatically to slotted children it manages.

Motion And Layout​

  • rings distributes items across multiple concentric orbits.
  • radius controls the first ring size.
  • ring-gap adds spacing between outer rings.
  • start-angle rotates the starting arrangement.
  • direction supports clockwise, counterclockwise, and alternate.
  • reverse flips the orbit direction.
  • delay and speed control start timing and playback speed.
  • pause-on-item-hover pauses only when the pointer is over a slotted orbit node.
  • animation picks a named motion profile: calm, smooth, snappy, or bouncy.

Multiple rings automatically offset their starting angle so the next ring does not land items directly on top of the inner one.

Variants And Tone​

ui-orbiter uses the same token-driven surface model as the stronger design-system components:

  • surface
  • soft
  • solid
  • glass
  • contrast
  • minimal

The chosen tone affects the shell, orbital paths, center node, and orbiting item surfaces.

Attributes​

AttributeTypeDefaultDescription
durationCSS time18sFull orbit duration
delayCSS time0sDelay before the orbit starts
speednumber1Playback speed multiplier
reversebooleanabsentReverses the orbit direction
radiusCSS length88pxRadius of the first ring
pathboolean-liketrueShows the circular guide paths
icon-sizeCSS length52pxOrbiting node size
center-sizeCSS length128pxCenter node size
ring-gapCSS length28pxGap between rings
ringsnumber1Number of orbit rings
start-anglenumber-90Initial angle in degrees
directionclockwise | counterclockwise | alternateclockwiseOrbit direction pattern
animationcalm | smooth | snappy | bouncysmoothNamed motion preset
variantsurface | soft | solid | glass | contrast | minimalsurfaceSurface treatment
tonebrand | neutral | info | success | warning | dangerbrandAccent tone
sizexs | sm | md | lg | xl | 0 | 1 | 2 | 3 | 4mdPreset scale
surface-radiusCSS length or semantic token—Shell radius override
elevationnone | low | highlowSurface shadow depth
paddingCSS lengthsize-basedShell padding
pause-on-hoverbooleanabsentPauses while hovered
pause-on-item-hoverbooleanabsentPauses only while hovering an orbit item
pause-on-focusbooleanabsentPauses while any child is focused
pausedbooleanabsentForces the orbit to pause

Methods​

const orbit = document.querySelector('ui-orbiter');
orbit?.pause();
orbit?.play();
orbit?.refresh();

Notes​

  • Reduced-motion environments disable the orbital animation automatically but keep the layout intact.
  • Numeric length and time values are normalized for you.
  • This component is intended for small-to-medium item counts; it is not a dense graph visualization.
  • Legacy aliases orbit-radius, item-size, and show-paths still work, but radius, icon-size, and path are the preferred names.