import { useEffect, useState } from "react"; import { Button, Popover, PopoverContent, PopoverTrigger, Tooltip, TooltipContent, TooltipTrigger, } from "@tensamin/ui"; import { MonitorDot, ScreenShare } from "lucide-react"; import { toast } from "@tensamin/shared/log"; import { isTauri } from "@tauri-apps/api/core"; import { setScreenShareEnabled, useCall } from "../../store"; import ScreenShareDialog from "../screenshareDialog"; export default function ScreenshareButton({ className, iconSize, tooltip, defaultPortal, }: { className?: string; iconSize?: number; tooltip?: string; defaultPortal?: boolean; }) { const isScreensharing = useCall((state) => state.screenShareEnabled); const screenRef = useCall((state) => state.screenRef); const [portalContainer, setPortalContainer] = useState(); const [dialogOpen, setDialogOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false); useEffect(() => { if (defaultPortal) return; setPortalContainer(screenRef?.current ?? undefined); }, [screenRef, defaultPortal]); async function startWebShare() { try { await setScreenShareEnabled(true, { audio: true, systemAudio: "include", surfaceSwitching: "include", video: true, }); } catch (error) { console.error("Failed to start web screen share", error); toast( "error", error instanceof Error ? error.message : "Failed to start screen sharing.", ); } } async function stopShare() { try { await setScreenShareEnabled(false); } catch (error) { console.error("Failed to stop screen share", error); toast("error", "Failed to stop screen sharing."); } } return ( <> {isScreensharing ? ( ) : ( )} } /> ) : ( ) } /> {tooltip && ( {tooltip} )} {isTauri() && ( )} ); }