import { useEffect } from "react"; import { cx } from "@/cva.config"; import { useHidStore, useMouseStore, useRTCStore, useSettingsStore, useVideoStore, } from "@/hooks/stores"; import { keys, modifiers } from "@/keyboardMappings"; export default function InfoBar() { const activeKeys = useHidStore(state => state.activeKeys); const activeModifiers = useHidStore(state => state.activeModifiers); const mouseX = useMouseStore(state => state.mouseX); const mouseY = useMouseStore(state => state.mouseY); const mouseMove = useMouseStore(state => state.mouseMove); const videoClientSize = useVideoStore( state => `${Math.round(state.clientWidth)}x${Math.round(state.clientHeight)}`, ); const videoSize = useVideoStore( state => `${Math.round(state.width)}x${Math.round(state.height)}`, ); const rpcDataChannel = useRTCStore(state => state.rpcDataChannel); const settings = useSettingsStore(); const showPressedKeys = useSettingsStore(state => state.showPressedKeys); useEffect(() => { if (!rpcDataChannel) return; rpcDataChannel.onclose = () => console.log("rpcDataChannel has closed"); rpcDataChannel.onerror = e => console.log(`Error on DataChannel '${rpcDataChannel.label}': ${e}`); }, [rpcDataChannel]); const keyboardLedState = useHidStore(state => state.keyboardLedState); const keyboardLedStateSyncAvailable = useHidStore(state => state.keyboardLedStateSyncAvailable); const keyboardLedSync = useSettingsStore(state => state.keyboardLedSync); const isShiftActive = useHidStore(state => state.isShiftActive); const isCtrlActive = useHidStore(state => state.isCtrlActive); const isAltActive = useHidStore(state => state.isAltActive); const isMetaActive = useHidStore(state => state.isMetaActive); const isAltGrActive = useHidStore(state => state.isAltGrActive); const isTurnServerInUse = useRTCStore(state => state.isTurnServerInUse); const usbState = useHidStore(state => state.usbState); const hdmiState = useVideoStore(state => state.hdmiState); return (
{settings.debugMode ? (
Resolution:{" "} {videoSize}
) : null} {settings.debugMode ? (
Video Size: {videoClientSize}
) : null} {(settings.debugMode && settings.mouseMode == "absolute") ? (
Pointer: {mouseX},{mouseY}
) : null} {(settings.debugMode && settings.mouseMode == "relative") ? (
Last Move: {mouseMove ? `${mouseMove.x},${mouseMove.y} ${mouseMove.buttons ? `(${mouseMove.buttons})` : ""}` : "N/A"}
) : null} {settings.debugMode && (
USB State: {usbState}
)} {settings.debugMode && (
HDMI State: {hdmiState}
)} {showPressedKeys && (
Keys:

{[ ...activeKeys.map( x => Object.entries(keys).filter(y => y[1] === x)[0][0], ), activeModifiers.map( x => Object.entries(modifiers).filter(y => y[1] === x)[0][0], ), ].join(", ")}

)}
{isTurnServerInUse && (
Relayed by Cloudflare
)} {keyboardLedStateSyncAvailable ? (
{keyboardLedSync === "browser" ? "Browser" : "Host"}
) : null}
Shift
Ctrl
Alt
Meta
AltGr
Caps Lock
Num Lock
Scroll Lock
{keyboardLedState?.compose ? (
Compose
) : null} {keyboardLedState?.kana ? (
Kana
) : null}
); }