@mulmocast/deck 0.3.0 → 0.4.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/lib/blocks.js CHANGED
@@ -131,14 +131,24 @@ const renderSubBullets = (item) => {
131
131
  .join("\n");
132
132
  return `\n${subs}`;
133
133
  };
134
+ /** Map a per-item status icon variant to its glyph and color class segment. */
135
+ const STATUS_ICON_GLYPHS = {
136
+ ok: { glyph: "\u2713", color: "success" }, // \u2713
137
+ no: { glyph: "\u2715", color: "danger" }, // \u2715
138
+ warn: { glyph: "\u26a0", color: "warning" }, // \u26a0
139
+ };
134
140
  const renderBullets = (block) => {
135
141
  const tag = block.ordered ? "ol" : "ul";
136
142
  const items = block.items
137
143
  .map((item, i) => {
138
- const marker = block.ordered ? `${i + 1}.` : escapeHtml(block.icon || "\u2022");
144
+ // Per-item status icon overrides the block-level marker / numbered prefix.
145
+ const statusIcon = typeof item === "object" && item.icon ? STATUS_ICON_GLYPHS[item.icon] : undefined;
146
+ const markerHtml = statusIcon
147
+ ? `<span class="text-${c(statusIcon.color)} font-extrabold shrink-0">${statusIcon.glyph}</span>`
148
+ : `<span class="text-d-dim shrink-0">${block.ordered ? `${i + 1}.` : escapeHtml(block.icon || "\u2022")}</span>`;
139
149
  const text = bulletItemText(item);
140
150
  const subHtml = renderSubBullets(item);
141
- return ` <li class="flex flex-col gap-1"><div class="flex gap-2"><span class="text-d-dim shrink-0">${marker}</span><span>${renderInlineMarkup(text)}</span></div>${subHtml}</li>`;
151
+ return ` <li class="flex flex-col gap-1"><div class="flex gap-2">${markerHtml}<span>${renderInlineMarkup(text)}</span></div>${subHtml}</li>`;
142
152
  })
143
153
  .join("\n");
144
154
  return `<${tag} class="space-y-2 text-[15px] text-d-muted font-body">\n${items}\n</${tag}>`;
@@ -10,6 +10,7 @@ import { layoutMatrix } from "./matrix.js";
10
10
  import { layoutTable } from "./table.js";
11
11
  import { layoutFunnel } from "./funnel.js";
12
12
  import { layoutWaterfall } from "./waterfall.js";
13
+ import { layoutManifesto } from "./manifesto.js";
13
14
  import { escapeHtml } from "../utils.js";
14
15
  /** Render the inner content of a slide (without the wrapper div) */
15
16
  export const renderSlideContent = (slide) => {
@@ -38,6 +39,8 @@ export const renderSlideContent = (slide) => {
38
39
  return layoutFunnel(slide);
39
40
  case "waterfall":
40
41
  return layoutWaterfall(slide);
42
+ case "manifesto":
43
+ return layoutManifesto(slide);
41
44
  default: {
42
45
  const _exhaustive = slide;
43
46
  return `<p class="text-white p-8">Unknown layout: ${escapeHtml(String(_exhaustive.layout))}</p>`;
@@ -0,0 +1,2 @@
1
+ import type { ManifestoSlide } from "../schema.js";
2
+ export declare const layoutManifesto: (data: ManifestoSlide) => string;
@@ -0,0 +1,39 @@
1
+ import { renderInlineMarkup, c, slideHeader, renderOptionalCallout, resolveItemColor } from "../utils.js";
2
+ const buildManifestoCard = (line, slideAccent) => {
3
+ const color = resolveItemColor(line.accentColor, slideAccent);
4
+ const parts = [];
5
+ parts.push(`<div class="relative bg-d-card rounded-lg shadow-md overflow-hidden flex flex-col">`);
6
+ parts.push(` <div class="absolute left-0 top-0 bottom-0 w-1 bg-${c(color)}"></div>`);
7
+ parts.push(` <div class="px-5 py-4 pl-6 flex-1">`);
8
+ parts.push(` <h3 class="text-lg font-bold text-d-text font-body leading-snug">${renderInlineMarkup(line.title)}</h3>`);
9
+ if (line.description) {
10
+ parts.push(` <p class="text-sm text-d-muted font-body mt-1 leading-relaxed">${renderInlineMarkup(line.description)}</p>`);
11
+ }
12
+ parts.push(` </div>`);
13
+ parts.push(`</div>`);
14
+ return parts.join("\n");
15
+ };
16
+ const DEFAULT_COLUMNS = 2;
17
+ const MAX_COLUMNS = 4;
18
+ const gridColsClass = (columns) => {
19
+ // Tailwind requires literal class names — map explicitly.
20
+ const cls = {
21
+ 1: "grid-cols-1",
22
+ 2: "grid-cols-2",
23
+ 3: "grid-cols-3",
24
+ 4: "grid-cols-4",
25
+ };
26
+ return cls[columns] || cls[DEFAULT_COLUMNS];
27
+ };
28
+ export const layoutManifesto = (data) => {
29
+ const cols = Math.min(Math.max(data.columns ?? DEFAULT_COLUMNS, 1), MAX_COLUMNS);
30
+ const items = data.items || [];
31
+ const parts = [slideHeader(data)];
32
+ parts.push(`<div class="grid ${gridColsClass(cols)} gap-4 px-12 mt-5 flex-1 min-h-0 content-start">`);
33
+ items.forEach((line) => {
34
+ parts.push(buildManifestoCard(line, data.accentColor));
35
+ });
36
+ parts.push(`</div>`);
37
+ parts.push(renderOptionalCallout(data.callout));
38
+ return parts.join("\n");
39
+ };
@@ -7,11 +7,14 @@ export const layoutTimeline = (data) => {
7
7
  parts.push(`<div class="flex items-start mt-10 relative">`);
8
8
  parts.push(`<div class="absolute left-4 right-4 top-[52px] h-[2px] bg-d-alt"></div>`);
9
9
  items.forEach((item) => {
10
- const color = resolveItemColor(item.color, data.accentColor);
10
+ const baseColor = resolveItemColor(item.color, data.accentColor);
11
+ // 'hot' items are emphasized — keep the configured color when set, else fall back to warning (amber) for visibility.
12
+ const color = item.hot ? item.color || "warning" : baseColor;
11
13
  const dotBorder = item.done ? `bg-${c(color)}` : `bg-d-alt`;
12
14
  const dotInner = item.done ? "bg-d-text" : `bg-${c(color)}`;
15
+ const hotRing = item.hot ? ` ring-2 ring-${c(color)} ring-offset-2 ring-offset-d-bg` : "";
13
16
  parts.push(`<div class="flex-1 flex flex-col items-center text-center relative z-10">`);
14
- parts.push(` <div class="w-10 h-10 rounded-full ${dotBorder} flex items-center justify-center shadow-lg">`);
17
+ parts.push(` <div class="w-10 h-10 rounded-full ${dotBorder} flex items-center justify-center shadow-lg${hotRing}">`);
15
18
  parts.push(` <div class="w-4 h-4 rounded-full ${dotInner}"></div>`);
16
19
  parts.push(` </div>`);
17
20
  parts.push(` <p class="text-sm font-bold text-${c(color)} font-body mt-4">${renderInlineMarkup(item.date)}</p>`);
package/lib/schema.d.ts CHANGED
@@ -76,12 +76,23 @@ export declare const textBlockSchema: z.ZodObject<{
76
76
  highlight: "highlight";
77
77
  }>>;
78
78
  }, z.core.$strip>;
79
- /** Bullet item: plain string or object with text and optional sub-items (2 levels max) */
79
+ /** Status-icon variants for bullets (renders / / in the accent color of the variant). */
80
+ export declare const bulletIconSchema: z.ZodEnum<{
81
+ ok: "ok";
82
+ no: "no";
83
+ warn: "warn";
84
+ }>;
85
+ /** Bullet item: plain string, or object with text + optional sub-items + optional status icon. */
80
86
  export declare const bulletItemSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
81
87
  text: z.ZodString;
82
88
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
83
89
  text: z.ZodString;
84
90
  }, z.core.$strip>]>>>;
91
+ icon: z.ZodOptional<z.ZodEnum<{
92
+ ok: "ok";
93
+ no: "no";
94
+ warn: "warn";
95
+ }>>;
85
96
  }, z.core.$strip>]>;
86
97
  export declare const bulletsBlockSchema: z.ZodObject<{
87
98
  type: z.ZodLiteral<"bullets">;
@@ -90,6 +101,11 @@ export declare const bulletsBlockSchema: z.ZodObject<{
90
101
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
91
102
  text: z.ZodString;
92
103
  }, z.core.$strip>]>>>;
104
+ icon: z.ZodOptional<z.ZodEnum<{
105
+ ok: "ok";
106
+ no: "no";
107
+ warn: "warn";
108
+ }>>;
93
109
  }, z.core.$strip>]>>;
