import type { LucideIcon } from "lucide-react" import { Inbox, Star, Clock, Send, FileText, ClockArrowUp, ShieldAlert, Trash2, User, Search, } from "lucide-react" import { folderTreeNavIconNameClosed, navFolderIconColorFromBgClass, } from "@/lib/folder-nav-icons" import type { FolderTreeNode } from "@/lib/sidebar-nav-maps" import type { LabelRowItem } from "@/lib/sidebar-nav-data" import { defaultNavLabelRowsSnapshot, labelRowById } from "@/lib/sidebar-nav-data" import { findFolderPath } from "@/lib/sidebar-nav-folder-ids" import { parseMailNavVisitKey } from "@/lib/mail-folder-display" import { normalizeInboxTabSegment } from "@/lib/mail-url" const SYSTEM_ICONS: Record = { inbox: Inbox, starred: Star, snoozed: Clock, sent: Send, drafts: FileText, scheduled: ClockArrowUp, spam: ShieldAlert, trash: Trash2, search: Search, } export type MailNavIcon = | { kind: "lucide"; Icon: LucideIcon } | { kind: "folder"; icon: string; color: string } | { kind: "iconify"; icon: string } export function resolveMailNavIcon( visitKey: string, folderTree: FolderTreeNode[], labelRows: readonly LabelRowItem[] = defaultNavLabelRowsSnapshot ): MailNavIcon { const { folderId, inboxTab } = parseMailNavVisitKey(visitKey) if (folderId === "inbox") { const tab = normalizeInboxTabSegment(inboxTab ?? "primary") if (tab === "primary") return { kind: "lucide", Icon: User } if (tab === "all") return { kind: "lucide", Icon: Inbox } const row = labelRowById(labelRows, tab) if (row?.icon) return { kind: "iconify", icon: row.icon } return { kind: "lucide", Icon: Inbox } } if (folderId === "important") { return { kind: "iconify", icon: "mdi:label-variant-outline" } } const system = SYSTEM_ICONS[folderId] if (system) return { kind: "lucide", Icon: system } const navRow = labelRowById(labelRows, folderId) if (navRow?.icon) return { kind: "iconify", icon: navRow.icon } const path = findFolderPath(folderTree, folderId) if (path?.length) { const leaf = path[path.length - 1]! return { kind: "folder", icon: folderTreeNavIconNameClosed(!!leaf.children?.length), color: navFolderIconColorFromBgClass(leaf.color ?? "bg-slate-400"), } } return { kind: "folder", icon: folderTreeNavIconNameClosed(false), color: navFolderIconColorFromBgClass("bg-slate-400"), } }