@templatical/types 0.10.0 → 0.10.1

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.ts CHANGED
@@ -1,189 +1,191 @@
1
+ //#region src/blocks.d.ts
1
2
  interface SpacingValue {
2
- top: number;
3
- right: number;
4
- bottom: number;
5
- left: number;
3
+ top: number;
4
+ right: number;
5
+ bottom: number;
6
+ left: number;
6
7
  }
7
8
  interface BlockStyles {
8
- padding: SpacingValue;
9
- backgroundColor?: string;
9
+ padding: SpacingValue;
10
+ backgroundColor?: string;
10
11
  }
11
12
  interface BlockVisibility {
12
- desktop: boolean;
13
- mobile: boolean;
13
+ desktop: boolean;
14
+ mobile: boolean;
14
15
  }
15
16
  interface BaseBlock {
16
- id: string;
17
- type: string;
18
- styles: BlockStyles;
19
- visibility?: BlockVisibility;
20
- displayCondition?: {
21
- label: string;
22
- before: string;
23
- after: string;
24
- group?: string;
25
- description?: string;
26
- };
17
+ id: string;
18
+ type: string;
19
+ styles: BlockStyles;
20
+ visibility?: BlockVisibility;
21
+ displayCondition?: {
22
+ label: string;
23
+ before: string;
24
+ after: string;
25
+ group?: string;
26
+ description?: string;
27
+ };
27
28
  }
28
29
  type ColumnLayout = "1" | "2" | "3" | "2-1" | "1-2";
29
30
  interface SectionBlock extends BaseBlock {
30
- type: "section";
31
- columns: ColumnLayout;
32
- children: Block[][];
31
+ type: "section";
32
+ columns: ColumnLayout;
33
+ children: Block[][];
33
34
  }
34
35
  type HeadingLevel = 1 | 2 | 3 | 4;
35
36
  declare const HEADING_LEVEL_FONT_SIZE: Record<HeadingLevel, number>;
36
37
  interface TitleBlock extends BaseBlock {
37
- type: "title";
38
- content: string;
39
- level: HeadingLevel;
40
- color: string;
41
- textAlign: "left" | "center" | "right";
42
- fontFamily?: string;
38
+ type: "title";
39
+ content: string;
40
+ level: HeadingLevel;
41
+ color: string;
42
+ textAlign: "left" | "center" | "right";
43
+ fontFamily?: string;
43
44
  }
44
45
  interface ParagraphBlock extends BaseBlock {
45
- type: "paragraph";
46
- content: string;
46
+ type: "paragraph";
47
+ content: string;
47
48
  }
48
49
  interface ImageBlock extends BaseBlock {
49
- type: "image";
50
- src: string;
51
- alt: string;
52
- width: number | "full";
53
- align: "left" | "center" | "right";
54
- linkUrl?: string;
55
- linkOpenInNewTab?: boolean;
56
- placeholderUrl?: string;
57
- decorative?: boolean;
50
+ type: "image";
51
+ src: string;
52
+ alt: string;
53
+ width: number | "full";
54
+ align: "left" | "center" | "right";
55
+ linkUrl?: string;
56
+ linkOpenInNewTab?: boolean;
57
+ placeholderUrl?: string;
58
+ decorative?: boolean;
58
59
  }
59
60
  interface ButtonBlock extends BaseBlock {
60
- type: "button";
61
- text: string;
62
- url: string;
63
- openInNewTab?: boolean;
64
- backgroundColor: string;
65
- textColor: string;
66
- borderRadius: number;
67
- fontSize: number;
68
- buttonPadding: SpacingValue;
69
- fontFamily?: string;
61
+ type: "button";
62
+ text: string;
63
+ url: string;
64
+ openInNewTab?: boolean;
65
+ backgroundColor: string;
66
+ textColor: string;
67
+ borderRadius: number;
68
+ fontSize: number;
69
+ buttonPadding: SpacingValue;
70
+ fontFamily?: string;
70
71
  }
71
72
  interface DividerBlock extends BaseBlock {
72
- type: "divider";
73
- lineStyle: "solid" | "dashed" | "dotted";
74
- color: string;
75
- thickness: number;
76
- width: number | "full";
73
+ type: "divider";
74
+ lineStyle: "solid" | "dashed" | "dotted";
75
+ color: string;
76
+ thickness: number;
77
+ width: number | "full";
77
78
  }
78
79
  interface VideoBlock extends BaseBlock {
79
- type: "video";
80
- url: string;
81
- openInNewTab?: boolean;
82
- thumbnailUrl: string;
83
- alt: string;
84
- width: number | "full";
85
- align: "left" | "center" | "right";
86
- placeholderUrl?: string;
80
+ type: "video";
81
+ url: string;
82
+ openInNewTab?: boolean;
83
+ thumbnailUrl: string;
84
+ alt: string;
85
+ width: number | "full";
86
+ align: "left" | "center" | "right";
87
+ placeholderUrl?: string;
87
88
  }
88
89
  type SocialPlatform = "facebook" | "twitter" | "instagram" | "linkedin" | "youtube" | "tiktok" | "pinterest" | "email" | "whatsapp" | "telegram" | "discord" | "snapchat" | "reddit" | "github" | "dribbble" | "behance";
89
90
  type SocialIconStyle = "solid" | "outlined" | "rounded" | "square" | "circle";
90
91
  type SocialIconSize = "small" | "medium" | "large";
91
92
  interface SocialIcon {
92
- id: string;
93
- platform: SocialPlatform;
94
- url: string;
93
+ id: string;
94
+ platform: SocialPlatform;
95
+ url: string;
95
96
  }
96
97
  interface SocialIconsBlock extends BaseBlock {
97
- type: "social";
98
- icons: SocialIcon[];
99
- iconStyle: SocialIconStyle;
100
- iconSize: SocialIconSize;
101
- spacing: number;
102
- align: "left" | "center" | "right";
98
+ type: "social";
99
+ icons: SocialIcon[];
100
+ iconStyle: SocialIconStyle;
101
+ iconSize: SocialIconSize;
102
+ spacing: number;
103
+ align: "left" | "center" | "right";
103
104
  }
104
105
  interface SpacerBlock extends BaseBlock {
105
- type: "spacer";
106
- height: number;
106
+ type: "spacer";
107
+ height: number;
107
108
  }
108
109
  interface HtmlBlock extends BaseBlock {
109
- type: "html";
110
- content: string;
110
+ type: "html";
111
+ content: string;
111
112
  }
112
113
  interface MenuItemData {
113
- id: string;
114
- text: string;
115
- url: string;
116
- openInNewTab: boolean;
117
- bold: boolean;
118
- underline: boolean;
119
- color?: string;
114
+ id: string;
115
+ text: string;
116
+ url: string;
117
+ openInNewTab: boolean;
118
+ bold: boolean;
119
+ underline: boolean;
120
+ color?: string;
120
121
  }
