Skip to content

🎨 Palette: λΉ„μƒν˜Έμž‘μš© μš”μ†Œμ˜ 툴팁 μ ‘κ·Όμ„± κ°œμ„  - #584

Closed
seonghobae wants to merge 1 commit into
developfrom
palette-tooltip-a11y-11511150515964310043
Closed

🎨 Palette: λΉ„μƒν˜Έμž‘μš© μš”μ†Œμ˜ 툴팁 μ ‘κ·Όμ„± κ°œμ„ #584
seonghobae wants to merge 1 commit into
developfrom
palette-tooltip-a11y-11511150515964310043

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

πŸ’‘ 무엇을

  • index.html의 .meta-value-card μš”μ†Œλ“€μ— tabindex="0"κ³Ό role="note"λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • app.jsμ—μ„œ λ™μ μœΌλ‘œ μƒμ„±λ˜λŠ” .status-badge μš”μ†Œμ— tabindex="0"κ³Ό role="note"λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • styles.css에 ν‚€λ³΄λ“œ 탐색 μ‹œ μ‹œκ°μ  ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ .meta-value-card:focus-visible 및 .status-badge:focus-visible μŠ€νƒ€μΌμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • .jules/palette.md에 λΉ„μƒν˜Έμž‘μš© μš”μ†Œμ˜ 툴팁 접근성에 λŒ€ν•œ 배움을 κΈ°λ‘ν–ˆμŠ΅λ‹ˆλ‹€.

🎯 μ™œ

κΈ°μ‘΄μ—λŠ” divλ‚˜ span 같은 λΉ„μƒν˜Έμž‘μš© μš”μ†Œμ— title 속성(툴팁)κ³Ό aria-label이 μ œκ³΅λ˜μ–΄ μžˆμ—ˆμœΌλ‚˜, ν•΄λ‹Ή μš”μ†Œλ“€μ΄ 포컀슀λ₯Ό 받을 수 μ—†μ–΄ ν‚€λ³΄λ“œ 및 슀크린 리더 μ‚¬μš©μžκ°€ 정보에 μ ‘κ·Όν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

πŸ“Έ λ³€κ²½ μ „/ν›„

  • λ³€κ²½ μ „: 마우슀λ₯Ό μ˜¬λ €μ•Όλ§Œ μ „μ²΄μΌμˆ˜, κ³„νšμ§„μ²™λ₯ , 싀적진척λ₯  μ„€λͺ…μ΄λ‚˜ λ°°μ§€μ˜ μ„€λͺ…을 λ³Ό 수 μžˆμ—ˆμœΌλ©°, ν‚€λ³΄λ“œλ‘œλŠ” μ ‘κ·Όν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
  • λ³€κ²½ ν›„: Tab ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ .meta-value-card와 .status-badge에 포컀슀λ₯Ό 이동할 수 있으며, 포컀슀 μ‹œ λΈŒλΌμš°μ € κΈ°λ³Έ 툴팁이 λ‚˜νƒ€λ‚˜κ³  슀크린 리더가 λ‚΄μš©μ„ μ½μ–΄μ€λ‹ˆλ‹€. λͺ…ν™•ν•œ νŒŒλž€μƒ‰ μ™Έκ³½μ„ (.focus-visible) ν”Όλ“œλ°±μ΄ μ œκ³΅λ©λ‹ˆλ‹€.

β™Ώ μ ‘κ·Όμ„±

νˆ΄νŒμ„ μ œκ³΅ν•˜λŠ” λΉ„μƒν˜Έμž‘μš© μš”μ†Œμ— μ‹œλ§¨ν‹± λ‘€(role="note")κ³Ό ν‚€λ³΄λ“œ 포컀슀(tabindex="0")λ₯Ό κ²°ν•©ν•˜κ³ , λͺ…ν™•ν•œ 포컀슀 ν‘œμ‹œ(:focus-visible)λ₯Ό μ œκ³΅ν•˜μ—¬ WCAG ν‚€λ³΄λ“œ μ ‘κ·Όμ„± κ°€μ΄λ“œλΌμΈμ„ μ€€μˆ˜ν•˜λ„λ‘ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. 마우슀 μ‚¬μš©μžμ—κ²ŒλŠ” μ‹œκ°μ  λ°©ν•΄κ°€ 없도둝 :focus-visibleλ§Œμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.


PR created automatically by Jules for task 11511150515964310043 started by @seonghobae


Open in Devin Review

@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.

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 57 minutes

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
βš™οΈ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 13bbbc5e-2e16-4e54-9597-8ddd5111c74b

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 2c32887 and 7f98723.

πŸ“’ Files selected for processing (4)
  • .jules/palette.md
  • app.js
  • index.html
  • styles.css

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.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread app.js
Comment on lines +1002 to +1003
badge.tabIndex = 0;
badge.setAttribute('role', 'note');

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

πŸ“ Info: Status badges add a focus stop per row

Each .status-badge with a description now gets tabIndex = 0 (app.js), adding one keyboard tab stop per table row. In dense tables this lengthens keyboard traversal noticeably. It matches the documented palette.md convention, so it appears intentional.

Open in Devin Review

Was this helpful? React with πŸ‘ or πŸ‘Ž to provide feedback.

Copy link
Copy Markdown
Contributor Author

Closing this lane because its useful intent is already owned by a stronger accessibility slice, while its remaining unique change adds an avoidable keyboard-navigation regression.

Fresh exact state is unchanged at 7f98723c3a5e68e455598f80f7372510f112fc19 against protected develop@2c328875e00e86537df3e965170be80532571cad.

For the three summary metric cards, existing PR #509 at exact head ea9027743ebafd1ca5774a5a14227585cf796052 already owns this buyer-visible problem with the opposite, better-tested contract: persistent visible explanatory copy for pointer, touch, sighted-keyboard and assistive-technology users; no native title dependency; and no synthetic role/tabindex on static cards. Its browser regression explicitly rejects reintroduction of role, tabindex, or title, and checks normal-text contrast. The metric-card portion here therefore directly conflicts with, rather than extends, the canonical repair.

The remaining status-badge delta is not valuable enough to transplant as written. It adds one tabIndex=0 focus stop for every described status badge; the current Devin thread independently identifies the resulting per-row traversal cost. More importantly, making static badges focusable solely to expose a native title is not the WAI-ARIA tooltip pattern: an actual tooltip has a trigger-to-description relationship (aria-describedby) and a separate role=tooltip popup, while persistent explanatory text is preferable when the information is important enough to be continuously available. This PR supplies neither a browser acceptance contract for keyboard-visible badge help nor evidence that dense-table focus order remains usable.

If status descriptions later prove insufficient in browse mode, repair that as a focused tested interaction using persistent visible description or a proper tooltip/description contract rather than adding a tab stop to every static status indicator. No source from this branch should be merged into #509 or protected develop in its current form.

@seonghobae seonghobae closed this Aug 22, 2026
@google-labs-jules

Copy link
Copy Markdown

Closing this lane because its useful intent is already owned by a stronger accessibility slice, while its remaining unique change adds an avoidable keyboard-navigation regression.

Fresh exact state is unchanged at 7f98723c3a5e68e455598f80f7372510f112fc19 against protected develop@2c328875e00e86537df3e965170be80532571cad.

For the three summary metric cards, existing PR #509 at exact head ea9027743ebafd1ca5774a5a14227585cf796052 already owns this buyer-visible problem with the opposite, better-tested contract: persistent visible explanatory copy for pointer, touch, sighted-keyboard and assistive-technology users; no native title dependency; and no synthetic role/tabindex on static cards. Its browser regression explicitly rejects reintroduction of role, tabindex, or title, and checks normal-text contrast. The metric-card portion here therefore directly conflicts with, rather than extends, the canonical repair.

The remaining status-badge delta is not valuable enough to transplant as written. It adds one tabIndex=0 focus stop for every described status badge; the current Devin thread independently identifies the resulting per-row traversal cost. More importantly, making static badges focusable solely to expose a native title is not the WAI-ARIA tooltip pattern: an actual tooltip has a trigger-to-description relationship (aria-describedby) and a separate role=tooltip popup, while persistent explanatory text is preferable when the information is important enough to be continuously available. This PR supplies neither a browser acceptance contract for keyboard-visible badge help nor evidence that dense-table focus order remains usable.

If status descriptions later prove insufficient in browse mode, repair that as a focused tested interaction using persistent visible description or a proper tooltip/description contract rather than adding a tab stop to every static status indicator. No source from this branch should be merged into #509 or protected develop in its current form.

Understood. Acknowledging that this work is now obsolete and conflicts with existing accessibility improvements in PR #509, and stopping work on this task.

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