@blockslides/ai-context 0.1.6 → 0.2.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/dist/index.js CHANGED
@@ -893,11 +893,1185 @@ var editImageToCover = [
893
893
  Update an existing imageBlock on the first slide so it uses layout "cover" and align "center". Preserve all other attributes.
894
894
  `.trim()
895
895
  ].join("\n\n");
896
+
897
+ // src/templates/v1/index.ts
898
+ var v1_exports6 = {};
899
+ __export(v1_exports6, {
900
+ blocks: () => blocks,
901
+ buildPresetTemplate: () => buildPresetTemplate,
902
+ createTemplate: () => createTemplate,
903
+ listPresetTemplates: () => listPresetTemplates,
904
+ listTemplates: () => listTemplates,
905
+ slide: () => slide2,
906
+ templatesV1Context: () => templatesV1Context
907
+ });
908
+
909
+ // src/templates/v1/schemaBuilder.ts
910
+ var defaults = {
911
+ slide: (attrs) => {
912
+ var _a, _b, _c;
913
+ return {
914
+ id: (_a = attrs == null ? void 0 : attrs.id) != null ? _a : "slide-1",
915
+ size: (_b = attrs == null ? void 0 : attrs.size) != null ? _b : "16x9",
916
+ className: (_c = attrs == null ? void 0 : attrs.className) != null ? _c : ""
917
+ };
918
+ },
919
+ row: (attrs) => {
920
+ var _a, _b;
921
+ return {
922
+ layout: (_a = attrs == null ? void 0 : attrs.layout) != null ? _a : "1",
923
+ className: (_b = attrs == null ? void 0 : attrs.className) != null ? _b : ""
924
+ };
925
+ },
926
+ column: (attrs) => {
927
+ var _a, _b;
928
+ return {
929
+ className: (_a = attrs == null ? void 0 : attrs.className) != null ? _a : "",
930
+ contentMode: (_b = attrs == null ? void 0 : attrs.contentMode) != null ? _b : "default",
931
+ verticalAlign: attrs == null ? void 0 : attrs.verticalAlign,
932
+ horizontalAlign: attrs == null ? void 0 : attrs.horizontalAlign,
933
+ padding: attrs == null ? void 0 : attrs.padding
934
+ };
935
+ }
936
+ };
937
+ var textNode = (text) => ({
938
+ type: "text",
939
+ text
940
+ });
941
+ var blocks = {
942
+ text: (text, marks) => marks && marks.length > 0 ? { type: "text", text, marks } : textNode(text),
943
+ paragraph: (text) => ({
944
+ type: "paragraph",
945
+ content: text ? [textNode(text)] : []
946
+ }),
947
+ heading: (text, level = 2) => ({
948
+ type: "heading",
949
+ attrs: { level },
950
+ content: [textNode(text)]
951
+ }),
952
+ bulletList: (items) => ({
953
+ type: "bulletList",
954
+ content: items.map(
955
+ (item) => typeof item === "string" ? {
956
+ type: "listItem",
957
+ content: [{ type: "paragraph", content: [textNode(item)] }]
958
+ } : { type: "listItem", content: [item] }
959
+ )
960
+ }),
961
+ horizontalRule: () => ({ type: "horizontalRule" }),
962
+ hardBreak: () => ({ type: "hardBreak" }),
963
+ codeBlock: (code, language) => ({
964
+ type: "codeBlock",
965
+ attrs: language ? { language } : void 0,
966
+ content: code ? [textNode(code)] : []
967
+ }),
968
+ imageBlock: (attrs) => ({
969
+ type: "imageBlock",
970
+ attrs
971
+ }),
972
+ // Additional nodes to mirror extensions/schemas
973
+ blockquote: (content = []) => ({
974
+ type: "blockquote",
975
+ content
976
+ }),
977
+ listItem: (content = []) => ({
978
+ type: "listItem",
979
+ content
980
+ }),
981
+ image: (attrs) => ({
982
+ type: "image",
983
+ attrs
984
+ }),
985
+ youtube: (attrs) => ({
986
+ type: "youtube",
987
+ attrs
988
+ })
989
+ };
990
+ var slide2 = Object.assign(
991
+ (opts = {}) => ({
992
+ type: "slide",
993
+ attrs: defaults.slide(opts.slideAttrs),
994
+ content: [
995
+ {
996
+ type: "row",
997
+ attrs: defaults.row(opts.rowAttrs),
998
+ content: [
999
+ {
1000
+ type: "column",
1001
+ attrs: defaults.column(opts.columnAttrs),
1002
+ content: []
1003
+ }
1004
+ ]
1005
+ }
1006
+ ]
1007
+ }),
1008
+ {
1009
+ singleCol: (opts = {}) => {
1010
+ var _a;
1011
+ return {
1012
+ type: "slide",
1013
+ attrs: defaults.slide(opts.slideAttrs),
1014
+ content: [
1015
+ {
1016
+ type: "row",
1017
+ attrs: defaults.row(opts.rowAttrs),
1018
+ content: [
1019
+ {
1020
+ type: "column",
1021
+ attrs: defaults.column(opts.columnAttrs),
1022
+ content: (_a = opts.content) != null ? _a : []
1023
+ }
1024
+ ]
1025
+ }
1026
+ ]
1027
+ };
1028
+ },
1029
+ twoCol: (opts = {}) => {
1030
+ var _a, _b, _c, _d;
1031
+ return {
1032
+ type: "slide",
1033
+ attrs: defaults.slide(opts.slideAttrs),
1034
+ content: [
1035
+ {
1036
+ type: "row",
1037
+ attrs: defaults.row({
1038
+ layout: (_b = (_a = opts.rowAttrs) == null ? void 0 : _a.layout) != null ? _b : "1-1",
1039
+ ...opts.rowAttrs
1040
+ }),
1041
+ content: [
1042
+ {
1043
+ type: "column",
1044
+ attrs: defaults.column(opts.leftColumnAttrs),
1045
+ content: (_c = opts.left) != null ? _c : []
1046
+ },
1047
+ {
1048
+ type: "column",
1049
+ attrs: defaults.column(opts.rightColumnAttrs),
1050
+ content: (_d = opts.right) != null ? _d : []
1051
+ }
1052
+ ]
1053
+ }
1054
+ ]
1055
+ };
1056
+ }
1057
+ }
1058
+ );
1059
+ var column2 = (attrs, content = []) => ({
1060
+ type: "column",
1061
+ attrs: defaults.column(attrs),
1062
+ content
1063
+ });
1064
+ var row2 = (layout, content, attrs) => ({
1065
+ type: "row",
1066
+ attrs: defaults.row({ layout, ...attrs }),
1067
+ content
1068
+ });
1069
+ var createTemplate = (input) => {
1070
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma;
1071
+ switch (input.preset) {
1072
+ case "slide.empty":
1073
+ return slide2({
1074
+ slideAttrs: input.slideAttrs,
1075
+ rowAttrs: input.rowAttrs,
1076
+ columnAttrs: input.columnAttrs
1077
+ });
1078
+ case "slide.singleCol":
1079
+ return slide2.singleCol({
1080
+ slideAttrs: input.slideAttrs,
1081
+ rowAttrs: input.rowAttrs,
1082
+ columnAttrs: input.columnAttrs,
1083
+ content: (_a = input.content) != null ? _a : []
1084
+ });
1085
+ case "slide.twoCol":
1086
+ return slide2.twoCol({
1087
+ slideAttrs: input.slideAttrs,
1088
+ rowAttrs: input.rowAttrs,
1089
+ leftColumnAttrs: input.leftColumnAttrs,
1090
+ rightColumnAttrs: input.rightColumnAttrs,
1091
+ left: (_b = input.left) != null ? _b : [],
1092
+ right: (_c = input.right) != null ? _c : []
1093
+ });
1094
+ case "slide.hero": {
1095
+ const opts = (_d = input.heroOpts) != null ? _d : {};
1096
+ return {
1097
+ type: "slide",
1098
+ attrs: defaults.slide({ className: "bg-slate-950 text-white", ...opts.slideAttrs }),
1099
+ content: [
1100
+ row2(
1101
+ (_f = (_e = opts.rowAttrs) == null ? void 0 : _e.layout) != null ? _f : "1",
1102
+ [
1103
+ column2(
1104
+ (_g = opts.columnAttrs) != null ? _g : { className: "max-w-4xl gap-6 p-12" },
1105
+ (_h = opts.content) != null ? _h : [
1106
+ blocks.heading("Your headline", 1),
1107
+ blocks.paragraph("Subhead goes here."),
1108
+ blocks.paragraph("Add supporting details here.")
1109
+ ]
1110
+ )
1111
+ ],
1112
+ { className: "min-h-[720px] items-center justify-center p-12", ...opts.rowAttrs }
1113
+ )
1114
+ ]
1115
+ };
1116
+ }
1117
+ case "slide.imageCover": {
1118
+ const opts = (_i = input.imageCoverOpts) != null ? _i : {};
1119
+ const image2 = (_j = opts.image) != null ? _j : {
1120
+ src: "https://placehold.co/1600x900/png",
1121
+ layout: "cover",
1122
+ fullBleed: true,
1123
+ align: "center"
1124
+ };
1125
+ const overlay = (_k = opts.overlay) != null ? _k : [blocks.heading("Overlay title", 1)];
1126
+ return {
1127
+ type: "slide",
1128
+ attrs: defaults.slide({ className: "bg-black text-white", ...opts.slideAttrs }),
1129
+ content: [
1130
+ row2(
1131
+ (_m = (_l = opts.rowAttrs) == null ? void 0 : _l.layout) != null ? _m : "1",
1132
+ [
1133
+ {
1134
+ type: "column",
1135
+ attrs: defaults.column({ className: "relative w-full h-full", ...opts.columnAttrs }),
1136
+ content: [
1137
+ blocks.imageBlock(image2),
1138
+ ...overlay.map((node) => {
1139
+ var _a2, _b2;
1140
+ return {
1141
+ ...node,
1142
+ attrs: {
1143
+ ...node.attrs,
1144
+ className: `${(_b2 = (_a2 = node.attrs) == null ? void 0 : _a2.className) != null ? _b2 : ""} absolute bottom-12 left-12 drop-shadow-lg`.trim()
1145
+ }
1146
+ };
1147
+ })
1148
+ ]
1149
+ }
1150
+ ],
1151
+ { className: "min-h-[720px]", ...opts.rowAttrs }
1152
+ )
1153
+ ]
1154
+ };
1155
+ }
1156
+ case "slide.quote": {
1157
+ const opts = (_n = input.quoteOpts) != null ? _n : {};
1158
+ return {
1159
+ type: "slide",
1160
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1161
+ content: [
1162
+ row2(
1163
+ (_p = (_o = opts.rowAttrs) == null ? void 0 : _o.layout) != null ? _p : "1",
1164
+ [
1165
+ column2(
1166
+ (_q = opts.columnAttrs) != null ? _q : { className: "max-w-3xl mx-auto gap-4 p-12" },
1167
+ [
1168
+ blocks.blockquote(
1169
+ (_r = opts.quote) != null ? _r : [
1170
+ blocks.paragraph("\u201CAdd your quote here.\u201D"),
1171
+ blocks.paragraph("\u2014 Author")
1172
+ ]
1173
+ )
1174
+ ]
1175
+ )
1176
+ ],
1177
+ { className: "min-h-[640px] items-center justify-center", ...opts.rowAttrs }
1178
+ )
1179
+ ]
1180
+ };
1181
+ }
1182
+ case "slide.agenda": {
1183
+ const opts = (_s = input.agendaOpts) != null ? _s : {};
1184
+ return {
1185
+ type: "slide",
1186
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1187
+ content: [
1188
+ row2(
1189
+ (_u = (_t = opts.rowAttrs) == null ? void 0 : _t.layout) != null ? _u : "1",
1190
+ [
1191
+ column2(
1192
+ (_v = opts.columnAttrs) != null ? _v : { className: "p-12 gap-6" },
1193
+ [
1194
+ blocks.heading("Agenda", 1),
1195
+ blocks.bulletList((_w = opts.items) != null ? _w : ["Topic 1", "Topic 2", "Topic 3"])
1196
+ ]
1197
+ )
1198
+ ],
1199
+ { className: "min-h-[640px]", ...opts.rowAttrs }
1200
+ )
1201
+ ]
1202
+ };
1203
+ }
1204
+ case "slide.grid3": {
1205
+ const opts = (_x = input.multiColOpts) != null ? _x : { columns: [] };
1206
+ const cols = opts.columns.length > 0 ? opts.columns : [
1207
+ { content: [blocks.heading("One", 3), blocks.paragraph("Details.")] },
1208
+ { content: [blocks.heading("Two", 3), blocks.paragraph("Details.")] },
1209
+ { content: [blocks.heading("Three", 3), blocks.paragraph("Details.")] }
1210
+ ];
1211
+ return {
1212
+ type: "slide",
1213
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1214
+ content: [
1215
+ row2(
1216
+ (_z = (_y = opts.rowAttrs) == null ? void 0 : _y.layout) != null ? _z : "1-1-1",
1217
+ cols.map((c) => {
1218
+ var _a2;
1219
+ return column2(c.attrs, (_a2 = c.content) != null ? _a2 : []);
1220
+ }),
1221
+ { className: "p-8 gap-4", ...opts.rowAttrs }
1222
+ )
1223
+ ]
1224
+ };
1225
+ }
1226
+ case "slide.grid4": {
1227
+ const opts = (_A = input.multiColOpts) != null ? _A : { columns: [] };
1228
+ const cols = opts.columns.length > 0 ? opts.columns : [
1229
+ { content: [blocks.heading("One", 4)] },
1230
+ { content: [blocks.heading("Two", 4)] },
1231
+ { content: [blocks.heading("Three", 4)] },
1232
+ { content: [blocks.heading("Four", 4)] }
1233
+ ];
1234
+ return {
1235
+ type: "slide",
1236
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1237
+ content: [
1238
+ row2(
1239
+ (_C = (_B = opts.rowAttrs) == null ? void 0 : _B.layout) != null ? _C : "1-1-1-1",
1240
+ cols.map((c) => {
1241
+ var _a2;
1242
+ return column2(c.attrs, (_a2 = c.content) != null ? _a2 : []);
1243
+ }),
1244
+ { className: "p-8 gap-4", ...opts.rowAttrs }
1245
+ )
1246
+ ]
1247
+ };
1248
+ }
1249
+ case "slide.oneTwo": {
1250
+ const opts = (_D = input.mediaTextOpts) != null ? _D : {};
1251
+ return {
1252
+ type: "slide",
1253
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1254
+ content: [
1255
+ row2(
1256
+ (_F = (_E = opts.rowAttrs) == null ? void 0 : _E.layout) != null ? _F : "1-2",
1257
+ [
1258
+ column2((_G = opts.textColumnAttrs) != null ? _G : { className: "p-8 gap-4" }, (_H = opts.text) != null ? _H : []),
1259
+ column2((_I = opts.mediaColumnAttrs) != null ? _I : { className: "p-8 gap-4" }, (_J = opts.media) != null ? _J : [])
1260
+ ],
1261
+ { className: "min-h-[640px]", ...opts.rowAttrs }
1262
+ )
1263
+ ]
1264
+ };
1265
+ }
1266
+ case "slide.twoOne": {
1267
+ const opts = (_K = input.mediaTextOpts) != null ? _K : {};
1268
+ return {
1269
+ type: "slide",
1270
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1271
+ content: [
1272
+ row2(
1273
+ (_M = (_L = opts.rowAttrs) == null ? void 0 : _L.layout) != null ? _M : "2-1",
1274
+ [
1275
+ column2((_N = opts.mediaColumnAttrs) != null ? _N : { className: "p-8 gap-4" }, (_O = opts.media) != null ? _O : []),
1276
+ column2((_P = opts.textColumnAttrs) != null ? _P : { className: "p-8 gap-4" }, (_Q = opts.text) != null ? _Q : [])
1277
+ ],
1278
+ { className: "min-h-[640px]", ...opts.rowAttrs }
1279
+ )
1280
+ ]
1281
+ };
1282
+ }
1283
+ case "slide.oneTwoOne": {
1284
+ const opts = (_R = input.multiColOpts) != null ? _R : { columns: [] };
1285
+ const cols = opts.columns.length > 0 ? opts.columns : [
1286
+ { content: [blocks.paragraph("Left")] },
1287
+ { content: [blocks.paragraph("Center")] },
1288
+ { content: [blocks.paragraph("Right")] }
1289
+ ];
1290
+ return {
1291
+ type: "slide",
1292
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1293
+ content: [
1294
+ row2(
1295
+ (_T = (_S = opts.rowAttrs) == null ? void 0 : _S.layout) != null ? _T : "1-2-1",
1296
+ cols.map((c) => {
1297
+ var _a2;
1298
+ return column2(c.attrs, (_a2 = c.content) != null ? _a2 : []);
1299
+ }),
1300
+ { className: "p-8 gap-4", ...opts.rowAttrs }
1301
+ )
1302
+ ]
1303
+ };
1304
+ }
1305
+ case "slide.textMedia": {
1306
+ const opts = (_U = input.mediaTextOpts) != null ? _U : {};
1307
+ return {
1308
+ type: "slide",
1309
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1310
+ content: [
1311
+ row2(
1312
+ (_W = (_V = opts.rowAttrs) == null ? void 0 : _V.layout) != null ? _W : "1-1",
1313
+ [
1314
+ column2((_X = opts.textColumnAttrs) != null ? _X : { className: "p-10 gap-4" }, (_Y = opts.text) != null ? _Y : []),
1315
+ column2((_Z = opts.mediaColumnAttrs) != null ? _Z : { className: "p-10 gap-4 bg-slate-50" }, (__ = opts.media) != null ? __ : [])
1316
+ ],
1317
+ { className: "min-h-[640px]", ...opts.rowAttrs }
1318
+ )
1319
+ ]
1320
+ };
1321
+ }
1322
+ case "slide.mediaText": {
1323
+ const opts = (_$ = input.mediaTextOpts) != null ? _$ : {};
1324
+ return {
1325
+ type: "slide",
1326
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1327
+ content: [
1328
+ row2(
1329
+ (_ba = (_aa = opts.rowAttrs) == null ? void 0 : _aa.layout) != null ? _ba : "1-1",
1330
+ [
1331
+ column2((_ca = opts.mediaColumnAttrs) != null ? _ca : { className: "p-10 gap-4 bg-slate-50" }, (_da = opts.media) != null ? _da : []),
1332
+ column2((_ea = opts.textColumnAttrs) != null ? _ea : { className: "p-10 gap-4" }, (_fa = opts.text) != null ? _fa : [])
1333
+ ],
1334
+ { className: "min-h-[640px]", ...opts.rowAttrs }
1335
+ )
1336
+ ]
1337
+ };
1338
+ }
1339
+ case "slide.stack2": {
1340
+ const opts = (_ga = input.stack2Opts) != null ? _ga : {};
1341
+ const top = (_ha = opts.topRow) != null ? _ha : {
1342
+ rowAttrs: { layout: "1" },
1343
+ columns: [{ content: [blocks.heading("Title", 1), blocks.paragraph("Subhead")] }]
1344
+ };
1345
+ const bottom = (_ia = opts.bottomRow) != null ? _ia : {
1346
+ rowAttrs: { layout: "1-1" },
1347
+ columns: [
1348
+ { content: [blocks.paragraph("Left detail")] },
1349
+ { content: [blocks.paragraph("Right detail")] }
1350
+ ]
1351
+ };
1352
+ return {
1353
+ type: "slide",
1354
+ attrs: defaults.slide({ className: "bg-white text-slate-900", ...opts.slideAttrs }),
1355
+ content: [
1356
+ row2(
1357
+ (_ka = (_ja = top.rowAttrs) == null ? void 0 : _ja.layout) != null ? _ka : "1",
1358
+ top.columns.map((c) => {
1359
+ var _a2;
1360
+ return column2(c.attrs, (_a2 = c.content) != null ? _a2 : []);
1361
+ }),
1362
+ { className: "p-8 gap-4", ...top.rowAttrs }
1363
+ ),
1364
+ row2(
1365
+ (_ma = (_la = bottom.rowAttrs) == null ? void 0 : _la.layout) != null ? _ma : "1-1",
1366
+ bottom.columns.map((c) => {
1367
+ var _a2;
1368
+ return column2(c.attrs, (_a2 = c.content) != null ? _a2 : []);
1369
+ }),
1370
+ { className: "p-8 gap-4", ...bottom.rowAttrs }
1371
+ )
1372
+ ]
1373
+ };
1374
+ }
1375
+ default:
1376
+ return slide2();
1377
+ }
1378
+ };
1379
+ var listTemplates = () => [
1380
+ "slide.empty",
1381
+ "slide.singleCol",
1382
+ "slide.twoCol",
1383
+ "slide.hero",
1384
+ "slide.imageCover",
1385
+ "slide.quote",
1386
+ "slide.agenda",
1387
+ "slide.grid3",
1388
+ "slide.grid4",
1389
+ "slide.oneTwo",
1390
+ "slide.twoOne",
1391
+ "slide.oneTwoOne",
1392
+ "slide.textMedia",
1393
+ "slide.mediaText",
1394
+ "slide.stack2"
1395
+ ];
1396
+ var templatesV1Context = `
1397
+ BlockSlides templates API (v1)
1398
+
1399
+ Presets:
1400
+ - slide.empty(): slide with one empty column.
1401
+ - slide.singleCol({ content?, slideAttrs?, rowAttrs?, columnAttrs? })
1402
+ - slide.twoCol({ left?, right?, slideAttrs?, rowAttrs?, leftColumnAttrs?, rightColumnAttrs? })
1403
+ - slide.hero({ content?, slideAttrs?, rowAttrs?, columnAttrs? })
1404
+ - slide.imageCover({ image?, overlay?, slideAttrs?, rowAttrs?, columnAttrs? })
1405
+ - slide.quote({ quote?, slideAttrs?, rowAttrs?, columnAttrs? })
1406
+ - slide.agenda({ items?, slideAttrs?, rowAttrs?, columnAttrs? })
1407
+ - slide.grid3/grid4({ columns?, slideAttrs?, rowAttrs? })
1408
+ - slide.oneTwo/twoOne/oneTwoOne({ columns?, slideAttrs?, rowAttrs? })
1409
+ - slide.textMedia/mediaText({ text?, media?, slideAttrs?, rowAttrs? })
1410
+ - slide.stack2({ topRow?, bottomRow?, slideAttrs? })
1411
+
1412
+ Blocks:
1413
+ - blocks.text(text, marks?)
1414
+ - blocks.heading(text, level?)
1415
+ - blocks.paragraph(text?)
1416
+ - blocks.bulletList([string | Block][])
1417
+ - blocks.codeBlock(code, language?)
1418
+ - blocks.horizontalRule()
1419
+ - blocks.hardBreak()
1420
+ - blocks.imageBlock({ src, alt?, layout?, fullBleed?, align?, ...ImageBlockAttrs })
1421
+ - blocks.blockquote(content?)
1422
+ - blocks.listItem(content?)
1423
+ - blocks.image({ src, alt?, title?, width?, height? })
1424
+ - blocks.youtube({ src?, start?, width?, height? })
1425
+
1426
+ Agent/tool usage:
1427
+ - Call createTemplate({ preset: "slide.twoCol", left: [blocks.paragraph("Left")], right: [blocks.imageBlock({ src })] })
1428
+ - Wrap returned slides in { type: "doc", content: [/* slides here */] } before sending to the editor.
1429
+
1430
+ Notes:
1431
+ - Size defaults to 16x9; override via slideAttrs.size.
1432
+ - Layout defaults: singleCol uses "1"; twoCol uses "1-1" unless rowAttrs.layout overrides.
1433
+ `.trim();
1434
+
1435
+ // src/templates/v1/presetTemplateBuilder.ts
1436
+ var titleAndSubheaderIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="18" y="22" width="60" height="12" rx="2" fill="#D4D4D8"/><rect x="26" y="38" width="44" height="8" rx="2" fill="#E5E7EB"/></svg>';
1437
+ var titleAndSubheader = {
1438
+ key: "tpl.titleAndSubheader",
1439
+ label: "Title & Subheader",
1440
+ description: "Centered title and subtitle for a new presentation",
1441
+ icon: titleAndSubheaderIcon,
1442
+ build: () => slide2.singleCol({
1443
+ rowAttrs: { className: "min-h-[720px] items-center justify-center" },
1444
+ columnAttrs: {
1445
+ verticalAlign: "center",
1446
+ horizontalAlign: "center",
1447
+ className: "gap-6 p-12 text-center bg-white"
1448
+ },
1449
+ content: [
1450
+ blocks.heading("Lorem ipsum dolor sit amet", 1),
1451
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.")
1452
+ ]
1453
+ })
1454
+ };
1455
+ var imageTextIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="26" width="24" height="16" rx="2" fill="#E5E7EB"/><rect x="21" y="31" width="14" height="6" rx="1" fill="#D4D4D8"/><rect x="46" y="24" width="34" height="6" rx="1.5" fill="#D4D4D8"/><rect x="46" y="33" width="34" height="5" rx="1.5" fill="#E5E7EB"/><rect x="46" y="41" width="28" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1456
+ var textImageIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="18" y="24" width="34" height="6" rx="1.5" fill="#D4D4D8"/><rect x="18" y="33" width="34" height="5" rx="1.5" fill="#E5E7EB"/><rect x="18" y="41" width="28" height="5" rx="1.5" fill="#E5E7EB"/><rect x="56" y="26" width="24" height="16" rx="2" fill="#E5E7EB"/><rect x="61" y="31" width="14" height="6" rx="1" fill="#D4D4D8"/></svg>';
1457
+ var twoColumnsIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="18" y="22" width="26" height="6" rx="1.5" fill="#D4D4D8"/><rect x="18" y="31" width="26" height="5" rx="1.5" fill="#E5E7EB"/><rect x="18" y="39" width="22" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="22" width="26" height="6" rx="1.5" fill="#D4D4D8"/><rect x="52" y="31" width="26" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="39" width="22" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1458
+ var twoColumnsHeaderIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="18" y="18" width="60" height="6" rx="1.5" fill="#D4D4D8"/><rect x="18" y="28" width="26" height="6" rx="1.5" fill="#D4D4D8"/><rect x="18" y="37" width="26" height="5" rx="1.5" fill="#E5E7EB"/><rect x="18" y="45" width="22" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="28" width="26" height="6" rx="1.5" fill="#D4D4D8"/><rect x="52" y="37" width="26" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="45" width="22" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1459
+ var threeColumnsIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="14" y="22" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="14" y="31" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="14" y="39" width="18" height="5" rx="1.5" fill="#E5E7EB"/><rect x="38" y="22" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="38" y="31" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="38" y="39" width="18" height="5" rx="1.5" fill="#E5E7EB"/><rect x="62" y="22" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="62" y="31" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="62" y="39" width="18" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1460
+ var threeColumnsHeaderIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="16" width="60" height="6" rx="1.5" fill="#D4D4D8"/><rect x="14" y="28" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="14" y="37" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="14" y="45" width="18" height="5" rx="1.5" fill="#E5E7EB"/><rect x="38" y="28" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="38" y="37" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="38" y="45" width="18" height="5" rx="1.5" fill="#E5E7EB"/><rect x="62" y="28" width="20" height="6" rx="1.5" fill="#D4D4D8"/><rect x="62" y="37" width="20" height="5" rx="1.5" fill="#E5E7EB"/><rect x="62" y="45" width="18" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1461
+ var fourColumnsHeaderIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="16" width="60" height="6" rx="1.5" fill="#D4D4D8"/><rect x="12" y="28" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="12" y="37" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="12" y="45" width="14" height="5" rx="1.5" fill="#E5E7EB"/><rect x="32" y="28" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="32" y="37" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="32" y="45" width="14" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="28" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="52" y="37" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="45" width="14" height="5" rx="1.5" fill="#E5E7EB"/><rect x="72" y="28" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="72" y="37" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="72" y="45" width="14" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1462
+ var fourColumnsIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="12" y="22" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="12" y="31" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="12" y="39" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="32" y="22" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="32" y="31" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="32" y="39" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="22" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="52" y="31" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="52" y="39" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="72" y="22" width="16" height="6" rx="1.5" fill="#D4D4D8"/><rect x="72" y="31" width="16" height="5" rx="1.5" fill="#E5E7EB"/><rect x="72" y="39" width="16" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1463
+ var fullImageIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="14" y="14" width="68" height="44" rx="3" fill="#E5E7EB"/><path d="M18 50 34 32l12 14 8-10 16 14H18Z" fill="#D4D4D8"/><circle cx="32" cy="26" r="4" fill="#D4D4D8"/></svg>';
1464
+ var twoImageColumnsIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="18" width="64" height="6" rx="1.5" fill="#D4D4D8"/><rect x="16" y="28" width="28" height="14" rx="2" fill="#E5E7EB"/><rect x="52" y="28" width="28" height="14" rx="2" fill="#E5E7EB"/><rect x="16" y="46" width="20" height="4" rx="1" fill="#D4D4D8"/><rect x="52" y="46" width="20" height="4" rx="1" fill="#D4D4D8"/></svg>';
1465
+ var accentLeftIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="12" y="18" width="20" height="36" rx="2" fill="#EFEFEF"/><rect x="18" y="30" width="8" height="8" rx="1" fill="#CCCCCC"/><rect x="36" y="26" width="42" height="6" rx="1.5" fill="#D4D4D8"/><rect x="36" y="36" width="38" height="5" rx="1.5" fill="#E5E7EB"/><rect x="36" y="44" width="32" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1466
+ var accentRightIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="64" y="18" width="20" height="36" rx="2" fill="#EFEFEF"/><rect x="70" y="30" width="8" height="8" rx="1" fill="#CCCCCC"/><rect x="16" y="26" width="42" height="6" rx="1.5" fill="#D4D4D8"/><rect x="16" y="36" width="38" height="5" rx="1.5" fill="#E5E7EB"/><rect x="16" y="44" width="32" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1467
+ var accentTopIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="14" y="14" width="68" height="16" rx="2" fill="#EFEFEF"/><rect x="44" y="18" width="8" height="8" rx="1" fill="#CCCCCC"/><rect x="18" y="36" width="60" height="6" rx="1.5" fill="#D4D4D8"/><rect x="18" y="46" width="56" height="5" rx="1.5" fill="#E5E7EB"/><rect x="18" y="54" width="48" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1468
+ var accentRightFitIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="64" y="24" width="16" height="20" rx="2" fill="#E5E7EB"/><rect x="68" y="28" width="8" height="8" rx="1" fill="#CCCCCC"/><rect x="14" y="28" width="44" height="6" rx="1.5" fill="#D4D4D8"/><rect x="14" y="38" width="40" height="5" rx="1.5" fill="#E5E7EB"/><rect x="14" y="46" width="32" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1469
+ var accentLeftFitIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="24" width="16" height="20" rx="2" fill="#E5E7EB"/><rect x="20" y="28" width="8" height="8" rx="1" fill="#CCCCCC"/><rect x="36" y="28" width="44" height="6" rx="1.5" fill="#D4D4D8"/><rect x="36" y="38" width="40" height="5" rx="1.5" fill="#E5E7EB"/><rect x="36" y="46" width="32" height="5" rx="1.5" fill="#E5E7EB"/></svg>';
1470
+ var titleBulletsIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="18" y="20" width="60" height="6" rx="1.5" fill="#D4D4D8"/><circle cx="22" cy="32" r="2" fill="#D4D4D8"/><rect x="28" y="30" width="44" height="4" rx="1" fill="#E5E7EB"/><circle cx="22" cy="39" r="2" fill="#D4D4D8"/><rect x="28" y="37" width="44" height="4" rx="1" fill="#E5E7EB"/><circle cx="22" cy="46" r="2" fill="#D4D4D8"/><rect x="28" y="44" width="36" height="4" rx="1" fill="#E5E7EB"/></svg>';
1471
+ var titleBulletsImageIcon = '<svg width="96" height="72" viewBox="0 0 96 72" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="6" y="6" width="84" height="60" rx="4" stroke="#D4D4D8" stroke-width="2" fill="#F9FAFB"/><rect x="16" y="18" width="64" height="6" rx="1.5" fill="#D4D4D8"/><circle cx="20" cy="31" r="2" fill="#D4D4D8"/><rect x="26" y="29" width="24" height="4" rx="1" fill="#E5E7EB"/><circle cx="20" cy="38" r="2" fill="#D4D4D8"/><rect x="26" y="36" width="24" height="4" rx="1" fill="#E5E7EB"/><circle cx="20" cy="45" r="2" fill="#D4D4D8"/><rect x="26" y="43" width="20" height="4" rx="1" fill="#E5E7EB"/><rect x="56" y="31" width="24" height="16" rx="2" fill="#E5E7EB"/><rect x="61" y="36" width="14" height="6" rx="1" fill="#D4D4D8"/></svg>';
1472
+ var imageAndText = {
1473
+ key: "tpl.imageAndText",
1474
+ label: "Image & Text",
1475
+ description: "Image on left, text on right",
1476
+ icon: imageTextIcon,
1477
+ build: () => slide2.twoCol({
1478
+ rowAttrs: { className: "items-center" },
1479
+ leftColumnAttrs: {
1480
+ horizontalAlign: "center",
1481
+ verticalAlign: "center",
1482
+ className: "p-8"
1483
+ },
1484
+ rightColumnAttrs: {
1485
+ verticalAlign: "center",
1486
+ className: "p-8 gap-3"
1487
+ },
1488
+ left: [
1489
+ blocks.imageBlock({
1490
+ src: "https://placehold.co/640x480/png",
1491
+ layout: "contain",
1492
+ fullBleed: false
1493
+ })
1494
+ ],
1495
+ right: [
1496
+ blocks.heading("Lorem ipsum dolor sit amet", 2),
1497
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1498
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1499
+ ]
1500
+ })
1501
+ };
1502
+ var textAndImage = {
1503
+ key: "tpl.textAndImage",
1504
+ label: "Text & Image",
1505
+ description: "Text on left, image on right",
1506
+ icon: textImageIcon,
1507
+ build: () => slide2.twoCol({
1508
+ rowAttrs: { className: "items-center" },
1509
+ leftColumnAttrs: {
1510
+ verticalAlign: "center",
1511
+ className: "p-8 gap-3"
1512
+ },
1513
+ rightColumnAttrs: {
1514
+ horizontalAlign: "center",
1515
+ verticalAlign: "center",
1516
+ className: "p-8"
1517
+ },
1518
+ left: [
1519
+ blocks.heading("Lorem ipsum dolor sit amet", 2),
1520
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1521
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1522
+ ],
1523
+ right: [
1524
+ blocks.imageBlock({
1525
+ src: "https://placehold.co/640x480/png",
1526
+ layout: "contain",
1527
+ fullBleed: false
1528
+ })
1529
+ ]
1530
+ })
1531
+ };
1532
+ var twoColumns = {
1533
+ key: "tpl.twoColumns",
1534
+ label: "Two Columns",
1535
+ description: "Header above two balanced text columns",
1536
+ icon: twoColumnsIcon,
1537
+ build: () => slide2.singleCol({
1538
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
1539
+ content: [
1540
+ blocks.heading("Section heading", 2),
1541
+ {
1542
+ type: "row",
1543
+ attrs: { layout: "1-1", className: "items-start w-full gap-4" },
1544
+ content: [
1545
+ {
1546
+ type: "column",
1547
+ attrs: { className: "p-4 gap-3 w-full box-border" },
1548
+ content: [
1549
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1550
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1551
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1552
+ ]
1553
+ },
1554
+ {
1555
+ type: "column",
1556
+ attrs: { className: "p-4 gap-3 w-full box-border" },
1557
+ content: [
1558
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1559
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1560
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1561
+ ]
1562
+ }
1563
+ ]
1564
+ }
1565
+ ]
1566
+ })
1567
+ };
1568
+ var twoColumnsWithHeader = {
1569
+ key: "tpl.twoColumnsWithHeader",
1570
+ label: "Two Columns + Header",
1571
+ description: "Header plus two columns, each with its own heading",
1572
+ icon: twoColumnsHeaderIcon,
1573
+ build: () => slide2.singleCol({
1574
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
1575
+ content: [
1576
+ blocks.heading("Section heading", 2),
1577
+ {
1578
+ type: "row",
1579
+ attrs: { layout: "1-1", className: "items-start w-full gap-4" },
1580
+ content: [
1581
+ {
1582
+ type: "column",
1583
+ attrs: { className: "p-4 gap-3 w-full box-border" },
1584
+ content: [
1585
+ blocks.heading("Column heading", 4),
1586
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1587
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1588
+ ]
1589
+ },
1590
+ {
1591
+ type: "column",
1592
+ attrs: { className: "p-4 gap-3 w-full box-border" },
1593
+ content: [
1594
+ blocks.heading("Column heading", 4),
1595
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt."),
1596
+ blocks.paragraph("Ut enim ad minim veniam, quis nostrud exercitation.")
1597
+ ]
1598
+ }
1599
+ ]
1600
+ }
1601
+ ]
1602
+ })
1603
+ };
1604
+ var threeColumns = {
1605
+ key: "tpl.threeColumns",
1606
+ label: "Three Columns",
1607
+ description: "Balanced three-column text",
1608
+ icon: threeColumnsIcon,
1609
+ build: () => slide2.singleCol({
1610
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
1611
+ content: [
1612
+ {
1613
+ type: "row",
1614
+ attrs: { layout: "1-1-1", className: "items-start w-full gap-4" },
1615
+ content: [
1616
+ {
1617
+ type: "column",
1618
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1619
+ content: [
1620
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1621
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.")
1622
+ ]
1623
+ },
1624
+ {
1625
+ type: "column",
1626
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1627
+ content: [
1628
+ blocks.paragraph("Ut enim ad minim veniam."),
1629
+ blocks.paragraph("Quis nostrud exercitation ullamco laboris.")
1630
+ ]
1631
+ },
1632
+ {
1633
+ type: "column",
1634
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1635
+ content: [
1636
+ blocks.paragraph("Nisi ut aliquip ex ea commodo consequat."),
1637
+ blocks.paragraph("Duis aute irure dolor in reprehenderit.")
1638
+ ]
1639
+ }
1640
+ ]
1641
+ }
1642
+ ]
1643
+ })
1644
+ };
1645
+ var threeColumnsWithHeader = {
1646
+ key: "tpl.threeColumnsWithHeader",
1647
+ label: "Three Columns + Header",
1648
+ description: "Header plus three columns",
1649
+ icon: threeColumnsHeaderIcon,
1650
+ build: () => slide2.singleCol({
1651
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
1652
+ content: [
1653
+ blocks.heading("Section heading", 2),
1654
+ {
1655
+ type: "row",
1656
+ attrs: { layout: "1-1-1", className: "items-start w-full gap-4" },
1657
+ content: [
1658
+ {
1659
+ type: "column",
1660
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1661
+ content: [
1662
+ blocks.heading("Column heading", 4),
1663
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1664
+ blocks.paragraph("Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.")
1665
+ ]
1666
+ },
1667
+ {
1668
+ type: "column",
1669
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1670
+ content: [
1671
+ blocks.heading("Column heading", 4),
1672
+ blocks.paragraph("Ut enim ad minim veniam."),
1673
+ blocks.paragraph("Quis nostrud exercitation ullamco laboris.")
1674
+ ]
1675
+ },
1676
+ {
1677
+ type: "column",
1678
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1679
+ content: [
1680
+ blocks.heading("Column heading", 4),
1681
+ blocks.paragraph("Nisi ut aliquip ex ea commodo consequat."),
1682
+ blocks.paragraph("Duis aute irure dolor in reprehenderit.")
1683
+ ]
1684
+ }
1685
+ ]
1686
+ }
1687
+ ]
1688
+ })
1689
+ };
1690
+ var fourColumnsWithHeader = {
1691
+ key: "tpl.fourColumnsWithHeader",
1692
+ label: "Four Columns + Header",
1693
+ description: "Header plus four columns",
1694
+ icon: fourColumnsHeaderIcon,
1695
+ build: () => slide2.singleCol({
1696
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
1697
+ content: [
1698
+ blocks.heading("Section heading", 2),
1699
+ {
1700
+ type: "row",
1701
+ attrs: { layout: "1-1-1-1", className: "items-start w-full gap-3" },
1702
+ content: [
1703
+ {
1704
+ type: "column",
1705
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1706
+ content: [
1707
+ blocks.heading("Column heading", 4),
1708
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1709
+ blocks.paragraph("Consectetur adipiscing elit.")
1710
+ ]
1711
+ },
1712
+ {
1713
+ type: "column",
1714
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1715
+ content: [
1716
+ blocks.heading("Column heading", 4),
1717
+ blocks.paragraph("Ut enim ad minim veniam."),
1718
+ blocks.paragraph("Quis nostrud exercitation ullamco laboris.")
1719
+ ]
1720
+ },
1721
+ {
1722
+ type: "column",
1723
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1724
+ content: [
1725
+ blocks.heading("Column heading", 4),
1726
+ blocks.paragraph("Nisi ut aliquip ex ea commodo consequat."),
1727
+ blocks.paragraph("Duis aute irure dolor in reprehenderit.")
1728
+ ]
1729
+ },
1730
+ {
1731
+ type: "column",
1732
+ attrs: { className: "p-3 gap-3 w-full box-border" },
1733
+ content: [
1734
+ blocks.heading("Column heading", 4),
1735
+ blocks.paragraph("Excepteur sint occaecat cupidatat."),
1736
+ blocks.paragraph("Sunt in culpa qui officia.")
1737
+ ]
1738
+ }
1739
+ ]
1740
+ }
1741
+ ]
1742
+ })
1743
+ };
1744
+ var fullImage = {
1745
+ key: "tpl.fullImage",
1746
+ label: "Full Image",
1747
+ description: "Edge-to-edge image filling the slide",
1748
+ icon: fullImageIcon,
1749
+ build: () => slide2.singleCol({
1750
+ rowAttrs: { className: "min-h-[720px]" },
1751
+ columnAttrs: { className: "p-0 w-full h-full", horizontalAlign: "stretch" },
1752
+ content: [
1753
+ blocks.imageBlock({
1754
+ src: "https://placehold.co/1920x1080/png",
1755
+ layout: "cover",
1756
+ fullBleed: true,
1757
+ align: "center"
1758
+ })
1759
+ ]
1760
+ })
1761
+ };
1762
+ var fourColumns = {
1763
+ key: "tpl.fourColumns",
1764
+ label: "Four Columns",
1765
+ description: "Balanced four-column text",
1766
+ icon: fourColumnsIcon,
1767
+ build: () => slide2.singleCol({
1768
+ columnAttrs: { className: "w-full p-4 gap-4", horizontalAlign: "stretch" },
1769
+ content: [
1770
+ {
1771
+ type: "row",
1772
+ attrs: { layout: "1-1-1-1", className: "items-start w-full gap-3" },
1773
+ content: Array.from({ length: 4 }).map(() => ({
1774
+ type: "column",
1775
+ attrs: { className: "p-2.5 gap-2 w-full box-border" },
1776
+ content: [
1777
+ blocks.paragraph("Lorem ipsum dolor sit amet."),
1778
+ blocks.paragraph("Consectetur adipiscing elit.")
1779
+ ]
1780
+ }))
1781
+ }
1782
+ ]
1783
+ })
1784
+ };
1785
+ var titleWithBullets = {
1786
+ key: "tpl.titleWithBullets",
1787
+ label: "Title with Bullets",
1788
+ description: "Header and a bullet list",
1789
+ icon: titleBulletsIcon,
1790
+ build: () => slide2.singleCol({
1791
+ columnAttrs: { className: "p-6 gap-4" },
1792
+ content: [
1793
+ blocks.heading("Lorem ipsum dolor sit amet", 2),
1794
+ blocks.bulletList([
1795
+ "Consectetur adipiscing elit.",
1796
+ "Sed do eiusmod tempor incididunt.",
1797
+ "Ut enim ad minim veniam."
1798
+ ])
1799
+ ]
1800
+ })
1801
+ };
1802
+ var titleBulletsAndImage = {
1803
+ key: "tpl.titleBulletsAndImage",
1804
+ label: "Title, Bullets & Image",
1805
+ description: "Title with bullets and an image",
1806
+ icon: titleBulletsImageIcon,
1807
+ build: () => slide2.twoCol({
1808
+ rowAttrs: { className: "items-start w-full" },
1809
+ leftColumnAttrs: { className: "p-6 gap-3 w-full" },
1810
+ rightColumnAttrs: {
1811
+ horizontalAlign: "center",
1812
+ verticalAlign: "center",
1813
+ className: "p-6 w-full"
1814
+ },
1815
+ left: [
1816
+ blocks.heading("Lorem ipsum dolor sit amet", 2),
1817
+ blocks.bulletList([
1818
+ "Consectetur adipiscing elit.",
1819
+ "Sed do eiusmod tempor incididunt.",
1820
+ "Ut enim ad minim veniam."
1821
+ ])
1822
+ ],
1823
+ right: [
1824
+ blocks.imageBlock({
1825
+ src: "https://placehold.co/480x360/png",
1826
+ layout: "contain",
1827
+ fullBleed: false
1828
+ })
1829
+ ]
1830
+ })
1831
+ };
1832
+ var accentLeft = {
1833
+ key: "tpl.accentLeft",
1834
+ label: "Accent left",
1835
+ description: "Accent band with image on the left, text on the right",
1836
+ icon: accentLeftIcon,
1837
+ build: () => slide2.twoCol({
1838
+ rowAttrs: { layout: "1-2", className: "items-stretch w-full gap-0 min-h-[360px]" },
1839
+ leftColumnAttrs: {
1840
+ className: "bg-slate-100 p-0 w-full h-full",
1841
+ horizontalAlign: "stretch",
1842
+ verticalAlign: "top"
1843
+ },
1844
+ rightColumnAttrs: { className: "p-6 gap-3 w-full", verticalAlign: "center" },
1845
+ left: [
1846
+ blocks.imageBlock({
1847
+ src: "https://placehold.co/320x240/png",
1848
+ layout: "cover",
1849
+ fullBleed: true,
1850
+ align: "center"
1851
+ })
1852
+ ],
1853
+ right: [
1854
+ blocks.heading("Accent left", 3),
1855
+ blocks.paragraph("Short supporting copy goes here."),
1856
+ blocks.paragraph("Add one more line if needed.")
1857
+ ]
1858
+ })
1859
+ };
1860
+ var accentRight = {
1861
+ key: "tpl.accentRight",
1862
+ label: "Accent right",
1863
+ description: "Accent band with image on the right, text on the left",
1864
+ icon: accentRightIcon,
1865
+ build: () => slide2.twoCol({
1866
+ rowAttrs: { layout: "2-1", className: "items-stretch w-full gap-0 min-h-[360px]" },
1867
+ leftColumnAttrs: { className: "p-6 gap-3 w-full", verticalAlign: "center" },
1868
+ rightColumnAttrs: {
1869
+ className: "bg-slate-100 p-0 w-full h-full",
1870
+ horizontalAlign: "stretch",
1871
+ verticalAlign: "top"
1872
+ },
1873
+ left: [
1874
+ blocks.heading("Accent right", 3),
1875
+ blocks.paragraph("Short supporting copy goes here."),
1876
+ blocks.paragraph("Add one more line if needed.")
1877
+ ],
1878
+ right: [
1879
+ blocks.imageBlock({
1880
+ src: "https://placehold.co/320x240/png",
1881
+ layout: "cover",
1882
+ fullBleed: true,
1883
+ align: "center"
1884
+ })
1885
+ ]
1886
+ })
1887
+ };
1888
+ var accentTop = {
1889
+ key: "tpl.accentTop",
1890
+ label: "Accent top",
1891
+ description: "Accent band on top with image, text below",
1892
+ icon: accentTopIcon,
1893
+ build: () => ({
1894
+ type: "slide",
1895
+ attrs: { id: "slide-1", size: "16x9", className: "" },
1896
+ content: [
1897
+ {
1898
+ type: "row",
1899
+ attrs: { layout: "1", className: "w-full items-stretch h-[20vh] min-h-[140px]" },
1900
+ content: [
1901
+ {
1902
+ type: "column",
1903
+ attrs: { className: "bg-slate-100 p-0 w-full h-full box-border" },
1904
+ content: [
1905
+ blocks.imageBlock({
1906
+ src: "https://placehold.co/1200x400/png",
1907
+ layout: "cover",
1908
+ fullBleed: true,
1909
+ align: "center"
1910
+ })
1911
+ ]
1912
+ }
1913
+ ]
1914
+ },
1915
+ {
1916
+ type: "row",
1917
+ attrs: { layout: "1", className: "w-full flex-1" },
1918
+ content: [
1919
+ {
1920
+ type: "column",
1921
+ attrs: { className: "p-6 gap-3 w-full box-border justify-end" },
1922
+ content: [
1923
+ blocks.heading("Accent top", 3),
1924
+ blocks.paragraph("Short supporting copy goes here."),
1925
+ blocks.paragraph("Add one more line if needed.")
1926
+ ]
1927
+ }
1928
+ ]
1929
+ }
1930
+ ]
1931
+ })
1932
+ };
1933
+ var accentRightFit = {
1934
+ key: "tpl.accentRightFit",
1935
+ label: "Accent right (fit)",
1936
+ description: "Text with a tighter image card on the right",
1937
+ icon: accentRightFitIcon,
1938
+ build: () => slide2.twoCol({
1939
+ rowAttrs: { layout: "2-1", className: "items-center w-full gap-4" },
1940
+ leftColumnAttrs: { className: "p-6 gap-3 w-full", verticalAlign: "center" },
1941
+ rightColumnAttrs: {
1942
+ className: "p-6 w-full items-center",
1943
+ verticalAlign: "center",
1944
+ horizontalAlign: "center"
1945
+ },
1946
+ left: [
1947
+ blocks.heading("Accent right (fit)", 3),
1948
+ blocks.paragraph("Short supporting copy goes here."),
1949
+ blocks.paragraph("Add one more line if needed.")
1950
+ ],
1951
+ right: [
1952
+ {
1953
+ type: "column",
1954
+ attrs: { className: "bg-slate-100 p-4 gap-3 rounded-lg w-full items-center" },
1955
+ content: [
1956
+ blocks.imageBlock({
1957
+ src: "https://placehold.co/240x200/png",
1958
+ layout: "contain",
1959
+ fullBleed: false,
1960
+ align: "center"
1961
+ })
1962
+ ]
1963
+ }
1964
+ ]
1965
+ })
1966
+ };
1967
+ var accentLeftFit = {
1968
+ key: "tpl.accentLeftFit",
1969
+ label: "Accent left (fit)",
1970
+ description: "Compact image card on the left, text on the right",
1971
+ icon: accentLeftFitIcon,
1972
+ build: () => slide2.twoCol({
1973
+ rowAttrs: { layout: "1-2", className: "items-center w-full gap-4" },
1974
+ leftColumnAttrs: {
1975
+ className: "p-6 w-full items-center",
1976
+ verticalAlign: "center",
1977
+ horizontalAlign: "center"
1978
+ },
1979
+ rightColumnAttrs: { className: "p-6 gap-3 w-full", verticalAlign: "center" },
1980
+ left: [
1981
+ {
1982
+ type: "column",
1983
+ attrs: { className: "bg-slate-100 p-4 gap-3 rounded-lg w-full items-center" },
1984
+ content: [
1985
+ blocks.imageBlock({
1986
+ src: "https://placehold.co/240x200/png",
1987
+ layout: "contain",
1988
+ fullBleed: false,
1989
+ align: "center"
1990
+ })
1991
+ ]
1992
+ }
1993
+ ],
1994
+ right: [
1995
+ blocks.heading("Accent left (fit)", 3),
1996
+ blocks.paragraph("Short supporting copy goes here."),
1997
+ blocks.paragraph("Add one more line if needed.")
1998
+ ]
1999
+ })
2000
+ };
2001
+ var twoImageColumns = {
2002
+ key: "tpl.twoImageColumns",
2003
+ label: "2 image columns",
2004
+ description: "Header with two image cards",
2005
+ icon: twoImageColumnsIcon,
2006
+ build: () => slide2.singleCol({
2007
+ columnAttrs: { className: "w-full p-6 gap-4", horizontalAlign: "stretch" },
2008
+ content: [
2009
+ blocks.heading("Images", 2),
2010
+ {
2011
+ type: "row",
2012
+ attrs: { layout: "1-1", className: "items-start w-full gap-4" },
2013
+ content: [
2014
+ {
2015
+ type: "column",
2016
+ attrs: { className: "p-4 gap-3 w-full box-border" },
2017
+ content: [
2018
+ blocks.imageBlock({
2019
+ src: "https://placehold.co/640x360/png",
2020
+ layout: "contain",
2021
+ fullBleed: false,
2022
+ align: "center"
2023
+ }),
2024
+ blocks.heading("Image title", 4),
2025
+ blocks.paragraph("Short supporting copy goes here.")
2026
+ ]
2027
+ },
2028
+ {
2029
+ type: "column",
2030
+ attrs: { className: "p-4 gap-3 w-full box-border" },
2031
+ content: [
2032
+ blocks.imageBlock({
2033
+ src: "https://placehold.co/640x360/png",
2034
+ layout: "contain",
2035
+ fullBleed: false,
2036
+ align: "center"
2037
+ }),
2038
+ blocks.heading("Image title", 4),
2039
+ blocks.paragraph("Short supporting copy goes here.")
2040
+ ]
2041
+ }
2042
+ ]
2043
+ }
2044
+ ]
2045
+ })
2046
+ };
2047
+ var registry = {
2048
+ "tpl.titleAndSubheader": titleAndSubheader,
2049
+ "tpl.imageAndText": imageAndText,
2050
+ "tpl.textAndImage": textAndImage,
2051
+ "tpl.twoColumns": twoColumns,
2052
+ "tpl.twoColumnsWithHeader": twoColumnsWithHeader,
2053
+ "tpl.threeColumns": threeColumns,
2054
+ "tpl.threeColumnsWithHeader": threeColumnsWithHeader,
2055
+ "tpl.fourColumns": fourColumns,
2056
+ "tpl.fourColumnsWithHeader": fourColumnsWithHeader,
2057
+ "tpl.titleWithBullets": titleWithBullets,
2058
+ "tpl.titleBulletsAndImage": titleBulletsAndImage,
2059
+ "tpl.fullImage": fullImage,
2060
+ "tpl.accentLeft": accentLeft,
2061
+ "tpl.accentRight": accentRight,
2062
+ "tpl.accentTop": accentTop,
2063
+ "tpl.accentRightFit": accentRightFit,
2064
+ "tpl.accentLeftFit": accentLeftFit,
2065
+ "tpl.twoImageColumns": twoImageColumns
2066
+ };
2067
+ var listPresetTemplates = () => Object.values(registry);
2068
+ var buildPresetTemplate = (key) => registry[key].build();
896
2069
  export {
897
2070
  v1_exports4 as bundlesV1,
898
2071
  v1_exports as contextsV1,
899
2072
  v1_exports2 as examplesV1,
900
2073
  v1_exports5 as recipesV1,
901
- v1_exports3 as schemasV1
2074
+ v1_exports3 as schemasV1,
2075
+ v1_exports6 as templatesV1
902
2076
  };
903
2077
  //# sourceMappingURL=index.js.map