Use full-size layout and overflow clipping instead of 100vw/100vh on the HUD shell so the fixed 600×160 overlay does not gain a horizontal scrollbar when recording widens the toolbar.
Fixes#305
- LaunchWindow: render sr-only <select> when webcamExpanded but
cameraDevices.length === 0 (loading/error/empty), so keyboard users
always have a focusable element even in no-camera states
- useCameraDevices.test: add error-branch test asserting error message,
empty devices array and isLoading=false when enumerateDevices rejects
- useCameraDevices: remove getUserMedia label probe to avoid conflict with
useScreenRecorder acquiring the real stream; use enumerateDevices only and
fall back to 'Camera <id>' for unlabeled devices; gate effect on enabled flag
- LaunchWindow: fix selectedCameraLabel to reflect loading/error/empty states
in the collapsed view (was always showing 'Default Camera')
- LaunchWindow: unify webcam <select> to a single always-mounted element
(sr-only when unavailable); mirrors the mic selector pattern
- useCameraDevices.test.ts: re-seed mockGetUserMedia in beforeEach after
vi.resetAllMocks(); update permission test to assert fallback label behavior
- LaunchWindow: expose isLoading/error from useCameraDevices; show
'Searching...' only while enumeration is in flight, 'Camera unavailable'
on error, 'No camera found' when list is empty (fixes perpetual loading state)
- LaunchWindow: keep <select> always mounted (sr-only when collapsed) and
expand panel on focus as well as hover; fixes keyboard inaccessibility for
both mic and webcam selectors
- i18n: add webcam.noneFound and webcam.unavailable to en/es/zh-CN locales
- useCameraDevices: remove selectedDeviceId from useEffect deps (use ref instead)
- useCameraDevices: fall back to first available device when selected device is unplugged
- i18n: add missing keys (audio.defaultMicrophone, webcam.defaultCamera, webcam.searching) to en/es/zh-CN
- LaunchWindow: replace hardcoded strings with t() i18n calls
- tests: add afterEach(vi.resetAllMocks()), improve permission test assertions, add stale device fallback test
- Add useCameraDevices hook to enumerate video input devices
- Update useScreenRecorder to support webcamDeviceId selection
- Add device selector UI above HUD bar (mic + webcam, hover-to-expand)
- All selectors and HUD bar are absolute-positioned to prevent layout shifts
- Increase HUD window to 600x200px to accommodate device panels
- Add unit tests for useCameraDevices hook