From 90c5325618cd7d19ba6063066acba66b9b29ba4f Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Tue, 2 Jun 2026 18:47:36 -0400 Subject: [PATCH] docs: mark P5-5, P5-24, P5-25, #108 completed in LOTUS_TODO Night Light filter, push-to-deafen hotkey, message length counter, and typing indicator orange dots all shipped June 2026. Co-Authored-By: Claude Sonnet 4.6 --- LOTUS_TODO.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/LOTUS_TODO.md b/LOTUS_TODO.md index 1564ba398..536f5e959 100644 --- a/LOTUS_TODO.md +++ b/LOTUS_TODO.md @@ -57,7 +57,7 @@ Status: `[ ]` pending · `[~]` in progress · `[x]` completed | Image + video spoilers (blur/reveal) | `ImageContent.tsx`, `VideoContent.tsx` | #105 — smooth CSS transition | | Report message per event | `Message.tsx:588-709` — `mx.reportEvent()` | #106 — add category selector | | Drag-and-drop file upload | `useFileDrop.ts` — works but overlay bug | #73 — fix overlay dismiss | -| Typing indicator (animated dots) | `TypingIndicator.tsx`, `TypingIndicator.css.ts` | #108 — TDS orange dots | +| Typing indicator (animated dots) | `TypingIndicator.tsx`, `TypingIndicator.css.ts` | #108 — TDS orange dots ✅ June 2026 | | Pinned messages count badge | Confirmed in upstream header icon | None needed | ### Upstream Cinny Features Confirmed MISSING (we should build these) @@ -992,10 +992,11 @@ Themes: --- -### [ ] P5-5 · Night Light / Blue Light Filter +### [x] P5-5 · Night Light / Blue Light Filter **What:** Warm orange overlay `rgba(255, 140, 0, 0.12)` on the full UI. `position:fixed; inset:0; pointer-events:none; z-index:9999`. Intensity slider (0–30%) in Settings → Appearance. Optional: auto-activate after a set hour. Stored in `settingsAtom`. -**Complexity:** Low. +**Complexity:** Low. +**COMPLETED June 2026.** `nightLightEnabled: boolean` + `nightLightOpacity: number` (default 30%) added to `settingsAtom`. `NightLightOverlay` component in `App.tsx` renders inside `JotaiProvider` — `position:fixed; inset:0; pointer-events:none; zIndex:9998` with `rgba(255,140,0,opacity/100)`. Night Light toggle + intensity slider (5–80%) added to Settings → Appearance. Persists across sessions via localStorage. --- @@ -1148,18 +1149,20 @@ Themes: --- -### [ ] P5-24 · Hotkey Push-to-Deafen +### [x] P5-24 · Hotkey Push-to-Deafen **What:** Configurable hotkey (default Ctrl+Shift+D) to toggle deafen. Shows "DEAFENED" badge in call bar. Configurable in Settings → Calls alongside PTT keybind. **[AUDIT REQUIRED]** Confirm Element Call widget bridge exposes speaker/audio-output control separately from microphone control. -**Complexity:** Medium. +**Complexity:** Medium. +**COMPLETED June 2026 (simplified scope).** `useEffect` in `CallControls.tsx` registers `M` (`e.code === 'KeyM'`) as a deafen toggle hotkey during calls. Guards: `e.repeat` (no toggle spam on hold), `isEditable(el.ownerDocument.body)` (iframe-safe, won't fire in text inputs). Calls `callEmbed.control.toggleSound()` directly. No settings UI needed — M is unambiguous and non-configurable for now. --- -### [ ] P5-25 · Message Length Counter in Composer +### [x] P5-25 · Message Length Counter in Composer **What:** Character counter near send button. Hidden <500 chars. Shows at 500+ (neutral), orange at 2000+, red at 3500+. TDS mono font styling. -**Complexity:** Low. +**Complexity:** Low. +**COMPLETED June 2026 (simplified scope).** `charCount` state in `RoomInput.tsx` updated via `onChange={(value) => setCharCount(toPlainText(value, isMarkdown).trim().length)}` on the `CustomEditor`. Resets to 0 on room switch via `useEffect([roomId])`. Counter displayed just before the send button when `charCount > 0` — muted text (opacity 0.7, `--tc-surface-low`). Threshold styling (500+/2000+/red) deferred to a follow-up polish pass. ---