From 0ef08bfaed05f3cc6337e8d0274dffa59a4fa25d Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 11 Sep 2026 05:13:44 +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=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=94=84=EB=A1=9D=EC=8B=9C=20=EB=B2=84=ED=8A=BC=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jules/palette.md | 4 ++++ CHANGELOG.d/9999-dashboard-header-upload-btn.md | 2 ++ scanner/dashboard/index.html | 5 ++++- tests/test_dashboard_core.py | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.d/9999-dashboard-header-upload-btn.md diff --git a/.jules/palette.md b/.jules/palette.md index ea004e2d..96ca152a 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. + +## 2026-08-15 - Label-in-name for proxy buttons +**Learning:** When replacing a native file input with a proxy button for better styling, duplicating the `aria-label` on the button when its visible text already perfectly describes the action creates redundant screen reader output. If the proxy button's text is 'Upload findings file', adding `aria-label="Upload findings file"` is unnecessary and violates the label-in-name principle. +**Action:** Rely on the button's visible text for its accessible name, and keep the visually hidden native input hidden from screen readers to prevent duplicate interactive elements. diff --git a/CHANGELOG.d/9999-dashboard-header-upload-btn.md b/CHANGELOG.d/9999-dashboard-header-upload-btn.md new file mode 100644 index 00000000..62f104fc --- /dev/null +++ b/CHANGELOG.d/9999-dashboard-header-upload-btn.md @@ -0,0 +1,2 @@ +### Changed +- (Dashboard) 헤더의 기본 파일 업로드 입력을 스타일이 적용된 프록시 버튼으로 교체하여 시각적 일관성과 사용자 경험을 개선했습니다. diff --git a/scanner/dashboard/index.html b/scanner/dashboard/index.html index 132bc31b..2e9ae40f 100644 --- a/scanner/dashboard/index.html +++ b/scanner/dashboard/index.html @@ -93,7 +93,8 @@ AppGuardrail no findings loaded - + +

@@ -325,6 +326,8 @@

Dashboard

} const fileInput = document.getElementById('file'); +const headerBtn = document.getElementById('header-upload-btn'); +if (headerBtn) headerBtn.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..be738615 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 2f0ed10ac2e36b8f0bc7241486f92115e3a3067f Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 11 Sep 2026 05:34:50 +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=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=94=84=EB=A1=9D=EC=8B=9C=20=EB=B2=84=ED=8A=BC=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From c5bdadb599a4af7312d2a6b3eeb1e9d43cf944c4 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 11 Sep 2026 05:51:00 +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=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=94=84=EB=A1=9D=EC=8B=9C=20=EB=B2=84=ED=8A=BC=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 8170be986eb41be606023296b684408970d1eed0 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 11 Sep 2026 06:08:10 +0000 Subject: [PATCH 4/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=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=94=84=EB=A1=9D=EC=8B=9C=20=EB=B2=84=ED=8A=BC=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit