4d2886d162
Audit follow-up — the toggle behaviour now lives in a single `ToggleableTimeAgoText` core in `ui/note/elements/TimeAgo.kt`. `TimeAgo`, `NormalTimeAgo`, `ChatTimeAgo`, and `ChatroomHeaderCompose.TimeAgo` are thin wrappers that pick a `TimeAgoStyle` (Dotted / Short) and pass colour/font params; no per-site duplication of state + clickable + derivedStateOf. Performance fixes that matter for a feed with hundreds of timestamps: - `rememberSaveable` → `remember`. Persisting a transient peek-toggle to the SavedStateRegistry for every visible+scrolled-past note was pure memory bloat. Recycling now resets to relative, which is the expected behaviour for a transient inspect action. - The relative-mode `derivedStateOf` lambda reads `nowState.value` only when displaying a relative time. An item the user has frozen to its absolute date no longer re-evaluates every 30-second tick. - Core composable takes only stable primitive params (Long, Color, TextUnit, TextOverflow, enum) so Compose can skip it entirely when inputs don't change. - Desktop wrapper dropped the redundant `derivedStateOf`: its formatter reads no State, so derivedStateOf had nothing to observe. https://claude.ai/code/session_01AuPon9VQeRfKV1BTVQuKGC