@codee-sh/medusa-plugin-notification-emails 0.0.2 → 0.1.0

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 (55) hide show
  1. package/.medusa/server/emails-previews/contact-form.js +5 -7
  2. package/.medusa/server/emails-previews/inventory-level.js +23 -0
  3. package/.medusa/server/emails-previews/order-completed.js +20 -14
  4. package/.medusa/server/emails-previews/order-placed.js +19 -13
  5. package/.medusa/server/src/admin/index.js +385 -2364
  6. package/.medusa/server/src/admin/index.mjs +307 -2286
  7. package/.medusa/server/src/api/admin/notification-plugin/render-template/route.js +2 -2
  8. package/.medusa/server/src/hooks/api/orders.js +3 -2
  9. package/.medusa/server/src/templates/emails/base-template/index.js +23 -0
  10. package/.medusa/server/src/templates/emails/base-template/template.js +25 -0
  11. package/.medusa/server/src/templates/emails/blocks/components/heading.js +15 -0
  12. package/.medusa/server/src/templates/emails/blocks/components/product-item.js +14 -0
  13. package/.medusa/server/src/templates/emails/blocks/components/repeater.js +26 -0
  14. package/.medusa/server/src/templates/emails/blocks/components/row.js +13 -0
  15. package/.medusa/server/src/templates/emails/blocks/components/section.js +14 -0
  16. package/.medusa/server/src/templates/emails/blocks/components/separator.js +13 -0
  17. package/.medusa/server/src/templates/emails/blocks/components/text.js +15 -0
  18. package/.medusa/server/src/templates/emails/blocks/index.js +41 -0
  19. package/.medusa/server/src/templates/{shared/i18n → emails/blocks}/types.js +1 -1
  20. package/.medusa/server/src/templates/emails/contact-form/config.js +95 -0
  21. package/.medusa/server/src/templates/emails/contact-form/index.js +6 -17
  22. package/.medusa/server/src/templates/emails/contact-form/translations/de.json +14 -0
  23. package/.medusa/server/src/templates/emails/contact-form/translations/en.json +12 -14
  24. package/.medusa/server/src/templates/emails/contact-form/translations/pl.json +8 -10
  25. package/.medusa/server/src/templates/emails/index.js +183 -92
  26. package/.medusa/server/src/templates/emails/inventory-level/config.js +126 -0
  27. package/.medusa/server/src/templates/emails/inventory-level/index.js +6 -17
  28. package/.medusa/server/src/templates/emails/order-completed/config.js +233 -0
  29. package/.medusa/server/src/templates/emails/order-completed/index.js +6 -17
  30. package/.medusa/server/src/templates/emails/order-completed/translations/en.json +2 -1
  31. package/.medusa/server/src/templates/emails/order-completed/translations/pl.json +2 -1
  32. package/.medusa/server/src/templates/emails/order-placed/config.js +221 -0
  33. package/.medusa/server/src/templates/emails/order-placed/index.js +6 -17
  34. package/.medusa/server/src/templates/emails/order-placed/translations/en.json +1 -1
  35. package/.medusa/server/src/templates/emails/order-placed/translations/pl.json +1 -1
  36. package/.medusa/server/src/templates/emails/types.js +2 -1
  37. package/.medusa/server/src/utils/i18n/i18n.js +194 -0
  38. package/.medusa/server/src/utils/i18n/index.js +18 -0
  39. package/.medusa/server/src/utils/index.js +5 -1
  40. package/.medusa/server/src/utils/is-defined.js +7 -0
  41. package/.medusa/server/src/utils/is-object.js +7 -0
  42. package/.medusa/server/src/utils/pick-value-from-object.js +28 -0
  43. package/package.json +18 -11
  44. package/.medusa/server/src/templates/emails/contact-form/template.js +0 -28
  45. package/.medusa/server/src/templates/emails/contact-form/translations/index.js +0 -15
  46. package/.medusa/server/src/templates/emails/contact-form/types.js +0 -3
  47. package/.medusa/server/src/templates/emails/inventory-level/template.js +0 -28
  48. package/.medusa/server/src/templates/emails/inventory-level/types.js +0 -3
  49. package/.medusa/server/src/templates/emails/order-completed/template.js +0 -36
  50. package/.medusa/server/src/templates/emails/order-completed/types.js +0 -3
  51. package/.medusa/server/src/templates/emails/order-placed/template.js +0 -36
  52. package/.medusa/server/src/templates/emails/order-placed/types.js +0 -3
  53. package/.medusa/server/src/templates/shared/i18n/index.js +0 -6
  54. package/.medusa/server/src/templates/shared/i18n/languages.js +0 -187
  55. package/.medusa/server/src/templates/shared/i18n/utils.js +0 -186
@@ -1,66 +1,127 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TEMPLATES_NAMES = void 0;
4
+ exports.interpolateBlocks = interpolateBlocks;
4
5
  exports.getTemplate = getTemplate;
5
6
  exports.renderTemplate = renderTemplate;
6
- const render_1 = require("@react-email/render");
7
- const index_1 = require("./contact-form/index");
8
- const index_2 = require("./order-placed/index");
9
- const index_3 = require("./order-completed/index");
10
- const index_4 = require("./inventory-level/index");
7
+ exports.renderTemplateSync = renderTemplateSync;
8
+ const index_1 = require("./base-template/index");
11
9
  const types_1 = require("./types");
12
10
  Object.defineProperty(exports, "TEMPLATES_NAMES", { enumerable: true, get: function () { return types_1.TEMPLATES_NAMES; } });
13
- const i18n_1 = require("../shared/i18n");
14
- const translations_1 = require("./contact-form/translations");
15
- const translations_2 = require("./order-placed/translations");
16
- const translations_3 = require("./order-completed/translations");
17
- const translations_4 = require("./inventory-level/translations");
11
+ const contact_form_1 = require("./contact-form");
12
+ const inventory_level_1 = require("./inventory-level");
13
+ const order_placed_1 = require("./order-placed");
14
+ const order_completed_1 = require("./order-completed");
15
+ const utils_1 = require("../../utils");
18
16
  /**
19
17
  * Template translations registry mapping template names to their translations
20
18
  */
