diff --git a/LOTUS_FEATURES.md b/LOTUS_FEATURES.md index a1f011d92..4c2c94a9b 100644 --- a/LOTUS_FEATURES.md +++ b/LOTUS_FEATURES.md @@ -1019,10 +1019,12 @@ Fixed by replacing the single read with a `readStatus()` function called inside The browser tab title updates to reflect unread state: -- `(N) Lotus Chat` — N unread messages -- `· Lotus Chat` — unread activity without a specific count +- `(N) Lotus Chat` — N mentions / keyword highlights (the count is highlights, not total unread) +- `· Lotus Chat` — unread messages without a mention (activity, no specific count) - `Lotus Chat` — no unread items +The favicon mirrors this (highlight badge / unread dot / default). + ### Extended Profile Fields Supports MSC4133 custom profile fields via `PUT /_matrix/client/unstable/uk.tcpip.msc4133/{userId}/{field}`: @@ -1094,10 +1096,9 @@ OS-level notifications are unchanged and still fire when the window is not focus ### Collapsible Long Messages -Messages exceeding a configurable line threshold are truncated with a "Show more" toggle. +Messages exceeding a fixed height threshold are truncated with a "Show more" toggle. -- Default threshold: 20 lines -- Threshold is configurable in **Settings → Appearance** +- Threshold: a fixed `COLLAPSE_MAX_HEIGHT` of 320px (≈ 20 lines) — not currently user-configurable - Uses CSS `max-height` + `overflow: hidden` with a smooth transition - Transition is disabled when `prefers-reduced-motion: reduce` is active diff --git a/LOTUS_TODO.md b/LOTUS_TODO.md index a181dc4f9..a1b3d0c95 100644 --- a/LOTUS_TODO.md +++ b/LOTUS_TODO.md @@ -120,10 +120,10 @@ Per-slice bug hunt (5 agents: theming · calls · messaging · threads/presence/ **Threads / presence / UX** - [x] **[Med]** `PresenceBadge` renders DND (`unavailable` + `status_msg:'dnd'`) as a **yellow "Idle"** badge + label, while `PresenceRingAvatar` correctly shows **red** — inconsistent. Give the badge the same `status === 'dnd' → Critical` + "Do Not Disturb" branch. `Presence.tsx:17-59`. **FIXED** (`29ff1654`): badge now matches the ring + settings picker (Critical / "Do Not Disturb", `'dnd'` sentinel line suppressed). -- [ ] **[Med]** Collapsible-message threshold is hardcoded (`COLLAPSE_MAX_HEIGHT = 320`), but the docs claim it's "configurable in Settings → Appearance (default 20 lines)" — unimplemented. Add the setting + control, or fix the doc. `MsgTypeRenderers.tsx:38`. +- [x] **[Med]** Collapsible-message threshold is hardcoded (`COLLAPSE_MAX_HEIGHT = 320`), but the docs claim it's "configurable in Settings → Appearance (default 20 lines)" — unimplemented. Add the setting + control, or fix the doc. `MsgTypeRenderers.tsx:38`. **FIXED** (doc): LOTUS_FEATURES now describes the fixed 320px (≈20-line) threshold; the full 320px is sensible and a per-user setting wasn't worth the surface — reconciled the doc rather than build a marginal setting. - [x] **[Med/Low]** In-app toast container has no visible cap / scroll — a burst of messages across rooms while focused stacks toasts unbounded and can cover the viewport. Cap visible N or `overflow-y:auto` + max-height. `LotusToastContainer.tsx:223-247`. **FIXED** (`1963222d`): queue capped at 5 in the atom writer (drops oldest non-sticky, never the newest or a sticky action toast) + container maxHeight/overflow + scroll-to-newest; +4 tests. (3 review passes — the 2nd caught a newest-dropped edge when the cap is full of stickies.) - [x] **[Low]** "Unread First" room sort leaves the (larger) read portion unordered — no activity fallback for the equal-unread case. `Home.tsx:213-222`. **FIXED** (`1963222d`): `factoryRoomIdByUnread` breaks ties by recent activity; relocated to `utils/sort.ts` (pure) + unit-tested. -- [ ] **[Low]** Tab title "(N)" counts mentions, not unread messages (doc says unread) — reconcile doc vs. code. `ClientNonUIFeatures.tsx:120-123`. +- [x] **[Low]** Tab title "(N)" counts mentions, not unread messages (doc says unread) — reconcile doc vs. code. `ClientNonUIFeatures.tsx:120-123`. **FIXED** (doc): the mention-count + unread-dot behavior is intentional (mirrors the favicon); LOTUS_FEATURES now describes it accurately (N = highlights, `·` = other unread). **Rooms / moderation / notifications / infra / desktop**