121
122
  interface MenuBlock extends BaseBlock {
122
- type: "menu";
123
- items: MenuItemData[];
124
- fontSize: number;
125
- fontFamily?: string;
126
- color: string;
127
- linkColor?: string;
128
- textAlign: "left" | "center" | "right";
129
- separator: string;
130
- separatorColor: string;
131
- spacing: number;
123
+ type: "menu";
124
+ items: MenuItemData[];
125
+ fontSize: number;
126
+ fontFamily?: string;
127
+ color: string;
128
+ linkColor?: string;
129
+ textAlign: "left" | "center" | "right";
130
+ separator: string;
131
+ separatorColor: string;
132
+ spacing: number;
132
133
  }
133
134
  interface TableCellData {
134
- id: string;
135
- content: string;
135
+ id: string;
136
+ content: string;
136
137
  }
137
138
  interface TableRowData {
138
- id: string;
139
- cells: TableCellData[];
139
+ id: string;
140
+ cells: TableCellData[];
140
141
  }
141
142
  interface TableBlock extends BaseBlock {
142
- type: "table";
143
- rows: TableRowData[];
144
- hasHeaderRow: boolean;
145
- headerBackgroundColor?: string;
146
- borderColor: string;
147
- borderWidth: number;
148
- cellPadding: number;
149
- fontSize: number;
150
- fontFamily?: string;
151
- color: string;
152
- textAlign: "left" | "center" | "right";
143
+ type: "table";
144
+ rows: TableRowData[];
145
+ hasHeaderRow: boolean;
146
+ headerBackgroundColor?: string;
147
+ borderColor: string;
148
+ borderWidth: number;
149
+ cellPadding: number;
150
+ fontSize: number;
151
+ fontFamily?: string;
152
+ color: string;
153
+ textAlign: "left" | "center" | "right";
153
154
  }
154
155
  interface CountdownBlock extends BaseBlock {
155
- type: "countdown";
156
- targetDate: string;
157
- timezone: string;
158
- showDays: boolean;
159
- showHours: boolean;
160
- showMinutes: boolean;
161
- showSeconds: boolean;
162
- separator: ":" | "-" | " ";
163
- digitFontSize: number;
164
- digitColor: string;
165
- labelColor: string;
166
- labelFontSize: number;
167
- backgroundColor: string;
168
- fontFamily?: string;
169
- labelDays: string;
170
- labelHours: string;
171
- labelMinutes: string;
172
- labelSeconds: string;
173
- expiredMessage: string;
174
- expiredImageUrl: string;
175
- hideOnExpiry: boolean;
156
+ type: "countdown";
157
+ targetDate: string;
158
+ timezone: string;
159
+ showDays: boolean;
160
+ showHours: boolean;
161
+ showMinutes: boolean;
162
+ showSeconds: boolean;
163
+ separator: ":" | "-" | " ";
164
+ digitFontSize: number;
165
+ digitColor: string;
166
+ labelColor: string;
167
+ labelFontSize: number;
168
+ backgroundColor: string;
169
+ fontFamily?: string;
170
+ labelDays: string;
171
+ labelHours: string;
172
+ labelMinutes: string;
173
+ labelSeconds: string;
174
+ expiredMessage: string;
175
+ expiredImageUrl: string;
176
+ hideOnExpiry: boolean;
176
177
  }
177
178
  interface CustomBlock extends BaseBlock {
178
- type: "custom";
179
- customType: string;
180
- fieldValues: Record<string, unknown>;
181
- renderedHtml?: string;
182
- dataSourceFetched?: boolean;
179
+ type: "custom";
180
+ customType: string;
181
+ fieldValues: Record<string, unknown>;
182
+ renderedHtml?: string;
183
+ dataSourceFetched?: boolean;
183
184
  }
184
185
  type Block = SectionBlock | TitleBlock | ParagraphBlock | ImageBlock | ButtonBlock | DividerBlock | VideoBlock | SocialIconsBlock | SpacerBlock | HtmlBlock | MenuBlock | TableBlock | CountdownBlock | CustomBlock;
185
186
  type BlockType = Block["type"];
186
-
187
+ //#endregion
188
+ //#region src/guards.d.ts
187
189
  declare function isSection(block: Block): block is SectionBlock;
188
190
  declare function isTitle(block: Block): block is TitleBlock;
189
191
  declare function isParagraph(block: Block): block is ParagraphBlock;
@@ -198,22 +200,23 @@ declare function isMenu(block: Block): block is MenuBlock;
198
200
  declare function isTable(block: Block): block is TableBlock;
199
201
  declare function isCountdown(block: Block): block is CountdownBlock;
200
202
  declare function isCustomBlock(block: Block): block is CustomBlock;
201
-
203
+ //#endregion
204
+ //#region src/defaults.d.ts
202
205
  type BlockDefaultsFor<T> = Partial<Omit<T, "id" | "type">>;
203
206
  interface BlockDefaults {
204
- title?: BlockDefaultsFor<TitleBlock>;
205
- paragraph?: BlockDefaultsFor<ParagraphBlock>;
206
- image?: BlockDefaultsFor<ImageBlock>;
207
- button?: BlockDefaultsFor<ButtonBlock>;
208
- divider?: BlockDefaultsFor<DividerBlock>;
209
- section?: BlockDefaultsFor<SectionBlock>;
210
- video?: BlockDefaultsFor<VideoBlock>;
211
- social?: BlockDefaultsFor<SocialIconsBlock>;
212
- spacer?: BlockDefaultsFor<SpacerBlock>;
213
- html?: BlockDefaultsFor<HtmlBlock>;
214
- menu?: BlockDefaultsFor<MenuBlock>;
215
- table?: BlockDefaultsFor<TableBlock>;
216
- countdown?: BlockDefaultsFor<CountdownBlock>;
207
+ title?: BlockDefaultsFor<TitleBlock>;
208
+ paragraph?: BlockDefaultsFor<ParagraphBlock>;
209
+ image?: BlockDefaultsFor<ImageBlock>;
210
+ button?: BlockDefaultsFor<ButtonBlock>;
211
+ divider?: BlockDefaultsFor<DividerBlock>;
212
+ section?: BlockDefaultsFor<SectionBlock>;
213
+ video?: BlockDefaultsFor<VideoBlock>;
214
+ social?: BlockDefaultsFor<SocialIconsBlock>;
215
+ spacer?: BlockDefaultsFor<SpacerBlock>;
216
+ html?: BlockDefaultsFor<HtmlBlock>;
217
+ menu?: BlockDefaultsFor<MenuBlock>;
218
+ table?: BlockDefaultsFor<TableBlock>;
219
+ countdown?: BlockDefaultsFor<CountdownBlock>;
217
220
  }
