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.
@@ -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;CAC1B"}
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"}
@@ -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;AASrC,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;AASD,eAAO,MAAM,gBAAgB,kDAAkD,CAAC;AAyDhF,wBAAsB,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,mBAiB9F"}
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"}
@@ -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 null;
44
- if ((key === "padding" || key === "buttonPadding") && typeof value === "object" && value !== null) {
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 (appendPx) {
43
+ if (pxChanges.includes(key)) {
50
44
  stylesObj[cssKey] = `${value}px`;
51
45
  }
52
- else if (appendPer) {
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 the height proportionally
103
+ // Scale height proportionally
111
104
  const scaledWidth = Math.round(originalWidth * widthScalingFactor);
112
105
  const scaledHeight = Math.round(originalHeight * widthScalingFactor); // Maintain aspect ratio
113
- // VML for Outlook
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" style="width:${scaledWidth}px;height:${scaledHeight}px; border:none;">
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
- </v:rect>
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
- ${outlookImage}
121
- <!--[if !mso]><!-->
122
- ${content}
123
- <!--<![endif]-->
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) * (cellWidthInPx - style?.padding?.left - style?.padding?.right), imageUrl);
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "email-builder-utils",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [