From 5d10afb7a67749f6dce383bb408b9b7bdb1158a2 Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Sun, 24 May 2026 00:30:12 -0400 Subject: [PATCH] ui: voice recorder pulse + TDS styling, wire mic denied error to input bar - VoiceMessageRecorder recording dot now pulses (reuses pttLivePulse keyframe) - Added data-voice-recorder / data-voice-rec-dot / data-voice-waveform attributes for TDS targeting: green pulsing dot, cyan waveform bars, subtle border in TDS dark - Wire VoiceMessageRecorder onError to the same input-bar error display used by location errors (mic denied, media error surfaces to user instead of silent fail) Co-Authored-By: Claude Sonnet 4.6 --- src/app/components/VoiceMessageRecorder.tsx | 4 +++ src/app/features/room/RoomInput.tsx | 8 +++++- src/lotus-terminal.css.ts | 29 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/app/components/VoiceMessageRecorder.tsx b/src/app/components/VoiceMessageRecorder.tsx index 18253304e..c8de02d1e 100644 --- a/src/app/components/VoiceMessageRecorder.tsx +++ b/src/app/components/VoiceMessageRecorder.tsx @@ -185,6 +185,7 @@ export function VoiceMessageRecorder({ onSend, onError }: VoiceRecorderProps) { if (state === 'recording') { return ( {formatDuration(durationMs)} ( )} - + { + setLocationError(err); + setTimeout(() => setLocationError(null), 4000); + }} + /> div`, { + background: '#00D4FF !important' as any, +}); +// light TDS +globalStyle( + `html[data-theme="light"] body.${lotusTerminalBodyClass} [data-voice-recorder="recording"]`, + { + background: 'rgba(0,98,184,0.05) !important' as any, + border: '1px solid rgba(0,98,184,0.22) !important' as any, + }, +); +globalStyle(`html[data-theme="light"] body.${lotusTerminalBodyClass} [data-voice-rec-dot]`, { + background: '#006d35 !important' as any, + boxShadow: 'none', +}); +globalStyle(`html[data-theme="light"] body.${lotusTerminalBodyClass} [data-voice-waveform] > div`, { + background: '#0062b8 !important' as any, +}); + // ── Caption input TDS focus ring ────────────────────────────────────────────── globalStyle(`body.${lotusTerminalBodyClass} [data-caption-input]:focus-visible`, { borderColor: 'rgba(255,107,0,0.65) !important' as any,