// KitDocs.jsx — browseable docs page for the Reporting kit. // Sections: Overview · Tokens · Components · Assemblies · Reference page. const { useState: useDocsState } = React; const { COLORS: DC, PageHeader, RptButton, KbCard, PillTab, FilterChip, StatusBanner, ToolbarLabel, SeverityDot, SlaPill, WorkflowBadge, DonutSample, RptIcon: DI, } = window.RPT; const { ReportingPage } = window.RPT_PAGE; /* ── Layout primitives ─────────────────────────────────────────── */ function Section({ id, eyebrow, title, blurb, children }) { return (
{eyebrow && (
{eyebrow}
)}

{title}

{blurb && (

{blurb}

)}
{children}
); } function Spec({ label, children }) { return (
{label}
{children}
); } function CodeChip({ children }) { return ( {children} ); } function SwatchRow({ name, value, role }) { return (
{name}
{role}
{value}
); } /* ── Sticky tab nav ─────────────────────────────────────────────── */ function TabNav({ active, onChange }) { const items = [ { id: 'overview', label: 'Overview' }, { id: 'tokens', label: 'Tokens' }, { id: 'components', label: 'Components' }, { id: 'assemblies', label: 'Assemblies' }, { id: 'reference', label: 'Reference page' }, ]; return (
Reporting Kit
{items.map((it) => ( onChange(it.id)}> {it.label} ))}
); } /* ── Overview ───────────────────────────────────────────────────── */ function OverviewSection() { return (
Reporting
Green is reserved for the page title + the lone primary action (Sync). Everything else is sky.
KB card · sky border · 0.12 → 0.35 on hover
Same chrome for donuts, trend, and findings panel. No more colored left-rails.
Card label · 11 / 600 / 0.1em
JetBrains Mono · everywhere
Outfit · prose only (blurbs)
); } /* ── Tokens ─────────────────────────────────────────────────────── */ function TokensSection() { return (
linear-gradient(135deg, rgba(30,41,59,0.95) 0%, rgba(15,23,42,0.98) 100%) 1.5px solid rgba(14,165,233,0.12) 1.5px solid rgba(14,165,233,0.35) 8px 16px (donuts) / 20px (panels) 1px solid rgba(255,255,255,0.04) JetBrains Mono · 24 / 700 · 0.1em · uppercase · green glow Mono · 12 / 400 · slate-muted Mono · 11 / 600 · 0.1em · uppercase · slate-disabled Mono · 11 / 700 · 0.1em · uppercase · sky Mono · 12 / 600 · 0.05em · uppercase Mono · 11 / 600 · 0.05em · uppercase Mono · 11 / 400 20px between major sections repeat(auto-fill, minmax(220px, 1fr)) · gap 14 8px between buttons · 6px subtle group border-color 150ms cubic-bezier(0.4,0,0.2,1) 1s linear infinite
); } /* ── Components ─────────────────────────────────────────────────── */ function ComponentsSection() { const [tab, setTab] = useDocsState('ivanti'); return (
{/* Buttons */}
}>Sync }>Atlas }>Export }>Reset }>Disabled
Green tinted-fill · the only primary on the page (Sync) Sky outlined · transparent · for Atlas, Prev/Next, etc. Sky tinted-fill · for in-toolbar actions (Export, Queue, Columns) Red tinted-fill · destructive only
{/* Pill tabs */}
setTab('ivanti')}>Ivanti Findings setTab('atlas')}>Atlas Coverage setTab('sla')}>SLA
sky border + sky-15% fill + sky text subtle white-10% border, slate-300 text
{/* Filter chips */}
Severity: Critical Action: Patch SLA: Overdue
Tinted to the dimension being filtered Clears the filter
{/* Status banners */}
Atlas: connection refused — retry in 30s Sync stale (last success 4 hours ago) 12 findings reassigned to platform-team
Header-level for system errors; inline above target for action results
{/* Severity / SLA / Workflow badges */}
Dot + glow + soft-text label · fixed semantic colors Pill · OVERDUE/AT_RISK/WITHIN_SLA Tagged badge · OPEN/FP/EXC/REMEDIATED/ARCHIVED
{/* KB card itself */}
KB card chrome + label divider Centered donut · 170 min-height · responsive auto-fill grid
); } /* ── Assemblies ─────────────────────────────────────────────────── */ function AssembliesSection() { return (
{/* Header assembly */}
Last sync: 2 minutes ago · 184 of 896 findings (3 filters active) } > }>Atlas }>Sync
Mono uppercase · green glow · 24px Sync timestamp → record count → active filter count (amber) Right-aligned · neutral secondaries → primary on far right
{/* Donut grid assembly */}
{}}>Ivanti Findings {}}>Atlas Coverage
{[ { label: 'Open vs Closed', segs: [{ label: 'Open', value: 184, color: DC.sky }, { label: 'Closed', value: 712, color: DC.green }], cl: 'TOTAL', cv: '896' }, { label: 'Action Coverage', segs: [{ label: 'Patch', value: 96, color: DC.sky }, { label: 'Mitigate', value: 42, color: DC.green }, { label: 'Accept', value: 28, color: '#A78BFA' }], cl: 'ASSIGNED', cv: '184' }, { label: 'FP Status', segs: [{ label: 'Pending', value: 14, color: DC.amber }, { label: 'Approved', value: 31, color: DC.green }, { label: 'Rejected', value: 6, color: DC.red }], cl: 'FINDINGS', cv: '51' }, ].map((d) => (
))}
Pill row sits above grid · scopes which donuts render Auto-fill, 220px min · each donut is its own KB card
{/* Findings panel chrome */}
Host Findings
}>Export }>Queue }>Columns
Severity: Critical, High Action: Patch SLA: Overdue
Mono uppercase label + count · subtle action buttons right Tinted chips, click-to-clear Sync/Atlas no longer live here — they're in the page header
); } /* ── Reference page ─────────────────────────────────────────────── */ function ReferenceSection() { return (
); } /* ── Top-level docs page ─────────────────────────────────────────── */ function KitDocs() { const [active, setActive] = useDocsState('overview'); const handle = (id) => { setActive(id); const el = document.getElementById(id); if (el) { const top = el.getBoundingClientRect().top + window.scrollY - 80; window.scrollTo({ top, behavior: 'smooth' }); } }; // observe scroll position to update active tab React.useEffect(() => { const sections = ['overview', 'tokens', 'components', 'assemblies', 'reference'] .map((id) => document.getElementById(id)) .filter(Boolean); const onScroll = () => { const y = window.scrollY + 160; let cur = sections[0]?.id; for (const s of sections) { if (s.offsetTop <= y) cur = s.id; } setActive(cur); }; window.addEventListener('scroll', onScroll, { passive: true }); onScroll(); return () => window.removeEventListener('scroll', onScroll); }, []); return (
); } window.RPT_DOCS = { KitDocs };