/** * Basic helpers around email formatting shared across components and composables. */ /** * Normalises an email by trimming whitespace and converting it to lowercase. */ export const normalizeEmail = (rawValue: string): string => { const value = (rawValue || '').trim() return value.toLowerCase() } /** * Masks an email address by hiding the characters between the first and last letters * of the local part. Useful for UI fragments where we want partial obfuscation. */ export const maskEmail = (rawValue: string): string => { const value = normalizeEmail(rawValue) if (!value) { return '' } const [localPart, domain] = value.split('@') if (!domain) { return value } if (localPart.length <= 2) { return `${localPart[0] ?? ''}·@${domain}` } const start = localPart[0] const end = localPart.slice(-1) const masked = '·'.repeat(Math.max(0, localPart.length - 2)) return `${start}${masked}${end}@${domain}` }