UI Components

This directory contains documentation for the StellaOps Angular UI components.

Evidence-Weighted Score (EWS) Components

The EWS component suite provides visual representations of vulnerability scores based on evidence-weighted analysis.

Core Components

ComponentPurposeLocation
ScorePillCompact score display with bucket coloringshared/components/score/
ScoreBreakdownPopoverDetailed score breakdown with dimensionsshared/components/score/
ScoreBadgeEvidence flag badges (live-signal, proven-path, etc.)shared/components/score/
ScoreHistoryChartTimeline visualization of score changesshared/components/score/

Feature Components

ComponentPurposeLocation
FindingsListFindings table with EWS integrationfeatures/findings/
BulkTriageViewBulk triage interface with bucket summariesfeatures/findings/

Score Buckets

All EWS components use a consistent bucket system:

BucketScore RangeColorPriority
Act Now90-100Red (#DC2626)Critical - Immediate action required
Schedule Next70-89Amber (#D97706)High - Schedule for next sprint
Investigate40-69Blue (#2563EB)Medium - Investigate when possible
Watchlist0-39Gray (#6B7280)Low - Monitor for changes

Evidence Flags

Findings can have special flags indicating evidence quality:

FlagIconColorDescription
live-signalSignal waveGreenActive runtime signals detected
proven-pathCheckmarkBlueVerified reachability path confirmed
vendor-naStrikethroughGrayVendor marked as not affected
speculativeQuestion markOrangeEvidence is speculative/unconfirmed
anchored[A]VioletScore anchored with DSSE/Rekor attestation
hard-fail[!]RedPolicy hard-fail triggered

Witness Visualization Components

Sprint: SPRINT_20260118_020_FE_witness_visualization

The witness visualization component suite provides UI for runtime witness display, static vs runtime path comparison, and witness gate results in release promotion flows.

Components

ComponentPurposeLocation
WitnessStatusChipStatus badge showing witness state (witnessed/unwitnessed/stale/failed)shared/domain/witness-status-chip/
WitnessComparisonSide-by-side static vs runtime path comparisonshared/components/witness-comparison/
UnwitnessedAdvisoryAdvisory panel for paths without witnessesshared/components/unwitnessed-advisory/
GateSummaryPanelExtended gate summary with witness metricsshared/domain/gate-summary-panel/

Witness States

StateBadge ColorDescription
witnessedGreenPath confirmed by runtime observation
unwitnessedYellowPath not yet observed at runtime
staleOrangeWitness data is outdated
failedRedWitness verification failed

Usage

import {
  WitnessStatusChipComponent,
  WitnessComparisonComponent,
  UnwitnessedAdvisoryComponent,
  GateSummaryPanelComponent,
} from '@app/shared/domain';
<!-- Witness Status Chip -->
<app-witness-status-chip [status]="'witnessed'" [showCount]="true" />

<!-- Witness Comparison -->
<app-witness-comparison [data]="comparisonData" (stepClick)="onStepClick($event)" />

<!-- Unwitnessed Advisory -->
<app-unwitnessed-advisory [data]="advisoryData" (createTestTask)="onCreateTask($event)" />

See witness-visualization.md for full documentation.


Grey Queue Components

Sprint: SPRINT_20260112_011_FE_policy_unknowns_queue_integration

The Grey Queue component suite handles observations with uncertain status requiring operator attention.

Components

ComponentPurposeLocation
GreyQueuePanelDisplay grey queue item with fingerprint, triggers, conflicts, and actionsfeatures/unknowns/
GreyQueueDashboardDashboard view with filtering and deterministic orderingfeatures/unknowns/
DeterminizationReviewDetailed review context for grey queue itemsfeatures/unknowns/

Observation States

StateBadge ColorDescription
PendingDeterminizationYellowEvidence incomplete; monitoring active
DisputedOrangeConflicting evidence; manual adjudication required
GuardedPassBlueAllowed with runtime guardrails
ResolvedGreenOperator has made a determination

Usage

// Grey queue components
import {
  GreyQueuePanelComponent,
  GreyQueueDashboardComponent,
  DeterminizationReviewComponent,
} from '@app/features/unknowns';
<!-- Grey Queue Panel -->
<app-grey-queue-panel
  [unknown]="policyUnknown"
  (triageAction)="onTriageAction($event)"
/>

<!-- Grey Queue Dashboard -->
<app-grey-queue-dashboard
  [unknowns]="unknownsList"
  (selectUnknown)="onSelectUnknown($event)"
/>

See docs/UI_GUIDE.md#grey-queue-and-unknowns-triage for operator workflow documentation.

Quick Start

Import Components

// Score components
import {
  ScorePillComponent,
  ScoreBreakdownPopoverComponent,
  ScoreBadgeComponent,
  ScoreHistoryChartComponent,
} from '@app/shared/components/score';

// Findings components
import {
  FindingsListComponent,
  BulkTriageViewComponent,
} from '@app/features/findings';

Basic Usage

<!-- Display a score pill -->
<stella-score-pill [score]="78" size="md" />

<!-- Display score badges -->
<stella-score-badge type="live-signal" />
<stella-score-badge type="proven-path" />

<!-- Full findings list with scoring -->
<app-findings-list
  [findings]="findings"
  [autoLoadScores]="true"
  (findingSelect)="onFindingSelect($event)"
/>

Storybook

Interactive examples and documentation are available in Storybook:

cd src/Web/StellaOps.Web
npm run storybook

Navigate to:

Design Tokens

Score colors are defined as CSS custom properties. See design-tokens.md for the full token reference.

Accessibility

All components follow WCAG 2.1 AA guidelines: