@rudyzeinoun/email-builder 0.0.14 → 0.0.16
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/index.d.mts +1882 -3
- package/dist/index.d.ts +1882 -3
- package/dist/index.js +310 -7
- package/dist/index.mjs +276 -7
- package/package.json +6 -3
- package/dist/Reader/core.d.mts +0 -1862
- package/dist/Reader/core.d.ts +0 -1862
- package/dist/Reader/core.d.ts.map +0 -1
- package/dist/Reader/core.js +0 -80
- package/dist/Reader/core.js.map +0 -1
- package/dist/Reader/core.mjs +0 -80
- package/dist/Reader/core.mjs.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.d.mts +0 -136
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.d.ts +0 -136
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.d.ts.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.js +0 -16
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.js.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.mjs +0 -16
- package/dist/blocks/ColumnsContainer/ColumnsContainerPropsSchema.mjs.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.d.mts +0 -4
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.d.ts +0 -4
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.d.ts.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.js +0 -23
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.js.map +0 -1
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.mjs +0 -23
- package/dist/blocks/ColumnsContainer/ColumnsContainerReader.mjs.map +0 -1
- package/dist/blocks/Container/ContainerPropsSchema.d.mts +0 -86
- package/dist/blocks/Container/ContainerPropsSchema.d.ts +0 -86
- package/dist/blocks/Container/ContainerPropsSchema.d.ts.map +0 -1
- package/dist/blocks/Container/ContainerPropsSchema.js +0 -13
- package/dist/blocks/Container/ContainerPropsSchema.js.map +0 -1
- package/dist/blocks/Container/ContainerPropsSchema.mjs +0 -13
- package/dist/blocks/Container/ContainerPropsSchema.mjs.map +0 -1
- package/dist/blocks/Container/ContainerReader.d.mts +0 -4
- package/dist/blocks/Container/ContainerReader.d.ts +0 -4
- package/dist/blocks/Container/ContainerReader.d.ts.map +0 -1
- package/dist/blocks/Container/ContainerReader.js +0 -9
- package/dist/blocks/Container/ContainerReader.js.map +0 -1
- package/dist/blocks/Container/ContainerReader.mjs +0 -9
- package/dist/blocks/Container/ContainerReader.mjs.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.d.mts +0 -28
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +0 -28
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.js +0 -30
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.js.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.mjs +0 -30
- package/dist/blocks/EmailLayout/EmailLayoutPropsSchema.mjs.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutReader.d.mts +0 -4
- package/dist/blocks/EmailLayout/EmailLayoutReader.d.ts +0 -4
- package/dist/blocks/EmailLayout/EmailLayoutReader.d.ts.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutReader.js +0 -59
- package/dist/blocks/EmailLayout/EmailLayoutReader.js.map +0 -1
- package/dist/blocks/EmailLayout/EmailLayoutReader.mjs +0 -59
- package/dist/blocks/EmailLayout/EmailLayoutReader.mjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/renderers/renderToStaticMarkup.d.mts +0 -7
- package/dist/renderers/renderToStaticMarkup.d.ts +0 -7
- package/dist/renderers/renderToStaticMarkup.d.ts.map +0 -1
- package/dist/renderers/renderToStaticMarkup.js +0 -10
- package/dist/renderers/renderToStaticMarkup.js.map +0 -1
- package/dist/renderers/renderToStaticMarkup.mjs +0 -10
- package/dist/renderers/renderToStaticMarkup.mjs.map +0 -1
- package/dist/renderers/renderToStaticMarkup.spec.d.mts +0 -5
- package/dist/renderers/renderToStaticMarkup.spec.d.ts +0 -5
- package/dist/renderers/renderToStaticMarkup.spec.d.ts.map +0 -1
- package/dist/renderers/renderToStaticMarkup.spec.js +0 -20
- package/dist/renderers/renderToStaticMarkup.spec.js.map +0 -1
- package/dist/renderers/renderToStaticMarkup.spec.mjs +0 -20
- package/dist/renderers/renderToStaticMarkup.spec.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,310 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __defProps = Object.defineProperties;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
9
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
12
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
|
+
var __spreadValues = (a, b) => {
|
|
14
|
+
for (var prop in b || (b = {}))
|
|
15
|
+
if (__hasOwnProp.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
if (__getOwnPropSymbols)
|
|
18
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
19
|
+
if (__propIsEnum.call(b, prop))
|
|
20
|
+
__defNormalProp(a, prop, b[prop]);
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
};
|
|
24
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
37
|
+
var __export = (target, all) => {
|
|
38
|
+
for (var name in all)
|
|
39
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
40
|
+
};
|
|
41
|
+
var __copyProps = (to, from, except, desc) => {
|
|
42
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
43
|
+
for (let key of __getOwnPropNames(from))
|
|
44
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
45
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
46
|
+
}
|
|
47
|
+
return to;
|
|
48
|
+
};
|
|
49
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
50
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
51
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
52
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
53
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
54
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
55
|
+
mod
|
|
56
|
+
));
|
|
57
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
58
|
+
|
|
59
|
+
// src/index.ts
|
|
60
|
+
var index_exports = {};
|
|
61
|
+
__export(index_exports, {
|
|
62
|
+
Reader: () => Reader,
|
|
63
|
+
ReaderBlock: () => ReaderBlock,
|
|
64
|
+
ReaderBlockSchema: () => ReaderBlockSchema,
|
|
65
|
+
ReaderDocumentSchema: () => ReaderDocumentSchema,
|
|
66
|
+
renderToStaticMarkup: () => renderToStaticMarkup
|
|
67
|
+
});
|
|
68
|
+
module.exports = __toCommonJS(index_exports);
|
|
69
|
+
|
|
70
|
+
// src/renderers/renderToStaticMarkup.tsx
|
|
71
|
+
var import_react5 = __toESM(require("react"));
|
|
72
|
+
var import_server = require("react-dom/server");
|
|
73
|
+
|
|
74
|
+
// src/Reader/core.tsx
|
|
75
|
+
var import_react4 = __toESM(require("react"));
|
|
76
|
+
var import_zod4 = require("zod");
|
|
77
|
+
var import_block_avatar = require("@usewaypoint/block-avatar");
|
|
78
|
+
var import_block_button = require("@usewaypoint/block-button");
|
|
79
|
+
var import_block_divider = require("@usewaypoint/block-divider");
|
|
80
|
+
var import_block_heading = require("@usewaypoint/block-heading");
|
|
81
|
+
var import_block_html = require("@usewaypoint/block-html");
|
|
82
|
+
var import_block_image = require("@usewaypoint/block-image");
|
|
83
|
+
var import_block_spacer = require("@usewaypoint/block-spacer");
|
|
84
|
+
var import_block_text = require("@usewaypoint/block-text");
|
|
85
|
+
var import_document_core = require("@usewaypoint/document-core");
|
|
86
|
+
|
|
87
|
+
// src/blocks/ColumnsContainer/ColumnsContainerPropsSchema.ts
|
|
88
|
+
var import_zod = require("zod");
|
|
89
|
+
var import_block_columns_container = require("@usewaypoint/block-columns-container");
|
|
90
|
+
var BasePropsShape = import_block_columns_container.ColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;
|
|
91
|
+
var ColumnsContainerPropsSchema = import_zod.z.object({
|
|
92
|
+
style: import_block_columns_container.ColumnsContainerPropsSchema.shape.style,
|
|
93
|
+
props: import_zod.z.object(__spreadProps(__spreadValues({}, BasePropsShape), {
|
|
94
|
+
columns: import_zod.z.tuple([
|
|
95
|
+
import_zod.z.object({ childrenIds: import_zod.z.array(import_zod.z.string()) }),
|
|
96
|
+
import_zod.z.object({ childrenIds: import_zod.z.array(import_zod.z.string()) }),
|
|
97
|
+
import_zod.z.object({ childrenIds: import_zod.z.array(import_zod.z.string()) })
|
|
98
|
+
])
|
|
99
|
+
})).optional().nullable()
|
|
100
|
+
});
|
|
101
|
+
var ColumnsContainerPropsSchema_default = ColumnsContainerPropsSchema;
|
|
102
|
+
|
|
103
|
+
// src/blocks/ColumnsContainer/ColumnsContainerReader.tsx
|
|
104
|
+
var import_react = __toESM(require("react"));
|
|
105
|
+
var import_block_columns_container2 = require("@usewaypoint/block-columns-container");
|
|
106
|
+
function ColumnsContainerReader({ style, props }) {
|
|
107
|
+
const _a = props != null ? props : {}, { columns } = _a, restProps = __objRest(_a, ["columns"]);
|
|
108
|
+
let cols = void 0;
|
|
109
|
+
if (columns) {
|
|
110
|
+
cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ import_react.default.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
111
|
+
}
|
|
112
|
+
return /* @__PURE__ */ import_react.default.createElement(import_block_columns_container2.ColumnsContainer, { props: restProps, columns: cols, style });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// src/blocks/Container/ContainerPropsSchema.tsx
|
|
116
|
+
var import_zod2 = require("zod");
|
|
117
|
+
var import_block_container = require("@rudyzeinoun/block-container");
|
|
118
|
+
var ContainerPropsSchema = import_zod2.z.object({
|
|
119
|
+
style: import_block_container.ContainerPropsSchema.shape.style,
|
|
120
|
+
className: import_zod2.z.string().optional().nullable(),
|
|
121
|
+
loopStart: import_zod2.z.number().optional().nullable(),
|
|
122
|
+
loopEnd: import_zod2.z.number().optional().nullable(),
|
|
123
|
+
props: import_zod2.z.object({
|
|
124
|
+
childrenIds: import_zod2.z.array(import_zod2.z.string()).optional().nullable()
|
|
125
|
+
}).optional().nullable()
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// src/blocks/Container/ContainerReader.tsx
|
|
129
|
+
var import_react2 = __toESM(require("react"));
|
|
130
|
+
var import_block_container2 = require("@rudyzeinoun/block-container");
|
|
131
|
+
function ContainerReader({ style, props, className, loopStart, loopEnd }) {
|
|
132
|
+
var _a;
|
|
133
|
+
const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
|
|
134
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_block_container2.Container, { className, "data-loop-start": loopStart, "data-loop-end": loopEnd, style }, childrenIds.map((childId) => /* @__PURE__ */ import_react2.default.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx
|
|
138
|
+
var import_zod3 = require("zod");
|
|
139
|
+
var COLOR_SCHEMA = import_zod3.z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
140
|
+
var FONT_FAMILY_SCHEMA = import_zod3.z.enum([
|
|
141
|
+
"MODERN_SANS",
|
|
142
|
+
"BOOK_SANS",
|
|
143
|
+
"ORGANIC_SANS",
|
|
144
|
+
"GEOMETRIC_SANS",
|
|
145
|
+
"HEAVY_SANS",
|
|
146
|
+
"ROUNDED_SANS",
|
|
147
|
+
"MODERN_SERIF",
|
|
148
|
+
"BOOK_SERIF",
|
|
149
|
+
"MONOSPACE"
|
|
150
|
+
]).nullable().optional();
|
|
151
|
+
var EmailLayoutPropsSchema = import_zod3.z.object({
|
|
152
|
+
backdropColor: COLOR_SCHEMA,
|
|
153
|
+
borderColor: COLOR_SCHEMA,
|
|
154
|
+
borderRadius: import_zod3.z.number().optional().nullable(),
|
|
155
|
+
canvasColor: COLOR_SCHEMA,
|
|
156
|
+
textColor: COLOR_SCHEMA,
|
|
157
|
+
fontFamily: FONT_FAMILY_SCHEMA,
|
|
158
|
+
childrenIds: import_zod3.z.array(import_zod3.z.string()).optional().nullable()
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// src/blocks/EmailLayout/EmailLayoutReader.tsx
|
|
162
|
+
var import_react3 = __toESM(require("react"));
|
|
163
|
+
function getFontFamily(fontFamily) {
|
|
164
|
+
const f = fontFamily != null ? fontFamily : "MODERN_SANS";
|
|
165
|
+
switch (f) {
|
|
166
|
+
case "MODERN_SANS":
|
|
167
|
+
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
168
|
+
case "BOOK_SANS":
|
|
169
|
+
return 'Optima, Candara, "Noto Sans", source-sans-pro, sans-serif';
|
|
170
|
+
case "ORGANIC_SANS":
|
|
171
|
+
return 'Seravek, "Gill Sans Nova", Ubuntu, Calibri, "DejaVu Sans", source-sans-pro, sans-serif';
|
|
172
|
+
case "GEOMETRIC_SANS":
|
|
173
|
+
return 'Avenir, "Avenir Next LT Pro", Montserrat, Corbel, "URW Gothic", source-sans-pro, sans-serif';
|
|
174
|
+
case "HEAVY_SANS":
|
|
175
|
+
return 'Bahnschrift, "DIN Alternate", "Franklin Gothic Medium", "Nimbus Sans Narrow", sans-serif-condensed, sans-serif';
|
|
176
|
+
case "ROUNDED_SANS":
|
|
177
|
+
return 'ui-rounded, "Hiragino Maru Gothic ProN", Quicksand, Comfortaa, Manjari, "Arial Rounded MT Bold", Calibri, source-sans-pro, sans-serif';
|
|
178
|
+
case "MODERN_SERIF":
|
|
179
|
+
return 'Charter, "Bitstream Charter", "Sitka Text", Cambria, serif';
|
|
180
|
+
case "BOOK_SERIF":
|
|
181
|
+
return '"Iowan Old Style", "Palatino Linotype", "URW Palladio L", P052, serif';
|
|
182
|
+
case "MONOSPACE":
|
|
183
|
+
return '"Nimbus Mono PS", "Courier New", "Cutive Mono", monospace';
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function getBorder({ borderColor }) {
|
|
187
|
+
if (!borderColor) {
|
|
188
|
+
return void 0;
|
|
189
|
+
}
|
|
190
|
+
return `1px solid ${borderColor}`;
|
|
191
|
+
}
|
|
192
|
+
function EmailLayoutReader(props) {
|
|
193
|
+
var _a, _b, _c, _d, _e;
|
|
194
|
+
const childrenIds = (_a = props.childrenIds) != null ? _a : [];
|
|
195
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
196
|
+
"div",
|
|
197
|
+
{
|
|
198
|
+
style: {
|
|
199
|
+
backgroundColor: (_b = props.backdropColor) != null ? _b : "#F5F5F5",
|
|
200
|
+
color: (_c = props.textColor) != null ? _c : "#262626",
|
|
201
|
+
fontFamily: getFontFamily(props.fontFamily),
|
|
202
|
+
fontSize: "16px",
|
|
203
|
+
fontWeight: "400",
|
|
204
|
+
letterSpacing: "0.15008px",
|
|
205
|
+
lineHeight: "1.5",
|
|
206
|
+
margin: "0",
|
|
207
|
+
padding: "32px 0",
|
|
208
|
+
minHeight: "100%",
|
|
209
|
+
width: "100%"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
/* @__PURE__ */ import_react3.default.createElement(
|
|
213
|
+
"table",
|
|
214
|
+
{
|
|
215
|
+
align: "center",
|
|
216
|
+
width: "100%",
|
|
217
|
+
style: {
|
|
218
|
+
margin: "0 auto",
|
|
219
|
+
maxWidth: "600px",
|
|
220
|
+
backgroundColor: (_d = props.canvasColor) != null ? _d : "#FFFFFF",
|
|
221
|
+
borderRadius: (_e = props.borderRadius) != null ? _e : void 0,
|
|
222
|
+
border: getBorder(props)
|
|
223
|
+
},
|
|
224
|
+
role: "presentation",
|
|
225
|
+
cellSpacing: "0",
|
|
226
|
+
cellPadding: "0",
|
|
227
|
+
border: 0
|
|
228
|
+
},
|
|
229
|
+
/* @__PURE__ */ import_react3.default.createElement("tbody", null, /* @__PURE__ */ import_react3.default.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ import_react3.default.createElement("td", null, childrenIds.map((childId) => /* @__PURE__ */ import_react3.default.createElement(ReaderBlock, { key: childId, id: childId })))))
|
|
230
|
+
)
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// src/Reader/core.tsx
|
|
235
|
+
var ReaderContext = (0, import_react4.createContext)({});
|
|
236
|
+
function useReaderDocument() {
|
|
237
|
+
return (0, import_react4.useContext)(ReaderContext);
|
|
238
|
+
}
|
|
239
|
+
var READER_DICTIONARY = (0, import_document_core.buildBlockConfigurationDictionary)({
|
|
240
|
+
ColumnsContainer: {
|
|
241
|
+
schema: ColumnsContainerPropsSchema_default,
|
|
242
|
+
Component: ColumnsContainerReader
|
|
243
|
+
},
|
|
244
|
+
Container: {
|
|
245
|
+
schema: ContainerPropsSchema,
|
|
246
|
+
Component: ContainerReader
|
|
247
|
+
},
|
|
248
|
+
EmailLayout: {
|
|
249
|
+
schema: EmailLayoutPropsSchema,
|
|
250
|
+
Component: EmailLayoutReader
|
|
251
|
+
},
|
|
252
|
+
//
|
|
253
|
+
Avatar: {
|
|
254
|
+
schema: import_block_avatar.AvatarPropsSchema,
|
|
255
|
+
Component: import_block_avatar.Avatar
|
|
256
|
+
},
|
|
257
|
+
Button: {
|
|
258
|
+
schema: import_block_button.ButtonPropsSchema,
|
|
259
|
+
Component: import_block_button.Button
|
|
260
|
+
},
|
|
261
|
+
Divider: {
|
|
262
|
+
schema: import_block_divider.DividerPropsSchema,
|
|
263
|
+
Component: import_block_divider.Divider
|
|
264
|
+
},
|
|
265
|
+
Heading: {
|
|
266
|
+
schema: import_block_heading.HeadingPropsSchema,
|
|
267
|
+
Component: import_block_heading.Heading
|
|
268
|
+
},
|
|
269
|
+
Html: {
|
|
270
|
+
schema: import_block_html.HtmlPropsSchema,
|
|
271
|
+
Component: import_block_html.Html
|
|
272
|
+
},
|
|
273
|
+
Image: {
|
|
274
|
+
schema: import_block_image.ImagePropsSchema,
|
|
275
|
+
Component: import_block_image.Image
|
|
276
|
+
},
|
|
277
|
+
Spacer: {
|
|
278
|
+
schema: import_block_spacer.SpacerPropsSchema,
|
|
279
|
+
Component: import_block_spacer.Spacer
|
|
280
|
+
},
|
|
281
|
+
Text: {
|
|
282
|
+
schema: import_block_text.TextPropsSchema,
|
|
283
|
+
Component: import_block_text.Text
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
var ReaderBlockSchema = (0, import_document_core.buildBlockConfigurationSchema)(READER_DICTIONARY);
|
|
287
|
+
var ReaderDocumentSchema = import_zod4.z.record(import_zod4.z.string(), ReaderBlockSchema);
|
|
288
|
+
var BaseReaderBlock = (0, import_document_core.buildBlockComponent)(READER_DICTIONARY);
|
|
289
|
+
function ReaderBlock({ id }) {
|
|
290
|
+
const document = useReaderDocument();
|
|
291
|
+
return /* @__PURE__ */ import_react4.default.createElement(BaseReaderBlock, __spreadValues({}, document[id]));
|
|
292
|
+
}
|
|
293
|
+
function Reader({ document, rootBlockId }) {
|
|
294
|
+
return /* @__PURE__ */ import_react4.default.createElement(ReaderContext.Provider, { value: document }, /* @__PURE__ */ import_react4.default.createElement(ReaderBlock, { id: rootBlockId }));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// src/renderers/renderToStaticMarkup.tsx
|
|
298
|
+
function renderToStaticMarkup(document, { rootBlockId }) {
|
|
299
|
+
return "<!DOCTYPE html>" + (0, import_server.renderToStaticMarkup)(
|
|
300
|
+
/* @__PURE__ */ import_react5.default.createElement("html", null, /* @__PURE__ */ import_react5.default.createElement("body", null, /* @__PURE__ */ import_react5.default.createElement(Reader, { document, rootBlockId })))
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
304
|
+
0 && (module.exports = {
|
|
305
|
+
Reader,
|
|
306
|
+
ReaderBlock,
|
|
307
|
+
ReaderBlockSchema,
|
|
308
|
+
ReaderDocumentSchema,
|
|
309
|
+
renderToStaticMarkup
|
|
310
|
+
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,276 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
// src/renderers/renderToStaticMarkup.tsx
|
|
34
|
+
import React5 from "react";
|
|
35
|
+
import { renderToStaticMarkup as baseRenderToStaticMarkup } from "react-dom/server";
|
|
36
|
+
|
|
37
|
+
// src/Reader/core.tsx
|
|
38
|
+
import React4, { createContext, useContext } from "react";
|
|
39
|
+
import { z as z4 } from "zod";
|
|
40
|
+
import { Avatar, AvatarPropsSchema } from "@usewaypoint/block-avatar";
|
|
41
|
+
import { Button, ButtonPropsSchema } from "@usewaypoint/block-button";
|
|
42
|
+
import { Divider, DividerPropsSchema } from "@usewaypoint/block-divider";
|
|
43
|
+
import { Heading, HeadingPropsSchema } from "@usewaypoint/block-heading";
|
|
44
|
+
import { Html, HtmlPropsSchema } from "@usewaypoint/block-html";
|
|
45
|
+
import { Image, ImagePropsSchema } from "@usewaypoint/block-image";
|
|
46
|
+
import { Spacer, SpacerPropsSchema } from "@usewaypoint/block-spacer";
|
|
47
|
+
import { Text, TextPropsSchema } from "@usewaypoint/block-text";
|
|
48
|
+
import {
|
|
49
|
+
buildBlockComponent,
|
|
50
|
+
buildBlockConfigurationDictionary,
|
|
51
|
+
buildBlockConfigurationSchema
|
|
52
|
+
} from "@usewaypoint/document-core";
|
|
53
|
+
|
|
54
|
+
// src/blocks/ColumnsContainer/ColumnsContainerPropsSchema.ts
|
|
55
|
+
import { z } from "zod";
|
|
56
|
+
import { ColumnsContainerPropsSchema as BaseColumnsContainerPropsSchema } from "@usewaypoint/block-columns-container";
|
|
57
|
+
var BasePropsShape = BaseColumnsContainerPropsSchema.shape.props.unwrap().unwrap().shape;
|
|
58
|
+
var ColumnsContainerPropsSchema = z.object({
|
|
59
|
+
style: BaseColumnsContainerPropsSchema.shape.style,
|
|
60
|
+
props: z.object(__spreadProps(__spreadValues({}, BasePropsShape), {
|
|
61
|
+
columns: z.tuple([
|
|
62
|
+
z.object({ childrenIds: z.array(z.string()) }),
|
|
63
|
+
z.object({ childrenIds: z.array(z.string()) }),
|
|
64
|
+
z.object({ childrenIds: z.array(z.string()) })
|
|
65
|
+
])
|
|
66
|
+
})).optional().nullable()
|
|
67
|
+
});
|
|
68
|
+
var ColumnsContainerPropsSchema_default = ColumnsContainerPropsSchema;
|
|
69
|
+
|
|
70
|
+
// src/blocks/ColumnsContainer/ColumnsContainerReader.tsx
|
|
71
|
+
import React from "react";
|
|
72
|
+
import { ColumnsContainer as BaseColumnsContainer } from "@usewaypoint/block-columns-container";
|
|
73
|
+
function ColumnsContainerReader({ style, props }) {
|
|
74
|
+
const _a = props != null ? props : {}, { columns } = _a, restProps = __objRest(_a, ["columns"]);
|
|
75
|
+
let cols = void 0;
|
|
76
|
+
if (columns) {
|
|
77
|
+
cols = columns.map((col) => col.childrenIds.map((childId) => /* @__PURE__ */ React.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
78
|
+
}
|
|
79
|
+
return /* @__PURE__ */ React.createElement(BaseColumnsContainer, { props: restProps, columns: cols, style });
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/blocks/Container/ContainerPropsSchema.tsx
|
|
83
|
+
import { z as z2 } from "zod";
|
|
84
|
+
import { ContainerPropsSchema as BaseContainerPropsSchema } from "@rudyzeinoun/block-container";
|
|
85
|
+
var ContainerPropsSchema = z2.object({
|
|
86
|
+
style: BaseContainerPropsSchema.shape.style,
|
|
87
|
+
className: z2.string().optional().nullable(),
|
|
88
|
+
loopStart: z2.number().optional().nullable(),
|
|
89
|
+
loopEnd: z2.number().optional().nullable(),
|
|
90
|
+
props: z2.object({
|
|
91
|
+
childrenIds: z2.array(z2.string()).optional().nullable()
|
|
92
|
+
}).optional().nullable()
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// src/blocks/Container/ContainerReader.tsx
|
|
96
|
+
import React2 from "react";
|
|
97
|
+
import { Container as BaseContainer } from "@rudyzeinoun/block-container";
|
|
98
|
+
function ContainerReader({ style, props, className, loopStart, loopEnd }) {
|
|
99
|
+
var _a;
|
|
100
|
+
const childrenIds = (_a = props == null ? void 0 : props.childrenIds) != null ? _a : [];
|
|
101
|
+
return /* @__PURE__ */ React2.createElement(BaseContainer, { className, "data-loop-start": loopStart, "data-loop-end": loopEnd, style }, childrenIds.map((childId) => /* @__PURE__ */ React2.createElement(ReaderBlock, { key: childId, id: childId })));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// src/blocks/EmailLayout/EmailLayoutPropsSchema.tsx
|
|
105
|
+
import { z as z3 } from "zod";
|
|
106
|
+
var COLOR_SCHEMA = z3.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional();
|
|
107
|
+
var FONT_FAMILY_SCHEMA = z3.enum([
|
|
108
|
+
"MODERN_SANS",
|
|
109
|
+
"BOOK_SANS",
|
|
110
|
+
"ORGANIC_SANS",
|
|
111
|
+
"GEOMETRIC_SANS",
|
|
112
|
+
"HEAVY_SANS",
|
|
113
|
+
"ROUNDED_SANS",
|
|
114
|
+
"MODERN_SERIF",
|
|
115
|
+
"BOOK_SERIF",
|
|
116
|
+
"MONOSPACE"
|
|
117
|
+
]).nullable().optional();
|
|
118
|
+
var EmailLayoutPropsSchema = z3.object({
|
|
119
|
+
backdropColor: COLOR_SCHEMA,
|
|
120
|
+
borderColor: COLOR_SCHEMA,
|
|
121
|
+
borderRadius: z3.number().optional().nullable(),
|
|
122
|
+
canvasColor: COLOR_SCHEMA,
|
|
123
|
+
textColor: COLOR_SCHEMA,
|
|
124
|
+
fontFamily: FONT_FAMILY_SCHEMA,
|
|
125
|
+
childrenIds: z3.array(z3.string()).optional().nullable()
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// src/blocks/EmailLayout/EmailLayoutReader.tsx
|
|
129
|
+
import React3 from "react";
|
|
130
|
+
function getFontFamily(fontFamily) {
|
|
131
|
+
const f = fontFamily != null ? fontFamily : "MODERN_SANS";
|
|
132
|
+
switch (f) {
|
|
133
|
+
case "MODERN_SANS":
|
|
134
|
+
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
|
|
135
|
+
case "BOOK_SANS":
|
|
136
|
+
return 'Optima, Candara, "Noto Sans", source-sans-pro, sans-serif';
|
|
137
|
+
case "ORGANIC_SANS":
|
|
138
|
+
return 'Seravek, "Gill Sans Nova", Ubuntu, Calibri, "DejaVu Sans", source-sans-pro, sans-serif';
|
|
139
|
+
case "GEOMETRIC_SANS":
|
|
140
|
+
return 'Avenir, "Avenir Next LT Pro", Montserrat, Corbel, "URW Gothic", source-sans-pro, sans-serif';
|
|
141
|
+
case "HEAVY_SANS":
|
|
142
|
+
return 'Bahnschrift, "DIN Alternate", "Franklin Gothic Medium", "Nimbus Sans Narrow", sans-serif-condensed, sans-serif';
|
|
143
|
+
case "ROUNDED_SANS":
|
|
144
|
+
return 'ui-rounded, "Hiragino Maru Gothic ProN", Quicksand, Comfortaa, Manjari, "Arial Rounded MT Bold", Calibri, source-sans-pro, sans-serif';
|
|
145
|
+
case "MODERN_SERIF":
|
|
146
|
+
return 'Charter, "Bitstream Charter", "Sitka Text", Cambria, serif';
|
|
147
|
+
case "BOOK_SERIF":
|
|
148
|
+
return '"Iowan Old Style", "Palatino Linotype", "URW Palladio L", P052, serif';
|
|
149
|
+
case "MONOSPACE":
|
|
150
|
+
return '"Nimbus Mono PS", "Courier New", "Cutive Mono", monospace';
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function getBorder({ borderColor }) {
|
|
154
|
+
if (!borderColor) {
|
|
155
|
+
return void 0;
|
|
156
|
+
}
|
|
157
|
+
return `1px solid ${borderColor}`;
|
|
158
|
+
}
|
|
159
|
+
function EmailLayoutReader(props) {
|
|
160
|
+
var _a, _b, _c, _d, _e;
|
|
161
|
+
const childrenIds = (_a = props.childrenIds) != null ? _a : [];
|
|
162
|
+
return /* @__PURE__ */ React3.createElement(
|
|
163
|
+
"div",
|
|
164
|
+
{
|
|
165
|
+
style: {
|
|
166
|
+
backgroundColor: (_b = props.backdropColor) != null ? _b : "#F5F5F5",
|
|
167
|
+
color: (_c = props.textColor) != null ? _c : "#262626",
|
|
168
|
+
fontFamily: getFontFamily(props.fontFamily),
|
|
169
|
+
fontSize: "16px",
|
|
170
|
+
fontWeight: "400",
|
|
171
|
+
letterSpacing: "0.15008px",
|
|
172
|
+
lineHeight: "1.5",
|
|
173
|
+
margin: "0",
|
|
174
|
+
padding: "32px 0",
|
|
175
|
+
minHeight: "100%",
|
|
176
|
+
width: "100%"
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
/* @__PURE__ */ React3.createElement(
|
|
180
|
+
"table",
|
|
181
|
+
{
|
|
182
|
+
align: "center",
|
|
183
|
+
width: "100%",
|
|
184
|
+
style: {
|
|
185
|
+
margin: "0 auto",
|
|
186
|
+
maxWidth: "600px",
|
|
187
|
+
backgroundColor: (_d = props.canvasColor) != null ? _d : "#FFFFFF",
|
|
188
|
+
borderRadius: (_e = props.borderRadius) != null ? _e : void 0,
|
|
189
|
+
border: getBorder(props)
|
|
190
|
+
},
|
|
191
|
+
role: "presentation",
|
|
192
|
+
cellSpacing: "0",
|
|
193
|
+
cellPadding: "0",
|
|
194
|
+
border: 0
|
|
195
|
+
},
|
|
196
|
+
/* @__PURE__ */ React3.createElement("tbody", null, /* @__PURE__ */ React3.createElement("tr", { style: { width: "100%" } }, /* @__PURE__ */ React3.createElement("td", null, childrenIds.map((childId) => /* @__PURE__ */ React3.createElement(ReaderBlock, { key: childId, id: childId })))))
|
|
197
|
+
)
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// src/Reader/core.tsx
|
|
202
|
+
var ReaderContext = createContext({});
|
|
203
|
+
function useReaderDocument() {
|
|
204
|
+
return useContext(ReaderContext);
|
|
205
|
+
}
|
|
206
|
+
var READER_DICTIONARY = buildBlockConfigurationDictionary({
|
|
207
|
+
ColumnsContainer: {
|
|
208
|
+
schema: ColumnsContainerPropsSchema_default,
|
|
209
|
+
Component: ColumnsContainerReader
|
|
210
|
+
},
|
|
211
|
+
Container: {
|
|
212
|
+
schema: ContainerPropsSchema,
|
|
213
|
+
Component: ContainerReader
|
|
214
|
+
},
|
|
215
|
+
EmailLayout: {
|
|
216
|
+
schema: EmailLayoutPropsSchema,
|
|
217
|
+
Component: EmailLayoutReader
|
|
218
|
+
},
|
|
219
|
+
//
|
|
220
|
+
Avatar: {
|
|
221
|
+
schema: AvatarPropsSchema,
|
|
222
|
+
Component: Avatar
|
|
223
|
+
},
|
|
224
|
+
Button: {
|
|
225
|
+
schema: ButtonPropsSchema,
|
|
226
|
+
Component: Button
|
|
227
|
+
},
|
|
228
|
+
Divider: {
|
|
229
|
+
schema: DividerPropsSchema,
|
|
230
|
+
Component: Divider
|
|
231
|
+
},
|
|
232
|
+
Heading: {
|
|
233
|
+
schema: HeadingPropsSchema,
|
|
234
|
+
Component: Heading
|
|
235
|
+
},
|
|
236
|
+
Html: {
|
|
237
|
+
schema: HtmlPropsSchema,
|
|
238
|
+
Component: Html
|
|
239
|
+
},
|
|
240
|
+
Image: {
|
|
241
|
+
schema: ImagePropsSchema,
|
|
242
|
+
Component: Image
|
|
243
|
+
},
|
|
244
|
+
Spacer: {
|
|
245
|
+
schema: SpacerPropsSchema,
|
|
246
|
+
Component: Spacer
|
|
247
|
+
},
|
|
248
|
+
Text: {
|
|
249
|
+
schema: TextPropsSchema,
|
|
250
|
+
Component: Text
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
var ReaderBlockSchema = buildBlockConfigurationSchema(READER_DICTIONARY);
|
|
254
|
+
var ReaderDocumentSchema = z4.record(z4.string(), ReaderBlockSchema);
|
|
255
|
+
var BaseReaderBlock = buildBlockComponent(READER_DICTIONARY);
|
|
256
|
+
function ReaderBlock({ id }) {
|
|
257
|
+
const document = useReaderDocument();
|
|
258
|
+
return /* @__PURE__ */ React4.createElement(BaseReaderBlock, __spreadValues({}, document[id]));
|
|
259
|
+
}
|
|
260
|
+
function Reader({ document, rootBlockId }) {
|
|
261
|
+
return /* @__PURE__ */ React4.createElement(ReaderContext.Provider, { value: document }, /* @__PURE__ */ React4.createElement(ReaderBlock, { id: rootBlockId }));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// src/renderers/renderToStaticMarkup.tsx
|
|
265
|
+
function renderToStaticMarkup(document, { rootBlockId }) {
|
|
266
|
+
return "<!DOCTYPE html>" + baseRenderToStaticMarkup(
|
|
267
|
+
/* @__PURE__ */ React5.createElement("html", null, /* @__PURE__ */ React5.createElement("body", null, /* @__PURE__ */ React5.createElement(Reader, { document, rootBlockId })))
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
export {
|
|
271
|
+
Reader,
|
|
272
|
+
ReaderBlock,
|
|
273
|
+
ReaderBlockSchema,
|
|
274
|
+
ReaderDocumentSchema,
|
|
275
|
+
renderToStaticMarkup
|
|
276
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rudyzeinoun/email-builder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"description": "React component to render email messages",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
|
-
"build": "npx tsc"
|
|
19
|
+
"build": "npx tsc -p tsconfig.build.json"
|
|
20
20
|
},
|
|
21
21
|
"author": "carlos@usewaypoint.com",
|
|
22
22
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"zod": "^1 || ^2 || ^3"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@rudyzeinoun/block-container": "^0.0.
|
|
29
|
+
"@rudyzeinoun/block-container": "^0.0.8",
|
|
30
30
|
"@usewaypoint/block-avatar": "^0.0.3",
|
|
31
31
|
"@usewaypoint/block-button": "^0.0.3",
|
|
32
32
|
"@usewaypoint/block-columns-container": "^0.0.3",
|
|
@@ -37,5 +37,8 @@
|
|
|
37
37
|
"@usewaypoint/block-spacer": "^0.0.3",
|
|
38
38
|
"@usewaypoint/block-text": "^0.0.6",
|
|
39
39
|
"@usewaypoint/document-core": "^0.0.6"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"tsup": "^8.4.0"
|
|
40
43
|
}
|
|
41
44
|
}
|