@learncard/email-templates 1.0.3 → 1.0.5

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 (97) hide show
  1. package/dist/components/Layout.d.ts +2 -0
  2. package/dist/components/Layout.d.ts.map +1 -1
  3. package/dist/components/Layout.js +6 -1
  4. package/dist/components/Layout.js.map +1 -1
  5. package/dist/components/LinkFallback.d.ts +2 -0
  6. package/dist/components/LinkFallback.d.ts.map +1 -1
  7. package/dist/components/LinkFallback.js +5 -1
  8. package/dist/components/LinkFallback.js.map +1 -1
  9. package/dist/i18n.d.ts +52 -0
  10. package/dist/i18n.d.ts.map +1 -0
  11. package/dist/i18n.js +77 -0
  12. package/dist/i18n.js.map +1 -0
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/render.d.ts +3 -1
  18. package/dist/render.d.ts.map +1 -1
  19. package/dist/render.js +33 -30
  20. package/dist/render.js.map +1 -1
  21. package/dist/sms.d.ts +6 -3
  22. package/dist/sms.d.ts.map +1 -1
  23. package/dist/sms.js +43 -7
  24. package/dist/sms.js.map +1 -1
  25. package/dist/templates/account-approved.d.ts +3 -1
  26. package/dist/templates/account-approved.d.ts.map +1 -1
  27. package/dist/templates/account-approved.js +55 -5
  28. package/dist/templates/account-approved.js.map +1 -1
  29. package/dist/templates/credential-awaiting-guardian.d.ts +3 -1
  30. package/dist/templates/credential-awaiting-guardian.d.ts.map +1 -1
  31. package/dist/templates/credential-awaiting-guardian.js +54 -4
  32. package/dist/templates/credential-awaiting-guardian.js.map +1 -1
  33. package/dist/templates/email-verification.d.ts +3 -1
  34. package/dist/templates/email-verification.d.ts.map +1 -1
  35. package/dist/templates/email-verification.js +57 -4
  36. package/dist/templates/email-verification.js.map +1 -1
  37. package/dist/templates/endorsement-request.d.ts +3 -1
  38. package/dist/templates/endorsement-request.d.ts.map +1 -1
  39. package/dist/templates/endorsement-request.js +53 -5
  40. package/dist/templates/endorsement-request.js.map +1 -1
  41. package/dist/templates/guardian-approval.d.ts +3 -1
  42. package/dist/templates/guardian-approval.d.ts.map +1 -1
  43. package/dist/templates/guardian-approval.js +55 -5
  44. package/dist/templates/guardian-approval.js.map +1 -1
  45. package/dist/templates/guardian-approved-claim.d.ts +3 -1
  46. package/dist/templates/guardian-approved-claim.d.ts.map +1 -1
  47. package/dist/templates/guardian-approved-claim.js +50 -4
  48. package/dist/templates/guardian-approved-claim.js.map +1 -1
  49. package/dist/templates/guardian-credential-approval.d.ts +3 -1
  50. package/dist/templates/guardian-credential-approval.d.ts.map +1 -1
  51. package/dist/templates/guardian-credential-approval.js +50 -4
  52. package/dist/templates/guardian-credential-approval.js.map +1 -1
  53. package/dist/templates/guardian-email-otp.d.ts +3 -1
  54. package/dist/templates/guardian-email-otp.d.ts.map +1 -1
  55. package/dist/templates/guardian-email-otp.js +55 -5
  56. package/dist/templates/guardian-email-otp.js.map +1 -1
  57. package/dist/templates/guardian-rejected-credential.d.ts +3 -1
  58. package/dist/templates/guardian-rejected-credential.d.ts.map +1 -1
  59. package/dist/templates/guardian-rejected-credential.js +45 -3
  60. package/dist/templates/guardian-rejected-credential.js.map +1 -1
  61. package/dist/templates/inbox-claim.d.ts +3 -1
  62. package/dist/templates/inbox-claim.d.ts.map +1 -1
  63. package/dist/templates/inbox-claim.js +63 -11
  64. package/dist/templates/inbox-claim.js.map +1 -1
  65. package/dist/templates/recovery-key.d.ts +3 -1
  66. package/dist/templates/recovery-key.d.ts.map +1 -1
  67. package/dist/templates/recovery-key.js +59 -3
  68. package/dist/templates/recovery-key.js.map +1 -1
  69. package/dist/templates/verification-code.d.ts +3 -1
  70. package/dist/templates/verification-code.d.ts.map +1 -1
  71. package/dist/templates/verification-code.js +153 -17
  72. package/dist/templates/verification-code.js.map +1 -1
  73. package/dist/tenant-registry.d.ts.map +1 -1
  74. package/dist/tenant-registry.js +17 -0
  75. package/dist/tenant-registry.js.map +1 -1
  76. package/package.json +1 -1
  77. package/src/__tests__/i18n.test.ts +329 -0
  78. package/src/__tests__/tenant-registry.test.ts +24 -0
  79. package/src/components/Layout.tsx +69 -60
  80. package/src/components/LinkFallback.tsx +19 -11
  81. package/src/i18n.ts +110 -0
  82. package/src/index.ts +15 -2
  83. package/src/render.ts +47 -28
  84. package/src/sms.ts +61 -6
  85. package/src/templates/account-approved.tsx +82 -29
  86. package/src/templates/credential-awaiting-guardian.tsx +113 -19
  87. package/src/templates/email-verification.tsx +87 -16
  88. package/src/templates/endorsement-request.tsx +142 -17
  89. package/src/templates/guardian-approval.tsx +106 -16
  90. package/src/templates/guardian-approved-claim.tsx +137 -17
  91. package/src/templates/guardian-credential-approval.tsx +112 -17
  92. package/src/templates/guardian-email-otp.tsx +103 -25
  93. package/src/templates/guardian-rejected-credential.tsx +137 -15
  94. package/src/templates/inbox-claim.tsx +180 -29
  95. package/src/templates/recovery-key.tsx +126 -30
  96. package/src/templates/verification-code.tsx +204 -38
  97. package/src/tenant-registry.ts +24 -2
package/dist/sms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sms.js","sourceRoot":"","sources":["../src/sms.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwB7C,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACrB,UAAa,EACb,QAAkD,EAClD,IAA2B;IAE3B,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE3C,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,IAAyB,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI,YAAY,CAAC;YACpD,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI,oBAAoB,CAAC;YAC5D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAEpE,OAAO,GAAG,QAAQ,kBAAkB,QAAQ,MAAM,QAAQ,IAAI,UAAU,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5G,CAAC;QAED,KAAK,6BAA6B,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,IAA2B,CAAC;YAEtC,OAAO,QAAQ,QAAQ,CAAC,SAAS,0BAA0B,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACrF,CAAC;QAED;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sms.js","sourceRoot":"","sources":["../src/sms.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,10 @@ export interface AccountApprovedProps {
10
10
  user?: {
11
11
  displayName?: string;
12
12
  };
13
+ /** Recipient locale (BCP-47). Defaults to English. */
14
+ locale?: string;
13
15
  }
14
16
  export declare const AccountApproved: React.FC<AccountApprovedProps>;
15
- export declare const getAccountApprovedSubject: (branding: TenantBranding) => string;
17
+ export declare const getAccountApprovedSubject: (branding: TenantBranding, locale?: string) => string;
16
18
  export default function Preview(): React.JSX.Element;
17
19
  //# sourceMappingURL=account-approved.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-approved.d.ts","sourceRoot":"","sources":["../../src/templates/account-approved.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACL;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAsC1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAAc,cAAc,KAAG,MACX,CAAC;AAmC3D,MAAM,CAAC,OAAO,UAAU,OAAO,sBAO9B"}
1
+ {"version":3,"file":"account-approved.d.ts","sourceRoot":"","sources":["../../src/templates/account-approved.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AA+DD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA+B1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAAc,cAAc,WAAW,MAAM,KAAG,MACjB,CAAC;AAmCtE,MAAM,CAAC,OAAO,UAAU,OAAO,sBAE9B"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * AccountApproved — email sent when a user's account has been approved.
4
4
  *
@@ -8,11 +8,61 @@ import { Text, Section } from '@react-email/components';
8
8
  import { DEFAULT_BRANDING } from '../branding';
9
9
  import { Layout } from '../components/Layout';
10
10
  import { EmailButton } from '../components/EmailButton';
11
- export const AccountApproved = ({ branding, user, }) => {
11
+ import { resolveCatalogLocale, interpolate, SHARED } from '../i18n';
12
+ const STRINGS = {
13
+ en: {
14
+ preview: b => `Your ${b} account has been approved!`,
15
+ heading: b => `Your ${b} account has been approved!`,
16
+ greeting: name => `Hello ${name},`,
17
+ body1: b => `Your ${b} account has been approved by your guardian/parent.`,
18
+ body2: '{brandName} is a private, digital passport for learning and work. It lets users securely collect and share their verified skills and achievements online.',
19
+ ctaInstruction: 'Please click the button below to login to your account.',
20
+ button: b => `Login to ${b} \u2192`,
21
+ thankYou: 'Thank you,',
22
+ subject: b => `Your ${b} account has been approved`,
23
+ },
24
+ es: {
25
+ preview: b => `¡Tu cuenta de ${b} ha sido aprobada!`,
26
+ heading: b => `¡Tu cuenta de ${b} ha sido aprobada!`,
27
+ greeting: name => `Hola ${name},`,
28
+ body1: b => `Tu cuenta de ${b} ha sido aprobada por tu tutor o progenitor.`,
29
+ body2: '{brandName} es un pasaporte digital y privado para el aprendizaje y el trabajo. Permite a los usuarios recopilar y compartir de forma segura sus habilidades y logros verificados en línea.',
30
+ ctaInstruction: 'Haz clic en el botón siguiente para iniciar sesión en tu cuenta.',
31
+ button: b => `Iniciar sesión en ${b} \u2192`,
32
+ thankYou: 'Gracias,',
33
+ subject: b => `Tu cuenta de ${b} ha sido aprobada`,
34
+ },
35
+ fr: {
36
+ preview: b => `Votre compte ${b} a été approuvé !`,
37
+ heading: b => `Votre compte ${b} a été approuvé !`,
38
+ greeting: name => `Bonjour ${name},`,
39
+ body1: b => `Votre compte ${b} a été approuvé par votre tuteur ou parent.`,
40
+ body2: '{brandName} est un passeport numérique privé pour l\u2019apprentissage et le travail. Il permet aux utilisateurs de collecter et de partager en toute sécurité leurs compétences et réalisations vérifiées en ligne.',
41
+ ctaInstruction: 'Veuillez cliquer sur le bouton ci-dessous pour vous connecter à votre compte.',
42
+ button: b => `Se connecter à ${b} \u2192`,
43
+ thankYou: 'Merci,',
44
+ subject: b => `Votre compte ${b} a été approuvé`,
45
+ },
46
+ ar: {
47
+ preview: b => `تمت الموافقة على حسابك في ${b}!`,
48
+ heading: b => `تمت الموافقة على حسابك في ${b}!`,
49
+ greeting: name => `مرحبًا ${name}،`,
50
+ body1: b => `تمت الموافقة على حسابك في ${b} من قبل ولي أمرك.`,
51
+ body2: '{brandName} هو جواز سفر رقمي خاص للتعلّم والعمل. يتيح للمستخدمين جمع ومشاركة مهاراتهم وإنجازاتهم الموثّقة بأمان عبر الإنترنت.',
52
+ ctaInstruction: 'يرجى النقر على الزر أدناه لتسجيل الدخول إلى حسابك.',
53
+ button: b => `تسجيل الدخول إلى ${b} ←`,
54
+ thankYou: 'شكرًا،',
55
+ subject: b => `تمت الموافقة على حسابك في ${b}`,
56
+ },
57
+ };
58
+ export const AccountApproved = ({ branding, user, locale }) => {
59
+ const s = STRINGS[resolveCatalogLocale(locale)];
12
60
  const name = user?.displayName ?? 'there';
13
- return (_jsxs(Layout, { branding: branding, preview: `Your ${branding.brandName} account has been approved!`, children: [_jsxs(Text, { style: heading, children: ["Your ", branding.brandName, " account has been approved!"] }), _jsxs(Text, { style: paragraph, children: ["Hello ", name, ","] }), _jsxs(Text, { style: paragraph, children: ["Your ", branding.brandName, " account has been approved by your guardian/parent."] }), _jsxs(Text, { style: paragraph, children: [branding.brandName, " is a private, digital passport for learning and work. It lets users securely collect and share their verified skills and achievements online."] }), _jsx(Text, { style: paragraph, children: "Please click the button below to login to your account." }), _jsx(Section, { style: buttonWrapper, children: _jsxs(EmailButton, { href: branding.appUrl, branding: branding, children: ["Login to ", branding.brandName, " \u2192"] }) }), _jsxs(Text, { style: signOff, children: ["Thank you,", _jsx("br", {}), "The ", branding.brandName, " Team"] })] }));
61
+ return (_jsxs(Layout, { branding: branding, locale: locale, preview: s.preview(branding.brandName), children: [_jsx(Text, { style: heading, children: s.heading(branding.brandName) }), _jsx(Text, { style: paragraph, children: s.greeting(name) }), _jsx(Text, { style: paragraph, children: s.body1(branding.brandName) }), _jsx(Text, { style: paragraph, children: interpolate(s.body2, { brandName: branding.brandName }) }), _jsx(Text, { style: paragraph, children: s.ctaInstruction }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: branding.appUrl, branding: branding, children: s.button(branding.brandName) }) }), _jsxs(Text, { style: signOff, children: [s.thankYou, _jsx("br", {}), interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
62
+ brandName: branding.brandName,
63
+ })] })] }));
14
64
  };
15
- export const getAccountApprovedSubject = (branding) => `Your ${branding.brandName} account has been approved`;
65
+ export const getAccountApprovedSubject = (branding, locale) => STRINGS[resolveCatalogLocale(locale)].subject(branding.brandName);
16
66
  // ---------------------------------------------------------------------------
17
67
  // Styles
18
68
  // ---------------------------------------------------------------------------
@@ -41,6 +91,6 @@ const signOff = {
41
91
  // Preview
42
92
  // ---------------------------------------------------------------------------
43
93
  export default function Preview() {
44
- return (_jsx(AccountApproved, { branding: DEFAULT_BRANDING, user: { displayName: 'Jane Doe' } }));
94
+ return _jsx(AccountApproved, { branding: DEFAULT_BRANDING, user: { displayName: 'Jane Doe' } });
45
95
  }
46
96
  //# sourceMappingURL=account-approved.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account-approved.js","sourceRoot":"","sources":["../../src/templates/account-approved.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AASxD,MAAM,CAAC,MAAM,eAAe,GAAmC,CAAC,EAC5D,QAAQ,EACR,IAAI,GACP,EAAE,EAAE;IACD,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,IAAI,OAAO,CAAC;IAE1C,OAAO,CACH,MAAC,MAAM,IAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,QAAQ,CAAC,SAAS,6BAA6B,aACxF,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,sBAAQ,QAAQ,CAAC,SAAS,mCAAmC,EAEjF,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,uBACX,IAAI,SACR,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,sBACZ,QAAQ,CAAC,SAAS,2DACrB,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,aACjB,QAAQ,CAAC,SAAS,sJAEhB,EAEP,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,wEAEf,EAEP,KAAC,OAAO,IAAC,KAAK,EAAE,aAAa,YACzB,MAAC,WAAW,IAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,0BACxC,QAAQ,CAAC,SAAS,eAClB,GACR,EAEV,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,2BACN,cAAM,UAAK,QAAQ,CAAC,SAAS,aACpC,IACF,CACZ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAwB,EAAU,EAAE,CAC1E,QAAQ,QAAQ,CAAC,SAAS,4BAA4B,CAAC;AAE3D,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,OAAO,GAAwB;IACjC,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,SAAS,GAAwB;IACnC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,aAAa,GAAwB;IACvC,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,OAAO,GAAwB;IACjC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,OAAO,UAAU,OAAO;IAC3B,OAAO,CACH,KAAC,eAAe,IACZ,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GACnC,CACL,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"account-approved.js","sourceRoot":"","sources":["../../src/templates/account-approved.tsx"],"names":[],"mappings":"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"}
@@ -18,8 +18,10 @@ export interface CredentialAwaitingGuardianProps {
18
18
  recipient?: {
19
19
  email?: string;
20
20
  };
21
+ /** Recipient locale (BCP-47). Defaults to English. */
22
+ locale?: string;
21
23
  }
22
24
  export declare const CredentialAwaitingGuardian: React.FC<CredentialAwaitingGuardianProps>;
23
- export declare const getCredentialAwaitingGuardianSubject: (_branding: TenantBranding) => string;
25
+ export declare const getCredentialAwaitingGuardianSubject: (_branding: TenantBranding, locale?: string) => string;
24
26
  export default function Preview(): React.JSX.Element;
25
27
  //# sourceMappingURL=credential-awaiting-guardian.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential-awaiting-guardian.d.ts","sourceRoot":"","sources":["../../src/templates/credential-awaiting-guardian.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,MAAM,WAAW,+BAA+B;IAC5C,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAwChF,CAAC;AAEF,eAAO,MAAM,oCAAoC,cAClC,cAAc,KAC1B,MAAwD,CAAC;AAsD5D,MAAM,CAAC,OAAO,UAAU,OAAO,sBAS9B"}
1
+ {"version":3,"file":"credential-awaiting-guardian.d.ts","sourceRoot":"","sources":["../../src/templates/credential-awaiting-guardian.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,MAAM,WAAW,+BAA+B;IAC5C,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAsFD,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA6ChF,CAAC;AAEF,eAAO,MAAM,oCAAoC,cAClC,cAAc,WAChB,MAAM,KAChB,MAAuD,CAAC;AAsD3D,MAAM,CAAC,OAAO,UAAU,OAAO,sBAS9B"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * CredentialAwaitingGuardian — email sent to a student/recipient when their
4
4
  * credential is pending guardian approval.
@@ -9,12 +9,62 @@ import { Text, Section } from '@react-email/components';
9
9
  import { DEFAULT_BRANDING } from '../branding';
10
10
  import { Layout } from '../components/Layout';
11
11
  import { IssuerLogo } from '../components/IssuerLogo';
12
- export const CredentialAwaitingGuardian = ({ branding, issuer, credential, }) => {
12
+ import { resolveCatalogLocale, interpolate, SHARED } from '../i18n';
13
+ const STRINGS = {
14
+ en: {
15
+ preview: c => `Your credential "${c}" is pending guardian approval`,
16
+ heading: 'Pending guardian approval',
17
+ greeting: 'Hi there,',
18
+ body1: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " has sent you the credential", ' ', _jsxs("strong", { children: ["\u201C", credentialName, "\u201D"] }), "."] })),
19
+ body2: b => `Before you can claim it, your guardian needs to review and approve it first. We\u2019ve already sent them a notification \u2014 once they approve, you\u2019ll receive a follow-up email and the credential will appear in your ${b} account.`,
20
+ statusBadge: 'Awaiting Guardian Approval',
21
+ muted: 'No action is needed from you right now.',
22
+ sincerely: 'Sincerely,',
23
+ subject: 'Your Credential Is Pending Guardian Approval',
24
+ },
25
+ es: {
26
+ preview: c => `Tu credencial "${c}" está pendiente de aprobación del tutor`,
27
+ heading: 'Pendiente de aprobación del tutor',
28
+ greeting: 'Hola,',
29
+ body1: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " te ha enviado la credencial", ' ', _jsxs("strong", { children: ["\u201C", credentialName, "\u201D"] }), "."] })),
30
+ body2: b => `Antes de poder reclamarla, tu tutor debe revisarla y aprobarla primero. Ya le hemos enviado una notificación \u2014 cuando la apruebe, recibirás un correo de seguimiento y la credencial aparecerá en tu cuenta de ${b}.`,
31
+ statusBadge: 'Pendiente de aprobación del tutor',
32
+ muted: 'No necesitas realizar ninguna acción en este momento.',
33
+ sincerely: 'Atentamente,',
34
+ subject: 'Tu credencial está pendiente de aprobación del tutor',
35
+ },
36
+ fr: {
37
+ preview: c => `Votre titre « ${c} » est en attente d\u2019approbation du tuteur`,
38
+ heading: 'En attente d\u2019approbation du tuteur',
39
+ greeting: 'Bonjour,',
40
+ body1: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " vous a envoy\u00E9 le titre", ' ', _jsxs("strong", { children: ["\u00AB\u00A0", credentialName, "\u00A0\u00BB"] }), "."] })),
41
+ body2: b => `Avant de pouvoir le réclamer, votre tuteur doit d\u2019abord le vérifier et l\u2019approuver. Nous lui avons déjà envoyé une notification \u2014 une fois qu\u2019il aura approuvé, vous recevrez un e-mail de suivi et le titre apparaîtra dans votre compte ${b}.`,
42
+ statusBadge: 'En attente d\u2019approbation du tuteur',
43
+ muted: 'Aucune action n\u2019est requise de votre part pour le moment.',
44
+ sincerely: 'Cordialement,',
45
+ subject: 'Votre titre est en attente d\u2019approbation du tuteur',
46
+ },
47
+ ar: {
48
+ preview: c => `شهادتك "${c}" بانتظار موافقة ولي الأمر`,
49
+ heading: 'بانتظار موافقة ولي الأمر',
50
+ greeting: 'مرحبًا،',
51
+ body1: (issuerName, credentialName) => (_jsxs(_Fragment, { children: ["\u0623\u0631\u0633\u0644 \u0644\u0643 ", _jsx("strong", { children: issuerName }), " \u0627\u0644\u0634\u0647\u0627\u062F\u0629", ' ', _jsxs("strong", { children: ["\u00AB", credentialName, "\u00BB"] }), "."] })),
52
+ body2: b => `قبل أن تتمكن من المطالبة بها، يجب على ولي أمرك مراجعتها والموافقة عليها أولاً. لقد أرسلنا إليه إشعارًا بالفعل \u2014 بمجرد موافقته، ستتلقى رسالة متابعة وستظهر الشهادة في حسابك على ${b}.`,
53
+ statusBadge: 'بانتظار موافقة ولي الأمر',
54
+ muted: 'لا حاجة لأي إجراء منك في الوقت الحالي.',
55
+ sincerely: 'مع التحيات،',
56
+ subject: 'شهادتك بانتظار موافقة ولي الأمر',
57
+ },
58
+ };
59
+ export const CredentialAwaitingGuardian = ({ branding, issuer, credential, locale, }) => {
60
+ const s = STRINGS[resolveCatalogLocale(locale)];
13
61
  const issuerName = issuer?.name ?? 'An issuer';
14
62
  const credentialName = credential?.name ?? 'a credential';
15
- return (_jsxs(Layout, { branding: branding, preview: `Your credential "${credentialName}" is pending guardian approval`, showHeaderLogo: false, children: [_jsx(IssuerLogo, { logoUrl: issuer?.logoUrl, alt: issuerName ? `${issuerName} logo` : undefined }), _jsx(Text, { style: heading, children: "Pending guardian approval" }), _jsx(Text, { style: paragraph, children: "Hi there," }), _jsxs(Text, { style: paragraph, children: [_jsx("strong", { children: issuerName }), " has sent you the credential", ' ', _jsxs("strong", { children: ["\u201C", credentialName, "\u201D"] }), "."] }), _jsxs(Text, { style: paragraph, children: ["Before you can claim it, your guardian needs to review and approve it first. We've already sent them a notification \u2014 once they approve, you'll receive a follow-up email and the credential will appear in your ", branding.brandName, " account."] }), _jsx(Section, { style: statusBadge, children: _jsx(Text, { style: statusText, children: "Awaiting Guardian Approval" }) }), _jsx(Text, { style: muted, children: "No action is needed from you right now." }), _jsxs(Text, { style: signOff, children: ["Sincerely,", _jsx("br", {}), "The ", branding.brandName, " Team"] })] }));
63
+ return (_jsxs(Layout, { branding: branding, locale: locale, preview: s.preview(credentialName), showHeaderLogo: false, children: [_jsx(IssuerLogo, { logoUrl: issuer?.logoUrl, alt: issuerName ? `${issuerName} logo` : undefined }), _jsx(Text, { style: heading, children: s.heading }), _jsx(Text, { style: paragraph, children: s.greeting }), _jsx(Text, { style: paragraph, children: s.body1(issuerName, credentialName) }), _jsx(Text, { style: paragraph, children: s.body2(branding.brandName) }), _jsx(Section, { style: statusBadge, children: _jsx(Text, { style: statusText, children: s.statusBadge }) }), _jsx(Text, { style: muted, children: s.muted }), _jsxs(Text, { style: signOff, children: [s.sincerely, _jsx("br", {}), interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
64
+ brandName: branding.brandName,
65
+ })] })] }));
16
66
  };
17
- export const getCredentialAwaitingGuardianSubject = (_branding) => 'Your Credential Is Pending Guardian Approval';
67
+ export const getCredentialAwaitingGuardianSubject = (_branding, locale) => STRINGS[resolveCatalogLocale(locale)].subject;
18
68
  // ---------------------------------------------------------------------------
19
69
  // Styles
20
70
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"credential-awaiting-guardian.js","sourceRoot":"","sources":["../../src/templates/credential-awaiting-guardian.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-awaiting-guardian.js","sourceRoot":"","sources":["../../src/templates/credential-awaiting-guardian.tsx"],"names":[],"mappings":"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"}
@@ -14,8 +14,10 @@ export interface EmailVerificationProps {
14
14
  recipient?: {
15
15
  name?: string;
16
16
  };
17
+ /** Recipient locale (BCP-47). Defaults to English. */
18
+ locale?: string;
17
19
  }
18
20
  export declare const EmailVerification: React.FC<EmailVerificationProps>;
19
- export declare const getEmailVerificationSubject: (_branding: TenantBranding) => string;
21
+ export declare const getEmailVerificationSubject: (_branding: TenantBranding, locale?: string) => string;
20
22
  export default function Preview(): React.JSX.Element;
21
23
  //# sourceMappingURL=email-verification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email-verification.d.ts","sourceRoot":"","sources":["../../src/templates/email-verification.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAoC9D,CAAC;AAEF,eAAO,MAAM,2BAA2B,cACzB,cAAc,KAC1B,MAA6B,CAAC;AAmCjC,MAAM,CAAC,OAAO,UAAU,OAAO,sBAQ9B"}
