@rovela-ai/sdk 0.14.1 → 0.15.1
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.
- package/dist/admin/api/emails.d.ts +2 -1
- package/dist/admin/api/emails.d.ts.map +1 -1
- package/dist/admin/api/emails.js +215 -34
- package/dist/admin/api/emails.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +2 -1
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/EmailsManager.d.ts.map +1 -1
- package/dist/admin/components/EmailsManager.js +192 -60
- package/dist/admin/components/EmailsManager.js.map +1 -1
- package/dist/admin/components/UsersTable.d.ts.map +1 -1
- package/dist/admin/components/UsersTable.js +15 -9
- package/dist/admin/components/UsersTable.js.map +1 -1
- package/dist/admin/components/emails/BlocksEditor.d.ts +19 -0
- package/dist/admin/components/emails/BlocksEditor.d.ts.map +1 -0
- package/dist/admin/components/emails/BlocksEditor.js +117 -0
- package/dist/admin/components/emails/BlocksEditor.js.map +1 -0
- package/dist/admin/components/emails/CustomerPicker.d.ts +9 -0
- package/dist/admin/components/emails/CustomerPicker.d.ts.map +1 -0
- package/dist/admin/components/emails/CustomerPicker.js +59 -0
- package/dist/admin/components/emails/CustomerPicker.js.map +1 -0
- package/dist/admin/components/emails/EmailPreviewPane.d.ts +14 -0
- package/dist/admin/components/emails/EmailPreviewPane.d.ts.map +1 -0
- package/dist/admin/components/emails/EmailPreviewPane.js +63 -0
- package/dist/admin/components/emails/EmailPreviewPane.js.map +1 -0
- package/dist/admin/components/emails/EmailThemePanel.d.ts +27 -0
- package/dist/admin/components/emails/EmailThemePanel.d.ts.map +1 -0
- package/dist/admin/components/emails/EmailThemePanel.js +25 -0
- package/dist/admin/components/emails/EmailThemePanel.js.map +1 -0
- package/dist/admin/components/emails/FontPicker.d.ts +11 -0
- package/dist/admin/components/emails/FontPicker.d.ts.map +1 -0
- package/dist/admin/components/emails/FontPicker.js +55 -0
- package/dist/admin/components/emails/FontPicker.js.map +1 -0
- package/dist/admin/components/emails/TextBlockEditor.d.ts +7 -0
- package/dist/admin/components/emails/TextBlockEditor.d.ts.map +1 -0
- package/dist/admin/components/emails/TextBlockEditor.js +87 -0
- package/dist/admin/components/emails/TextBlockEditor.js.map +1 -0
- package/dist/core/db/queries.d.ts +38 -29
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +20 -0
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +35 -1
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +4 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/emails/blocks.d.ts +104 -0
- package/dist/emails/blocks.d.ts.map +1 -0
- package/dist/emails/blocks.js +270 -0
- package/dist/emails/blocks.js.map +1 -0
- package/dist/emails/google-fonts.d.ts +13 -0
- package/dist/emails/google-fonts.d.ts.map +1 -0
- package/dist/emails/google-fonts.js +1943 -0
- package/dist/emails/google-fonts.js.map +1 -0
- package/dist/emails/i18n.d.ts.map +1 -1
- package/dist/emails/i18n.js +15 -0
- package/dist/emails/i18n.js.map +1 -1
- package/dist/emails/overrides.d.ts +6 -0
- package/dist/emails/overrides.d.ts.map +1 -1
- package/dist/emails/overrides.js +10 -2
- package/dist/emails/overrides.js.map +1 -1
- package/dist/emails/registry.d.ts +49 -5
- package/dist/emails/registry.d.ts.map +1 -1
- package/dist/emails/registry.js +584 -122
- package/dist/emails/registry.js.map +1 -1
- package/dist/emails/send/auth.d.ts.map +1 -1
- package/dist/emails/send/auth.js +40 -25
- package/dist/emails/send/auth.js.map +1 -1
- package/dist/emails/send/orders.d.ts.map +1 -1
- package/dist/emails/send/orders.js +85 -55
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/templates/base.d.ts +7 -0
- package/dist/emails/templates/base.d.ts.map +1 -1
- package/dist/emails/templates/base.js +34 -12
- package/dist/emails/templates/base.js.map +1 -1
- package/dist/emails/templates/email-verification.d.ts +4 -0
- package/dist/emails/templates/email-verification.d.ts.map +1 -1
- package/dist/emails/templates/email-verification.js +10 -2
- package/dist/emails/templates/email-verification.js.map +1 -1
- package/dist/emails/templates/order-cancelled.d.ts +4 -0
- package/dist/emails/templates/order-cancelled.d.ts.map +1 -1
- package/dist/emails/templates/order-cancelled.js +18 -10
- package/dist/emails/templates/order-cancelled.js.map +1 -1
- package/dist/emails/templates/order-confirmation.d.ts +18 -0
- package/dist/emails/templates/order-confirmation.d.ts.map +1 -1
- package/dist/emails/templates/order-confirmation.js +43 -21
- package/dist/emails/templates/order-confirmation.js.map +1 -1
- package/dist/emails/templates/order-delivered.d.ts +6 -0
- package/dist/emails/templates/order-delivered.d.ts.map +1 -1
- package/dist/emails/templates/order-delivered.js +22 -16
- package/dist/emails/templates/order-delivered.js.map +1 -1
- package/dist/emails/templates/order-ready-for-pickup.d.ts +10 -0
- package/dist/emails/templates/order-ready-for-pickup.d.ts.map +1 -1
- package/dist/emails/templates/order-ready-for-pickup.js +38 -22
- package/dist/emails/templates/order-ready-for-pickup.js.map +1 -1
- package/dist/emails/templates/order-shipped.d.ts +6 -0
- package/dist/emails/templates/order-shipped.d.ts.map +1 -1
- package/dist/emails/templates/order-shipped.js +17 -9
- package/dist/emails/templates/order-shipped.js.map +1 -1
- package/dist/emails/templates/password-reset.d.ts +4 -0
- package/dist/emails/templates/password-reset.d.ts.map +1 -1
- package/dist/emails/templates/password-reset.js +10 -2
- package/dist/emails/templates/password-reset.js.map +1 -1
- package/dist/emails/templates/refund-processed.d.ts +6 -0
- package/dist/emails/templates/refund-processed.d.ts.map +1 -1
- package/dist/emails/templates/refund-processed.js +17 -7
- package/dist/emails/templates/refund-processed.js.map +1 -1
- package/dist/emails/templates/welcome.d.ts +2 -0
- package/dist/emails/templates/welcome.d.ts.map +1 -1
- package/dist/emails/templates/welcome.js +8 -4
- package/dist/emails/templates/welcome.js.map +1 -1
- package/dist/emails/theme.d.ts +35 -12
- package/dist/emails/theme.d.ts.map +1 -1
- package/dist/emails/theme.js +131 -42
- package/dist/emails/theme.js.map +1 -1
- package/package.json +7 -1
|
@@ -57,6 +57,8 @@ function hexToRgba(hex, opacity) {
|
|
|
57
57
|
export const DEFAULT_EMAIL_STYLES = {
|
|
58
58
|
fontFamily: THEME.fontFamily,
|
|
59
59
|
fontName: THEME.fontName,
|
|
60
|
+
headingFontFamily: THEME.fontFamily,
|
|
61
|
+
headingFontName: THEME.fontName,
|
|
60
62
|
backgroundColor: '#F7F7F7',
|
|
61
63
|
cardBackground: '#FFFFFF',
|
|
62
64
|
cardBorder: THEME.colors.neutral200,
|
|
@@ -67,6 +69,8 @@ export const DEFAULT_EMAIL_STYLES = {
|
|
|
67
69
|
textMuted: THEME.colors.neutral800,
|
|
68
70
|
buttonRadius: '12px',
|
|
69
71
|
cardRadius: '24px',
|
|
72
|
+
logoWidth: '180px',
|
|
73
|
+
logoAlign: 'center',
|
|
70
74
|
footerNote: '',
|
|
71
75
|
};
|
|
72
76
|
/**
|
|
@@ -99,8 +103,8 @@ function renderHeader(logoUrl) {
|
|
|
99
103
|
}
|
|
100
104
|
return `
|
|
101
105
|
<tr>
|
|
102
|
-
<td align="
|
|
103
|
-
<img src="${escapeHtml(logoUrl)}" alt="Store Logo" style="max-width:
|
|
106
|
+
<td align="${STYLES.logoAlign}" class="rv-header" style="padding: 48px ${STYLES.logoAlign === 'left' ? '48px' : '32px'} 32px ${STYLES.logoAlign === 'left' ? '48px' : '32px'};">
|
|
107
|
+
<img src="${escapeHtml(logoUrl)}" alt="Store Logo" style="max-width: ${STYLES.logoWidth}; width: auto; height: auto;" />
|
|
104
108
|
</td>
|
|
105
109
|
</tr>
|
|
106
110
|
`;
|
|
@@ -111,7 +115,7 @@ function renderHeader(logoUrl) {
|
|
|
111
115
|
function renderFooter(config) {
|
|
112
116
|
return `
|
|
113
117
|
<tr>
|
|
114
|
-
<td style="padding: 32px 48px; background-color: ${STYLES.footerBackground}; border-top: 1px solid ${STYLES.cardBorder};">
|
|
118
|
+
<td class="rv-footer" style="padding: 32px 48px; background-color: ${STYLES.footerBackground}; border-top: 1px solid ${STYLES.cardBorder};">
|
|
115
119
|
<p style="margin: 0 0 8px 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 500; line-height: 1.5; color: ${STYLES.textMuted}; text-align: center;">
|
|
116
120
|
${escapeHtml(config.storeName)}
|
|
117
121
|
</p>
|
|
@@ -172,9 +176,17 @@ export function baseLayout({ config, title, content }) {
|
|
|
172
176
|
pendingIntro = null;
|
|
173
177
|
pendingOutro = null;
|
|
174
178
|
const wrappedContent = `${intro ? customBlock(intro) : ''}${content}${outro ? customBlock(outro) : ''}`;
|
|
175
|
-
//
|
|
176
|
-
const
|
|
177
|
-
const googleFontsUrl = `https://fonts.googleapis.com/css2
|
|
179
|
+
// Google Fonts URL covering body + heading families (deduped).
|
|
180
|
+
const families = Array.from(new Set([STYLES.fontName, STYLES.headingFontName].filter(Boolean)));
|
|
181
|
+
const googleFontsUrl = `https://fonts.googleapis.com/css2?${families
|
|
182
|
+
.map((f) => `family=${f.replace(/ /g, '+')}:wght@400;500;600;700`)
|
|
183
|
+
.join('&')}&display=swap`;
|
|
184
|
+
// Fluid hybrid layout: the card is width:100% capped at 600px (real phones
|
|
185
|
+
// and the admin mobile preview both reflow instead of clipping), with an
|
|
186
|
+
// MSO ghost table so Outlook desktop still gets a fixed 600px column. The
|
|
187
|
+
// body carries the background full-bleed. Mobile media queries tighten
|
|
188
|
+
// padding + type via the rv-* classes (inline styles win otherwise, hence
|
|
189
|
+
// the !important).
|
|
178
190
|
return `<!DOCTYPE html>
|
|
179
191
|
<html lang="en">
|
|
180
192
|
<head>
|
|
@@ -184,20 +196,30 @@ export function baseLayout({ config, title, content }) {
|
|
|
184
196
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
185
197
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
186
198
|
<link href="${googleFontsUrl}" rel="stylesheet">
|
|
199
|
+
<style>
|
|
200
|
+
@media only screen and (max-width: 480px) {
|
|
201
|
+
.rv-content { padding: 0 24px 40px 24px !important; }
|
|
202
|
+
.rv-header { padding: 32px 24px 24px 24px !important; }
|
|
203
|
+
.rv-footer { padding: 24px 24px !important; }
|
|
204
|
+
h1 { font-size: 24px !important; }
|
|
205
|
+
}
|
|
206
|
+
</style>
|
|
187
207
|
</head>
|
|
188
208
|
<body style="margin: 0; padding: 0; font-family: ${STYLES.fontFamily}; background-color: ${STYLES.backgroundColor};">
|
|
189
|
-
<table width="100%" cellpadding="0" cellspacing="0" style="background-color: ${STYLES.backgroundColor};
|
|
209
|
+
<table width="100%" cellpadding="0" cellspacing="0" style="background-color: ${STYLES.backgroundColor};">
|
|
190
210
|
<tr>
|
|
191
|
-
<td align="center">
|
|
192
|
-
|
|
211
|
+
<td align="center" style="padding: 40px 12px;">
|
|
212
|
+
<!--[if mso]><table width="600" cellpadding="0" cellspacing="0" align="center"><tr><td><![endif]-->
|
|
213
|
+
<table width="100%" cellpadding="0" cellspacing="0" align="center" style="max-width: 600px; width: 100%; background-color: ${STYLES.cardBackground}; border-radius: ${STYLES.cardRadius}; overflow: hidden; border: 1px solid ${STYLES.cardBorder};">
|
|
193
214
|
${renderHeader(config.logoUrl)}
|
|
194
215
|
<tr>
|
|
195
|
-
<td style="padding: 0 48px 48px 48px;">
|
|
216
|
+
<td class="rv-content" style="padding: 0 48px 48px 48px;">
|
|
196
217
|
${wrappedContent}
|
|
197
218
|
</td>
|
|
198
219
|
</tr>
|
|
199
220
|
${renderFooter(config)}
|
|
200
221
|
</table>
|
|
222
|
+
<!--[if mso]></td></tr></table><![endif]-->
|
|
201
223
|
</td>
|
|
202
224
|
</tr>
|
|
203
225
|
</table>
|
|
@@ -225,7 +247,7 @@ export function primaryButton(text, href) {
|
|
|
225
247
|
* Render a heading (h1).
|
|
226
248
|
*/
|
|
227
249
|
export function heading(text) {
|
|
228
|
-
return `<h1 style="margin: 0 0 24px 0; font-family: ${STYLES.
|
|
250
|
+
return `<h1 style="margin: 0 0 24px 0; font-family: ${STYLES.headingFontFamily}; font-size: 30px; font-weight: 700; color: ${STYLES.textPrimary}; text-align: center; line-height: 1.1;">${escapeHtml(text)}</h1>`;
|
|
229
251
|
}
|
|
230
252
|
/**
|
|
231
253
|
* Render a paragraph of text.
|
|
@@ -370,7 +392,7 @@ export function addressSection(title, addressHtml) {
|
|
|
370
392
|
* Render a section heading.
|
|
371
393
|
*/
|
|
372
394
|
export function sectionHeading(text) {
|
|
373
|
-
return `<h3 style="margin: 0 0 16px 0; font-family: ${STYLES.
|
|
395
|
+
return `<h3 style="margin: 0 0 16px 0; font-family: ${STYLES.headingFontFamily}; font-size: 18px; font-weight: 600; color: ${STYLES.textPrimary};">${escapeHtml(text)}</h3>`;
|
|
374
396
|
}
|
|
375
397
|
// Export styles for use in specialized templates
|
|
376
398
|
export { STYLES };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/emails/templates/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;CACb,CAAA;AAEV;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,UAAU,EAAE,4CAA4C;IACxD,QAAQ,EAAE,mBAAmB;CACrB,CAAA;AAEV;;;GAGG;AACH,MAAM,KAAK,GAAG;IACZ,MAAM,EAAE,cAAc;IACtB,UAAU,EAAE,kBAAkB,CAAC,UAAU;IACzC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;CAC7B,CAAA;AAEV,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,OAAe;IAC7C,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,iBAAiB,OAAO,GAAG,CAAA;IAE/C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEjC,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,GAAG,CAAA;AAC7C,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/emails/templates/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,10 @@ import type { EmailVerificationData } from '../types';
|
|
|
20
20
|
* })
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
23
|
+
/** Slot fragment: the verification button (secure tokenized link). */
|
|
24
|
+
export declare function renderVerifyButton(data: Pick<EmailVerificationData, 'verificationLink'>): string;
|
|
25
|
+
/** Slot fragment: copy-paste fallback for the verification link. */
|
|
26
|
+
export declare function renderVerifyLinkFallback(data: Pick<EmailVerificationData, 'verificationLink'>): string;
|
|
23
27
|
export declare function renderEmailVerification(data: EmailVerificationData): string;
|
|
24
28
|
/**
|
|
25
29
|
* Get the subject line for email verification emails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-verification.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/email-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAUrD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CA+B3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
1
|
+
{"version":3,"file":"email-verification.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/email-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAUrD;;;;;;;;;;;;;;;GAeG;AACH,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAEhG;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,GAAG,MAAM,CAEtG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CA+B3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErE"}
|
|
@@ -21,6 +21,14 @@ import { baseLayout, heading, paragraph, primaryButton, linkFallback, } from './
|
|
|
21
21
|
* })
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
+
/** Slot fragment: the verification button (secure tokenized link). */
|
|
25
|
+
export function renderVerifyButton(data) {
|
|
26
|
+
return primaryButton('Verify Email Address', data.verificationLink);
|
|
27
|
+
}
|
|
28
|
+
/** Slot fragment: copy-paste fallback for the verification link. */
|
|
29
|
+
export function renderVerifyLinkFallback(data) {
|
|
30
|
+
return linkFallback(data.verificationLink);
|
|
31
|
+
}
|
|
24
32
|
export function renderEmailVerification(data) {
|
|
25
33
|
const content = `
|
|
26
34
|
${heading('Verify Your Email Address')}
|
|
@@ -29,13 +37,13 @@ export function renderEmailVerification(data) {
|
|
|
29
37
|
|
|
30
38
|
${paragraph(`Thanks for signing up with ${escapeHtml(data.config.storeName)}! To complete your registration and start shopping, please verify your email address by clicking the button below.`, '32px')}
|
|
31
39
|
|
|
32
|
-
${
|
|
40
|
+
${renderVerifyButton(data)}
|
|
33
41
|
|
|
34
42
|
${paragraph(`This link will expire in ${escapeHtml(data.expiryTime)} ${data.expiryTime === '1' ? 'hour' : 'hours'} for security reasons.`, '24px')}
|
|
35
43
|
|
|
36
44
|
${paragraph("If you didn't create an account with us, you can safely ignore this email.", '24px')}
|
|
37
45
|
|
|
38
|
-
${
|
|
46
|
+
${renderVerifyLinkFallback(data)}
|
|
39
47
|
`;
|
|
40
48
|
return baseLayout({
|
|
41
49
|
config: data.config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-verification.js","sourceRoot":"","sources":["../../../src/emails/templates/email-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,QAAQ,CAAA;AAEf;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAA2B;IACjE,MAAM,OAAO,GAAG;MACZ,OAAO,CAAC,2BAA2B,CAAC;;MAEpC,SAAS,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;;MAEjD,SAAS,CACT,8BAA8B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oHAAoH,EACnL,MAAM,CACP;;MAEC,
|
|
1
|
+
{"version":3,"file":"email-verification.js","sourceRoot":"","sources":["../../../src/emails/templates/email-verification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,QAAQ,CAAA;AAEf;;;;;;;;;;;;;;;GAeG;AACH,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,IAAqD;IACtF,OAAO,aAAa,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACrE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CAAC,IAAqD;IAC5F,OAAO,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAA2B;IACjE,MAAM,OAAO,GAAG;MACZ,OAAO,CAAC,2BAA2B,CAAC;;MAEpC,SAAS,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;;MAEjD,SAAS,CACT,8BAA8B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oHAAoH,EACnL,MAAM,CACP;;MAEC,kBAAkB,CAAC,IAAI,CAAC;;MAExB,SAAS,CACT,4BAA4B,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,wBAAwB,EAC7H,MAAM,CACP;;MAEC,SAAS,CACT,4EAA4E,EAC5E,MAAM,CACP;;MAEC,wBAAwB,CAAC,IAAI,CAAC;GACjC,CAAA;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,2BAA2B;QAClC,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,SAAiB;IAC3D,OAAO,+BAA+B,SAAS,EAAE,CAAA;AACnD,CAAC"}
|
|
@@ -22,6 +22,10 @@ import type { OrderCancelledData } from '../types';
|
|
|
22
22
|
* })
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
+
/** Slot fragment: order number + cancelled-on box, incl. the reason line. */
|
|
26
|
+
export declare function renderCancellationDetails(data: Pick<OrderCancelledData, 'orderNumber' | 'cancellationDate' | 'cancellationReason'>): string;
|
|
27
|
+
/** Slot fragment: refund information highlight. */
|
|
28
|
+
export declare function renderRefundInfo(data: Pick<OrderCancelledData, 'refundMessage'>): string;
|
|
25
29
|
export declare function renderOrderCancelled(data: OrderCancelledData): string;
|
|
26
30
|
/**
|
|
27
31
|
* Get the subject line for order cancelled emails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-cancelled.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-cancelled.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAgBlD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"order-cancelled.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-cancelled.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAgBlD;;;;;;;;;;;;;;;;;GAiBG;AACH,6EAA6E;AAC7E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,kBAAkB,GAAG,oBAAoB,CAAC,GACxF,MAAM,CAmBR;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,GAAG,MAAM,CAOxF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAiCrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -26,13 +26,12 @@ import { baseLayout, heading, paragraph, primaryButton, labeledValue, highlightB
|
|
|
26
26
|
* })
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
?
|
|
29
|
+
/** Slot fragment: order number + cancelled-on box, incl. the reason line. */
|
|
30
|
+
export function renderCancellationDetails(data) {
|
|
31
|
+
const reasonRow = data.cancellationReason
|
|
32
|
+
? `<p style="margin: 12px 0 0 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 400; line-height: 1.5; color: ${STYLES.textSecondary};">${escapeHtml(data.cancellationReason)}</p>`
|
|
33
33
|
: '';
|
|
34
|
-
|
|
35
|
-
const orderDetailsBox = `
|
|
34
|
+
return `
|
|
36
35
|
<div style="padding: 24px; background-color: ${STYLES.footerBackground}; border-radius: 16px; border: 1px solid ${STYLES.cardBorder}; margin-bottom: 32px;">
|
|
37
36
|
<table width="100%" cellpadding="0" cellspacing="0">
|
|
38
37
|
${labeledValue('Order Number', `#${data.orderNumber}`, {
|
|
@@ -44,15 +43,24 @@ export function renderOrderCancelled(data) {
|
|
|
44
43
|
borderTop: true,
|
|
45
44
|
})}
|
|
46
45
|
</table>
|
|
46
|
+
${reasonRow}
|
|
47
47
|
</div>
|
|
48
48
|
`;
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
}
|
|
50
|
+
/** Slot fragment: refund information highlight. */
|
|
51
|
+
export function renderRefundInfo(data) {
|
|
52
|
+
return highlightBox(`
|
|
51
53
|
<h3 style="margin: 0 0 12px 0; font-family: ${STYLES.fontFamily}; font-size: 18px; font-weight: 600; color: ${STYLES.textPrimary};">Refund Information</h3>
|
|
52
54
|
<p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 400; line-height: 1.5; color: ${STYLES.textSecondary};">
|
|
53
55
|
${escapeHtml(data.refundMessage)}
|
|
54
56
|
</p>
|
|
55
57
|
`);
|
|
58
|
+
}
|
|
59
|
+
export function renderOrderCancelled(data) {
|
|
60
|
+
// Build cancellation reason text
|
|
61
|
+
const reasonText = data.cancellationReason
|
|
62
|
+
? ` ${escapeHtml(data.cancellationReason)}`
|
|
63
|
+
: '';
|
|
56
64
|
const content = `
|
|
57
65
|
${heading('Order Cancelled')}
|
|
58
66
|
|
|
@@ -60,9 +68,9 @@ export function renderOrderCancelled(data) {
|
|
|
60
68
|
|
|
61
69
|
${paragraph(`Your order #${escapeHtml(data.orderNumber)} has been cancelled as requested.${reasonText}`, '32px')}
|
|
62
70
|
|
|
63
|
-
${
|
|
71
|
+
${renderCancellationDetails({ ...data, cancellationReason: undefined })}
|
|
64
72
|
|
|
65
|
-
${
|
|
73
|
+
${renderRefundInfo(data)}
|
|
66
74
|
|
|
67
75
|
${paragraph("If you have any questions about this cancellation, please don't hesitate to reach out to our support team.", '32px')}
|
|
68
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-cancelled.js","sourceRoot":"","sources":["../../../src/emails/templates/order-cancelled.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"order-cancelled.js","sourceRoot":"","sources":["../../../src/emails/templates/order-cancelled.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CACvC,IAAyF;IAEzF,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB;QACvC,CAAC,CAAC,8CAA8C,MAAM,CAAC,UAAU,iEAAiE,MAAM,CAAC,aAAa,MAAM,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM;QACrM,CAAC,CAAC,EAAE,CAAA;IACN,OAAO;mDAC0C,MAAM,CAAC,gBAAgB,4CAA4C,MAAM,CAAC,UAAU;;UAE7H,YAAY,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;QACrD,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,IAAI;KACnB,CAAC;UACA,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE;QACpD,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,IAAI;KAChB,CAAC;;QAEF,SAAS;;GAEd,CAAA;AACH,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,gBAAgB,CAAC,IAA+C;IAC9E,OAAO,YAAY,CAAC;kDAC4B,MAAM,CAAC,UAAU,+CAA+C,MAAM,CAAC,WAAW;wCAC5F,MAAM,CAAC,UAAU,iEAAiE,MAAM,CAAC,aAAa;QACtI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;;GAEnC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,iCAAiC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB;QACxC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;QAC3C,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,OAAO,GAAG;MACZ,OAAO,CAAC,iBAAiB,CAAC;;MAE1B,SAAS,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;;MAEjD,SAAS,CACT,eAAe,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,oCAAoC,UAAU,EAAE,EAC3F,MAAM,CACP;;MAEC,yBAAyB,CAAC,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;;MAErE,gBAAgB,CAAC,IAAI,CAAC;;MAEtB,SAAS,CACT,4GAA4G,EAC5G,MAAM,CACP;;MAEC,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;GAC1D,CAAA;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE;QAC/C,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,WAAmB;IAEnB,OAAO,sBAAsB,WAAW,MAAM,SAAS,EAAE,CAAA;AAC3D,CAAC"}
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
* Order confirmation email template.
|
|
5
5
|
*/
|
|
6
6
|
import type { OrderConfirmationData } from '../types';
|
|
7
|
+
/** Slot fragment: 'Order Items' section heading + item rows. */
|
|
8
|
+
export declare function renderOrderItemsSection(data: Pick<OrderConfirmationData, 'items'>): string;
|
|
9
|
+
export declare function renderOrderSummary(data: {
|
|
10
|
+
subtotal: string;
|
|
11
|
+
shippingCost: string;
|
|
12
|
+
discount?: string;
|
|
13
|
+
discountCode?: string;
|
|
14
|
+
tax: string;
|
|
15
|
+
total: string;
|
|
16
|
+
}): string;
|
|
7
17
|
/**
|
|
8
18
|
* Render the order confirmation email template.
|
|
9
19
|
*
|
|
@@ -28,6 +38,14 @@ import type { OrderConfirmationData } from '../types';
|
|
|
28
38
|
* })
|
|
29
39
|
* ```
|
|
30
40
|
*/
|
|
41
|
+
/** Slot fragment: order number / date / payment status box. */
|
|
42
|
+
export declare function renderOrderDetailsBox(data: Pick<OrderConfirmationData, 'orderNumber' | 'orderDate' | 'paymentStatus'>): string;
|
|
43
|
+
/** Slot fragment: manual-payment instructions (amber box); '' when absent. */
|
|
44
|
+
export declare function renderPaymentInstructionsBox(data: Pick<OrderConfirmationData, 'paymentInstructions'>): string;
|
|
45
|
+
/** Slot fragment: shipping address (or pickup location on pickup orders). */
|
|
46
|
+
export declare function renderOrderAddress(data: Pick<OrderConfirmationData, 'pickup' | 'shippingAddress'>): string;
|
|
47
|
+
/** Slot fragment: Stripe receipt download button; '' when absent. */
|
|
48
|
+
export declare function renderReceiptButton(data: Pick<OrderConfirmationData, 'receiptUrl'>): string;
|
|
31
49
|
export declare function renderOrderConfirmation(data: OrderConfirmationData): string;
|
|
32
50
|
/**
|
|
33
51
|
* Get the subject line for order confirmation emails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-confirmation.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"order-confirmation.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,UAAU,CAAA;AA4CrE,gEAAgE;AAChE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG,MAAM,CAO1F;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,MAAM,CAsDT;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+DAA+D;AAC/D,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,GAAG,eAAe,CAAC,GAC/E,MAAM,CAiBR;AAED,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,GACvD,MAAM,CAUR;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,iBAAiB,CAAC,GAC9D,MAAM,CAER;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,MAAM,CAE3F;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CA0C3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -30,10 +30,19 @@ function renderOrderItem(item) {
|
|
|
30
30
|
function renderOrderItems(items) {
|
|
31
31
|
return items.map(renderOrderItem).join('');
|
|
32
32
|
}
|
|
33
|
+
/** Slot fragment: 'Order Items' section heading + item rows. */
|
|
34
|
+
export function renderOrderItemsSection(data) {
|
|
35
|
+
return `
|
|
36
|
+
<div style="margin-bottom: 32px;">
|
|
37
|
+
${sectionHeading('Order Items')}
|
|
38
|
+
${renderOrderItems(data.items)}
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
}
|
|
33
42
|
// =============================================================================
|
|
34
43
|
// Order Summary Component
|
|
35
44
|
// =============================================================================
|
|
36
|
-
function renderOrderSummary(data) {
|
|
45
|
+
export function renderOrderSummary(data) {
|
|
37
46
|
// Render discount row only if discount is provided
|
|
38
47
|
const discountRow = data.discount
|
|
39
48
|
? `
|
|
@@ -114,11 +123,9 @@ function renderOrderSummary(data) {
|
|
|
114
123
|
* })
|
|
115
124
|
* ```
|
|
116
125
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// Order details box
|
|
121
|
-
const orderDetailsBox = `
|
|
126
|
+
/** Slot fragment: order number / date / payment status box. */
|
|
127
|
+
export function renderOrderDetailsBox(data) {
|
|
128
|
+
return `
|
|
122
129
|
<div style="padding: 24px; background-color: ${STYLES.footerBackground}; border-radius: 16px; border: 1px solid ${STYLES.cardBorder}; margin-bottom: 32px;">
|
|
123
130
|
<table width="100%" cellpadding="0" cellspacing="0">
|
|
124
131
|
${labeledValueRow({ label: 'Order Number', value: `#${data.orderNumber}` }, { label: 'Order Date', value: data.orderDate }, true)}
|
|
@@ -130,6 +137,31 @@ export function renderOrderConfirmation(data) {
|
|
|
130
137
|
</table>
|
|
131
138
|
</div>
|
|
132
139
|
`;
|
|
140
|
+
}
|
|
141
|
+
/** Slot fragment: manual-payment instructions (amber box); '' when absent. */
|
|
142
|
+
export function renderPaymentInstructionsBox(data) {
|
|
143
|
+
if (!data.paymentInstructions)
|
|
144
|
+
return '';
|
|
145
|
+
return `
|
|
146
|
+
<div style="padding: 20px 24px; background-color: #FFFBEB; border-radius: 12px; border: 1px solid #FDE68A; margin-bottom: 32px;">
|
|
147
|
+
<p style="margin: 0 0 8px 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 600; color: #92400E;">
|
|
148
|
+
Payment Instructions
|
|
149
|
+
</p>
|
|
150
|
+
<p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; line-height: 1.625; color: #92400E; white-space: pre-line;">${escapeHtml(data.paymentInstructions)}</p>
|
|
151
|
+
</div>
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
/** Slot fragment: shipping address (or pickup location on pickup orders). */
|
|
155
|
+
export function renderOrderAddress(data) {
|
|
156
|
+
return addressSection(data.pickup ? 'Pick Up At' : 'Shipping Address', formatAddressHtml(data.shippingAddress));
|
|
157
|
+
}
|
|
158
|
+
/** Slot fragment: Stripe receipt download button; '' when absent. */
|
|
159
|
+
export function renderReceiptButton(data) {
|
|
160
|
+
return data.receiptUrl ? secondaryButton('Download Receipt', data.receiptUrl) : '';
|
|
161
|
+
}
|
|
162
|
+
export function renderOrderConfirmation(data) {
|
|
163
|
+
// Build the badge separately since it needs special positioning
|
|
164
|
+
const badge = statusBadge('Order Confirmed');
|
|
133
165
|
const content = `
|
|
134
166
|
${badge}
|
|
135
167
|
${heading('Thank You for Your Order!')}
|
|
@@ -140,21 +172,11 @@ export function renderOrderConfirmation(data) {
|
|
|
140
172
|
: `we've received your order and we're getting it ready. You'll receive a shipping confirmation email once your order is on its way.`}
|
|
141
173
|
</p>
|
|
142
174
|
|
|
143
|
-
${
|
|
175
|
+
${renderOrderDetailsBox(data)}
|
|
144
176
|
|
|
145
|
-
${data
|
|
146
|
-
<div style="padding: 20px 24px; background-color: #FFFBEB; border-radius: 12px; border: 1px solid #FDE68A; margin-bottom: 32px;">
|
|
147
|
-
<p style="margin: 0 0 8px 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 600; color: #92400E;">
|
|
148
|
-
Payment Instructions
|
|
149
|
-
</p>
|
|
150
|
-
<p style="margin: 0; font-family: ${STYLES.fontFamily}; font-size: 14px; line-height: 1.625; color: #92400E; white-space: pre-line;">${escapeHtml(data.paymentInstructions)}</p>
|
|
151
|
-
</div>
|
|
152
|
-
` : ''}
|
|
177
|
+
${renderPaymentInstructionsBox(data)}
|
|
153
178
|
|
|
154
|
-
|
|
155
|
-
${sectionHeading('Order Items')}
|
|
156
|
-
${renderOrderItems(data.items)}
|
|
157
|
-
</div>
|
|
179
|
+
${renderOrderItemsSection(data)}
|
|
158
180
|
|
|
159
181
|
${renderOrderSummary({
|
|
160
182
|
subtotal: data.subtotal,
|
|
@@ -165,10 +187,10 @@ export function renderOrderConfirmation(data) {
|
|
|
165
187
|
total: data.total,
|
|
166
188
|
})}
|
|
167
189
|
|
|
168
|
-
${
|
|
190
|
+
${renderOrderAddress(data)}
|
|
169
191
|
|
|
170
192
|
${primaryButton('View Order Details', data.orderTrackingUrl)}
|
|
171
|
-
${
|
|
193
|
+
${renderReceiptButton(data)}
|
|
172
194
|
`;
|
|
173
195
|
return baseLayout({
|
|
174
196
|
config: data.config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-confirmation.js","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACd,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEhF,SAAS,eAAe,CAAC,IAAoB;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ;QAC7B,CAAC,CAAC;oBACc,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gGAAgG,MAAM,CAAC,UAAU;YACjL;QACR,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO;;;UAGC,SAAS;;sDAEmC,MAAM,CAAC,UAAU,+CAA+C,MAAM,CAAC,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;sDAC7G,MAAM,CAAC,UAAU,+CAA+C,MAAM,CAAC,aAAa,gBAAgB,IAAI,CAAC,QAAQ;8CACzH,MAAM,CAAC,UAAU,+CAA+C,MAAM,CAAC,WAAW,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;;GAIzJ,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC5C,CAAC;AAED,gFAAgF;AAChF,0BAA0B;AAC1B,gFAAgF;AAEhF,
|
|
1
|
+
{"version":3,"file":"order-confirmation.js","sourceRoot":"","sources":["../../../src/emails/templates/order-confirmation.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,12 @@ import type { OrderDeliveredData } from '../types';
|
|
|
23
23
|
* })
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
|
+
/** Slot fragment: order number / delivered-on / location box. */
|
|
27
|
+
export declare function renderDeliveryDetails(data: Pick<OrderDeliveredData, 'orderNumber' | 'deliveryDate' | 'deliveryLocation'>): string;
|
|
28
|
+
/** Slot fragment: review request highlight; '' when no review URL. */
|
|
29
|
+
export declare function renderReviewRequest(data: Pick<OrderDeliveredData, 'reviewUrl'>): string;
|
|
30
|
+
/** Slot fragment: return-center prompt + button; '' when absent. */
|
|
31
|
+
export declare function renderReturnCenter(data: Pick<OrderDeliveredData, 'returnCenterUrl'>): string;
|
|
26
32
|
export declare function renderOrderDelivered(data: OrderDeliveredData): string;
|
|
27
33
|
/**
|
|
28
34
|
* Get the subject line for order delivered emails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-delivered.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-delivered.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAkBlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"order-delivered.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-delivered.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAkBlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,iEAAiE;AACjE,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,GAAG,cAAc,GAAG,kBAAkB,CAAC,GAClF,MAAM,CAqBR;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,MAAM,CAevF;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAG5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAyBrE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -27,16 +27,15 @@ import { baseLayout, statusBadge, heading, primaryButton, secondaryButton, label
|
|
|
27
27
|
* })
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// Delivery details box - only show deliveryLocation if provided
|
|
30
|
+
/** Slot fragment: order number / delivered-on / location box. */
|
|
31
|
+
export function renderDeliveryDetails(data) {
|
|
33
32
|
const deliveryLocationRow = data.deliveryLocation
|
|
34
33
|
? labeledValue('Delivered To', data.deliveryLocation, {
|
|
35
34
|
valueSize: '16px',
|
|
36
35
|
borderTop: true,
|
|
37
36
|
})
|
|
38
37
|
: '';
|
|
39
|
-
|
|
38
|
+
return `
|
|
40
39
|
<div style="padding: 24px; background-color: ${STYLES.footerBackground}; border-radius: 16px; border: 1px solid ${STYLES.cardBorder}; margin-bottom: 32px;">
|
|
41
40
|
<table width="100%" cellpadding="0" cellspacing="0">
|
|
42
41
|
${labeledValue('Order Number', `#${data.orderNumber}`, { borderBottom: !data.deliveryLocation })}
|
|
@@ -49,9 +48,12 @@ export function renderOrderDelivered(data) {
|
|
|
49
48
|
</table>
|
|
50
49
|
</div>
|
|
51
50
|
`;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
}
|
|
52
|
+
/** Slot fragment: review request highlight; '' when no review URL. */
|
|
53
|
+
export function renderReviewRequest(data) {
|
|
54
|
+
if (!data.reviewUrl)
|
|
55
|
+
return '';
|
|
56
|
+
return highlightBox(`
|
|
55
57
|
<h3 style="margin: 0 0 12px 0; font-family: ${STYLES.fontFamily}; font-size: 20px; font-weight: 600; color: ${STYLES.textPrimary}; text-align: center;">How's Everything?</h3>
|
|
56
58
|
<p style="margin: 0 0 20px 0; font-family: ${STYLES.fontFamily}; font-size: 14px; font-weight: 400; line-height: 1.5; color: ${STYLES.textSecondary}; text-align: center;">
|
|
57
59
|
We'd love to hear your feedback! Your review helps other customers and helps us improve.
|
|
@@ -63,12 +65,16 @@ export function renderOrderDelivered(data) {
|
|
|
63
65
|
</td>
|
|
64
66
|
</tr>
|
|
65
67
|
</table>
|
|
66
|
-
`)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
`);
|
|
69
|
+
}
|
|
70
|
+
/** Slot fragment: return-center prompt + button; '' when absent. */
|
|
71
|
+
export function renderReturnCenter(data) {
|
|
72
|
+
if (!data.returnCenterUrl)
|
|
73
|
+
return '';
|
|
74
|
+
return `${paragraph('Need to return or exchange something?', '16px')}${secondaryButton('Visit Return Center', data.returnCenterUrl)}`;
|
|
75
|
+
}
|
|
76
|
+
export function renderOrderDelivered(data) {
|
|
77
|
+
const badge = statusBadge('Delivered');
|
|
72
78
|
const content = `
|
|
73
79
|
${badge}
|
|
74
80
|
${heading('Your Order Has Been Delivered!')}
|
|
@@ -77,11 +83,11 @@ export function renderOrderDelivered(data) {
|
|
|
77
83
|
Hi ${escapeHtml(data.customerName)}, your order has been successfully delivered. We hope you love your purchase!
|
|
78
84
|
</p>
|
|
79
85
|
|
|
80
|
-
${
|
|
86
|
+
${renderDeliveryDetails(data)}
|
|
81
87
|
|
|
82
|
-
${
|
|
88
|
+
${renderReviewRequest(data)}
|
|
83
89
|
|
|
84
|
-
${
|
|
90
|
+
${renderReturnCenter(data)}
|
|
85
91
|
|
|
86
92
|
${primaryButton('Continue Shopping', data.config.shopUrl)}
|
|
87
93
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-delivered.js","sourceRoot":"","sources":["../../../src/emails/templates/order-delivered.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,
|
|
1
|
+
{"version":3,"file":"order-delivered.js","sourceRoot":"","sources":["../../../src/emails/templates/order-delivered.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,MAAM,GACP,MAAM,QAAQ,CAAA;AAEf,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;GAkBG;AACH,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CACnC,IAAmF;IAEnF,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB;QAC/C,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAClD,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,IAAI;SAChB,CAAC;QACJ,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO;mDAC0C,MAAM,CAAC,gBAAgB,4CAA4C,MAAM,CAAC,UAAU;;UAE7H,YAAY,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;UAC9F,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE;QAChD,UAAU,EAAE,MAAM,CAAC,YAAY;QAC/B,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB;KACtC,CAAC;UACA,mBAAmB;;;GAG1B,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,IAA2C;IAC7E,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAC9B,OAAO,YAAY,CAAC;sDACgC,MAAM,CAAC,UAAU,+CAA+C,MAAM,CAAC,WAAW;qDACnF,MAAM,CAAC,UAAU,iEAAiE,MAAM,CAAC,aAAa;;;;;;yBAMlI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,yEAAyE,MAAM,CAAC,YAAY,8EAA8E,MAAM,CAAC,UAAU;;;;OAIvO,CAAC,CAAA;AACR,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,kBAAkB,CAAC,IAAiD;IAClF,IAAI,CAAC,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAA;IACpC,OAAO,GAAG,SAAS,CAAC,uCAAuC,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,qBAAqB,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAA;AACvI,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IAEtC,MAAM,OAAO,GAAG;MACZ,KAAK;MACL,OAAO,CAAC,gCAAgC,CAAC;;iDAEE,MAAM,CAAC,UAAU,mEAAmE,MAAM,CAAC,aAAa;WAC9I,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;;;MAGlC,qBAAqB,CAAC,IAAI,CAAC;;MAE3B,mBAAmB,CAAC,IAAI,CAAC;;MAEzB,kBAAkB,CAAC,IAAI,CAAC;;MAExB,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;GAC1D,CAAA;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE;QAC/C,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,WAAmB;IAEnB,OAAO,oCAAoC,WAAW,MAAM,SAAS,EAAE,CAAA;AACzE,CAAC"}
|
|
@@ -9,6 +9,16 @@ import type { OrderReadyForPickupData } from '../types';
|
|
|
9
9
|
/**
|
|
10
10
|
* Render the ready-for-pickup email template.
|
|
11
11
|
*/
|
|
12
|
+
/** Slot fragment: order number + pickup location box. */
|
|
13
|
+
export declare function renderPickupOrderInfo(data: Pick<OrderReadyForPickupData, 'orderNumber' | 'locationName'>): string;
|
|
14
|
+
/** Slot fragment: 'Pick Up At' address section. */
|
|
15
|
+
export declare function renderPickupLocation(data: Pick<OrderReadyForPickupData, 'pickupAddress'>): string;
|
|
16
|
+
/** Slot fragment: opening-hours highlight; '' when the location has none. */
|
|
17
|
+
export declare function renderOpeningHours(data: Pick<OrderReadyForPickupData, 'openingHoursLines'>): string;
|
|
18
|
+
/** Slot fragment: merchant pickup instructions; '' when absent. */
|
|
19
|
+
export declare function renderPickupInstructions(data: Pick<OrderReadyForPickupData, 'pickupInstructions'>): string;
|
|
20
|
+
/** Slot fragment: store phone line; '' when absent. */
|
|
21
|
+
export declare function renderPickupPhoneLine(data: Pick<OrderReadyForPickupData, 'locationPhone'>): string;
|
|
12
22
|
export declare function renderOrderReadyForPickup(data: OrderReadyForPickupData): string;
|
|
13
23
|
/**
|
|
14
24
|
* Get the subject line for ready-for-pickup emails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-ready-for-pickup.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-ready-for-pickup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAiBvD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"order-ready-for-pickup.d.ts","sourceRoot":"","sources":["../../../src/emails/templates/order-ready-for-pickup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAiBvD;;GAEG;AACH,yDAAyD;AACzD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,aAAa,GAAG,cAAc,CAAC,GAClE,MAAM,CAaR;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GAAG,MAAM,CAEjG;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,GAAG,MAAM,CAWnG;AAED,mEAAmE;AACnE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,GAAG,MAAM,CAQ1G;AAED,uDAAuD;AACvD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GAAG,MAAM,CAOlG;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,CA6B/E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
|