diff --git a/apps/desktop/src/session/components/outer-header/index.tsx b/apps/desktop/src/session/components/outer-header/index.tsx
index 2aa7e62884..a9bbeb892e 100644
--- a/apps/desktop/src/session/components/outer-header/index.tsx
+++ b/apps/desktop/src/session/components/outer-header/index.tsx
@@ -20,8 +20,8 @@ export function OuterHeader({
-
+
diff --git a/apps/desktop/src/session/components/outer-header/listen.tsx b/apps/desktop/src/session/components/outer-header/listen.tsx
index 4a733d5e2b..6f48869ff8 100644
--- a/apps/desktop/src/session/components/outer-header/listen.tsx
+++ b/apps/desktop/src/session/components/outer-header/listen.tsx
@@ -1,8 +1,5 @@
-import { useHover } from "@uidotdev/usehooks";
-import { MicOff } from "lucide-react";
import { useCallback } from "react";
-import { DancingSticks } from "@hypr/ui/components/ui/dancing-sticks";
import {
Tooltip,
TooltipContent,
@@ -16,18 +13,13 @@ import {
useListenButtonState,
} from "~/session/components/shared";
import { useTabs } from "~/store/zustand/tabs";
-import { useListener } from "~/stt/contexts";
import { useStartListening } from "~/stt/useStartListening";
export function ListenButton({ sessionId }: { sessionId: string }) {
const { shouldRender } = useListenButtonState(sessionId);
const hasTranscript = useHasTranscript(sessionId);
- if (!shouldRender) {
- return ;
- }
-
- if (hasTranscript) {
+ if (shouldRender && hasTranscript) {
return ;
}
@@ -82,74 +74,3 @@ function StartButton({ sessionId }: { sessionId: string }) {
);
}
-
-function InMeetingIndicator({ sessionId }: { sessionId: string }) {
- const [ref, hovered] = useHover();
-
- const { mode, stop, amplitude, muted } = useListener((state) => ({
- mode: state.getSessionMode(sessionId),
- stop: state.stop,
- amplitude: state.live.amplitude,
- muted: state.live.muted,
- }));
-
- const active = mode === "active" || mode === "finalizing";
- const finalizing = mode === "finalizing";
-
- if (!active) {
- return null;
- }
-
- return (
-
- );
-}
diff --git a/apps/desktop/src/shared/main/header-listen-button.tsx b/apps/desktop/src/shared/main/header-listen-button.tsx
index 0d8c2b2af1..726a01ba2b 100644
--- a/apps/desktop/src/shared/main/header-listen-button.tsx
+++ b/apps/desktop/src/shared/main/header-listen-button.tsx
@@ -1,4 +1,4 @@
-import { ChevronDown } from "lucide-react";
+import { ChevronDown, MicOff } from "lucide-react";
import {
type MouseEvent,
useCallback,
@@ -8,6 +8,7 @@ import {
} from "react";
import { Button } from "@hypr/ui/components/ui/button";
+import { DancingSticks } from "@hypr/ui/components/ui/dancing-sticks";
import {
Popover,
PopoverAnchor,
@@ -33,6 +34,8 @@ import { useTabs } from "~/store/zustand/tabs";
import { useListener } from "~/stt/contexts";
import { useSTTConnection } from "~/stt/useSTTConnection";
+const LISTEN_BUTTON_WIDTH = "w-[160px]";
+
export function HeaderListenButton() {
const visible = useHeaderListenVisible();
@@ -53,7 +56,8 @@ function useHeaderListenVisible() {
const isRecording = liveStatus === "active" || liveStatus === "finalizing";
- if (isRecording || loading) return false;
+ if (isRecording) return true;
+ if (loading) return false;
if (currentTab?.type === "empty") return true;
if (currentTab?.type === "sessions" && hasTranscript) return true;
@@ -96,7 +100,16 @@ function HeaderListenButtonInner() {
const handleClick = useNewNoteAndListen();
const handleUpload = useNewNoteAndUpload();
const openNew = useTabs((state) => state.openNew);
+ const { status, stop, amplitude, muted } = useListener((state) => ({
+ status: state.live.status,
+ stop: state.stop,
+ amplitude: state.live.amplitude,
+ muted: state.live.muted,
+ }));
const [open, setOpen] = useState(false);
+ const isActive = status === "active";
+ const isFinalizing = status === "finalizing";
+ const isRecording = isActive || isFinalizing;
useEffect(() => {
const node = containerRef.current;
@@ -149,32 +162,88 @@ function HeaderListenButtonInner() {
});
}, [handleUpload]);
+ const handleButtonClick = isActive ? stop : handleClick;
+
const button = (
);
const chevron = (