Skip to content

a11y(export): evaluate focusable disabled-state discovery - #1090

Draft
seonghobae wants to merge 5 commits into
mainfrom
palette/export-modal-a11y-7724101510858501193
Draft

a11y(export): evaluate focusable disabled-state discovery#1090
seonghobae wants to merge 5 commits into
mainfrom
palette/export-modal-a11y-7724101510858501193

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator

Current exact authority

  • protected base: main@8dc746920c12988f082e914879d95e13c9693535
  • exact head: 5833cb42d1201dac01380e42ed901c7cff2b985d
  • lifecycle: Draft / source experiment retained / real keyboard + AT evidence pending

Valid delta

ExportModal replaces native disabled on the explanatory “접근 관리” control with aria-disabled={true}, keeps aria-describedby="share-export-access-hint", and preserves a disabled visual treatment. Because the button has type="button" and no enabled action, its local click boundary currently prevents default activation while leaving the control focusable for discoverability.

The generated .jules/palette.md rule that generalized this choice to every disabled control was removed in normal descendant 5833cb42...; that file is byte-identical to protected authority. Focusability of disabled controls is context-dependent, not a repository-wide default.

Current RED

The test calls .focus() directly. That proves the DOM node can receive programmatic focus, but it does not prove normal Tab navigation reaches the button in modal order, that aria-describedby resolves to the intended helper text in the browser accessibility tree, or that Enter/Space activation remains inert.

WAI-ARIA/APG permits a focusable aria-disabled="true" control when disabled-state discoverability is important, but it does not require every disabled control to remain in the tab sequence. This component therefore needs product-context evidence rather than a blanket rule.

Required GREEN on one unchanged head:

  • realistic keyboard regression using normal Tab order rather than direct .focus();
  • Enter and Space do not perform the disabled action or mutate export/access state;
  • computed accessibility state is disabled and the description resolves to the visible permission hint;
  • visible/focus-disabled styling remains distinguishable at desktop, intermediate, and mobile widths;
  • normal, loading, permission-denied, and modal-close/focus-return paths remain intact.

Delivery Gate

의도성 PASS / 기능 완전성 PARTIAL / 콘텐츠 적합성 PASS / 복원력 FAIL/PENDING / 증거성 FAIL/PENDING / 고유성 N/A.

Fresh exact-head CI, Security/SAST/CodeQL, browser E2E/accessibility-tree evidence, review threads, and qualifying current-head independent review are required before Ready/normal merge. No accessibility-completion claim, self-approval, gate weakening, source-neutral retrigger, generated doctrine, force push, or destructive rebase.

비활성화된 "접근 관리" 버튼에 aria-describedby로 안내 텍스트가 연결되어 있었으나, native disabled 속성으로 인해 키보드 포커스를 받지 못해 스크린 리더 사용자가 해당 안내를 인지할 수 없는 문제가 있었습니다.

native disabled를 aria-disabled={true}로 변경하고, onClick에서 이벤트를 차단하여 키보드 포커스가 가능하도록 개선했습니다. CSS 및 테스트 코드도 이에 맞게 수정했습니다.
@google-labs-jules

Copy link
Copy Markdown

👋 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 @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 6, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-06T13:57:20.318725Z 382d340 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: cc963763-3278-416a-bbb4-10285a09527c

📥 Commits

Reviewing files that changed from the base of the PR and between 8dc7469 and 382d340.

📒 Files selected for processing (4)
  • .jules/palette.md
  • frontend/src/components/modals/ExportModal.test.tsx
  • frontend/src/components/modals/ExportModal.tsx
  • frontend/src/styles.css

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

ExportModal의 접근 관리 버튼이 네이티브 disabled 대신 aria-disabled를 사용합니다. 클릭 동작을 차단하고 포커스를 유지합니다. 비활성 스타일, 테스트, 접근성 지침을 함께 갱신했습니다.

Changes

접근성 비활성 버튼 처리

Layer / File(s) Summary
aria-disabled 버튼 동작과 검증
frontend/src/components/modals/ExportModal.tsx, frontend/src/styles.css, frontend/src/components/modals/ExportModal.test.tsx, .jules/palette.md
접근 관리 버튼에 aria-disabled={true}와 클릭 차단을 적용했습니다. aria-disabled="true" 버튼에도 비활성 스타일을 적용합니다. 테스트는 속성과 포커스 가능 여부를 검증합니다. 접근성 지침에 같은 사용 방법을 추가했습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 5833c

The access-management button remains keyboard-focusable so its guidance can be discovered while retaining disabled appearance and preventing activation. No actionable current-head merge risk remains.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. (2 skipped: 2 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 ExportModal의 비활성 상태 접근성 개선과 포커스 가능성 확인이라는 주요 변경 사항을 명확하게 설명합니다. 짧고 구체적이며 변경 내용과 일치합니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. (2 skipped: 2 unsupported.)

✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch palette/export-modal-a11y-7724101510858501193

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae marked this pull request as draft September 6, 2026 14:15
@seonghobae seonghobae changed the title 🎨 Palette: [접근성] ExportModal 비활성 버튼 툴팁 키보드 접근성 개선 a11y(export): evaluate focusable disabled-state discovery Sep 6, 2026
비활성화된 "접근 관리" 버튼에 aria-describedby로 안내 텍스트가 연결되어 있었으나, native disabled 속성으로 인해 키보드 포커스를 받지 못해 스크린 리더 사용자가 해당 안내를 인지할 수 없는 문제가 있었습니다.

native disabled를 aria-disabled={true}로 변경하고, onClick에서 이벤트를 차단하여 키보드 포커스가 가능하도록 개선했습니다. CSS 및 테스트 코드도 이에 맞게 수정했습니다.
비활성화된 "접근 관리" 버튼에 aria-describedby로 안내 텍스트가 연결되어 있었으나, native disabled 속성으로 인해 키보드 포커스를 받지 못해 스크린 리더 사용자가 해당 안내를 인지할 수 없는 문제가 있었습니다.

native disabled를 aria-disabled={true}로 변경하고, onClick에서 이벤트를 차단하여 키보드 포커스가 가능하도록 개선했습니다. CSS 및 테스트 코드도 이에 맞게 수정했습니다.
비활성화된 "접근 관리" 버튼에 aria-describedby로 안내 텍스트가 연결되어 있었으나, native disabled 속성으로 인해 키보드 포커스를 받지 못해 스크린 리더 사용자가 해당 안내를 인지할 수 없는 문제가 있었습니다.

native disabled를 aria-disabled={true}로 변경하고, onClick에서 이벤트를 차단하여 키보드 포커스가 가능하도록 개선했습니다. CSS 및 테스트 코드도 이에 맞게 수정했습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant