@resq-systems/email-templates 0.6.1 → 0.6.2

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 (91) hide show
  1. package/lib/contract.d.ts +56 -43
  2. package/lib/contract.d.ts.map +1 -1
  3. package/lib/contract.js +12 -1
  4. package/lib/contract.js.map +1 -1
  5. package/lib/emails/incident-alert.d.ts +1 -0
  6. package/lib/emails/incident-alert.d.ts.map +1 -1
  7. package/lib/emails/incident-alert.js.map +1 -1
  8. package/lib/emails/index.d.ts +1 -1
  9. package/lib/emails/mission-approval.d.ts +1 -0
  10. package/lib/emails/mission-approval.d.ts.map +1 -1
  11. package/lib/emails/mission-approval.js.map +1 -1
  12. package/lib/emails/new-device-login.d.ts +1 -0
  13. package/lib/emails/new-device-login.d.ts.map +1 -1
  14. package/lib/emails/new-device-login.js.map +1 -1
  15. package/lib/emails/notification.d.ts +1 -0
  16. package/lib/emails/notification.d.ts.map +1 -1
  17. package/lib/emails/notification.js.map +1 -1
  18. package/lib/emails/org-invitation.d.ts +1 -0
  19. package/lib/emails/org-invitation.d.ts.map +1 -1
  20. package/lib/emails/org-invitation.js.map +1 -1
  21. package/lib/emails/otp.d.ts +1 -0
  22. package/lib/emails/otp.d.ts.map +1 -1
  23. package/lib/emails/otp.js.map +1 -1
  24. package/lib/emails/password-changed.d.ts +1 -0
  25. package/lib/emails/password-changed.d.ts.map +1 -1
  26. package/lib/emails/password-changed.js.map +1 -1
  27. package/lib/emails/password-reset.d.ts +1 -0
  28. package/lib/emails/password-reset.d.ts.map +1 -1
  29. package/lib/emails/password-reset.js.map +1 -1
  30. package/lib/emails/primitives.d.ts.map +1 -1
  31. package/lib/emails/primitives.js +7 -0
  32. package/lib/emails/primitives.js.map +1 -1
  33. package/lib/emails/theme.d.ts +86 -8
  34. package/lib/emails/theme.d.ts.map +1 -1
  35. package/lib/emails/theme.js +51 -3
  36. package/lib/emails/theme.js.map +1 -1
  37. package/lib/emails/tokens.d.ts +2 -1
  38. package/lib/emails/tokens.d.ts.map +1 -1
  39. package/lib/emails/tokens.js +7 -0
  40. package/lib/emails/tokens.js.map +1 -1
  41. package/lib/emails/welcome.d.ts +1 -0
  42. package/lib/emails/welcome.d.ts.map +1 -1
  43. package/lib/emails/welcome.js.map +1 -1
  44. package/lib/index.d.ts +1 -1
  45. package/lib/mailer.d.ts +118 -11
  46. package/lib/mailer.d.ts.map +1 -1
  47. package/lib/mailer.js +48 -2
  48. package/lib/mailer.js.map +1 -1
  49. package/lib/node_modules/@react-email/tailwind/dist/index.d.ts +1 -1
  50. package/lib/node_modules/{tailwindcss → @react-email/tailwind/node_modules/tailwindcss}/dist/colors.d.ts +1 -1
  51. package/lib/node_modules/@react-email/tailwind/node_modules/tailwindcss/dist/colors.d.ts.map +1 -0
  52. package/lib/node_modules/{tailwindcss → @react-email/tailwind/node_modules/tailwindcss}/dist/lib.d.ts +1 -1
  53. package/lib/node_modules/@react-email/tailwind/node_modules/tailwindcss/dist/lib.d.ts.map +1 -0
  54. package/lib/node_modules/{tailwindcss → @react-email/tailwind/node_modules/tailwindcss}/dist/resolve-config-QUZ9b-Gn.d.ts +1 -1
  55. package/lib/node_modules/@react-email/tailwind/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.ts.map +1 -0
  56. package/lib/node_modules/{tailwindcss → @react-email/tailwind/node_modules/tailwindcss}/dist/types-DWdTiksJ.d.ts +1 -1
  57. package/lib/node_modules/@react-email/tailwind/node_modules/tailwindcss/dist/types-DWdTiksJ.d.ts.map +1 -0
  58. package/lib/registry.d.ts.map +1 -1
  59. package/lib/registry.js +6 -0
  60. package/lib/registry.js.map +1 -1
  61. package/lib/render.d.ts +9 -2
  62. package/lib/render.d.ts.map +1 -1
  63. package/lib/render.js +16 -2
  64. package/lib/render.js.map +1 -1
  65. package/lib/schemas.d.ts +9 -0
  66. package/lib/schemas.d.ts.map +1 -1
  67. package/lib/schemas.js +16 -0
  68. package/lib/schemas.js.map +1 -1
  69. package/lib/send/index.d.ts +1 -1
  70. package/lib/send/resend-sender.d.ts +11 -0
  71. package/lib/send/resend-sender.d.ts.map +1 -1
  72. package/lib/send/resend-sender.js +17 -0
  73. package/lib/send/resend-sender.js.map +1 -1
  74. package/lib/send/send-email.d.ts +21 -0
  75. package/lib/send/send-email.d.ts.map +1 -1
  76. package/lib/send/send-email.js +26 -0
  77. package/lib/send/send-email.js.map +1 -1
  78. package/lib/send/sender.d.ts +26 -2
  79. package/lib/send/sender.d.ts.map +1 -1
  80. package/lib/suite.d.ts.map +1 -1
  81. package/lib/suite.js +7 -0
  82. package/lib/suite.js.map +1 -1
  83. package/lib/templates.d.ts +9 -0
  84. package/lib/templates.d.ts.map +1 -1
  85. package/lib/templates.js +16 -0
  86. package/lib/templates.js.map +1 -1
  87. package/package.json +6 -6
  88. package/lib/node_modules/tailwindcss/dist/colors.d.ts.map +0 -1
  89. package/lib/node_modules/tailwindcss/dist/lib.d.ts.map +0 -1
  90. package/lib/node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.ts.map +0 -1
  91. package/lib/node_modules/tailwindcss/dist/types-DWdTiksJ.d.ts.map +0 -1
