"""UI components. Defect list rendering and shared visual helpers."""
from __future__ import annotations
import base64
import functools
import html
import json
import time
from pathlib import Path
import re
from typing import Iterable
from data.schemas import LABEL_DISPLAY_NAMES
from data.preprocessing import image_to_data_uri
@functools.lru_cache(maxsize=1)
def _logo_html() -> str:
path = Path(__file__).resolve().parents[1] / "assets" / "logo.jpg"
if not path.exists():
return 'H'
encoded = base64.b64encode(path.read_bytes()).decode("ascii")
return (
''
)
COMPARE_DEFAULT_SPLIT = 50
HEADER_HTML = f"""
Awaiting scan.
' REPORT_EMPTY_STATE = ( 'Results, evidence counts, and physical fixes will appear here after a GPU run.
' "No validated defects detected.
' pills: list[str] = [] for label, count in sorted(label_counts.items(), key=lambda kv: -kv[1]): display = LABEL_DISPLAY_NAMES.get(label, label.replace("_", " ").title()) pills.append( f'' f"{html.escape(display)} {int(count)}" ) return '" + " ".join(_render_inline(part) for part in paragraph if part) + "
" ) paragraph.clear() def flush_bullets() -> None: if bullet_items: items = "".join(f"No report text.
' def _render_inline(text: str) -> str: escaped = html.escape(text) escaped = re.sub(r"`([^`]+)`", r"\1", escaped)
escaped = re.sub(r"\*\*([^*]+)\*\*", r"\1", escaped)
escaped = re.sub(r"__([^_]+)__", r"\1", escaped)
escaped = re.sub(r"(?\1", escaped)
escaped = re.sub(r"(?\1", escaped)
return escaped
def metadata_html(result: dict) -> str:
"""Render a compact metadata strip for the current run."""
meta = result.get("film_metadata", {}) or {}
confidence = str(meta.get("metadata_confidence", "low") or "low")
rows = [
_stat_row("Film stock", str(meta.get("film_type", "Unknown"))),
_stat_row("Age", f"{meta.get('film_age_years', 0)} years"),
_stat_row("Storage", str(meta.get("storage", "unknown"))),
_stat_row("Scan DPI", str(meta.get("scan_resolution_dpi", "unknown"))),
_stat_row("Metadata confidence", confidence.title()),
]
return (
'Select a diagnosis to review details.
' counts = entry.get("label_counts", {}) or {} raw = entry.get("raw_json", {}) or {} meta = raw.get("film_metadata", {}) if raw else {} confidence = meta.get("metadata_confidence", entry.get("metadata_confidence", "low")) preview = raw.get("preview", {}) if raw else {} preview_html = "" overlay_uri = str(preview.get("overlay", "") or "") original_uri = str(preview.get("original", "") or "") if overlay_uri.startswith("data:image/") or original_uri.startswith("data:image/"): hero_uri = overlay_uri if overlay_uri.startswith("data:image/") else original_uri preview_html = ( '