diff --git a/src/components/EmailListPanel.tsx b/src/components/EmailListPanel.tsx index 9f5ae0e..1f348e6 100644 --- a/src/components/EmailListPanel.tsx +++ b/src/components/EmailListPanel.tsx @@ -10,6 +10,7 @@ import { useRef, useState, useTransition, + type CSSProperties, type ReactNode, } from "react"; import SenderAvatar from "@/components/SenderAvatar"; @@ -77,6 +78,39 @@ export type DeferredMailPanelData = Pick< "drafts" | "pinned" | "sent" | "spam" | "archive" | "trash" >; +const ROW_ACTION_SURFACES = { + default: { + light: "var(--color-stone-50)", + lightHover: "var(--color-stone-100)", + dark: "var(--color-stone-900)", + darkHover: "var(--color-stone-950)", + }, + checked: { + light: "var(--color-blue-50)", + lightHover: "var(--color-blue-50)", + dark: + "color-mix(in srgb, var(--color-blue-950) 25%, var(--color-stone-900))", + darkHover: + "color-mix(in srgb, var(--color-blue-950) 25%, var(--color-stone-900))", + }, + keyboard: { + light: + "color-mix(in srgb, var(--color-blue-50) 70%, var(--color-stone-50))", + lightHover: + "color-mix(in srgb, var(--color-blue-50) 70%, var(--color-stone-50))", + dark: + "color-mix(in srgb, var(--color-blue-950) 20%, var(--color-stone-900))", + darkHover: + "color-mix(in srgb, var(--color-blue-950) 20%, var(--color-stone-900))", + }, + route: { + light: "var(--color-stone-200)", + lightHover: "var(--color-stone-200)", + dark: "var(--color-stone-800)", + darkHover: "var(--color-stone-800)", + }, +} as const; + const DeferredMailPanelContext = createContext< ((data: DeferredMailPanelData) => void) | null >(null); @@ -1594,6 +1628,13 @@ export default function EmailListPanel({ (email) => !!inboxId && !!email.mailboxIds[inboxId], ); const threadIsPinned = pinnableEmails.some(isPinned); + const rowActionSurface = isChecked + ? ROW_ACTION_SURFACES.checked + : keyboardThreadId === thread.threadId + ? ROW_ACTION_SURFACES.keyboard + : isRouteSelected + ? ROW_ACTION_SURFACES.route + : ROW_ACTION_SURFACES.default; const showPinnedDivider = !isInSearchMode && view === "inbox" && pinnedThreadCount > 0 && idx === 0; @@ -1674,7 +1715,13 @@ export default function EmailListPanel({ swipeOffset === 0 ? "transform 160ms ease-out" : "none", - }} + "--mail-row-action-light": rowActionSurface.light, + "--mail-row-action-light-hover": + rowActionSurface.lightHover, + "--mail-row-action-dark": rowActionSurface.dark, + "--mail-row-action-dark-hover": + rowActionSurface.darkHover, + } as CSSProperties} onPointerDown={(event) => startRowPointer( event, @@ -1821,7 +1868,7 @@ export default function EmailListPanel({ <>