94
110
  ordered: z.ZodOptional<z.ZodBoolean>;
95
111
  icon: z.ZodOptional<z.ZodString>;
@@ -247,6 +263,11 @@ export declare const sectionBlockSchema: z.ZodObject<{
247
263
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
248
264
  text: z.ZodString;
249
265
  }, z.core.$strip>]>>>;
266
+ icon: z.ZodOptional<z.ZodEnum<{
267
+ ok: "ok";
268
+ no: "no";
269
+ warn: "warn";
270
+ }>>;
250
271
  }, z.core.$strip>]>>;
251
272
  ordered: z.ZodOptional<z.ZodBoolean>;
252
273
  icon: z.ZodOptional<z.ZodString>;
@@ -372,6 +393,11 @@ export declare const contentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
372
393
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
373
394
  text: z.ZodString;
374
395
  }, z.core.$strip>]>>>;
396
+ icon: z.ZodOptional<z.ZodEnum<{
397
+ ok: "ok";
398
+ no: "no";
399
+ warn: "warn";
400
+ }>>;
375
401
  }, z.core.$strip>]>>;
376
402
  ordered: z.ZodOptional<z.ZodBoolean>;
377
403
  icon: z.ZodOptional<z.ZodString>;
@@ -505,6 +531,11 @@ export declare const contentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
505
531
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
506
532
  text: z.ZodString;
507
533
  }, z.core.$strip>]>>>;
534
+ icon: z.ZodOptional<z.ZodEnum<{
535
+ ok: "ok";
536
+ no: "no";
537
+ warn: "warn";
538
+ }>>;
508
539
  }, z.core.$strip>]>>;
509
540
  ordered: z.ZodOptional<z.ZodBoolean>;
510
541
  icon: z.ZodOptional<z.ZodString>;
@@ -661,6 +692,11 @@ export declare const cardSchema: z.ZodObject<{
661
692
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
662
693
  text: z.ZodString;
663
694
  }, z.core.$strip>]>>>;
695
+ icon: z.ZodOptional<z.ZodEnum<{
696
+ ok: "ok";
697
+ no: "no";
698
+ warn: "warn";
699
+ }>>;
664
700
  }, z.core.$strip>]>>;
665
701
  ordered: z.ZodOptional<z.ZodBoolean>;
666
702
  icon: z.ZodOptional<z.ZodString>;
@@ -794,6 +830,11 @@ export declare const cardSchema: z.ZodObject<{
794
830
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
795
831
  text: z.ZodString;
796
832
  }, z.core.$strip>]>>>;
833
+ icon: z.ZodOptional<z.ZodEnum<{
834
+ ok: "ok";
835
+ no: "no";
836
+ warn: "warn";
837
+ }>>;
797
838
  }, z.core.$strip>]>>;
798
839
  ordered: z.ZodOptional<z.ZodBoolean>;
799
840
  icon: z.ZodOptional<z.ZodString>;
@@ -996,6 +1037,11 @@ export declare const columnsSlideSchema: z.ZodObject<{
996
1037
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
997
1038
  text: z.ZodString;
998
1039
  }, z.core.$strip>]>>>;
1040
+ icon: z.ZodOptional<z.ZodEnum<{
1041
+ ok: "ok";
1042
+ no: "no";
1043
+ warn: "warn";
1044
+ }>>;
999
1045
  }, z.core.$strip>]>>;
1000
1046
  ordered: z.ZodOptional<z.ZodBoolean>;
1001
1047
  icon: z.ZodOptional<z.ZodString>;
@@ -1129,6 +1175,11 @@ export declare const columnsSlideSchema: z.ZodObject<{
1129
1175
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1130
1176
  text: z.ZodString;
1131
1177
  }, z.core.$strip>]>>>;
1178
+ icon: z.ZodOptional<z.ZodEnum<{
1179
+ ok: "ok";
1180
+ no: "no";
1181
+ warn: "warn";
1182
+ }>>;
1132
1183
  }, z.core.$strip>]>>;
1133
1184
  ordered: z.ZodOptional<z.ZodBoolean>;
1134
1185
  icon: z.ZodOptional<z.ZodString>;
@@ -1321,6 +1372,11 @@ export declare const comparisonPanelSchema: z.ZodObject<{
1321
1372
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1322
1373
  text: z.ZodString;
1323
1374
  }, z.core.$strip>]>>>;
1375
+ icon: z.ZodOptional<z.ZodEnum<{
1376
+ ok: "ok";
1377
+ no: "no";
1378
+ warn: "warn";
1379
+ }>>;
1324
1380
  }, z.core.$strip>]>>;
1325
1381
  ordered: z.ZodOptional<z.ZodBoolean>;
1326
1382
  icon: z.ZodOptional<z.ZodString>;
@@ -1454,6 +1510,11 @@ export declare const comparisonPanelSchema: z.ZodObject<{
1454
1510
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1455
1511
  text: z.ZodString;
1456
1512
  }, z.core.$strip>]>>>;
1513
+ icon: z.ZodOptional<z.ZodEnum<{
1514
+ ok: "ok";
1515
+ no: "no";
1516
+ warn: "warn";
1517
+ }>>;
1457
1518
  }, z.core.$strip>]>>;
1458
1519
  ordered: z.ZodOptional<z.ZodBoolean>;
1459
1520
  icon: z.ZodOptional<z.ZodString>;
@@ -1596,6 +1657,11 @@ export declare const comparisonSlideSchema: z.ZodObject<{
1596
1657
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1597
1658
  text: z.ZodString;
1598
1659
  }, z.core.$strip>]>>>;
