email-builder-utils 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types/Generics.d.ts
CHANGED
|
@@ -32,6 +32,15 @@ export declare enum FEATURE_TYPE {
|
|
|
32
32
|
SHARE_TEMPLATE = "SHARE_TEMPLATE",
|
|
33
33
|
UPDATE_TEAMPLATE = "UPDATE_TEAMPLATE",
|
|
34
34
|
LIST_TEMPLATE = "LIST_TEMPLATE",
|
|
35
|
-
SEND_EMAIL = "SEND_EMAIL"
|
|
35
|
+
SEND_EMAIL = "SEND_EMAIL",
|
|
36
|
+
CREATE_ORG = "CREATE_ORG",
|
|
37
|
+
LIST_ORG = "LIST_ORG",
|
|
38
|
+
GET_ORG = "GET_ORG",
|
|
39
|
+
DELETE_ORG = "DELETE_ORG",
|
|
40
|
+
UPDATE_ORG = "UPDATE_ORG",
|
|
41
|
+
ADD_ORD_USER = "ADD_ORD_USER",
|
|
42
|
+
LIST_ORD_USER = "LIST_ORD_USER",
|
|
43
|
+
DELETE_ORD_USER = "DELETE_ORD_USER",
|
|
44
|
+
UPDATE_ORD_USER = "UPDATE_ORD_USER"
|
|
36
45
|
}
|
|
37
46
|
//# sourceMappingURL=Generics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Generics.d.ts","sourceRoot":"","sources":["../../src/types/Generics.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK;IACf,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IAEtB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IAGvB,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IAGjC,yBAAyB,8BAA8B;IACvD,0BAA0B,+BAA+B;IACzD,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,UAAU,eAAe;
|
|
1
|
+
{"version":3,"file":"Generics.d.ts","sourceRoot":"","sources":["../../src/types/Generics.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK;IACf,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,YAAY;IAEtB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IAGvB,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IAGjC,yBAAyB,8BAA8B;IACvD,0BAA0B,+BAA+B;IACzD,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IAGzB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,UAAU,eAAe;IAGzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;CACpC"}
|
package/dist/types/Generics.js
CHANGED
|
@@ -43,4 +43,15 @@ var FEATURE_TYPE;
|
|
|
43
43
|
FEATURE_TYPE["UPDATE_TEAMPLATE"] = "UPDATE_TEAMPLATE";
|
|
44
44
|
FEATURE_TYPE["LIST_TEMPLATE"] = "LIST_TEMPLATE";
|
|
45
45
|
FEATURE_TYPE["SEND_EMAIL"] = "SEND_EMAIL";
|
|
46
|
+
// MANEGE Organisation
|
|
47
|
+
FEATURE_TYPE["CREATE_ORG"] = "CREATE_ORG";
|
|
48
|
+
FEATURE_TYPE["LIST_ORG"] = "LIST_ORG";
|
|
49
|
+
FEATURE_TYPE["GET_ORG"] = "GET_ORG";
|
|
50
|
+
FEATURE_TYPE["DELETE_ORG"] = "DELETE_ORG";
|
|
51
|
+
FEATURE_TYPE["UPDATE_ORG"] = "UPDATE_ORG";
|
|
52
|
+
// Manage Org Users
|
|
53
|
+
FEATURE_TYPE["ADD_ORD_USER"] = "ADD_ORD_USER";
|
|
54
|
+
FEATURE_TYPE["LIST_ORD_USER"] = "LIST_ORD_USER";
|
|
55
|
+
FEATURE_TYPE["DELETE_ORD_USER"] = "DELETE_ORD_USER";
|
|
56
|
+
FEATURE_TYPE["UPDATE_ORD_USER"] = "UPDATE_ORD_USER";
|
|
46
57
|
})(FEATURE_TYPE || (exports.FEATURE_TYPE = FEATURE_TYPE = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonToHTML.d.ts","sourceRoot":"","sources":["../../src/utils/jsonToHTML.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"jsonToHTML.d.ts","sourceRoot":"","sources":["../../src/utils/jsonToHTML.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAUrC,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE;QACJ,KAAK,EAAE,cAAc,CAAC;QACtB,KAAK,EAAE,GAAG,CAAC;QACX,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;KAC7B,CAAC;CACH;AAMD,eAAO,MAAM,gBAAgB,kDAAkD,CAAC;AAiDhF,wBAAsB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,mBAiB9F"}
|
package/dist/utils/jsonToHTML.js
CHANGED
|
@@ -11,9 +11,8 @@ exports.tableCommonStyle = "border-collapse:collapse; table-layout:fixed;";
|
|
|
11
11
|
function cleanJson(obj) {
|
|
12
12
|
if (typeof obj !== "object" || obj === null)
|
|
13
13
|
return obj;
|
|
14
|
-
if (Array.isArray(obj))
|
|
14
|
+
if (Array.isArray(obj))
|
|
15
15
|
return obj.map(cleanJson);
|
|
16
|
-
}
|
|
17
16
|
return Object.fromEntries(Object.entries(obj)
|
|
18
17
|
.filter(([_, value]) => value !== undefined && value !== null && value !== "")
|
|
19
18
|
.map(([key, value]) => [key, cleanJson(value)]));
|
|
@@ -21,41 +20,35 @@ function cleanJson(obj) {
|
|
|
21
20
|
function jsonToPlainString(obj) {
|
|
22
21
|
if (typeof obj !== "object" || obj === null)
|
|
23
22
|
return String(obj);
|
|
24
|
-
if (Array.isArray(obj))
|
|
23
|
+
if (Array.isArray(obj))
|
|
25
24
|
return obj.map(jsonToPlainString).join(", ");
|
|
26
|
-
}
|
|
27
25
|
return Object.entries(obj)
|
|
28
26
|
.map(([key, value]) => `${key}:${jsonToPlainString(value)}; `)
|
|
29
27
|
.join("");
|
|
30
28
|
}
|
|
31
29
|
function buildStyles(style, { pxChanges, perChanges }) {
|
|
32
|
-
if (!style)
|
|
30
|
+
if (!style)
|
|
33
31
|
style = {};
|
|
34
|
-
}
|
|
35
32
|
const stylesObj = {};
|
|
36
33
|
Object.entries(style).forEach(([key, value]) => {
|
|
37
|
-
if (key === "customCss")
|
|
34
|
+
if (key === "customCss")
|
|
38
35
|
return;
|
|
39
|
-
}
|
|
40
|
-
const appendPx = pxChanges.includes(key);
|
|
41
|
-
const appendPer = perChanges.includes(key);
|
|
42
36
|
if (value === undefined || value === null || value === "")
|
|
43
|
-
return
|
|
44
|
-
if ((key === "padding" || key === "buttonPadding") && typeof value === "object"
|
|
37
|
+
return;
|
|
38
|
+
if ((key === "padding" || key === "buttonPadding") && typeof value === "object") {
|
|
45
39
|
const padding = value;
|
|
46
40
|
value = `${padding.top}px ${padding.right}px ${padding.bottom}px ${padding.left}px`;
|
|
47
41
|
}
|
|
48
42
|
const cssKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
49
|
-
if (
|
|
43
|
+
if (pxChanges.includes(key)) {
|
|
50
44
|
stylesObj[cssKey] = `${value}px`;
|
|
51
45
|
}
|
|
52
|
-
else if (
|
|
46
|
+
else if (perChanges.includes(key)) {
|
|
53
47
|
stylesObj[cssKey] = `${value}%`;
|
|
54
48
|
}
|
|
55
49
|
else {
|
|
56
50
|
stylesObj[cssKey] = value;
|
|
57
51
|
}
|
|
58
|
-
return;
|
|
59
52
|
});
|
|
60
53
|
return `${jsonToPlainString(cleanJson(stylesObj))}${style.customCss || ""}`.trim();
|
|
61
54
|
}
|
|
@@ -101,26 +94,41 @@ function convertTextBlock(blockData) {
|
|
|
101
94
|
const textContent = appendOutlookSupport(text.replaceAll(/\n/g, "<br>"), styles);
|
|
102
95
|
return navigateToUrl ? `<a href="${navigateToUrl}" style="color:inherit; text-decoration:none; cursor:pointer;">${textContent}</a>` : textContent;
|
|
103
96
|
}
|
|
104
|
-
async function appendOutlookForImage(content, outerContainerWidth, innerContainerWidth, imageUrl) {
|
|
97
|
+
async function appendOutlookForImage(content, outerContainerWidth, innerContainerWidth, imageUrl, style = {}) {
|
|
105
98
|
const image = await jimp_1.Jimp.read(imageUrl);
|
|
106
99
|
const originalWidth = image.bitmap.width;
|
|
107
100
|
const originalHeight = image.bitmap.height;
|
|
108
101
|
// Calculate width scaling factor based on outer and inner widths
|
|
109
102
|
const widthScalingFactor = Math.min(outerContainerWidth / originalWidth, innerContainerWidth / originalWidth);
|
|
110
|
-
// Scale
|
|
103
|
+
// Scale height proportionally
|
|
111
104
|
const scaledWidth = Math.round(originalWidth * widthScalingFactor);
|
|
112
105
|
const scaledHeight = Math.round(originalHeight * widthScalingFactor); // Maintain aspect ratio
|
|
113
|
-
//
|
|
106
|
+
// Extract border styles
|
|
107
|
+
const borderWidth = style?.borderWidth || 0;
|
|
108
|
+
const borderColor = style?.borderColor || "transparent";
|
|
109
|
+
const borderRadius = style?.borderRadius || 0;
|
|
110
|
+
const useRoundRect = borderRadius > 0;
|
|
111
|
+
const arcsize = useRoundRect ? Math.min(borderRadius / scaledWidth, 1) : 0;
|
|
112
|
+
// Conditionally add stroke attributes
|
|
113
|
+
const borderAttributes = borderWidth > 0
|
|
114
|
+
? `strokeweight="${borderWidth}px" strokecolor="${borderColor}"`
|
|
115
|
+
: `stroked="false"`;
|
|
114
116
|
const outlookImage = `<!--[if mso]>
|
|
115
|
-
<v:rect xmlns:v="urn:schemas-microsoft-com:vml"
|
|
117
|
+
<v:${useRoundRect ? "roundrect" : "rect"} xmlns:v="urn:schemas-microsoft-com:vml"
|
|
118
|
+
style="width:${scaledWidth}px;height:${scaledHeight}px;"
|
|
119
|
+
${borderAttributes}
|
|
120
|
+
${useRoundRect ? `arcsize="${arcsize}"` : ""}
|
|
121
|
+
fill="true"
|
|
122
|
+
fillcolor="none">
|
|
116
123
|
<v:fill src="${imageUrl}" type="frame" />
|
|
117
|
-
|
|
124
|
+
<v:textbox inset="0,0,0,0"><div style="display:none;">.</div></v:textbox>
|
|
125
|
+
</v:${useRoundRect ? "roundrect" : "rect"}>
|
|
118
126
|
<![endif]-->`;
|
|
119
127
|
return `
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
${outlookImage}
|
|
129
|
+
<!--[if !mso]><!-->
|
|
130
|
+
${content}
|
|
131
|
+
<!--<![endif]-->
|
|
124
132
|
`;
|
|
125
133
|
}
|
|
126
134
|
async function convertImageBlock(blockData, cellWidthInPx) {
|
|
@@ -131,8 +139,10 @@ async function convertImageBlock(blockData, cellWidthInPx) {
|
|
|
131
139
|
const containerStyles = buildStyles(containerStyle, { perChanges: [], pxChanges: addPxToAttributes });
|
|
132
140
|
const imageTagStyles = buildStyles(imageStyle, { perChanges: addPxOrPerToAttributes, pxChanges: addPxToAttributes });
|
|
133
141
|
const imageElement = `<img src="${imageUrl}" alt="${altText}" style="${imageTagStyles}" />`;
|
|
134
|
-
const outlookImage = await appendOutlookForImage(imageElement, cellWidthInPx, ((typeof width === "string" ? parseInt(width.replace("%", "")) : width) / 100) *
|
|
142
|
+
const outlookImage = await appendOutlookForImage(imageElement, cellWidthInPx, ((typeof width === "string" ? parseInt(width.replace("%", "")) : width) / 100) *
|
|
143
|
+
(cellWidthInPx - style?.padding?.left - style?.padding?.right), imageUrl, style);
|
|
135
144
|
const imageContent = appendOutlookSupport(outlookImage, containerStyles);
|
|
145
|
+
console.log(imageContent);
|
|
136
146
|
return navigateToUrl ? `<a href="${navigateToUrl}" target="_blank" style="display:block; text-decoration:none; cursor:pointer;">${imageContent}</a>` : imageContent;
|
|
137
147
|
}
|
|
138
148
|
function appendOutlookForButton(content, buttonStyle, navigateToUrl, text) {
|