export interface TableLink { label: string; url: string; title?: string; } const MODALITY_ICONS: Record = { text: ``, image: ``, audio: ``, video: ``, pdf: ``, }; export function escapeHtml(value: string | number) { return String(value).replace(/[&<>'"]/g, (char) => { switch (char) { case "&": return "&"; case "<": return "<"; case ">": return ">"; case "'": return "'"; case '"': return """; default: return char; } }); } export function booleanText(value?: boolean) { if (value === undefined) return "-"; return value ? "Yes" : "No"; } export function formatCost(cost?: number) { return cost === undefined ? "-" : `$${cost.toFixed(2)}`; } export function formatNumber(value?: number) { return value === undefined ? "-" : value.toLocaleString(); } export function knowledgeText(value?: string) { return value ? value.substring(0, 7) : "-"; } export function weightsText(value?: boolean) { if (value === undefined) return "-"; return value ? "Open" : "Closed"; } export function renderModalityIcon(modality: string) { const label = modality === "pdf" ? "PDF" : modality[0]!.toUpperCase() + modality.slice(1); const icon = MODALITY_ICONS[modality]; if (!icon) return ""; return `${icon}`; } export function renderModalities(modalities?: string[]) { if (!modalities || modalities.length === 0) return "-"; return `
${modalities .map(renderModalityIcon) .join("")}
`; } export function costSummary(input?: number, output?: number) { if (input === undefined && output === undefined) return "-"; return `${formatCost(input)} / ${formatCost(output)}`; } export function capabilitySummary(capabilities: Array<[string, boolean | undefined]>) { const active = capabilities .filter(([, value]) => value === true) .map(([label]) => label); return active.length > 0 ? active.join(", ") : "-"; } export function sortDate(value?: string) { return value ?? ""; } export function sortNumber(value?: number) { return value === undefined ? "" : String(value); }