PRIZM 4.0DSTA
Viewing C3 design language
RC3 · Components

Comms / health strip

A persistent strip that carries link state, signal strength, and platform health for whatever scope the operator is addressing. Visible whenever a platform is live.

Live

Four scopes, four densities of the same idea. Status colours follow semantic tokens — success for a clean link, warning for degraded, danger for lost.

PlatformUGV-04
Single platform — signal, link, battery, GPS
UGV-04LINKBATT 87%GPS LOCK
GroupECHELON BRAVO · 3 PLATFORMS
Aggregated link count, per-platform pips
3/3 LINK67% OK1 DEGRADED
SwarmPERIMETER WATCH · 12 PLATFORMS
Aggregated count, percent healthy, degraded callout
11/12 LINK83% OK1 DEGRADED1 LOST
MissionOP NIGHTOWL · 47 PLATFORMS
Mission-wide summary with degraded and lost counts
44/47 LINK85% OK4 DEGRADED3 LOST

Anatomy

Platform scope is rich and single-row; group / swarm / mission collapse to an aggregated summary. Both share the same monospace, the same status-token palette, and the same compact strip silhouette so the strip reads the same regardless of scope.

Signal bars

Four-bar reading coloured by link status. Greyed bars indicate empty slots.

Link label

LINK · DEGRADED · LOST. Coloured by semantic token. Always present even when LOST.

Aggregated count

X / Y LINK at group, swarm, and mission scope. Degraded and lost surface as separate counts in their semantic colours.

Per-platform pips

At group and swarm scope (≤12 platforms), a small dot per platform shows individual status. Mission scope drops the pips for legibility.

Props

PropTypeDefaultDescription
scopeScopeSelects single-row platform view vs aggregated summary. See Command contexts for the type definition.
platformPlatformLinkRequired when scope="platform". The single platform's link state.
platformsPlatformLink[]Required when scope is group / swarm / mission. Leave lost platforms in the list with status: "lost" rather than removing them — the operator's spatial map stays stable.
classNamestringForwarded to the root container.

Types

PlatformLink

Per-platform link and health state. Derive from your link layer; the strip doesn't poll or fetch. Polling cadence is the consumer's call — 500ms–1s is typical for command-post surfaces.

ts
interface PlatformLink {
  id: string;                                // operator-visible identifier, e.g. "UGV-04"
  signal: 0 | 1 | 2 | 3 | 4;                 // bars, derived from RSSI / link quality
  battery?: number;                          // percentage, 0-100; omit if not applicable
  gpsLock?: boolean;                         // omit if platform has no GPS dependency
  status: "good" | "degraded" | "lost";      // your link-quality classifier
}

Wiring

Read-only — the strip renders whatever you pass in. Derive PlatformLink values from your link layer and re-render on a cadence that matches your surface.

tsx
// single-platform
<CommsHealthStrip
  scope="platform"
  platform={{
    id: "UGV-04",
    signal: 4,
    battery: 78,
    gpsLock: true,
    status: "good",
  }}
/>
tsx
// aggregated
<CommsHealthStrip
  scope="group"
  platforms={liveFleet.map(toLinkState)}
/>

Behavioural rule

Invariant Two

Comms always visible

A degraded link is information the operator needs before deciding anything. The strip is persistent for every connected platform and is never collapsed into a settings panel or tucked behind a tab.

Read invariant

Accessibility

Live regionThe strip carries `role="status"` and `aria-live="polite"`. Screen readers announce link transitions without interrupting the operator.
LabelsPlatform-scope strip uses an `aria-label` of the form `Comms for {id}: {status}`. Aggregated strip describes the summary count and health percent.
Decorative partsSignal bars, dividers, and per-platform pips are `aria-hidden`. The textual link label and counts carry the meaning.
Colour and meaningStatus colour is never the only signal — every state also carries a text label (LINK / DEGRADED / LOST). Operators with colour-vision differences still read state.

JavaFX

Ships in the PRIZM JavaFX library for thick-client C3 apps as Rc3CommsHealthStrip (extends HBox). Run the gallery to see it natively.

java
import design.prizm.fx.rc3.Rc3CommsHealthStrip;

Rc3CommsHealthStrip()
MemberTypeDefaultDescription
ScopeenumPLATFORM shows a single rich row; group / swarm / mission show an aggregated summary.
LinkStatusenumGOOD / DEGRADED / LOST — drives colour + link label.
PlatformLinkrecord(String id, int signal, Integer battery, boolean gpsLock, LinkStatus status)One platform's link state; battery may be null.
setScope(Scope) → voidSwitches between single and aggregated views.
setPlatform(PlatformLink) → voidThe single platform at PLATFORM scope.
setPlatforms(List<PlatformLink>) → voidAggregated scopes; per-platform pips show at group / swarm when ≤ 12.

Status uses the success / warning / danger tokens — no Ember. Honours behavioural invariant 2. Mirrors components/rc3/comms-health-strip.tsx.

Usage

Place the strip where it stays in primary attention — top edge of the operator panel, the canvas footer, or the active-platform chip. Never collapse into a settings panel, never tuck behind a tab, never gate behind a hover. Status colour follows semantic tokens — do not retint with Ember; comms is status, not identity.