1
+ {"version":3,"file":"email-verification.d.ts","sourceRoot":"","sources":["../../src/templates/email-verification.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAkED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwC9D,CAAC;AAEF,eAAO,MAAM,2BAA2B,cAAe,cAAc,WAAW,MAAM,KAAG,MACxC,CAAC;AAmClD,MAAM,CAAC,OAAO,UAAU,OAAO,sBAQ9B"}
@@ -12,12 +12,65 @@ import { DEFAULT_BRANDING } from '../branding';
12
12
  import { Layout } from '../components/Layout';
13
13
  import { EmailButton } from '../components/EmailButton';
14
14
  import { LinkFallback } from '../components/LinkFallback';
15
- export const EmailVerification = ({ branding, verificationToken, recipient, }) => {
16
- const greeting = recipient?.name ? `Hello ${recipient.name},` : 'Hello,';
15
+ import { resolveCatalogLocale, interpolate, SHARED } from '../i18n';
16
+ const STRINGS = {
17
+ en: {
18
+ preview: 'Verify your email address',
19
+ heading: 'Verify Your Email',
20
+ greeting: 'Hello,',
21
+ greetingName: 'Hello {name},',
22
+ paragraph: 'Please click the button below to verify your email address.',
23
+ passport: '{brandName} is your private, digital passport for learning and work. It lets you securely collect and share your verified skills and achievements online.',
24
+ button: 'Verify Your Email \u2192',
25
+ sincerely: 'Sincerely,',
26
+ subject: 'Verify Your Email',
27
+ },
28
+ es: {
29
+ preview: 'Verifica tu dirección de correo',
30
+ heading: 'Verifica tu correo',
31
+ greeting: 'Hola,',
32
+ greetingName: 'Hola {name},',
33
+ paragraph: 'Haz clic en el botón siguiente para verificar tu dirección de correo.',
34
+ passport: '{brandName} es tu pasaporte digital y privado para el aprendizaje y el trabajo. Te permite recopilar y compartir de forma segura tus habilidades y logros verificados en línea.',
35
+ button: 'Verifica tu correo \u2192',
36
+ sincerely: 'Atentamente,',
37
+ subject: 'Verifica tu correo',
38
+ },
39
+ fr: {
40
+ preview: 'Vérifiez votre adresse e-mail',
41
+ heading: 'Vérifiez votre e-mail',
42
+ greeting: 'Bonjour,',
43
+ greetingName: 'Bonjour {name},',
44
+ paragraph: 'Veuillez cliquer sur le bouton ci-dessous pour vérifier votre adresse e-mail.',
45
+ passport: '{brandName} est votre passeport numérique privé pour l\u2019apprentissage et le travail. Il vous permet de collecter et de partager en toute sécurité vos compétences et réalisations vérifiées en ligne.',
46
+ button: 'Vérifiez votre e-mail \u2192',
47
+ sincerely: 'Cordialement,',
48
+ subject: 'Vérifiez votre e-mail',
49
+ },
50
+ ar: {
51
+ preview: 'تأكيد عنوان بريدك الإلكتروني',
52
+ heading: 'تأكيد بريدك الإلكتروني',
53
+ greeting: 'مرحبًا،',
54
+ greetingName: 'مرحبًا {name}،',
55
+ paragraph: 'يرجى النقر على الزر أدناه لتأكيد عنوان بريدك الإلكتروني.',
56
+ passport: '{brandName} هو جواز سفرك الرقمي والخاص للتعلّم والعمل. يتيح لك جمع ومشاركة مهاراتك وإنجازاتك الموثّقة بأمان عبر الإنترنت.',
57
+ button: 'تأكيد بريدك الإلكتروني ←',
58
+ sincerely: 'مع التحيات،',
59
+ subject: 'تأكيد بريدك الإلكتروني',
60
+ },
61
+ };
62
+ export const EmailVerification = ({ branding, verificationToken, recipient, locale, }) => {
63
+ const s = STRINGS[resolveCatalogLocale(locale)];
64
+ const greeting = interpolate(recipient?.name ? s.greetingName : s.greeting, {
65
+ name: recipient?.name,
66
+ });
17
67
  const verifyUrl = `${branding.appUrl}/verify-email?token=${verificationToken}`;
18
- return (_jsxs(Layout, { branding: branding, preview: "Verify your email address", children: [_jsx(Text, { style: heading, children: "Verify Your Email" }), _jsx(Text, { style: paragraph, children: greeting }), _jsx(Text, { style: paragraph, children: "Please click the button below to verify your email address." }), _jsxs(Text, { style: paragraph, children: [branding.brandName, " is your private, digital passport for learning and work. It lets you securely collect and share your verified skills and achievements online."] }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: verifyUrl, branding: branding, children: "Verify Your Email \u2192" }) }), _jsxs(Text, { style: signOff, children: ["Sincerely,", _jsx("br", {}), "The ", branding.brandName, " Team"] }), _jsx(LinkFallback, { href: verifyUrl })] }));
68
+ const passport = interpolate(s.passport, { brandName: branding.brandName });
69
+ return (_jsxs(Layout, { branding: branding, locale: locale, preview: s.preview, children: [_jsx(Text, { style: heading, children: s.heading }), _jsx(Text, { style: paragraph, children: greeting }), _jsx(Text, { style: paragraph, children: s.paragraph }), _jsx(Text, { style: paragraph, children: passport }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: verifyUrl, branding: branding, children: s.button }) }), _jsxs(Text, { style: signOff, children: [s.sincerely, _jsx("br", {}), interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
70
+ brandName: branding.brandName,
71
+ })] }), _jsx(LinkFallback, { href: verifyUrl, locale: locale })] }));
19
72
  };
