From ae6d2b4ebfa8458ab90f9f201eec5adf551b3bba Mon Sep 17 00:00:00 2001 From: Milos Petrovic Date: Tue, 4 Aug 2026 18:51:27 +0200 Subject: [PATCH 1/2] Prevent disabled device menus from opening --- templates/clips/desktop/src/components/MediaDeviceRow.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/templates/clips/desktop/src/components/MediaDeviceRow.tsx b/templates/clips/desktop/src/components/MediaDeviceRow.tsx index acfc10bded..608cd48c7a 100644 --- a/templates/clips/desktop/src/components/MediaDeviceRow.tsx +++ b/templates/clips/desktop/src/components/MediaDeviceRow.tsx @@ -104,7 +104,6 @@ export function MediaDeviceRow({ const { open, setOpen, rowRef } = useRowMenu(); const disabled = !on; - const canOpenMenu = !disabled || (kind === "mic" && !!onSystemAudioToggle); const defaultLabel = kind === "camera" ? "Default camera" : "Default mic"; const accessLabel = kind === "camera" ? "Allow camera access" : "Allow microphone access"; @@ -119,10 +118,8 @@ export function MediaDeviceRow({ - { - if (!v) setOpen(false); - onToggle(v); - }} - label={kind === "camera" ? "Camera" : "Microphone"} - /> - {open ? ( -
+ + {canOpenMenu ? ( - {devices.length === 0 ? ( - - ) : ( + ) : ( + + + + )} + { + if (!v) setOpen(false); + onToggle(v); + }} + label={kind === "camera" ? "Camera" : "Microphone"} + /> +
+ {open && canOpenMenu ? ( +
+ {on ? ( <> - {devices.map((d) => { - const isSelected = !!selectedId && d.deviceId === selectedId; - return ( - - ); - })} + {devices.length === 0 ? ( + + ) : ( + <> + {devices.map((d) => { + const isSelected = + !!selectedId && d.deviceId === selectedId; + return ( + + ); + })} + + + )} - )} + ) : null} {kind === "mic" && onSystemAudioToggle ? (
Record System audio diff --git a/templates/clips/desktop/src/styles.css b/templates/clips/desktop/src/styles.css index cbc5481a23..74d0bb9fd9 100644 --- a/templates/clips/desktop/src/styles.css +++ b/templates/clips/desktop/src/styles.css @@ -605,6 +605,10 @@ body[data-clips-route="recording-pill"] #root { } /* Popover menu rendered below a device row. */ +.media-device-row { + position: relative; +} + .row-menu { position: absolute; top: calc(100% + 4px); @@ -645,7 +649,21 @@ body[data-clips-route="recording-pill"] #root { background: var(--surface-hover); } -/* System-audio toggle sits below the device list, separated by a divider. */ +.row-menu-trigger { + display: inline-flex; + align-items: center; + padding: 0; + border: none; + background: transparent; + color: var(--fg-muted); + cursor: pointer; +} + +.row-menu-trigger:focus-visible { + box-shadow: 0 0 0 2px var(--brand-ring); + border-radius: 4px; +} + .row-menu-toggle { display: flex; align-items: center;