/** * Pure server-side renderers for the v9 dashboard panels. Each function takes a typed * data slice (from {@link AihDataV9}) and returns the inner HTML for that section's * container (`.grid`, `.anom-strip`, or `.hero-narrative`), reproducing the reference * design's markup/classes verbatim. No IO, no clock — same input, same bytes. * * The renderers are the single rendering path for BOTH live and demo: the caller * ({@link assembleViewV9}) chooses real vs demo data per (sub-)card and passes a * `preview` flag where a capability is not wired yet, which desaturates the card and * shows the `.preview` "PREVIEW · not wired yet" corner ribbon so it never reads as real. */ import type { V9Action, V9Activity, V9Adoption, V9Context, V9Drift, V9Hero, V9Mcp, V9Period, V9Quality, V9Ready, V9SkillGovernance, V9Skills, V9Support, V9Wins } from "./v9-types.js"; /** * HTML-escape a value for text AND (double/single-quoted) attributes — all five * significant chars incl. quotes, so an interpolated value (skill name/source, * branch, tool name) can't break out of a `title="…"` attribute. Quote-escaping in * text content is harmless (renders identically). */ export declare function escHtml(s: string): string; /** A compact area+line sparkline over a series, scaled to the 200×40 viewBox. */ export declare function sparkline(series: number[], stroke: string): string; /** The hero narrative (swapped into `.hero-narrative`); the radar is driven separately. */ export declare function renderHero(h: V9Hero): string; /** * The developer-readiness verdict (`.grid`): a banner + score/grade card, and the * blocker subset. It cross-links to the action board rather than duplicating the full * list — the single "can I start?" gate the maturity hero + action board don't state * as one verdict. */ export declare function renderReady(r: V9Ready): string; /** The ★ action board (swapped into `.anom-strip`); an honest empty state when clean. */ export declare function renderActions(actions: V9Action[]): string; /** The ✓ remediation ledger (`.grid`); a stub when heal has never run. */ export declare function renderWins(w: V9Wins | undefined): string; export declare function renderContext(c: V9Context): string; export declare function renderActivity(a: V9Activity, usagePreview: boolean): string; export declare function renderQuality(q: V9Quality, eccPreview: boolean): string; export declare function renderDrift(d: V9Drift, coherencePreview: boolean): string; export declare function renderMcp(m: V9Mcp): string; export declare function renderAdoption(a: V9Adoption): string; export declare function renderSupport(s: V9Support): string; export declare function renderPeriod(p: V9Period, outcomePreview: boolean, trendsLive: boolean): string; export declare function renderSkills(s: V9Skills, preview: boolean): string; /** * The skill governance panel (`.grid`): a status box summarizing approved vs * unattested skills, and a per-skill row list (unapproved + stale-pin flagged). Every * interpolated field is `escHtml`-escaped — skill names/sources come from on-disk * trees and a committed lockfile. Pure, deterministic (no clock/IO). */ export declare function renderSkillGovernance(model: V9SkillGovernance): string;