21
19
  const templateTranslationsRegistry = {
22
- [types_1.TEMPLATES_NAMES.CONTACT_FORM]: translations_1.translations,
23
- [types_1.TEMPLATES_NAMES.ORDER_PLACED]: translations_2.translations,
24
- [types_1.TEMPLATES_NAMES.ORDER_COMPLETED]: translations_3.translations,
25
- [types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: translations_4.translations,
20
+ [types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: inventory_level_1.translations,
21
+ };
22
+ const baseTemplateConfig = {
23
+ [types_1.TEMPLATES_NAMES.BASE_TEMPLATE]: {
24
+ getHtml: async (data, options) => {
25
+ return await (0, index_1.getBaseTemplateHtml)(data, options);
26
+ },
27
+ getText: async (data, options) => {
28
+ return await (0, index_1.getBaseTemplateText)(data, options);
29
+ },
30
+ getReactNode: (data, options) => {
31
+ return (0, index_1.getBaseTemplateReactNode)(data, options);
32
+ },
33
+ }
26
34
  };
27
35
  /**
28
36
  * Template registry mapping template names to their renderers
29
37
  */
30
38
  const templateRegistry = {
39
+ ...baseTemplateConfig,
31
40
  [types_1.TEMPLATES_NAMES.CONTACT_FORM]: {
32
- getHtml: async (data, options) => {
33
- return await (0, index_1.getContactFormHtml)(data, options);
34
- },
35
- getText: async (data, options) => {
36
- return await (0, index_1.getContactFormText)(data, options);
41
+ ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
42
+ getConfig: () => {
43
+ return {
44
+ blocks: contact_form_1.templateBlocks,
45
+ translations: contact_form_1.translations,
46
+ };
37
47
  },
38
48
  },
39
49
  [types_1.TEMPLATES_NAMES.ORDER_PLACED]: {
40
- getHtml: async (data, options) => {
41
- return await (0, index_2.getOrderCreatedHtml)(data, options);
42
- },
43
- getText: async (data, options) => {
44
- return await (0, index_2.getOrderCreatedText)(data, options);
50
+ ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
51
+ getConfig: () => {
52
+ return {
53
+ blocks: order_placed_1.templateBlocks,
54
+ translations: order_placed_1.translations,
55
+ };
45
56
  },
46
57
  },
47
58
  [types_1.TEMPLATES_NAMES.ORDER_COMPLETED]: {
48
- getHtml: async (data, options) => {
49
- return await (0, index_3.getOrderCompletedHtml)(data, options);
50
- },
51
- getText: async (data, options) => {
52
- return await (0, index_3.getOrderCompletedText)(data, options);
59
+ ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
60
+ getConfig: () => {
61
+ return {
62
+ blocks: order_completed_1.templateBlocks,
63
+ translations: order_completed_1.translations,
64
+ };
53
65
  },
54
66
  },
55
67
  [types_1.TEMPLATES_NAMES.INVENTORY_LEVEL]: {
56
- getHtml: async (data, options) => {
57
- return await (0, index_4.getInventoryLevelHtml)(data, options);
58
- },
59
- getText: async (data, options) => {
60
- return await (0, index_4.getInventoryLevelText)(data, options);
68
+ ...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
69
+ getConfig: () => {
70
+ return {
71
+ blocks: inventory_level_1.templateBlocks,
72
+ translations: inventory_level_1.translations,
73
+ };
61
74
  },
62
- },
75
+ }
63
76
  };
77
+ /**
78
+ * Recursively interpolate text in blocks
79
+ * Processes props.text in each block and nested blocks
80
+ */
81
+ function interpolateBlocks(blocks, data, translator, config) {
82
+ return blocks.map((block) => {
83
+ const processedBlock = { ...block };
84
+ // Process all string properties in props
85
+ if (processedBlock.props && typeof processedBlock.props === "object") {
86
+ const processedProps = { ...processedBlock.props };
87
+ // Iterate over all properties in props
88
+ for (const [key, value] of Object.entries(processedProps)) {
89
+ // Skip non-string values and special properties (blocks, itemBlocks, separator, arrayPath)
90
+ if ((typeof value === "string") &&
91
+ key !== "blocks" &&
92
+ key !== "itemBlocks" &&
93
+ key !== "arrayPath") {
94
+ processedProps[key] = (0, utils_1.multiInterpolate)(value, data, translator, config);
95
+ }
96
+ }
97
+ processedBlock.props = processedProps;
98
+ }
99
+ // Recursively process nested blocks
100
+ if (processedBlock.props?.blocks &&
101
+ Array.isArray(processedBlock.props.blocks)) {
102
+ processedBlock.props = {
103
+ ...processedBlock.props,
104
+ blocks: interpolateBlocks(processedBlock.props.blocks, data, translator),
105
+ };
106
+ }
107
+ if (processedBlock.type === "repeater") {
108
+ const { arrayPath, itemBlocks } = processedBlock.props || {};
109
+ if (arrayPath && itemBlocks) {
110
+ const array = (0, utils_1.pickValueFromObject)(arrayPath, data);
111
+ if (Array.isArray(array) && array.length > 0) {
112
+ const interpolatedItemBlocks = array.map((item) => interpolateBlocks(itemBlocks, item, translator, {
113
+ arrayPath: arrayPath,
114
+ })[0]);
115
+ processedBlock.props = {
116
+ ...processedBlock.props,
117
+ itemBlocks: interpolatedItemBlocks,
118
+ };
119
+ }
120
+ }
121
+ }
122
+ return processedBlock;
123
+ });
124
+ }
64
125
  /**
65
126
  * Get template renderer by template name
66
127
  *
@@ -75,6 +136,39 @@ function getTemplate(templateName) {
75
136
  }
76
137
  return template;
77
138
  }
139
+ /**
140
+ * Prepare template data (translations, blocks, translator, processedBlocks)
141
+ * Shared logic for renderTemplate and renderTemplateSync
142
+ */
143
+ function prepareTemplateData(templateName, data, options) {
144
+ const locale = options?.locale || "pl";
145
+ const template = getTemplate(templateName);
146
+ const config = template.getConfig?.() || {};
147
+ // Get translations for this template
148
+ const translations = config?.translations || templateTranslationsRegistry[templateName] || {};
149
+ // If blocks are not provided, use basic blocks from config
150
+ const providedBlocks = options?.blocks || [];
151
+ let blocks = providedBlocks.length > 0 ? providedBlocks : config?.blocks || [];
152
+ // Process translations once
153
+ const customTranslations = options?.customTranslations?.[templateName];
154
+ // Merge translations
155
+ const mergedTranslations = (0, utils_1.mergeTranslations)(translations, customTranslations);
156
+ // Create translator function
157
+ const translator = (0, utils_1.createTranslator)(locale, mergedTranslations);
158
+ // Interpolate blocks if provided
159
+ const processedBlocks = blocks.length > 0 ? interpolateBlocks(blocks, data, translator) : blocks;
160
+ // Pass processed blocks in options to render functions
161
+ const renderOptions = {
162
+ ...options,
163
+ blocks: processedBlocks,
164
+ };
165
+ return {
166
+ template,
167
+ translator,
168
+ processedBlocks,
169
+ renderOptions,
170
+ };
171
+ }
78
172
  /**
79
173
  * Generate HTML and text for a template
80
174
  *
@@ -85,69 +179,66 @@ function getTemplate(templateName) {
85
179
  * @returns Object with html, text, and subject properties
86
180
  */
87
181
  async function renderTemplate(templateName, data, options, createTemplate) {
88
- const locale = options?.locale || "pl";
89
- // If createTemplate is provided, use custom template
90
- if (createTemplate) {
91
- // Create basic i18n if not provided (for custom templates)
92
- let i18n = options?.i18n;
93
- if (!i18n) {
94
- // Create a simple i18n object for custom templates
95
- i18n = {
96
- t: (key, data) => {
97
- // Try to get from customTranslations if available
98
- if (options?.customTranslations && templateName) {
99
- const custom = options.customTranslations[templateName];
100
- if (custom && custom[key]) {
101
- return typeof custom[key] === 'function' ? custom[key](data) : custom[key];
102
- }
103
- }
104
- // Fallback to key or empty string
105
- return key;
106
- }
107
- };
108
- }
109
- // Pass processed i18n in options to render functions
110
- const renderOptions = {
111
- ...options,
112
- i18n,
113
- };
114
- // Render React component to HTML
115
- const reactNode = createTemplate(data, renderOptions);
116
- const htmlRendered = await (0, render_1.render)(reactNode);
117
- const html = await (0, render_1.pretty)(htmlRendered);
118
- const text = (0, render_1.toPlainText)(htmlRendered);
119
- // Get subject from i18n or use default
120
- const subject = i18n.t("headerTitle", data) || "Email";
121
- return {
122
- html,
123
- text,
124
- subject,
125
- };
126
- }
182
+ // // If createTemplate is provided, use custom template
183
+ // if (createTemplate) {
184
+ // // Create basic i18n if not provided (for custom templates)
185
+ // let i18n = options?.customTranslations?.[templateName];
186
+ // if (!i18n) {
187
+ // // Create a simple i18n object for custom templates
188
+ // i18n = {
189
+ // t: (key: string, data?: any) => {
190
+ // // Try to get from customTranslations if available
191
+ // if (options?.customTranslations && templateName) {
192
+ // const custom = options.customTranslations[templateName];
193
+ // if (custom && custom[key]) {
194
+ // return typeof custom[key] === "function"
195
+ // ? custom[key](data)
196
+ // : custom[key];
197
+ // }
198
+ // }
199
+ // // Fallback to key or empty string
200
+ // return key;
201
+ // },
202
+ // };
203
+ // }
204
+ // // Pass processed i18n in options to render functions
205
+ // const renderOptions: TemplateOptionsType = {
206
+ // ...options,
207
+ // i18n,
208
+ // };
209
+ // // Render React component to HTML
210
+ // const reactNode = createTemplate(data, renderOptions);
211
+ // const htmlRendered = await render(reactNode);
212
+ // const html = await pretty(htmlRendered);
213
+ // const text = toPlainText(htmlRendered);
214
+ // // Get subject from i18n or use default
215
+ // const subject = i18n.t("headerTitle", data) || "Email";
216
+ // return {
217
+ // html,
218
+ // text,
219
+ // subject,
220
+ // };
221
+ // }
127
222
  // Original behavior: use template from registry
128
223
  if (!templateName) {
129
224
  throw new Error("Either templateName or createTemplate must be provided");
130
225
  }
131
- const template = getTemplate(templateName);
132
- // Get translations for this template
133
- const translations = templateTranslationsRegistry[templateName];
134
- if (!translations) {
135
- throw new Error(`Translations not found for template: ${templateName}`);
136
- }
137
- // Process translations once in renderTemplate
138
- const customTranslations = options?.customTranslations?.[templateName];
139
- const i18n = (0, i18n_1.getTranslations)(locale, translations, customTranslations ? { [locale]: customTranslations } : undefined, templateName);
140
- // Get subject from translations
141
- const subject = i18n.t("headerTitle", data);
142
- // Pass processed i18n in options to render functions
143
- const renderOptions = {
144
- ...options,
145
- i18n,
146
- };
226
+ const { template, translator, renderOptions } = prepareTemplateData(templateName, data, options);
147
227
  return {
148
228
  html: await template.getHtml(data, renderOptions),
149
229
  text: await template.getText(data, renderOptions),
150
- subject,
230
+ subject: (0, utils_1.multiInterpolate)("{{translations.headerTitle}}", data, translator),
231
+ };
232
+ }
233
+ function renderTemplateSync(templateName, data, options) {
234
+ if (!templateName) {
235
+ throw new Error("Either templateName or createTemplate must be provided");
236
+ }
237
+ const { template, renderOptions } = prepareTemplateData(templateName, data, options);
238
+ return {
239
+ reactNode: template.getReactNode
240
+ ? template.getReactNode(data, renderOptions)
241
+ : undefined,
151
242
  };
152
243
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0RkEsa0NBVUM7QUFXRCx3Q0F1RkM7QUF2TUQsZ0RBQWtFO0FBRWxFLGdEQUE4RTtBQUM5RSxnREFBZ0Y7QUFDaEYsbURBQXVGO0FBQ3ZGLG1EQUF1RjtBQUN2RixtQ0FBMEM7QUFVakMsZ0dBVkEsdUJBQWUsT0FVQTtBQVR4Qix5Q0FBaUQ7QUFDakQsOERBQXNGO0FBQ3RGLDhEQUFzRjtBQUN0RixpRUFBNEY7QUFDNUYsaUVBQTRGO0FBaUI1Rjs7R0FFRztBQUNILE1BQU0sNEJBQTRCLEdBQThDO0lBQzlFLENBQUMsdUJBQWUsQ0FBQyxZQUFZLENBQUMsRUFBRSwyQkFBdUI7SUFDdkQsQ0FBQyx1QkFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLDJCQUF1QjtJQUN2RCxDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsMkJBQTBCO0lBQzdELENBQUMsdUJBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSwyQkFBMEI7Q0FDOUQsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBMkM7SUFDL0QsQ0FBQyx1QkFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBUyxFQUFFLE9BQTZCLEVBQW1CLEVBQUU7WUFDM0UsT0FBTyxNQUFNLElBQUEsMEJBQWtCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQVMsRUFBRSxPQUE2QixFQUFtQixFQUFFO1lBQzNFLE9BQU8sTUFBTSxJQUFBLDBCQUFrQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO0tBQ0Y7SUFDRCxDQUFDLHVCQUFlLENBQUMsWUFBWSxDQUFDLEVBQUU7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
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrSkEsOENBd0VDO0FBU0Qsa0NBVUM7QUFrRUQsd0NBdUVDO0FBRUQsZ0RBZ0JDO0FBdFlELGlEQUkrQjtBQUUvQixtQ0FBMEM7QUE2QmpDLGdHQTdCQSx1QkFBZSxPQTZCQTtBQTNCeEIsaURBR3dCO0FBQ3hCLHVEQUcyQjtBQUMzQixpREFHd0I7QUFDeEIsdURBRzJCO0FBRTNCLHVDQUtxQjtBQWlCckI7O0dBRUc7QUFDSCxNQUFNLDRCQUE0QixHQUU5QjtJQUNGLENBQUMsdUJBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSw4QkFBMEI7Q0FDOUQsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQTJDO0lBQ2pFLENBQUMsdUJBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUMvQixPQUFPLEVBQUUsS0FBSyxFQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7WUFDbkIsT0FBTyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUNaLElBQVMsRUFDVCxPQUE2QixFQUNaLEVBQUU7WUFDbkIsT0FBTyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxZQUFZLEVBQUUsQ0FDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sSUFBQSxnQ0FBd0IsRUFBQyxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUNGO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FRbEI7SUFDRixHQUFHLGtCQUFrQjtJQUNyQixDQUFDLHVCQUFlLENBQUMsWUFBWSxDQUFDLEVB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
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.templateBlocks = exports.translations = exports.en = exports.pl = void 0;
7
+ const pl_json_1 = __importDefault(require("./translations/pl.json"));
8
+ exports.pl = pl_json_1.default;
9
+ const en_json_1 = __importDefault(require("./translations/en.json"));
10
+ exports.en = en_json_1.default;
11
+ exports.translations = {
12
+ pl: pl_json_1.default,
13
+ en: en_json_1.default,
14
+ };
15
+ exports.templateBlocks = [
16
+ {
17
+ type: "section",
18
+ id: "section-1",
19
+ props: {
20
+ blocks: [
21
+ {
22
+ id: "heading-1",
23
+ type: "heading",
24
+ props: {
25
+ value: "{{translations.headerTitle}}",
26
+ },
27
+ },
28
+ {
29
+ id: "text-1",
30
+ type: "text",
31
+ props: {
32
+ value: "{{translations.headerDescription}}",
33
+ },
34
+ },
35
+ ],
36
+ },
37
+ },
38
+ {
39
+ id: "separator-1",
40
+ type: "separator",
41
+ },
42
+ {
43
+ type: "section",
44
+ id: "section-2",
45
+ props: {
46
+ blocks: [
47
+ {
48
+ id: "row-1",
49
+ type: "row",
50
+ props: {
51
+ label: "{{translations.labels.inventoryLevelId}}",
52
+ value: "{{data.inventory_level.id}}",
53
+ },
54
+ },
55
+ {
56
+ id: "separator-1",
57
+ type: "separator",
58
+ },
59
+ {
60
+ id: "row-2",
61
+ type: "row",
62
+ props: {
63
+ label: "{{translations.labels.inventoryLevelLocation}}",
64
+ value: "{{data.inventory_level.location_id}}",
65
+ },
66
+ },
67
+ {
68
+ id: "separator-2",
69
+ type: "separator",
70
+ },
71
+ {
72
+ id: "row-3",
73
+ type: "row",
74
+ props: {
75
+ label: "{{translations.labels.inventoryLevelStockedQuantity}}",
76
+ value: "{{data.inventory_level.stocked_quantity}}",
77
+ },
78
+ },
79
+ {
80
+ id: "separator-3",
81
+ type: "separator",
82
+ },
83
+ {
84
+ id: "row-4",
85
+ type: "row",
86
+ props: {
87
+ label: "{{translations.labels.inventoryLevelReservedQuantity}}",
88
+ value: "{{data.inventory_level.reserved_quantity}}",
89
+ },
90
+ },
91
+ {
92
+ id: "separator-4",
93
+ type: "separator",
94
+ },
95
+ {
96
+ id: "row-5",
97
+ type: "row",
98
+ props: {
99
+ label: "{{translations.labels.inventoryLevelAvailableQuantity}}",
100
+ value: "{{data.inventory_level.available_quantity}}",
101
+ },
102
+ },
103
+ ],
104
+ },
105
+ },
106
+ {
107
+ id: "separator-1",
108
+ type: "separator",
109
+ },
110
+ {
111
+ type: "section",
112
+ id: "section-3",
113
+ props: {
114
+ blocks: [
115
+ {
116
+ id: "text-2",
117
+ type: "text",
118
+ props: {
119
+ value: "{{translations.footer}}",
120
+ },
121
+ },
122
+ ],
123
+ },
124
+ },
125
+ ];
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvaW52ZW50b3J5LWxldmVsL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFHL0IsYUFIRixpQkFBRSxDQUdFO0FBRlgscUVBQXdDO0FBRTNCLGFBRk4saUJBQUUsQ0FFTTtBQUVGLFFBQUEsWUFBWSxHQUFxQjtJQUM1QyxFQUFFLEVBQUUsaUJBQUU7SUFDTixFQUFFLEVBQUUsaUJBQUU7Q0FDUCxDQUFDO0FBRVcsUUFBQSxjQUFjLEdBQUc7SUFDNUI7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxXQUFXO29CQUNmLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsOEJBQThCO3FCQUN0QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsUUFBUTtvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLG9DQUFvQztxQkFDNUM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsMENBQTBDO3dCQUNqRCxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsZ0RBQWdEO3dCQUN2RCxLQUFLLEVBQUUsc0NBQXNDO3FCQUM5QztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsdURBQXVEO3dCQUM5RCxLQUFLLEVBQUUsMkNBQTJDO3FCQUNuRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsd0RBQXdEO3dCQUMvRCxLQUFLLEVBQUUsNENBQTRDO3FCQUNwRDtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUseURBQXlEO3dCQUNoRSxLQUFLLEVBQUUsNkNBQTZDO3FCQUNyRDtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsRUFBRSxFQUFFLGFBQWE7UUFDakIsSUFBSSxFQUFFLFdBQVc7S0FDbEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsRUFBRSxFQUFFLFdBQVc7UUFDZixLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsRUFBRSxFQUFFLFFBQVE7b0JBQ1osSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSx5QkFBeUI7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQyJ9
@@ -1,19 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getInventoryLevelHtml = getInventoryLevelHtml;
4
- exports.getInventoryLevelText = getInventoryLevelText;
5
- const template_1 = require("./template");
6
- /**
7
- * Generates HTML email for order created notificat
8
- *
9
- * @param data - Order data (includes subject)
10
- * @param options - Optional theme and locale configuration
11
- * @returns HTML string ready to send
12
- */
13
- async function getInventoryLevelHtml(data, options) {
14
- return await (0, template_1.renderHTML)(data, options);
15
- }
16
- async function getInventoryLevelText(data, options) {
17
- return await (0, template_1.renderText)(data, options);
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSxzREFLQztBQUVELHNEQUtDO0FBckJELHlDQUFvRDtBQUVwRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLElBQW9DLEVBQ3BDLE9BQTRCO0lBRTVCLE9BQU8sTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLElBQW9DLEVBQ3BDLE9BQTRCO0lBRTVCLE9BQU8sTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==
3
+ exports.translations = exports.templateBlocks = void 0;
4
+ // import { templateBlocks, translations } from "./config";
5
+ var config_1 = require("./config");
6
+ Object.defineProperty(exports, "templateBlocks", { enumerable: true, get: function () { return config_1.templateBlocks; } });
7
+ Object.defineProperty(exports, "translations", { enumerable: true, get: function () { return config_1.translations; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbnZlbnRvcnktbGV2ZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJEO0FBQzNELG1DQUF3RDtBQUEvQyx3R0FBQSxjQUFjLE9BQUE7QUFBRSxzR0FBQSxZQUFZLE9BQUEifQ==