// Orbital

Orbital

A radial system map where orbit speed, node size, and band colour ARE the telemetry — an instrument, not an animation.

<talos-orbital> is the showpiece instrument: a central core with nodes orbiting on concentric rings. Every visual property is bound to live state — ring = subsystem, node size = load, colour = health band, orbit speed ∝ rate. Form encodes function, so the picture reads even frozen: under prefers-reduced-motion the nodes park and size/colour/ring still carry the whole state, the orbit is only the enhancement.

Nodes are pushed as a property (el.nodes = [...]), not an attribute — it’s a live instrument, so the demos below render the static frame (rings, axes, core) and the code blocks show the node set that drives the system.

Default

PREVIEW
<talos-orbital rings="3" warn="70" crit="90" size="260" core-label="CORE"></talos-orbital>
<script type="module">
  const el = document.querySelector("talos-orbital");
  el.nodes = [
    { id: "api",   ring: 1, value: 40, load: 0.6, rate: 50, label: "API" },
    { id: "db",    ring: 2, value: 82, load: 0.9, rate: 20, label: "DB" },
    { id: "cache", ring: 3, value: 12, load: 0.3, rate: 80, label: "CACHE" },
  ];
</script>

Three rings, a faint crosshair through the core, and the core-label text. Each node sits on the ring named by ring (1 = innermost / most critical), sized by load (0..1) and coloured by its value band.

Rings — subsystem count

PREVIEW
<talos-orbital rings="5" core-label="MESH"></talos-orbital>

rings sets the number of concentric orbits (default 3, min 1). A node’s ring field selects which one it rides; inner rings sweep slightly faster.

Core label & sub

PREVIEW
<talos-orbital core-label="ATLAS" core-sub="SYS://PRIMARY"></talos-orbital>

core-label is the headline glyph in the core; core-sub is the smaller line beneath it. Both default to CORE / SYS://ATLAS when omitted.

Band thresholds

PREVIEW
<talos-orbital warn="50" crit="80" core-label="CORE"></talos-orbital>

warn / crit are the inclusive-from thresholds on each node’s value: value ≥ crit paints --talos-danger, ≥ warn paints --talos-warning, otherwise --talos-success. The colour is the health band — same as the gauge and meter — so a glance reads the whole mesh’s state.

Attributes

AttributeDefaultEffect
rings3number of concentric orbits (min 1); node.ring selects one
warn70inclusive-from threshold → --talos-warning band
crit90inclusive-from threshold → --talos-danger band
size520px square viewBox
core-labelCOREheadline text in the core
core-subSYS://ATLASsmaller line beneath the label

.nodes property

Set el.nodes to an array of { id, ring, value, load, rate, label? }. Re-assign (or mutate + call update()) to push new state; re-assigning preserves each node’s orbit angle by id, so a data update never snaps the system back.

FieldDrives
ididentity — keeps orbit angle stable across re-assigns
ringwhich orbit ring (1-based, 1 = innermost)
valuecolour band via warn / crit
loadnode size (0..1)
rateorbit speed + flow arc to core (0 = parked, no arc)
labeloptional uppercase tag beside the node