20
- export const getEmailVerificationSubject = (_branding) => 'Verify Your Email';
73
+ export const getEmailVerificationSubject = (_branding, locale) => STRINGS[resolveCatalogLocale(locale)].subject;
21
74
  // ---------------------------------------------------------------------------
22
75
  // Styles
23
76
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"email-verification.js","sourceRoot":"","sources":["../../src/templates/email-verification.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAU1D,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAChE,QAAQ,EACR,iBAAiB,EACjB,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,MAAM,uBAAuB,iBAAiB,EAAE,CAAC;IAE/E,OAAO,CACH,MAAC,MAAM,IAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAC,2BAA2B,aAC3D,KAAC,IAAI,IAAC,KAAK,EAAE,OAAO,kCAA0B,EAE9C,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,YAAG,QAAQ,GAAQ,EAEzC,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,4EAEf,EAEP,MAAC,IAAI,IAAC,KAAK,EAAE,SAAS,aACjB,QAAQ,CAAC,SAAS,sJAEhB,EAEP,KAAC,OAAO,IAAC,KAAK,EAAE,aAAa,YACzB,KAAC,WAAW,IAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,yCAElC,GACR,EAEV,MAAC,IAAI,IAAC,KAAK,EAAE,OAAO,2BACN,cAAM,UAAK,QAAQ,CAAC,SAAS,aACpC,EAEP,KAAC,YAAY,IAAC,IAAI,EAAE,SAAS,GAAI,IAC5B,CACZ,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,SAAyB,EACnB,EAAE,CAAC,mBAAmB,CAAC;AAEjC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,MAAM,OAAO,GAAwB;IACjC,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,SAAS,GAAwB;IACnC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,aAAa,GAAwB;IACvC,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,MAAM,OAAO,GAAwB;IACjC,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,UAAU;CACrB,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,CAAC,OAAO,UAAU,OAAO;IAC3B,OAAO,CACH,KAAC,iBAAiB,IACd,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAC,sCAAsC,EACxD,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GACjC,CACL,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"email-verification.js","sourceRoot":"","sources":["../../src/templates/email-verification.tsx"],"names":[],"mappings":"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"}
@@ -21,8 +21,10 @@ export interface EndorsementRequestProps {
21
21
  type?: string;
22
22
  };
23
23
  message?: string;
24
+ /** Recipient locale (BCP-47). Defaults to English. */
25
+ locale?: string;
24
26
  }
25
27
  export declare const EndorsementRequest: React.FC<EndorsementRequestProps>;
26
- export declare const getEndorsementRequestSubject: (_branding: TenantBranding, props: EndorsementRequestProps) => string;
28
+ export declare const getEndorsementRequestSubject: (_branding: TenantBranding, props: EndorsementRequestProps, locale?: string) => string;
27
29
  export default function Preview(): React.JSX.Element;
28
30
  //# sourceMappingURL=endorsement-request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"endorsement-request.d.ts","sourceRoot":"","sources":["../../src/templates/endorsement-request.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmDhE,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAC1B,cAAc,SAClB,uBAAuB,KAC/B,MAIF,CAAC;AAmDF,MAAM,CAAC,OAAO,UAAU,OAAO,sBAW9B"}
