From 0494a2b179d121ec758dd6d0190d8a3704e22716 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 10 Sep 2026 04:56:32 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=9D=B8=ED=92=8B?= =?UTF-8?q?=EC=9D=84=20=EC=9D=BC=EA=B4=80=EB=90=9C=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1=20=EB=B0=8F=20UI=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jules/palette.md | 4 ++++ scanner/dashboard/index.html | 7 ++++++- tests/test_dashboard_core.py | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.jules/palette.md b/.jules/palette.md index ea004e2d..38e7702c 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -81,3 +81,7 @@ ## 2026-08-12 - Skip to Content Accessibility **Learning:** Screen reader and keyboard-only users experience significant friction when forced to navigate through repetitive header controls on every page load. **Action:** Keep a visible-on-focus skip link as the first interactive element, target a programmatically focusable main container, and give the focused link a high-contrast outline. + +## 2024-05-19 - Native File Input Proxy Pattern +**Learning:** Native `` elements are notoriously difficult to style consistently across browsers, leading to inconsistent focus states and poor aesthetics in the header. Relying on an `aria-label` for a visually disjointed element is sub-optimal. +**Action:** When a file upload action is required in a prominent UI area (like a header), visually hide the native `` (using `hidden`) and provide a proxy ` +

@@ -325,6 +326,10 @@

Dashboard

} const fileInput = document.getElementById('file'); +const headerBrowseFindings = document.getElementById('header-browse-findings'); +if (headerBrowseFindings) { + headerBrowseFindings.addEventListener('click', () => fileInput.click()); +} fileInput.addEventListener('change', () => { const selectedFile = fileInput.files?.[0]; fileInput.value = ''; diff --git a/tests/test_dashboard_core.py b/tests/test_dashboard_core.py index 75a5809f..0723c7b8 100644 --- a/tests/test_dashboard_core.py +++ b/tests/test_dashboard_core.py @@ -77,7 +77,7 @@ def test_dashboard_rows_are_keyboard_accessible(): assert 'tabindex="0" role="button"' in html assert 'title="View details for finding"' in html assert "tbody tr:focus-visible" in html - assert "aria-label=\"Upload findings file\"" in html + assert "Upload findings file" in html assert "aria-label=\"Search findings\"" in html assert "aria-label=\"Filter by severity\"" in html assert "tr.addEventListener('keydown'" in html From 8af57720afc73f2f6f0499cb12f355fb8ee2437c Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 10 Sep 2026 05:27:33 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=9D=B8=ED=92=8B?= =?UTF-8?q?=EC=9D=84=20=EC=9D=BC=EA=B4=80=EB=90=9C=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1=20=EB=B0=8F=20UI=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 4e3a7a74cc3b819c007693fef3cc97934fb24237 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 10 Sep 2026 06:10:40 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=9D=B8=ED=92=8B?= =?UTF-8?q?=EC=9D=84=20=EC=9D=BC=EA=B4=80=EB=90=9C=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1=20=EB=B0=8F=20UI=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 81d857d35bcb44427c8b2342a7dcca45e67bfaad Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Fri, 11 Sep 2026 05:05:06 +0900 Subject: [PATCH 4/4] docs(ui): remove unverified global file-input proxy doctrine --- .jules/palette.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.jules/palette.md b/.jules/palette.md index 38e7702c..ea004e2d 100644 --- a/.jules/palette.md +++ b/.jules/palette.md @@ -81,7 +81,3 @@ ## 2026-08-12 - Skip to Content Accessibility **Learning:** Screen reader and keyboard-only users experience significant friction when forced to navigate through repetitive header controls on every page load. **Action:** Keep a visible-on-focus skip link as the first interactive element, target a programmatically focusable main container, and give the focused link a high-contrast outline. - -## 2024-05-19 - Native File Input Proxy Pattern -**Learning:** Native `` elements are notoriously difficult to style consistently across browsers, leading to inconsistent focus states and poor aesthetics in the header. Relying on an `aria-label` for a visually disjointed element is sub-optimal. -**Action:** When a file upload action is required in a prominent UI area (like a header), visually hide the native `` (using `hidden`) and provide a proxy `