From dfe2313ec5b93009fd5cff95aaf68237a719227c Mon Sep 17 00:00:00 2001 From: John Mizerek Date: Tue, 10 Mar 2026 17:29:42 -0700 Subject: [PATCH] Add eyedropper color picker to brand color modal Uses the native EyeDropper API (Chrome/Edge) to pick colors from anywhere on screen. Button only shows in supported browsers. Co-Authored-By: Claude Opus 4.6 --- portal/menu-builder.html | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/portal/menu-builder.html b/portal/menu-builder.html index b053815..923ed2f 100644 --- a/portal/menu-builder.html +++ b/portal/menu-builder.html @@ -3647,6 +3647,7 @@ + ${'EyeDropper' in window ? '' : ''}
@@ -3671,6 +3672,7 @@ + ${'EyeDropper' in window ? '' : ''}
@@ -3733,6 +3735,28 @@ lightPreview.style.background = val; } }); + + // Eyedropper buttons (Chrome/Edge only) + if ('EyeDropper' in window) { + const pickColor = async (colorInput, hexInput, onPick) => { + try { + const dropper = new EyeDropper(); + const result = await dropper.open(); + const color = result.sRGBHex.toUpperCase(); + colorInput.value = color; + hexInput.value = color; + if (onPick) onPick(color); + } catch (e) { /* user cancelled */ } + }; + + document.getElementById('eyedropperDark')?.addEventListener('click', () => { + pickColor(colorInput, hexInput, updatePreview); + }); + + document.getElementById('eyedropperLight')?.addEventListener('click', () => { + pickColor(lightInput, lightHex, (c) => { lightPreview.style.background = c; }); + }); + } }, // Save brand color