@templatical/ai-kit 0.0.0-stage → 0.50.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/LICENSE +21 -0
- package/README.md +61 -2
- package/dist/checks-Blbakkgc.js +649 -0
- package/dist/checks-Blbakkgc.js.map +1 -0
- package/dist/client/index.d.ts +24 -0
- package/dist/client/index.js +1 -0
- package/dist/http-provider-BoRkCd7H.js +327 -0
- package/dist/http-provider-BoRkCd7H.js.map +1 -0
- package/dist/http-provider-Cb41NXd5.d.ts +22 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/model-BuHDCTlM.d.ts +74 -0
- package/dist/server/index.d.ts +313 -0
- package/dist/server/index.js +355 -0
- package/dist/server/index.js.map +1 -0
- package/dist/testing/index.d.ts +277 -0
- package/dist/testing/index.js +2444 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/wire-B6AF_UGT.js +132 -0
- package/dist/wire-B6AF_UGT.js.map +1 -0
- package/dist/wire-Cv7Fk-7n.d.ts +136 -0
- package/eval/MANIFEST.sha256 +23 -0
- package/eval/cases.json +287 -0
- package/eval/designs/newsletter.png +0 -0
- package/eval/designs/one-page.pdf +0 -0
- package/eval/designs/promo.png +0 -0
- package/eval/domain-mismatch.json +25 -0
- package/eval/empty.json +11 -0
- package/eval/images/banner.png +0 -0
- package/eval/images/chart.png +0 -0
- package/eval/images/divider.png +0 -0
- package/eval/images/probe.png +0 -0
- package/eval/images/product.png +0 -0
- package/eval/injection.json +13 -0
- package/eval/low-text.json +41 -0
- package/eval/promo.json +12 -0
- package/eval/sources/banner.html +16 -0
- package/eval/sources/chart.html +16 -0
- package/eval/sources/divider.html +16 -0
- package/eval/sources/newsletter.html +16 -0
- package/eval/sources/one-page.html +16 -0
- package/eval/sources/probe.html +16 -0
- package/eval/sources/product.html +16 -0
- package/eval/sources/promo.html +16 -0
- package/eval/welcome.json +12 -0
- package/package.json +68 -3
- package/prompts/alt-text.md +7 -0
- package/prompts/chat-attachments.md +1 -0
- package/prompts/chat.md +2 -0
- package/prompts/editing.md +10 -0
- package/prompts/fix-rules.json +9 -0
- package/prompts/fix.md +8 -0
- package/prompts/operations.md +127 -0
- package/prompts/rewrite-presets.json +8 -0
- package/prompts/rewrite.md +4 -0
- package/schema/template-content.schema.json +1884 -0
|
@@ -0,0 +1,1884 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "https://templatical.com/schema/template-content.json",
|
|
3
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
+
"$ref": "#/definitions/TemplateContent",
|
|
5
|
+
"definitions": {
|
|
6
|
+
"TemplateContent": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"properties": {
|
|
9
|
+
"blocks": {
|
|
10
|
+
"type": "array",
|
|
11
|
+
"items": {
|
|
12
|
+
"$ref": "#/definitions/Block"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"settings": {
|
|
16
|
+
"$ref": "#/definitions/TemplateSettings"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"required": [
|
|
20
|
+
"blocks",
|
|
21
|
+
"settings"
|
|
22
|
+
],
|
|
23
|
+
"additionalProperties": false
|
|
24
|
+
},
|
|
25
|
+
"Block": {
|
|
26
|
+
"anyOf": [
|
|
27
|
+
{
|
|
28
|
+
"$ref": "#/definitions/SectionBlock"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"$ref": "#/definitions/TitleBlock"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"$ref": "#/definitions/ParagraphBlock"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"$ref": "#/definitions/ImageBlock"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"$ref": "#/definitions/ButtonBlock"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"$ref": "#/definitions/DividerBlock"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"$ref": "#/definitions/VideoBlock"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"$ref": "#/definitions/SocialIconsBlock"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"$ref": "#/definitions/SpacerBlock"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"$ref": "#/definitions/HtmlBlock"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"$ref": "#/definitions/MenuBlock"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"$ref": "#/definitions/TableBlock"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"$ref": "#/definitions/CountdownBlock"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"$ref": "#/definitions/CustomBlock"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"$ref": "#/definitions/SlotBlock"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"$ref": "#/definitions/WrapperBlock"
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"SectionBlock": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"properties": {
|
|
80
|
+
"id": {
|
|
81
|
+
"type": "string"
|
|
82
|
+
},
|
|
83
|
+
"type": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"const": "section"
|
|
86
|
+
},
|
|
87
|
+
"styles": {
|
|
88
|
+
"$ref": "#/definitions/BlockStyles"
|
|
89
|
+
},
|
|
90
|
+
"visibility": {
|
|
91
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
92
|
+
},
|
|
93
|
+
"displayCondition": {
|
|
94
|
+
"type": "object",
|
|
95
|
+
"properties": {
|
|
96
|
+
"label": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
},
|
|
99
|
+
"before": {
|
|
100
|
+
"type": "string"
|
|
101
|
+
},
|
|
102
|
+
"after": {
|
|
103
|
+
"type": "string"
|
|
104
|
+
},
|
|
105
|
+
"group": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"description": {
|
|
109
|
+
"type": "string"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"required": [
|
|
113
|
+
"label",
|
|
114
|
+
"before",
|
|
115
|
+
"after"
|
|
116
|
+
],
|
|
117
|
+
"additionalProperties": false
|
|
118
|
+
},
|
|
119
|
+
"columns": {
|
|
120
|
+
"$ref": "#/definitions/ColumnLayout"
|
|
121
|
+
},
|
|
122
|
+
"children": {
|
|
123
|
+
"type": "array",
|
|
124
|
+
"items": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"items": {
|
|
127
|
+
"$ref": "#/definitions/Block"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"stackOnMobile": {
|
|
132
|
+
"type": "boolean",
|
|
133
|
+
"description": "Whether columns stack vertically on mobile. Absent or `true` keeps MJML's default responsive behavior (columns stack below 480px). `false` renders the columns inside an `<mj-group>` so they stay side-by-side on mobile, proportionally shrunk to fit."
|
|
134
|
+
},
|
|
135
|
+
"borderRadius": {
|
|
136
|
+
"$ref": "#/definitions/BorderRadiusValue",
|
|
137
|
+
"description": "Corner radius in px — one number, or a radius per corner. Omitted/0 = square corners."
|
|
138
|
+
},
|
|
139
|
+
"border": {
|
|
140
|
+
"$ref": "#/definitions/BorderValue",
|
|
141
|
+
"description": "Border around the section box, per side. Omitted = no border; a side with width 0 is not drawn."
|
|
142
|
+
},
|
|
143
|
+
"backgroundImage": {
|
|
144
|
+
"$ref": "#/definitions/BackgroundImage",
|
|
145
|
+
"description": "Image behind the section's columns, rendered as `background-url` (plus size, position and repeat) on the `mj-section`. `styles.backgroundColor` is its fallback."
|
|
146
|
+
},
|
|
147
|
+
"hero": {
|
|
148
|
+
"$ref": "#/definitions/SectionHero",
|
|
149
|
+
"description": "Draws a one-column section with a background image as an `mj-hero`: the image fills the box and the content sits on top. Ignored (the section renders as a regular one, and the `structure` linter says why) with more than one column, without an image, or with `height: \"image\"` and no image size."
|
|
150
|
+
},
|
|
151
|
+
"wrapper": {
|
|
152
|
+
"$ref": "#/definitions/SectionWrapper",
|
|
153
|
+
"description": "Optional outer frame (rendered as an `mj-wrapper` around the section)."
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"required": [
|
|
157
|
+
"children",
|
|
158
|
+
"columns",
|
|
159
|
+
"id",
|
|
160
|
+
"styles",
|
|
161
|
+
"type"
|
|
162
|
+
],
|
|
163
|
+
"additionalProperties": false
|
|
164
|
+
},
|
|
165
|
+
"BlockStyles": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"properties": {
|
|
168
|
+
"padding": {
|
|
169
|
+
"$ref": "#/definitions/SpacingValue"
|
|
170
|
+
},
|
|
171
|
+
"backgroundColor": {
|
|
172
|
+
"type": "string"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"required": [
|
|
176
|
+
"padding"
|
|
177
|
+
],
|
|
178
|
+
"additionalProperties": false
|
|
179
|
+
},
|
|
180
|
+
"SpacingValue": {
|
|
181
|
+
"type": "object",
|
|
182
|
+
"properties": {
|
|
183
|
+
"top": {
|
|
184
|
+
"type": "number"
|
|
185
|
+
},
|
|
186
|
+
"right": {
|
|
187
|
+
"type": "number"
|
|
188
|
+
},
|
|
189
|
+
"bottom": {
|
|
190
|
+
"type": "number"
|
|
191
|
+
},
|
|
192
|
+
"left": {
|
|
193
|
+
"type": "number"
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
"required": [
|
|
197
|
+
"top",
|
|
198
|
+
"right",
|
|
199
|
+
"bottom",
|
|
200
|
+
"left"
|
|
201
|
+
],
|
|
202
|
+
"additionalProperties": false
|
|
203
|
+
},
|
|
204
|
+
"BlockVisibility": {
|
|
205
|
+
"type": "object",
|
|
206
|
+
"properties": {
|
|
207
|
+
"desktop": {
|
|
208
|
+
"type": "boolean"
|
|
209
|
+
},
|
|
210
|
+
"mobile": {
|
|
211
|
+
"type": "boolean"
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
"required": [
|
|
215
|
+
"desktop",
|
|
216
|
+
"mobile"
|
|
217
|
+
],
|
|
218
|
+
"additionalProperties": false
|
|
219
|
+
},
|
|
220
|
+
"ColumnLayout": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"enum": [
|
|
223
|
+
"1",
|
|
224
|
+
"2",
|
|
225
|
+
"3",
|
|
226
|
+
"2-1",
|
|
227
|
+
"1-2"
|
|
228
|
+
]
|
|
229
|
+
},
|
|
230
|
+
"BorderRadiusValue": {
|
|
231
|
+
"anyOf": [
|
|
232
|
+
{
|
|
233
|
+
"type": "number"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"$ref": "#/definitions/CornerRadius"
|
|
237
|
+
}
|
|
238
|
+
],
|
|
239
|
+
"description": "A corner radius in px: one number for all four corners, or a radius per corner."
|
|
240
|
+
},
|
|
241
|
+
"CornerRadius": {
|
|
242
|
+
"type": "object",
|
|
243
|
+
"properties": {
|
|
244
|
+
"topLeft": {
|
|
245
|
+
"type": "number"
|
|
246
|
+
},
|
|
247
|
+
"topRight": {
|
|
248
|
+
"type": "number"
|
|
249
|
+
},
|
|
250
|
+
"bottomRight": {
|
|
251
|
+
"type": "number"
|
|
252
|
+
},
|
|
253
|
+
"bottomLeft": {
|
|
254
|
+
"type": "number"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"required": [
|
|
258
|
+
"topLeft",
|
|
259
|
+
"topRight",
|
|
260
|
+
"bottomRight",
|
|
261
|
+
"bottomLeft"
|
|
262
|
+
],
|
|
263
|
+
"additionalProperties": false,
|
|
264
|
+
"description": "A radius per corner, in px."
|
|
265
|
+
},
|
|
266
|
+
"BorderValue": {
|
|
267
|
+
"type": "object",
|
|
268
|
+
"properties": {
|
|
269
|
+
"top": {
|
|
270
|
+
"$ref": "#/definitions/BorderSideValue"
|
|
271
|
+
},
|
|
272
|
+
"right": {
|
|
273
|
+
"$ref": "#/definitions/BorderSideValue"
|
|
274
|
+
},
|
|
275
|
+
"bottom": {
|
|
276
|
+
"$ref": "#/definitions/BorderSideValue"
|
|
277
|
+
},
|
|
278
|
+
"left": {
|
|
279
|
+
"$ref": "#/definitions/BorderSideValue"
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"required": [
|
|
283
|
+
"top",
|
|
284
|
+
"right",
|
|
285
|
+
"bottom",
|
|
286
|
+
"left"
|
|
287
|
+
],
|
|
288
|
+
"additionalProperties": false,
|
|
289
|
+
"description": "A border described per side, like `SpacingValue`. Only elements MJML can border natively carry one: sections, images and buttons."
|
|
290
|
+
},
|
|
291
|
+
"BorderSideValue": {
|
|
292
|
+
"type": "object",
|
|
293
|
+
"properties": {
|
|
294
|
+
"width": {
|
|
295
|
+
"type": "number",
|
|
296
|
+
"description": "Width in px. `0` means no border on this side."
|
|
297
|
+
},
|
|
298
|
+
"style": {
|
|
299
|
+
"$ref": "#/definitions/BorderStyle"
|
|
300
|
+
},
|
|
301
|
+
"color": {
|
|
302
|
+
"type": "string"
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"required": [
|
|
306
|
+
"width",
|
|
307
|
+
"style",
|
|
308
|
+
"color"
|
|
309
|
+
],
|
|
310
|
+
"additionalProperties": false,
|
|
311
|
+
"description": "One side of a border. A width of `0` leaves that side undrawn."
|
|
312
|
+
},
|
|
313
|
+
"BorderStyle": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"enum": [
|
|
316
|
+
"solid",
|
|
317
|
+
"dashed",
|
|
318
|
+
"dotted"
|
|
319
|
+
]
|
|
320
|
+
},
|
|
321
|
+
"BackgroundImage": {
|
|
322
|
+
"type": "object",
|
|
323
|
+
"properties": {
|
|
324
|
+
"url": {
|
|
325
|
+
"type": "string"
|
|
326
|
+
},
|
|
327
|
+
"size": {
|
|
328
|
+
"$ref": "#/definitions/BackgroundSize"
|
|
329
|
+
},
|
|
330
|
+
"position": {
|
|
331
|
+
"type": "object",
|
|
332
|
+
"properties": {
|
|
333
|
+
"x": {
|
|
334
|
+
"$ref": "#/definitions/BackgroundPositionX"
|
|
335
|
+
},
|
|
336
|
+
"y": {
|
|
337
|
+
"$ref": "#/definitions/BackgroundPositionY"
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
"required": [
|
|
341
|
+
"x",
|
|
342
|
+
"y"
|
|
343
|
+
],
|
|
344
|
+
"additionalProperties": false
|
|
345
|
+
},
|
|
346
|
+
"repeat": {
|
|
347
|
+
"type": "boolean",
|
|
348
|
+
"description": "`false` paints the image once; `true` tiles it."
|
|
349
|
+
},
|
|
350
|
+
"naturalWidth": {
|
|
351
|
+
"type": "number",
|
|
352
|
+
"description": "The image file's own width in px, when known: given by the media library, measured by the editor when the author sets the URL, or read by an importer (from MJML, the hero's `background-width`, which may be the box's size rather than the file's). Only the ratio with `naturalHeight` is used: a section hero with `height: \"image\"` keeps its box at that shape. Both or neither; one without the other reads as unknown."
|
|
353
|
+
},
|
|
354
|
+
"naturalHeight": {
|
|
355
|
+
"type": "number",
|
|
356
|
+
"description": "The image file's own height in px, when known; it pairs with `naturalWidth`, and only their ratio is used. Both or neither."
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"required": [
|
|
360
|
+
"url",
|
|
361
|
+
"size",
|
|
362
|
+
"position",
|
|
363
|
+
"repeat"
|
|
364
|
+
],
|
|
365
|
+
"additionalProperties": false,
|
|
366
|
+
"description": "An image painted behind a section or a wrapper band. The element's own `backgroundColor` is its fallback: it shows while the image loads, with images off, and in clients without background-image support."
|
|
367
|
+
},
|
|
368
|
+
"BackgroundSize": {
|
|
369
|
+
"type": "string",
|
|
370
|
+
"enum": [
|
|
371
|
+
"cover",
|
|
372
|
+
"contain",
|
|
373
|
+
"auto"
|
|
374
|
+
],
|
|
375
|
+
"description": "`background-size` keywords. In Outlook on Windows (VML), `cover` and `contain` draw a single frame when `repeat` is off and tile when it is on; `auto` always tiles from the top center, whatever `position` and `repeat` say."
|
|
376
|
+
},
|
|
377
|
+
"BackgroundPositionX": {
|
|
378
|
+
"type": "string",
|
|
379
|
+
"enum": [
|
|
380
|
+
"left",
|
|
381
|
+
"center",
|
|
382
|
+
"right"
|
|
383
|
+
]
|
|
384
|
+
},
|
|
385
|
+
"BackgroundPositionY": {
|
|
386
|
+
"type": "string",
|
|
387
|
+
"enum": [
|
|
388
|
+
"top",
|
|
389
|
+
"center",
|
|
390
|
+
"bottom"
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
"SectionHero": {
|
|
394
|
+
"type": "object",
|
|
395
|
+
"properties": {
|
|
396
|
+
"height": {
|
|
397
|
+
"anyOf": [
|
|
398
|
+
{
|
|
399
|
+
"type": "string",
|
|
400
|
+
"const": "image"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"type": "number"
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
"description": "`\"image\"` makes the box as tall as the image drawn across its desktop width, and needs the image's size on `backgroundImage.naturalWidth` / `naturalHeight`; a phone keeps that height and crops the image's sides. A number is the box's fixed height in px, padding included."
|
|
407
|
+
},
|
|
408
|
+
"verticalAlign": {
|
|
409
|
+
"$ref": "#/definitions/HeroVerticalAlign"
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
"required": [
|
|
413
|
+
"height",
|
|
414
|
+
"verticalAlign"
|
|
415
|
+
],
|
|
416
|
+
"additionalProperties": false,
|
|
417
|
+
"description": "Draws a one-column section as an MJML `mj-hero`: its background image fills the box (always `cover`, never tiled) and the content sits on top of it. A hero applies only to a one-column section with a background image; otherwise the section renders as a regular one."
|
|
418
|
+
},
|
|
419
|
+
"HeroVerticalAlign": {
|
|
420
|
+
"type": "string",
|
|
421
|
+
"enum": [
|
|
422
|
+
"top",
|
|
423
|
+
"middle",
|
|
424
|
+
"bottom"
|
|
425
|
+
],
|
|
426
|
+
"description": "Where a hero's content sits in its box."
|
|
427
|
+
},
|
|
428
|
+
"SectionWrapper": {
|
|
429
|
+
"type": "object",
|
|
430
|
+
"properties": {
|
|
431
|
+
"backgroundColor": {
|
|
432
|
+
"type": "string"
|
|
433
|
+
},
|
|
434
|
+
"padding": {
|
|
435
|
+
"$ref": "#/definitions/SpacingValue"
|
|
436
|
+
},
|
|
437
|
+
"borderRadius": {
|
|
438
|
+
"$ref": "#/definitions/BorderRadiusValue",
|
|
439
|
+
"description": "Corner radius in px for the outer frame — one number, or a radius per corner. Omitted/0 = square corners."
|
|
440
|
+
},
|
|
441
|
+
"backgroundImage": {
|
|
442
|
+
"$ref": "#/definitions/BackgroundImage",
|
|
443
|
+
"description": "Image behind the band; `backgroundColor` is its fallback."
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
"additionalProperties": false,
|
|
447
|
+
"description": "Optional outer frame for a section. When present, the section is rendered inside an `mj-wrapper` — a band (its own background + padding) that frames the section, e.g. a white card sitting on a colored band. The band is as wide as the email body (`settings.width`), not the recipient's viewport."
|
|
448
|
+
},
|
|
449
|
+
"TitleBlock": {
|
|
450
|
+
"type": "object",
|
|
451
|
+
"properties": {
|
|
452
|
+
"id": {
|
|
453
|
+
"type": "string"
|
|
454
|
+
},
|
|
455
|
+
"type": {
|
|
456
|
+
"type": "string",
|
|
457
|
+
"const": "title"
|
|
458
|
+
},
|
|
459
|
+
"styles": {
|
|
460
|
+
"$ref": "#/definitions/BlockStyles"
|
|
461
|
+
},
|
|
462
|
+
"visibility": {
|
|
463
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
464
|
+
},
|
|
465
|
+
"displayCondition": {
|
|
466
|
+
"type": "object",
|
|
467
|
+
"properties": {
|
|
468
|
+
"label": {
|
|
469
|
+
"type": "string"
|
|
470
|
+
},
|
|
471
|
+
"before": {
|
|
472
|
+
"type": "string"
|
|
473
|
+
},
|
|
474
|
+
"after": {
|
|
475
|
+
"type": "string"
|
|
476
|
+
},
|
|
477
|
+
"group": {
|
|
478
|
+
"type": "string"
|
|
479
|
+
},
|
|
480
|
+
"description": {
|
|
481
|
+
"type": "string"
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
"required": [
|
|
485
|
+
"label",
|
|
486
|
+
"before",
|
|
487
|
+
"after"
|
|
488
|
+
],
|
|
489
|
+
"additionalProperties": false
|
|
490
|
+
},
|
|
491
|
+
"content": {
|
|
492
|
+
"type": "string"
|
|
493
|
+
},
|
|
494
|
+
"level": {
|
|
495
|
+
"$ref": "#/definitions/HeadingLevel"
|
|
496
|
+
},
|
|
497
|
+
"color": {
|
|
498
|
+
"type": "string",
|
|
499
|
+
"description": "Text color. Unset = inherit the document-level `textColor`."
|
|
500
|
+
},
|
|
501
|
+
"textAlign": {
|
|
502
|
+
"type": "string",
|
|
503
|
+
"enum": [
|
|
504
|
+
"left",
|
|
505
|
+
"center",
|
|
506
|
+
"right"
|
|
507
|
+
]
|
|
508
|
+
},
|
|
509
|
+
"fontFamily": {
|
|
510
|
+
"type": "string"
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
"required": [
|
|
514
|
+
"content",
|
|
515
|
+
"id",
|
|
516
|
+
"level",
|
|
517
|
+
"styles",
|
|
518
|
+
"textAlign",
|
|
519
|
+
"type"
|
|
520
|
+
],
|
|
521
|
+
"additionalProperties": false
|
|
522
|
+
},
|
|
523
|
+
"HeadingLevel": {
|
|
524
|
+
"type": "number",
|
|
525
|
+
"enum": [
|
|
526
|
+
1,
|
|
527
|
+
2,
|
|
528
|
+
3,
|
|
529
|
+
4
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
"ParagraphBlock": {
|
|
533
|
+
"type": "object",
|
|
534
|
+
"properties": {
|
|
535
|
+
"id": {
|
|
536
|
+
"type": "string"
|
|
537
|
+
},
|
|
538
|
+
"type": {
|
|
539
|
+
"type": "string",
|
|
540
|
+
"const": "paragraph"
|
|
541
|
+
},
|
|
542
|
+
"styles": {
|
|
543
|
+
"$ref": "#/definitions/BlockStyles"
|
|
544
|
+
},
|
|
545
|
+
"visibility": {
|
|
546
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
547
|
+
},
|
|
548
|
+
"displayCondition": {
|
|
549
|
+
"type": "object",
|
|
550
|
+
"properties": {
|
|
551
|
+
"label": {
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
"before": {
|
|
555
|
+
"type": "string"
|
|
556
|
+
},
|
|
557
|
+
"after": {
|
|
558
|
+
"type": "string"
|
|
559
|
+
},
|
|
560
|
+
"group": {
|
|
561
|
+
"type": "string"
|
|
562
|
+
},
|
|
563
|
+
"description": {
|
|
564
|
+
"type": "string"
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
"required": [
|
|
568
|
+
"label",
|
|
569
|
+
"before",
|
|
570
|
+
"after"
|
|
571
|
+
],
|
|
572
|
+
"additionalProperties": false
|
|
573
|
+
},
|
|
574
|
+
"content": {
|
|
575
|
+
"type": "string"
|
|
576
|
+
},
|
|
577
|
+
"paragraphSpacing": {
|
|
578
|
+
"type": "number",
|
|
579
|
+
"description": "Gap in px between this block's paragraphs — the space below every `<p>` except the last. Absent means `RICH_TEXT_SPACING.paragraphGap`.\n\nOnly affects a block holding more than one paragraph; a single `<p>` has no internal gap, and the space around the block is `styles.padding`.\n\n`0` is a valid choice (paragraphs butted together) and is distinct from the field being absent, so readers must test for `undefined` rather than falsiness."
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"required": [
|
|
583
|
+
"content",
|
|
584
|
+
"id",
|
|
585
|
+
"styles",
|
|
586
|
+
"type"
|
|
587
|
+
],
|
|
588
|
+
"additionalProperties": false
|
|
589
|
+
},
|
|
590
|
+
"ImageBlock": {
|
|
591
|
+
"type": "object",
|
|
592
|
+
"properties": {
|
|
593
|
+
"id": {
|
|
594
|
+
"type": "string"
|
|
595
|
+
},
|
|
596
|
+
"type": {
|
|
597
|
+
"type": "string",
|
|
598
|
+
"const": "image"
|
|
599
|
+
},
|
|
600
|
+
"styles": {
|
|
601
|
+
"$ref": "#/definitions/BlockStyles"
|
|
602
|
+
},
|
|
603
|
+
"visibility": {
|
|
604
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
605
|
+
},
|
|
606
|
+
"displayCondition": {
|
|
607
|
+
"type": "object",
|
|
608
|
+
"properties": {
|
|
609
|
+
"label": {
|
|
610
|
+
"type": "string"
|
|
611
|
+
},
|
|
612
|
+
"before": {
|
|
613
|
+
"type": "string"
|
|
614
|
+
},
|
|
615
|
+
"after": {
|
|
616
|
+
"type": "string"
|
|
617
|
+
},
|
|
618
|
+
"group": {
|
|
619
|
+
"type": "string"
|
|
620
|
+
},
|
|
621
|
+
"description": {
|
|
622
|
+
"type": "string"
|
|
623
|
+
}
|
|
624
|
+
},
|
|
625
|
+
"required": [
|
|
626
|
+
"label",
|
|
627
|
+
"before",
|
|
628
|
+
"after"
|
|
629
|
+
],
|
|
630
|
+
"additionalProperties": false
|
|
631
|
+
},
|
|
632
|
+
"src": {
|
|
633
|
+
"type": "string"
|
|
634
|
+
},
|
|
635
|
+
"alt": {
|
|
636
|
+
"type": "string"
|
|
637
|
+
},
|
|
638
|
+
"width": {
|
|
639
|
+
"anyOf": [
|
|
640
|
+
{
|
|
641
|
+
"type": "number"
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"type": "string",
|
|
645
|
+
"const": "full"
|
|
646
|
+
}
|
|
647
|
+
]
|
|
648
|
+
},
|
|
649
|
+
"height": {
|
|
650
|
+
"type": "number",
|
|
651
|
+
"description": "Height in pixels. Absent means the height is derived from the width, so the image keeps its aspect ratio — setting both stretches it, since email clients don't support `object-fit`."
|
|
652
|
+
},
|
|
653
|
+
"naturalWidth": {
|
|
654
|
+
"type": "number",
|
|
655
|
+
"description": "The image file's own size in px, when known: given by the media library, read by an importer, or measured in the editor during an edit. Both or neither; one without the other reads as unknown. It drives the editor's aspect-ratio lock and is never rendered. Cleared when `src` changes without a new size alongside it."
|
|
656
|
+
},
|
|
657
|
+
"naturalHeight": {
|
|
658
|
+
"type": "number"
|
|
659
|
+
},
|
|
660
|
+
"align": {
|
|
661
|
+
"type": "string",
|
|
662
|
+
"enum": [
|
|
663
|
+
"left",
|
|
664
|
+
"center",
|
|
665
|
+
"right"
|
|
666
|
+
]
|
|
667
|
+
},
|
|
668
|
+
"borderRadius": {
|
|
669
|
+
"$ref": "#/definitions/BorderRadiusValue",
|
|
670
|
+
"description": "Corner radius in px. Omitted/0 = square corners. A radius of at least half the rendered size rounds a square image to a circle, which is how avatar and portrait layouts are built. A radius per corner is also accepted."
|
|
671
|
+
},
|
|
672
|
+
"border": {
|
|
673
|
+
"$ref": "#/definitions/BorderValue",
|
|
674
|
+
"description": "Border around the image itself, per side. Omitted = no border; a side with width 0 is not drawn."
|
|
675
|
+
},
|
|
676
|
+
"linkUrl": {
|
|
677
|
+
"type": "string"
|
|
678
|
+
},
|
|
679
|
+
"linkOpenInNewTab": {
|
|
680
|
+
"type": "boolean"
|
|
681
|
+
},
|
|
682
|
+
"placeholderUrl": {
|
|
683
|
+
"type": "string"
|
|
684
|
+
},
|
|
685
|
+
"decorative": {
|
|
686
|
+
"type": "boolean"
|
|
687
|
+
}
|
|
688
|
+
},
|
|
689
|
+
"required": [
|
|
690
|
+
"align",
|
|
691
|
+
"alt",
|
|
692
|
+
"id",
|
|
693
|
+
"src",
|
|
694
|
+
"styles",
|
|
695
|
+
"type",
|
|
696
|
+
"width"
|
|
697
|
+
],
|
|
698
|
+
"additionalProperties": false
|
|
699
|
+
},
|
|
700
|
+
"ButtonBlock": {
|
|
701
|
+
"type": "object",
|
|
702
|
+
"properties": {
|
|
703
|
+
"id": {
|
|
704
|
+
"type": "string"
|
|
705
|
+
},
|
|
706
|
+
"type": {
|
|
707
|
+
"type": "string",
|
|
708
|
+
"const": "button"
|
|
709
|
+
},
|
|
710
|
+
"styles": {
|
|
711
|
+
"$ref": "#/definitions/BlockStyles"
|
|
712
|
+
},
|
|
713
|
+
"visibility": {
|
|
714
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
715
|
+
},
|
|
716
|
+
"displayCondition": {
|
|
717
|
+
"type": "object",
|
|
718
|
+
"properties": {
|
|
719
|
+
"label": {
|
|
720
|
+
"type": "string"
|
|
721
|
+
},
|
|
722
|
+
"before": {
|
|
723
|
+
"type": "string"
|
|
724
|
+
},
|
|
725
|
+
"after": {
|
|
726
|
+
"type": "string"
|
|
727
|
+
},
|
|
728
|
+
"group": {
|
|
729
|
+
"type": "string"
|
|
730
|
+
},
|
|
731
|
+
"description": {
|
|
732
|
+
"type": "string"
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
"required": [
|
|
736
|
+
"label",
|
|
737
|
+
"before",
|
|
738
|
+
"after"
|
|
739
|
+
],
|
|
740
|
+
"additionalProperties": false
|
|
741
|
+
},
|
|
742
|
+
"text": {
|
|
743
|
+
"type": "string"
|
|
744
|
+
},
|
|
745
|
+
"url": {
|
|
746
|
+
"type": "string"
|
|
747
|
+
},
|
|
748
|
+
"openInNewTab": {
|
|
749
|
+
"type": "boolean"
|
|
750
|
+
},
|
|
751
|
+
"backgroundColor": {
|
|
752
|
+
"type": "string"
|
|
753
|
+
},
|
|
754
|
+
"textColor": {
|
|
755
|
+
"type": "string"
|
|
756
|
+
},
|
|
757
|
+
"borderRadius": {
|
|
758
|
+
"$ref": "#/definitions/BorderRadiusValue",
|
|
759
|
+
"description": "Corner radius in px — one number, or a radius per corner."
|
|
760
|
+
},
|
|
761
|
+
"border": {
|
|
762
|
+
"$ref": "#/definitions/BorderValue",
|
|
763
|
+
"description": "Border around the button itself, per side. Omitted = no border; a side with width 0 is not drawn. For an outline (\"ghost\") button, set `backgroundColor` to the keyword `\"transparent\"` (the background control stores it) and set `textColor` too — a new button is `#333333` with white text. An empty fill exports as `transparent`, because MJML paints `#414141` when the attribute is omitted."
|
|
764
|
+
},
|
|
765
|
+
"fontSize": {
|
|
766
|
+
"type": "number"
|
|
767
|
+
},
|
|
768
|
+
"buttonPadding": {
|
|
769
|
+
"$ref": "#/definitions/SpacingValue"
|
|
770
|
+
},
|
|
771
|
+
"fontFamily": {
|
|
772
|
+
"type": "string"
|
|
773
|
+
},
|
|
774
|
+
"width": {
|
|
775
|
+
"anyOf": [
|
|
776
|
+
{
|
|
777
|
+
"type": "number"
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"type": "string",
|
|
781
|
+
"const": "full"
|
|
782
|
+
}
|
|
783
|
+
]
|
|
784
|
+
},
|
|
785
|
+
"align": {
|
|
786
|
+
"type": "string",
|
|
787
|
+
"enum": [
|
|
788
|
+
"left",
|
|
789
|
+
"center",
|
|
790
|
+
"right"
|
|
791
|
+
],
|
|
792
|
+
"description": "Placement of the button within its column. No visible effect when `width` is `\"full\"`, since the button then spans the column."
|
|
793
|
+
}
|
|
794
|
+
},
|
|
795
|
+
"required": [
|
|
796
|
+
"align",
|
|
797
|
+
"backgroundColor",
|
|
798
|
+
"borderRadius",
|
|
799
|
+
"buttonPadding",
|
|
800
|
+
"fontSize",
|
|
801
|
+
"id",
|
|
802
|
+
"styles",
|
|
803
|
+
"text",
|
|
804
|
+
"textColor",
|
|
805
|
+
"type",
|
|
806
|
+
"url"
|
|
807
|
+
],
|
|
808
|
+
"additionalProperties": false
|
|
809
|
+
},
|
|
810
|
+
"DividerBlock": {
|
|
811
|
+
"type": "object",
|
|
812
|
+
"properties": {
|
|
813
|
+
"id": {
|
|
814
|
+
"type": "string"
|
|
815
|
+
},
|
|
816
|
+
"type": {
|
|
817
|
+
"type": "string",
|
|
818
|
+
"const": "divider"
|
|
819
|
+
},
|
|
820
|
+
"styles": {
|
|
821
|
+
"$ref": "#/definitions/BlockStyles"
|
|
822
|
+
},
|
|
823
|
+
"visibility": {
|
|
824
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
825
|
+
},
|
|
826
|
+
"displayCondition": {
|
|
827
|
+
"type": "object",
|
|
828
|
+
"properties": {
|
|
829
|
+
"label": {
|
|
830
|
+
"type": "string"
|
|
831
|
+
},
|
|
832
|
+
"before": {
|
|
833
|
+
"type": "string"
|
|
834
|
+
},
|
|
835
|
+
"after": {
|
|
836
|
+
"type": "string"
|
|
837
|
+
},
|
|
838
|
+
"group": {
|
|
839
|
+
"type": "string"
|
|
840
|
+
},
|
|
841
|
+
"description": {
|
|
842
|
+
"type": "string"
|
|
843
|
+
}
|
|
844
|
+
},
|
|
845
|
+
"required": [
|
|
846
|
+
"label",
|
|
847
|
+
"before",
|
|
848
|
+
"after"
|
|
849
|
+
],
|
|
850
|
+
"additionalProperties": false
|
|
851
|
+
},
|
|
852
|
+
"lineStyle": {
|
|
853
|
+
"type": "string",
|
|
854
|
+
"enum": [
|
|
855
|
+
"solid",
|
|
856
|
+
"dashed",
|
|
857
|
+
"dotted"
|
|
858
|
+
]
|
|
859
|
+
},
|
|
860
|
+
"color": {
|
|
861
|
+
"type": "string"
|
|
862
|
+
},
|
|
863
|
+
"thickness": {
|
|
864
|
+
"type": "number"
|
|
865
|
+
},
|
|
866
|
+
"width": {
|
|
867
|
+
"anyOf": [
|
|
868
|
+
{
|
|
869
|
+
"type": "number"
|
|
870
|
+
},
|
|
871
|
+
{
|
|
872
|
+
"type": "string",
|
|
873
|
+
"const": "full"
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
"$ref": "#/definitions/DividerPercentWidth"
|
|
877
|
+
}
|
|
878
|
+
],
|
|
879
|
+
"description": "`\"full\"` spans the column and a number is pixels. A percentage is a share of the column: MJML renders it natively, and it shrinks with the column on a phone where a pixel width would overflow."
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
"required": [
|
|
883
|
+
"color",
|
|
884
|
+
"id",
|
|
885
|
+
"lineStyle",
|
|
886
|
+
"styles",
|
|
887
|
+
"thickness",
|
|
888
|
+
"type",
|
|
889
|
+
"width"
|
|
890
|
+
],
|
|
891
|
+
"additionalProperties": false
|
|
892
|
+
},
|
|
893
|
+
"DividerPercentWidth": {
|
|
894
|
+
"type": "string",
|
|
895
|
+
"description": "A share of the column, from `\"0%\"` to `\"100%\"`.",
|
|
896
|
+
"pattern": "^(?:100(?:\\.0+)?|\\d{1,2}(?:\\.\\d+)?)%$"
|
|
897
|
+
},
|
|
898
|
+
"VideoBlock": {
|
|
899
|
+
"type": "object",
|
|
900
|
+
"properties": {
|
|
901
|
+
"id": {
|
|
902
|
+
"type": "string"
|
|
903
|
+
},
|
|
904
|
+
"type": {
|
|
905
|
+
"type": "string",
|
|
906
|
+
"const": "video"
|
|
907
|
+
},
|
|
908
|
+
"styles": {
|
|
909
|
+
"$ref": "#/definitions/BlockStyles"
|
|
910
|
+
},
|
|
911
|
+
"visibility": {
|
|
912
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
913
|
+
},
|
|
914
|
+
"displayCondition": {
|
|
915
|
+
"type": "object",
|
|
916
|
+
"properties": {
|
|
917
|
+
"label": {
|
|
918
|
+
"type": "string"
|
|
919
|
+
},
|
|
920
|
+
"before": {
|
|
921
|
+
"type": "string"
|
|
922
|
+
},
|
|
923
|
+
"after": {
|
|
924
|
+
"type": "string"
|
|
925
|
+
},
|
|
926
|
+
"group": {
|
|
927
|
+
"type": "string"
|
|
928
|
+
},
|
|
929
|
+
"description": {
|
|
930
|
+
"type": "string"
|
|
931
|
+
}
|
|
932
|
+
},
|
|
933
|
+
"required": [
|
|
934
|
+
"label",
|
|
935
|
+
"before",
|
|
936
|
+
"after"
|
|
937
|
+
],
|
|
938
|
+
"additionalProperties": false
|
|
939
|
+
},
|
|
940
|
+
"url": {
|
|
941
|
+
"type": "string"
|
|
942
|
+
},
|
|
943
|
+
"openInNewTab": {
|
|
944
|
+
"type": "boolean"
|
|
945
|
+
},
|
|
946
|
+
"thumbnailUrl": {
|
|
947
|
+
"type": "string"
|
|
948
|
+
},
|
|
949
|
+
"alt": {
|
|
950
|
+
"type": "string"
|
|
951
|
+
},
|
|
952
|
+
"width": {
|
|
953
|
+
"anyOf": [
|
|
954
|
+
{
|
|
955
|
+
"type": "number"
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
"type": "string",
|
|
959
|
+
"const": "full"
|
|
960
|
+
}
|
|
961
|
+
]
|
|
962
|
+
},
|
|
963
|
+
"height": {
|
|
964
|
+
"type": "number",
|
|
965
|
+
"description": "Height in pixels for the thumbnail. Absent means the height is derived from the width, so the thumbnail keeps its aspect ratio — setting both stretches it, since email clients don't support `object-fit`."
|
|
966
|
+
},
|
|
967
|
+
"align": {
|
|
968
|
+
"type": "string",
|
|
969
|
+
"enum": [
|
|
970
|
+
"left",
|
|
971
|
+
"center",
|
|
972
|
+
"right"
|
|
973
|
+
]
|
|
974
|
+
},
|
|
975
|
+
"placeholderUrl": {
|
|
976
|
+
"type": "string"
|
|
977
|
+
}
|
|
978
|
+
},
|
|
979
|
+
"required": [
|
|
980
|
+
"align",
|
|
981
|
+
"alt",
|
|
982
|
+
"id",
|
|
983
|
+
"styles",
|
|
984
|
+
"thumbnailUrl",
|
|
985
|
+
"type",
|
|
986
|
+
"url",
|
|
987
|
+
"width"
|
|
988
|
+
],
|
|
989
|
+
"additionalProperties": false
|
|
990
|
+
},
|
|
991
|
+
"SocialIconsBlock": {
|
|
992
|
+
"type": "object",
|
|
993
|
+
"properties": {
|
|
994
|
+
"id": {
|
|
995
|
+
"type": "string"
|
|
996
|
+
},
|
|
997
|
+
"type": {
|
|
998
|
+
"type": "string",
|
|
999
|
+
"const": "social"
|
|
1000
|
+
},
|
|
1001
|
+
"styles": {
|
|
1002
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1003
|
+
},
|
|
1004
|
+
"visibility": {
|
|
1005
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1006
|
+
},
|
|
1007
|
+
"displayCondition": {
|
|
1008
|
+
"type": "object",
|
|
1009
|
+
"properties": {
|
|
1010
|
+
"label": {
|
|
1011
|
+
"type": "string"
|
|
1012
|
+
},
|
|
1013
|
+
"before": {
|
|
1014
|
+
"type": "string"
|
|
1015
|
+
},
|
|
1016
|
+
"after": {
|
|
1017
|
+
"type": "string"
|
|
1018
|
+
},
|
|
1019
|
+
"group": {
|
|
1020
|
+
"type": "string"
|
|
1021
|
+
},
|
|
1022
|
+
"description": {
|
|
1023
|
+
"type": "string"
|
|
1024
|
+
}
|
|
1025
|
+
},
|
|
1026
|
+
"required": [
|
|
1027
|
+
"label",
|
|
1028
|
+
"before",
|
|
1029
|
+
"after"
|
|
1030
|
+
],
|
|
1031
|
+
"additionalProperties": false
|
|
1032
|
+
},
|
|
1033
|
+
"icons": {
|
|
1034
|
+
"type": "array",
|
|
1035
|
+
"items": {
|
|
1036
|
+
"$ref": "#/definitions/SocialIcon"
|
|
1037
|
+
}
|
|
1038
|
+
},
|
|
1039
|
+
"iconStyle": {
|
|
1040
|
+
"$ref": "#/definitions/SocialIconStyle"
|
|
1041
|
+
},
|
|
1042
|
+
"iconTone": {
|
|
1043
|
+
"$ref": "#/definitions/SocialIconTone",
|
|
1044
|
+
"description": "Absent means `\"brand\"`."
|
|
1045
|
+
},
|
|
1046
|
+
"iconSize": {
|
|
1047
|
+
"$ref": "#/definitions/SocialIconSize"
|
|
1048
|
+
},
|
|
1049
|
+
"spacing": {
|
|
1050
|
+
"type": "number"
|
|
1051
|
+
},
|
|
1052
|
+
"align": {
|
|
1053
|
+
"type": "string",
|
|
1054
|
+
"enum": [
|
|
1055
|
+
"left",
|
|
1056
|
+
"center",
|
|
1057
|
+
"right"
|
|
1058
|
+
]
|
|
1059
|
+
}
|
|
1060
|
+
},
|
|
1061
|
+
"required": [
|
|
1062
|
+
"align",
|
|
1063
|
+
"iconSize",
|
|
1064
|
+
"iconStyle",
|
|
1065
|
+
"icons",
|
|
1066
|
+
"id",
|
|
1067
|
+
"spacing",
|
|
1068
|
+
"styles",
|
|
1069
|
+
"type"
|
|
1070
|
+
],
|
|
1071
|
+
"additionalProperties": false
|
|
1072
|
+
},
|
|
1073
|
+
"SocialIcon": {
|
|
1074
|
+
"type": "object",
|
|
1075
|
+
"properties": {
|
|
1076
|
+
"id": {
|
|
1077
|
+
"type": "string"
|
|
1078
|
+
},
|
|
1079
|
+
"platform": {
|
|
1080
|
+
"$ref": "#/definitions/SocialPlatform"
|
|
1081
|
+
},
|
|
1082
|
+
"url": {
|
|
1083
|
+
"type": "string"
|
|
1084
|
+
}
|
|
1085
|
+
},
|
|
1086
|
+
"required": [
|
|
1087
|
+
"id",
|
|
1088
|
+
"platform",
|
|
1089
|
+
"url"
|
|
1090
|
+
],
|
|
1091
|
+
"additionalProperties": false
|
|
1092
|
+
},
|
|
1093
|
+
"SocialPlatform": {
|
|
1094
|
+
"type": "string",
|
|
1095
|
+
"enum": [
|
|
1096
|
+
"facebook",
|
|
1097
|
+
"twitter",
|
|
1098
|
+
"instagram",
|
|
1099
|
+
"linkedin",
|
|
1100
|
+
"youtube",
|
|
1101
|
+
"tiktok",
|
|
1102
|
+
"pinterest",
|
|
1103
|
+
"email",
|
|
1104
|
+
"whatsapp",
|
|
1105
|
+
"telegram",
|
|
1106
|
+
"discord",
|
|
1107
|
+
"snapchat",
|
|
1108
|
+
"reddit",
|
|
1109
|
+
"github",
|
|
1110
|
+
"dribbble",
|
|
1111
|
+
"behance",
|
|
1112
|
+
"website"
|
|
1113
|
+
]
|
|
1114
|
+
},
|
|
1115
|
+
"SocialIconStyle": {
|
|
1116
|
+
"type": "string",
|
|
1117
|
+
"enum": [
|
|
1118
|
+
"solid",
|
|
1119
|
+
"outlined",
|
|
1120
|
+
"rounded",
|
|
1121
|
+
"square",
|
|
1122
|
+
"circle",
|
|
1123
|
+
"plain"
|
|
1124
|
+
],
|
|
1125
|
+
"description": "The icon's shape. `plain` is the glyph alone, with no badge or outline."
|
|
1126
|
+
},
|
|
1127
|
+
"SocialIconTone": {
|
|
1128
|
+
"type": "string",
|
|
1129
|
+
"enum": [
|
|
1130
|
+
"brand",
|
|
1131
|
+
"dark",
|
|
1132
|
+
"light"
|
|
1133
|
+
],
|
|
1134
|
+
"description": "The colors an icon is drawn in: each platform's own brand color, or one tone (dark or light) for every icon."
|
|
1135
|
+
},
|
|
1136
|
+
"SocialIconSize": {
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"enum": [
|
|
1139
|
+
"small",
|
|
1140
|
+
"medium",
|
|
1141
|
+
"large"
|
|
1142
|
+
]
|
|
1143
|
+
},
|
|
1144
|
+
"SpacerBlock": {
|
|
1145
|
+
"type": "object",
|
|
1146
|
+
"properties": {
|
|
1147
|
+
"id": {
|
|
1148
|
+
"type": "string"
|
|
1149
|
+
},
|
|
1150
|
+
"type": {
|
|
1151
|
+
"type": "string",
|
|
1152
|
+
"const": "spacer"
|
|
1153
|
+
},
|
|
1154
|
+
"styles": {
|
|
1155
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1156
|
+
},
|
|
1157
|
+
"visibility": {
|
|
1158
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1159
|
+
},
|
|
1160
|
+
"displayCondition": {
|
|
1161
|
+
"type": "object",
|
|
1162
|
+
"properties": {
|
|
1163
|
+
"label": {
|
|
1164
|
+
"type": "string"
|
|
1165
|
+
},
|
|
1166
|
+
"before": {
|
|
1167
|
+
"type": "string"
|
|
1168
|
+
},
|
|
1169
|
+
"after": {
|
|
1170
|
+
"type": "string"
|
|
1171
|
+
},
|
|
1172
|
+
"group": {
|
|
1173
|
+
"type": "string"
|
|
1174
|
+
},
|
|
1175
|
+
"description": {
|
|
1176
|
+
"type": "string"
|
|
1177
|
+
}
|
|
1178
|
+
},
|
|
1179
|
+
"required": [
|
|
1180
|
+
"label",
|
|
1181
|
+
"before",
|
|
1182
|
+
"after"
|
|
1183
|
+
],
|
|
1184
|
+
"additionalProperties": false
|
|
1185
|
+
},
|
|
1186
|
+
"height": {
|
|
1187
|
+
"type": "number"
|
|
1188
|
+
}
|
|
1189
|
+
},
|
|
1190
|
+
"required": [
|
|
1191
|
+
"height",
|
|
1192
|
+
"id",
|
|
1193
|
+
"styles",
|
|
1194
|
+
"type"
|
|
1195
|
+
],
|
|
1196
|
+
"additionalProperties": false
|
|
1197
|
+
},
|
|
1198
|
+
"HtmlBlock": {
|
|
1199
|
+
"type": "object",
|
|
1200
|
+
"properties": {
|
|
1201
|
+
"id": {
|
|
1202
|
+
"type": "string"
|
|
1203
|
+
},
|
|
1204
|
+
"type": {
|
|
1205
|
+
"type": "string",
|
|
1206
|
+
"const": "html"
|
|
1207
|
+
},
|
|
1208
|
+
"styles": {
|
|
1209
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1210
|
+
},
|
|
1211
|
+
"visibility": {
|
|
1212
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1213
|
+
},
|
|
1214
|
+
"displayCondition": {
|
|
1215
|
+
"type": "object",
|
|
1216
|
+
"properties": {
|
|
1217
|
+
"label": {
|
|
1218
|
+
"type": "string"
|
|
1219
|
+
},
|
|
1220
|
+
"before": {
|
|
1221
|
+
"type": "string"
|
|
1222
|
+
},
|
|
1223
|
+
"after": {
|
|
1224
|
+
"type": "string"
|
|
1225
|
+
},
|
|
1226
|
+
"group": {
|
|
1227
|
+
"type": "string"
|
|
1228
|
+
},
|
|
1229
|
+
"description": {
|
|
1230
|
+
"type": "string"
|
|
1231
|
+
}
|
|
1232
|
+
},
|
|
1233
|
+
"required": [
|
|
1234
|
+
"label",
|
|
1235
|
+
"before",
|
|
1236
|
+
"after"
|
|
1237
|
+
],
|
|
1238
|
+
"additionalProperties": false
|
|
1239
|
+
},
|
|
1240
|
+
"content": {
|
|
1241
|
+
"type": "string"
|
|
1242
|
+
}
|
|
1243
|
+
},
|
|
1244
|
+
"required": [
|
|
1245
|
+
"content",
|
|
1246
|
+
"id",
|
|
1247
|
+
"styles",
|
|
1248
|
+
"type"
|
|
1249
|
+
],
|
|
1250
|
+
"additionalProperties": false
|
|
1251
|
+
},
|
|
1252
|
+
"MenuBlock": {
|
|
1253
|
+
"type": "object",
|
|
1254
|
+
"properties": {
|
|
1255
|
+
"id": {
|
|
1256
|
+
"type": "string"
|
|
1257
|
+
},
|
|
1258
|
+
"type": {
|
|
1259
|
+
"type": "string",
|
|
1260
|
+
"const": "menu"
|
|
1261
|
+
},
|
|
1262
|
+
"styles": {
|
|
1263
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1264
|
+
},
|
|
1265
|
+
"visibility": {
|
|
1266
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1267
|
+
},
|
|
1268
|
+
"displayCondition": {
|
|
1269
|
+
"type": "object",
|
|
1270
|
+
"properties": {
|
|
1271
|
+
"label": {
|
|
1272
|
+
"type": "string"
|
|
1273
|
+
},
|
|
1274
|
+
"before": {
|
|
1275
|
+
"type": "string"
|
|
1276
|
+
},
|
|
1277
|
+
"after": {
|
|
1278
|
+
"type": "string"
|
|
1279
|
+
},
|
|
1280
|
+
"group": {
|
|
1281
|
+
"type": "string"
|
|
1282
|
+
},
|
|
1283
|
+
"description": {
|
|
1284
|
+
"type": "string"
|
|
1285
|
+
}
|
|
1286
|
+
},
|
|
1287
|
+
"required": [
|
|
1288
|
+
"label",
|
|
1289
|
+
"before",
|
|
1290
|
+
"after"
|
|
1291
|
+
],
|
|
1292
|
+
"additionalProperties": false
|
|
1293
|
+
},
|
|
1294
|
+
"items": {
|
|
1295
|
+
"type": "array",
|
|
1296
|
+
"items": {
|
|
1297
|
+
"$ref": "#/definitions/MenuItemData"
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1300
|
+
"fontSize": {
|
|
1301
|
+
"type": "number"
|
|
1302
|
+
},
|
|
1303
|
+
"fontFamily": {
|
|
1304
|
+
"type": "string"
|
|
1305
|
+
},
|
|
1306
|
+
"color": {
|
|
1307
|
+
"type": "string",
|
|
1308
|
+
"description": "Base text/link color. Unset = inherit the document-level `textColor`."
|
|
1309
|
+
},
|
|
1310
|
+
"linkColor": {
|
|
1311
|
+
"type": "string"
|
|
1312
|
+
},
|
|
1313
|
+
"textAlign": {
|
|
1314
|
+
"type": "string",
|
|
1315
|
+
"enum": [
|
|
1316
|
+
"left",
|
|
1317
|
+
"center",
|
|
1318
|
+
"right"
|
|
1319
|
+
]
|
|
1320
|
+
},
|
|
1321
|
+
"separator": {
|
|
1322
|
+
"type": "string"
|
|
1323
|
+
},
|
|
1324
|
+
"separatorColor": {
|
|
1325
|
+
"type": "string"
|
|
1326
|
+
},
|
|
1327
|
+
"spacing": {
|
|
1328
|
+
"type": "number"
|
|
1329
|
+
}
|
|
1330
|
+
},
|
|
1331
|
+
"required": [
|
|
1332
|
+
"fontSize",
|
|
1333
|
+
"id",
|
|
1334
|
+
"items",
|
|
1335
|
+
"separator",
|
|
1336
|
+
"separatorColor",
|
|
1337
|
+
"spacing",
|
|
1338
|
+
"styles",
|
|
1339
|
+
"textAlign",
|
|
1340
|
+
"type"
|
|
1341
|
+
],
|
|
1342
|
+
"additionalProperties": false
|
|
1343
|
+
},
|
|
1344
|
+
"MenuItemData": {
|
|
1345
|
+
"type": "object",
|
|
1346
|
+
"properties": {
|
|
1347
|
+
"id": {
|
|
1348
|
+
"type": "string"
|
|
1349
|
+
},
|
|
1350
|
+
"text": {
|
|
1351
|
+
"type": "string"
|
|
1352
|
+
},
|
|
1353
|
+
"url": {
|
|
1354
|
+
"type": "string"
|
|
1355
|
+
},
|
|
1356
|
+
"openInNewTab": {
|
|
1357
|
+
"type": "boolean"
|
|
1358
|
+
},
|
|
1359
|
+
"bold": {
|
|
1360
|
+
"type": "boolean"
|
|
1361
|
+
},
|
|
1362
|
+
"underline": {
|
|
1363
|
+
"type": "boolean"
|
|
1364
|
+
},
|
|
1365
|
+
"color": {
|
|
1366
|
+
"type": "string"
|
|
1367
|
+
}
|
|
1368
|
+
},
|
|
1369
|
+
"required": [
|
|
1370
|
+
"id",
|
|
1371
|
+
"text",
|
|
1372
|
+
"url",
|
|
1373
|
+
"openInNewTab",
|
|
1374
|
+
"bold",
|
|
1375
|
+
"underline"
|
|
1376
|
+
],
|
|
1377
|
+
"additionalProperties": false
|
|
1378
|
+
},
|
|
1379
|
+
"TableBlock": {
|
|
1380
|
+
"type": "object",
|
|
1381
|
+
"properties": {
|
|
1382
|
+
"id": {
|
|
1383
|
+
"type": "string"
|
|
1384
|
+
},
|
|
1385
|
+
"type": {
|
|
1386
|
+
"type": "string",
|
|
1387
|
+
"const": "table"
|
|
1388
|
+
},
|
|
1389
|
+
"styles": {
|
|
1390
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1391
|
+
},
|
|
1392
|
+
"visibility": {
|
|
1393
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1394
|
+
},
|
|
1395
|
+
"displayCondition": {
|
|
1396
|
+
"type": "object",
|
|
1397
|
+
"properties": {
|
|
1398
|
+
"label": {
|
|
1399
|
+
"type": "string"
|
|
1400
|
+
},
|
|
1401
|
+
"before": {
|
|
1402
|
+
"type": "string"
|
|
1403
|
+
},
|
|
1404
|
+
"after": {
|
|
1405
|
+
"type": "string"
|
|
1406
|
+
},
|
|
1407
|
+
"group": {
|
|
1408
|
+
"type": "string"
|
|
1409
|
+
},
|
|
1410
|
+
"description": {
|
|
1411
|
+
"type": "string"
|
|
1412
|
+
}
|
|
1413
|
+
},
|
|
1414
|
+
"required": [
|
|
1415
|
+
"label",
|
|
1416
|
+
"before",
|
|
1417
|
+
"after"
|
|
1418
|
+
],
|
|
1419
|
+
"additionalProperties": false
|
|
1420
|
+
},
|
|
1421
|
+
"rows": {
|
|
1422
|
+
"type": "array",
|
|
1423
|
+
"items": {
|
|
1424
|
+
"$ref": "#/definitions/TableRowData"
|
|
1425
|
+
}
|
|
1426
|
+
},
|
|
1427
|
+
"hasHeaderRow": {
|
|
1428
|
+
"type": "boolean"
|
|
1429
|
+
},
|
|
1430
|
+
"headerBackgroundColor": {
|
|
1431
|
+
"type": "string"
|
|
1432
|
+
},
|
|
1433
|
+
"borderColor": {
|
|
1434
|
+
"type": "string"
|
|
1435
|
+
},
|
|
1436
|
+
"borderWidth": {
|
|
1437
|
+
"type": "number"
|
|
1438
|
+
},
|
|
1439
|
+
"cellPadding": {
|
|
1440
|
+
"type": "number"
|
|
1441
|
+
},
|
|
1442
|
+
"fontSize": {
|
|
1443
|
+
"type": "number"
|
|
1444
|
+
},
|
|
1445
|
+
"fontFamily": {
|
|
1446
|
+
"type": "string"
|
|
1447
|
+
},
|
|
1448
|
+
"color": {
|
|
1449
|
+
"type": "string",
|
|
1450
|
+
"description": "Text color. Unset = inherit the document-level `textColor`."
|
|
1451
|
+
},
|
|
1452
|
+
"textAlign": {
|
|
1453
|
+
"type": "string",
|
|
1454
|
+
"enum": [
|
|
1455
|
+
"left",
|
|
1456
|
+
"center",
|
|
1457
|
+
"right"
|
|
1458
|
+
]
|
|
1459
|
+
}
|
|
1460
|
+
},
|
|
1461
|
+
"required": [
|
|
1462
|
+
"borderColor",
|
|
1463
|
+
"borderWidth",
|
|
1464
|
+
"cellPadding",
|
|
1465
|
+
"fontSize",
|
|
1466
|
+
"hasHeaderRow",
|
|
1467
|
+
"id",
|
|
1468
|
+
"rows",
|
|
1469
|
+
"styles",
|
|
1470
|
+
"textAlign",
|
|
1471
|
+
"type"
|
|
1472
|
+
],
|
|
1473
|
+
"additionalProperties": false
|
|
1474
|
+
},
|
|
1475
|
+
"TableRowData": {
|
|
1476
|
+
"type": "object",
|
|
1477
|
+
"properties": {
|
|
1478
|
+
"id": {
|
|
1479
|
+
"type": "string"
|
|
1480
|
+
},
|
|
1481
|
+
"cells": {
|
|
1482
|
+
"type": "array",
|
|
1483
|
+
"items": {
|
|
1484
|
+
"$ref": "#/definitions/TableCellData"
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
},
|
|
1488
|
+
"required": [
|
|
1489
|
+
"id",
|
|
1490
|
+
"cells"
|
|
1491
|
+
],
|
|
1492
|
+
"additionalProperties": false
|
|
1493
|
+
},
|
|
1494
|
+
"TableCellData": {
|
|
1495
|
+
"type": "object",
|
|
1496
|
+
"properties": {
|
|
1497
|
+
"id": {
|
|
1498
|
+
"type": "string"
|
|
1499
|
+
},
|
|
1500
|
+
"content": {
|
|
1501
|
+
"type": "string"
|
|
1502
|
+
}
|
|
1503
|
+
},
|
|
1504
|
+
"required": [
|
|
1505
|
+
"id",
|
|
1506
|
+
"content"
|
|
1507
|
+
],
|
|
1508
|
+
"additionalProperties": false
|
|
1509
|
+
},
|
|
1510
|
+
"CountdownBlock": {
|
|
1511
|
+
"type": "object",
|
|
1512
|
+
"properties": {
|
|
1513
|
+
"id": {
|
|
1514
|
+
"type": "string"
|
|
1515
|
+
},
|
|
1516
|
+
"type": {
|
|
1517
|
+
"type": "string",
|
|
1518
|
+
"const": "countdown"
|
|
1519
|
+
},
|
|
1520
|
+
"styles": {
|
|
1521
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1522
|
+
},
|
|
1523
|
+
"visibility": {
|
|
1524
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1525
|
+
},
|
|
1526
|
+
"displayCondition": {
|
|
1527
|
+
"type": "object",
|
|
1528
|
+
"properties": {
|
|
1529
|
+
"label": {
|
|
1530
|
+
"type": "string"
|
|
1531
|
+
},
|
|
1532
|
+
"before": {
|
|
1533
|
+
"type": "string"
|
|
1534
|
+
},
|
|
1535
|
+
"after": {
|
|
1536
|
+
"type": "string"
|
|
1537
|
+
},
|
|
1538
|
+
"group": {
|
|
1539
|
+
"type": "string"
|
|
1540
|
+
},
|
|
1541
|
+
"description": {
|
|
1542
|
+
"type": "string"
|
|
1543
|
+
}
|
|
1544
|
+
},
|
|
1545
|
+
"required": [
|
|
1546
|
+
"label",
|
|
1547
|
+
"before",
|
|
1548
|
+
"after"
|
|
1549
|
+
],
|
|
1550
|
+
"additionalProperties": false
|
|
1551
|
+
},
|
|
1552
|
+
"targetDate": {
|
|
1553
|
+
"type": "string"
|
|
1554
|
+
},
|
|
1555
|
+
"timezone": {
|
|
1556
|
+
"type": "string"
|
|
1557
|
+
},
|
|
1558
|
+
"showDays": {
|
|
1559
|
+
"type": "boolean"
|
|
1560
|
+
},
|
|
1561
|
+
"showHours": {
|
|
1562
|
+
"type": "boolean"
|
|
1563
|
+
},
|
|
1564
|
+
"showMinutes": {
|
|
1565
|
+
"type": "boolean"
|
|
1566
|
+
},
|
|
1567
|
+
"showSeconds": {
|
|
1568
|
+
"type": "boolean"
|
|
1569
|
+
},
|
|
1570
|
+
"separator": {
|
|
1571
|
+
"type": "string",
|
|
1572
|
+
"enum": [
|
|
1573
|
+
":",
|
|
1574
|
+
"-",
|
|
1575
|
+
" "
|
|
1576
|
+
]
|
|
1577
|
+
},
|
|
1578
|
+
"digitFontSize": {
|
|
1579
|
+
"type": "number"
|
|
1580
|
+
},
|
|
1581
|
+
"digitColor": {
|
|
1582
|
+
"type": "string"
|
|
1583
|
+
},
|
|
1584
|
+
"labelColor": {
|
|
1585
|
+
"type": "string"
|
|
1586
|
+
},
|
|
1587
|
+
"labelFontSize": {
|
|
1588
|
+
"type": "number"
|
|
1589
|
+
},
|
|
1590
|
+
"backgroundColor": {
|
|
1591
|
+
"type": "string"
|
|
1592
|
+
},
|
|
1593
|
+
"fontFamily": {
|
|
1594
|
+
"type": "string"
|
|
1595
|
+
},
|
|
1596
|
+
"labelDays": {
|
|
1597
|
+
"type": "string"
|
|
1598
|
+
},
|
|
1599
|
+
"labelHours": {
|
|
1600
|
+
"type": "string"
|
|
1601
|
+
},
|
|
1602
|
+
"labelMinutes": {
|
|
1603
|
+
"type": "string"
|
|
1604
|
+
},
|
|
1605
|
+
"labelSeconds": {
|
|
1606
|
+
"type": "string"
|
|
1607
|
+
},
|
|
1608
|
+
"expiredMessage": {
|
|
1609
|
+
"type": "string"
|
|
1610
|
+
},
|
|
1611
|
+
"expiredImageUrl": {
|
|
1612
|
+
"type": "string"
|
|
1613
|
+
},
|
|
1614
|
+
"hideOnExpiry": {
|
|
1615
|
+
"type": "boolean"
|
|
1616
|
+
}
|
|
1617
|
+
},
|
|
1618
|
+
"required": [
|
|
1619
|
+
"backgroundColor",
|
|
1620
|
+
"digitColor",
|
|
1621
|
+
"digitFontSize",
|
|
1622
|
+
"expiredImageUrl",
|
|
1623
|
+
"expiredMessage",
|
|
1624
|
+
"hideOnExpiry",
|
|
1625
|
+
"id",
|
|
1626
|
+
"labelColor",
|
|
1627
|
+
"labelDays",
|
|
1628
|
+
"labelFontSize",
|
|
1629
|
+
"labelHours",
|
|
1630
|
+
"labelMinutes",
|
|
1631
|
+
"labelSeconds",
|
|
1632
|
+
"separator",
|
|
1633
|
+
"showDays",
|
|
1634
|
+
"showHours",
|
|
1635
|
+
"showMinutes",
|
|
1636
|
+
"showSeconds",
|
|
1637
|
+
"styles",
|
|
1638
|
+
"targetDate",
|
|
1639
|
+
"timezone",
|
|
1640
|
+
"type"
|
|
1641
|
+
],
|
|
1642
|
+
"additionalProperties": false
|
|
1643
|
+
},
|
|
1644
|
+
"CustomBlock": {
|
|
1645
|
+
"type": "object",
|
|
1646
|
+
"properties": {
|
|
1647
|
+
"id": {
|
|
1648
|
+
"type": "string"
|
|
1649
|
+
},
|
|
1650
|
+
"type": {
|
|
1651
|
+
"type": "string",
|
|
1652
|
+
"const": "custom"
|
|
1653
|
+
},
|
|
1654
|
+
"styles": {
|
|
1655
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1656
|
+
},
|
|
1657
|
+
"visibility": {
|
|
1658
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1659
|
+
},
|
|
1660
|
+
"displayCondition": {
|
|
1661
|
+
"type": "object",
|
|
1662
|
+
"properties": {
|
|
1663
|
+
"label": {
|
|
1664
|
+
"type": "string"
|
|
1665
|
+
},
|
|
1666
|
+
"before": {
|
|
1667
|
+
"type": "string"
|
|
1668
|
+
},
|
|
1669
|
+
"after": {
|
|
1670
|
+
"type": "string"
|
|
1671
|
+
},
|
|
1672
|
+
"group": {
|
|
1673
|
+
"type": "string"
|
|
1674
|
+
},
|
|
1675
|
+
"description": {
|
|
1676
|
+
"type": "string"
|
|
1677
|
+
}
|
|
1678
|
+
},
|
|
1679
|
+
"required": [
|
|
1680
|
+
"label",
|
|
1681
|
+
"before",
|
|
1682
|
+
"after"
|
|
1683
|
+
],
|
|
1684
|
+
"additionalProperties": false
|
|
1685
|
+
},
|
|
1686
|
+
"customType": {
|
|
1687
|
+
"type": "string"
|
|
1688
|
+
},
|
|
1689
|
+
"fieldValues": {
|
|
1690
|
+
"type": "object",
|
|
1691
|
+
"additionalProperties": {}
|
|
1692
|
+
},
|
|
1693
|
+
"renderedHtml": {
|
|
1694
|
+
"type": "string"
|
|
1695
|
+
},
|
|
1696
|
+
"renderedStylesheet": {
|
|
1697
|
+
"type": "string",
|
|
1698
|
+
"description": "The definition's `stylesheet`, copied in when `renderedHtml` is written. A render provider's backend, and Cloud rendering from storage, have no definition to ask, so `@templatical/renderer` emits this when no `getCustomBlockStylesheet` resolver is passed. A resolver, when passed, decides every type, so a stale copy never overrides a live definition."
|
|
1699
|
+
},
|
|
1700
|
+
"dataSourceFetched": {
|
|
1701
|
+
"type": "boolean"
|
|
1702
|
+
}
|
|
1703
|
+
},
|
|
1704
|
+
"required": [
|
|
1705
|
+
"customType",
|
|
1706
|
+
"fieldValues",
|
|
1707
|
+
"id",
|
|
1708
|
+
"styles",
|
|
1709
|
+
"type"
|
|
1710
|
+
],
|
|
1711
|
+
"additionalProperties": false
|
|
1712
|
+
},
|
|
1713
|
+
"SlotBlock": {
|
|
1714
|
+
"type": "object",
|
|
1715
|
+
"properties": {
|
|
1716
|
+
"id": {
|
|
1717
|
+
"type": "string"
|
|
1718
|
+
},
|
|
1719
|
+
"type": {
|
|
1720
|
+
"type": "string",
|
|
1721
|
+
"const": "slot"
|
|
1722
|
+
},
|
|
1723
|
+
"styles": {
|
|
1724
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1725
|
+
},
|
|
1726
|
+
"visibility": {
|
|
1727
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1728
|
+
},
|
|
1729
|
+
"displayCondition": {
|
|
1730
|
+
"type": "object",
|
|
1731
|
+
"properties": {
|
|
1732
|
+
"label": {
|
|
1733
|
+
"type": "string"
|
|
1734
|
+
},
|
|
1735
|
+
"before": {
|
|
1736
|
+
"type": "string"
|
|
1737
|
+
},
|
|
1738
|
+
"after": {
|
|
1739
|
+
"type": "string"
|
|
1740
|
+
},
|
|
1741
|
+
"group": {
|
|
1742
|
+
"type": "string"
|
|
1743
|
+
},
|
|
1744
|
+
"description": {
|
|
1745
|
+
"type": "string"
|
|
1746
|
+
}
|
|
1747
|
+
},
|
|
1748
|
+
"required": [
|
|
1749
|
+
"label",
|
|
1750
|
+
"before",
|
|
1751
|
+
"after"
|
|
1752
|
+
],
|
|
1753
|
+
"additionalProperties": false
|
|
1754
|
+
}
|
|
1755
|
+
},
|
|
1756
|
+
"required": [
|
|
1757
|
+
"id",
|
|
1758
|
+
"styles",
|
|
1759
|
+
"type"
|
|
1760
|
+
],
|
|
1761
|
+
"additionalProperties": false,
|
|
1762
|
+
"description": "Layout-only hole where authored content is spliced in. Extends BaseBlock so Block walkers stay typed (`styles` unused; spliced out before render)."
|
|
1763
|
+
},
|
|
1764
|
+
"WrapperBlock": {
|
|
1765
|
+
"type": "object",
|
|
1766
|
+
"properties": {
|
|
1767
|
+
"id": {
|
|
1768
|
+
"type": "string"
|
|
1769
|
+
},
|
|
1770
|
+
"type": {
|
|
1771
|
+
"type": "string",
|
|
1772
|
+
"const": "wrapper"
|
|
1773
|
+
},
|
|
1774
|
+
"styles": {
|
|
1775
|
+
"$ref": "#/definitions/BlockStyles"
|
|
1776
|
+
},
|
|
1777
|
+
"visibility": {
|
|
1778
|
+
"$ref": "#/definitions/BlockVisibility"
|
|
1779
|
+
},
|
|
1780
|
+
"displayCondition": {
|
|
1781
|
+
"type": "object",
|
|
1782
|
+
"properties": {
|
|
1783
|
+
"label": {
|
|
1784
|
+
"type": "string"
|
|
1785
|
+
},
|
|
1786
|
+
"before": {
|
|
1787
|
+
"type": "string"
|
|
1788
|
+
},
|
|
1789
|
+
"after": {
|
|
1790
|
+
"type": "string"
|
|
1791
|
+
},
|
|
1792
|
+
"group": {
|
|
1793
|
+
"type": "string"
|
|
1794
|
+
},
|
|
1795
|
+
"description": {
|
|
1796
|
+
"type": "string"
|
|
1797
|
+
}
|
|
1798
|
+
},
|
|
1799
|
+
"required": [
|
|
1800
|
+
"label",
|
|
1801
|
+
"before",
|
|
1802
|
+
"after"
|
|
1803
|
+
],
|
|
1804
|
+
"additionalProperties": false
|
|
1805
|
+
},
|
|
1806
|
+
"children": {
|
|
1807
|
+
"type": "array",
|
|
1808
|
+
"items": {
|
|
1809
|
+
"$ref": "#/definitions/Block"
|
|
1810
|
+
}
|
|
1811
|
+
},
|
|
1812
|
+
"borderRadius": {
|
|
1813
|
+
"type": "number"
|
|
1814
|
+
},
|
|
1815
|
+
"backgroundImage": {
|
|
1816
|
+
"$ref": "#/definitions/BackgroundImage",
|
|
1817
|
+
"description": "Image behind the band; `styles.backgroundColor` is its fallback."
|
|
1818
|
+
}
|
|
1819
|
+
},
|
|
1820
|
+
"required": [
|
|
1821
|
+
"children",
|
|
1822
|
+
"id",
|
|
1823
|
+
"styles",
|
|
1824
|
+
"type"
|
|
1825
|
+
],
|
|
1826
|
+
"additionalProperties": false,
|
|
1827
|
+
"description": "Layout-only band rendered as `mj-wrapper`. The block is the band: `styles.backgroundColor` / `styles.padding` / `borderRadius` / `backgroundImage` map to the wrapper. Legal in layout only."
|
|
1828
|
+
},
|
|
1829
|
+
"TemplateSettings": {
|
|
1830
|
+
"type": "object",
|
|
1831
|
+
"properties": {
|
|
1832
|
+
"width": {
|
|
1833
|
+
"type": "number"
|
|
1834
|
+
},
|
|
1835
|
+
"backgroundColor": {
|
|
1836
|
+
"type": "string"
|
|
1837
|
+
},
|
|
1838
|
+
"textColor": {
|
|
1839
|
+
"type": "string",
|
|
1840
|
+
"description": "Document-level default text color: the `<mj-text>` default in the rendered MJML, inherited by every text block (Title, Paragraph, Menu, Table) that doesn't set its own `color`. Required, defaulting to `#1a1a1a` (see `DEFAULT_TEMPLATE_DEFAULTS`); customize the default per-consumer via `templateDefaults`. A block's explicit `color` or an inline text-color mark overrides it."
|
|
1841
|
+
},
|
|
1842
|
+
"linkColor": {
|
|
1843
|
+
"type": "string",
|
|
1844
|
+
"description": "Document-level link color: emitted as the global `a { color }` rule in the rendered MJML, so it cascades to every link — rich-text and menu alike. Optional: when unset, links inherit the surrounding text color (`color: inherit`), preserving the pre-#352 default. A per-block or per-item color (a Menu item's `color`, `MenuBlock.linkColor`) still overrides it."
|
|
1845
|
+
},
|
|
1846
|
+
"linkUnderline": {
|
|
1847
|
+
"type": "boolean",
|
|
1848
|
+
"description": "Whether links are underlined document-wide: drives the global `a { text-decoration }` rule (`underline` when true, `none` when false). Required, defaulting to `true` (see `DEFAULT_TEMPLATE_DEFAULTS`) — the common, more accessible email default. Applies to body (rich-text) links; buttons and menu items carry their own inline `text-decoration` and are unaffected. Set `false` to render links without an underline."
|
|
1849
|
+
},
|
|
1850
|
+
"fontFamily": {
|
|
1851
|
+
"type": "string"
|
|
1852
|
+
},
|
|
1853
|
+
"preheaderText": {
|
|
1854
|
+
"type": "string"
|
|
1855
|
+
},
|
|
1856
|
+
"locale": {
|
|
1857
|
+
"type": "string",
|
|
1858
|
+
"description": "BCP-47 language code for the rendered email's `<html lang>`. Drives screen-reader pronunciation. Default `'en'` via `DEFAULT_TEMPLATE_DEFAULTS`."
|
|
1859
|
+
},
|
|
1860
|
+
"direction": {
|
|
1861
|
+
"$ref": "#/definitions/ContentDirection",
|
|
1862
|
+
"description": "Writing direction of the delivered email: the canvas `dir` and the rendered `<mjml dir>`. Independent of the editor chrome (`init({ locale })`). Optional: when unset, `resolveContentDirection` falls through to the content language (`ar` / `he` / `fa` / … → `\"rtl\"`, otherwise `\"ltr\"`). An explicit `\"ltr\"` on an Arabic template is a stated decision, not a missing value."
|
|
1863
|
+
}
|
|
1864
|
+
},
|
|
1865
|
+
"required": [
|
|
1866
|
+
"width",
|
|
1867
|
+
"backgroundColor",
|
|
1868
|
+
"textColor",
|
|
1869
|
+
"linkUnderline",
|
|
1870
|
+
"fontFamily",
|
|
1871
|
+
"locale"
|
|
1872
|
+
],
|
|
1873
|
+
"additionalProperties": false
|
|
1874
|
+
},
|
|
1875
|
+
"ContentDirection": {
|
|
1876
|
+
"type": "string",
|
|
1877
|
+
"enum": [
|
|
1878
|
+
"ltr",
|
|
1879
|
+
"rtl"
|
|
1880
|
+
],
|
|
1881
|
+
"description": "Writing direction of the delivered email — the canvas `dir` and the rendered `<mjml dir>`. Independent of the editor chrome language (`init({ locale })`)."
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
}
|