@infuro/cms-core 1.0.62 → 1.0.63

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/admin.cjs +4 -4
  2. package/dist/admin.js +4 -4
  3. package/dist/api.cjs +38 -38
  4. package/dist/api.js +6 -6
  5. package/dist/{chunk-NMYGQWHV.js → chunk-3VZAAQUV.js} +18 -5
  6. package/dist/{chunk-R6Q67HAS.js → chunk-77YWLP4X.js} +19 -19
  7. package/dist/{chunk-AXMP2U43.cjs → chunk-7L556RGL.cjs} +3 -3
  8. package/dist/{chunk-6LV36PCL.js → chunk-BWOITUNI.js} +7 -6
  9. package/dist/{chunk-QA5C477U.cjs → chunk-CJEOH6QC.cjs} +64 -64
  10. package/dist/{chunk-6XAVZE4I.js → chunk-DTUL3Q5L.js} +1 -1
  11. package/dist/{chunk-TWTISTZB.cjs → chunk-EWXG4E74.cjs} +14 -13
  12. package/dist/{chunk-CTIEAHQL.cjs → chunk-JLDHK2QE.cjs} +18 -5
  13. package/dist/{chunk-GZGFNVTK.js → chunk-KAOHOHCA.js} +55 -40
  14. package/dist/{chunk-HMLVPIJR.js → chunk-MWEK7N3F.js} +1 -1
  15. package/dist/{chunk-LRD4CGOG.cjs → chunk-MXABMVF7.cjs} +4 -4
  16. package/dist/{chunk-LVQSG25Y.cjs → chunk-RHYVNRYG.cjs} +1 -1
  17. package/dist/{chunk-YW7EF7K7.js → chunk-RXTUSF3R.js} +2 -2
  18. package/dist/{chunk-ZPAPCGCR.cjs → chunk-YVP4NQII.cjs} +56 -41
  19. package/dist/{email-queue-J7DXYNCE.cjs → email-queue-VTYL2KFA.cjs} +7 -7
  20. package/dist/{email-queue-65PQAG4C.js → email-queue-YPRSVG56.js} +3 -3
  21. package/dist/{email-service-RDOTY3CO.cjs → email-service-ATCPJFWG.cjs} +7 -7
  22. package/dist/{email-service-F7HA4X63.js → email-service-DPKVQOKP.js} +2 -2
  23. package/dist/{emit-order-notification-trigger-K7URAZHJ.cjs → emit-order-notification-trigger-WI4HGMKH.cjs} +3 -3
  24. package/dist/{emit-order-notification-trigger-MD7EBODC.js → emit-order-notification-trigger-XVG2B5ZF.js} +1 -1
  25. package/dist/{erp-order-invoice-MYFCXOCY.js → erp-order-invoice-3UGWLICU.js} +2 -2
  26. package/dist/{erp-order-invoice-C5GZCOBM.cjs → erp-order-invoice-KJYJNWMG.cjs} +6 -6
  27. package/dist/index.cjs +246 -245
  28. package/dist/index.d.cts +8 -2
  29. package/dist/index.d.ts +8 -2
  30. package/dist/index.js +15 -14
  31. package/dist/{order-completion-otp-handlers-4EOLYLAP.cjs → order-completion-otp-handlers-IMMQGHDR.cjs} +6 -6
  32. package/dist/{order-completion-otp-handlers-3NTOGEA5.js → order-completion-otp-handlers-WGM7HWG4.js} +4 -4
  33. package/dist/{order-notification-dispatcher-X2XM5VUY.cjs → order-notification-dispatcher-5TUFCDU7.cjs} +10 -10
  34. package/dist/{order-notification-dispatcher-IYMOS4VY.js → order-notification-dispatcher-JKFQJYGG.js} +5 -5
  35. package/package.json +1 -1
@@ -16,66 +16,81 @@ function socialLinkInnerHtml(s) {
16
16
  return escapeHtml(label);
17
17
  }
18
18
  __name(socialLinkInnerHtml, "socialLinkInnerHtml");
