@hartl-services/medusa-base 2.5.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/ImageSettingInput.js +48 -0
  2. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginActionsSection.js +3 -2
  3. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +17 -0
  4. package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginPageShell.js +20 -0
  5. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginSettingsForm.js +16 -3
  6. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +5 -1
  7. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +20 -4
  8. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatures.js +1 -1
  9. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +5 -1
  10. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/action-runs.d.ts +1 -1
  11. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/action-runs.js +3 -2
  12. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +20 -4
  13. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-features-admin-client.js +1 -1
  14. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/settings-draft.d.ts +17 -2
  15. package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/settings-draft.js +33 -1
  16. package/{dist → .medusa/server/src/admin}/admin-components/i18n/texts.d.ts +3 -0
  17. package/{dist → .medusa/server/src/admin}/admin-components/i18n/texts.js +3 -0
  18. package/.medusa/server/src/admin/admin-components/index.d.ts +36 -0
  19. package/.medusa/server/src/admin/admin-components/index.js +37 -0
  20. package/.medusa/server/src/admin/admin-components/shared/lib/date-input.d.ts +8 -0
  21. package/.medusa/server/src/admin/admin-components/shared/lib/date-input.js +43 -0
  22. package/.medusa/server/src/admin/admin-components/shared/lib/errors.d.ts +9 -0
  23. package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/errors.js +4 -6
  24. package/.medusa/server/src/admin/admin-components/shared/lib/file-validation.d.ts +24 -0
  25. package/.medusa/server/src/admin/admin-components/shared/lib/file-validation.js +18 -0
  26. package/.medusa/server/src/admin/admin-components/shared/lib/format.d.ts +32 -0
  27. package/.medusa/server/src/admin/admin-components/shared/lib/format.js +77 -0
  28. package/.medusa/server/src/admin/admin-components/shared/lib/pdf-preview.d.ts +16 -0
  29. package/.medusa/server/src/admin/admin-components/shared/lib/pdf-preview.js +31 -0
  30. package/.medusa/server/src/admin/admin-components/shared/lib/pdf.d.ts +6 -0
  31. package/.medusa/server/src/admin/admin-components/shared/lib/pdf.js +13 -0
  32. package/.medusa/server/src/admin/admin-components/shared/lib/use-debounced-value.d.ts +2 -0
  33. package/.medusa/server/src/admin/admin-components/shared/lib/use-debounced-value.js +10 -0
  34. package/.medusa/server/src/admin/admin-components/shared/lib/use-pdf-preview.d.ts +24 -0
  35. package/.medusa/server/src/admin/admin-components/shared/lib/use-pdf-preview.js +47 -0
  36. package/.medusa/server/src/admin/admin-components/shared/ui/AdminDatePicker.d.ts +8 -0
  37. package/.medusa/server/src/admin/admin-components/shared/ui/AdminDatePicker.js +9 -0
  38. package/.medusa/server/src/admin/admin-components/shared/ui/BackLink.d.ts +8 -0
  39. package/.medusa/server/src/admin/admin-components/shared/ui/BackLink.js +5 -0
  40. package/.medusa/server/src/admin/admin-components/shared/ui/DateRangeFilter.d.ts +20 -0
  41. package/.medusa/server/src/admin/admin-components/shared/ui/DateRangeFilter.js +17 -0
  42. package/.medusa/server/src/admin/admin-components/shared/ui/FilePickerButton.d.ts +14 -0
  43. package/.medusa/server/src/admin/admin-components/shared/ui/FilePickerButton.js +14 -0
  44. package/.medusa/server/src/admin/admin-components/shared/ui/MappedStatusBadge.d.ts +17 -0
  45. package/.medusa/server/src/admin/admin-components/shared/ui/MappedStatusBadge.js +12 -0
  46. package/.medusa/server/src/admin/admin-components/shared/ui/OffsetTablePagination.d.ts +15 -0
  47. package/.medusa/server/src/admin/admin-components/shared/ui/OffsetTablePagination.js +19 -0
  48. package/.medusa/server/src/admin/admin-components/shared/ui/PdfPreviewModal.d.ts +20 -0
  49. package/.medusa/server/src/admin/admin-components/shared/ui/PdfPreviewModal.js +7 -0
  50. package/.medusa/server/src/admin/admin-components/shared/ui/PluginFeatureRoute.d.ts +19 -0
  51. package/.medusa/server/src/admin/admin-components/shared/ui/PluginFeatureRoute.js +16 -0
  52. package/.medusa/server/src/admin/admin-components/shared/ui/QueryState.d.ts +24 -0
  53. package/.medusa/server/src/admin/admin-components/shared/ui/QueryState.js +23 -0
  54. package/.medusa/server/src/admin/admin-components/shared/ui/SearchableReferenceField.d.ts +63 -0
  55. package/.medusa/server/src/admin/admin-components/shared/ui/SearchableReferenceField.js +84 -0
  56. package/.medusa/server/src/admin/admin-components/shared/ui/SectionHeader.d.ts +15 -0
  57. package/.medusa/server/src/admin/admin-components/shared/ui/SectionHeader.js +13 -0
  58. package/.medusa/server/src/admin/admin-components/shared/ui/mapped-status.d.ts +6 -0
  59. package/.medusa/server/src/admin/admin-components/shared/ui/mapped-status.js +10 -0
  60. package/.medusa/server/src/admin/admin-components/shared/ui/offset-pagination.d.ts +17 -0
  61. package/.medusa/server/src/admin/admin-components/shared/ui/offset-pagination.js +15 -0
  62. package/.medusa/server/src/admin/admin-components/shared/ui/reference-results-state.d.ts +16 -0
  63. package/.medusa/server/src/admin/admin-components/shared/ui/reference-results-state.js +13 -0
  64. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/InsertMenu.d.ts +8 -0
  65. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/InsertMenu.js +10 -0
  66. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/LinkPrompt.d.ts +14 -0
  67. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/LinkPrompt.js +26 -0
  68. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextEditor.d.ts +15 -0
  69. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextEditor.js +8 -0
  70. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextToolbar.d.ts +10 -0
  71. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/RichTextToolbar.js +49 -0
  72. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/SlashMenu.d.ts +11 -0
  73. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/SlashMenu.js +44 -0
  74. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/build-extensions.d.ts +8 -0
  75. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/build-extensions.js +43 -0
  76. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-handle.d.ts +15 -0
  77. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-handle.js +161 -0
  78. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-target.d.ts +30 -0
  79. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/drag-target.js +47 -0
  80. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/editor-styles.d.ts +6 -0
  81. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/editor-styles.js +46 -0
  82. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/index.d.ts +9 -0
  83. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/index.js +6 -0
  84. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-href.d.ts +8 -0
  85. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-href.js +21 -0
  86. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-policy.d.ts +13 -0
  87. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/link-policy.js +20 -0
  88. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-command.d.ts +13 -0
  89. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-command.js +60 -0
  90. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-items.d.ts +25 -0
  91. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/slash-items.js +10 -0
  92. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/tiptap.d.ts +7 -0
  93. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/tiptap.js +7 -0
  94. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/use-rich-text-editor.d.ts +44 -0
  95. package/.medusa/server/src/admin/admin-components/shared/ui/rich-text-editor/use-rich-text-editor.js +37 -0
  96. package/.medusa/server/src/admin/index.js +4519 -1447
  97. package/.medusa/server/src/admin/index.mjs +4521 -1452
  98. package/.medusa/server/src/api/admin/email/attachments/[id]/mail-kinds/route.js +16 -0
  99. package/.medusa/server/src/api/admin/email/attachments/[id]/route.js +15 -0
  100. package/.medusa/server/src/api/admin/email/attachments/[id]/versions/[version_id]/download/route.js +16 -0
  101. package/.medusa/server/src/api/admin/email/attachments/[id]/versions/route.js +41 -0
  102. package/.medusa/server/src/api/admin/email/attachments/route.js +21 -0
  103. package/.medusa/server/src/api/admin/email/templates/[kind]/preview/route.js +31 -0
  104. package/.medusa/server/src/api/admin/email/templates/[kind]/route.js +28 -0
  105. package/.medusa/server/src/api/admin/email/templates/[kind]/send-test/route.js +179 -0
  106. package/.medusa/server/src/api/admin/email/templates/[kind]/test-sources/route.js +19 -0
  107. package/.medusa/server/src/api/admin/email/templates/route.js +15 -0
  108. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/route.js +2 -2
  109. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/runs/route.js +2 -2
  110. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/route.js +2 -2
  111. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/settings/route.js +2 -2
  112. package/.medusa/server/src/api/admin/plugin-features/route.js +2 -2
  113. package/.medusa/server/src/api/attachment-download-response.js +12 -0
  114. package/.medusa/server/src/api/email-template-response.js +43 -0
  115. package/.medusa/server/src/api/middlewares.js +75 -17
  116. package/.medusa/server/src/api/plugin-actions.js +6 -5
  117. package/.medusa/server/src/api/plugin-features-http.js +4 -9
  118. package/.medusa/server/src/api/store/carts/[id]/completion-check/route.js +2 -2
  119. package/.medusa/server/src/api/store/plugin-features/[plugin_key]/route.js +2 -2
  120. package/.medusa/server/src/api/store/plugin-features/route.js +2 -2
  121. package/.medusa/server/src/documents/plugin-features.js +1 -7
  122. package/.medusa/server/src/documents/templates/financial-document.js +12 -11
  123. package/.medusa/server/src/documents/templates/html-factory.js +1 -1
  124. package/.medusa/server/src/documents/templates/html-utils.js +4 -10
  125. package/.medusa/server/src/documents/templates/layout.js +30 -11
  126. package/.medusa/server/src/documents/templates/packing-list.js +8 -7
  127. package/.medusa/server/src/documents/utils/document-render-settings.js +9 -6
  128. package/.medusa/server/src/email/application/handle-customer-verification-event.js +8 -3
  129. package/.medusa/server/src/email/application/handle-invite-event.js +8 -3
  130. package/.medusa/server/src/email/application/handle-password-reset-event.js +8 -3
  131. package/.medusa/server/src/email/application/notification-attachments.js +86 -0
  132. package/.medusa/server/src/email/application/template-data-from-order.js +339 -0
  133. package/.medusa/server/src/email/config/index.js +5 -29
  134. package/.medusa/server/src/email/domain/business-keys.js +5 -5
  135. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +3 -3
  136. package/.medusa/server/src/email/domain/order-summary.js +21 -27
  137. package/.medusa/server/src/email/domain/refund-summary.js +7 -12
  138. package/.medusa/server/src/email/domain/return-summary.js +32 -38
  139. package/.medusa/server/src/email/domain/shipment-summary.js +22 -28
  140. package/.medusa/server/src/email/plugin-features.js +2 -10
  141. package/.medusa/server/src/email/rendering/calendar-dates.js +19 -0
  142. package/.medusa/server/src/email/rendering/default-templates.js +99 -682
  143. package/.medusa/server/src/email/rendering/email-html.js +189 -0
  144. package/.medusa/server/src/email/rendering/load-email-shop-details.js +14 -12
  145. package/.medusa/server/src/email/rendering/render-email.js +46 -13
  146. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +3 -14
  147. package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +427 -0
  148. package/.medusa/server/src/email/templates/blocks/placeholders.js +71 -0
  149. package/.medusa/server/src/email/templates/blocks/render-document.js +137 -0
  150. package/.medusa/server/src/email/templates/code-override.js +18 -0
  151. package/.medusa/server/src/email/templates/defaults/documents.js +129 -0
  152. package/.medusa/server/src/email/templates/defaults/subjects.js +62 -0
  153. package/.medusa/server/src/email/templates/defaults/texts.js +42 -0
  154. package/.medusa/server/src/email/templates/index.js +22 -0
  155. package/.medusa/server/src/email/templates/load-template.js +39 -0
  156. package/.medusa/server/src/email/templates/preview.js +33 -0
  157. package/.medusa/server/src/email/templates/render.js +70 -0
  158. package/.medusa/server/src/email/templates/sample-data.js +165 -0
  159. package/.medusa/server/src/email/templates/types.js +3 -0
  160. package/.medusa/server/src/email/templates/validate.js +113 -0
  161. package/.medusa/server/src/files/config/index.js +6 -9
  162. package/.medusa/server/src/migration-scripts/move-logo-to-shop-appearance.js +53 -0
  163. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +4 -3
  164. package/.medusa/server/src/modules/documents/domain/merchant.js +4 -3
  165. package/.medusa/server/src/modules/documents/domain/options.js +3 -5
  166. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +4 -7
  167. package/.medusa/server/src/modules/documents/service.js +12 -33
  168. package/.medusa/server/src/modules/email/domain/attachment.js +22 -8
  169. package/.medusa/server/src/modules/email/migrations/Migration20261009083539.js +80 -0
  170. package/.medusa/server/src/modules/email/migrations/Migration20261009100654.js +17 -0
  171. package/.medusa/server/src/modules/email/models/email-attachment-document-version.js +39 -0
  172. package/.medusa/server/src/modules/email/models/email-attachment-document.js +27 -0
  173. package/.medusa/server/src/modules/email/models/email-template.js +25 -0
  174. package/.medusa/server/src/modules/email/service.js +370 -93
  175. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +9 -11
  176. package/.medusa/server/src/modules/plugin-features/service.js +2 -1
  177. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +3 -3
  178. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +3 -9
  179. package/.medusa/server/src/providers/smtp/service.js +13 -13
  180. package/.medusa/server/src/public/descriptor.js +16 -18
  181. package/.medusa/server/src/public/enforcement.js +29 -1
  182. package/.medusa/server/src/public/index.js +8 -2
  183. package/.medusa/server/src/public/module-access.js +9 -2
  184. package/.medusa/server/src/public/shop-master-data.js +109 -18
  185. package/.medusa/server/src/shared/lib/coerce.js +26 -0
  186. package/.medusa/server/src/shared/lib/collections.js +19 -0
  187. package/.medusa/server/src/shared/lib/dates.js +43 -0
  188. package/.medusa/server/src/shared/lib/errors.js +11 -0
  189. package/.medusa/server/src/shared/lib/hash.js +8 -0
  190. package/.medusa/server/src/shared/lib/index.js +29 -0
  191. package/.medusa/server/src/shared/lib/logging.js +61 -0
  192. package/.medusa/server/src/shared/lib/money.js +47 -0
  193. package/.medusa/server/src/shared/lib/text.js +53 -0
  194. package/.medusa/server/src/shared/lib/transaction.js +58 -0
  195. package/.medusa/server/src/{api → shared/lib}/wire-response.js +1 -1
  196. package/.medusa/server/src/shop-config/options.js +3 -5
  197. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +4 -6
  198. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +10 -12
  199. package/.medusa/server/src/workflows/documents/issue-packing-list.js +5 -6
  200. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +6 -8
  201. package/.medusa/server/src/workflows/email/dispatch-email-message.js +11 -41
  202. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +2 -2
  203. package/.medusa/server/src/workflows/hooks/complete-cart-participants.js +4 -8
  204. package/README.md +427 -54
  205. package/dist/documents/templates/financial-document.js +11 -10
  206. package/dist/documents/templates/html-factory.d.ts +1 -1
  207. package/dist/documents/templates/html-factory.js +1 -1
  208. package/dist/documents/templates/html-utils.d.ts +0 -1
  209. package/dist/documents/templates/html-utils.js +3 -9
  210. package/dist/documents/templates/layout.js +29 -10
  211. package/dist/documents/templates/packing-list.js +7 -6
  212. package/dist/documents/types/documents.d.ts +7 -1
  213. package/dist/email/config/index.js +4 -28
  214. package/dist/email/types/shop-configuration.d.ts +6 -5
  215. package/dist/files/config/index.js +5 -8
  216. package/dist/modules/documents/domain/options.js +2 -4
  217. package/dist/public/descriptor.js +15 -17
  218. package/dist/public/enforcement.d.ts +21 -1
  219. package/dist/public/enforcement.js +28 -0
  220. package/dist/public/index.d.ts +3 -2
  221. package/dist/public/index.js +7 -1
  222. package/dist/public/module-access.d.ts +8 -0
  223. package/dist/public/module-access.js +8 -1
  224. package/dist/public/shop-master-data.d.ts +22 -5
  225. package/dist/public/shop-master-data.js +108 -17
  226. package/dist/public/types.d.ts +10 -2
  227. package/dist/shared/lib/coerce.d.ts +19 -0
  228. package/dist/shared/lib/coerce.js +25 -0
  229. package/dist/shared/lib/collections.d.ts +3 -0
  230. package/dist/shared/lib/collections.js +18 -0
  231. package/dist/shared/lib/dates.d.ts +12 -0
  232. package/dist/shared/lib/dates.js +42 -0
  233. package/dist/shared/lib/errors.d.ts +2 -0
  234. package/dist/shared/lib/errors.js +10 -0
  235. package/dist/shared/lib/hash.d.ts +2 -0
  236. package/dist/shared/lib/hash.js +7 -0
  237. package/dist/shared/lib/index.d.ts +10 -0
  238. package/dist/shared/lib/index.js +28 -0
  239. package/dist/shared/lib/logging.d.ts +26 -0
  240. package/dist/shared/lib/logging.js +60 -0
  241. package/dist/shared/lib/money.d.ts +13 -0
  242. package/dist/shared/lib/money.js +46 -0
  243. package/dist/shared/lib/text.d.ts +19 -0
  244. package/dist/shared/lib/text.js +52 -0
  245. package/dist/shared/lib/transaction.d.ts +26 -0
  246. package/dist/shared/lib/transaction.js +57 -0
  247. package/dist/shared/lib/wire-response.d.ts +6 -0
  248. package/dist/shared/lib/wire-response.js +9 -0
  249. package/dist/shop-config/options.js +2 -4
  250. package/package.json +19 -4
  251. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +0 -16
  252. package/.medusa/server/src/api/admin/email/terms-versions/route.js +0 -47
  253. package/.medusa/server/src/api/terms-download-response.js +0 -12
  254. package/.medusa/server/src/modules/email/models/email-terms-version.js +0 -37
  255. package/dist/admin-components/features/plugin-features/components/ImageSettingInput.js +0 -42
  256. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +0 -16
  257. package/dist/admin-components/features/plugin-features/components/PluginPageShell.js +0 -20
  258. package/dist/admin-components/features/plugin-features/lib/image-upload.d.ts +0 -6
  259. package/dist/admin-components/features/plugin-features/lib/image-upload.js +0 -17
  260. package/dist/admin-components/index.d.ts +0 -14
  261. package/dist/admin-components/index.js +0 -14
  262. package/dist/admin-components/lib/errors.d.ts +0 -6
  263. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +0 -0
  264. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginActionsSection.d.ts +0 -0
  265. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginDetailPage.d.ts +0 -0
  266. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginDetailPage.js +0 -0
  267. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureGate.d.ts +0 -0
  268. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureGate.js +0 -0
  269. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +0 -0
  270. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeatureSections.js +0 -0
  271. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +0 -0
  272. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesCard.js +0 -0
  273. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +0 -0
  274. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginHubCard.d.ts +0 -0
  275. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginHubCard.js +0 -0
  276. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginPageShell.d.ts +0 -0
  277. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +0 -0
  278. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +0 -0
  279. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/components/PluginStatusChips.js +0 -0
  280. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.js +0 -0
  281. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/hooks/usePluginSettingsForm.js +0 -0
  282. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-paths.d.ts +0 -0
  283. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/lib/plugin-paths.js +0 -0
  284. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/queries/pluginFeatureKeys.d.ts +0 -0
  285. /package/{dist → .medusa/server/src/admin}/admin-components/features/plugin-features/queries/pluginFeatureKeys.js +0 -0
  286. /package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/sdk.d.ts +0 -0
  287. /package/{dist/admin-components → .medusa/server/src/admin/admin-components/shared}/lib/sdk.js +0 -0
@@ -1,123 +1,91 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createDefaultEmailRenderers = exports.createDefaultEmailLayout = void 0;
4
- const format_1 = require("../../documents/templates/format");
5
- const escapeHtml = (value) => value
6
- .replaceAll("&", "&")
7
- .replaceAll("<", "&lt;")
8
- .replaceAll(">", "&gt;")
9
- .replaceAll('"', "&quot;")
10
- .replaceAll("'", "&#039;");
11
- // Mail clients ignore stylesheets and flexbox: tables and inline styles only.
12
- const FONT = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif";
13
- const COLOR = {
14
- background: "#f4f4f5",
15
- border: "#e4e4e7",
16
- heading: "#18181b",
17
- text: "#3f3f46",
18
- muted: "#71717a",
19
- faint: "#a1a1aa",
20
- };
21
- const paragraph = (html) => `<p style="margin: 0 0 16px; font-family: ${FONT}; font-size: 15px; line-height: 24px; color: ${COLOR.text};">${html}</p>`;
22
- const sectionHeading = (label) => `<h2 style="margin: 28px 0 12px; font-family: ${FONT}; font-size: 13px; line-height: 18px; font-weight: 600; letter-spacing: 0.4px; text-transform: uppercase; color: ${COLOR.muted};">${escapeHtml(label)}</h2>`;
23
- const details = (rows) => `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin: 8px 0 24px; background: ${COLOR.background}; border-radius: 6px;">${rows
24
- .map(([label, value]) => `<tr><td style="padding: 10px 16px; font-family: ${FONT}; font-size: 13px; color: ${COLOR.muted}; width: 45%;">${escapeHtml(label)}</td><td style="padding: 10px 16px; font-family: ${FONT}; font-size: 14px; font-weight: 600; color: ${COLOR.heading};">${escapeHtml(value)}</td></tr>`)
25
- .join("")}</table>`;
26
- const button = (url, label) => {
27
- const href = escapeHtml(url);
28
- return `<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin: 8px 0 24px;"><tr><td style="border-radius: 6px; background: ${COLOR.heading};"><a href="${href}" style="display: inline-block; padding: 12px 22px; font-family: ${FONT}; font-size: 15px; font-weight: 600; color: #ffffff; text-decoration: none; border-radius: 6px;">${escapeHtml(label)}</a></td></tr></table>`;
29
- };
30
- const isHttpUrl = (value) => {
31
- if (!value) {
32
- return false;
33
- }
34
- try {
35
- const { protocol } = new URL(value);
36
- return protocol === "http:" || protocol === "https:";
37
- }
38
- catch {
39
- return false;
40
- }
41
- };
42
- const joinPresent = (values, separator) => values.filter((value) => Boolean(value?.trim())).join(separator);
43
- const logoHtml = (shop, displayName) => isHttpUrl(shop.logo)
4
+ const code_override_1 = require("../templates/code-override");
5
+ const texts_1 = require("../templates/defaults/texts");
6
+ const subjects_1 = require("../templates/defaults/subjects");
7
+ const render_1 = require("../templates/render");
8
+ const email_html_1 = require("./email-html");
9
+ const lib_1 = require("../../shared/lib");
10
+ const logoHtml = (p, shop, displayName) => (0, lib_1.isHttpUrl)(shop.logo)
44
11
  ? // Height only: mail clients scale the width to the logo's aspect ratio.
45
- `<img src="${escapeHtml(shop.logo)}" alt="${escapeHtml(displayName)}" height="56" style="display: block; margin: 0 auto; height: 56px; width: auto; max-width: 240px; border: 0; outline: none; text-decoration: none;" />`
46
- : `<span style="font-family: ${FONT}; font-size: 20px; font-weight: 700; color: ${COLOR.heading};">${escapeHtml(displayName)}</span>`;
47
- const linkStyle = `color: ${COLOR.muted}; text-decoration: underline;`;
12
+ `<img src="${(0, lib_1.escapeHtml)(shop.logo)}" alt="${(0, lib_1.escapeHtml)(displayName)}" height="56" style="display: block; margin: 0 auto; height: 56px; width: auto; max-width: 240px; border: 0; outline: none; text-decoration: none;" />`
13
+ : `<span style="font-family: ${email_html_1.FONT}; font-size: 20px; font-weight: 700; color: ${p.accent};">${(0, lib_1.escapeHtml)(displayName)}</span>`;
48
14
  /** "Fragen? Schreib uns an … oder ruf uns an unter …"; empty without contact data. */
49
- const contactHtml = (shop) => {
15
+ const contactHtml = (p, shop) => {
50
16
  const email = shop.email?.trim();
51
17
  const phone = shop.phone?.trim();
52
18
  const mail = email
53
- ? `schreib uns an <a href="mailto:${escapeHtml(email)}" style="${linkStyle}">${escapeHtml(email)}</a>`
19
+ ? `schreib uns an <a href="mailto:${(0, lib_1.escapeHtml)(email)}" style="${(0, email_html_1.linkStyle)(p)}">${(0, lib_1.escapeHtml)(email)}</a>`
54
20
  : "";
55
21
  const call = phone
56
- ? `ruf uns an unter <a href="tel:${escapeHtml(phone.replace(/[^\d+]/g, ""))}" style="${linkStyle}">${escapeHtml(phone)}</a>`
22
+ ? `ruf uns an unter <a href="tel:${(0, lib_1.escapeHtml)(phone.replace(/[^\d+]/g, ""))}" style="${(0, email_html_1.linkStyle)(p)}">${(0, lib_1.escapeHtml)(phone)}</a>`
57
23
  : "";
58
- const ways = joinPresent([mail, call], " oder ");
24
+ const ways = (0, email_html_1.joinPresent)([mail, call], " oder ");
59
25
  return ways ? `Fragen? Dann ${ways}.` : "";
60
26
  };
61
27
  /** Company details of the footer, one entry per line. */
62
- const companyLines = (shop, displayName) => {
63
- const website = isHttpUrl(shop.website)
64
- ? `<a href="${escapeHtml(shop.website)}" style="${linkStyle}">${escapeHtml(shop.website.replace(/^https?:\/\//, "").replace(/\/$/, ""))}</a>`
28
+ const companyLines = (p, shop, displayName) => {
29
+ const website = (0, lib_1.isHttpUrl)(shop.website)
30
+ ? `<a href="${(0, lib_1.escapeHtml)(shop.website)}" style="${(0, email_html_1.linkStyle)(p)}">${(0, lib_1.escapeHtml)(shop.website.replace(/^https?:\/\//, "").replace(/\/$/, ""))}</a>`
65
31
  : "";
66
- const register = joinPresent([
32
+ const register = (0, email_html_1.joinPresent)([
67
33
  shop.company_register_number &&
68
- `Firmenbuch: ${escapeHtml(shop.company_register_number)}`,
69
- shop.company_register_court && escapeHtml(shop.company_register_court),
34
+ `Firmenbuch: ${(0, lib_1.escapeHtml)(shop.company_register_number)}`,
35
+ shop.company_register_court && (0, lib_1.escapeHtml)(shop.company_register_court),
70
36
  ], ", ");
71
37
  return [
72
- escapeHtml(shop.legal_name?.trim() || displayName),
73
- escapeHtml(joinPresent([
38
+ (0, lib_1.escapeHtml)(shop.legal_name?.trim() || displayName),
39
+ (0, lib_1.escapeHtml)((0, email_html_1.joinPresent)([
74
40
  shop.address_line1,
75
41
  shop.address_line2,
76
- joinPresent([shop.postal_code, shop.city], " "),
77
- shop.country_code ? countryName(shop.country_code) : null,
42
+ (0, email_html_1.joinPresent)([shop.postal_code, shop.city], " "),
43
+ shop.country_code ? (0, email_html_1.countryName)(shop.country_code) : null,
78
44
  ], ", ")),
79
- joinPresent([shop.vat_number && `UID: ${escapeHtml(shop.vat_number)}`, register], " · "),
45
+ (0, email_html_1.joinPresent)([shop.vat_number && `UID: ${(0, lib_1.escapeHtml)(shop.vat_number)}`, register], " · "),
80
46
  website,
81
47
  ].filter(Boolean);
82
48
  };
83
49
  /**
84
50
  * Neutral grey default layout: logo (or `displayName`) on top, the subject
85
- * as heading, contact line and the shop master data in the footer.
51
+ * as heading, contact line and the shop master data in the footer. The
52
+ * shop's appearance colors replace the grey defaults one by one.
86
53
  */
87
54
  const createDefaultEmailLayout = (displayName) => {
88
55
  return ({ audience, bodyHtml, preheader, shop, subject }) => {
56
+ const p = (0, email_html_1.paletteFor)(shop);
89
57
  // The shop's own team does not need to be told how to reach the shop.
90
- const contact = audience === "customer" ? contactHtml(shop) : "";
58
+ const contact = audience === "customer" ? contactHtml(p, shop) : "";
91
59
  return `<!doctype html>
92
60
  <html lang="de">
93
61
  <head>
94
62
  <meta charset="utf-8" />
95
63
  <meta name="viewport" content="width=device-width, initial-scale=1" />
96
64
  <meta name="color-scheme" content="light" />
97
- <title>${escapeHtml(subject)}</title>
65
+ <title>${(0, lib_1.escapeHtml)(subject)}</title>
98
66
  </head>
99
- <body style="margin: 0; padding: 0; background: ${COLOR.background}; font-family: ${FONT}; color: ${COLOR.text};">
100
- <div style="display: none; max-height: 0; overflow: hidden; opacity: 0;">${escapeHtml(preheader)}</div>
101
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background: ${COLOR.background};">
67
+ <body style="margin: 0; padding: 0; background: ${p.background}; font-family: ${email_html_1.FONT}; color: ${p.text};">
68
+ <div style="display: none; max-height: 0; overflow: hidden; opacity: 0;">${(0, lib_1.escapeHtml)(preheader)}</div>
69
+ <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background: ${p.background};">
102
70
  <tr>
103
71
  <td align="center" style="padding: 32px 12px;">
104
72
  <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="max-width: 600px;">
105
73
  <tr>
106
- <td align="center" style="padding: 0 4px 24px; text-align: center;">${logoHtml(shop, displayName)}</td>
74
+ <td align="center" style="padding: 0 4px 24px; text-align: center;">${logoHtml(p, shop, displayName)}</td>
107
75
  </tr>
108
76
  <tr>
109
- <td style="background: #ffffff; border: 1px solid ${COLOR.border}; border-radius: 8px; padding: 36px 32px; font-family: ${FONT}; font-size: 15px; line-height: 24px; color: ${COLOR.text};">
110
- <h1 style="margin: 0 0 20px; font-family: ${FONT}; font-size: 22px; line-height: 30px; font-weight: 700; color: ${COLOR.heading};">${escapeHtml(subject)}</h1>
77
+ <td style="background: #ffffff; border: 1px solid ${p.border}; border-radius: 8px; padding: 36px 32px; font-family: ${email_html_1.FONT}; font-size: 15px; line-height: 24px; color: ${p.text};">
78
+ <h1 style="margin: 0 0 20px; font-family: ${email_html_1.FONT}; font-size: 22px; line-height: 30px; font-weight: 700; color: ${p.accent};">${(0, lib_1.escapeHtml)(subject)}</h1>
111
79
  ${bodyHtml}
112
80
  </td>
113
81
  </tr>${contact
114
82
  ? `
115
83
  <tr>
116
- <td align="center" style="padding: 24px 4px 0; font-family: ${FONT}; font-size: 14px; line-height: 21px; color: ${COLOR.text}; text-align: center;">${contact}</td>
84
+ <td align="center" style="padding: 24px 4px 0; font-family: ${email_html_1.FONT}; font-size: 14px; line-height: 21px; color: ${p.text}; text-align: center;">${contact}</td>
117
85
  </tr>`
118
86
  : ""}
119
87
  <tr>
120
- <td align="center" style="padding: 24px 4px 0; font-family: ${FONT}; font-size: 12px; line-height: 18px; color: ${COLOR.faint}; text-align: center;">${companyLines(shop, displayName).join("<br />")}<br /><br />Diese E-Mail wurde automatisch versendet.</td>
88
+ <td align="center" style="padding: 24px 4px 0; font-family: ${email_html_1.FONT}; font-size: 12px; line-height: 18px; color: ${p.faint}; text-align: center;">${companyLines(p, shop, displayName).join("<br />")}<br /><br />Diese E-Mail wurde automatisch versendet.</td>
121
89
  </tr>
122
90
  </table>
123
91
  </td>
@@ -128,646 +96,95 @@ const createDefaultEmailLayout = (displayName) => {
128
96
  };
129
97
  };
130
98
  exports.createDefaultEmailLayout = createDefaultEmailLayout;
131
- const orderReference = (summary, orderId) => summary.display_id === null ? orderId : `#${summary.display_id}`;
132
- // Medusa names the variant of a product without options "Default variant".
133
- const isDefaultVariantTitle = (title) => /^default( variant)?$/i.test(title);
134
- const countryName = (countryCode) => {
135
- try {
136
- return (new Intl.DisplayNames("de", { type: "region" }).of(countryCode.toUpperCase()) ?? countryCode.toUpperCase());
137
- }
138
- catch {
139
- return countryCode.toUpperCase();
140
- }
141
- };
142
- const addressLines = (address) => [
143
- address.company,
144
- [address.first_name, address.last_name].filter(Boolean).join(" "),
145
- address.address_1,
146
- address.address_2,
147
- [address.postal_code, address.city].filter(Boolean).join(" "),
148
- address.country_code ? countryName(address.country_code) : null,
149
- ].filter((line) => Boolean(line));
150
- const orderSummaryRows = (summary) => {
151
- const money = (amount) => (0, format_1.formatMoney)({ amount, currencyCode: summary.currency_code });
152
- const shippingLabel = summary.shipping_method_names.length
153
- ? `Versand (${summary.shipping_method_names.join(", ")})`
154
- : "Versand";
155
- const rows = [
156
- { label: "Zwischensumme", amount: money(summary.original_item_total) },
157
- {
158
- label: shippingLabel,
159
- amount: Number(summary.original_shipping_total) === 0
160
- ? "kostenlos"
161
- : money(summary.original_shipping_total),
162
- },
163
- ];
164
- if (Number(summary.discount_total) > 0) {
165
- rows.push({
166
- label: "Rabatt",
167
- amount: `− ${money(summary.discount_total)}`,
168
- });
169
- }
170
- rows.push({
171
- label: "Gesamt",
172
- amount: money(summary.total),
173
- emphasis: true,
174
- note: Number(summary.tax_total) > 0
175
- ? `inkl. ${money(summary.tax_total)} MwSt.`
176
- : undefined,
177
- });
178
- return rows;
179
- };
180
- const renderOrderSummaryHtml = (summary, heading, { withAddresses = true } = {}) => {
181
- const money = (amount) => escapeHtml((0, format_1.formatMoney)({ amount, currencyCode: summary.currency_code }));
182
- const cell = `font-family: ${FONT}; font-size: 14px; line-height: 20px; color: ${COLOR.text}; padding: 12px 0; border-bottom: 1px solid ${COLOR.border};`;
183
- const items = summary.items
184
- .map((item) => {
185
- const variant = item.variant_title && !isDefaultVariantTitle(item.variant_title)
186
- ? `<br /><span style="font-size: 13px; color: ${COLOR.muted};">${escapeHtml(item.variant_title)}</span>`
187
- : "";
188
- return `<tr><td style="${cell}"><span style="color: ${COLOR.heading}; font-weight: 600;">${escapeHtml(item.title)}</span>${variant}</td><td style="${cell} width: 48px; text-align: right; white-space: nowrap; color: ${COLOR.muted};">${escapeHtml(String(item.quantity))} ×</td><td style="${cell} width: 110px; text-align: right; white-space: nowrap;">${money(item.original_total)}</td></tr>`;
189
- })
190
- .join("");
191
- const totals = orderSummaryRows(summary)
192
- .map(({ amount, emphasis, label, note }) => {
193
- const style = emphasis
194
- ? `padding: 12px 0 0; font-size: 16px; font-weight: 700; color: ${COLOR.heading}; border-top: 1px solid ${COLOR.border};`
195
- : `padding: 4px 0; font-size: 14px; color: ${COLOR.text};`;
196
- const noteHtml = note
197
- ? `<tr><td colspan="2" style="padding: 2px 0 0; font-family: ${FONT}; font-size: 12px; color: ${COLOR.muted}; text-align: right;">${escapeHtml(note)}</td></tr>`
198
- : "";
199
- return `<tr><td style="font-family: ${FONT}; ${style}">${escapeHtml(label)}</td><td style="font-family: ${FONT}; ${style} text-align: right; white-space: nowrap;">${escapeHtml(amount)}</td></tr>${noteHtml}`;
200
- })
201
- .join("");
202
- const addressColumn = (label, address) => address
203
- ? `<td valign="top" width="50%" style="padding: 0 12px 0 0;">${sectionHeading(label)}<p style="margin: 0; font-family: ${FONT}; font-size: 14px; line-height: 21px; color: ${COLOR.text};">${addressLines(address).map(escapeHtml).join("<br />")}</p></td>`
204
- : "";
205
- const addresses = withAddresses
206
- ? addressColumn("Lieferadresse", summary.shipping_address) +
207
- addressColumn("Rechnungsadresse", summary.billing_address)
208
- : "";
209
- return `${sectionHeading(heading)}
210
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">${items}</table>
211
- <table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin-top: 12px;">${totals}</table>
212
- ${addresses ? `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin-top: 8px;"><tr>${addresses}</tr></table>` : ""}`;
213
- };
214
- const renderOrderSummaryText = (summary, { withAddresses = true } = {}) => {
215
- const money = (amount) => (0, format_1.formatMoney)({ amount, currencyCode: summary.currency_code });
216
- const items = summary.items.map((item) => {
217
- const variant = item.variant_title && !isDefaultVariantTitle(item.variant_title)
218
- ? ` (${item.variant_title})`
219
- : "";
220
- return `${item.quantity} × ${item.title}${variant}: ${money(item.original_total)}`;
221
- });
222
- const totals = orderSummaryRows(summary).flatMap(({ amount, label, note }) => note ? [`${label}: ${amount}`, note] : [`${label}: ${amount}`]);
223
- const address = (label, value) => withAddresses && value ? ["", `${label}:`, ...addressLines(value)] : [];
224
- return [
225
- ...items,
226
- "",
227
- ...totals,
228
- ...address("Lieferadresse", summary.shipping_address),
229
- ...address("Rechnungsadresse", summary.billing_address),
230
- ].join("\n");
231
- };
232
- const itemLabelText = (title, variantTitle) => variantTitle && !isDefaultVariantTitle(variantTitle)
233
- ? `${title} (${variantTitle})`
234
- : title;
235
- const shipmentReference = (shipment, orderId) => shipment.display_id === null ? orderId : `#${shipment.display_id}`;
236
- const shipmentRows = (shipment, orderId) => {
237
- const rows = [
238
- ["Bestellnummer", shipmentReference(shipment, orderId)],
239
- ];
240
- if (shipment.shipping_method_name) {
241
- rows.push(["Versandart", shipment.shipping_method_name]);
242
- }
243
- const numbers = shipment.tracking
244
- .map(({ number }) => number)
245
- .filter((number) => number !== null);
246
- if (numbers.length) {
247
- rows.push([
248
- numbers.length === 1 ? "Sendungsnummer" : "Sendungsnummern",
249
- numbers.join(", "),
250
- ]);
251
- }
252
- return rows;
253
- };
254
- /** Tracking links as entered at shipping; only http(s) URLs are linked. */
255
- const trackingLinks = (shipment) => shipment.tracking
256
- .filter((entry) => isHttpUrl(entry.url ?? undefined))
257
- .map((entry, index, all) => ({
258
- label: all.length === 1
259
- ? "Sendung verfolgen"
260
- : `Sendung ${entry.number ?? index + 1} verfolgen`,
261
- url: entry.url,
262
- }));
263
- /** Items with quantity and without prices (parcels, returns). */
264
- const itemListHtml = (items) => {
265
- const cell = `font-family: ${FONT}; font-size: 14px; line-height: 20px; color: ${COLOR.text}; padding: 12px 0; border-bottom: 1px solid ${COLOR.border};`;
266
- const subline = (text) => `<br /><span style="font-size: 13px; color: ${COLOR.muted};">${escapeHtml(text)}</span>`;
267
- const rows = items
268
- .map((item) => {
269
- const variant = item.variant_title && !isDefaultVariantTitle(item.variant_title)
270
- ? subline(item.variant_title)
271
- : "";
272
- const note = item.note ? subline(item.note) : "";
273
- return `<tr><td style="${cell}"><span style="color: ${COLOR.heading}; font-weight: 600;">${escapeHtml(item.title)}</span>${variant}${note}</td><td style="${cell} width: 48px; text-align: right; white-space: nowrap; color: ${COLOR.muted};">${escapeHtml(String(item.quantity))} ×</td></tr>`;
274
- })
275
- .join("");
276
- return `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin-bottom: 20px;">${rows}</table>`;
277
- };
278
- const addressHtml = (label, address) => `${sectionHeading(label)}<p style="margin: 0 0 16px; font-family: ${FONT}; font-size: 14px; line-height: 21px; color: ${COLOR.text};">${addressLines(address).map(escapeHtml).join("<br />")}</p>`;
279
- const SHIPMENT_INTRO = "Gute Nachrichten: Deine Bestellung hat unser Lager verlassen und ist auf dem Weg zu dir.";
280
- const MORE_TO_FOLLOW = "Weitere Artikel deiner Bestellung folgen in einer separaten Sendung.";
281
- const INVOICE_ATTACHED = "Die Rechnung findest du im Anhang.";
282
- const renderShipmentHtml = (shipment, orderId, invoiceAttached) => {
283
- const links = trackingLinks(shipment);
284
- const tracking = links.length === 1
285
- ? button(links[0].url, links[0].label)
286
- : links
287
- .map(({ label, url }) => paragraph(`<a href="${escapeHtml(url)}" style="color: ${COLOR.heading}; font-weight: 600;">${escapeHtml(label)}</a>`))
288
- .join("");
289
- const notes = [
290
- shipment.more_to_follow ? MORE_TO_FOLLOW : null,
291
- invoiceAttached ? INVOICE_ATTACHED : null,
292
- ]
293
- .filter((note) => note !== null)
294
- .map((note) => paragraph(escapeHtml(note)))
295
- .join("");
296
- const address = shipment.delivery_address
297
- ? `${sectionHeading("Lieferadresse")}<p style="margin: 0; font-family: ${FONT}; font-size: 14px; line-height: 21px; color: ${COLOR.text};">${addressLines(shipment.delivery_address).map(escapeHtml).join("<br />")}</p>`
298
- : "";
299
- return `${paragraph(escapeHtml(SHIPMENT_INTRO))}${details(shipmentRows(shipment, orderId))}${tracking}${shipment.items.length
300
- ? `${sectionHeading("In diesem Paket")}${itemListHtml(shipment.items)}`
301
- : ""}${notes}${address}`;
302
- };
303
- const renderShipmentText = (shipment, orderId, invoiceAttached) => [
304
- SHIPMENT_INTRO,
305
- "",
306
- ...shipmentRows(shipment, orderId).map(([label, value]) => `${label}: ${value}`),
307
- ...trackingLinks(shipment).map(({ label, url }) => `${label}: ${url}`),
308
- ...(shipment.items.length
309
- ? [
310
- "",
311
- "In diesem Paket:",
312
- ...shipment.items.map((item) => `${item.quantity} × ${itemLabelText(item.title, item.variant_title)}`),
313
- ]
314
- : []),
315
- ...(shipment.more_to_follow ? ["", MORE_TO_FOLLOW] : []),
316
- ...(invoiceAttached ? ["", INVOICE_ATTACHED] : []),
317
- ...(shipment.delivery_address
318
- ? ["", "Lieferadresse:", ...addressLines(shipment.delivery_address)]
319
- : []),
320
- ].join("\n");
321
- const CANCELED_INTRO = "Deine Bestellung wurde storniert. Du musst nichts weiter tun.";
322
- const CANCELED_PAYMENT = "Falls du bereits bezahlt hast, erstatten wir dir den Betrag auf dem ursprünglichen Zahlungsweg.";
323
- const CANCELLATION_ATTACHED = "Die Stornorechnung findest du im Anhang.";
324
- const RETURN_CREATED = "Wir haben die Rücksendung zu deiner Bestellung angelegt.";
325
- const RETURN_INSTRUCTIONS = "Bitte schick uns die unten aufgeführten Artikel an die angegebene Adresse zurück.";
326
- const returnReference = (summary) => summary.display_id === null ? null : `#R${summary.display_id}`;
327
- const returnRows = (summary) => {
328
- const reference = returnReference(summary);
329
- return [
330
- ...(summary.order_display_id === null
331
- ? []
332
- : [["Bestellnummer", `#${summary.order_display_id}`]]),
333
- ...(reference ? [["Rücksendenummer", reference]] : []),
334
- ...(summary.shipping_method_name
335
- ? [["Rücksendeart", summary.shipping_method_name]]
336
- : []),
337
- ];
338
- };
339
- const returnNotes = (summary) => {
340
- const reference = returnReference(summary);
341
- return [
342
- ...(reference
343
- ? [
344
- `Bitte leg einen Zettel mit der Rücksendenummer ${reference} bei, damit wir dein Paket zuordnen können.`,
345
- ]
346
- : []),
347
- ];
348
- };
349
- const returnItems = (summary) => summary.items.map((item) => ({
350
- ...item,
351
- note: item.reason ? `Grund: ${item.reason}` : null,
352
- }));
353
- const renderReturnRequestedHtml = (summary) => {
354
- const rows = returnRows(summary);
355
- return `${paragraph(escapeHtml(`${RETURN_CREATED} ${RETURN_INSTRUCTIONS}`))}${rows.length ? details(rows) : ""}${summary.items.length
356
- ? `${sectionHeading("Zurückzuschicken")}${itemListHtml(returnItems(summary))}`
357
- : ""}${summary.return_address ? addressHtml("Rücksendeadresse", summary.return_address) : ""}${returnNotes(summary)
358
- .map((note) => paragraph(escapeHtml(note)))
359
- .join("")}`;
360
- };
361
- const renderReturnRequestedText = (summary) => [
362
- `${RETURN_CREATED} ${RETURN_INSTRUCTIONS}`,
363
- ...(returnRows(summary).length
364
- ? [
365
- "",
366
- ...returnRows(summary).map(([label, value]) => `${label}: ${value}`),
367
- ]
368
- : []),
369
- ...(summary.items.length
370
- ? [
371
- "",
372
- "Zurückzuschicken:",
373
- ...returnItems(summary).map((item) => `${item.quantity} × ${itemLabelText(item.title, item.variant_title)}${item.note ? ` – ${item.note}` : ""}`),
374
- ]
375
- : []),
376
- ...(summary.return_address
377
- ? ["", "Rücksendeadresse:", ...addressLines(summary.return_address)]
378
- : []),
379
- ...returnNotes(summary).flatMap((note) => ["", note]),
380
- ].join("\n");
381
- const RETURN_RECEIVED = "Deine Rücksendung ist bei uns eingetroffen. Vielen Dank!";
382
- const RETURN_REFUND = "Falls dir eine Erstattung zusteht, veranlassen wir sie in Kürze auf dem ursprünglichen Zahlungsweg.";
383
- const receivedItems = (summary) => summary.items.map((item) => ({
384
- ...item,
385
- note: item.damaged_quantity > 0
386
- ? `davon beschädigt eingegangen: ${item.damaged_quantity}`
387
- : null,
388
- }));
389
- const refundRows = (summary, timeZone) => [
390
- ...(summary.order_display_id === null
391
- ? []
392
- : [["Bestellnummer", `#${summary.order_display_id}`]]),
393
- [
394
- "Betrag",
395
- (0, format_1.formatMoney)({
396
- amount: summary.amount,
397
- currencyCode: summary.currency_code,
398
- }),
399
- ],
400
- ...(summary.refunded_at && timeZone
401
- ? [
402
- [
403
- "Erstattet am",
404
- (0, format_1.formatDate)(summary.refunded_at, {
405
- timeZone,
406
- options: { dateStyle: "medium" },
407
- }),
408
- ],
409
- ]
410
- : []),
411
- ...(summary.reason ? [["Grund", summary.reason]] : []),
412
- ];
413
- const REFUND_INTRO = "Wir haben dir eine Erstattung veranlasst.";
414
- const REFUND_DURATION = "Je nach Zahlungsart kann es einige Tage dauern, bis der Betrag auf deinem Konto sichtbar ist.";
415
- const PASSWORD_RESET_BUTTON = "Neues Passwort festlegen";
416
- const PASSWORD_RESET_IGNORE = "Falls du kein neues Passwort angefordert hast, kannst du diese E-Mail ignorieren. Dein bisheriges Passwort bleibt dann unverändert.";
417
- const VERIFICATION_BUTTON = "E-Mail-Adresse bestätigen";
418
- const VERIFICATION_VALIDITY = "Der Link ist nur begrenzte Zeit gültig. Ist er abgelaufen, bekommst du beim nächsten Anmelden einen neuen Link oder kannst auf der Seite „Bestätigungsmail erneut senden“ wählen.";
419
- const VERIFICATION_IGNORE = "Falls du dich nicht bei uns registriert hast, kannst du diese E-Mail ignorieren.";
420
- /** The link as copyable text below a button, for clients that block it. */
421
- const linkFallbackHtml = (url) => `<p style="margin: 0 0 16px; font-family: ${FONT}; font-size: 13px; line-height: 20px; color: ${COLOR.muted};">Falls der Button nicht funktioniert, kopiere diesen Link in deinen Browser:<br /><a href="${escapeHtml(url)}" style="color: ${COLOR.muted}; word-break: break-all;">${escapeHtml(url)}</a></p>`;
422
- const CONSIGNMENT_BILLING = "Aus deinem gezählten Bestand ergeben sich die verkauften Artikel, die wir dir anschließend in Rechnung stellen.";
423
- const CONSIGNMENT_IGNORE = "Falls du die Meldung inzwischen eingereicht hast, kannst du diese E-Mail ignorieren.";
424
- // Calendar values (YYYY-MM-DD) are dates, not instants: format them in UTC so
425
- // no time zone shifts them to the neighbouring day.
426
- const calendarMonth = (value) => (0, format_1.formatDate)(`${value}T00:00:00.000Z`, {
427
- timeZone: "UTC",
428
- options: { month: "long", year: "numeric" },
429
- });
430
- const calendarDate = (value) => (0, format_1.formatDate)(`${value}T00:00:00.000Z`, {
431
- timeZone: "UTC",
432
- options: { dateStyle: "medium" },
433
- });
434
- const INVITE_BUTTON = "Einladung annehmen";
435
- const INVITE_IGNORE = "Falls du mit dieser Einladung nichts anfangen kannst, ignoriere diese E-Mail einfach.";
436
- /** "Ada Beispiel" from the billing, else the shipping address; `null` without. */
437
- const customerName = (summary) => {
438
- for (const address of [summary.billing_address, summary.shipping_address]) {
439
- const name = [address?.first_name, address?.last_name]
440
- .filter(Boolean)
441
- .join(" ");
442
- if (name) {
443
- return name;
444
- }
445
- }
446
- return null;
447
- };
448
- const APPLICATION_BUTTON = "Im Admin prüfen";
449
- const APPLICATION_INTRO = "Eine neue Partner-Bewerbung ist eingegangen und wartet auf deine Prüfung.";
450
- /** Escaped multi-line user text as one paragraph; line breaks are kept. */
451
- const multilineParagraph = (value) => paragraph(escapeHtml(value).replace(/\r?\n/g, "<br>"));
452
- /** Neutral German default renderers, one per accepted email kind. */
453
- const createDefaultEmailRenderers = ({ adminAffiliateApplicationsUrl, adminOrderUrl, affiliatePortalUrl, displayName, timeZone, }) => {
99
+ /**
100
+ * Neutral German default renderers, one per accepted email kind. The
101
+ * editable mails render their default block template; mails stored before
102
+ * their snapshot existed keep their short code text.
103
+ */
104
+ const createDefaultEmailRenderers = (configuration) => {
105
+ const templated = (input, shop) => (0, render_1.renderTemplatedEmail)({ configuration, input, shop, template: null });
106
+ const subjectOf = (input) => (0, subjects_1.defaultSubject)(configuration, input);
454
107
  return {
455
- "order.received": ({ order_id, summary }) => {
456
- const subject = "Wir haben deine Bestellung erhalten";
108
+ "order.received": (0, code_override_1.markDefaultRenderer)((data, shop) => {
109
+ const { order_id, summary } = data;
457
110
  if (!summary) {
111
+ const p = (0, email_html_1.paletteFor)(shop);
458
112
  return {
459
- bodyHtml: paragraph(`Vielen Dank für deine Bestellung <strong>${escapeHtml(order_id)}</strong>, diese ist bei uns eingetroffen und wir werden sie umgehend bearbeiten.`),
460
- subject,
113
+ bodyHtml: (0, email_html_1.paragraph)(p, `Vielen Dank für deine Bestellung <strong>${(0, lib_1.escapeHtml)(order_id)}</strong>, diese ist bei uns eingetroffen und wir werden sie umgehend bearbeiten.`),
114
+ subject: subjectOf({ kind: "order.received", data }),
461
115
  text: `Vielen Dank für deine Bestellung ${order_id}, diese ist bei uns eingetroffen und wir werden sie umgehend bearbeiten.`,
462
116
  };
463
117
  }
464
- const reference = orderReference(summary, order_id);
465
- const intro = "Vielen Dank für deine Bestellung, diese ist bei uns eingetroffen und wir werden sie umgehend bearbeiten.";
466
- return {
467
- bodyHtml: `${paragraph(escapeHtml(intro))}${details([["Bestellnummer", reference]])}${renderOrderSummaryHtml(summary, "Deine Bestellung")}`,
468
- subject,
469
- text: `${intro}\n\nBestellnummer: ${reference}\n\n${renderOrderSummaryText(summary)}`,
470
- };
471
- },
472
- "order.received.admin": ({ order_id, summary }) => {
118
+ return templated({ kind: "order.received", data }, shop);
119
+ }),
120
+ "order.received.admin": (0, code_override_1.markDefaultRenderer)((data, shop) => {
121
+ const { order_id, summary } = data;
473
122
  if (!summary) {
474
123
  return {
475
- bodyHtml: `<p>Die neue Bestellung <strong>${escapeHtml(order_id)}</strong> ist eingegangen und kann jetzt bearbeitet werden.</p>`,
476
- subject: "Neue Bestellung eingegangen",
124
+ bodyHtml: `<p>Die neue Bestellung <strong>${(0, lib_1.escapeHtml)(order_id)}</strong> ist eingegangen und kann jetzt bearbeitet werden.</p>`,
125
+ subject: subjectOf({ kind: "order.received.admin", data }),
477
126
  text: `Die neue Bestellung ${order_id} ist eingegangen und kann jetzt bearbeitet werden.`,
478
127
  };
479
128
  }
480
- const reference = orderReference(summary, order_id);
481
- const name = customerName(summary);
482
- const intro = "Eine neue Bestellung ist eingegangen und kann jetzt bearbeitet werden.";
483
- const rows = [
484
- ["Bestellnummer", reference],
485
- ];
486
- if (name) {
487
- rows.push(["Kunde", name]);
488
- }
489
- if (summary.email) {
490
- rows.push(["E-Mail", summary.email]);
491
- }
492
- if (timeZone) {
493
- rows.push([
494
- "Bestellt am",
495
- (0, format_1.formatDate)(summary.placed_at, {
496
- timeZone,
497
- options: { dateStyle: "medium", timeStyle: "short" },
498
- }),
499
- ]);
500
- }
501
- const adminUrl = adminOrderUrl?.({ orderId: order_id });
502
- return {
503
- bodyHtml: `${paragraph(escapeHtml(intro))}${details(rows)}${adminUrl ? button(adminUrl, "Im Admin öffnen") : ""}${renderOrderSummaryHtml(summary, "Bestellung")}`,
504
- subject: `Neue Bestellung ${reference}${name ? ` von ${name}` : ""}`,
505
- text: [
506
- intro,
507
- "",
508
- ...rows.map(([label, value]) => `${label}: ${value}`),
509
- ...(adminUrl ? ["", `Im Admin öffnen: ${adminUrl}`] : []),
510
- "",
511
- renderOrderSummaryText(summary),
512
- ].join("\n"),
513
- };
514
- },
515
- "order.shipped": ({ fulfillment_id, invoice_attached, order_id, shipment, }) => {
516
- const subject = `Deine Bestellung bei ${displayName} ist unterwegs`;
129
+ return templated({ kind: "order.received.admin", data }, shop);
130
+ }),
131
+ "order.shipped": (0, code_override_1.markDefaultRenderer)((data, shop) => {
132
+ const { fulfillment_id, order_id, shipment } = data;
517
133
  if (!shipment) {
518
134
  return {
519
- bodyHtml: `<p>Deine Bestellung <strong>${escapeHtml(order_id)}</strong> ist unterwegs.</p><p>Versandreferenz: ${escapeHtml(fulfillment_id)}</p>`,
520
- subject,
135
+ bodyHtml: `<p>Deine Bestellung <strong>${(0, lib_1.escapeHtml)(order_id)}</strong> ist unterwegs.</p><p>Versandreferenz: ${(0, lib_1.escapeHtml)(fulfillment_id)}</p>`,
136
+ subject: subjectOf({ kind: "order.shipped", data }),
521
137
  text: `Deine Bestellung ${order_id} ist unterwegs. Versandreferenz: ${fulfillment_id}.`,
522
138
  };
523
139
  }
524
- const invoiceAttached = invoice_attached === true;
525
- return {
526
- bodyHtml: renderShipmentHtml(shipment, order_id, invoiceAttached),
527
- subject,
528
- text: renderShipmentText(shipment, order_id, invoiceAttached),
529
- };
530
- },
531
- "order.canceled": ({ canceled_at, cancellation_attached, order_id, summary, }) => {
532
- const reference = summary ? orderReference(summary, order_id) : null;
533
- const rows = reference
534
- ? [["Bestellnummer", reference]]
535
- : [];
536
- if (reference && canceled_at && timeZone) {
537
- rows.push([
538
- "Storniert am",
539
- (0, format_1.formatDate)(canceled_at, {
540
- timeZone,
541
- options: { dateStyle: "medium" },
542
- }),
543
- ]);
544
- }
545
- const notes = [
546
- CANCELED_PAYMENT,
547
- ...(cancellation_attached === true ? [CANCELLATION_ATTACHED] : []),
548
- ];
549
- return {
550
- bodyHtml: `${paragraph(escapeHtml(CANCELED_INTRO))}${rows.length ? details(rows) : ""}${notes.map((note) => paragraph(escapeHtml(note))).join("")}${summary ? renderOrderSummaryHtml(summary, "Stornierte Bestellung", { withAddresses: false }) : ""}`,
551
- subject: `Deine Bestellung${reference ? ` ${reference}` : ""} bei ${displayName} wurde storniert`,
552
- text: [
553
- CANCELED_INTRO,
554
- ...(rows.length
555
- ? ["", ...rows.map(([label, value]) => `${label}: ${value}`)]
556
- : []),
557
- ...notes.flatMap((note) => ["", note]),
558
- ...(summary
559
- ? [
560
- "",
561
- "Stornierte Bestellung:",
562
- renderOrderSummaryText(summary, { withAddresses: false }),
563
- ]
564
- : []),
565
- ].join("\n"),
566
- };
567
- },
568
- "order.return_requested": ({ summary }) => {
569
- if (!summary) {
140
+ return templated({ kind: "order.shipped", data }, shop);
141
+ }),
142
+ "order.canceled": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "order.canceled", data }, shop)),
143
+ "order.return_requested": (0, code_override_1.markDefaultRenderer)((data, shop) => {
144
+ if (!data.summary) {
570
145
  return {
571
- bodyHtml: paragraph(escapeHtml(RETURN_CREATED)),
572
- subject: `Deine Rücksendung bei ${displayName}`,
573
- text: RETURN_CREATED,
146
+ bodyHtml: (0, email_html_1.paragraph)((0, email_html_1.paletteFor)(shop), (0, lib_1.escapeHtml)(texts_1.RETURN_CREATED)),
147
+ subject: subjectOf({ kind: "order.return_requested", data }),
148
+ text: texts_1.RETURN_CREATED,
574
149
  };
575
150
  }
576
- return {
577
- bodyHtml: renderReturnRequestedHtml(summary),
578
- subject: summary.order_display_id === null
579
- ? `Deine Rücksendung bei ${displayName}`
580
- : `Deine Rücksendung zur Bestellung #${summary.order_display_id} bei ${displayName}`,
581
- text: renderReturnRequestedText(summary),
582
- };
583
- },
584
- "order.return_received": ({ summary }) => {
585
- if (!summary) {
151
+ return templated({ kind: "order.return_requested", data }, shop);
152
+ }),
153
+ "order.return_received": (0, code_override_1.markDefaultRenderer)((data, shop) => {
154
+ if (!data.summary) {
586
155
  return {
587
- bodyHtml: paragraph(escapeHtml(RETURN_RECEIVED)),
588
- subject: `Deine Rücksendung bei ${displayName} ist eingetroffen`,
589
- text: RETURN_RECEIVED,
156
+ bodyHtml: (0, email_html_1.paragraph)((0, email_html_1.paletteFor)(shop), (0, lib_1.escapeHtml)(texts_1.RETURN_RECEIVED)),
157
+ subject: subjectOf({ kind: "order.return_received", data }),
158
+ text: texts_1.RETURN_RECEIVED,
590
159
  };
591
160
  }
592
- const reference = returnReference(summary);
593
- const rows = [
594
- ...(summary.order_display_id === null
595
- ? []
596
- : [["Bestellnummer", `#${summary.order_display_id}`]]),
597
- ...(reference ? [["Rücksendenummer", reference]] : []),
598
- ];
599
- if (summary.received_at && timeZone) {
600
- rows.push([
601
- "Eingegangen am",
602
- (0, format_1.formatDate)(summary.received_at, {
603
- timeZone,
604
- options: { dateStyle: "medium" },
605
- }),
606
- ]);
607
- }
608
- const items = receivedItems(summary);
609
- return {
610
- bodyHtml: `${paragraph(escapeHtml(RETURN_RECEIVED))}${rows.length ? details(rows) : ""}${items.length
611
- ? `${sectionHeading("Erhaltene Artikel")}${itemListHtml(items)}`
612
- : ""}${paragraph(escapeHtml(RETURN_REFUND))}`,
613
- subject: summary.order_display_id === null
614
- ? `Deine Rücksendung bei ${displayName} ist eingetroffen`
615
- : `Deine Rücksendung zur Bestellung #${summary.order_display_id} bei ${displayName} ist eingetroffen`,
616
- text: [
617
- RETURN_RECEIVED,
618
- ...(rows.length
619
- ? ["", ...rows.map(([label, value]) => `${label}: ${value}`)]
620
- : []),
621
- ...(items.length
622
- ? [
623
- "",
624
- "Erhaltene Artikel:",
625
- ...items.map((item) => `${item.quantity} × ${itemLabelText(item.title, item.variant_title)}${item.note ? ` – ${item.note}` : ""}`),
626
- ]
161
+ return templated({ kind: "order.return_received", data }, shop);
162
+ }),
163
+ "order.refunded": (0, code_override_1.markDefaultRenderer)((data, shop) => {
164
+ if (!data.summary) {
165
+ const p = (0, email_html_1.paletteFor)(shop);
166
+ const notes = [
167
+ texts_1.REFUND_INTRO,
168
+ ...(data.cancellation_attached === true
169
+ ? [texts_1.CANCELLATION_ATTACHED]
627
170
  : []),
628
- "",
629
- RETURN_REFUND,
630
- ].join("\n"),
631
- };
632
- },
633
- "order.refunded": ({ cancellation_attached, summary }) => {
634
- const attachment = cancellation_attached === true ? [CANCELLATION_ATTACHED] : [];
635
- if (!summary) {
636
- const notes = [REFUND_INTRO, ...attachment];
171
+ ];
637
172
  return {
638
- bodyHtml: notes.map((note) => paragraph(escapeHtml(note))).join(""),
639
- subject: `Deine Erstattung bei ${displayName}`,
173
+ bodyHtml: notes
174
+ .map((note) => (0, email_html_1.paragraph)(p, (0, lib_1.escapeHtml)(note)))
175
+ .join(""),
176
+ subject: subjectOf({ kind: "order.refunded", data }),
640
177
  text: notes.join("\n\n"),
641
178
  };
642
179
  }
643
- const rows = refundRows(summary, timeZone);
644
- const notes = [REFUND_DURATION, ...attachment];
645
- return {
646
- bodyHtml: `${paragraph(escapeHtml(REFUND_INTRO))}${details(rows)}${notes.map((note) => paragraph(escapeHtml(note))).join("")}`,
647
- subject: summary.order_display_id === null
648
- ? `Deine Erstattung bei ${displayName}`
649
- : `Deine Erstattung zur Bestellung #${summary.order_display_id} bei ${displayName}`,
650
- text: [
651
- REFUND_INTRO,
652
- "",
653
- ...rows.map(([label, value]) => `${label}: ${value}`),
654
- ...notes.flatMap((note) => ["", note]),
655
- ].join("\n"),
656
- };
657
- },
658
- "auth.password_reset": ({ reset_url, valid_minutes }) => {
659
- const intro = `Du hast ein neues Passwort für dein Kundenkonto bei ${displayName} angefordert. Über den Button kannst du es jetzt festlegen.`;
660
- const validity = valid_minutes
661
- ? `Der Link ist ${valid_minutes} ${valid_minutes === 1 ? "Minute" : "Minuten"} gültig.`
662
- : null;
663
- return {
664
- bodyHtml: `${paragraph(escapeHtml(intro))}${button(reset_url, PASSWORD_RESET_BUTTON)}${linkFallbackHtml(reset_url)}${validity ? paragraph(escapeHtml(validity)) : ""}${paragraph(escapeHtml(PASSWORD_RESET_IGNORE))}`,
665
- subject: `Neues Passwort für dein Kundenkonto bei ${displayName}`,
666
- text: [
667
- intro,
668
- "",
669
- `${PASSWORD_RESET_BUTTON}: ${reset_url}`,
670
- ...(validity ? ["", validity] : []),
671
- "",
672
- PASSWORD_RESET_IGNORE,
673
- ].join("\n"),
674
- };
675
- },
676
- "auth.verification": ({ verify_url }) => {
677
- const intro = `Schön, dass du dich bei ${displayName} registriert hast. Bitte bestätige deine E-Mail-Adresse, damit du dich anmelden kannst.`;
678
- return {
679
- bodyHtml: `${paragraph(escapeHtml(intro))}${button(verify_url, VERIFICATION_BUTTON)}${linkFallbackHtml(verify_url)}${paragraph(escapeHtml(VERIFICATION_VALIDITY))}${paragraph(escapeHtml(VERIFICATION_IGNORE))}`,
680
- subject: "Bestätige deine E-Mail-Adresse",
681
- text: [
682
- intro,
683
- "",
684
- `${VERIFICATION_BUTTON}: ${verify_url}`,
685
- "",
686
- VERIFICATION_VALIDITY,
687
- "",
688
- VERIFICATION_IGNORE,
689
- ].join("\n"),
690
- };
691
- },
692
- "affiliate.consignment_report_due": ({ affiliate_display_name, due_date, period_start, }) => {
693
- const month = calendarMonth(period_start);
694
- const greeting = `Hallo ${affiliate_display_name},`;
695
- const intro = `deine Monatsmeldung für ${month} liegt uns noch nicht vor. Bitte zähl deinen Kommissionsbestand und reich die Meldung im Partnerbereich ein.`;
696
- const rows = [
697
- ["Meldemonat", month],
698
- ["Stichtag", calendarDate(due_date)],
699
- ];
700
- return {
701
- bodyHtml: `${paragraph(escapeHtml(greeting))}${paragraph(escapeHtml(intro))}${details(rows)}${paragraph(escapeHtml(CONSIGNMENT_BILLING))}${button(affiliatePortalUrl, "Zum Partnerbereich")}${paragraph(escapeHtml(CONSIGNMENT_IGNORE))}`,
702
- subject: `Erinnerung: Deine Monatsmeldung für ${month}`,
703
- text: [
704
- greeting,
705
- "",
706
- intro,
707
- "",
708
- ...rows.map(([label, value]) => `${label}: ${value}`),
709
- "",
710
- CONSIGNMENT_BILLING,
711
- "",
712
- `Zum Partnerbereich: ${affiliatePortalUrl}`,
713
- "",
714
- CONSIGNMENT_IGNORE,
715
- ].join("\n"),
716
- };
717
- },
718
- "affiliate.application_submitted.admin": ({ application_id, company_name, customer_email, customer_first_name, customer_last_name, message, }) => {
719
- const name = joinPresent([customer_first_name, customer_last_name], " ");
720
- const applicant = company_name || name || customer_email;
721
- const rows = [];
722
- if (company_name) {
723
- rows.push(["Firma", company_name]);
724
- }
725
- if (name) {
726
- rows.push(["Name", name]);
727
- }
728
- if (customer_email) {
729
- rows.push(["E-Mail", customer_email]);
730
- }
731
- const reviewUrl = adminAffiliateApplicationsUrl?.({
732
- applicationId: application_id,
733
- });
734
- return {
735
- bodyHtml: `${paragraph(escapeHtml(APPLICATION_INTRO))}${rows.length ? details(rows) : ""}${message ? `${sectionHeading("Nachricht")}${multilineParagraph(message)}` : ""}${reviewUrl ? button(reviewUrl, APPLICATION_BUTTON) : ""}`,
736
- subject: applicant
737
- ? `Neue Partner-Bewerbung von ${applicant}`
738
- : "Neue Partner-Bewerbung",
739
- text: [
740
- APPLICATION_INTRO,
741
- ...(rows.length
742
- ? ["", ...rows.map(([label, value]) => `${label}: ${value}`)]
743
- : []),
744
- ...(message ? ["", "Nachricht:", message] : []),
745
- ...(reviewUrl ? ["", `${APPLICATION_BUTTON}: ${reviewUrl}`] : []),
746
- ].join("\n"),
747
- };
748
- },
749
- "user.invite": ({ expires_at, invite_url }) => {
750
- const intro = `Du wurdest eingeladen, im Admin-Bereich von ${displayName} mitzuarbeiten. Über den Button legst du dein Benutzerkonto an.`;
751
- const validity = expires_at && timeZone
752
- ? `Die Einladung ist gültig bis ${(0, format_1.formatDate)(expires_at, {
753
- timeZone,
754
- options: { dateStyle: "medium", timeStyle: "short" },
755
- })} Uhr.`
756
- : null;
757
- return {
758
- bodyHtml: `${paragraph(escapeHtml(intro))}${button(invite_url, INVITE_BUTTON)}${linkFallbackHtml(invite_url)}${validity ? paragraph(escapeHtml(validity)) : ""}${paragraph(escapeHtml(INVITE_IGNORE))}`,
759
- subject: `Einladung ins Admin-Team von ${displayName}`,
760
- text: [
761
- intro,
762
- "",
763
- `${INVITE_BUTTON}: ${invite_url}`,
764
- ...(validity ? ["", validity] : []),
765
- "",
766
- INVITE_IGNORE,
767
- ].join("\n"),
768
- };
769
- },
180
+ return templated({ kind: "order.refunded", data }, shop);
181
+ }),
182
+ "auth.password_reset": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "auth.password_reset", data }, shop)),
183
+ "auth.verification": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "auth.verification", data }, shop)),
184
+ "affiliate.consignment_report_due": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "affiliate.consignment_report_due", data }, shop)),
185
+ "affiliate.application_submitted.admin": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "affiliate.application_submitted.admin", data }, shop)),
186
+ "user.invite": (0, code_override_1.markDefaultRenderer)((data, shop) => templated({ kind: "user.invite", data }, shop)),
770
187
  };