1660
+ icon: z.ZodOptional<z.ZodEnum<{
1661
+ ok: "ok";
1662
+ no: "no";
1663
+ warn: "warn";
1664
+ }>>;
1599
1665
  }, z.core.$strip>]>>;
1600
1666
  ordered: z.ZodOptional<z.ZodBoolean>;
1601
1667
  icon: z.ZodOptional<z.ZodString>;
@@ -1729,6 +1795,11 @@ export declare const comparisonSlideSchema: z.ZodObject<{
1729
1795
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1730
1796
  text: z.ZodString;
1731
1797
  }, z.core.$strip>]>>>;
1798
+ icon: z.ZodOptional<z.ZodEnum<{
1799
+ ok: "ok";
1800
+ no: "no";
1801
+ warn: "warn";
1802
+ }>>;
1732
1803
  }, z.core.$strip>]>>;
1733
1804
  ordered: z.ZodOptional<z.ZodBoolean>;
1734
1805
  icon: z.ZodOptional<z.ZodString>;
@@ -1867,6 +1938,11 @@ export declare const comparisonSlideSchema: z.ZodObject<{
1867
1938
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1868
1939
  text: z.ZodString;
1869
1940
  }, z.core.$strip>]>>>;
1941
+ icon: z.ZodOptional<z.ZodEnum<{
1942
+ ok: "ok";
1943
+ no: "no";
1944
+ warn: "warn";
1945
+ }>>;
1870
1946
  }, z.core.$strip>]>>;
1871
1947
  ordered: z.ZodOptional<z.ZodBoolean>;
1872
1948
  icon: z.ZodOptional<z.ZodString>;
@@ -2000,6 +2076,11 @@ export declare const comparisonSlideSchema: z.ZodObject<{
2000
2076
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2001
2077
  text: z.ZodString;
2002
2078
  }, z.core.$strip>]>>>;
2079
+ icon: z.ZodOptional<z.ZodEnum<{
2080
+ ok: "ok";
2081
+ no: "no";
2082
+ warn: "warn";
2083
+ }>>;
2003
2084
  }, z.core.$strip>]>>;
2004
2085
  ordered: z.ZodOptional<z.ZodBoolean>;
2005
2086
  icon: z.ZodOptional<z.ZodString>;
@@ -2189,6 +2270,11 @@ export declare const gridItemSchema: z.ZodObject<{
2189
2270
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2190
2271
  text: z.ZodString;
2191
2272
  }, z.core.$strip>]>>>;
2273
+ icon: z.ZodOptional<z.ZodEnum<{
2274
+ ok: "ok";
2275
+ no: "no";
2276
+ warn: "warn";
2277
+ }>>;
2192
2278
  }, z.core.$strip>]>>;
2193
2279
  ordered: z.ZodOptional<z.ZodBoolean>;
2194
2280
  icon: z.ZodOptional<z.ZodString>;
@@ -2322,6 +2408,11 @@ export declare const gridItemSchema: z.ZodObject<{
2322
2408
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2323
2409
  text: z.ZodString;
2324
2410
  }, z.core.$strip>]>>>;
2411
+ icon: z.ZodOptional<z.ZodEnum<{
2412
+ ok: "ok";
2413
+ no: "no";
2414
+ warn: "warn";
2415
+ }>>;
2325
2416
  }, z.core.$strip>]>>;
2326
2417
  ordered: z.ZodOptional<z.ZodBoolean>;
2327
2418
  icon: z.ZodOptional<z.ZodString>;
@@ -2466,6 +2557,11 @@ export declare const gridSlideSchema: z.ZodObject<{
2466
2557
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2467
2558
  text: z.ZodString;
2468
2559
  }, z.core.$strip>]>>>;
2560
+ icon: z.ZodOptional<z.ZodEnum<{
2561
+ ok: "ok";
2562
+ no: "no";
2563
+ warn: "warn";
2564
+ }>>;
2469
2565
  }, z.core.$strip>]>>;
2470
2566
  ordered: z.ZodOptional<z.ZodBoolean>;
2471
2567
  icon: z.ZodOptional<z.ZodString>;
@@ -2599,6 +2695,11 @@ export declare const gridSlideSchema: z.ZodObject<{
2599
2695
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2600
2696
  text: z.ZodString;
2601
2697
  }, z.core.$strip>]>>>;
2698
+ icon: z.ZodOptional<z.ZodEnum<{
2699
+ ok: "ok";
2700
+ no: "no";
2701
+ warn: "warn";
2702
+ }>>;
2602
2703
  }, z.core.$strip>]>>;
2603
2704
  ordered: z.ZodOptional<z.ZodBoolean>;
2604
2705
  icon: z.ZodOptional<z.ZodString>;
@@ -2859,6 +2960,7 @@ export declare const timelineItemSchema: z.ZodObject<{
2859
2960
  highlight: "highlight";
2860
2961
  }>>;
2861
2962
  done: z.ZodOptional<z.ZodBoolean>;
2963
+ hot: z.ZodOptional<z.ZodBoolean>;
2862
2964
  }, z.core.$strip>;
2863
2965
  export declare const timelineSlideSchema: z.ZodObject<{
2864
2966
  title: z.ZodString;
@@ -2878,6 +2980,7 @@ export declare const timelineSlideSchema: z.ZodObject<{
2878
2980
  highlight: "highlight";
2879
2981
  }>>;
2880
2982
  done: z.ZodOptional<z.ZodBoolean>;
2983
+ hot: z.ZodOptional<z.ZodBoolean>;
2881
2984
  }, z.core.$strip>>;
2882
2985
  accentColor: z.ZodOptional<z.ZodEnum<{
2883
2986
  primary: "primary";
@@ -2950,6 +3053,11 @@ export declare const splitPanelSchema: z.ZodObject<{
2950
3053
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2951
3054
  text: z.ZodString;
2952
3055
  }, z.core.$strip>]>>>;
3056
+ icon: z.ZodOptional<z.ZodEnum<{
3057
+ ok: "ok";
3058
+ no: "no";
3059
+ warn: "warn";
3060
+ }>>;
2953
3061
  }, z.core.$strip>]>>;
2954
3062
  ordered: z.ZodOptional<z.ZodBoolean>;
2955
3063
  icon: z.ZodOptional<z.ZodString>;
@@ -3083,6 +3191,11 @@ export declare const splitPanelSchema: z.ZodObject<{
3083
3191
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3084
3192
  text: z.ZodString;
3085
3193
  }, z.core.$strip>]>>>;
3194
+ icon: z.ZodOptional<z.ZodEnum<{
3195
+ ok: "ok";
3196
+ no: "no";
3197
+ warn: "warn";
3198
+ }>>;
3086
3199
  }, z.core.$strip>]>>;
3087
3200
  ordered: z.ZodOptional<z.ZodBoolean>;
3088
3201
  icon: z.ZodOptional<z.ZodString>;
@@ -3231,6 +3344,11 @@ export declare const splitSlideSchema: z.ZodObject<{
3231
3344
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3232
3345
  text: z.ZodString;
3233
3346
  }, z.core.$strip>]>>>;
3347
+ icon: z.ZodOptional<z.ZodEnum<{
3348
+ ok: "ok";
3349
+ no: "no";
3350
+ warn: "warn";
3351
+ }>>;
3234
3352
  }, z.core.$strip>]>>;
3235
3353
  ordered: z.ZodOptional<z.ZodBoolean>;
3236
3354
  icon: z.ZodOptional<z.ZodString>;
@@ -3364,6 +3482,11 @@ export declare const splitSlideSchema: z.ZodObject<{
3364
3482
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3365
3483
  text: z.ZodString;
3366
3484
  }, z.core.$strip>]>>>;
3485
+ icon: z.ZodOptional<z.ZodEnum<{
3486
+ ok: "ok";
3487
+ no: "no";
3488
+ warn: "warn";
3489
+ }>>;
3367
3490
  }, z.core.$strip>]>>;
3368
3491
  ordered: z.ZodOptional<z.ZodBoolean>;
3369
3492
  icon: z.ZodOptional<z.ZodString>;
@@ -3511,6 +3634,11 @@ export declare const splitSlideSchema: z.ZodObject<{
3511
3634
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3512
3635
  text: z.ZodString;
3513
3636
  }, z.core.$strip>]>>>;
3637
+ icon: z.ZodOptional<z.ZodEnum<{
3638
+ ok: "ok";
3639
+ no: "no";
3640
+ warn: "warn";
3641
+ }>>;
3514
3642
  }, z.core.$strip>]>>;
3515
3643
  ordered: z.ZodOptional<z.ZodBoolean>;
3516
3644
  icon: z.ZodOptional<z.ZodString>;
@@ -3644,6 +3772,11 @@ export declare const splitSlideSchema: z.ZodObject<{
3644
3772
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3645
3773
  text: z.ZodString;
3646
3774
  }, z.core.$strip>]>>>;
3775
+ icon: z.ZodOptional<z.ZodEnum<{
3776
+ ok: "ok";
3777
+ no: "no";
3778
+ warn: "warn";
3779
+ }>>;
3647
3780
  }, z.core.$strip>]>>;
3648
3781
  ordered: z.ZodOptional<z.ZodBoolean>;
3649
3782
  icon: z.ZodOptional<z.ZodString>;
@@ -3810,6 +3943,11 @@ export declare const matrixCellSchema: z.ZodObject<{
3810
3943
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3811
3944
  text: z.ZodString;
3812
3945
  }, z.core.$strip>]>>>;
3946
+ icon: z.ZodOptional<z.ZodEnum<{
3947
+ ok: "ok";
3948
+ no: "no";
3949
+ warn: "warn";
3950
+ }>>;
3813
3951
  }, z.core.$strip>]>>;
3814
3952
  ordered: z.ZodOptional<z.ZodBoolean>;
3815
3953
  icon: z.ZodOptional<z.ZodString>;
@@ -3943,6 +4081,11 @@ export declare const matrixCellSchema: z.ZodObject<{
3943
4081
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
3944
4082
  text: z.ZodString;
3945
4083
  }, z.core.$strip>]>>>;
4084
+ icon: z.ZodOptional<z.ZodEnum<{
4085
+ ok: "ok";
4086
+ no: "no";
4087
+ warn: "warn";
4088
+ }>>;
3946
4089
  }, z.core.$strip>]>>;
3947
4090
  ordered: z.ZodOptional<z.ZodBoolean>;
3948
4091
  icon: z.ZodOptional<z.ZodString>;
@@ -4097,6 +4240,11 @@ export declare const matrixSlideSchema: z.ZodObject<{
4097
4240
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
4098
4241
  text: z.ZodString;
4099
4242
  }, z.core.$strip>]>>>;
4243
+ icon: z.ZodOptional<z.ZodEnum<{
4244
+ ok: "ok";
4245
+ no: "no";
4246
+ warn: "warn";
4247
+ }>>;
4100
4248
  }, z.core.$strip>]>>;
4101
4249
  ordered: z.ZodOptional<z.ZodBoolean>;
4102
4250
  icon: z.ZodOptional<z.ZodString>;
@@ -4230,6 +4378,11 @@ export declare const matrixSlideSchema: z.ZodObject<{
4230
4378
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
4231
4379
  text: z.ZodString;
4232
4380
  }, z.core.$strip>]>>>;
4381
+ icon: z.ZodOptional<z.ZodEnum<{
4382
+ ok: "ok";
4383
+ no: "no";
4384
+ warn: "warn";
4385
+ }>>;
4233
4386
  }, z.core.$strip>]>>;
4234
4387
  ordered: z.ZodOptional<z.ZodBoolean>;
4235
4388
  icon: z.ZodOptional<z.ZodString>;
@@ -4598,6 +4751,90 @@ export declare const funnelSlideSchema: z.ZodObject<{
4598
4751
  }, z.core.$strip>>;
4599
4752
  layout: z.ZodLiteral<"funnel">;
4600
4753
  }, z.core.$strip>;
4754
+ /** A single line in a manifesto / creed grid. */
4755
+ export declare const manifestoLineSchema: z.ZodObject<{
4756
+ title: z.ZodString;
4757
+ description: z.ZodOptional<z.ZodString>;
4758
+ accentColor: z.ZodOptional<z.ZodEnum<{
4759
+ primary: "primary";
4760
+ accent: "accent";
4761
+ success: "success";
4762
+ warning: "warning";
4763
+ danger: "danger";
4764
+ info: "info";
4765
+ highlight: "highlight";
4766
+ }>>;
4767
+ }, z.core.$strip>;
4768
+ /**
4769
+ * Grid of short bordered cards, each with a colored left accent — useful for manifestos,
4770
+ * principles, "what we believe" lists, etc.
4771
+ */
4772
+ export declare const manifestoSlideSchema: z.ZodObject<{
4773
+ title: z.ZodString;
4774
+ stepLabel: z.ZodOptional<z.ZodString>;
4775
+ subtitle: z.ZodOptional<z.ZodString>;
4776
+ items: z.ZodArray<z.ZodObject<{
4777
+ title: z.ZodString;
4778
+ description: z.ZodOptional<z.ZodString>;
4779
+ accentColor: z.ZodOptional<z.ZodEnum<{
4780
+ primary: "primary";
4781
+ accent: "accent";
4782
+ success: "success";
4783
+ warning: "warning";
4784
+ danger: "danger";
4785
+ info: "info";
4786
+ highlight: "highlight";
4787
+ }>>;
4788
+ }, z.core.$strip>>;
4789
+ columns: z.ZodOptional<z.ZodNumber>;
4790
+ callout: z.ZodOptional<z.ZodObject<{
4791
+ text: z.ZodString;
4792
+ label: z.ZodOptional<z.ZodString>;
4793
+ color: z.ZodOptional<z.ZodEnum<{
4794
+ primary: "primary";
4795
+ accent: "accent";
4796
+ success: "success";
4797
+ warning: "warning";
4798
+ danger: "danger";
4799
+ info: "info";
4800
+ highlight: "highlight";
4801
+ }>>;
4802
+ align: z.ZodOptional<z.ZodEnum<{
4803
+ left: "left";
4804
+ center: "center";
4805
+ }>>;
4806
+ leftBar: z.ZodOptional<z.ZodBoolean>;
4807
+ }, z.core.$strip>>;
4808
+ accentColor: z.ZodOptional<z.ZodEnum<{
4809
+ primary: "primary";
4810
+ accent: "accent";
4811
+ success: "success";
4812
+ warning: "warning";
4813
+ danger: "danger";
4814
+ info: "info";
4815
+ highlight: "highlight";
4816
+ }>>;
4817
+ style: z.ZodOptional<z.ZodObject<{
4818
+ bgColor: z.ZodOptional<z.ZodString>;
4819
+ bgGradient: z.ZodOptional<z.ZodString>;
4820
+ decorations: z.ZodOptional<z.ZodBoolean>;
4821
+ bgOpacity: z.ZodOptional<z.ZodNumber>;
4822
+ footer: z.ZodOptional<z.ZodString>;
4823
+ }, z.core.$strip>>;
4824
+ eyebrow: z.ZodOptional<z.ZodObject<{
4825
+ label: z.ZodString;
4826
+ color: z.ZodOptional<z.ZodEnum<{
4827
+ primary: "primary";
4828
+ accent: "accent";
4829
+ success: "success";
4830
+ warning: "warning";
4831
+ danger: "danger";
4832
+ info: "info";
4833
+ highlight: "highlight";
4834
+ }>>;
4835
+ }, z.core.$strip>>;
4836
+ layout: z.ZodLiteral<"manifesto">;
4837
+ }, z.core.$strip>;
4601
4838
  export declare const slideBrandingLogoSchema: z.ZodObject<{
4602
4839
  source: z.ZodDiscriminatedUnion<[z.ZodObject<{
4603
4840
  kind: z.ZodLiteral<"url">;
@@ -4735,6 +4972,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4735
4972
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
4736
4973
  text: z.ZodString;
4737
4974
  }, z.core.$strip>]>>>;
4975
+ icon: z.ZodOptional<z.ZodEnum<{
4976
+ ok: "ok";
4977
+ no: "no";
4978
+ warn: "warn";
4979
+ }>>;
4738
4980
  }, z.core.$strip>]>>;
