import type { SignatureConfig, CompanyBranding } from "../types"; import { getBranding } from "./company-branding"; export function formatPhone(raw: string): { display: string; link: string } { const clean = raw.replace(/\s/g, ""); if (clean.length === 10 && clean.startsWith("07")) { return { display: `+40 ${clean.substring(1, 4)} ${clean.substring(4, 7)} ${clean.substring(7, 10)}`, link: `tel:+40${clean.substring(1)}`, }; } return { display: raw, link: `tel:${clean}` }; } export function generateSignatureHtml(config: SignatureConfig): string { const branding = getBranding(config.company); const address = config.addressOverride ?? branding.address; const { display: phone, link: phoneLink } = formatPhone(config.phone); const images = config.useSvg ? { logo: branding.logo.svg, greySlash: branding.slashGrey.svg, accentSlash: branding.slashAccent.svg, } : { logo: branding.logo.png, greySlash: branding.slashGrey.png, accentSlash: branding.slashAccent.png, }; const { greenLineWidth, gutterWidth, iconTextSpacing, iconVerticalOffset, mottoSpacing, sectionSpacing, titleSpacing, logoSpacing, } = config.layout; const colors = config.colors; const isReply = config.variant === "reply" || config.variant === "minimal"; const isMinimal = config.variant === "minimal"; const logoDim = branding.logoDimensions ?? { width: 162, height: 24 }; const hide = "mso-hide:all;display:none!important;max-height:0;overflow:hidden;font-size:0;line-height:0;"; const hideTitle = isReply ? hide : ""; const hideLogo = isReply ? hide : ""; const hideBottom = isMinimal ? hide : ""; const hidePhoneIcon = isMinimal ? hide : ""; const spacerWidth = Math.max(0, iconTextSpacing); const textPaddingLeft = Math.max(0, -iconTextSpacing); const prefixHtml = config.prefix ? `${esc(config.prefix)} ` : ""; return ` ${branding.website ? `` : ""} ${branding.motto ? `` : ""}
${prefixHtml}${esc(config.name)}
${esc(config.title)}
${ images.logo ? ` ${esc(branding.name)} ` : "" }
${images.greySlash ? `` : ""} ${address.join("
")}
${images.accentSlash ? `` : ""} ${phone}
${branding.website}
${esc(branding.motto)}
`; } function esc(text: string): string { return text .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """); } export function downloadSignatureHtml(html: string, filename: string): void { const blob = new Blob([html], { type: "text/html" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(a.href); }