Newer
Older
navi-1 / clients / terminal / tui / duration.py
"""Compact human-readable duration formatting for the TUI.

Shared by the live elapsed-timer widget (next to the activity indicator) and
the turn-metadata renderer (the dim ``⏱ 2m 16s`` line under an answer), so both
show the same compact form: ``16s``, ``2m 16s``, ``1h 2m``.
"""

from __future__ import annotations


def format_duration(seconds: float | None) -> str:
    """Format a duration as ``Ns`` / ``Mm Ss`` / ``Hh Mm``.

    ``None`` (the backend did not report a value) renders as ``—``.
    """
    if seconds is None:
        return "—"
    total = int(round(seconds))
    if total < 60:
        return f"{total}s"
    if total < 3600:
        return f"{total // 60}m {total % 60}s"
    return f"{total // 3600}h {(total % 3600) // 60}m"