4739
4981
  ordered: z.ZodOptional<z.ZodBoolean>;
4740
4982
  icon: z.ZodOptional<z.ZodString>;
@@ -4868,6 +5110,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4868
5110
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
4869
5111
  text: z.ZodString;
4870
5112
  }, z.core.$strip>]>>>;
5113
+ icon: z.ZodOptional<z.ZodEnum<{
5114
+ ok: "ok";
5115
+ no: "no";
5116
+ warn: "warn";
5117
+ }>>;
4871
5118
  }, z.core.$strip>]>>;
4872
5119
  ordered: z.ZodOptional<z.ZodBoolean>;
4873
5120
  icon: z.ZodOptional<z.ZodString>;
@@ -5063,6 +5310,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5063
5310
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5064
5311
  text: z.ZodString;
5065
5312
  }, z.core.$strip>]>>>;
5313
+ icon: z.ZodOptional<z.ZodEnum<{
5314
+ ok: "ok";
5315
+ no: "no";
5316
+ warn: "warn";
5317
+ }>>;
5066
5318
  }, z.core.$strip>]>>;
5067
5319
  ordered: z.ZodOptional<z.ZodBoolean>;
5068
5320
  icon: z.ZodOptional<z.ZodString>;
@@ -5196,6 +5448,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5196
5448
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5197
5449
  text: z.ZodString;
5198
5450
  }, z.core.$strip>]>>>;
5451
+ icon: z.ZodOptional<z.ZodEnum<{
5452
+ ok: "ok";
5453
+ no: "no";
5454
+ warn: "warn";
5455
+ }>>;
5199
5456
  }, z.core.$strip>]>>;
5200
5457
  ordered: z.ZodOptional<z.ZodBoolean>;
5201
5458
  icon: z.ZodOptional<z.ZodString>;
@@ -5334,6 +5591,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5334
5591
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5335
5592
  text: z.ZodString;
5336
5593
  }, z.core.$strip>]>>>;
5594
+ icon: z.ZodOptional<z.ZodEnum<{
5595
+ ok: "ok";
5596
+ no: "no";
5597
+ warn: "warn";
5598
+ }>>;
5337
5599
  }, z.core.$strip>]>>;
5338
5600
  ordered: z.ZodOptional<z.ZodBoolean>;
5339
5601
  icon: z.ZodOptional<z.ZodString>;
@@ -5467,6 +5729,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5467
5729
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5468
5730
  text: z.ZodString;
5469
5731
  }, z.core.$strip>]>>>;
5732
+ icon: z.ZodOptional<z.ZodEnum<{
5733
+ ok: "ok";
5734
+ no: "no";
5735
+ warn: "warn";
5736
+ }>>;
5470
5737
  }, z.core.$strip>]>>;
5471
5738
  ordered: z.ZodOptional<z.ZodBoolean>;
5472
5739
  icon: z.ZodOptional<z.ZodString>;
@@ -5659,6 +5926,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5659
5926
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5660
5927
  text: z.ZodString;
5661
5928
  }, z.core.$strip>]>>>;
5929
+ icon: z.ZodOptional<z.ZodEnum<{
5930
+ ok: "ok";
5931
+ no: "no";
5932
+ warn: "warn";
5933
+ }>>;
5662
5934
  }, z.core.$strip>]>>;
5663
5935
  ordered: z.ZodOptional<z.ZodBoolean>;
5664
5936
  icon: z.ZodOptional<z.ZodString>;
@@ -5792,6 +6064,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5792
6064
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5793
6065
  text: z.ZodString;
5794
6066
  }, z.core.$strip>]>>>;
6067
+ icon: z.ZodOptional<z.ZodEnum<{
6068
+ ok: "ok";
6069
+ no: "no";
6070
+ warn: "warn";
6071
+ }>>;
5795
6072
  }, z.core.$strip>]>>;
5796
6073
  ordered: z.ZodOptional<z.ZodBoolean>;
5797
6074
  icon: z.ZodOptional<z.ZodString>;
@@ -6038,6 +6315,7 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6038
6315
  highlight: "highlight";
6039
6316
  }>>;
6040
6317
  done: z.ZodOptional<z.ZodBoolean>;
6318
+ hot: z.ZodOptional<z.ZodBoolean>;
6041
6319
  }, z.core.$strip>>;
6042
6320
  accentColor: z.ZodOptional<z.ZodEnum<{
6043
6321
  primary: "primary";
@@ -6110,6 +6388,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6110
6388
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6111
6389
  text: z.ZodString;
6112
6390
  }, z.core.$strip>]>>>;
6391
+ icon: z.ZodOptional<z.ZodEnum<{
6392
+ ok: "ok";
6393
+ no: "no";
6394
+ warn: "warn";
6395
+ }>>;
6113
6396
  }, z.core.$strip>]>>;
6114
6397
  ordered: z.ZodOptional<z.ZodBoolean>;
6115
6398
  icon: z.ZodOptional<z.ZodString>;
@@ -6243,6 +6526,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6243
6526
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6244
6527
  text: z.ZodString;
6245
6528
  }, z.core.$strip>]>>>;
6529
+ icon: z.ZodOptional<z.ZodEnum<{
6530
+ ok: "ok";
6531
+ no: "no";
6532
+ warn: "warn";
6533
+ }>>;
6246
6534
  }, z.core.$strip>]>>;