1
+ {"version":3,"file":"endorsement-request.d.ts","sourceRoot":"","sources":["../../src/templates/endorsement-request.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASlD,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAiHD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA6DhE,CAAC;AAEF,eAAO,MAAM,4BAA4B,cAC1B,cAAc,SAClB,uBAAuB,WACrB,MAAM,KAChB,MAGF,CAAC;AAmDF,MAAM,CAAC,OAAO,UAAU,OAAO,sBAW9B"}
@@ -10,15 +10,63 @@ import { Layout } from '../components/Layout';
10
10
  import { EmailButton } from '../components/EmailButton';
11
11
  import { IssuerLogo } from '../components/IssuerLogo';
12
12
  import { LinkFallback } from '../components/LinkFallback';
13
- export const EndorsementRequest = ({ branding, shareLink, recipient, issuer, credential, message, }) => {
14
- const greeting = recipient?.name ? `Hello ${recipient.name},` : 'Hello,';
13
+ import { resolveCatalogLocale, interpolate, SHARED } from '../i18n';
14
+ const STRINGS = {
15
+ en: {
16
+ preview: i => `${i} is requesting your endorsement`,
17
+ greeting: 'Hello,',
18
+ greetingName: 'Hello {name},',
19
+ body: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " has requested an endorsement from you", credentialName ? (_jsxs(_Fragment, { children: [' ', "for ", _jsx("strong", { children: credentialName })] })) : (''), "."] })),
20
+ passport: '{brandName} is your private, digital passport for learning and work. It lets you securely collect and share your verified skills and achievements online.',
21
+ button: 'Endorse \u2192',
22
+ sincerely: 'Sincerely,',
23
+ subject: i => `${i} is requesting your endorsement`,
24
+ },
25
+ es: {
26
+ preview: i => `${i} solicita tu validación`,
27
+ greeting: 'Hola,',
28
+ greetingName: 'Hola {name},',
29
+ body: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " te ha solicitado una validaci\u00F3n", credentialName ? (_jsxs(_Fragment, { children: [' ', "para ", _jsx("strong", { children: credentialName })] })) : (''), "."] })),
30
+ passport: '{brandName} es tu pasaporte digital y privado para el aprendizaje y el trabajo. Te permite recopilar y compartir de forma segura tus habilidades y logros verificados en línea.',
31
+ button: 'Validar \u2192',
32
+ sincerely: 'Atentamente,',
33
+ subject: i => `${i} solicita tu validación`,
34
+ },
35
+ fr: {
36
+ preview: i => `${i} vous demande une validation`,
37
+ greeting: 'Bonjour,',
38
+ greetingName: 'Bonjour {name},',
39
+ body: (issuerName, credentialName) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: issuerName }), " vous a demand\u00E9 une validation", credentialName ? (_jsxs(_Fragment, { children: [' ', "pour ", _jsx("strong", { children: credentialName })] })) : (''), "."] })),
40
+ passport: '{brandName} est votre passeport numérique privé pour l\u2019apprentissage et le travail. Il vous permet de collecter et de partager en toute sécurité vos compétences et réalisations vérifiées en ligne.',
41
+ button: 'Valider \u2192',
42
+ sincerely: 'Cordialement,',
43
+ subject: i => `${i} vous demande une validation`,
44
+ },
45
+ ar: {
46
+ preview: i => `${i} يطلب منك التأييد`,
47
+ greeting: 'مرحبًا،',
48
+ greetingName: 'مرحبًا {name}،',
49
+ body: (issuerName, credentialName) => (_jsxs(_Fragment, { children: ["\u0637\u0644\u0628 ", _jsx("strong", { children: issuerName }), " \u0645\u0646\u0643 \u062A\u0623\u064A\u064A\u062F\u064B\u0627", credentialName ? (_jsxs(_Fragment, { children: [' ', "\u0644\u0640 ", _jsx("strong", { children: credentialName })] })) : (''), "."] })),
50
+ passport: '{brandName} هو جواز سفرك الرقمي والخاص للتعلّم والعمل. يتيح لك جمع ومشاركة مهاراتك وإنجازاتك الموثّقة بأمان عبر الإنترنت.',
51
+ button: 'تأييد ←',
52
+ sincerely: 'مع التحيات،',
53
+ subject: i => `${i} يطلب منك التأييد`,
54
+ },
55
+ };
56
+ export const EndorsementRequest = ({ branding, shareLink, recipient, issuer, credential, message, locale, }) => {
57
+ const s = STRINGS[resolveCatalogLocale(locale)];
58
+ const greeting = interpolate(recipient?.name ? s.greetingName : s.greeting, {
59
+ name: recipient?.name,
60
+ });
15
61
  const issuerName = issuer?.name ?? 'Someone';
16
62
  const credentialName = credential?.name;
17
- return (_jsxs(Layout, { branding: branding, preview: `${issuerName} is requesting your endorsement`, showHeaderLogo: false, children: [_jsx(IssuerLogo, { logoUrl: issuer?.logoUrl, alt: issuerName ? `${issuerName} logo` : undefined }), _jsx(Text, { style: paragraph, children: greeting }), _jsxs(Text, { style: paragraph, children: [_jsx("strong", { children: issuerName }), " has requested an endorsement from you", credentialName ? _jsxs(_Fragment, { children: [" for ", _jsx("strong", { children: credentialName })] }) : '', "."] }), message && (_jsxs(Section, { style: messageBox, children: [_jsx(Text, { style: messageText, children: message }), issuer?.name && (_jsxs(Text, { style: messageSender, children: ["\u2014 ", issuer.name] }))] })), _jsxs(Text, { style: paragraph, children: [branding.brandName, " is your private, digital passport for learning and work. It lets you securely collect and share your verified skills and achievements online."] }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: shareLink, branding: branding, children: "Endorse \u2192" }) }), _jsxs(Text, { style: signOff, children: ["Sincerely,", _jsx("br", {}), "The ", branding.brandName, " Team"] }), _jsx(LinkFallback, { href: shareLink })] }));
63
+ return (_jsxs(Layout, { branding: branding, locale: locale, preview: s.preview(issuerName), showHeaderLogo: false, children: [_jsx(IssuerLogo, { logoUrl: issuer?.logoUrl, alt: issuerName ? `${issuerName} logo` : undefined }), _jsx(Text, { style: paragraph, children: greeting }), _jsx(Text, { style: paragraph, children: s.body(issuerName, credentialName) }), message && (_jsxs(Section, { style: messageBox, children: [_jsx(Text, { style: messageText, children: message }), issuer?.name && _jsxs(Text, { style: messageSender, children: ["\u2014 ", issuer.name] })] })), _jsx(Text, { style: paragraph, children: interpolate(s.passport, { brandName: branding.brandName }) }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: shareLink, branding: branding, children: s.button }) }), _jsxs(Text, { style: signOff, children: [s.sincerely, _jsx("br", {}), interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
64
+ brandName: branding.brandName,
65
+ })] }), _jsx(LinkFallback, { href: shareLink, locale: locale })] }));
18
66
  };
19
- export const getEndorsementRequestSubject = (_branding, props) => {
67
+ export const getEndorsementRequestSubject = (_branding, props, locale) => {
20
68
  const issuerName = props.issuer?.name ?? 'Someone';
21
- return `${issuerName} is requesting your endorsement`;
69
+ return STRINGS[resolveCatalogLocale(locale)].subject(issuerName);
22
70
  };
23
71
  // ---------------------------------------------------------------------------
24
72
  // Styles
@@ -1 +1 @@
1
- {"version":3,"file":"endorsement-request.js","sourceRoot":"","sources":["../../src/templates/endorsement-request.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"endorsement-request.js","sourceRoot":"","sources":["../../src/templates/endorsement-request.tsx"],"names":[],"mappings":"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"}
@@ -16,8 +16,10 @@ export interface GuardianApprovalProps {
16
16
  guardian?: {
17
17
  email?: string;
18
18
  };
19
+ /** Recipient locale (BCP-47). Defaults to English. */
20
+ locale?: string;
19
21
  }
20
22
  export declare const GuardianApproval: React.FC<GuardianApprovalProps>;
21
- export declare const getGuardianApprovalSubject: (branding: TenantBranding, props: GuardianApprovalProps) => string;
23
+ export declare const getGuardianApprovalSubject: (branding: TenantBranding, props: GuardianApprovalProps, locale?: string) => string;
22
24
  export default function Preview(): React.JSX.Element;
23
25
  //# sourceMappingURL=guardian-approval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guardian-approval.d.ts","sourceRoot":"","sources":["../../src/templates/guardian-approval.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAuC5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,aACzB,cAAc,SACjB,qBAAqB,KAC7B,MAIF,CAAC;AAmCF,MAAM,CAAC,OAAO,UAAU,OAAO,sBAU9B"}
1
+ {"version":3,"file":"guardian-approval.d.ts","sourceRoot":"","sources":["../../src/templates/guardian-approval.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAmFD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA4C5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,aACzB,cAAc,SACjB,qBAAqB,WACnB,MAAM,KAChB,MAGF,CAAC;AAmCF,MAAM,CAAC,OAAO,UAAU,OAAO,sBAU9B"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * GuardianApproval — email sent to a guardian to approve a minor's account.
4
4
  *
@@ -9,13 +9,63 @@ import { DEFAULT_BRANDING } from '../branding';
9
9
  import { Layout } from '../components/Layout';
10
10
  import { EmailButton } from '../components/EmailButton';
11
11
  import { LinkFallback } from '../components/LinkFallback';
12
- export const GuardianApproval = ({ branding, approvalUrl, requester, }) => {
12
+ import { resolveCatalogLocale, interpolate, SHARED } from '../i18n';
13
+ const STRINGS = {
14
+ en: {
15
+ preview: (n, b) => `${n} needs your approval to join ${b}`,
16
+ heading: 'Account Approval Request',
17
+ greeting: 'Hello,',
18
+ body: (n, b) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: n }), " has requested approval to use their ", b, " account."] })),
19
+ passport: '{brandName} is a private, digital passport for learning and work. It lets users securely collect and share their verified skills and achievements online.',
20
+ ctaInstruction: 'Please click the button below to approve this account request.',
21
+ button: 'Approve Request \u2192',
22
+ thankYou: 'Thank you,',
23
+ subject: (n, b) => `${n} needs your approval to join ${b}`,
24
+ },
25
+ es: {
26
+ preview: (n, b) => `${n} necesita tu aprobación para unirse a ${b}`,
27
+ heading: 'Solicitud de aprobación de cuenta',
28
+ greeting: 'Hola,',
29
+ body: (n, b) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: n }), " ha solicitado aprobaci\u00F3n para usar su cuenta de ", b, "."] })),
30
+ passport: '{brandName} es un pasaporte digital y privado para el aprendizaje y el trabajo. Permite a los usuarios recopilar y compartir de forma segura sus habilidades y logros verificados en línea.',
31
+ ctaInstruction: 'Haz clic en el botón siguiente para aprobar esta solicitud de cuenta.',
32
+ button: 'Aprobar solicitud \u2192',
33
+ thankYou: 'Gracias,',
34
+ subject: (n, b) => `${n} necesita tu aprobación para unirse a ${b}`,
35
+ },
36
+ fr: {
37
+ preview: (n, b) => `${n} a besoin de votre approbation pour rejoindre ${b}`,
38
+ heading: "Demande d'approbation de compte",
39
+ greeting: 'Bonjour,',
40
+ body: (n, b) => (_jsxs(_Fragment, { children: [_jsx("strong", { children: n }), " a demand\u00E9 l\\u2019approbation pour utiliser son compte ", b, "."] })),
41
+ passport: '{brandName} est un passeport numérique privé pour l\u2019apprentissage et le travail. Il permet aux utilisateurs de collecter et de partager en toute sécurité leurs compétences et réalisations vérifiées en ligne.',
42
+ ctaInstruction: 'Veuillez cliquer sur le bouton ci-dessous pour approuver cette demande de compte.',
43
+ button: 'Approuver la demande \u2192',
44
+ thankYou: 'Merci,',
45
+ subject: (n, b) => `${n} a besoin de votre approbation pour rejoindre ${b}`,
46
+ },
47
+ ar: {
48
+ preview: (n, b) => `${n} بحاجة إلى موافقتك للانضمام إلى ${b}`,
49
+ heading: 'طلب الموافقة على الحساب',
50
+ greeting: 'مرحبًا،',
51
+ body: (n, b) => (_jsxs(_Fragment, { children: ["\u0637\u0644\u0628 ", _jsx("strong", { children: n }), " \u0627\u0644\u0645\u0648\u0627\u0641\u0642\u0629 \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u062D\u0633\u0627\u0628\u0647 \u0641\u064A ", b, "."] })),
52
+ passport: '{brandName} هو جواز سفر رقمي خاص للتعلّم والعمل. يتيح للمستخدمين جمع ومشاركة مهاراتهم وإنجازاتهم الموثّقة بأمان عبر الإنترنت.',
53
+ ctaInstruction: 'يرجى النقر على الزر أدناه للموافقة على طلب الحساب هذا.',
54
+ button: 'الموافقة على الطلب ←',
55
+ thankYou: 'شكرًا،',
56
+ subject: (n, b) => `${n} بحاجة إلى موافقتك للانضمام إلى ${b}`,
57
+ },
58
+ };
59
+ export const GuardianApproval = ({ branding, approvalUrl, requester, locale, }) => {
60
+ const s = STRINGS[resolveCatalogLocale(locale)];
13
61
  const requesterName = requester?.displayName ?? 'Someone';
14
- return (_jsxs(Layout, { branding: branding, preview: `${requesterName} needs your approval to join ${branding.brandName}`, children: [_jsx(Text, { style: heading, children: "Account Approval Request" }), _jsx(Text, { style: paragraph, children: "Hello," }), _jsxs(Text, { style: paragraph, children: [_jsx("strong", { children: requesterName }), " has requested approval to use their ", branding.brandName, " account."] }), _jsxs(Text, { style: paragraph, children: [branding.brandName, " is a private, digital passport for learning and work. It lets users securely collect and share their verified skills and achievements online."] }), _jsx(Text, { style: paragraph, children: "Please click the button below to approve this account request." }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: approvalUrl, branding: branding, children: "Approve Request \u2192" }) }), _jsxs(Text, { style: signOff, children: ["Thank you,", _jsx("br", {}), "The ", branding.brandName, " Team"] }), _jsx(LinkFallback, { href: approvalUrl })] }));
62
+ return (_jsxs(Layout, { branding: branding, locale: locale, preview: s.preview(requesterName, branding.brandName), children: [_jsx(Text, { style: heading, children: s.heading }), _jsx(Text, { style: paragraph, children: s.greeting }), _jsx(Text, { style: paragraph, children: s.body(requesterName, branding.brandName) }), _jsx(Text, { style: paragraph, children: interpolate(s.passport, { brandName: branding.brandName }) }), _jsx(Text, { style: paragraph, children: s.ctaInstruction }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: approvalUrl, branding: branding, children: s.button }) }), _jsxs(Text, { style: signOff, children: [s.thankYou, _jsx("br", {}), interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
63
+ brandName: branding.brandName,
64
+ })] }), _jsx(LinkFallback, { href: approvalUrl, locale: locale })] }));
15
65
  };
16
- export const getGuardianApprovalSubject = (branding, props) => {
66
+ export const getGuardianApprovalSubject = (branding, props, locale) => {
17
67
  const name = props.requester?.displayName ?? 'Someone';
18
- return `${name} needs your approval to join ${branding.brandName}`;
68
+ return STRINGS[resolveCatalogLocale(locale)].subject(name, branding.brandName);
19
69
  };
20
70
  // ---------------------------------------------------------------------------
21
71
  // Styles