fix: align hover styles and selection-toggle target with focused item
This commit is contained in:
@@ -1499,9 +1499,12 @@ export default function Home() {
|
|||||||
} else {
|
} else {
|
||||||
selectAllEmails();
|
selectAllEmails();
|
||||||
}
|
}
|
||||||
} else {
|
} else if (emails.length > 0) {
|
||||||
// Enter selection mode by selecting the first email
|
const currentId = selectedEmail?.id;
|
||||||
if (emails.length > 0) toggleEmailSelection(emails[0].id);
|
const target = currentId && emails.some((e) => e.id === currentId)
|
||||||
|
? currentId
|
||||||
|
: emails[0].id;
|
||||||
|
toggleEmailSelection(target);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -274,7 +274,10 @@ export function ContactList({
|
|||||||
if (allSelected) onClearSelection();
|
if (allSelected) onClearSelection();
|
||||||
else onSelectAll(sortedIds);
|
else onSelectAll(sortedIds);
|
||||||
} else if (sortedIds.length > 0) {
|
} else if (sortedIds.length > 0) {
|
||||||
onToggleSelection(sortedIds[0]);
|
const target = selectedContactId && sortedIds.includes(selectedContactId)
|
||||||
|
? selectedContactId
|
||||||
|
: sortedIds[0];
|
||||||
|
onToggleSelection(target);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -99,7 +99,8 @@ export function EmailListItem({ email, selected, onClick, onContextMenu, onToggl
|
|||||||
: "bg-background"
|
: "bg-background"
|
||||||
),
|
),
|
||||||
selected && !colorTag && "shadow-sm",
|
selected && !colorTag && "shadow-sm",
|
||||||
!colorTag && !selected && "hover:bg-muted hover:shadow-sm",
|
!colorTag && !selected && !isChecked && "hover:bg-muted hover:shadow-sm",
|
||||||
|
!colorTag && (selected || isChecked) && "hover:bg-accent hover:shadow-sm",
|
||||||
colorTag && "hover:brightness-95 dark:hover:brightness-110",
|
colorTag && "hover:brightness-95 dark:hover:brightness-110",
|
||||||
isUnread && !selected && !colorTag && "bg-warning/10",
|
isUnread && !selected && !colorTag && "bg-warning/10",
|
||||||
// Add visual feedback for checked state
|
// Add visual feedback for checked state
|
||||||
@@ -302,7 +303,7 @@ export function EmailListItem({ email, selected, onClick, onContextMenu, onToggl
|
|||||||
{/* Hover Quick Actions */}
|
{/* Hover Quick Actions */}
|
||||||
<EmailHoverActions
|
<EmailHoverActions
|
||||||
email={email}
|
email={email}
|
||||||
backgroundClassName={colorTag ? colorTag : (selected ? "bg-selection" : "bg-muted")}
|
backgroundClassName={colorTag ? colorTag : ((selected || isChecked) ? "bg-accent" : "bg-muted")}
|
||||||
onToggleStar={onToggleStar}
|
onToggleStar={onToggleStar}
|
||||||
onMarkAsRead={onMarkAsRead}
|
onMarkAsRead={onMarkAsRead}
|
||||||
onDelete={onDelete}
|
onDelete={onDelete}
|
||||||
|
|||||||
@@ -133,7 +133,8 @@ const SingleEmailItem = React.forwardRef<HTMLDivElement, SingleEmailItemProps>(
|
|||||||
: "bg-background"
|
: "bg-background"
|
||||||
),
|
),
|
||||||
selected && !resolvedColorTag && "shadow-sm",
|
selected && !resolvedColorTag && "shadow-sm",
|
||||||
!resolvedColorTag && !selected && "hover:bg-muted hover:shadow-sm",
|
!resolvedColorTag && !selected && !isChecked && "hover:bg-muted hover:shadow-sm",
|
||||||
|
!resolvedColorTag && (selected || isChecked) && "hover:bg-accent hover:shadow-sm",
|
||||||
resolvedColorTag && "hover:brightness-95 dark:hover:brightness-110",
|
resolvedColorTag && "hover:brightness-95 dark:hover:brightness-110",
|
||||||
isUnread && !resolvedColorTag && "bg-accent/30",
|
isUnread && !resolvedColorTag && "bg-accent/30",
|
||||||
isChecked && "ring-2 ring-primary/20 bg-accent/40",
|
isChecked && "ring-2 ring-primary/20 bg-accent/40",
|
||||||
@@ -323,7 +324,7 @@ const SingleEmailItem = React.forwardRef<HTMLDivElement, SingleEmailItemProps>(
|
|||||||
{/* Hover Quick Actions */}
|
{/* Hover Quick Actions */}
|
||||||
<EmailHoverActions
|
<EmailHoverActions
|
||||||
email={email}
|
email={email}
|
||||||
backgroundClassName={resolvedColorTag ? resolvedColorTag : (selected ? "bg-accent" : "bg-muted")}
|
backgroundClassName={resolvedColorTag ? resolvedColorTag : ((selected || isChecked) ? "bg-accent" : "bg-muted")}
|
||||||
onToggleStar={onToggleStar}
|
onToggleStar={onToggleStar}
|
||||||
onMarkAsRead={onMarkAsRead}
|
onMarkAsRead={onMarkAsRead}
|
||||||
onDelete={onDelete}
|
onDelete={onDelete}
|
||||||
@@ -487,7 +488,8 @@ export const ThreadListItem = React.forwardRef<HTMLDivElement, ThreadListItemPro
|
|||||||
: "bg-background"
|
: "bg-background"
|
||||||
),
|
),
|
||||||
isSelected && !colorTag && "shadow-sm",
|
isSelected && !colorTag && "shadow-sm",
|
||||||
!colorTag && !isSelected && "hover:bg-muted hover:shadow-sm",
|
!colorTag && !isSelected && !isChecked && "hover:bg-muted hover:shadow-sm",
|
||||||
|
!colorTag && (isSelected || isChecked) && "hover:bg-accent hover:shadow-sm",
|
||||||
colorTag && "hover:brightness-95 dark:hover:brightness-110",
|
colorTag && "hover:brightness-95 dark:hover:brightness-110",
|
||||||
hasUnread && !colorTag && !isSelected && "bg-accent/30",
|
hasUnread && !colorTag && !isSelected && "bg-accent/30",
|
||||||
isExpanded && "border-b border-border/50",
|
isExpanded && "border-b border-border/50",
|
||||||
@@ -725,7 +727,7 @@ export const ThreadListItem = React.forwardRef<HTMLDivElement, ThreadListItemPro
|
|||||||
{/* Hover Quick Actions for thread header */}
|
{/* Hover Quick Actions for thread header */}
|
||||||
<EmailHoverActions
|
<EmailHoverActions
|
||||||
email={latestEmail}
|
email={latestEmail}
|
||||||
backgroundClassName={colorTag ? colorTag : (isSelected ? "bg-accent" : "bg-muted")}
|
backgroundClassName={colorTag ? colorTag : ((isSelected || isChecked) ? "bg-accent" : "bg-muted")}
|
||||||
onToggleStar={onToggleStar ? () => onToggleStar(latestEmail) : undefined}
|
onToggleStar={onToggleStar ? () => onToggleStar(latestEmail) : undefined}
|
||||||
onMarkAsRead={onMarkAsRead ? (read) => onMarkAsRead(latestEmail, read) : undefined}
|
onMarkAsRead={onMarkAsRead ? (read) => onMarkAsRead(latestEmail, read) : undefined}
|
||||||
onDelete={onDelete ? () => onDelete(latestEmail) : undefined}
|
onDelete={onDelete ? () => onDelete(latestEmail) : undefined}
|
||||||
|
|||||||
Reference in New Issue
Block a user