import { Fragment, useMemo, useState, type ReactNode } from 'react'; import { TriangleIcon } from '../../components/TriangleIcon'; import type { DefenderDevice, DefenderSeverity, DefenderSeverityMeasure } from '../../domain/defender-for-iot'; import type { ImportedDataset } from '../../domain/dataset'; import type { Review } from '../../domain/review'; import { defenderRiskCoverageDecisions, defenderRiskTargetsForRecord, type DefenderRiskTarget, type ScopedRiskAcceptance, type ScopedRiskAcceptanceWrite } from '../../domain/scoped-risk-acceptance'; import { WorkTimeslotControl } from '../search-filter/WorkTimeslotControl'; import { RiskAcceptanceDialog } from '../finding-reader/RiskAcceptanceDialog'; import { defenderModelForDataset } from './defender-dataset-model'; type DefenderView = 'cves' | 'devices' | 'sites'; const severities: DefenderSeverity[] = ['critical', 'high', 'medium', 'low']; function label(value: string): string { return value ? value.charAt(0).toLocaleUpperCase('en-US') + value.slice(1) : 'Unknown'; } function Count({ value }: { value: number }) { return <>{value.toLocaleString('en-US')}; } function Measure({ measure }: { measure: DefenderSeverityMeasure }) { if (measure.state === 'unavailable') return Unavailable; if (measure.state === 'aggregate-only') return aggregate-only; if (measure.state === 'mismatch') return detailed of {measure.summary?.toLocaleString('en-US') ?? 'unavailable'} summary; if (measure.state === 'detail-only') return detail only; return ; } function SeverityMark({ severity }: { severity: DefenderSeverity | 'unknown' }) { return