29 lines
961 B
TypeScript
29 lines
961 B
TypeScript
const AVATAR_COLORS = [
|
|
"#1a73e8", "#e8710a", "#1e8e3e", "#d93025", "#9334e6",
|
|
"#185abc", "#b06000", "#137333", "#a50e0e", "#7627bb",
|
|
"#0d652d", "#c5221f", "#e37400", "#1967d2", "#8430ce",
|
|
]
|
|
|
|
export function avatarColor(name: string): string {
|
|
let hash = 0
|
|
for (let i = 0; i < name.length; i++) {
|
|
hash = name.charCodeAt(i) + ((hash << 5) - hash)
|
|
}
|
|
return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length]!
|
|
}
|
|
|
|
export function senderInitial(name: string): string {
|
|
const clean = name.replace(/[[\].,]/g, "").trim()
|
|
return clean.charAt(0).toUpperCase() || "?"
|
|
}
|
|
|
|
export function cleanSenderName(raw: string): string {
|
|
return raw.split(",")[0]?.trim().replace(/\.\./g, " ").replace(/\[.*?\]/g, "").trim() || raw
|
|
}
|
|
|
|
export function resolveSenderEmail(displayName: string, explicit?: string): string {
|
|
if (explicit) return explicit
|
|
const n = cleanSenderName(displayName)
|
|
return `${n.toLowerCase().replace(/\s+/g, ".")}@example.com`
|
|
}
|