@templatical/types 0.0.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.cjs ADDED
@@ -0,0 +1,697 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ BUTTON_BLOCK_DEFAULTS: () => BUTTON_BLOCK_DEFAULTS,
24
+ COUNTDOWN_BLOCK_DEFAULTS: () => COUNTDOWN_BLOCK_DEFAULTS,
25
+ DEFAULT_BLOCK_DEFAULTS: () => DEFAULT_BLOCK_DEFAULTS,
26
+ DEFAULT_TEMPLATE_DEFAULTS: () => DEFAULT_TEMPLATE_DEFAULTS,
27
+ DIVIDER_BLOCK_DEFAULTS: () => DIVIDER_BLOCK_DEFAULTS,
28
+ EventEmitter: () => EventEmitter,
29
+ HTML_BLOCK_DEFAULTS: () => HTML_BLOCK_DEFAULTS,
30
+ IMAGE_BLOCK_DEFAULTS: () => IMAGE_BLOCK_DEFAULTS,
31
+ MENU_BLOCK_DEFAULTS: () => MENU_BLOCK_DEFAULTS,
32
+ SECTION_BLOCK_DEFAULTS: () => SECTION_BLOCK_DEFAULTS,
33
+ SOCIAL_ICONS_BLOCK_DEFAULTS: () => SOCIAL_ICONS_BLOCK_DEFAULTS,
34
+ SPACER_BLOCK_DEFAULTS: () => SPACER_BLOCK_DEFAULTS,
35
+ SYNTAX_PRESETS: () => SYNTAX_PRESETS,
36
+ SdkError: () => SdkError,
37
+ TABLE_BLOCK_DEFAULTS: () => TABLE_BLOCK_DEFAULTS,
38
+ TEXT_BLOCK_DEFAULTS: () => TEXT_BLOCK_DEFAULTS,
39
+ VIDEO_BLOCK_DEFAULTS: () => VIDEO_BLOCK_DEFAULTS,
40
+ cloneBlock: () => cloneBlock,
41
+ containsMergeTag: () => containsMergeTag,
42
+ createBlock: () => createBlock,
43
+ createButtonBlock: () => createButtonBlock,
44
+ createCountdownBlock: () => createCountdownBlock,
45
+ createCustomBlock: () => createCustomBlock,
46
+ createDefaultTemplateContent: () => createDefaultTemplateContent,
47
+ createDividerBlock: () => createDividerBlock,
48
+ createHtmlBlock: () => createHtmlBlock,
49
+ createImageBlock: () => createImageBlock,
50
+ createMenuBlock: () => createMenuBlock,
51
+ createSectionBlock: () => createSectionBlock,
52
+ createSocialIconsBlock: () => createSocialIconsBlock,
53
+ createSpacerBlock: () => createSpacerBlock,
54
+ createTableBlock: () => createTableBlock,
55
+ createTextBlock: () => createTextBlock,
56
+ createVideoBlock: () => createVideoBlock,
57
+ deepMergeDefaults: () => deepMergeDefaults,
58
+ generateId: () => generateId,
59
+ getLogicMergeTagKeyword: () => getLogicMergeTagKeyword,
60
+ getMergeTagLabel: () => getMergeTagLabel,
61
+ isButton: () => isButton,
62
+ isCountdown: () => isCountdown,
63
+ isCustomBlock: () => isCustomBlock,
64
+ isDivider: () => isDivider,
65
+ isHtml: () => isHtml,
66
+ isImage: () => isImage,
67
+ isLogicMergeTagValue: () => isLogicMergeTagValue,
68
+ isMenu: () => isMenu,
69
+ isMergeTagValue: () => isMergeTagValue,
70
+ isSection: () => isSection,
71
+ isSocialIcons: () => isSocialIcons,
72
+ isSpacer: () => isSpacer,
73
+ isTable: () => isTable,
74
+ isText: () => isText,
75
+ isVideo: () => isVideo,
76
+ resolveHtmlLogicMergeTagLabels: () => resolveHtmlLogicMergeTagLabels,
77
+ resolveHtmlMergeTagLabels: () => resolveHtmlMergeTagLabels,
78
+ resolveSyntax: () => resolveSyntax,
79
+ restoreMergeTagMarkup: () => restoreMergeTagMarkup
80
+ });
81
+ module.exports = __toCommonJS(index_exports);
82
+
83
+ // src/guards.ts
84
+ function isSection(block) {
85
+ return block.type === "section";
86
+ }
87
+ function isText(block) {
88
+ return block.type === "text";
89
+ }
90
+ function isImage(block) {
91
+ return block.type === "image";
92
+ }
93
+ function isButton(block) {
94
+ return block.type === "button";
95
+ }
96
+ function isDivider(block) {
97
+ return block.type === "divider";
98
+ }
99
+ function isVideo(block) {
100
+ return block.type === "video";
101
+ }
102
+ function isSocialIcons(block) {
103
+ return block.type === "social";
104
+ }
105
+ function isSpacer(block) {
106
+ return block.type === "spacer";
107
+ }
108
+ function isHtml(block) {
109
+ return block.type === "html";
110
+ }
111
+ function isMenu(block) {
112
+ return block.type === "menu";
113
+ }
114
+ function isTable(block) {
115
+ return block.type === "table";
116
+ }
117
+ function isCountdown(block) {
118
+ return block.type === "countdown";
119
+ }
120
+ function isCustomBlock(block) {
121
+ return block.type === "custom";
122
+ }
123
+
124
+ // src/defaults.ts
125
+ var TEXT_BLOCK_DEFAULTS = {
126
+ content: "<p>Enter your text here</p>",
127
+ fontSize: 16,
128
+ color: "#1a1a1a",
129
+ textAlign: "left",
130
+ fontWeight: "normal"
131
+ };
132
+ var IMAGE_BLOCK_DEFAULTS = {
133
+ src: "",
134
+ alt: "",
135
+ width: "full",
136
+ align: "center"
137
+ };
138
+ var BUTTON_BLOCK_DEFAULTS = {
139
+ text: "Click Here",
140
+ url: "",
141
+ backgroundColor: "#333333",
142
+ textColor: "#ffffff",
143
+ borderRadius: 6,
144
+ fontSize: 15,
145
+ buttonPadding: { top: 12, right: 24, bottom: 12, left: 24 }
146
+ };
147
+ var DIVIDER_BLOCK_DEFAULTS = {
148
+ lineStyle: "solid",
149
+ color: "#e0e0e0",
150
+ thickness: 1,
151
+ width: "full"
152
+ };
153
+ var SECTION_BLOCK_DEFAULTS = {
154
+ columns: "1"
155
+ };
156
+ var VIDEO_BLOCK_DEFAULTS = {
157
+ url: "",
158
+ thumbnailUrl: "",
159
+ alt: "Video",
160
+ width: "full",
161
+ align: "center"
162
+ };
163
+ var SOCIAL_ICONS_BLOCK_DEFAULTS = {
164
+ iconStyle: "solid",
165
+ iconSize: "medium",
166
+ spacing: 10,
167
+ align: "center"
168
+ };
169
+ var SPACER_BLOCK_DEFAULTS = {
170
+ height: 24
171
+ };
172
+ var HTML_BLOCK_DEFAULTS = {
173
+ content: ""
174
+ };
175
+ var MENU_BLOCK_DEFAULTS = {
176
+ fontSize: 15,
177
+ color: "#1a1a1a",
178
+ textAlign: "center",
179
+ separator: "|",
180
+ separatorColor: "#e0e0e0",
181
+ spacing: 10
182
+ };
183
+ var TABLE_BLOCK_DEFAULTS = {
184
+ hasHeaderRow: true,
185
+ borderColor: "#e0e0e0",
186
+ borderWidth: 1,
187
+ cellPadding: 8,
188
+ fontSize: 15,
189
+ color: "#1a1a1a",
190
+ textAlign: "left"
191
+ };
192
+ var COUNTDOWN_BLOCK_DEFAULTS = {
193
+ targetDate: "",
194
+ timezone: "UTC",
195
+ showDays: true,
196
+ showHours: true,
197
+ showMinutes: true,
198
+ showSeconds: true,
199
+ separator: ":",
200
+ digitFontSize: 32,
201
+ digitColor: "#1a1a1a",
202
+ labelColor: "#6b7280",
203
+ labelFontSize: 12,
204
+ backgroundColor: "#ffffff",
205
+ labelDays: "Days",
206
+ labelHours: "Hours",
207
+ labelMinutes: "Minutes",
208
+ labelSeconds: "Seconds",
209
+ expiredMessage: "This offer has expired",
210
+ expiredImageUrl: "",
211
+ hideOnExpiry: false
212
+ };
213
+ var DEFAULT_BLOCK_DEFAULTS = {
214
+ text: TEXT_BLOCK_DEFAULTS,
215
+ image: IMAGE_BLOCK_DEFAULTS,
216
+ button: BUTTON_BLOCK_DEFAULTS,
217
+ divider: DIVIDER_BLOCK_DEFAULTS,
218
+ section: SECTION_BLOCK_DEFAULTS,
219
+ video: VIDEO_BLOCK_DEFAULTS,
220
+ social: SOCIAL_ICONS_BLOCK_DEFAULTS,
221
+ spacer: SPACER_BLOCK_DEFAULTS,
222
+ html: HTML_BLOCK_DEFAULTS,
223
+ menu: MENU_BLOCK_DEFAULTS,
224
+ table: TABLE_BLOCK_DEFAULTS,
225
+ countdown: COUNTDOWN_BLOCK_DEFAULTS
226
+ };
227
+ var DEFAULT_TEMPLATE_DEFAULTS = {
228
+ width: 600,
229
+ backgroundColor: "#ffffff",
230
+ fontFamily: "Arial, sans-serif"
231
+ };
232
+ function isPlainObject(value) {
233
+ return typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
234
+ }
235
+ function deepMergeDefaults(base, overrides) {
236
+ const result = { ...base };
237
+ for (const key of Object.keys(overrides)) {
238
+ const baseVal = base[key];
239
+ const overrideVal = overrides[key];
240
+ if (overrideVal === void 0) {
241
+ continue;
242
+ }
243
+ if (isPlainObject(baseVal) && isPlainObject(overrideVal)) {
244
+ result[key] = deepMergeDefaults(
245
+ baseVal,
246
+ overrideVal
247
+ );
248
+ } else {
249
+ result[key] = overrideVal;
250
+ }
251
+ }
252
+ return result;
253
+ }
254
+
255
+ // src/template.ts
256
+ function createDefaultTemplateContent(defaultFontFamily = "Arial, sans-serif", templateDefaults) {
257
+ return {
258
+ blocks: [],
259
+ settings: {
260
+ ...DEFAULT_TEMPLATE_DEFAULTS,
261
+ fontFamily: defaultFontFamily,
262
+ ...templateDefaults
263
+ }
264
+ };
265
+ }
266
+
267
+ // src/factory.ts
268
+ function applyDefaults(base, partial) {
269
+ if (!partial || Object.keys(partial).length === 0) return base;
270
+ return deepMergeDefaults(
271
+ base,
272
+ partial
273
+ );
274
+ }
275
+ function generateId() {
276
+ return crypto.randomUUID();
277
+ }
278
+ function createDefaultSpacing(value = 0) {
279
+ return { top: value, right: value, bottom: value, left: value };
280
+ }
281
+ function createDefaultStyles(padding = 10) {
282
+ return {
283
+ padding: createDefaultSpacing(padding),
284
+ margin: createDefaultSpacing(0)
285
+ };
286
+ }
287
+ function createTextBlock(partial = {}) {
288
+ const base = {
289
+ id: generateId(),
290
+ type: "text",
291
+ ...TEXT_BLOCK_DEFAULTS,
292
+ styles: createDefaultStyles()
293
+ };
294
+ return applyDefaults(base, partial);
295
+ }
296
+ function createImageBlock(partial = {}) {
297
+ const base = {
298
+ id: generateId(),
299
+ type: "image",
300
+ ...IMAGE_BLOCK_DEFAULTS,
301
+ styles: createDefaultStyles()
302
+ };
303
+ return applyDefaults(base, partial);
304
+ }
305
+ function createButtonBlock(partial = {}) {
306
+ const base = {
307
+ id: generateId(),
308
+ type: "button",
309
+ ...BUTTON_BLOCK_DEFAULTS,
310
+ styles: createDefaultStyles()
311
+ };
312
+ return applyDefaults(base, partial);
313
+ }
314
+ function createDividerBlock(partial = {}) {
315
+ const base = {
316
+ id: generateId(),
317
+ type: "divider",
318
+ ...DIVIDER_BLOCK_DEFAULTS,
319
+ styles: createDefaultStyles(20)
320
+ };
321
+ return applyDefaults(base, partial);
322
+ }
323
+ function createSectionBlock(partial = {}) {
324
+ const base = {
325
+ id: generateId(),
326
+ type: "section",
327
+ ...SECTION_BLOCK_DEFAULTS,
328
+ children: [[]],
329
+ styles: createDefaultStyles(20)
330
+ };
331
+ return applyDefaults(base, partial);
332
+ }
333
+ function createVideoBlock(partial = {}) {
334
+ const base = {
335
+ id: generateId(),
336
+ type: "video",
337
+ ...VIDEO_BLOCK_DEFAULTS,
338
+ styles: createDefaultStyles()
339
+ };
340
+ return applyDefaults(base, partial);
341
+ }
342
+ function createSocialIconsBlock(partial = {}) {
343
+ const base = {
344
+ id: generateId(),
345
+ type: "social",
346
+ icons: [],
347
+ ...SOCIAL_ICONS_BLOCK_DEFAULTS,
348
+ styles: createDefaultStyles()
349
+ };
350
+ return applyDefaults(base, partial);
351
+ }
352
+ function createSpacerBlock(partial = {}) {
353
+ const base = {
354
+ id: generateId(),
355
+ type: "spacer",
356
+ ...SPACER_BLOCK_DEFAULTS,
357
+ styles: createDefaultStyles(0)
358
+ };
359
+ return applyDefaults(base, partial);
360
+ }
361
+ function createHtmlBlock(partial = {}) {
362
+ const base = {
363
+ id: generateId(),
364
+ type: "html",
365
+ ...HTML_BLOCK_DEFAULTS,
366
+ styles: createDefaultStyles()
367
+ };
368
+ return applyDefaults(base, partial);
369
+ }
370
+ function createMenuBlock(partial = {}) {
371
+ const base = {
372
+ id: generateId(),
373
+ type: "menu",
374
+ items: [],
375
+ ...MENU_BLOCK_DEFAULTS,
376
+ styles: createDefaultStyles()
377
+ };
378
+ return applyDefaults(base, partial);
379
+ }
380
+ function createDefaultTableRows(columns, rows) {
381
+ return Array.from({ length: rows }, () => ({
382
+ id: generateId(),
383
+ cells: Array.from(
384
+ { length: columns },
385
+ () => ({
386
+ id: generateId(),
387
+ content: ""
388
+ })
389
+ )
390
+ }));
391
+ }
392
+ function createTableBlock(partial = {}) {
393
+ const base = {
394
+ id: generateId(),
395
+ type: "table",
396
+ rows: createDefaultTableRows(3, 3),
397
+ ...TABLE_BLOCK_DEFAULTS,
398
+ styles: createDefaultStyles()
399
+ };
400
+ return applyDefaults(base, partial);
401
+ }
402
+ function createCountdownBlock(partial = {}) {
403
+ const base = {
404
+ id: generateId(),
405
+ type: "countdown",
406
+ ...COUNTDOWN_BLOCK_DEFAULTS,
407
+ styles: createDefaultStyles()
408
+ };
409
+ return applyDefaults(base, partial);
410
+ }
411
+ function getFieldDefault(field) {
412
+ if (field.type === "repeatable") {
413
+ return field.default ?? [];
414
+ }
415
+ if (field.type === "boolean") {
416
+ return field.default ?? false;
417
+ }
418
+ if (field.type === "number") {
419
+ return field.default ?? 0;
420
+ }
421
+ return field.default ?? "";
422
+ }
423
+ function createCustomBlock(definition) {
424
+ const fieldValues = {};
425
+ for (const field of definition.fields) {
426
+ fieldValues[field.key] = getFieldDefault(field);
427
+ }
428
+ return {
429
+ id: generateId(),
430
+ type: "custom",
431
+ customType: definition.type,
432
+ fieldValues,
433
+ styles: createDefaultStyles(),
434
+ ...definition.dataSource ? { dataSourceFetched: false } : {}
435
+ };
436
+ }
437
+ function createBlock(type, blockDefaults) {
438
+ switch (type) {
439
+ case "section":
440
+ return createSectionBlock(blockDefaults?.section);
441
+ case "text":
442
+ return createTextBlock(blockDefaults?.text);
443
+ case "image":
444
+ return createImageBlock(blockDefaults?.image);
445
+ case "button":
446
+ return createButtonBlock(blockDefaults?.button);
447
+ case "divider":
448
+ return createDividerBlock(blockDefaults?.divider);
449
+ case "video":
450
+ return createVideoBlock(blockDefaults?.video);
451
+ case "social":
452
+ return createSocialIconsBlock(blockDefaults?.social);
453
+ case "spacer":
454
+ return createSpacerBlock(blockDefaults?.spacer);
455
+ case "html":
456
+ return createHtmlBlock(blockDefaults?.html);
457
+ case "menu":
458
+ return createMenuBlock(blockDefaults?.menu);
459
+ case "table":
460
+ return createTableBlock(blockDefaults?.table);
461
+ case "countdown":
462
+ return createCountdownBlock(blockDefaults?.countdown);
463
+ default:
464
+ throw new Error(`Unknown block type: ${type}`);
465
+ }
466
+ }
467
+ function cloneBlock(block) {
468
+ const cloned = JSON.parse(JSON.stringify(block));
469
+ cloned.id = generateId();
470
+ if (cloned.type === "section") {
471
+ cloned.children = cloned.children.map(
472
+ (column) => column.map((child) => cloneBlock(child))
473
+ );
474
+ }
475
+ return cloned;
476
+ }
477
+
478
+ // src/events.ts
479
+ var EventEmitter = class {
480
+ constructor() {
481
+ this.handlers = /* @__PURE__ */ new Map();
482
+ }
483
+ on(event, handler) {
484
+ if (!this.handlers.has(event)) {
485
+ this.handlers.set(event, /* @__PURE__ */ new Set());
486
+ }
487
+ const set = this.handlers.get(event);
488
+ set.add(handler);
489
+ return () => {
490
+ set.delete(handler);
491
+ if (set.size === 0) {
492
+ this.handlers.delete(event);
493
+ }
494
+ };
495
+ }
496
+ off(event, handler) {
497
+ const set = this.handlers.get(event);
498
+ if (!set) {
499
+ return;
500
+ }
501
+ set.delete(handler);
502
+ if (set.size === 0) {
503
+ this.handlers.delete(event);
504
+ }
505
+ }
506
+ emit(event, data) {
507
+ const set = this.handlers.get(event);
508
+ if (!set) {
509
+ return;
510
+ }
511
+ for (const handler of [...set]) {
512
+ handler(data);
513
+ }
514
+ }
515
+ removeAllListeners(event) {
516
+ if (event) {
517
+ this.handlers.delete(event);
518
+ } else {
519
+ this.handlers.clear();
520
+ }
521
+ }
522
+ listenerCount(event) {
523
+ return this.handlers.get(event)?.size ?? 0;
524
+ }
525
+ };
526
+
527
+ // src/merge-tags.ts
528
+ var SYNTAX_PRESETS = {
529
+ liquid: { value: /\{\{.+?\}\}/g, logic: /\{%-?\s*(\w+).*?-?%\}/g },
530
+ handlebars: {
531
+ value: /\{\{\{?.+?\}?\}\}/g,
532
+ logic: /\{\{[#/](\w+).*?\}\}/g
533
+ },
534
+ mailchimp: { value: /\*\|\w+\|\*/g, logic: /\*\|(\w+)[:|].*?\|\*/g },
535
+ ampscript: { value: /%%=.+?=%%/g, logic: /%%\[\s*(\w+).*?\]%%/g }
536
+ };
537
+ function resolveSyntax(syntax) {
538
+ if (!syntax) {
539
+ return SYNTAX_PRESETS.liquid;
540
+ }
541
+ if (typeof syntax === "string") {
542
+ return SYNTAX_PRESETS[syntax];
543
+ }
544
+ return syntax;
545
+ }
546
+ function escapeRegExp(str) {
547
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
548
+ }
549
+ function anchoredRegex(pattern) {
550
+ const source = pattern.source;
551
+ const flags = pattern.flags.replace("g", "");
552
+ return new RegExp(`^${source}$`, flags);
553
+ }
554
+ function isMergeTagValue(value, syntax) {
555
+ return anchoredRegex(syntax.value).test(value?.trim() || "");
556
+ }
557
+ function getMergeTagLabel(value, mergeTags) {
558
+ const found = mergeTags.find((p) => p.value === value);
559
+ if (found) {
560
+ return found.label;
561
+ }
562
+ return value;
563
+ }
564
+ function resolveHtmlMergeTagLabels(html, mergeTags) {
565
+ return html.replace(
566
+ /(<span[^>]*\sdata-merge-tag="([^"]*)"[^>]*>)(.*?)(<\/span>)/g,
567
+ (_match, openTag, value, _oldLabel, closeTag) => {
568
+ const label = getMergeTagLabel(value, mergeTags);
569
+ return `${openTag}${label}${closeTag}`;
570
+ }
571
+ );
572
+ }
573
+ function containsMergeTag(value, syntax) {
574
+ if (!value) return false;
575
+ const valueRegex = new RegExp(syntax.value.source, syntax.value.flags);
576
+ const logicRegex = new RegExp(syntax.logic.source, syntax.logic.flags);
577
+ return valueRegex.test(value) || logicRegex.test(value);
578
+ }
579
+ function restoreMergeTagMarkup(html, mergeTags, syntax) {
580
+ let result = html;
581
+ for (const tag of mergeTags) {
582
+ const escaped = escapeRegExp(tag.value);
583
+ const pattern = new RegExp(`(?<!data-merge-tag=")${escaped}`, "g");
584
+ result = result.replace(pattern, (match) => {
585
+ const label = getMergeTagLabel(match, mergeTags);
586
+ return `<span data-merge-tag="${match}">${label}</span>`;
587
+ });
588
+ }
589
+ const logicRegex = new RegExp(
590
+ `(?<!data-logic-merge-tag=")${syntax.logic.source}`,
591
+ syntax.logic.flags
592
+ );
593
+ result = result.replace(logicRegex, (match) => {
594
+ const keyword = getLogicMergeTagKeyword(match, syntax);
595
+ return `<span data-logic-merge-tag="${match}">${keyword}</span>`;
596
+ });
597
+ return result;
598
+ }
599
+ function isLogicMergeTagValue(value, syntax) {
600
+ return anchoredRegex(syntax.logic).test(value?.trim() || "");
601
+ }
602
+ function getLogicMergeTagKeyword(value, syntax) {
603
+ const regex = new RegExp(
604
+ syntax.logic.source,
605
+ syntax.logic.flags.replace("g", "")
606
+ );
607
+ const match = value.match(regex);
608
+ return match && match[1] ? match[1].toUpperCase() : value;
609
+ }
610
+ function resolveHtmlLogicMergeTagLabels(html, syntax) {
611
+ return html.replace(
612
+ /(<span[^>]*\sdata-logic-merge-tag="([^"]*)"[^>]*>)(.*?)(<\/span>)/g,
613
+ (_match, openTag, value, _oldLabel, closeTag) => {
614
+ const keyword = getLogicMergeTagKeyword(value, syntax);
615
+ return `${openTag}${keyword}${closeTag}`;
616
+ }
617
+ );
618
+ }
619
+
620
+ // src/config.ts
621
+ var SdkError = class extends Error {
622
+ constructor(message, statusCode) {
623
+ super(message);
624
+ this.statusCode = statusCode;
625
+ this.name = "SdkError";
626
+ }
627
+ get isNotFound() {
628
+ return this.statusCode === 404;
629
+ }
630
+ get isUnauthorized() {
631
+ return this.statusCode === 401;
632
+ }
633
+ get isServerError() {
634
+ return this.statusCode !== void 0 && this.statusCode >= 500;
635
+ }
636
+ };
637
+ // Annotate the CommonJS export names for ESM import in node:
638
+ 0 && (module.exports = {
639
+ BUTTON_BLOCK_DEFAULTS,
640
+ COUNTDOWN_BLOCK_DEFAULTS,
641
+ DEFAULT_BLOCK_DEFAULTS,
642
+ DEFAULT_TEMPLATE_DEFAULTS,
643
+ DIVIDER_BLOCK_DEFAULTS,
644
+ EventEmitter,
645
+ HTML_BLOCK_DEFAULTS,
646
+ IMAGE_BLOCK_DEFAULTS,
647
+ MENU_BLOCK_DEFAULTS,
648
+ SECTION_BLOCK_DEFAULTS,
649
+ SOCIAL_ICONS_BLOCK_DEFAULTS,
650
+ SPACER_BLOCK_DEFAULTS,
651
+ SYNTAX_PRESETS,
652
+ SdkError,
653
+ TABLE_BLOCK_DEFAULTS,
654
+ TEXT_BLOCK_DEFAULTS,
655
+ VIDEO_BLOCK_DEFAULTS,
656
+ cloneBlock,
657
+ containsMergeTag,
658
+ createBlock,
659
+ createButtonBlock,
660
+ createCountdownBlock,
661
+ createCustomBlock,
662
+ createDefaultTemplateContent,
663
+ createDividerBlock,
664
+ createHtmlBlock,
665
+ createImageBlock,
666
+ createMenuBlock,
667
+ createSectionBlock,
668
+ createSocialIconsBlock,
669
+ createSpacerBlock,
670
+ createTableBlock,
671
+ createTextBlock,
672
+ createVideoBlock,
673
+ deepMergeDefaults,
674
+ generateId,
675
+ getLogicMergeTagKeyword,
676
+ getMergeTagLabel,
677
+ isButton,
678
+ isCountdown,
679
+ isCustomBlock,
680
+ isDivider,
681
+ isHtml,
682
+ isImage,
683
+ isLogicMergeTagValue,
684
+ isMenu,
685
+ isMergeTagValue,
686
+ isSection,
687
+ isSocialIcons,
688
+ isSpacer,
689
+ isTable,
690
+ isText,
691
+ isVideo,
692
+ resolveHtmlLogicMergeTagLabels,
693
+ resolveHtmlMergeTagLabels,
694
+ resolveSyntax,
695
+ restoreMergeTagMarkup
696
+ });
697
+ //# sourceMappingURL=index.cjs.map