diff --git a/apps/x/apps/renderer/src/App.tsx b/apps/x/apps/renderer/src/App.tsx index f9019ede..03e8e998 100644 --- a/apps/x/apps/renderer/src/App.tsx +++ b/apps/x/apps/renderer/src/App.tsx @@ -6193,6 +6193,7 @@ function App() { isRecording={isActive && isRecording} recordingText={isActive ? voice.interimText : undefined} recordingState={isActive ? (voice.state === 'connecting' ? 'connecting' : 'listening') : undefined} + audioLevelsRef={voice.audioLevelsRef} onStartRecording={isActive ? handleStartRecording : undefined} onSubmitRecording={isActive ? handleSubmitRecording : undefined} onCancelRecording={isActive ? handleCancelRecording : undefined} @@ -6301,6 +6302,7 @@ function App() { isRecording={isRecording} recordingText={voice.interimText} recordingState={voice.state === 'connecting' ? 'connecting' : 'listening'} + audioLevelsRef={voice.audioLevelsRef} onStartRecording={handleStartRecording} onSubmitRecording={handleSubmitRecording} onCancelRecording={handleCancelRecording} diff --git a/apps/x/apps/renderer/src/components/chat-input-with-mentions.tsx b/apps/x/apps/renderer/src/components/chat-input-with-mentions.tsx index 00bcaa8e..412b4bbf 100644 --- a/apps/x/apps/renderer/src/components/chat-input-with-mentions.tsx +++ b/apps/x/apps/renderer/src/components/chat-input-with-mentions.tsx @@ -224,6 +224,8 @@ interface ChatInputInnerProps { isRecording?: boolean recordingText?: string recordingState?: 'connecting' | 'listening' + /** Live mic amplitude history (RMS per frame) driving the recording waveform. */ + audioLevelsRef?: React.MutableRefObject onStartRecording?: () => void onSubmitRecording?: () => void onCancelRecording?: () => void @@ -260,7 +262,7 @@ function ChatInputInner({ onDraftChange, isRecording, recordingText, - recordingState, + audioLevelsRef, onStartRecording, onSubmitRecording, onCancelRecording, @@ -795,11 +797,10 @@ function ChatInputInner({ > -
- - - {recordingState === 'connecting' ? 'Connecting...' : recordingText || 'Listening...'} - + {/* Audio-reactive waveform only — the transcribed words are intentionally + not shown while recording; they're still captured and submitted. */} +
+