218
221
  type TemplateDefaults = Partial<TemplateSettings>;
219
222
  declare const TITLE_BLOCK_DEFAULTS: BlockDefaultsFor<TitleBlock>;
@@ -232,128 +235,129 @@ declare const COUNTDOWN_BLOCK_DEFAULTS: BlockDefaultsFor<CountdownBlock>;
232
235
  declare const DEFAULT_BLOCK_DEFAULTS: Required<BlockDefaults>;
233
236
  declare const DEFAULT_TEMPLATE_DEFAULTS: TemplateDefaults;
234
237
  declare function deepMergeDefaults<T extends object>(base: T, overrides: Partial<T>): T;
235
-
238
+ //#endregion
239
+ //#region src/template.d.ts
236
240
  interface TemplateSettings {
237
- width: number;
238
- backgroundColor: string;
239
- fontFamily: string;
240
- preheaderText?: string;
241
- /**
242
- * BCP-47 language code for the rendered email's `<html lang>`. Drives
243
- * screen-reader pronunciation. Default `'en'` via `DEFAULT_TEMPLATE_DEFAULTS`.
244
- */
245
- locale: string;
241
+ width: number;
242
+ backgroundColor: string;
243
+ fontFamily: string;
244
+ preheaderText?: string;
245
+ /**
246
+ * BCP-47 language code for the rendered email's `<html lang>`. Drives
247
+ * screen-reader pronunciation. Default `'en'` via `DEFAULT_TEMPLATE_DEFAULTS`.
248
+ */
249
+ locale: string;
246
250
  }
247
251
  interface TemplateContent {
248
- blocks: Block[];
249
- settings: TemplateSettings;
252
+ blocks: Block[];
253
+ settings: TemplateSettings;
250
254
  }
251
255
  declare function createDefaultTemplateContent(defaultFontFamily?: string, templateDefaults?: TemplateDefaults): TemplateContent;
252
-
253
- /** @see https://templatical.com/docs/v1/custom-blocks */
254
-
256
+ //#endregion
257
+ //#region src/custom-blocks.d.ts
255
258
  type CustomBlockFieldType = "text" | "textarea" | "image" | "color" | "number" | "select" | "boolean" | "repeatable";
256
259
  interface CustomBlockFieldBase {
257
- key: string;
258
- label: string;
259
- required?: boolean;
260
- placeholder?: string;
261
- readOnly?: boolean;
260
+ key: string;
261
+ label: string;
262
+ required?: boolean;
263
+ placeholder?: string;
264
+ readOnly?: boolean;
262
265
  }
263
266
  interface CustomBlockTextField extends CustomBlockFieldBase {
264
- type: "text";
265
- default?: string;
267
+ type: "text";
268
+ default?: string;
266
269
  }
267
270
  interface CustomBlockTextareaField extends CustomBlockFieldBase {
268
- type: "textarea";
269
- default?: string;
271
+ type: "textarea";
272
+ default?: string;
270
273
  }
271
274
  interface CustomBlockImageField extends CustomBlockFieldBase {
272
- type: "image";
273
- default?: string;
275
+ type: "image";
276
+ default?: string;
274
277
  }
275
278
  interface CustomBlockColorField extends CustomBlockFieldBase {
276
- type: "color";
277
- default?: string;
279
+ type: "color";
280
+ default?: string;
278
281
  }
279
282
  interface CustomBlockNumberField extends CustomBlockFieldBase {
280
- type: "number";
281
- default?: number;
282
- min?: number;
283
- max?: number;
284
- step?: number;
283
+ type: "number";
284
+ default?: number;
285
+ min?: number;
286
+ max?: number;
287
+ step?: number;
285
288
  }
286
289
  interface SelectOption {
287
- label: string;
288
- value: string;
290
+ label: string;
291
+ value: string;
289
292
  }
290
293
  interface CustomBlockSelectField extends CustomBlockFieldBase {
291
- type: "select";
292
- options: SelectOption[];
293
- default?: string;
294
+ type: "select";
295
+ options: SelectOption[];
296
+ default?: string;
294
297
  }
295
298
  interface CustomBlockBooleanField extends CustomBlockFieldBase {
296
- type: "boolean";
297
- default?: boolean;
299
+ type: "boolean";
300
+ default?: boolean;
298
301
  }
299
302
  interface CustomBlockRepeatableField extends CustomBlockFieldBase {
300
- type: "repeatable";
301
- fields: Exclude<CustomBlockField, CustomBlockRepeatableField>[];
302
- default?: Record<string, unknown>[];
303
- minItems?: number;
304
- maxItems?: number;
303
+ type: "repeatable";
304
+ fields: Exclude<CustomBlockField, CustomBlockRepeatableField>[];
305
+ default?: Record<string, unknown>[];
306
+ minItems?: number;
307
+ maxItems?: number;
305
308
  }
306
309
  type CustomBlockField = CustomBlockTextField | CustomBlockTextareaField | CustomBlockImageField | CustomBlockColorField | CustomBlockNumberField | CustomBlockSelectField | CustomBlockBooleanField | CustomBlockRepeatableField;
