Skip to content

cv-status-indicator ​

Inline status marker with optional label and suffix content.

Usage ​

View source
html
<div class="status-indicator-demo-shell" data-demo="status-indicator" data-live-demo-height="700">
  <section class="status-indicator-demo-hero" aria-labelledby="status-indicator-demo-title">
    <div class="status-indicator-demo-copy">
      <span class="status-indicator-demo-kicker">Inline state signal</span>
      <h3 id="status-indicator-demo-title">
        Mark live connection, vault, and policy state without adding a control.
      </h3>
      <p>
        Use <code>cv-status-indicator</code> when the surrounding row already owns the action. The indicator
        contributes semantic status text, optional pulse, and compact suffix context.
      </p>
    </div>

    <dl class="status-indicator-demo-metrics" aria-label="Status indicator contract summary">
      <div>
        <dt>Semantics</dt>
        <dd>role="status"</dd>
      </div>
      <div>
        <dt>Motion</dt>
        <dd>pulse is opt-in</dd>
      </div>
      <div>
        <dt>Marker-only</dt>
        <dd>decorative mode</dd>
      </div>
    </dl>
  </section>

  <section class="status-indicator-demo-board" aria-label="Status indicator workflow examples">
    <div class="status-indicator-demo-panel">
      <header class="status-indicator-demo-panel-head">
        <div>
          <span class="status-indicator-demo-kicker">Session rail</span>
          <h4>Visible route state</h4>
        </div>
        <cv-status-indicator tone="success" pulse>
          Paired
          <span class="status-indicator-demo-token" slot="suffix">local</span>
        </cv-status-indicator>
      </header>

      <div class="status-indicator-demo-row">
        <div>
          <span>Transport</span>
          <strong>Hardware channel negotiated</strong>
        </div>
        <cv-status-indicator tone="primary">
          <span class="status-indicator-demo-icon" slot="icon">TX</span>
          Secure channel
          <span class="status-indicator-demo-token" slot="suffix">usb</span>
        </cv-status-indicator>
      </div>

      <div class="status-indicator-demo-row status-indicator-demo-row--info">
        <div>
          <span>Catalog sync</span>
          <strong>Remote manifest is being reconciled</strong>
        </div>
        <cv-status-indicator tone="info" pulse>
          Reconciling
          <span class="status-indicator-demo-token" slot="suffix">12 files</span>
        </cv-status-indicator>
      </div>

      <div class="status-indicator-demo-row status-indicator-demo-row--success">
        <div>
          <span>Visible vault</span>
          <strong>Decoy profile is mounted for the current route</strong>
        </div>
        <cv-status-indicator tone="success">Verified</cv-status-indicator>
      </div>

      <div class="status-indicator-demo-row status-indicator-demo-row--warning">
        <div>
          <span>Policy review</span>
          <strong>Operator handoff expires soon</strong>
        </div>
        <cv-status-indicator tone="warning" pulse>Pending review</cv-status-indicator>
      </div>

      <div class="status-indicator-demo-row status-indicator-demo-row--danger">
        <div>
          <span>Remote writes</span>
          <strong>Blocked by local coercion profile</strong>
        </div>
        <cv-status-indicator tone="danger">
          Blocked
          <span class="status-indicator-demo-token" slot="suffix">local only</span>
        </cv-status-indicator>
      </div>
    </div>

    <aside class="status-indicator-demo-side" aria-labelledby="status-indicator-demo-decorative-title">
      <div class="status-indicator-demo-section-header">
        <span class="status-indicator-demo-kicker">Marker-only</span>
        <h4 id="status-indicator-demo-decorative-title">
          Use decorative dots when adjacent text carries the label.
        </h4>
      </div>

      <div class="status-indicator-demo-dot-list">
        <div>
          <cv-status-indicator tone="success" decorative></cv-status-indicator>
          <span>Verified local index</span>
        </div>
        <div>
          <cv-status-indicator tone="primary" pulse decorative></cv-status-indicator>
          <span>Live events streaming</span>
        </div>
        <div>
          <cv-status-indicator tone="warning" decorative></cv-status-indicator>
          <span>Policy review queued</span>
        </div>
        <div>
          <cv-status-indicator tone="danger" pulse decorative></cv-status-indicator>
          <span>Write boundary closed</span>
        </div>
      </div>
    </aside>
  </section>

  <section class="status-indicator-demo-tones" aria-labelledby="status-indicator-demo-tones-title">
    <div class="status-indicator-demo-section-header">
      <span class="status-indicator-demo-kicker">Tone and size matrix</span>
      <h4 id="status-indicator-demo-tones-title">
        Keep color semantic; use size for density, not importance.
      </h4>
    </div>

    <div class="status-indicator-demo-tone-grid" aria-label="Status indicator tone and size examples">
      <div>
        <span>Neutral</span>
        <cv-status-indicator tone="neutral" size="small">Idle</cv-status-indicator>
        <cv-status-indicator tone="neutral">Queued</cv-status-indicator>
      </div>
      <div>
        <span>Primary</span>
        <cv-status-indicator tone="primary">Active</cv-status-indicator>
        <cv-status-indicator tone="primary" pulse>Streaming</cv-status-indicator>
      </div>
      <div>
        <span>Info</span>
        <cv-status-indicator tone="info">Scanning</cv-status-indicator>
        <cv-status-indicator tone="info" size="large">Observed</cv-status-indicator>
      </div>
      <div>
        <span>Success</span>
        <cv-status-indicator tone="success">Synced</cv-status-indicator>
        <cv-status-indicator tone="success" pulse>Paired</cv-status-indicator>
      </div>
      <div>
        <span>Warning</span>
        <cv-status-indicator tone="warning">Pending</cv-status-indicator>
        <cv-status-indicator tone="warning" size="small">Review</cv-status-indicator>
      </div>
      <div>
        <span>Danger</span>
        <cv-status-indicator tone="danger">Blocked</cv-status-indicator>
        <cv-status-indicator tone="danger" size="large">Critical</cv-status-indicator>
      </div>
    </div>
  </section>
</div>

Anatomy ​

<cv-status-indicator> (host)
└── <span part="base" role="status">
    ├── <span part="marker">
    ├── <span part="icon">
    │   └── <slot name="icon">
    ├── <span part="label">
    │   └── <slot>
    └── <span part="suffix">
        └── <slot name="suffix">

Attributes ​

AttributeTypeDefaultDescription
toneString"neutral""neutral", "primary", "info", "success", "warning", or "danger"
sizeString"medium""small", "medium", or "large"
pulseBooleanfalseEnables marker pulse animation
decorativeBooleanfalseUses aria-hidden="true" instead of status semantics

Slots ​

SlotDescription
(default)Optional text label
iconOptional leading icon
suffixOptional trailing decoration

CSS Parts ​

PartDescription
baseRoot status wrapper
markerColored status dot
iconIcon slot wrapper
labelDefault slot wrapper
suffixSuffix slot wrapper

CSS Custom Properties ​

PropertyDefaultDescription
--cv-status-marker-size0.625remDiameter of the colored status marker
--cv-status-gapvar(--cv-space-1, 4px)Gap between marker, label, icon, and suffix
--cv-status-colorvar(--cv-color-border-strong, #4c5870)Marker color before tone overrides
--cv-status-font-sizevar(--cv-font-size-xs, 12px)Label font size and base line box size
--cv-status-line-height1.2Label line height
--cv-status-min-block-size1.2emMinimum base height used to align marker-only status items
--cv-status-label-colorvar(--cv-color-text, #e8ecf6)Label text color

Events ​

None. The component is display-only.

ChromVoid UIKit documentation