771
188
  };
772
189
  exports.createDefaultEmailRenderers = createDefaultEmailRenderers;
773
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvcmVuZGVyaW5nL2RlZmF1bHQtdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUEyRTtBQWMzRSxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQzNDLEtBQUs7S0FDRixVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztLQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztLQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztLQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztLQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBRS9CLDhFQUE4RTtBQUM5RSxNQUFNLElBQUksR0FDUixxRkFBcUYsQ0FBQztBQUN4RixNQUFNLEtBQUssR0FBRztJQUNaLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFNBQVM7SUFDaEIsS0FBSyxFQUFFLFNBQVM7Q0FDUixDQUFDO0FBRVgsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQVUsRUFBRSxDQUN6Qyw0Q0FBNEMsSUFBSSxnREFBZ0QsS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUU3SCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQy9DLGdEQUFnRCxJQUFJLG9IQUFvSCxLQUFLLENBQUMsS0FBSyxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBRXBOLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBOEMsRUFBVSxFQUFFLENBQ3pFLDZIQUE2SCxLQUFLLENBQUMsVUFBVSwwQkFBMEIsSUFB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
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10ZW1wbGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvcmVuZGVyaW5nL2RlZmF1bHQtdGVtcGxhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhEQUFpRTtBQUNqRSx1REFLcUM7QUFDckMsNkRBQWdFO0FBQ2hFLGdEQUEyRDtBQVUzRCw2Q0FRc0I7QUFDdEIsMENBQXlEO0FBRXpELE1BQU0sUUFBUSxHQUFHLENBQ2YsQ0FBVSxFQUNWLElBQXNCLEVBQ3RCLFdBQW1CLEVBQ1gsRUFBRSxDQUNWLElBQUEsZUFBUyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbEIsQ0FBQyxDQUFDLHdFQUF3RTtRQUN4RSxhQUFhLElBQUEsZ0JBQVUsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBQSxnQkFBVSxFQUFDLFdBQVcsQ0FBQyx3SkFBd0o7SUFDN04sQ0FBQyxDQUFDLDZCQUE2QixpQkFBSSwrQ0FBK0MsQ0FBQyxDQUFDLE1BQU0sTUFBTSxJQUFBLGdCQUFVLEVBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUVySSxzRkFBc0Y7QUFDdEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFVLEVBQUUsSUFBc0IsRUFBVSxFQUFFO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqQyxNQUFNLElBQUksR0FBRyxLQUFLO1FBQ2hCLENBQUMsQ0FBQyxrQ0FBa0MsSUFBQSxnQkFBVSxFQUFDLEtBQUssQ0FBQyxZQUFZLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsS0FBSyxJQUFBLGdCQUFVLEVBQUMsS0FBSyxDQUFDLE1BQU07UUFDekcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLE1BQU0sSUFBSSxHQUFH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