ui(dashboard): proxy file picker through a visible native button - #1131
ui(dashboard): proxy file picker through a visible native button#1131seonghobae wants to merge 7 commits into
Conversation
네이티브 `<input type="file">` 요소는 브라우저마다 스타일이 다르고 일관되게 꾸미기 어렵습니다. 또한 기존의 `aria-label`은 'label-in-name' 원칙을 시각적으로 따르지 않습니다. 이를 개선하기 위해, 네이티브 입력 필드는 `hidden` 속성으로 숨기고, 기존 `.primary-action` 클래스를 사용하는 네이티브 `<button>`을 추가하여 클릭 이벤트를 프록시하도록 수정했습니다. 이로써 접근성을 유지하면서 기존 UI 컴포넌트와 어울리는 시각적 UX를 제공합니다. UI 계약 테스트(`test_dashboard_core.py`)도 함께 업데이트되었습니다.
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough파일 입력을 숨기고 Changes파일 업로드 버튼 프록시
Estimated code review effort: 1 (Trivial) | ~5 minutes Merge Risk: ⚪ Minimal · up to The dashboard now opens the file chooser through a clearly labeled native upload button while retaining the underlying file input flow. No concrete merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
네이티브 `<input type="file">` 요소는 브라우저마다 스타일이 다르고 일관되게 꾸미기 어렵습니다. 또한 기존의 `aria-label`은 'label-in-name' 원칙을 시각적으로 따르지 않습니다. 이를 개선하기 위해, 네이티브 입력 필드는 `hidden` 속성으로 숨기고, 기존 `.primary-action` 클래스를 사용하는 네이티브 `<button>`을 추가하여 클릭 이벤트를 프록시하도록 수정했습니다. 이로써 접근성을 유지하면서 기존 UI 컴포넌트와 어울리는 시각적 UX를 제공합니다. UI 계약 테스트(`test_dashboard_core.py`)도 함께 업데이트되었습니다.
네이티브 `<input type="file">` 요소는 브라우저마다 스타일이 다르고 일관되게 꾸미기 어렵습니다. 또한 기존의 `aria-label`은 'label-in-name' 원칙을 시각적으로 따르지 않습니다. 이를 개선하기 위해, 네이티브 입력 필드는 `hidden` 속성으로 숨기고, 기존 `.primary-action` 클래스를 사용하는 네이티브 `<button>`을 추가하여 클릭 이벤트를 프록시하도록 수정했습니다. 이로써 접근성을 유지하면서 기존 UI 컴포넌트와 어울리는 시각적 UX를 제공합니다. UI 계약 테스트(`test_dashboard_core.py`)도 함께 업데이트되었습니다.
네이티브 `<input type="file">` 요소는 브라우저마다 스타일이 다르고 일관되게 꾸미기 어렵습니다. 또한 기존의 `aria-label`은 'label-in-name' 원칙을 시각적으로 따르지 않습니다. 이를 개선하기 위해, 네이티브 입력 필드는 `hidden` 속성으로 숨기고, 기존 `.primary-action` 클래스를 사용하는 네이티브 `<button>`을 추가하여 클릭 이벤트를 프록시하도록 수정했습니다. 이로써 접근성을 유지하면서 기존 UI 컴포넌트와 어울리는 시각적 UX를 제공합니다. UI 계약 테스트(`test_dashboard_core.py`)도 함께 업데이트되었습니다.
변경 범위
Dashboard header의 native
<input type="file">을 직접 노출하는 대신 숨긴 input과 visible native<button>을 연결합니다. 버튼 activation은 기존 file input의 picker를 열고, 실제 파일 선택·파싱·상태 갱신은 기존changelistener가 계속 소유합니다.develop@e71d37e7c58118e6764c96ab7c4492fe33eed6f85f938580fd32b15fc99508b26cbc47839f577a04scanner/dashboard/index.html,tests/test_dashboard_core.pyRepair
Generated branch가
.jules/palette.md에 별도Native File Input Styling Proxydoctrine을 추가했지만 protected authority에는 이미Native File Input Iteration Friction항목이 있어 native button proxy와 explicit event listener 원칙을 소유합니다. 중복 doctrine을 history rewrite 없이 normal descendants로 제거했고, current effective diff에서.jules/palette.md는 사라졌습니다.2026-09-08 live revalidation에서 후속 commit이 중복 doctrine을 다시 삽입한 것을 확인해, protected-base blob
ea004e2d2aff90e5fe294235d78fee670645ae78으로 두 번째 forward repair했습니다. 제품 source와 regression delta는 변경하지 않았습니다.현재 pytest regression은 visible button text를 고정하지만 실제 browser interaction을 실행하지는 않습니다. 따라서 이 결과만으로 keyboard accessibility, file-picker activation, focus behavior, responsive layout, accessibility tree를 GREEN으로 주장하지 않습니다.
Duplicate-predecessor and prerequisite boundary
PR #1181 at
d9254a4a017d42b89283135b62c1fd75de61e14dindependently reproduced this product/test intent. It is now a Draft predecessor and remains open until this canonical branch proves complete acceptance. Its only additional.jules/palette.mddoctrine duplicates protected authority and is not carried here.Actual browser execution infrastructure is currently introduced by unmerged Draft #1117 at
d3283a168446a71c9f983f14a348712cdb6e7fe5. This branch does not copy that unprotected dependency/workflow. Browser acceptance remains incomplete until the prerequisite is integrated or this PR is non-force stacked onto a verified current prerequisite without losing either delta.On this exact head, eight repository workflows succeeded. CodeQL PR
34181962755failed closed withVERDICT_STATE=pendingfor Python and Actions after dispatch job101925139499succeeded; no terminal authenticated verdict exists. No review submission or review thread exists. These source checks do not replace the missing browser interaction evidence.Material UI acceptance
Ready 전 current exact head에서 실제 browser/E2E로 다음을 검증해야 합니다.
Upload findings filenative button에 도달하고 숨긴 input에는 별도 불필요한 Tab stop이 생기지 않을 것fileInput.value = ''계약대로 다시 처리될 것현재 product UI는 영어 중심이므로 이 PR 하나로 KO/EN/JA/ZH/VI/ES/DE/FR locale completeness를 주장하지 않습니다. locale/translation-ledger 전환은 별도 product-level contract가 필요합니다.
Delivery Gate
No self-approval, gate weakening, force push, destructive rebase, source-neutral CI retrigger, or accessibility-success claim without browser evidence.