fix: reveal hover-gated controls on touch devices - #471
Conversation
These controls are `opacity-0 group-hover:opacity-100`. Touch has no hover state, so they stay invisible while remaining hit-testable: invisible targets rather than absent ones, and the actions behind them cannot be performed at all. Use the `[@media(hover:hover)]` guard already established by `DataTable.vue`, so reveal-on-hover applies only where hover exists. - Download an attachment, and its name and size. - Edit or delete a custom attribute. - Select a conversation, which gates every bulk action. On touch the overlay is always live so tapping the avatar selects, while the checkbox stays transparent until selection is under way, keeping the avatar readable until then.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughConversation controls now remain visible on touch devices. Hover-only visibility and opacity behavior applies only to devices that support hover. Desktop hover behavior remains unchanged. ChangesTouch device conversation controls
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@frontend/apps/main/src/features/conversation/list/ConversationListItem.vue`:
- Around line 31-46: Update the Checkbox opacity classes in ConversationListItem
so keyboard-focused checkboxes become visible by adding the focus-visible
opacity behavior alongside the existing hover and selection states, while
preserving the current non-focused appearance.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: d6f28f04-0caf-4296-804e-61c1cd851c7c
📒 Files selected for processing (3)
frontend/apps/main/src/features/conversation/list/ConversationListItem.vuefrontend/apps/main/src/features/conversation/message/attachment/BubbleAttachmentItem.vuefrontend/apps/main/src/features/conversation/sidebar/CustomAttributes.vue
On a device without hover the selection overlay is always interactive, so the checkbox is in the tab order while sitting at `opacity-0`. Keyboard focus therefore landed on an invisible control, with only its focus ring drawn. Add `focus-visible:opacity-100`. On hover devices the overlay is `display: none` until hover, so the checkbox is not focusable there and nothing changes.
These controls are
opacity-0 group-hover:opacity-100. Touch has no hover state, so they stay invisible while still being hit-testable — invisible targets rather than absent ones, and the action can't be performed at all:Uses the
[@media(hover:hover)]guard already used byDataTable.vue, so pointer devices are unaffected. For selection on touch the overlay is always live (tap the avatar to select) while the checkbox stays transparent until selection starts, so the avatar stays readable.Independent of the layout work — applies to touch laptops and tablets today. Refs #470
Summary by CodeRabbit