6247
6535
  ordered: z.ZodOptional<z.ZodBoolean>;
6248
6536
  icon: z.ZodOptional<z.ZodString>;
@@ -6390,6 +6678,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6390
6678
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6391
6679
  text: z.ZodString;
6392
6680
  }, z.core.$strip>]>>>;
6681
+ icon: z.ZodOptional<z.ZodEnum<{
6682
+ ok: "ok";
6683
+ no: "no";
6684
+ warn: "warn";
6685
+ }>>;
6393
6686
  }, z.core.$strip>]>>;
6394
6687
  ordered: z.ZodOptional<z.ZodBoolean>;
6395
6688
  icon: z.ZodOptional<z.ZodString>;
@@ -6523,6 +6816,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6523
6816
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6524
6817
  text: z.ZodString;
6525
6818
  }, z.core.$strip>]>>>;
6819
+ icon: z.ZodOptional<z.ZodEnum<{
6820
+ ok: "ok";
6821
+ no: "no";
6822
+ warn: "warn";
6823
+ }>>;
6526
6824
  }, z.core.$strip>]>>;
6527
6825
  ordered: z.ZodOptional<z.ZodBoolean>;
6528
6826
  icon: z.ZodOptional<z.ZodString>;
@@ -6704,6 +7002,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6704
7002
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6705
7003
  text: z.ZodString;
6706
7004
  }, z.core.$strip>]>>>;
7005
+ icon: z.ZodOptional<z.ZodEnum<{
7006
+ ok: "ok";
7007
+ no: "no";
7008
+ warn: "warn";
7009
+ }>>;
6707
7010
  }, z.core.$strip>]>>;
6708
7011
  ordered: z.ZodOptional<z.ZodBoolean>;
6709
7012
  icon: z.ZodOptional<z.ZodString>;
@@ -6837,6 +7140,11 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6837
7140
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6838
7141
  text: z.ZodString;
6839
7142
  }, z.core.$strip>]>>>;
7143
+ icon: z.ZodOptional<z.ZodEnum<{
7144
+ ok: "ok";
7145
+ no: "no";
7146
+ warn: "warn";
7147
+ }>>;
6840
7148
  }, z.core.$strip>]>>;
6841
7149
  ordered: z.ZodOptional<z.ZodBoolean>;
6842
7150
  icon: z.ZodOptional<z.ZodString>;
@@ -7173,6 +7481,71 @@ export declare const slideLayoutSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7173
7481
  }>>;
7174
7482
  }, z.core.$strip>>;
7175
7483
  layout: z.ZodLiteral<"waterfall">;
7484
+ }, z.core.$strip>, z.ZodObject<{
7485
+ title: z.ZodString;
7486
+ stepLabel: z.ZodOptional<z.ZodString>;
7487
+ subtitle: z.ZodOptional<z.ZodString>;
7488
+ items: z.ZodArray<z.ZodObject<{
7489
+ title: z.ZodString;
7490
+ description: z.ZodOptional<z.ZodString>;
7491
+ accentColor: z.ZodOptional<z.ZodEnum<{
7492
+ primary: "primary";
7493
+ accent: "accent";
7494
+ success: "success";
7495
+ warning: "warning";
7496
+ danger: "danger";
7497
+ info: "info";
7498
+ highlight: "highlight";
7499
+ }>>;
7500
+ }, z.core.$strip>>;
7501
+ columns: z.ZodOptional<z.ZodNumber>;
7502
+ callout: z.ZodOptional<z.ZodObject<{
7503
+ text: z.ZodString;
7504
+ label: z.ZodOptional<z.ZodString>;
7505
+ color: z.ZodOptional<z.ZodEnum<{
7506
+ primary: "primary";
7507
+ accent: "accent";
7508
+ success: "success";
7509
+ warning: "warning";
7510
+ danger: "danger";
7511
+ info: "info";
7512
+ highlight: "highlight";
7513
+ }>>;
7514
+ align: z.ZodOptional<z.ZodEnum<{
7515
+ left: "left";
7516
+ center: "center";
7517
+ }>>;
7518
+ leftBar: z.ZodOptional<z.ZodBoolean>;
7519
+ }, z.core.$strip>>;
7520
+ accentColor: z.ZodOptional<z.ZodEnum<{
7521
+ primary: "primary";
7522
+ accent: "accent";
7523
+ success: "success";
7524
+ warning: "warning";
7525
+ danger: "danger";
7526
+ info: "info";
7527
+ highlight: "highlight";
7528
+ }>>;
7529
+ style: z.ZodOptional<z.ZodObject<{
7530
+ bgColor: z.ZodOptional<z.ZodString>;
7531
+ bgGradient: z.ZodOptional<z.ZodString>;
7532
+ decorations: z.ZodOptional<z.ZodBoolean>;
7533
+ bgOpacity: z.ZodOptional<z.ZodNumber>;
7534
+ footer: z.ZodOptional<z.ZodString>;
7535
+ }, z.core.$strip>>;
7536
+ eyebrow: z.ZodOptional<z.ZodObject<{
7537
+ label: z.ZodString;
7538
+ color: z.ZodOptional<z.ZodEnum<{
7539
+ primary: "primary";
7540
+ accent: "accent";
7541
+ success: "success";
7542
+ warning: "warning";
7543
+ danger: "danger";
7544
+ info: "info";
7545
+ highlight: "highlight";
7546
+ }>>;
7547
+ }, z.core.$strip>>;
7548
+ layout: z.ZodLiteral<"manifesto">;
7176
7549
  }, z.core.$strip>], "layout">;
7177
7550
  /** Media schema registered in mulmoImageAssetSchema */
7178
7551
  export declare const mulmoSlideMediaSchema: z.ZodObject<{
@@ -7279,6 +7652,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
7279
7652
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
7280
7653
  text: z.ZodString;
7281
7654
  }, z.core.$strip>]>>>;
7655
+ icon: z.ZodOptional<z.ZodEnum<{
7656
+ ok: "ok";
7657
+ no: "no";
7658
+ warn: "warn";
7659
+ }>>;
7282
7660
  }, z.core.$strip>]>>;
7283
7661
  ordered: z.ZodOptional<z.ZodBoolean>;
7284
7662
  icon: z.ZodOptional<z.ZodString>;
@@ -7412,6 +7790,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
7412
7790
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
7413
7791
  text: z.ZodString;
7414
7792
  }, z.core.$strip>]>>>;
7793
+ icon: z.ZodOptional<z.ZodEnum<{
7794
+ ok: "ok";
7795
+ no: "no";
7796
+ warn: "warn";
7797
+ }>>;
7415
7798
  }, z.core.$strip>]>>;
7416
7799
  ordered: z.ZodOptional<z.ZodBoolean>;
7417
7800
  icon: z.ZodOptional<z.ZodString>;
@@ -7607,6 +7990,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
7607
7990
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
7608
7991
  text: z.ZodString;
7609
7992
  }, z.core.$strip>]>>>;
7993
+ icon: z.ZodOptional<z.ZodEnum<{
7994
+ ok: "ok";
7995
+ no: "no";
7996
+ warn: "warn";
7997
+ }>>;
7610
7998
  }, z.core.$strip>]>>;
7611
7999
  ordered: z.ZodOptional<z.ZodBoolean>;
