""" AnalysisView — renders the analysis result panel (scores + transcript). """ from models.session_models import AnalysisResult def _score_css(v: int | None) -> str: if v is None: return "sc-na" return "sc-good" if v >= 80 else ("sc-ok" if v >= 55 else "sc-poor") def _card(label: str, display: str, css: str) -> str: return ( f'
' f'
{label}
' f'
{display}
' f'
' ) def render_analysis_html(result: AnalysisResult | None = None) -> str: if result is None: result = AnalysisResult() pron_disp = f"{result.pronunciation}/100" if result.pronunciation is not None else "–" flu_disp = f"{result.fluency}/100" if result.fluency is not None else "–" if result.error: tx_html = f'
{result.error}
' elif result.transcript: tx_html = f'
{result.transcript}
' else: tx_html = '
Transcript will appear here after analysis…
' return f"""

📊 Analysis Results

{_card("Pronunciation", pron_disp, _score_css(result.pronunciation))} {_card("Fluency", flu_disp, _score_css(result.fluency))}
Transcript
{tx_html}
"""