@contentgrowth/content-emailing 0.7.9 → 0.8.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.
- package/dist/{TemplateManager-DbAGIGdI.d.cts → TemplateManager-DX_McznX.d.cts} +9 -0
- package/dist/{TemplateManager-DbAGIGdI.d.ts → TemplateManager-DX_McznX.d.ts} +9 -0
- package/dist/frontend/index.cjs +36 -10
- package/dist/frontend/index.cjs.map +1 -1
- package/dist/frontend/index.d.cts +2 -1
- package/dist/frontend/index.d.ts +2 -1
- package/dist/frontend/index.js +36 -10
- package/dist/frontend/index.js.map +1 -1
- package/dist/index.cjs +24 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -41,6 +41,10 @@ interface TemplateTesterProps {
|
|
|
41
41
|
onSendTest: (data: TestEmailData) => Promise<void>;
|
|
42
42
|
onCancel: () => void;
|
|
43
43
|
sending?: boolean;
|
|
44
|
+
defaultValues?: {
|
|
45
|
+
to?: string;
|
|
46
|
+
variables?: Record<string, string>;
|
|
47
|
+
};
|
|
44
48
|
}
|
|
45
49
|
declare const TemplateTester: React.FC<TemplateTesterProps>;
|
|
46
50
|
|
|
@@ -71,6 +75,11 @@ interface TemplateManagerProps {
|
|
|
71
75
|
description?: string;
|
|
72
76
|
/** Template types for filtering and editor */
|
|
73
77
|
templateTypes?: string[];
|
|
78
|
+
/** Default values for tester */
|
|
79
|
+
defaultTestValues?: {
|
|
80
|
+
to?: string;
|
|
81
|
+
variables?: Record<string, string>;
|
|
82
|
+
};
|
|
74
83
|
}
|
|
75
84
|
declare const TemplateManager: React.FC<TemplateManagerProps>;
|
|
76
85
|
|
|
@@ -41,6 +41,10 @@ interface TemplateTesterProps {
|
|
|
41
41
|
onSendTest: (data: TestEmailData) => Promise<void>;
|
|
42
42
|
onCancel: () => void;
|
|
43
43
|
sending?: boolean;
|
|
44
|
+
defaultValues?: {
|
|
45
|
+
to?: string;
|
|
46
|
+
variables?: Record<string, string>;
|
|
47
|
+
};
|
|
44
48
|
}
|
|
45
49
|
declare const TemplateTester: React.FC<TemplateTesterProps>;
|
|
46
50
|
|
|
@@ -71,6 +75,11 @@ interface TemplateManagerProps {
|
|
|
71
75
|
description?: string;
|
|
72
76
|
/** Template types for filtering and editor */
|
|
73
77
|
templateTypes?: string[];
|
|
78
|
+
/** Default values for tester */
|
|
79
|
+
defaultTestValues?: {
|
|
80
|
+
to?: string;
|
|
81
|
+
variables?: Record<string, string>;
|
|
82
|
+
};
|
|
74
83
|
}
|
|
75
84
|
declare const TemplateManager: React.FC<TemplateManagerProps>;
|
|
76
85
|
|
package/dist/frontend/index.cjs
CHANGED
|
@@ -191,9 +191,10 @@ var TemplateTester = ({
|
|
|
191
191
|
template,
|
|
192
192
|
onSendTest,
|
|
193
193
|
onCancel,
|
|
194
|
-
sending = false
|
|
194
|
+
sending = false,
|
|
195
|
+
defaultValues = {}
|
|
195
196
|
}) => {
|
|
196
|
-
const [toEmail, setToEmail] = (0, import_react2.useState)("");
|
|
197
|
+
const [toEmail, setToEmail] = (0, import_react2.useState)(defaultValues.to || "");
|
|
197
198
|
const [variables, setVariables] = (0, import_react2.useState)({});
|
|
198
199
|
const [detectedVariables, setDetectedVariables] = (0, import_react2.useState)([]);
|
|
199
200
|
const [error, setError] = (0, import_react2.useState)(null);
|
|
@@ -205,11 +206,18 @@ var TemplateTester = ({
|
|
|
205
206
|
const uniqueVars = Array.from(/* @__PURE__ */ new Set([...subjectVars, ...bodyVars]));
|
|
206
207
|
setDetectedVariables(uniqueVars);
|
|
207
208
|
const initialValues = {};
|
|
209
|
+
const defaults = defaultValues.variables || {};
|
|
208
210
|
uniqueVars.forEach((v) => {
|
|
209
|
-
|
|
211
|
+
if (defaults[v]) {
|
|
212
|
+
initialValues[v] = defaults[v];
|
|
213
|
+
} else if (v === "email" && toEmail) {
|
|
214
|
+
initialValues[v] = toEmail;
|
|
215
|
+
} else {
|
|
216
|
+
initialValues[v] = "";
|
|
217
|
+
}
|
|
210
218
|
});
|
|
211
219
|
setVariables(initialValues);
|
|
212
|
-
}, [template]);
|
|
220
|
+
}, [template, defaultValues]);
|
|
213
221
|
const handleSubmit = async (e) => {
|
|
214
222
|
e.preventDefault();
|
|
215
223
|
setError(null);
|
|
@@ -231,7 +239,13 @@ var TemplateTester = ({
|
|
|
231
239
|
type: "email",
|
|
232
240
|
required: true,
|
|
233
241
|
value: toEmail,
|
|
234
|
-
onChange: (e) =>
|
|
242
|
+
onChange: (e) => {
|
|
243
|
+
const val = e.target.value;
|
|
244
|
+
setToEmail(val);
|
|
245
|
+
if (variables["email"] !== void 0) {
|
|
246
|
+
setVariables((prev) => ({ ...prev, email: val }));
|
|
247
|
+
}
|
|
248
|
+
},
|
|
235
249
|
className: "w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500",
|
|
236
250
|
placeholder: "recipient@example.com"
|
|
237
251
|
}
|
|
@@ -284,8 +298,10 @@ var TemplateManager = ({
|
|
|
284
298
|
onSendTestEmail,
|
|
285
299
|
title = "Email Templates",
|
|
286
300
|
description = "Manage system email templates",
|
|
287
|
-
templateTypes
|
|
301
|
+
templateTypes,
|
|
302
|
+
defaultTestValues
|
|
288
303
|
}) => {
|
|
304
|
+
const props = { defaultTestValues };
|
|
289
305
|
const [templates, setTemplates] = (0, import_react3.useState)([]);
|
|
290
306
|
const [loading, setLoading] = (0, import_react3.useState)(true);
|
|
291
307
|
const [error, setError] = (0, import_react3.useState)(null);
|
|
@@ -492,7 +508,8 @@ var TemplateManager = ({
|
|
|
492
508
|
template: testingTemplate,
|
|
493
509
|
onSendTest: handleTest,
|
|
494
510
|
onCancel: () => setShowTester(false),
|
|
495
|
-
sending: saving
|
|
511
|
+
sending: saving,
|
|
512
|
+
defaultValues: props.defaultTestValues
|
|
496
513
|
}
|
|
497
514
|
), deleteConfirm && /* @__PURE__ */ import_react3.default.createElement("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4" }, /* @__PURE__ */ import_react3.default.createElement("div", { className: "bg-white rounded-lg shadow-xl max-w-sm w-full p-6" }, /* @__PURE__ */ import_react3.default.createElement("h3", { className: "text-lg font-semibold mb-2" }, "Delete Template?"), /* @__PURE__ */ import_react3.default.createElement("p", { className: "text-gray-600 mb-4" }, "This action cannot be undone."), /* @__PURE__ */ import_react3.default.createElement("div", { className: "flex justify-end gap-3" }, /* @__PURE__ */ import_react3.default.createElement(
|
|
498
515
|
"button",
|
|
@@ -577,13 +594,22 @@ var EmailSettings = ({
|
|
|
577
594
|
if (loading) {
|
|
578
595
|
return /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center justify-center p-12" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" }));
|
|
579
596
|
}
|
|
580
|
-
return /* @__PURE__ */ import_react4.default.createElement("div", { className: "max-w-4xl p-6 space-y-8" }, /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, title), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-gray-500 mt-1" }, description)), /* @__PURE__ */ import_react4.default.createElement("div", { className: "bg-white rounded-lg border border-gray-200 shadow-sm overflow-hidden" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-6 py-4 border-b border-gray-100 bg-gray-50" }, /* @__PURE__ */ import_react4.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "Global Configuration"), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-sm text-gray-500" }, "Default sender identity and delivery provider.")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "p-6 space-y-6" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react4.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, "
|
|
597
|
+
return /* @__PURE__ */ import_react4.default.createElement("div", { className: "max-w-4xl p-6 space-y-8" }, /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("h2", { className: "text-2xl font-bold text-gray-900" }, title), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-gray-500 mt-1" }, description)), /* @__PURE__ */ import_react4.default.createElement("div", { className: "bg-white rounded-lg border border-gray-200 shadow-sm overflow-hidden" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-6 py-4 border-b border-gray-100 bg-gray-50" }, /* @__PURE__ */ import_react4.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "Global Configuration"), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-sm text-gray-500" }, "Default sender identity and delivery provider.")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "p-6 space-y-6" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react4.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, "Brand Name"), /* @__PURE__ */ import_react4.default.createElement(
|
|
598
|
+
"input",
|
|
599
|
+
{
|
|
600
|
+
type: "text",
|
|
601
|
+
value: settings.brandName || "",
|
|
602
|
+
onChange: (e) => handleChange("brandName", e.target.value),
|
|
603
|
+
placeholder: "e.g. Content Growth",
|
|
604
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
605
|
+
}
|
|
606
|
+
), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-xs text-gray-500" }, "Used in email templates as ", "{{brandName}}")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react4.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, "From Name"), /* @__PURE__ */ import_react4.default.createElement(
|
|
581
607
|
"input",
|
|
582
608
|
{
|
|
583
609
|
type: "text",
|
|
584
610
|
value: settings.fromName,
|
|
585
611
|
onChange: (e) => handleChange("fromName", e.target.value),
|
|
586
|
-
placeholder: "e.g.
|
|
612
|
+
placeholder: "e.g. Support Team",
|
|
587
613
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
588
614
|
}
|
|
589
615
|
)), /* @__PURE__ */ import_react4.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react4.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, "From Address"), /* @__PURE__ */ import_react4.default.createElement(
|
|
@@ -592,7 +618,7 @@ var EmailSettings = ({
|
|
|
592
618
|
type: "email",
|
|
593
619
|
value: settings.fromAddress,
|
|
594
620
|
onChange: (e) => handleChange("fromAddress", e.target.value),
|
|
595
|
-
placeholder: "e.g. noreply@
|
|
621
|
+
placeholder: "e.g. noreply@example.com",
|
|
596
622
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
|
|
597
623
|
}
|
|
598
624
|
))), /* @__PURE__ */ import_react4.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ import_react4.default.createElement("label", { className: "block text-sm font-medium text-gray-700" }, "Email Provider"), /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react4.default.createElement(
|