7612
8000
  icon: z.ZodOptional<z.ZodString>;
@@ -7740,6 +8128,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
7740
8128
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
7741
8129
  text: z.ZodString;
7742
8130
  }, z.core.$strip>]>>>;
8131
+ icon: z.ZodOptional<z.ZodEnum<{
8132
+ ok: "ok";
8133
+ no: "no";
8134
+ warn: "warn";
8135
+ }>>;
7743
8136
  }, z.core.$strip>]>>;
7744
8137
  ordered: z.ZodOptional<z.ZodBoolean>;
7745
8138
  icon: z.ZodOptional<z.ZodString>;
@@ -7878,6 +8271,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
7878
8271
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
7879
8272
  text: z.ZodString;
7880
8273
  }, z.core.$strip>]>>>;
8274
+ icon: z.ZodOptional<z.ZodEnum<{
8275
+ ok: "ok";
8276
+ no: "no";
8277
+ warn: "warn";
8278
+ }>>;
7881
8279
  }, z.core.$strip>]>>;
7882
8280
  ordered: z.ZodOptional<z.ZodBoolean>;
7883
8281
  icon: z.ZodOptional<z.ZodString>;
@@ -8011,6 +8409,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8011
8409
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8012
8410
  text: z.ZodString;
8013
8411
  }, z.core.$strip>]>>>;
8412
+ icon: z.ZodOptional<z.ZodEnum<{
8413
+ ok: "ok";
8414
+ no: "no";
8415
+ warn: "warn";
8416
+ }>>;
8014
8417
  }, z.core.$strip>]>>;
8015
8418
  ordered: z.ZodOptional<z.ZodBoolean>;
8016
8419
  icon: z.ZodOptional<z.ZodString>;
@@ -8203,6 +8606,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8203
8606
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8204
8607
  text: z.ZodString;
8205
8608
  }, z.core.$strip>]>>>;
8609
+ icon: z.ZodOptional<z.ZodEnum<{
8610
+ ok: "ok";
8611
+ no: "no";
8612
+ warn: "warn";
8613
+ }>>;
8206
8614
  }, z.core.$strip>]>>;
8207
8615
  ordered: z.ZodOptional<z.ZodBoolean>;
8208
8616
  icon: z.ZodOptional<z.ZodString>;
@@ -8336,6 +8744,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8336
8744
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8337
8745
  text: z.ZodString;
8338
8746
  }, z.core.$strip>]>>>;
8747
+ icon: z.ZodOptional<z.ZodEnum<{
8748
+ ok: "ok";
8749
+ no: "no";
8750
+ warn: "warn";
8751
+ }>>;
8339
8752
  }, z.core.$strip>]>>;
8340
8753
  ordered: z.ZodOptional<z.ZodBoolean>;
8341
8754
  icon: z.ZodOptional<z.ZodString>;
@@ -8582,6 +8995,7 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8582
8995
  highlight: "highlight";
8583
8996
  }>>;
8584
8997
  done: z.ZodOptional<z.ZodBoolean>;
8998
+ hot: z.ZodOptional<z.ZodBoolean>;
8585
8999
  }, z.core.$strip>>;
8586
9000
  accentColor: z.ZodOptional<z.ZodEnum<{
8587
9001
  primary: "primary";
@@ -8654,6 +9068,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8654
9068
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8655
9069
  text: z.ZodString;
8656
9070
  }, z.core.$strip>]>>>;
9071
+ icon: z.ZodOptional<z.ZodEnum<{
9072
+ ok: "ok";
9073
+ no: "no";
9074
+ warn: "warn";
9075
+ }>>;
8657
9076
  }, z.core.$strip>]>>;
8658
9077
  ordered: z.ZodOptional<z.ZodBoolean>;
8659
9078
  icon: z.ZodOptional<z.ZodString>;
@@ -8787,6 +9206,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8787
9206
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8788
9207
  text: z.ZodString;
8789
9208
  }, z.core.$strip>]>>>;
9209
+ icon: z.ZodOptional<z.ZodEnum<{
9210
+ ok: "ok";
9211
+ no: "no";
9212
+ warn: "warn";
9213
+ }>>;
8790
9214
  }, z.core.$strip>]>>;
8791
9215
  ordered: z.ZodOptional<z.ZodBoolean>;
8792
9216
  icon: z.ZodOptional<z.ZodString>;
@@ -8934,6 +9358,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
8934
9358
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
8935
9359
  text: z.ZodString;
8936
9360
  }, z.core.$strip>]>>>;
9361
+ icon: z.ZodOptional<z.ZodEnum<{
9362
+ ok: "ok";
9363
+ no: "no";
9364
+ warn: "warn";
9365
+ }>>;
8937
9366
  }, z.core.$strip>]>>;
8938
9367
  ordered: z.ZodOptional<z.ZodBoolean>;
8939
9368
  icon: z.ZodOptional<z.ZodString>;
@@ -9067,6 +9496,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
9067
9496
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
9068
9497
  text: z.ZodString;
9069
9498
  }, z.core.$strip>]>>>;
9499
+ icon: z.ZodOptional<z.ZodEnum<{
9500
+ ok: "ok";
9501
+ no: "no";
9502
+ warn: "warn";
9503
+ }>>;
9070
9504
  }, z.core.$strip>]>>;
9071
9505
  ordered: z.ZodOptional<z.ZodBoolean>;
9072
9506
  icon: z.ZodOptional<z.ZodString>;
@@ -9248,6 +9682,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
9248
9682
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
9249
9683
  text: z.ZodString;
9250
9684
  }, z.core.$strip>]>>>;
9685
+ icon: z.ZodOptional<z.ZodEnum<{
9686
+ ok: "ok";
9687
+ no: "no";
9688
+ warn: "warn";
9689
+ }>>;
9251
9690
  }, z.core.$strip>]>>;
9252
9691
  ordered: z.ZodOptional<z.ZodBoolean>;
9253
9692
  icon: z.ZodOptional<z.ZodString>;
@@ -9381,6 +9820,11 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
9381
9820
  items: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
9382
9821
  text: z.ZodString;
9383
9822
  }, z.core.$strip>]>>>;
9823
+ icon: z.ZodOptional<z.ZodEnum<{
9824
+ ok: "ok";
9825
+ no: "no";
9826
+ warn: "warn";
9827
+ }>>;
9384
9828
  }, z.core.$strip>]>>;
9385
9829
  ordered: z.ZodOptional<z.ZodBoolean>;
9386
9830
  icon: z.ZodOptional<z.ZodString>;
@@ -9717,6 +10161,71 @@ export declare const mulmoSlideMediaSchema: z.ZodObject<{
9717
10161
  }>>;
9718
10162
  }, z.core.$strip>>;
9719
10163
  layout: z.ZodLiteral<"waterfall">;