19
- function supportLinesHtml(supportEmail, supportPhone, opts) {
19
+ function supportLinesHtml(supportEmail, supportPhone) {
20
20
  const parts = [];
21
- const top = opts?.tightTop ? "margin-top:0;" : "margin-top:4px;";
22
21
  if (supportEmail) {
23
- parts.push(`<div style="font-size:13px;color:#444;${top}">&#128231; ${escapeHtml(supportEmail)}</div>`);
22
+ parts.push(`<a href="mailto:${escapeHtml(supportEmail)}" style="color:#6b7280;text-decoration:none;font-size:13px;">${escapeHtml(supportEmail)}</a>`);
24
23
  }
25
24
  if (supportPhone) {
26
- parts.push(`<div style="font-size:13px;color:#444;margin-top:2px;">&#128222; ${escapeHtml(supportPhone)}</div>`);
25
+ parts.push(`<span style="color:#6b7280;font-size:13px;">${escapeHtml(supportPhone)}</span>`);
27
26
  }
28
- return parts.join("");
27
+ return parts.join('<span style="color:#d1d5db;padding:0 8px;">\xB7</span>');
29
28
  }
30
29
  __name(supportLinesHtml, "supportLinesHtml");
31
30
  function renderLayout(options) {
32
31
  const { bodyHtml, companyDetails } = options;
33
32
  const { logoUrl, companyName, supportEmail, supportPhone, socialLinks, footerDisclaimer, followUsTitle = "Follow Us" } = companyDetails;
34
- const supportFooterHtml = supportLinesHtml(supportEmail, supportPhone, {
35
- tightTop: true
36
- });
33
+ const brand = (companyName || "Store").trim();
34
+ const accent = "#ea580c";
35
+ const logoHtml = logoUrl ? `<img src="${escapeHtml(logoUrl)}" alt="${escapeHtml(brand)}" width="160" style="max-height:56px;max-width:180px;height:auto;width:auto;display:block;border:0;margin:0 auto;" />` : `<div style="font-size:22px;font-weight:700;letter-spacing:-0.02em;color:#111827;">${escapeHtml(brand)}</div>`;
37
36
  const hasSocial = Boolean(socialLinks?.length);
38
- const brandFooterInner = [];
39
- if (logoUrl) {
40
- brandFooterInner.push(`<img src="${escapeHtml(logoUrl)}" alt="" style="max-height:28px;max-width:160px;height:auto;width:auto;display:inline-block;vertical-align:middle;margin-right:10px;border:0;" />`);
41
- }
42
- if (companyName) {
43
- brandFooterInner.push(`<span style="font-size:14px;font-weight:600;color:#111;vertical-align:middle;">${escapeHtml(companyName)}</span>`);
44
- }
45
- const brandFooterHtml = brandFooterInner.length ? `<div style="line-height:1.4;">${brandFooterInner.join("")}</div>` : "";
46
- const followTitleHtml = hasSocial && followUsTitle ? `<div class="footer-follow-title" style="font-size:13px;font-weight:600;color:#555;margin:0;">${escapeHtml(followUsTitle)}</div>` : "";
47
- const socialRowHtml = hasSocial && socialLinks ? `<div class="footer-social-icons" style="margin-top:6px;text-align:left;font-size:0;line-height:0;">${socialLinks.map((s) => `<a href="${escapeHtml(s.url)}" style="display:inline-block;margin-right:12px;text-decoration:none;color:#333;font-size:18px;line-height:1;vertical-align:middle;">${socialLinkInnerHtml(s)}</a>`).join("")}</div>` : "";
48
- const rowSupport = supportFooterHtml ? `<tr><td class="footer-support-cell" colspan="2" valign="top" style="padding:0 0 10px 0;">${supportFooterHtml}</td></tr>` : "";
49
- let footerBlock = "";
50
- if (brandFooterHtml || followTitleHtml || socialRowHtml || footerDisclaimer || rowSupport) {
51
- const rowBrand = brandFooterHtml ? `<tr><td class="footer-brand-cell" colspan="2" valign="top" style="padding:0 0 10px 0;">${brandFooterHtml}</td></tr>` : "";
52
- const rowFollowTitle = followTitleHtml ? `<tr><td class="footer-follow-cell" colspan="2" valign="top" style="padding:14px 0 0 0;text-align:left;">${followTitleHtml}</td></tr>` : "";
53
- const rowSocial = socialRowHtml ? `<tr><td class="footer-social-cell" colspan="2" style="padding:0;text-align:left;">${socialRowHtml}</td></tr>` : "";
54
- footerBlock = `<table role="presentation" class="footer-main" width="100%" cellpadding="0" cellspacing="0" style="margin-top:28px;padding-top:16px;">${rowBrand}${rowSupport}${rowFollowTitle}${rowSocial}</table>`;
55
- }
56
- const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:20px;padding-top:12px;font-size:11px;line-height:1.5;color:#888;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
37
+ const socialRowHtml = hasSocial && socialLinks ? `<div style="margin-top:12px;text-align:center;font-size:0;line-height:0;">${socialLinks.map((s) => `<a href="${escapeHtml(s.url)}" style="display:inline-block;margin:0 8px;text-decoration:none;color:#374151;font-size:18px;line-height:1;vertical-align:middle;">${socialLinkInnerHtml(s)}</a>`).join("")}</div>` : "";
38
+ const followTitleHtml = hasSocial && followUsTitle ? `<div style="font-size:12px;font-weight:600;color:#9ca3af;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 4px 0;">${escapeHtml(followUsTitle)}</div>` : "";
39
+ const supportHtml = supportLinesHtml(supportEmail, supportPhone);
40
+ const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:16px;font-size:11px;line-height:1.5;color:#9ca3af;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
57
41
  const responsiveCss = `
58
- @media only screen and (max-width: 600px) {
59
- .email-wrap { padding-left: 12px !important; padding-right: 12px !important; }
60
- .footer-follow-cell { padding-top: 12px !important; }
42
+ @media only screen and (max-width: 620px) {
43
+ .email-shell { padding: 16px 10px !important; }
44
+ .email-card { border-radius: 12px !important; }
45
+ .email-body { padding: 24px 18px !important; }
46
+ .email-header { padding: 20px 18px !important; }
61
47
  }
62
48
  `;
63
49
  return `<!DOCTYPE html>
64
- <html>
50
+ <html lang="en">
65
51
  <head>
66
52
  <meta charset="utf-8">
67
53
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
54
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
55
+ <title>${escapeHtml(brand)}</title>
68
56
  <style type="text/css">${responsiveCss}</style>
69
57
  </head>
70
- <body style="margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;line-height:1.5;color:#333;background:#fff;">
71
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#fff;">
72
- <tr><td class="email-wrap" style="padding:16px;">
73
- <div>
74
- ${bodyHtml}
75
- </div>
76
- ${footerBlock}
77
- ${disclaimerBlock}
78
- </td></tr>
58
+ <body style="margin:0;padding:0;background:#f3f4f6;-webkit-font-smoothing:antialiased;">
59
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;border-collapse:collapse;">
60
+ <tr>
61
+ <td class="email-shell" align="center" style="padding:32px 16px;">
62
+ <table role="presentation" class="email-card" width="100%" cellpadding="0" cellspacing="0" style="max-width:600px;background:#ffffff;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;border-collapse:collapse;">
63
+ <tr>
64
+ <td class="email-header" align="center" style="padding:28px 32px 20px 32px;background:#ffffff;">
65
+ ${logoHtml}
66
+ ${logoUrl && companyName ? `<div style="margin-top:10px;font-size:13px;color:#6b7280;">${escapeHtml(companyName)}</div>` : ""}
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td style="height:4px;line-height:4px;font-size:0;background:${accent};">&nbsp;</td>
71
+ </tr>
72
+ <tr>
73
+ <td class="email-body" style="padding:28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:15px;line-height:1.65;color:#1f2937;">
74
+ ${bodyHtml}
75
+ </td>
76
+ </tr>
77
+ <tr>
78
+ <td style="padding:0 32px;">
79
+ <div style="border-top:1px solid #e5e7eb;line-height:0;font-size:0;">&nbsp;</div>
80
+ </td>
81
+ </tr>
82
+ <tr>
83
+ <td align="center" style="padding:20px 32px 28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;">
84
+ ${followTitleHtml}
85
+ ${socialRowHtml}
86
+ ${supportHtml ? `<div style="margin-top:14px;">${supportHtml}</div>` : ""}
87
+ <div style="margin-top:12px;font-size:12px;color:#9ca3af;">\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} ${escapeHtml(brand)}</div>
88
+ ${disclaimerBlock}
89
+ </td>
90
+ </tr>
91
+ </table>
92
+ </td>
93
+ </tr>
79
94
  </table>
80
95
  </body>
81
96
  </html>`;
@@ -1,5 +1,5 @@
1
1
  import { isErpIntegrationEnabled } from './chunk-JC6DLWTE.js';
2
- import { mergeEmailLayoutCompanyDetails, getCompanyDetailsFromSettings } from './chunk-NMYGQWHV.js';
2
+ import { mergeEmailLayoutCompanyDetails, getCompanyDetailsFromSettings } from './chunk-3VZAAQUV.js';
3
3
  import { __name } from './chunk-SHUYVCID.js';
4
4
  import { rgb, PDFDocument, StandardFonts } from 'pdf-lib';
5
5
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkAXMP2U43_cjs = require('./chunk-AXMP2U43.cjs');
3
+ var chunk7L556RGL_cjs = require('./chunk-7L556RGL.cjs');
4
4
  var chunkUSNT2KNT_cjs = require('./chunk-USNT2KNT.cjs');
5
5
 
6
6
  // src/plugins/email/email-queue.ts
@@ -50,13 +50,13 @@ async function resolveInvoiceAttachmentForJob(cms, payload, options) {
50
50
  invoiceAttached: false
51
51
  };
52
52
  const o = order;
53
- if (!chunkAXMP2U43_cjs.isOrderEligibleForInvoiceEmail(o.status, o.orderKind)) {
53
+ if (!chunk7L556RGL_cjs.isOrderEligibleForInvoiceEmail(o.status, o.orderKind)) {
54
54
  return {
55
55
  attachments: payload.attachments,
56
56
  invoiceAttached: false
57
57
  };
58
58
  }
59
- const resolved = await chunkAXMP2U43_cjs.resolveOrderInvoicePdfBytes(cms, dataSource, entityMap, payload.orderId);
59
+ const resolved = await chunk7L556RGL_cjs.resolveOrderInvoicePdfBytes(cms, dataSource, entityMap, payload.orderId);
60
60
  if ("error" in resolved) {
61
61
  console.warn("[email] order invoice attach failed", {
62
62
  orderId: payload.orderId,
@@ -133,7 +133,7 @@ async function queueEmail(cms, payload) {
133
133
  let email = cms && typeof cms.getPlugin === "function" ? cms.getPlugin("email") : void 0;
134
134
  if (!email) {
135
135
  try {
136
- const { EmailService } = await import('./email-service-RDOTY3CO.cjs');
136
+ const { EmailService } = await import('./email-service-ATCPJFWG.cjs');
137
137
  const env = typeof process !== "undefined" && process.env ? process.env : {};
138
138
  const type = String(env.SMTP_TYPE || "SMTP").toUpperCase();
139
139
  const port = env.SMTP_PORT ? parseInt(env.SMTP_PORT, 10) : void 0;
@@ -92,7 +92,7 @@ async function emitOrderNotificationTrigger(triggerKey, orderId, deps, extra) {
92
92
  };
93
93
  if (listenerCount === 0) {
94
94
  try {
95
- const { dispatchOrderNotificationDirectly } = await import('./order-notification-dispatcher-X2XM5VUY.cjs');
95
+ const { dispatchOrderNotificationDirectly } = await import('./order-notification-dispatcher-5TUFCDU7.cjs');
96
96
  await dispatchOrderNotificationDirectly(triggerKey, triggerPayload, deps.dataSource, deps.entityMap);
97
97
  } catch (err) {
98
98
  console.error("[notification-triggers] direct dispatch failed", {
@@ -1,4 +1,4 @@
1
- import { isOrderEligibleForInvoiceEmail, resolveOrderInvoicePdfBytes } from './chunk-HMLVPIJR.js';
1
+ import { isOrderEligibleForInvoiceEmail, resolveOrderInvoicePdfBytes } from './chunk-MWEK7N3F.js';
2
2
  import { __name } from './chunk-SHUYVCID.js';
3
3
 
4
4
  // src/plugins/email/email-queue.ts
@@ -131,7 +131,7 @@ async function queueEmail(cms, payload) {
131
131
  let email = cms && typeof cms.getPlugin === "function" ? cms.getPlugin("email") : void 0;
132
132
  if (!email) {
133
133
  try {
134
- const { EmailService } = await import('./email-service-F7HA4X63.js');
134
+ const { EmailService } = await import('./email-service-DPKVQOKP.js');
135
135
  const env = typeof process !== "undefined" && process.env ? process.env : {};
136
136
  const type = String(env.SMTP_TYPE || "SMTP").toUpperCase();
137
137
  const port = env.SMTP_PORT ? parseInt(env.SMTP_PORT, 10) : void 0;
@@ -23,66 +23,81 @@ function socialLinkInnerHtml(s) {
23
23
  return escapeHtml(label);
24
24
  }
25
25
  chunkUSNT2KNT_cjs.__name(socialLinkInnerHtml, "socialLinkInnerHtml");
26
- function supportLinesHtml(supportEmail, supportPhone, opts) {
26
+ function supportLinesHtml(supportEmail, supportPhone) {
27
27
  const parts = [];
28
- const top = opts?.tightTop ? "margin-top:0;" : "margin-top:4px;";
29
28
  if (supportEmail) {
30
- parts.push(`<div style="font-size:13px;color:#444;${top}">&#128231; ${escapeHtml(supportEmail)}</div>`);
29
+ parts.push(`<a href="mailto:${escapeHtml(supportEmail)}" style="color:#6b7280;text-decoration:none;font-size:13px;">${escapeHtml(supportEmail)}</a>`);
31
30
  }
32
31
  if (supportPhone) {
33
- parts.push(`<div style="font-size:13px;color:#444;margin-top:2px;">&#128222; ${escapeHtml(supportPhone)}</div>`);
32
+ parts.push(`<span style="color:#6b7280;font-size:13px;">${escapeHtml(supportPhone)}</span>`);
34
33
  }
35
- return parts.join("");
34
+ return parts.join('<span style="color:#d1d5db;padding:0 8px;">\xB7</span>');
36
35
  }
37
36
  chunkUSNT2KNT_cjs.__name(supportLinesHtml, "supportLinesHtml");
38
37
  function renderLayout(options) {
39
38
  const { bodyHtml, companyDetails } = options;
40
39
  const { logoUrl, companyName, supportEmail, supportPhone, socialLinks, footerDisclaimer, followUsTitle = "Follow Us" } = companyDetails;
41
- const supportFooterHtml = supportLinesHtml(supportEmail, supportPhone, {
42
- tightTop: true
43
- });
40
+ const brand = (companyName || "Store").trim();
41
+ const accent = "#ea580c";
42
+ const logoHtml = logoUrl ? `<img src="${escapeHtml(logoUrl)}" alt="${escapeHtml(brand)}" width="160" style="max-height:56px;max-width:180px;height:auto;width:auto;display:block;border:0;margin:0 auto;" />` : `<div style="font-size:22px;font-weight:700;letter-spacing:-0.02em;color:#111827;">${escapeHtml(brand)}</div>`;
44
43
  const hasSocial = Boolean(socialLinks?.length);
45
- const brandFooterInner = [];
46
- if (logoUrl) {
47
- brandFooterInner.push(`<img src="${escapeHtml(logoUrl)}" alt="" style="max-height:28px;max-width:160px;height:auto;width:auto;display:inline-block;vertical-align:middle;margin-right:10px;border:0;" />`);
48
- }
49
- if (companyName) {
50
- brandFooterInner.push(`<span style="font-size:14px;font-weight:600;color:#111;vertical-align:middle;">${escapeHtml(companyName)}</span>`);
51
- }
52
- const brandFooterHtml = brandFooterInner.length ? `<div style="line-height:1.4;">${brandFooterInner.join("")}</div>` : "";
53
- const followTitleHtml = hasSocial && followUsTitle ? `<div class="footer-follow-title" style="font-size:13px;font-weight:600;color:#555;margin:0;">${escapeHtml(followUsTitle)}</div>` : "";
54
- const socialRowHtml = hasSocial && socialLinks ? `<div class="footer-social-icons" style="margin-top:6px;text-align:left;font-size:0;line-height:0;">${socialLinks.map((s) => `<a href="${escapeHtml(s.url)}" style="display:inline-block;margin-right:12px;text-decoration:none;color:#333;font-size:18px;line-height:1;vertical-align:middle;">${socialLinkInnerHtml(s)}</a>`).join("")}</div>` : "";
55
- const rowSupport = supportFooterHtml ? `<tr><td class="footer-support-cell" colspan="2" valign="top" style="padding:0 0 10px 0;">${supportFooterHtml}</td></tr>` : "";
56
- let footerBlock = "";
57
- if (brandFooterHtml || followTitleHtml || socialRowHtml || footerDisclaimer || rowSupport) {
58
- const rowBrand = brandFooterHtml ? `<tr><td class="footer-brand-cell" colspan="2" valign="top" style="padding:0 0 10px 0;">${brandFooterHtml}</td></tr>` : "";
59
- const rowFollowTitle = followTitleHtml ? `<tr><td class="footer-follow-cell" colspan="2" valign="top" style="padding:14px 0 0 0;text-align:left;">${followTitleHtml}</td></tr>` : "";
60
- const rowSocial = socialRowHtml ? `<tr><td class="footer-social-cell" colspan="2" style="padding:0;text-align:left;">${socialRowHtml}</td></tr>` : "";
61
- footerBlock = `<table role="presentation" class="footer-main" width="100%" cellpadding="0" cellspacing="0" style="margin-top:28px;padding-top:16px;">${rowBrand}${rowSupport}${rowFollowTitle}${rowSocial}</table>`;
62
- }
63
- const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:20px;padding-top:12px;font-size:11px;line-height:1.5;color:#888;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
44
+ const socialRowHtml = hasSocial && socialLinks ? `<div style="margin-top:12px;text-align:center;font-size:0;line-height:0;">${socialLinks.map((s) => `<a href="${escapeHtml(s.url)}" style="display:inline-block;margin:0 8px;text-decoration:none;color:#374151;font-size:18px;line-height:1;vertical-align:middle;">${socialLinkInnerHtml(s)}</a>`).join("")}</div>` : "";
45
+ const followTitleHtml = hasSocial && followUsTitle ? `<div style="font-size:12px;font-weight:600;color:#9ca3af;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 4px 0;">${escapeHtml(followUsTitle)}</div>` : "";
46
+ const supportHtml = supportLinesHtml(supportEmail, supportPhone);
47
+ const disclaimerBlock = footerDisclaimer ? `<div style="margin-top:16px;font-size:11px;line-height:1.5;color:#9ca3af;">${escapeHtml(footerDisclaimer).replace(/\n/g, "<br/>")}</div>` : "";
64
48
  const responsiveCss = `
65
- @media only screen and (max-width: 600px) {
66
- .email-wrap { padding-left: 12px !important; padding-right: 12px !important; }
67
- .footer-follow-cell { padding-top: 12px !important; }
49
+ @media only screen and (max-width: 620px) {
50
+ .email-shell { padding: 16px 10px !important; }
51
+ .email-card { border-radius: 12px !important; }
52
+ .email-body { padding: 24px 18px !important; }
53
+ .email-header { padding: 20px 18px !important; }
68
54
  }
69
55
  `;
70
56
  return `<!DOCTYPE html>
71
- <html>
57
+ <html lang="en">
72
58
  <head>
73
59
  <meta charset="utf-8">
74
60
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
61
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
62
+ <title>${escapeHtml(brand)}</title>
75
63
  <style type="text/css">${responsiveCss}</style>
76
64
  </head>
77
- <body style="margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;line-height:1.5;color:#333;background:#fff;">
78
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#fff;">
79
- <tr><td class="email-wrap" style="padding:16px;">
80
- <div>
81
- ${bodyHtml}
82
- </div>
83
- ${footerBlock}
84
- ${disclaimerBlock}
85
- </td></tr>
65
+ <body style="margin:0;padding:0;background:#f3f4f6;-webkit-font-smoothing:antialiased;">
66
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;border-collapse:collapse;">
67
+ <tr>
68
+ <td class="email-shell" align="center" style="padding:32px 16px;">
69
+ <table role="presentation" class="email-card" width="100%" cellpadding="0" cellspacing="0" style="max-width:600px;background:#ffffff;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;border-collapse:collapse;">
70
+ <tr>
71
+ <td class="email-header" align="center" style="padding:28px 32px 20px 32px;background:#ffffff;">
72
+ ${logoHtml}
73
+ ${logoUrl && companyName ? `<div style="margin-top:10px;font-size:13px;color:#6b7280;">${escapeHtml(companyName)}</div>` : ""}
74
+ </td>
75
+ </tr>
76
+ <tr>
77
+ <td style="height:4px;line-height:4px;font-size:0;background:${accent};">&nbsp;</td>
78
+ </tr>
79
+ <tr>
80
+ <td class="email-body" style="padding:28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;font-size:15px;line-height:1.65;color:#1f2937;">
81
+ ${bodyHtml}
82
+ </td>
83
+ </tr>
84
+ <tr>
85
+ <td style="padding:0 32px;">
86
+ <div style="border-top:1px solid #e5e7eb;line-height:0;font-size:0;">&nbsp;</div>
87
+ </td>
88
+ </tr>
89
+ <tr>
90
+ <td align="center" style="padding:20px 32px 28px 32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;">
91
+ ${followTitleHtml}
92
+ ${socialRowHtml}
93
+ ${supportHtml ? `<div style="margin-top:14px;">${supportHtml}</div>` : ""}
94
+ <div style="margin-top:12px;font-size:12px;color:#9ca3af;">\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} ${escapeHtml(brand)}</div>
95
+ ${disclaimerBlock}
96
+ </td>
97
+ </tr>
98
+ </table>
99
+ </td>
100
+ </tr>
86
101
  </table>
87
102
  </body>
88
103
  </html>`;
@@ -685,7 +700,7 @@ function renderEmail(templateName, ctx, options) {
685
700
  chunkUSNT2KNT_cjs.__name(renderEmail, "renderEmail");
686
701
 
687
702
  // src/plugins/email/email-service.ts
688
- var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-ZPAPCGCR.cjs', document.baseURI).href)));
703
+ var require2 = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-YVP4NQII.cjs', document.baseURI).href)));
689
704
  var MailComposer = require2("nodemailer/lib/mail-composer");
690
705
  var SES_REGIONS_WITHOUT_SMTP = /* @__PURE__ */ new Set([
691
706
  "af-south-1",
@@ -1,26 +1,26 @@
1
1
  'use strict';
2
2
 
3
- var chunkLRD4CGOG_cjs = require('./chunk-LRD4CGOG.cjs');
4
- require('./chunk-AXMP2U43.cjs');
3
+ var chunkMXABMVF7_cjs = require('./chunk-MXABMVF7.cjs');
4
+ require('./chunk-7L556RGL.cjs');
5
5
  require('./chunk-UPLVMVRX.cjs');
6
- require('./chunk-CTIEAHQL.cjs');
6
+ require('./chunk-JLDHK2QE.cjs');
7
7
  require('./chunk-USNT2KNT.cjs');
8
8
 
9
9
 
10
10
 
11
11
  Object.defineProperty(exports, "queueEmail", {
12
12
  enumerable: true,
13
- get: function () { return chunkLRD4CGOG_cjs.queueEmail; }
13
+ get: function () { return chunkMXABMVF7_cjs.queueEmail; }
14
14
  });
15
15
  Object.defineProperty(exports, "queueOrderPlacedEmails", {
16
16
  enumerable: true,
17
- get: function () { return chunkLRD4CGOG_cjs.queueOrderPlacedEmails; }
17
+ get: function () { return chunkMXABMVF7_cjs.queueOrderPlacedEmails; }
18
18
  });
19
19
  Object.defineProperty(exports, "queueVendorOnboardEmails", {
20
20
  enumerable: true,
21
- get: function () { return chunkLRD4CGOG_cjs.queueVendorOnboardEmails; }
21
+ get: function () { return chunkMXABMVF7_cjs.queueVendorOnboardEmails; }
22
22
  });
23
23
  Object.defineProperty(exports, "registerEmailQueueProcessor", {
24
24
  enumerable: true,
25
- get: function () { return chunkLRD4CGOG_cjs.registerEmailQueueProcessor; }
25
+ get: function () { return chunkMXABMVF7_cjs.registerEmailQueueProcessor; }
26
26
  });
@@ -1,5 +1,5 @@
1
- export { queueEmail, queueOrderPlacedEmails, queueVendorOnboardEmails, registerEmailQueueProcessor } from './chunk-YW7EF7K7.js';
2
- import './chunk-HMLVPIJR.js';
1
+ export { queueEmail, queueOrderPlacedEmails, queueVendorOnboardEmails, registerEmailQueueProcessor } from './chunk-RXTUSF3R.js';
2
+ import './chunk-MWEK7N3F.js';
3
3
  import './chunk-JC6DLWTE.js';
4
- import './chunk-NMYGQWHV.js';
4
+ import './chunk-3VZAAQUV.js';
5
5
  import './chunk-SHUYVCID.js';
@@ -1,28 +1,28 @@
1
1
  'use strict';
2
2
 
3
- var chunkZPAPCGCR_cjs = require('./chunk-ZPAPCGCR.cjs');
4
- require('./chunk-CTIEAHQL.cjs');
3
+ var chunkYVP4NQII_cjs = require('./chunk-YVP4NQII.cjs');
4
+ require('./chunk-JLDHK2QE.cjs');
5
5
  require('./chunk-USNT2KNT.cjs');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "EmailService", {
10
10
  enumerable: true,
11
- get: function () { return chunkZPAPCGCR_cjs.EmailService; }
11
+ get: function () { return chunkYVP4NQII_cjs.EmailService; }
12
12
  });
13
13
  Object.defineProperty(exports, "SES_REGIONS_WITHOUT_SMTP", {
14
14
  enumerable: true,
15
- get: function () { return chunkZPAPCGCR_cjs.SES_REGIONS_WITHOUT_SMTP; }
15
+ get: function () { return chunkYVP4NQII_cjs.SES_REGIONS_WITHOUT_SMTP; }
16
16
  });
17
17
  Object.defineProperty(exports, "emailTemplates", {
18
18
  enumerable: true,
19
- get: function () { return chunkZPAPCGCR_cjs.emailTemplates; }
19
+ get: function () { return chunkYVP4NQII_cjs.emailTemplates; }
20
20
  });
21
21
  Object.defineProperty(exports, "sesRegionSupportsSmtp", {
22
22
  enumerable: true,
23
- get: function () { return chunkZPAPCGCR_cjs.sesRegionSupportsSmtp; }
23
+ get: function () { return chunkYVP4NQII_cjs.sesRegionSupportsSmtp; }
24
24
  });
25
25
  Object.defineProperty(exports, "sesSmtpHost", {
26
26
  enumerable: true,
27
- get: function () { return chunkZPAPCGCR_cjs.sesSmtpHost; }
27
+ get: function () { return chunkYVP4NQII_cjs.sesSmtpHost; }
28
28
  });
@@ -1,3 +1,3 @@
1
- export { EmailService, SES_REGIONS_WITHOUT_SMTP, emailTemplates, sesRegionSupportsSmtp, sesSmtpHost } from './chunk-GZGFNVTK.js';
2
- import './chunk-NMYGQWHV.js';
1
+ export { EmailService, SES_REGIONS_WITHOUT_SMTP, emailTemplates, sesRegionSupportsSmtp, sesSmtpHost } from './chunk-KAOHOHCA.js';
2
+ import './chunk-3VZAAQUV.js';
3
3
  import './chunk-SHUYVCID.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLVQSG25Y_cjs = require('./chunk-LVQSG25Y.cjs');
3
+ var chunkRHYVNRYG_cjs = require('./chunk-RHYVNRYG.cjs');
4
4
  require('./chunk-UEE4PTTB.cjs');
5
5
  require('./chunk-USNT2KNT.cjs');
6
6
 
@@ -8,9 +8,9 @@ require('./chunk-USNT2KNT.cjs');
8
8
 
9
9
  Object.defineProperty(exports, "emitOrderNotificationTrigger", {
10
10
  enumerable: true,
11
- get: function () { return chunkLVQSG25Y_cjs.emitOrderNotificationTrigger; }
11
+ get: function () { return chunkRHYVNRYG_cjs.emitOrderNotificationTrigger; }
12
12
  });
13
13
  Object.defineProperty(exports, "fireOrderNotificationTrigger", {
14
14
  enumerable: true,
15
- get: function () { return chunkLVQSG25Y_cjs.fireOrderNotificationTrigger; }
15
+ get: function () { return chunkRHYVNRYG_cjs.fireOrderNotificationTrigger; }
16
16
  });
@@ -1,3 +1,3 @@
1
- export { emitOrderNotificationTrigger, fireOrderNotificationTrigger } from './chunk-6XAVZE4I.js';
1
+ export { emitOrderNotificationTrigger, fireOrderNotificationTrigger } from './chunk-DTUL3Q5L.js';
2
2
  import './chunk-AYWDQFJZ.js';
3
3
  import './chunk-SHUYVCID.js';
@@ -1,4 +1,4 @@
1
- export { ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES, isOrderEligibleForInvoiceEmail, resolveOrderInvoicePdfBytes, streamOrderInvoicePdf } from './chunk-HMLVPIJR.js';
1
+ export { ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES, isOrderEligibleForInvoiceEmail, resolveOrderInvoicePdfBytes, streamOrderInvoicePdf } from './chunk-MWEK7N3F.js';
2
2
  import './chunk-JC6DLWTE.js';
3
- import './chunk-NMYGQWHV.js';
3
+ import './chunk-3VZAAQUV.js';
4
4
  import './chunk-SHUYVCID.js';
@@ -1,25 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var chunkAXMP2U43_cjs = require('./chunk-AXMP2U43.cjs');
3
+ var chunk7L556RGL_cjs = require('./chunk-7L556RGL.cjs');
4
4
  require('./chunk-UPLVMVRX.cjs');
5
- require('./chunk-CTIEAHQL.cjs');
5
+ require('./chunk-JLDHK2QE.cjs');
6
6
  require('./chunk-USNT2KNT.cjs');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES", {
11
11
  enumerable: true,
12
- get: function () { return chunkAXMP2U43_cjs.ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES; }
12
+ get: function () { return chunk7L556RGL_cjs.ORDER_INVOICE_EMAIL_ELIGIBLE_STATUSES; }
13
13
  });
14
14
  Object.defineProperty(exports, "isOrderEligibleForInvoiceEmail", {
15
15
  enumerable: true,
16
- get: function () { return chunkAXMP2U43_cjs.isOrderEligibleForInvoiceEmail; }
16
+ get: function () { return chunk7L556RGL_cjs.isOrderEligibleForInvoiceEmail; }
17
17
  });
18
18
  Object.defineProperty(exports, "resolveOrderInvoicePdfBytes", {
19
19
  enumerable: true,
20
- get: function () { return chunkAXMP2U43_cjs.resolveOrderInvoicePdfBytes; }
20
+ get: function () { return chunk7L556RGL_cjs.resolveOrderInvoicePdfBytes; }
21
21
  });
22
22
  Object.defineProperty(exports, "streamOrderInvoicePdf", {
23
23
  enumerable: true,
24
- get: function () { return chunkAXMP2U43_cjs.streamOrderInvoicePdf; }
24
+ get: function () { return chunk7L556RGL_cjs.streamOrderInvoicePdf; }
25
25
  });