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 = ( - - - + {!isRecording && ( + +
+ + +
+
+ )} ); }