307
310
  interface CustomBlockDefinition {
308
- type: string;
309
- name: string;
310
- icon?: string;
311
- description?: string;
312
- fields: CustomBlockField[];
313
- template: string;
314
- dataSource?: DataSourceConfig;
315
- /**
316
- * Default block styles applied when a new instance of this custom block is
317
- * created. Deep-merged over the built-in defaults — only specify the fields
318
- * you want to override. Controls both the editor canvas wrapper and the
319
- * rendered MJML/email output.
320
- *
321
- * @example
322
- * defaultStyles: {
323
- * padding: { top: 0, right: 0, bottom: 0, left: 0 },
324
- * }
325
- */
326
- defaultStyles?: Partial<BlockStyles>;
327
- /**
328
- * Optional CSS rules attached to this custom block definition. Emitted once
329
- * (deduped across instances) into `<mj-head><mj-style>…</mj-style></mj-head>`
330
- * in the rendered MJML, and adopted into the editor canvas (shadow root or
331
- * light-DOM mount) so authored responsive/hover/font behavior previews
332
- * inside the editor.
333
- *
334
- * Use this for media queries, hover states, or any CSS that should apply
335
- * once per definition rather than per block instance. Class names are not
336
- * scoped by the SDK — namespace them yourself (e.g. `.tplc-<type>-<el>`) to
337
- * avoid collisions with other definitions or built-in editor styles.
338
- *
339
- * @example
340
- * stylesheet: `
341
- * @media (max-width: 480px) {
342
- * .tplc-image-text-cell { display: block !important; width: 100% !important; }
343
- * }
344
- * `
345
- */
346
- stylesheet?: string;
311
+ type: string;
312
+ name: string;
313
+ icon?: string;
314
+ description?: string;
315
+ fields: CustomBlockField[];
316
+ template: string;
317
+ dataSource?: DataSourceConfig;
318
+ /**
319
+ * Default block styles applied when a new instance of this custom block is
320
+ * created. Deep-merged over the built-in defaults — only specify the fields
321
+ * you want to override. Controls both the editor canvas wrapper and the
322
+ * rendered MJML/email output.
323
+ *
324
+ * @example
325
+ * defaultStyles: {
326
+ * padding: { top: 0, right: 0, bottom: 0, left: 0 },
327
+ * }
328
+ */
329
+ defaultStyles?: Partial<BlockStyles>;
330
+ /**
331
+ * Optional CSS rules attached to this custom block definition. Emitted once
332
+ * (deduped across instances) into `<mj-head><mj-style>…</mj-style></mj-head>`
333
+ * in the rendered MJML, and adopted into the editor canvas (shadow root or
334
+ * light-DOM mount) so authored responsive/hover/font behavior previews
335
+ * inside the editor.
336
+ *
337
+ * Use this for media queries, hover states, or any CSS that should apply
338
+ * once per definition rather than per block instance. Class names are not
339
+ * scoped by the SDK — namespace them yourself (e.g. `.tplc-<type>-<el>`) to
340
+ * avoid collisions with other definitions or built-in editor styles.
341
+ *
342
+ * @example
343
+ * stylesheet: `
344
+ * @media (max-width: 480px) {
345
+ * .tplc-image-text-cell { display: block !important; width: 100% !important; }
346
+ * }
347
+ * `
348
+ */
349
+ stylesheet?: string;
347
350
  }
348
351
  interface DataSourceFetchContext {
349
- fieldValues: Record<string, unknown>;
350
- blockId: string;
352
+ fieldValues: Record<string, unknown>;
353
+ blockId: string;
351
354
  }
352
355
  interface DataSourceConfig {
353
- label: string;
354
- onFetch: (context: DataSourceFetchContext) => Promise<Record<string, unknown> | null>;
356
+ label: string;
357
+ onFetch: (context: DataSourceFetchContext) => Promise<Record<string, unknown> | null>;
355
358
  }
356
-
359
+ //#endregion
360
+ //#region src/factory.d.ts
357
361
  declare function generateId(): string;
358
362
  declare function createTitleBlock(partial?: Partial<TitleBlock>): TitleBlock;
359
363
  declare function createParagraphBlock(partial?: Partial<ParagraphBlock>): ParagraphBlock;
@@ -371,114 +375,117 @@ declare function createCountdownBlock(partial?: Partial<CountdownBlock>): Countd
371
375
  declare function createCustomBlock(definition: CustomBlockDefinition): CustomBlock;
372
376
  declare function createBlock(type: BlockType, blockDefaults?: BlockDefaults): Block;
373
377
  declare function cloneBlock(block: Block): Block;
374
-
378
+ //#endregion
379
+ //#region src/events.d.ts
375
380
  declare class EventEmitter<TEvents extends Record<string, unknown> = Record<string, unknown>> {
376
- private handlers;
377
- on<K extends keyof TEvents>(event: K, handler: (data: TEvents[K]) => void): () => void;
378
- off<K extends keyof TEvents>(event: K, handler: (data: TEvents[K]) => void): void;
379
- emit<K extends keyof TEvents>(event: K, data: TEvents[K]): void;
380
- removeAllListeners(event?: keyof TEvents): void;
381
- listenerCount(event: keyof TEvents): number;
382
- }
383
-
381
+ private handlers;
382
+ on<K extends keyof TEvents>(event: K, handler: (data: TEvents[K]) => void): () => void;
383
+ off<K extends keyof TEvents>(event: K, handler: (data: TEvents[K]) => void): void;
384
+ emit<K extends keyof TEvents>(event: K, data: TEvents[K]): void;
385
+ removeAllListeners(event?: keyof TEvents): void;
386
+ listenerCount(event: keyof TEvents): number;
387
+ }
388
+ //#endregion
389
+ //#region src/config.d.ts
384
390
  type ViewportSize = "desktop" | "mobile";
385
391
  type UiTheme = "light" | "dark" | "auto";
386
392
  interface CustomFont {
387
- name: string;
388
- url: string;
389
- fallback?: string;
393
+ name: string;
394
+ url: string;
395
+ fallback?: string;
390
396
  }
391
397
  interface FontsConfig {
392
- defaultFallback?: string;
393
- defaultFont?: string;
394
- customFonts?: CustomFont[];
398
+ defaultFallback?: string;
399
+ defaultFont?: string;
400
+ customFonts?: CustomFont[];
395
401
  }
396
402
  interface ExportResult {
397
- html: string;
398
- mjml: string;
403
+ html: string;
404
+ mjml: string;
399
405
  }
400
406
  interface MergeTag {
401
- label: string;
402
- value: string;
403
- /**
404
- * Optional grouping label used by the built-in merge tag picker to
405
- * section the list. When no tag in the configured array carries
406
- * `group`, the picker renders a plain flat list with no headers.
407
- * Ignored by the renderer and by typing-autocomplete.
408
- */
409
- group?: string;
410
- /**
411
- * Optional helper text shown beneath the tag in the built-in merge
412
- * tag picker. Not rendered anywhere else (toolbar, autocomplete,
413
- * MJML output) and not stored on the inserted document node.
414
- */
415
- description?: string;
407
+ label: string;
408
+ value: string;
409
+ /**
410
+ * Optional grouping label used by the built-in merge tag picker to
411
+ * section the list. When no tag in the configured array carries
412
+ * `group`, the picker renders a plain flat list with no headers.
413
+ * Ignored by the renderer and by typing-autocomplete.
414
+ */
415
+ group?: string;
416
+ /**
417
+ * Optional helper text shown beneath the tag in the built-in merge
418
+ * tag picker. Not rendered anywhere else (toolbar, autocomplete,
419
+ * MJML output) and not stored on the inserted document node.
420
+ */
421
+ description?: string;
416
422
  }
417
423
  interface MediaResult {
418
- url: string;
419
- alt?: string;
424
+ url: string;
425
+ alt?: string;
420
426
  }
421
427
  interface MergeTagsConfig {
422
- syntax?: SyntaxPresetName | SyntaxPreset;
423
- tags?: MergeTag[];
424
- onRequest?: () => Promise<MergeTag | null>;
425
- /**
426
- * Enables typing-based autocomplete in rich text fields. When the user
427
- * types the syntax opener (e.g. `{{`), a popup lists matching `tags`.
428
- *
429
- * Defaults to `true`. Effective only when `tags` is non-empty AND
430
- * `syntax` matches a built-in preset (custom regex syntaxes cannot be
431
- * mapped to a trigger string and silently disable autocomplete).
432
- */
433
- autocomplete?: boolean;
428
+ syntax?: SyntaxPresetName | SyntaxPreset;
429
+ tags?: MergeTag[];
430
+ onRequest?: () => Promise<MergeTag | null>;
431
+ /**
432
+ * Enables typing-based autocomplete in rich text fields. When the user
433
+ * types the syntax opener (e.g. `{{`), a popup lists matching `tags`.
434
+ *
435
+ * Defaults to `true`. Effective only when `tags` is non-empty AND
436
+ * `syntax` matches a built-in preset (custom regex syntaxes cannot be
437
+ * mapped to a trigger string and silently disable autocomplete).
438
+ */
439
+ autocomplete?: boolean;
434
440
  }
435
441
  interface DisplayCondition {
436
- label: string;
437
- before: string;
438
- after: string;
439
- group?: string;
440
- description?: string;
442
+ label: string;
443
+ before: string;
444
+ after: string;
445
+ group?: string;
446
+ description?: string;
441
447
  }
442
448
  interface DisplayConditionsConfig {
443
- conditions: DisplayCondition[];
444
- allowCustom?: boolean;
449
+ conditions: DisplayCondition[];
450
+ allowCustom?: boolean;
445
451
  }
446
452
  interface ThemeOverrides {
447
- bg?: string;
448
- bgElevated?: string;
449
- bgHover?: string;
450
- bgActive?: string;
451
- border?: string;
452
- borderLight?: string;
453
- text?: string;
454
- textMuted?: string;
455
- textDim?: string;
456
- primary?: string;
457
- primaryHover?: string;
458
- primaryLight?: string;
459
- secondary?: string;
460
- secondaryHover?: string;
461
- secondaryLight?: string;
462
- success?: string;
463
- successLight?: string;
464
- warning?: string;
465
- warningLight?: string;
466
- danger?: string;
467
- dangerLight?: string;
468
- canvasBg?: string;
469
- dark?: Omit<ThemeOverrides, "dark">;
453
+ bg?: string;
454
+ bgElevated?: string;
455
+ bgHover?: string;
456
+ bgActive?: string;
457
+ border?: string;
458
+ borderLight?: string;
459
+ text?: string;
460
+ textMuted?: string;
461
+ textDim?: string;
462
+ primary?: string;
463
+ primaryHover?: string;
464
+ primaryLight?: string;
465
+ secondary?: string;
466
+ secondaryHover?: string;
467
+ secondaryLight?: string;
468
+ success?: string;
469
+ successLight?: string;
470
+ warning?: string;
471
+ warningLight?: string;
472
+ danger?: string;
473
+ dangerLight?: string;
474
+ canvasBg?: string;
475
+ dark?: Omit<ThemeOverrides, "dark">;
470
476
  }
471
477
  declare class SdkError extends Error {
472
- readonly statusCode?: number | undefined;
473
- constructor(message: string, statusCode?: number | undefined);
474
- get isNotFound(): boolean;
475
- get isUnauthorized(): boolean;
476
- get isServerError(): boolean;
477
- }
478
-
478
+ readonly statusCode?: number | undefined;
479
+ constructor(message: string, statusCode?: number | undefined);
480
+ get isNotFound(): boolean;
481
+ get isUnauthorized(): boolean;
482
+ get isServerError(): boolean;
483
+ }
484
+ //#endregion
485
+ //#region src/merge-tags.d.ts
479
486
  interface SyntaxPreset {
480
- value: RegExp;
481
- logic: RegExp;
487
+ value: RegExp;
488
+ logic: RegExp;
482
489
  }
483
490
  type SyntaxPresetName = "liquid" | "handlebars" | "mailchimp" | "ampscript";
484
491
  declare const SYNTAX_PRESETS: Record<SyntaxPresetName, SyntaxPreset>;
