diff --git a/public/devices/README.md b/public/devices/README.md index 2f4035d..248f09e 100644 --- a/public/devices/README.md +++ b/public/devices/README.md @@ -38,6 +38,11 @@ transparent canvases; the original G502 backdrop was extracted from its source render. Confirm redistribution terms before including them in a public release package. +`logitech-g703.png` was supplied from Logitech G's official G703 HERO product +gallery (`resource.logitechg.com` DAM `g703-mouse-top-angle-gallery-1.png`) +and normalized to the same 700×700 transparent canvas as the G502 set. Confirm +redistribution terms before including it in a public release package. + `logitech-mx-master-4.png` is a line-art trace made for this repository, not a vendor render. Only geometry derives from the source: the outer silhouette and the shell seams — button split, scroll-wheel housing, thumb rest, thumb wheel, diff --git a/public/devices/logitech-g703.png b/public/devices/logitech-g703.png new file mode 100644 index 0000000..b2bb0b8 Binary files /dev/null and b/public/devices/logitech-g703.png differ diff --git a/src/app/cards/LightingCard.tsx b/src/app/cards/LightingCard.tsx index 5ef334f..5363af7 100644 --- a/src/app/cards/LightingCard.tsx +++ b/src/app/cards/LightingCard.tsx @@ -18,7 +18,10 @@ export function LightingCard({ zones?: MouseLighting[]; zoneIndex?: number; }): ReactNode { - const [selectedZone, setSelectedZone] = useState(zones && zones.length > 1 ? 1 : zoneIndex); + const hasLightstrip = Boolean(zones?.some((zone) => zone.hardwareZoneId != null)); + const [selectedZone, setSelectedZone] = useState( + hasLightstrip && zones && zones.length > 1 ? 1 : zoneIndex, + ); const activeZoneIndex = zones ? Math.min(selectedZone, zones.length - 1) : zoneIndex; const lighting = zones?.[activeZoneIndex] ?? suppliedLighting ?? snapshot.status?.lighting; if (!lighting) return null; @@ -57,7 +60,11 @@ export function LightingCard({ RGB parts {lighting.group ? `${lighting.group} · ${lighting.zone}` : lighting.zone} -
+
{zones.map((zone, index) => (