10164
+ }, z.core.$strip>, z.ZodObject<{
10165
+ title: z.ZodString;
10166
+ stepLabel: z.ZodOptional<z.ZodString>;
10167
+ subtitle: z.ZodOptional<z.ZodString>;
10168
+ items: z.ZodArray<z.ZodObject<{
10169
+ title: z.ZodString;
10170
+ description: z.ZodOptional<z.ZodString>;
10171
+ accentColor: z.ZodOptional<z.ZodEnum<{
10172
+ primary: "primary";
10173
+ accent: "accent";
10174
+ success: "success";
10175
+ warning: "warning";
10176
+ danger: "danger";
10177
+ info: "info";
10178
+ highlight: "highlight";
10179
+ }>>;
10180
+ }, z.core.$strip>>;
10181
+ columns: z.ZodOptional<z.ZodNumber>;
10182
+ callout: z.ZodOptional<z.ZodObject<{
10183
+ text: z.ZodString;
10184
+ label: z.ZodOptional<z.ZodString>;
10185
+ color: z.ZodOptional<z.ZodEnum<{
10186
+ primary: "primary";
10187
+ accent: "accent";
10188
+ success: "success";
10189
+ warning: "warning";
10190
+ danger: "danger";
10191
+ info: "info";
10192
+ highlight: "highlight";
10193
+ }>>;
10194
+ align: z.ZodOptional<z.ZodEnum<{
10195
+ left: "left";
10196
+ center: "center";
10197
+ }>>;
10198
+ leftBar: z.ZodOptional<z.ZodBoolean>;
10199
+ }, z.core.$strip>>;
10200
+ accentColor: z.ZodOptional<z.ZodEnum<{
10201
+ primary: "primary";
10202
+ accent: "accent";
10203
+ success: "success";
10204
+ warning: "warning";
10205
+ danger: "danger";
10206
+ info: "info";
10207
+ highlight: "highlight";
10208
+ }>>;
10209
+ style: z.ZodOptional<z.ZodObject<{
10210
+ bgColor: z.ZodOptional<z.ZodString>;
10211
+ bgGradient: z.ZodOptional<z.ZodString>;
10212
+ decorations: z.ZodOptional<z.ZodBoolean>;
10213
+ bgOpacity: z.ZodOptional<z.ZodNumber>;
10214
+ footer: z.ZodOptional<z.ZodString>;
10215
+ }, z.core.$strip>>;
10216
+ eyebrow: z.ZodOptional<z.ZodObject<{
10217
+ label: z.ZodString;
10218
+ color: z.ZodOptional<z.ZodEnum<{
10219
+ primary: "primary";
10220
+ accent: "accent";
10221
+ success: "success";
10222
+ warning: "warning";
10223
+ danger: "danger";
10224
+ info: "info";
10225
+ highlight: "highlight";
10226
+ }>>;
10227
+ }, z.core.$strip>>;
10228
+ layout: z.ZodLiteral<"manifesto">;
9720
10229
  }, z.core.$strip>], "layout">;
9721
10230
  reference: z.ZodOptional<z.ZodString>;
9722
10231
  branding: z.ZodOptional<z.ZodNullable<z.ZodObject<{
@@ -9804,6 +10313,9 @@ export type FunnelStage = z.infer<typeof funnelStageSchema>;
9804
10313
  export type FunnelSlide = z.infer<typeof funnelSlideSchema>;
9805
10314
  export type WaterfallItem = z.infer<typeof waterfallItemSchema>;
9806
10315
  export type WaterfallSlide = z.infer<typeof waterfallSlideSchema>;
10316
+ export type ManifestoLine = z.infer<typeof manifestoLineSchema>;
10317
+ export type ManifestoSlide = z.infer<typeof manifestoSlideSchema>;
10318
+ export type BulletIcon = z.infer<typeof bulletIconSchema>;
9807
10319
  export type SlideBrandingLogo = z.infer<typeof slideBrandingLogoSchema>;
9808
10320
  export type SlideBranding = z.infer<typeof slideBrandingSchema>;
9809
10321
  export type MulmoSlideMedia = z.infer<typeof mulmoSlideMediaSchema>;
package/lib/schema.js CHANGED
@@ -50,12 +50,16 @@ export const textBlockSchema = z.object({
50
50
  });
51
51
  /** Sub-bullet item: plain string or object with text */
52
52
  const subBulletItemSchema = z.union([z.string(), z.object({ text: z.string() })]);
53
- /** Bullet item: plain string or object with text and optional sub-items (2 levels max) */
53
+ /** Status-icon variants for bullets (renders / / in the accent color of the variant). */
54
+ export const bulletIconSchema = z.enum(["ok", "no", "warn"]);
55
+ /** Bullet item: plain string, or object with text + optional sub-items + optional status icon. */
54
56
  export const bulletItemSchema = z.union([
55
57
  z.string(),
56
58
  z.object({
57
59
  text: z.string(),
58
60
  items: z.array(subBulletItemSchema).optional(),
61
+ /** Optional status icon shown in place of the default bullet marker ("ok" → ✓, "no" → ✕, "warn" → ⚠). */
62
+ icon: bulletIconSchema.optional(),
59
63
  }),
60
64
  ]);
61
65
  export const bulletsBlockSchema = z.object({
@@ -292,6 +296,8 @@ export const timelineItemSchema = z.object({
292
296
  description: z.string().optional(),
293
297
  color: accentColorKeySchema.optional(),
294
298
  done: z.boolean().optional(),
299
+ /** Optional emphasis flag — when true the step is rendered with a stronger accent border and tinted background. */
300
+ hot: z.boolean().optional(),
295
301
  });
296
302
  export const timelineSlideSchema = z.object({
297
303
  layout: z.literal("timeline"),
@@ -396,6 +402,29 @@ export const funnelSlideSchema = z.object({
396
402
  stages: z.array(funnelStageSchema),
397
403
  callout: calloutBarSchema.optional(),
398
404
  });
405
+ // ─── manifesto ───
406
+ /** A single line in a manifesto / creed grid. */
407
+ export const manifestoLineSchema = z.object({
408
+ title: z.string(),
409
+ description: z.string().optional(),
410
+ /** Accent color for the line's left-border highlight. Falls back to slide.accentColor / "primary". */
411
+ accentColor: accentColorKeySchema.optional(),
412
+ });
413
+ /**
414
+ * Grid of short bordered cards, each with a colored left accent — useful for manifestos,
415
+ * principles, "what we believe" lists, etc.
416
+ */
417
+ export const manifestoSlideSchema = z.object({
418
+ layout: z.literal("manifesto"),
419
+ ...slideBaseFields,
420
+ title: z.string(),
421
+ stepLabel: z.string().optional(),
422
+ subtitle: z.string().optional(),
423
+ items: z.array(manifestoLineSchema),
424
+ /** Number of grid columns (default: 2). */
425
+ columns: z.number().int().min(1).max(4).optional(),
426
+ callout: calloutBarSchema.optional(),
427
+ });
399
428
  // ═══════════════════════════════════════════════════════════
400
429
  // Branding — logo & background image overlay
401
430
  // ═══════════════════════════════════════════════════════════
@@ -443,6 +472,7 @@ export const slideLayoutSchema = z.discriminatedUnion("layout", [
443
472
  tableSlideSchema,
444
473
  funnelSlideSchema,
445
474
  waterfallSlideSchema,
475
+ manifestoSlideSchema,
446
476
  ]);
447
477
  /** Media schema registered in mulmoImageAssetSchema */
448
478
  export const mulmoSlideMediaSchema = z
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mulmocast/deck",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "MulmoCast deck DSL: JSON-described semantic slide layouts (stats, comparison, timeline, ...) rendered to Tailwind-based HTML",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",