@@ -17,8 +17,34 @@ import { renderEmail } from "../render.js";
17
17
  * limitations under the License.
18
18
  */
19
19
  /**
20
+ * @fileoverview Render-and-send convenience wiring — validates and renders a payload,
21
+ * then hands it to an `EmailSender`, preserving the never-throws `SendResult`
22
+ * contract.
23
+ *
24
+ * @module @resq-systems/email-templates/send/send-email
25
+ */
26
+ /**
20
27
  * Render a validated payload and hand it to a sender in one call. Convenience
21
28
  * wiring for the common pipeline case: `sendEmail(sender, payload, { from })`.
29
+ *
30
+ * Never throws or rejects: every failure — an invalid payload, a render error, or
31
+ * a throwing/failing sender — is normalized into a `{ ok: false, error }`
32
+ * {@link SendResult}. Distinguish failures by `error.name`: `"EmailValidationError"`
33
+ * (payload failed schema validation), `"render_error"` (any other render failure),
34
+ * `"sender_error"` (the sender threw instead of returning a result), or whatever
35
+ * `name` the sender itself reports on a normal `{ ok: false }` return. The
36
+ * `idempotencyKey` is passed through to the sender and only takes effect insofar
37
+ * as the sender honours it.
38
+ *
39
+ * @param sender - The transport port that performs delivery.
40
+ * @param payload - Untrusted `{ name, to, data }` payload to validate and render.
41
+ * @param options - Delivery options; `from` is required.
42
+ * @returns A promise resolving to the send outcome — never a rejection.
43
+ * @example
44
+ * ```ts
45
+ * const result = await sendEmail(sender, badPayload, { from: "ResQ <ops@resq.software>" });
46
+ * result.ok; // → false
47
+ * ```
22
48
  */