@@ -497,331 +504,334 @@ declare function restoreMergeTagMarkup(html: string, mergeTags: MergeTag[], synt
497
504
  declare function isLogicMergeTagValue(value: string, syntax: SyntaxPreset): boolean;
498
505
  declare function getLogicMergeTagKeyword(value: string, syntax: SyntaxPreset): string;
499
506
  declare function resolveHtmlLogicMergeTagLabels(html: string, syntax: SyntaxPreset): string;
500
-
507
+ //#endregion
508
+ //#region ../media-library/src/types.d.ts
501
509
  type MediaCategory = "images" | "documents" | "videos" | "audio";
502
510
  interface MediaItem {
503
- id: string;
504
- filename: string;
505
- mime_type: string;
506
- size: number;
507
- url: string;
508
- small_url: string | null;
509
- medium_url: string | null;
510
- large_url: string | null;
511
- folder_id: string | null;
512
- conversions_generated: boolean;
513
- width: number | null;
514
- height: number | null;
515
- alt_text: string;
516
- created_at: string;
517
- updated_at: string;
511
+ id: string;
512
+ filename: string;
513
+ mime_type: string;
514
+ size: number;
515
+ url: string;
516
+ small_url: string | null;
517
+ medium_url: string | null;
518
+ large_url: string | null;
519
+ folder_id: string | null;
520
+ conversions_generated: boolean;
521
+ width: number | null;
522
+ height: number | null;
523
+ alt_text: string;
524
+ created_at: string;
525
+ updated_at: string;
518
526
  }
519
527
  interface MediaRequestContext {
520
- accept?: MediaCategory[];
528
+ accept?: MediaCategory[];
521
529
  }
522
530
  interface StorageInfo {
523
- used_bytes: number;
524
- limit_bytes: number;
531
+ used_bytes: number;
532
+ limit_bytes: number;
525
533
  }
526
534
  interface MediaCategoryData {
527
- mime_types: string[];
528
- extensions: string[];
535
+ mime_types: string[];
536
+ extensions: string[];
529
537
  }
530
538
  interface MediaConfig {
531
- use_media_library: boolean;
532
- categories: Record<string, MediaCategoryData>;
533
- max_file_size: number;
539
+ use_media_library: boolean;
540
+ categories: Record<string, MediaCategoryData>;
541
+ max_file_size: number;
534
542
  }
535
-
543
+ //#endregion
544
+ //#region src/cloud.d.ts
536
545
  interface Template {
537
- id: string;
538
- content: TemplateContent;
546
+ id: string;
547
+ content: TemplateContent;
539
548
  }
540
549
  interface TemplateSnapshot {
541
- id: string;
542
- template_id: string;
543
- content: TemplateContent;
544
- is_autosave: boolean;
545
- created_at: string;
550
+ id: string;
551
+ template_id: string;
552
+ content: TemplateContent;
553
+ is_autosave: boolean;
554
+ created_at: string;
546
555
  }
547
556
  interface Comment {
548
- id: string;
549
- template_id: string;
550
- block_id: string | null;
551
- parent_id: string | null;
552
- body: string;
553
- author_identifier: string;
554
- author_name: string;
555
- resolved_at: string | null;
556
- resolved_by_identifier: string | null;
557
- resolved_by_name: string | null;
558
- created_at: string;
559
- updated_at: string;
560
- replies: Comment[];
557
+ id: string;
558
+ template_id: string;
559
+ block_id: string | null;
560
+ parent_id: string | null;
561
+ body: string;
562
+ author_identifier: string;
563
+ author_name: string;
564
+ resolved_at: string | null;
565
+ resolved_by_identifier: string | null;
566
+ resolved_by_name: string | null;
567
+ created_at: string;
568
+ updated_at: string;
569
+ replies: Comment[];
561
570
  }
562
571
  type CommentThread = Comment;
563
572
  type CommentEventType = "created" | "updated" | "deleted" | "resolved" | "unresolved";
564
573
  interface CommentEvent {
565
- type: CommentEventType;
566
- comment: Comment;
574
+ type: CommentEventType;
575
+ comment: Comment;
567
576
  }
568
577
  interface SavedModule {
569
- id: string;
570
- name: string;
571
- content: Block[];
572
- created_at: string;
573
- updated_at: string;
578
+ id: string;
579
+ name: string;
580
+ content: Block[];
581
+ created_at: string;
582
+ updated_at: string;
574
583
  }
575
584
  type FindingSeverity = "high" | "medium" | "low";
576
585
  type ScoringCategory = "spam" | "readability" | "accessibility" | "bestPractices";
577
586
  interface ScoringFinding {
578
- id: string;
579
- severity: FindingSeverity;
580
- message: string;
581
- blockId: string | null;
582
- category: ScoringCategory;
583
- suggestion: string;
587
+ id: string;
588
+ severity: FindingSeverity;
589
+ message: string;
590
+ blockId: string | null;
591
+ category: ScoringCategory;
592
+ suggestion: string;
584
593
  }
585
594
  interface CategoryScore {
586
- score: number;
587
- findings: ScoringFinding[];
595
+ score: number;
596
+ findings: ScoringFinding[];
588
597
  }
589
598
  interface ScoringResult {
590
- score: number;
591
- categories: Record<ScoringCategory, CategoryScore>;
599
+ score: number;
600
+ categories: Record<ScoringCategory, CategoryScore>;
592
601
  }
593
602
  interface HealthCheckResult {
594
- api: {
595
- ok: boolean;
596
- latency: number;
597
- };
598
- websocket: {
599
- ok: boolean;
600
- error?: string;
601
- };
602
- auth: {
603
- ok: boolean;
604
- error?: string;
605
- };
606
- overall: boolean;
603
+ api: {
604
+ ok: boolean;
605
+ latency: number;
606
+ };
607
+ websocket: {
608
+ ok: boolean;
609
+ error?: string;
610
+ };
611
+ auth: {
612
+ ok: boolean;
613
+ error?: string;
614
+ };
615
+ overall: boolean;
607
616
  }
608
617
  interface TokenData {
609
- token: string;
610
- expires_at: number;
611
- project_id: string;
612
- tenant: string;
613
- test_email?: {
614
- allowed_emails: string[];
615
- signature: string;
616
- };
617
- user?: {
618
- id: string;
619
- name: string;
620
- signature: string;
621
- };
618
+ token: string;
619
+ expires_at: number;
620
+ project_id: string;
621
+ tenant: string;
622
+ test_email?: {
623
+ allowed_emails: string[];
624
+ signature: string;
625
+ };
626
+ user?: {
627
+ id: string;
628
+ name: string;
629
+ signature: string;
630
+ };
622
631
  }
623
632
  interface AuthRequestOptions {
624
- method?: "GET" | "POST";
625
- headers?: Record<string, string>;
626
- body?: Record<string, unknown>;
627
- credentials?: RequestCredentials;
633
+ method?: "GET" | "POST";
634
+ headers?: Record<string, string>;
635
+ body?: Record<string, unknown>;
636
+ credentials?: RequestCredentials;
628
637
  }
629
638
  interface AuthConfig {
630
- url: string;
631
- baseUrl?: string;
632
- requestOptions?: AuthRequestOptions;
633
- onError?: (error: Error) => void;
639
+ url: string;
640
+ baseUrl?: string;
641
+ requestOptions?: AuthRequestOptions;
642
+ onError?: (error: Error) => void;
634
643
  }
635
644
  interface TestEmailConfig {
636
- allowedEmails: string[];
637
- signature: string;
645
+ allowedEmails: string[];
646
+ signature: string;
638
647
  }
639
648
  interface UserConfig {
640
- id: string;
641
- name: string;
642
- signature: string;
649
+ id: string;
650
+ name: string;
651
+ signature: string;
643
652
  }
644
653
  interface DirectAuthConfig {
645
- mode: "direct";
646
- clientId: string;
647
- clientSecret: string;
648
- tenant: string;
649
- baseUrl?: string;
654
+ mode: "direct";
655
+ clientId: string;
656
+ clientSecret: string;
657
+ tenant: string;
658
+ baseUrl?: string;
650
659
  }
651
660
  interface ProxyAuthConfig {
652
- mode: "proxy";
653
- url: string;
654
- baseUrl?: string;
655
- requestOptions?: AuthRequestOptions;
661
+ mode: "proxy";
662
+ url: string;
663
+ baseUrl?: string;
664
+ requestOptions?: AuthRequestOptions;
656
665
  }
657
666
  type SdkAuthConfig = DirectAuthConfig | ProxyAuthConfig;
658
667
  interface Collaborator {
659
- id: string;
660
- name: string;
661
- color: string;
662
- selectedBlockId: string | null;
668
+ id: string;
669
+ name: string;
670
+ color: string;
671
+ selectedBlockId: string | null;
663
672
  }
664
673
  type McpOperation = "add_block" | "update_block" | "delete_block" | "move_block" | "update_settings" | "set_content" | "update_block_style";
665
674
  interface McpOperationPayload {
666
- operation: McpOperation;
667
- data: Record<string, unknown>;
668
- timestamp: number;
675
+ operation: McpOperation;
676
+ data: Record<string, unknown>;
677
+ timestamp: number;
669
678
  }
670
679
  interface SaveResult {
671
- templateId: string;
672
- html: string;
673
- mjml: string;
674
- content: TemplateContent;
680
+ templateId: string;
681
+ html: string;
682
+ mjml: string;
683
+ content: TemplateContent;
675
684
  }
676
685
  interface AiConfig {
677
- chat?: boolean;
678
- scoring?: boolean;
679
- designToTemplate?: boolean;
680
- rewrite?: boolean;
686
+ chat?: boolean;
687
+ scoring?: boolean;
688
+ designToTemplate?: boolean;
689
+ rewrite?: boolean;
681
690
  }
682
691
  interface McpConfig {
683
- enabled: boolean;
684
- onOperation?: (payload: McpOperationPayload) => void;
692
+ enabled: boolean;
693
+ onOperation?: (payload: McpOperationPayload) => void;
685
694
  }
686
695
  interface CollaborationConfig {
687
- enabled: boolean;
688
- onCollaboratorJoined?: (collaborator: Collaborator) => void;
689
- onCollaboratorLeft?: (collaborator: Collaborator) => void;
690
- onBlockLocked?: (event: {
691
- blockId: string;
692
- collaborator: Collaborator;
693
- }) => void;
694
- onBlockUnlocked?: (event: {
695
- blockId: string;
696
- collaborator: Collaborator;
697
- }) => void;
696
+ enabled: boolean;
697
+ onCollaboratorJoined?: (collaborator: Collaborator) => void;
698
+ onCollaboratorLeft?: (collaborator: Collaborator) => void;
699
+ onBlockLocked?: (event: {
700
+ blockId: string;
701
+ collaborator: Collaborator;
702
+ }) => void;
703
+ onBlockUnlocked?: (event: {
704
+ blockId: string;
705
+ collaborator: Collaborator;
706
+ }) => void;
698
707
  }
699
708
  interface WebSocketServerConfig {
700
- host: string;
701
- port: number;
702
- app_key: string;
709
+ host: string;
710
+ port: number;
711
+ app_key: string;
703
712
  }
704
713
  interface TemplaticalConfig {
705
- container: string | HTMLElement;
706
- auth: Omit<AuthConfig, "onError">;
707
- baseUrl?: string;
708
- theme?: ThemeOverrides;
709
- locale?: string;
710
- ai?: AiConfig | false;
711
- onCreate?: (template: Template) => void;
712
- onLoad?: (template: Template) => void;
713
- onSave?: (result: SaveResult) => void;
714
- onError?: (error: Error) => void;
715
- onUnmount?: () => void;
716
- mergeTags?: MergeTagsConfig;
717
- onRequestMedia?: (context: MediaRequestContext) => Promise<MediaItem | null>;
718
- displayConditions?: DisplayConditionsConfig;
719
- fonts?: FontsConfig;
720
- autoSave?: boolean;
721
- autoSaveDebounce?: number;
722
- onBeforeTestEmail?: (html: string) => string | Promise<string>;
723
- customBlocks?: CustomBlockDefinition[];
724
- commenting?: boolean;
725
- onComment?: (event: CommentEvent) => void;
726
- mcp?: McpConfig;
727
- collaboration?: CollaborationConfig;
728
- modules?: boolean;
714
+ container: string | HTMLElement;
715
+ auth: Omit<AuthConfig, "onError">;
716
+ baseUrl?: string;
717
+ theme?: ThemeOverrides;
718
+ locale?: string;
719
+ ai?: AiConfig | false;
720
+ onCreate?: (template: Template) => void;
721
+ onLoad?: (template: Template) => void;
722
+ onSave?: (result: SaveResult) => void;
723
+ onError?: (error: Error) => void;
724
+ onUnmount?: () => void;
725
+ mergeTags?: MergeTagsConfig;
726
+ onRequestMedia?: (context: MediaRequestContext) => Promise<MediaItem | null>;
727
+ displayConditions?: DisplayConditionsConfig;
728
+ fonts?: FontsConfig;
729
+ autoSave?: boolean;
730
+ autoSaveDebounce?: number;
731
+ onBeforeTestEmail?: (html: string) => string | Promise<string>;
732
+ customBlocks?: CustomBlockDefinition[];
733
+ commenting?: boolean;
734
+ onComment?: (event: CommentEvent) => void;
735
+ mcp?: McpConfig;
736
+ collaboration?: CollaborationConfig;
737
+ modules?: boolean;
729
738
  }
730
739
  interface TemplaticalInstance {
731
- setTheme(theme: ThemeOverrides): void;
732
- create(content?: TemplateContent): Promise<Template>;
733
- load(templateId: string): Promise<Template>;
734
- save(): Promise<SaveResult>;
735
- unmount(): void;
740
+ setTheme(theme: ThemeOverrides): void;
741
+ create(content?: TemplateContent): Promise<Template>;
742
+ load(templateId: string): Promise<Template>;
743
+ save(): Promise<SaveResult>;
744
+ unmount(): void;
736
745
  }
737
746
  interface EditorState {
738
- template: Template | null;
739
- content: TemplateContent;
740
- selectedBlockId: string | null;
741
- viewport: ViewportSize;
742
- darkMode: boolean;
743
- previewMode: boolean;
744
- isDirty: boolean;
745
- isSaving: boolean;
746
- isLoading: boolean;
747
- uiTheme: UiTheme;
747
+ template: Template | null;
748
+ content: TemplateContent;
749
+ selectedBlockId: string | null;
750
+ viewport: ViewportSize;
751
+ darkMode: boolean;
752
+ previewMode: boolean;
753
+ isDirty: boolean;
754
+ isSaving: boolean;
755
+ isLoading: boolean;
756
+ uiTheme: UiTheme;
748
757
  }
749
758
  interface ApiResponse<T> {
750
- data: T;
759
+ data: T;
751
760
  }
752
761
  interface ApiError {
753
- message: string;
754
- errors?: Record<string, string[]>;
762
+ message: string;
763
+ errors?: Record<string, string[]>;
755
764
  }
756
765
  interface PlanFeatures {
757
- media_folders: boolean;
758
- import_from_url: boolean;
759
- auto_save: boolean;
760
- custom_fonts: boolean;
761
- theme_customization: boolean;
762
- html_block: boolean;
763
- export_mjml: boolean;
764
- white_label: boolean;
765
- test_email: boolean;
766
- ai_generation: boolean;
767
- custom_blocks: boolean;
768
- commenting: boolean;
769
- collaboration: boolean;
770
- saved_modules: boolean;
771
- headless_sdk: boolean;
772
- pluggable_media: boolean;
766
+ media_folders: boolean;
767
+ import_from_url: boolean;
768
+ auto_save: boolean;
769
+ custom_fonts: boolean;
770
+ theme_customization: boolean;
771
+ html_block: boolean;
772
+ export_mjml: boolean;
773
+ white_label: boolean;
774
+ test_email: boolean;
775
+ ai_generation: boolean;
776
+ custom_blocks: boolean;
777
+ commenting: boolean;
778
+ collaboration: boolean;
779
+ saved_modules: boolean;
780
+ headless_sdk: boolean;
781
+ pluggable_media: boolean;
773
782
  }
774
783
  interface PlanLimits {
775
- max_file_size_mb: number;
776
- max_templates: number | null;
777
- media_categories: string[];
778
- storage_limit_bytes: number;
784
+ max_file_size_mb: number;
785
+ max_templates: number | null;
786
+ media_categories: string[];
787
+ storage_limit_bytes: number;
779
788
  }
780
789
  interface PlanConfig {
781
- features: PlanFeatures;
782
- limits: PlanLimits;
783
- template_count: number;
784
- plan: string;
785
- media: MediaConfig;
786
- storage: StorageInfo;
787
- websocket: WebSocketServerConfig;
788
- accessibility?: {
789
- blockOnError?: boolean;
790
- };
790
+ features: PlanFeatures;
791
+ limits: PlanLimits;
792
+ template_count: number;
793
+ plan: string;
794
+ media: MediaConfig;
795
+ storage: StorageInfo;
796
+ websocket: WebSocketServerConfig;
797
+ accessibility?: {
798
+ blockOnError?: boolean;
799
+ };
791
800
  }
792
801
  interface AiChatMessage {
793
- id: string;
794
- role: "user" | "assistant";
795
- content: string;
796
- timestamp: number;
802
+ id: string;
803
+ role: "user" | "assistant";
804
+ content: string;
805
+ timestamp: number;
797
806
  }
798
807
  interface CreateCommentData {
799
- body: string;
800
- blockId?: string;
801
- parentId?: string;
802
- authorIdentifier: string;
803
- authorName: string;
808
+ body: string;
809
+ blockId?: string;
810
+ parentId?: string;
811
+ authorIdentifier: string;
812
+ authorName: string;
804
813
  }
805
814
  interface UpdateCommentData {
806
- body: string;
815
+ body: string;
807
816
  }
808
817
  interface AiGenerateOptions {
809
- conversationId?: string;
818
+ conversationId?: string;
810
819
  }
811
820
  interface AiStreamEvent {
812
- type: "text" | "done" | "error";
813
- text?: string;
814
- content?: TemplateContent;
815
- conversationId?: string;
816
- error?: string;
821
+ type: "text" | "done" | "error";
822
+ text?: string;
823
+ content?: TemplateContent;
824
+ conversationId?: string;
825
+ error?: string;
817
826
  }
818
827
  interface RewriteData {
819
- text: string;
820
- instruction: string;
821
- blockId: string;
828
+ text: string;
829
+ instruction: string;
830
+ blockId: string;
822
831
  }
823
832
  interface AiScoreOptions {
824
- fixFindingId?: string;
833
+ fixFindingId?: string;
825
834
  }
826
-
835
+ //#endregion
827
836
  export { type AiChatMessage, type AiConfig, type AiGenerateOptions, type AiScoreOptions, type AiStreamEvent, type ApiError, type ApiResponse, type AuthConfig, type AuthRequestOptions, BUTTON_BLOCK_DEFAULTS, type BaseBlock, type Block, type BlockDefaults, type BlockStyles, type BlockType, type BlockVisibility, type ButtonBlock, COUNTDOWN_BLOCK_DEFAULTS, type CategoryScore, type CollaborationConfig, type Collaborator, type ColumnLayout, type Comment, type CommentEvent, type CommentEventType, type CommentThread, type CountdownBlock, type CreateCommentData, type CustomBlock, type CustomBlockBooleanField, type CustomBlockColorField, type CustomBlockDefinition, type CustomBlockField, type CustomBlockFieldBase, type CustomBlockFieldType, type CustomBlockImageField, type CustomBlockNumberField, type CustomBlockRepeatableField, type CustomBlockSelectField, type CustomBlockTextField, type CustomBlockTextareaField, type CustomFont, DEFAULT_BLOCK_DEFAULTS, DEFAULT_TEMPLATE_DEFAULTS, DIVIDER_BLOCK_DEFAULTS, type DataSourceConfig, type DataSourceFetchContext, type DirectAuthConfig, type DisplayCondition, type DisplayConditionsConfig, type DividerBlock, type EditorState, EventEmitter, type ExportResult, type FindingSeverity, type FontsConfig, HEADING_LEVEL_FONT_SIZE, HTML_BLOCK_DEFAULTS, type HeadingLevel, type HealthCheckResult, type HtmlBlock, IMAGE_BLOCK_DEFAULTS, type ImageBlock, MENU_BLOCK_DEFAULTS, type McpConfig, type McpOperation, type McpOperationPayload, type MediaResult, type MenuBlock, type MenuItemData, type MergeTag, type MergeTagsConfig, PARAGRAPH_BLOCK_DEFAULTS, type ParagraphBlock, type PlanConfig, type PlanFeatures, type PlanLimits, type ProxyAuthConfig, type RewriteData, SECTION_BLOCK_DEFAULTS, SOCIAL_ICONS_BLOCK_DEFAULTS, SPACER_BLOCK_DEFAULTS, SYNTAX_PRESETS, type SaveResult, type SavedModule, type ScoringCategory, type ScoringFinding, type ScoringResult, type SdkAuthConfig, SdkError, type SectionBlock, type SelectOption, type SocialIcon, type SocialIconSize, type SocialIconStyle, type SocialIconsBlock, type SocialPlatform, type SpacerBlock, type SpacingValue, type SyntaxPreset, type SyntaxPresetName, TABLE_BLOCK_DEFAULTS, TITLE_BLOCK_DEFAULTS, type TableBlock, type TableCellData, type TableRowData, type Template, type TemplateContent, type TemplateDefaults, type TemplateSettings, type TemplateSnapshot, type TemplaticalConfig, type TemplaticalInstance, type TestEmailConfig, type ThemeOverrides, type TitleBlock, type TokenData, type UiTheme, type UpdateCommentData, type UserConfig, VIDEO_BLOCK_DEFAULTS, type VideoBlock, type ViewportSize, type WebSocketServerConfig, cloneBlock, containsMergeTag, createBlock, createButtonBlock, createCountdownBlock, createCustomBlock, createDefaultTemplateContent, createDividerBlock, createHtmlBlock, createImageBlock, createMenuBlock, createParagraphBlock, createSectionBlock, createSocialIconsBlock, createSpacerBlock, createTableBlock, createTitleBlock, createVideoBlock, deepMergeDefaults, generateId, getLogicMergeTagKeyword, getMergeTagLabel, getSyntaxTriggerChar, isButton, isCountdown, isCustomBlock, isDivider, isHtml, isImage, isLogicMergeTagValue, isMenu, isMergeTagValue, isParagraph, isSection, isSocialIcons, isSpacer, isTable, isTitle, isVideo, resolveHtmlLogicMergeTagLabels, resolveHtmlMergeTagLabels, resolveSyntax, restoreMergeTagMarkup };
837
+ //# sourceMappingURL=index.d.ts.map