23
49
  async function sendEmail(sender, payload, options) {
24
50
  let rendered;
@@ -1 +1 @@
1
- {"version":3,"file":"send-email.js","names":[],"sources":["../../src/send/send-email.ts"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EmailValidationError } from \"../mailer.js\";\nimport { renderEmail } from \"../render.js\";\nimport type { EmailSender, SendResult } from \"./sender.js\";\n\nexport interface SendEmailOptions {\n\t/** Verified sender address, e.g. \"ResQ Systems <updates@send.resq.software>\". */\n\tfrom: string;\n\treplyTo?: string | string[];\n\t/** Stable key so Resend de-dupes identical sends for 24h. */\n\tidempotencyKey?: string;\n\t/** Extra headers passed through to the sender. */\n\theaders?: Record<string, string>;\n}\n\n/**\n * Render a validated payload and hand it to a sender in one call. Convenience\n * wiring for the common pipeline case: `sendEmail(sender, payload, { from })`.\n */\nexport async function sendEmail(\n\tsender: EmailSender,\n\tpayload: unknown,\n\toptions: SendEmailOptions,\n): Promise<SendResult> {\n\tlet rendered: Awaited<ReturnType<typeof renderEmail>>;\n\ttry {\n\t\trendered = await renderEmail(payload);\n\t} catch (err) {\n\t\t// Preserve the never-throws SendResult contract (see the sender adapters):\n\t\t// an invalid payload — or any other render failure — becomes a failure\n\t\t// result instead of a rejected promise, so pipeline callers that only\n\t\t// branch on `SendResult` never hit an unhandled rejection.\n\t\t// EmailValidationError keeps its name so callers can tell a bad payload\n\t\t// apart from an unexpected render error.\n\t\tif (err instanceof EmailValidationError) {\n\t\t\treturn { ok: false, error: { name: err.name, message: err.message } };\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tname: \"render_error\",\n\t\t\t\tmessage: err instanceof Error ? err.message : String(err),\n\t\t\t},\n\t\t};\n\t}\n\n\ttry {\n\t\treturn await sender.send({\n\t\t\tfrom: options.from,\n\t\t\tto: rendered.to,\n\t\t\tsubject: rendered.subject,\n\t\t\thtml: rendered.html,\n\t\t\ttext: rendered.text,\n\t\t\treplyTo: options.replyTo,\n\t\t\tidempotencyKey: options.idempotencyKey,\n\t\t\theaders: options.headers,\n\t\t});\n\t} catch (err) {\n\t\t// EmailSender.send is expected to normalize failures into SendResult, but a\n\t\t// third-party sender might still throw; keep sendEmail's never-throws\n\t\t// contract regardless, tagged distinctly so it isn't confused with a\n\t\t// render_error.\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tname: \"sender_error\",\n\t\t\t\tmessage: err instanceof Error ? err.message : String(err),\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkCA,eAAsB,UACrB,QACA,SACA,SACsB;CACtB,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,YAAY,OAAO;CACrC,SAAS,KAAK;EAOb,IAAI,eAAe,sBAClB,OAAO;GAAE,IAAI;GAAO,OAAO;IAAE,MAAM,IAAI;IAAM,SAAS,IAAI;GAAQ;EAAE;EAErE,OAAO;GACN,IAAI;GACJ,OAAO;IACN,MAAM;IACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACzD;EACD;CACD;CAEA,IAAI;EACH,OAAO,MAAM,OAAO,KAAK;GACxB,MAAM,QAAQ;GACd,IAAI,SAAS;GACb,SAAS,SAAS;GAClB,MAAM,SAAS;GACf,MAAM,SAAS;GACf,SAAS,QAAQ;GACjB,gBAAgB,QAAQ;GACxB,SAAS,QAAQ;EAClB,CAAC;CACF,SAAS,KAAK;EAKb,OAAO;GACN,IAAI;GACJ,OAAO;IACN,MAAM;IACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACzD;EACD;CACD;AACD"}
1
+ {"version":3,"file":"send-email.js","names":[],"sources":["../../src/send/send-email.ts"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Render-and-send convenience wiring — validates and renders a payload,\n * then hands it to an `EmailSender`, preserving the never-throws `SendResult`\n * contract.\n *\n * @module @resq-systems/email-templates/send/send-email\n */\n\nimport { EmailValidationError } from \"../mailer.js\";\nimport { renderEmail } from \"../render.js\";\nimport type { EmailSender, SendResult } from \"./sender.js\";\n\n/** Delivery options for {@link sendEmail} — everything the render step can't supply. */\nexport interface SendEmailOptions {\n\t/** Verified sender address, e.g. \"ResQ Systems <updates@send.resq.software>\". */\n\tfrom: string;\n\t/** Reply-To address(es); absent means the provider default applies. */\n\treplyTo?: string | string[];\n\t/** Stable key so Resend de-dupes identical sends for 24h. */\n\tidempotencyKey?: string;\n\t/** Extra headers passed through to the sender. */\n\theaders?: Record<string, string>;\n}\n\n/**\n * Render a validated payload and hand it to a sender in one call. Convenience\n * wiring for the common pipeline case: `sendEmail(sender, payload, { from })`.\n *\n * Never throws or rejects: every failure — an invalid payload, a render error, or\n * a throwing/failing sender — is normalized into a `{ ok: false, error }`\n * {@link SendResult}. Distinguish failures by `error.name`: `\"EmailValidationError\"`\n * (payload failed schema validation), `\"render_error\"` (any other render failure),\n * `\"sender_error\"` (the sender threw instead of returning a result), or whatever\n * `name` the sender itself reports on a normal `{ ok: false }` return. The\n * `idempotencyKey` is passed through to the sender and only takes effect insofar\n * as the sender honours it.\n *\n * @param sender - The transport port that performs delivery.\n * @param payload - Untrusted `{ name, to, data }` payload to validate and render.\n * @param options - Delivery options; `from` is required.\n * @returns A promise resolving to the send outcome — never a rejection.\n * @example\n * ```ts\n * const result = await sendEmail(sender, badPayload, { from: \"ResQ <ops@resq.software>\" });\n * result.ok; // → false\n * ```\n */\nexport async function sendEmail(\n\tsender: EmailSender,\n\tpayload: unknown,\n\toptions: SendEmailOptions,\n): Promise<SendResult> {\n\tlet rendered: Awaited<ReturnType<typeof renderEmail>>;\n\ttry {\n\t\trendered = await renderEmail(payload);\n\t} catch (err) {\n\t\t// Preserve the never-throws SendResult contract (see the sender adapters):\n\t\t// an invalid payload — or any other render failure — becomes a failure\n\t\t// result instead of a rejected promise, so pipeline callers that only\n\t\t// branch on `SendResult` never hit an unhandled rejection.\n\t\t// EmailValidationError keeps its name so callers can tell a bad payload\n\t\t// apart from an unexpected render error.\n\t\tif (err instanceof EmailValidationError) {\n\t\t\treturn { ok: false, error: { name: err.name, message: err.message } };\n\t\t}\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tname: \"render_error\",\n\t\t\t\tmessage: err instanceof Error ? err.message : String(err),\n\t\t\t},\n\t\t};\n\t}\n\n\ttry {\n\t\treturn await sender.send({\n\t\t\tfrom: options.from,\n\t\t\tto: rendered.to,\n\t\t\tsubject: rendered.subject,\n\t\t\thtml: rendered.html,\n\t\t\ttext: rendered.text,\n\t\t\treplyTo: options.replyTo,\n\t\t\tidempotencyKey: options.idempotencyKey,\n\t\t\theaders: options.headers,\n\t\t});\n\t} catch (err) {\n\t\t// EmailSender.send is expected to normalize failures into SendResult, but a\n\t\t// third-party sender might still throw; keep sendEmail's never-throws\n\t\t// contract regardless, tagged distinctly so it isn't confused with a\n\t\t// render_error.\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tname: \"sender_error\",\n\t\t\t\tmessage: err instanceof Error ? err.message : String(err),\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,eAAsB,UACrB,QACA,SACA,SACsB;CACtB,IAAI;CACJ,IAAI;EACH,WAAW,MAAM,YAAY,OAAO;CACrC,SAAS,KAAK;EAOb,IAAI,eAAe,sBAClB,OAAO;GAAE,IAAI;GAAO,OAAO;IAAE,MAAM,IAAI;IAAM,SAAS,IAAI;GAAQ;EAAE;EAErE,OAAO;GACN,IAAI;GACJ,OAAO;IACN,MAAM;IACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACzD;EACD;CACD;CAEA,IAAI;EACH,OAAO,MAAM,OAAO,KAAK;GACxB,MAAM,QAAQ;GACd,IAAI,SAAS;GACb,SAAS,SAAS;GAClB,MAAM,SAAS;GACf,MAAM,SAAS;GACf,SAAS,QAAQ;GACjB,gBAAgB,QAAQ;GACxB,SAAS,QAAQ;EAClB,CAAC;CACF,SAAS,KAAK;EAKb,OAAO;GACN,IAAI;GACJ,OAAO;IACN,MAAM;IACN,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;GACzD;EACD;CACD;AACD"}
@@ -14,12 +14,28 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- /** Provider-agnostic input for sending a single email. */
17
+ /**
18
+ * @fileoverview Provider-agnostic email transport port — the `EmailSender` interface
19
+ * plus its normalized input and result shapes.
20
+ *
21
+ * @module @resq-systems/email-templates/send/sender
22
+ */
23
+ /**
24
+ * Provider-agnostic input for sending a single email.
25
+ *
26
+ * At least one of {@link SendEmailInput.html} or {@link SendEmailInput.text} should
27
+ * be present, or the message has no body — the pipeline (`renderEmail`) always
28
+ * supplies both. `to`, `cc`, and `bcc` accept one address or a list.
29
+ */
18
30
  interface SendEmailInput {
31
+ /** Verified sender address, e.g. "ResQ Systems <ops@send.resq.software>". */
19
32
  from: string;
33
+ /** Primary recipient(s); at least one address. */
20
34
  to: string | string[];
21
35
  subject: string;
36
+ /** HTML body; omit only if `text` is provided. */
22
37
  html?: string;
38
+ /** Plain-text body; omit only if `html` is provided. */
23
39
  text?: string;
24
40
  replyTo?: string | string[];
25
41
  cc?: string | string[];
@@ -29,7 +45,15 @@ interface SendEmailInput {
29
45
  /** Extra headers, e.g. RFC 8058 `List-Unsubscribe` for marketing mail. */
30
46
  headers?: Record<string, string>;
31
47
  }
32
- /** Normalized send result. Providers map their responses onto this shape. */
48
+ /**
49
+ * Normalized send result — a discriminated union keyed by the `ok` boolean.
50
+ * Providers map their responses onto this shape so callers branch on `ok` rather
51
+ * than on provider specifics.
52
+ *
53
+ * When `ok` is `true`, `id` is the provider's message id. When `ok` is `false`,
54
+ * `error.name` is a stable, machine-branchable tag and `error.message` is a
55
+ * human-readable detail.
56
+ */
33
57
  type SendResult = {
34
58
  ok: true;
35
59
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sender.d.ts","names":[],"sources":["../../src/send/sender.ts"],"mappings":";;;;;;;;;;;;;;;;;UAiBiB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA,UAAU;;;KAIC;EACP;EAAU;;EACV;EAAW;IAAS;IAAc;;;;;;;UAMtB;;;;;;;EAOhB,KAAK,OAAO,iBAAiB,QAAQ"}
1
+ {"version":3,"file":"sender.d.ts","names":[],"sources":["../../src/send/sender.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA8BiB;;EAEhB;;EAEA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;;EAEA;;EAEA,UAAU;;;;;;;;;;;KAYC;EACP;EAAU;;EACV;EAAW;IAAS;IAAc;;;;;;;UAMtB;;;;;;;EAOhB,KAAK,OAAO,iBAAiB,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"suite.d.ts","names":[],"sources":["../src/suite.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;cAwBa;;eAAA"}
1
+ {"version":3,"file":"suite.d.ts","names":[],"sources":["../src/suite.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;cAgCa;;eAAA"}
package/lib/suite.js CHANGED
@@ -17,6 +17,13 @@ import { resqEmailTemplates } from "./templates.js";
17
17
  * limitations under the License.
18
18
  */
19
19
  /**
20
+ * @fileoverview The default mailer over the built-in ResQ Systems templates — the
21
+ * single source of truth behind the package's payload, decoder, registry, and render
22
+ * exports.
23
+ *
24
+ * @module @resq-systems/email-templates/suite
25
+ */
26
+ /**
20
27
  * The default mailer over the built-in ResQ Systems templates — the single source of
21
28
  * truth behind the package's `EmailPayload`, `decodeEmailPayload`, `registry`,
22
29
  * and `renderEmail` exports.
package/lib/suite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"suite.js","names":[],"sources":["../src/suite.ts"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createMailer } from \"./mailer.js\";\nimport { resqEmailTemplates } from \"./templates.js\";\n\n/**\n * The default mailer over the built-in ResQ Systems templates — the single source of\n * truth behind the package's `EmailPayload`, `decodeEmailPayload`, `registry`,\n * and `renderEmail` exports.\n */\nexport const resqMailer = createMailer(resqEmailTemplates);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,aAAa,aAAa,kBAAkB"}
1
+ {"version":3,"file":"suite.js","names":[],"sources":["../src/suite.ts"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview The default mailer over the built-in ResQ Systems templates — the\n * single source of truth behind the package's payload, decoder, registry, and render\n * exports.\n *\n * @module @resq-systems/email-templates/suite\n */\n\nimport { createMailer } from \"./mailer.js\";\nimport { resqEmailTemplates } from \"./templates.js\";\n\n/**\n * The default mailer over the built-in ResQ Systems templates — the single source of\n * truth behind the package's `EmailPayload`, `decodeEmailPayload`, `registry`,\n * and `renderEmail` exports.\n */\nexport const resqMailer = createMailer(resqEmailTemplates);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAa,aAAa,aAAa,kBAAkB"}
@@ -15,20 +15,24 @@ import { EmailTemplateDef } from "./mailer.js";
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */
18
+ /** One-time verification code (OTP) template. */
18
19
  declare const otpTemplate: EmailTemplateDef<"otp", import("effect/Schema").Struct<{
19
20
  readonly code: import("effect/Schema").NonEmptyString;
20
21
  readonly firstName: import("effect/Schema").optional<import("effect/Schema").String>;
21
22
  readonly expiresInMinutes: import("effect/Schema").optional<import("effect/Schema").Number>;
22
23
  }>>;
24
+ /** Account welcome / onboarding template. */
23
25
  declare const welcomeTemplate: EmailTemplateDef<"welcome", import("effect/Schema").Struct<{
24
26
  readonly firstName: import("effect/Schema").NonEmptyString;
25
27
  readonly verifyUrl: import("effect/Schema").optional<import("effect/Schema").String>;
26
28
  }>>;
29
+ /** Password-reset template. */
27
30
  declare const passwordResetTemplate: EmailTemplateDef<"password-reset", import("effect/Schema").Struct<{
28
31
  readonly firstName: import("effect/Schema").optional<import("effect/Schema").String>;
29
32
  readonly resetUrl: import("effect/Schema").String;
30
33
  readonly expiresInMinutes: import("effect/Schema").optional<import("effect/Schema").Number>;
31
34
  }>>;
35
+ /** Generic notification / alert template. */
32
36
  declare const notificationTemplate: EmailTemplateDef<"notification", import("effect/Schema").Struct<{
33
37
  readonly title: import("effect/Schema").NonEmptyString;
34
38
  readonly body: import("effect/Schema").NonEmptyString;
@@ -36,6 +40,7 @@ declare const notificationTemplate: EmailTemplateDef<"notification", import("eff
36
40
  readonly actionUrl: import("effect/Schema").optional<import("effect/Schema").String>;
37
41
  readonly actionLabel: import("effect/Schema").optional<import("effect/Schema").String>;
38
42
  }>>;
43
+ /** Incident / dispatch alert template. */
39
44
  declare const incidentAlertTemplate: EmailTemplateDef<"incident-alert", import("effect/Schema").Struct<{
40
45
  readonly incidentId: import("effect/Schema").NonEmptyString;
41
46
  readonly title: import("effect/Schema").NonEmptyString;
@@ -45,11 +50,13 @@ declare const incidentAlertTemplate: EmailTemplateDef<"incident-alert", import("
45
50
  readonly detectedAt: import("effect/Schema").optional<import("effect/Schema").String>;
46
51
  readonly dashboardUrl: import("effect/Schema").String;
47
52
  }>>;
53
+ /** Password-changed security-notice template. */
48
54
  declare const passwordChangedTemplate: EmailTemplateDef<"password-changed", import("effect/Schema").Struct<{
49
55
  readonly firstName: import("effect/Schema").optional<import("effect/Schema").String>;
50
56
  readonly changedAt: import("effect/Schema").optional<import("effect/Schema").String>;
51
57
  readonly secureAccountUrl: import("effect/Schema").optional<import("effect/Schema").String>;
52
58
  }>>;
59
+ /** New-device sign-in security-alert template. */
53
60
  declare const newDeviceLoginTemplate: EmailTemplateDef<"new-device-login", import("effect/Schema").Struct<{
54
61
  readonly firstName: import("effect/Schema").optional<import("effect/Schema").String>;
55
62
  readonly device: import("effect/Schema").optional<import("effect/Schema").String>;
@@ -58,6 +65,7 @@ declare const newDeviceLoginTemplate: EmailTemplateDef<"new-device-login", impor
58
65
  readonly at: import("effect/Schema").optional<import("effect/Schema").String>;
59
66
  readonly secureAccountUrl: import("effect/Schema").optional<import("effect/Schema").String>;
60
67
  }>>;
68
+ /** Mission-approval sign-off request template. */
61
69
  declare const missionApprovalTemplate: EmailTemplateDef<"mission-approval", import("effect/Schema").Struct<{
62
70
  readonly missionId: import("effect/Schema").NonEmptyString;
63
71
  readonly title: import("effect/Schema").NonEmptyString;
@@ -67,6 +75,7 @@ declare const missionApprovalTemplate: EmailTemplateDef<"mission-approval", impo
67
75
  readonly approveUrl: import("effect/Schema").String;
68
76
  readonly expiresInMinutes: import("effect/Schema").optional<import("effect/Schema").Number>;
69
77
  }>>;
78
+ /** Organization / team invitation template. */
70
79
  declare const orgInvitationTemplate: EmailTemplateDef<"org-invitation", import("effect/Schema").Struct<{
71
80
  readonly orgName: import("effect/Schema").NonEmptyString;
72
81
  readonly inviterName: import("effect/Schema").optional<import("effect/Schema").String>;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","names":[],"sources":["../src/templates.tsx"],"mappings":";;;;;;;;;;;;;;;;;cAsCa,aAAA,gDAAW;;;;;cAOX,iBAAA,oDAAe;;;;cAOf,uBAAA,2DAAqB;;;;;cAOrB,sBAAA,yDAAoB;;;;;;;cAOpB,uBAAA,2DAAqB;;;;;;;;;cAOrB,yBAAA,6DAAuB;;;;;cAOvB,wBAAA,6DAAsB;;;;;;;;cAOtB,yBAAA,6DAAuB;;;;;;;;;cAOvB,uBAAA,2DAAqB;;;;;;;;cAQrB,8BAAA,gDAAkB;;;;KAAA"}
1
+ {"version":3,"file":"templates.d.ts","names":[],"sources":["../src/templates.tsx"],"mappings":";;;;;;;;;;;;;;;;;;cA+Ca,aAAA,gDAAW;;;;;;cAQX,iBAAA,oDAAe;;;;;cAQf,uBAAA,2DAAqB;;;;;;cAQrB,sBAAA,yDAAoB;;;;;;;;cAQpB,uBAAA,2DAAqB;;;;;;;;;;cAQrB,yBAAA,6DAAuB;;;;;;cAQvB,wBAAA,6DAAsB;;;;;;;;;cAQtB,yBAAA,6DAAuB;;;;;;;;;;cAQvB,uBAAA,2DAAqB;;;;;;;;cAQrB,8BAAA,gDAAkB;;;;KAAA"}
package/lib/templates.js CHANGED
@@ -26,54 +26,70 @@ import { jsx } from "react/jsx-runtime";
26
26
  * See the License for the specific language governing permissions and
27
27
  * limitations under the License.
28
28
  */
29
+ /**
30
+ * @fileoverview Built-in ResQ Systems template definitions — each pairs a `data`
31
+ * schema with a subject builder and a React Email component, collected into
32
+ * `resqEmailTemplates` for `createMailer`.
33
+ *
34
+ * @module @resq-systems/email-templates/templates
35
+ */
36
+ /** One-time verification code (OTP) template. */
29
37
  const otpTemplate = defineEmailTemplate({
30
38
  name: "otp",
31
39
  data: otpData,
32
40
  subject: (data) => `Your ResQ Systems verification code: ${data.code}`,
33
41
  Component: (data) => /* @__PURE__ */ jsx(OtpEmail, { ...data })
34
42
  });
43
+ /** Account welcome / onboarding template. */
35
44
  const welcomeTemplate = defineEmailTemplate({
36
45
  name: "welcome",
37
46
  data: welcomeData,
38
47
  subject: (data) => `Welcome to ResQ Systems, ${data.firstName}`,
39
48
  Component: (data) => /* @__PURE__ */ jsx(WelcomeEmail, { ...data })
40
49
  });
50
+ /** Password-reset template. */
41
51
  const passwordResetTemplate = defineEmailTemplate({
42
52
  name: "password-reset",
43
53
  data: passwordResetData,
44
54
  subject: () => "Reset your ResQ Systems password",
45
55
  Component: (data) => /* @__PURE__ */ jsx(PasswordResetEmail, { ...data })
46
56
  });
57
+ /** Generic notification / alert template. */
47
58
  const notificationTemplate = defineEmailTemplate({
48
59
  name: "notification",
49
60
  data: notificationData,
50
61
  subject: (data) => data.title,
51
62
  Component: (data) => /* @__PURE__ */ jsx(NotificationEmail, { ...data })
52
63
  });
64
+ /** Incident / dispatch alert template. */
53
65
  const incidentAlertTemplate = defineEmailTemplate({
54
66
  name: "incident-alert",
55
67
  data: incidentAlertData,
56
68
  subject: (data) => `[${data.severity.toUpperCase()}] ${data.title}`,
57
69
  Component: (data) => /* @__PURE__ */ jsx(IncidentAlertEmail, { ...data })
58
70
  });
71
+ /** Password-changed security-notice template. */
59
72
  const passwordChangedTemplate = defineEmailTemplate({
60
73
  name: "password-changed",
61
74
  data: passwordChangedData,
62
75
  subject: () => "Your ResQ Systems password was changed",
63
76
  Component: (data) => /* @__PURE__ */ jsx(PasswordChangedEmail, { ...data })
64
77
  });
78
+ /** New-device sign-in security-alert template. */
65
79
  const newDeviceLoginTemplate = defineEmailTemplate({
66
80
  name: "new-device-login",
67
81
  data: newDeviceLoginData,
68
82
  subject: () => "New sign-in to your ResQ Systems account",
69
83
  Component: (data) => /* @__PURE__ */ jsx(NewDeviceLoginEmail, { ...data })
70
84
  });
85
+ /** Mission-approval sign-off request template. */
71
86
  const missionApprovalTemplate = defineEmailTemplate({
72
87
  name: "mission-approval",
73
88
  data: missionApprovalData,
74
89
  subject: (data) => `Mission approval needed: ${data.title}`,
75
90
  Component: (data) => /* @__PURE__ */ jsx(MissionApprovalEmail, { ...data })
76
91
  });
92
+ /** Organization / team invitation template. */
77
93
  const orgInvitationTemplate = defineEmailTemplate({
78
94
  name: "org-invitation",
79
95
  data: orgInvitationData,
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","names":[],"sources":["../src/templates.tsx"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { IncidentAlertEmail } from \"./emails/incident-alert.js\";\nimport { MissionApprovalEmail } from \"./emails/mission-approval.js\";\nimport { NewDeviceLoginEmail } from \"./emails/new-device-login.js\";\nimport { NotificationEmail } from \"./emails/notification.js\";\nimport { OrgInvitationEmail } from \"./emails/org-invitation.js\";\nimport { OtpEmail } from \"./emails/otp.js\";\nimport { PasswordChangedEmail } from \"./emails/password-changed.js\";\nimport { PasswordResetEmail } from \"./emails/password-reset.js\";\nimport { WelcomeEmail } from \"./emails/welcome.js\";\nimport { defineEmailTemplate } from \"./mailer.js\";\nimport {\n\tincidentAlertData,\n\tmissionApprovalData,\n\tnewDeviceLoginData,\n\tnotificationData,\n\torgInvitationData,\n\totpData,\n\tpasswordChangedData,\n\tpasswordResetData,\n\twelcomeData,\n} from \"./schemas.js\";\n\nexport const otpTemplate = defineEmailTemplate({\n\tname: \"otp\",\n\tdata: otpData,\n\tsubject: (data) => `Your ResQ Systems verification code: ${data.code}`,\n\tComponent: (data) => <OtpEmail {...data} />,\n});\n\nexport const welcomeTemplate = defineEmailTemplate({\n\tname: \"welcome\",\n\tdata: welcomeData,\n\tsubject: (data) => `Welcome to ResQ Systems, ${data.firstName}`,\n\tComponent: (data) => <WelcomeEmail {...data} />,\n});\n\nexport const passwordResetTemplate = defineEmailTemplate({\n\tname: \"password-reset\",\n\tdata: passwordResetData,\n\tsubject: () => \"Reset your ResQ Systems password\",\n\tComponent: (data) => <PasswordResetEmail {...data} />,\n});\n\nexport const notificationTemplate = defineEmailTemplate({\n\tname: \"notification\",\n\tdata: notificationData,\n\tsubject: (data) => data.title,\n\tComponent: (data) => <NotificationEmail {...data} />,\n});\n\nexport const incidentAlertTemplate = defineEmailTemplate({\n\tname: \"incident-alert\",\n\tdata: incidentAlertData,\n\tsubject: (data) => `[${data.severity.toUpperCase()}] ${data.title}`,\n\tComponent: (data) => <IncidentAlertEmail {...data} />,\n});\n\nexport const passwordChangedTemplate = defineEmailTemplate({\n\tname: \"password-changed\",\n\tdata: passwordChangedData,\n\tsubject: () => \"Your ResQ Systems password was changed\",\n\tComponent: (data) => <PasswordChangedEmail {...data} />,\n});\n\nexport const newDeviceLoginTemplate = defineEmailTemplate({\n\tname: \"new-device-login\",\n\tdata: newDeviceLoginData,\n\tsubject: () => \"New sign-in to your ResQ Systems account\",\n\tComponent: (data) => <NewDeviceLoginEmail {...data} />,\n});\n\nexport const missionApprovalTemplate = defineEmailTemplate({\n\tname: \"mission-approval\",\n\tdata: missionApprovalData,\n\tsubject: (data) => `Mission approval needed: ${data.title}`,\n\tComponent: (data) => <MissionApprovalEmail {...data} />,\n});\n\nexport const orgInvitationTemplate = defineEmailTemplate({\n\tname: \"org-invitation\",\n\tdata: orgInvitationData,\n\tsubject: (data) => `You're invited to join ${data.orgName} on ResQ Systems`,\n\tComponent: (data) => <OrgInvitationEmail {...data} />,\n});\n\n/** The built-in ResQ Systems template set — spread into `createMailer` to extend it. */\nexport const resqEmailTemplates = [\n\totpTemplate,\n\twelcomeTemplate,\n\tpasswordResetTemplate,\n\tnotificationTemplate,\n\tincidentAlertTemplate,\n\tpasswordChangedTemplate,\n\tnewDeviceLoginTemplate,\n\tmissionApprovalTemplate,\n\torgInvitationTemplate,\n] as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,MAAa,cAAc,oBAAoB;CAC9C,MAAM;CACN,MAAM;CACN,UAAU,SAAS,wCAAwC,KAAK;CAChE,YAAY,SAAS,oBAAC,UAAD,EAAU,GAAI,KAAO,CAAA;AAC3C,CAAC;AAED,MAAa,kBAAkB,oBAAoB;CAClD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,4BAA4B,KAAK;CACpD,YAAY,SAAS,oBAAC,cAAD,EAAc,GAAI,KAAO,CAAA;AAC/C,CAAC;AAED,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;AAED,MAAa,uBAAuB,oBAAoB;CACvD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,KAAK;CACxB,YAAY,SAAS,oBAAC,mBAAD,EAAmB,GAAI,KAAO,CAAA;AACpD,CAAC;AAED,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,IAAI,KAAK,SAAS,YAAY,EAAE,IAAI,KAAK;CAC5D,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;AAED,MAAa,0BAA0B,oBAAoB;CAC1D,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,sBAAD,EAAsB,GAAI,KAAO,CAAA;AACvD,CAAC;AAED,MAAa,yBAAyB,oBAAoB;CACzD,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,qBAAD,EAAqB,GAAI,KAAO,CAAA;AACtD,CAAC;AAED,MAAa,0BAA0B,oBAAoB;CAC1D,MAAM;CACN,MAAM;CACN,UAAU,SAAS,4BAA4B,KAAK;CACpD,YAAY,SAAS,oBAAC,sBAAD,EAAsB,GAAI,KAAO,CAAA;AACvD,CAAC;AAED,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,0BAA0B,KAAK,QAAQ;CAC1D,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;;AAGD,MAAa,qBAAqB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD"}
1
+ {"version":3,"file":"templates.js","names":[],"sources":["../src/templates.tsx"],"sourcesContent":["/**\n * Copyright 2026 ResQ Systems, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Built-in ResQ Systems template definitions — each pairs a `data`\n * schema with a subject builder and a React Email component, collected into\n * `resqEmailTemplates` for `createMailer`.\n *\n * @module @resq-systems/email-templates/templates\n */\n\nimport { IncidentAlertEmail } from \"./emails/incident-alert.js\";\nimport { MissionApprovalEmail } from \"./emails/mission-approval.js\";\nimport { NewDeviceLoginEmail } from \"./emails/new-device-login.js\";\nimport { NotificationEmail } from \"./emails/notification.js\";\nimport { OrgInvitationEmail } from \"./emails/org-invitation.js\";\nimport { OtpEmail } from \"./emails/otp.js\";\nimport { PasswordChangedEmail } from \"./emails/password-changed.js\";\nimport { PasswordResetEmail } from \"./emails/password-reset.js\";\nimport { WelcomeEmail } from \"./emails/welcome.js\";\nimport { defineEmailTemplate } from \"./mailer.js\";\nimport {\n\tincidentAlertData,\n\tmissionApprovalData,\n\tnewDeviceLoginData,\n\tnotificationData,\n\torgInvitationData,\n\totpData,\n\tpasswordChangedData,\n\tpasswordResetData,\n\twelcomeData,\n} from \"./schemas.js\";\n\n/** One-time verification code (OTP) template. */\nexport const otpTemplate = defineEmailTemplate({\n\tname: \"otp\",\n\tdata: otpData,\n\tsubject: (data) => `Your ResQ Systems verification code: ${data.code}`,\n\tComponent: (data) => <OtpEmail {...data} />,\n});\n\n/** Account welcome / onboarding template. */\nexport const welcomeTemplate = defineEmailTemplate({\n\tname: \"welcome\",\n\tdata: welcomeData,\n\tsubject: (data) => `Welcome to ResQ Systems, ${data.firstName}`,\n\tComponent: (data) => <WelcomeEmail {...data} />,\n});\n\n/** Password-reset template. */\nexport const passwordResetTemplate = defineEmailTemplate({\n\tname: \"password-reset\",\n\tdata: passwordResetData,\n\tsubject: () => \"Reset your ResQ Systems password\",\n\tComponent: (data) => <PasswordResetEmail {...data} />,\n});\n\n/** Generic notification / alert template. */\nexport const notificationTemplate = defineEmailTemplate({\n\tname: \"notification\",\n\tdata: notificationData,\n\tsubject: (data) => data.title,\n\tComponent: (data) => <NotificationEmail {...data} />,\n});\n\n/** Incident / dispatch alert template. */\nexport const incidentAlertTemplate = defineEmailTemplate({\n\tname: \"incident-alert\",\n\tdata: incidentAlertData,\n\tsubject: (data) => `[${data.severity.toUpperCase()}] ${data.title}`,\n\tComponent: (data) => <IncidentAlertEmail {...data} />,\n});\n\n/** Password-changed security-notice template. */\nexport const passwordChangedTemplate = defineEmailTemplate({\n\tname: \"password-changed\",\n\tdata: passwordChangedData,\n\tsubject: () => \"Your ResQ Systems password was changed\",\n\tComponent: (data) => <PasswordChangedEmail {...data} />,\n});\n\n/** New-device sign-in security-alert template. */\nexport const newDeviceLoginTemplate = defineEmailTemplate({\n\tname: \"new-device-login\",\n\tdata: newDeviceLoginData,\n\tsubject: () => \"New sign-in to your ResQ Systems account\",\n\tComponent: (data) => <NewDeviceLoginEmail {...data} />,\n});\n\n/** Mission-approval sign-off request template. */\nexport const missionApprovalTemplate = defineEmailTemplate({\n\tname: \"mission-approval\",\n\tdata: missionApprovalData,\n\tsubject: (data) => `Mission approval needed: ${data.title}`,\n\tComponent: (data) => <MissionApprovalEmail {...data} />,\n});\n\n/** Organization / team invitation template. */\nexport const orgInvitationTemplate = defineEmailTemplate({\n\tname: \"org-invitation\",\n\tdata: orgInvitationData,\n\tsubject: (data) => `You're invited to join ${data.orgName} on ResQ Systems`,\n\tComponent: (data) => <OrgInvitationEmail {...data} />,\n});\n\n/** The built-in ResQ Systems template set — spread into `createMailer` to extend it. */\nexport const resqEmailTemplates = [\n\totpTemplate,\n\twelcomeTemplate,\n\tpasswordResetTemplate,\n\tnotificationTemplate,\n\tincidentAlertTemplate,\n\tpasswordChangedTemplate,\n\tnewDeviceLoginTemplate,\n\tmissionApprovalTemplate,\n\torgInvitationTemplate,\n] as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,MAAa,cAAc,oBAAoB;CAC9C,MAAM;CACN,MAAM;CACN,UAAU,SAAS,wCAAwC,KAAK;CAChE,YAAY,SAAS,oBAAC,UAAD,EAAU,GAAI,KAAO,CAAA;AAC3C,CAAC;;AAGD,MAAa,kBAAkB,oBAAoB;CAClD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,4BAA4B,KAAK;CACpD,YAAY,SAAS,oBAAC,cAAD,EAAc,GAAI,KAAO,CAAA;AAC/C,CAAC;;AAGD,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;;AAGD,MAAa,uBAAuB,oBAAoB;CACvD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,KAAK;CACxB,YAAY,SAAS,oBAAC,mBAAD,EAAmB,GAAI,KAAO,CAAA;AACpD,CAAC;;AAGD,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,IAAI,KAAK,SAAS,YAAY,EAAE,IAAI,KAAK;CAC5D,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;;AAGD,MAAa,0BAA0B,oBAAoB;CAC1D,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,sBAAD,EAAsB,GAAI,KAAO,CAAA;AACvD,CAAC;;AAGD,MAAa,yBAAyB,oBAAoB;CACzD,MAAM;CACN,MAAM;CACN,eAAe;CACf,YAAY,SAAS,oBAAC,qBAAD,EAAqB,GAAI,KAAO,CAAA;AACtD,CAAC;;AAGD,MAAa,0BAA0B,oBAAoB;CAC1D,MAAM;CACN,MAAM;CACN,UAAU,SAAS,4BAA4B,KAAK;CACpD,YAAY,SAAS,oBAAC,sBAAD,EAAsB,GAAI,KAAO,CAAA;AACvD,CAAC;;AAGD,MAAa,wBAAwB,oBAAoB;CACxD,MAAM;CACN,MAAM;CACN,UAAU,SAAS,0BAA0B,KAAK,QAAQ;CAC1D,YAAY,SAAS,oBAAC,oBAAD,EAAoB,GAAI,KAAO,CAAA;AACrD,CAAC;;AAGD,MAAa,qBAAqB;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resq-systems/email-templates",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Type-safe transactional email templates: an Effect Schema contract, React Email components, headless render-to-html/text, and an optional Resend sender",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@react-email/components": "^1.0.12",
44
- "@react-email/render": "^2.0.10",
45
- "@resq-systems/constants": "^0.4.0"
44
+ "@react-email/render": "^2.1.0",
45
+ "@resq-systems/constants": "^0.5.0"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "effect": ">=4.0.0-beta.78",
@@ -56,7 +56,7 @@
56
56
  }
57
57
  },
58
58
  "devDependencies": {
59
- "@react-email/ui": "6.6.9",
59
+ "@react-email/ui": "6.9.0",
60
60
  "@total-typescript/ts-reset": "^0.6.1",
61
61
  "@types/node": "^26.1.1",
62
62
  "@types/react": "^19.2.16",
@@ -65,9 +65,9 @@
65
65
  "effect": "4.0.0-beta.98",
66
66
  "react": "^19.2.7",
67
67
  "react-dom": "^19.2.7",
68
- "react-email": "6.6.9",
68
+ "react-email": "6.9.0",
69
69
  "resend": "6.17.2",
70
- "tsdown": "^0.22.4",
70
+ "tsdown": "^0.22.9",
71
71
  "typescript": "7.0.2",
72
72
  "vitest": "4.1.8"
73
73
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"colors.d.ts","names":[],"sources":["../../../../../../node_modules/tailwindcss/dist/colors.d.mts"],"x_google_ignoreList":[0],"mappings":";cAAc;EACV;EACA;EACA;EACA;EACA;EACA;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEJ;IACI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lib.d.ts","names":[],"sources":["../../../../../../node_modules/tailwindcss/dist/lib.d.mts"],"x_google_ignoreList":[0],"mappings":";;UA4TU,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-config-QUZ9b-Gn.d.ts","names":[],"sources":["../../../../../../node_modules/tailwindcss/dist/resolve-config-QUZ9b-Gn.d.mts"],"x_google_ignoreList":[0],"mappings":";;KA4BK;EACD;;;;;;;;;;EAUA;;;;;;;EAOA;;KA0IC;EACD,QAAQ,iBAAiB;EACzB,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-DWdTiksJ.d.ts","names":[],"sources":["../../../../../../node_modules/tailwindcss/dist/types-DWdTiksJ.d.mts"],"x_google_ignoreList":[0],"mappings":";;;;;;;UAOU;;;;;;EAMN;;;;EAIA;;;;;;;;;KASC,kBAAkB,QAAQ,QAAQ,eAAe;KAGjD,YAAY,KAAK;KACjB;EACD,SAAS;EACT,SAAS;;EAET;EACA,MAAM;;KAEL,kBAAkB;GAClB,UAAU,IAAI;EACf;;KAEC,SAAS,WAAW,mBAAmB;KACvC;EACD,QAAQ,MAAM;EACd,WAAW,cAAc,6BAA6B;EACtD,aAAa,YAAY,cAAc,KAAK,OAAO,YAAY;IAC3D;2BACqB;IACrB,SAAS,eAAe;IACxB,MAAM;MACF,OAAO;MACP;OACD;MACC,OAAO;MACP;;;EAGR,aAAa,WAAW,eAAe,UAAU,aAAa,eAAe,UAAU,cAAc;EACrG,eAAe,WAAW,gBAAgB,eAAe;IACrD;QACE,UAAU,YAAY,UAAU;IAClC;IACA;IACA,QAAQ;MACJ,kBAAkB,OAAO;;IAE7B,mBAAmB;;EAEvB,cAAc,WAAW,eAAe,WAAW,eAAe,YAAY;EAC9E,gBAAgB,WAAW,gBAAgB,eAAe;IACtD;QACE,UAAU,UAAU;IACtB;IACA;IACA,QAAQ;MACJ,kBAAkB,OAAO;;IAE7B,mBAAmB;;EAEvB,MAAM,cAAc;EACpB,OAAO,eAAe;EACtB,OAAO;;KAEN;GACA,kCAAkC,UAAU;;KAG5C,aAAa,KAAK,MAAM,OAAO,gBAAgB;KAC/C,aAAa,aAAa;KAC1B,cAAc,eAAe;EAC9B,SAAS,eAAe;;KAEvB;EACD;EACA;;KAEC;UACK;EACN,UAAU;EACV,QAAQ;EACR,UAAU;;UAEJ;EACN,UAAU;IACN;IACA,OAAO;;;UAGL;EACN,WAAW;;UAEL;EACN;;UAEM;EACN;;UAEM;EACN;;UAEM;EACN,iBAAiB;;UAEX;EACN,uBAAuB"}