@liustack/pptfast 0.6.0 → 0.8.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.
@@ -0,0 +1,1687 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const VERSION = "0.8.0";
4
+
5
+ /** Error class thrown by pptfast's public API surface (validation, rendering, export). */
6
+ declare class PptfastError extends Error {
7
+ }
8
+
9
+ declare const BUILTIN_THEME_IDS: readonly ["consulting", "enterprise", "academic", "insight", "campaign", "bloom", "classroom", "ink", "tech", "runway", "journal", "luxe", "heritage"];
10
+ declare const BackgroundSpecSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
+ kind: z.ZodLiteral<"color">;
12
+ value: z.ZodString;
13
+ }, z.core.$strict>, z.ZodObject<{
14
+ kind: z.ZodLiteral<"gradient">;
15
+ from: z.ZodString;
16
+ to: z.ZodString;
17
+ direction: z.ZodOptional<z.ZodEnum<{
18
+ tb: "tb";
19
+ lr: "lr";
20
+ diagonal: "diagonal";
21
+ }>>;
22
+ }, z.core.$strict>, z.ZodObject<{
23
+ kind: z.ZodLiteral<"asset">;
24
+ asset_id: z.ZodString;
25
+ overlay: z.ZodOptional<z.ZodObject<{
26
+ color: z.ZodString;
27
+ opacity: z.ZodNumber;
28
+ }, z.core.$strict>>;
29
+ fit: z.ZodOptional<z.ZodEnum<{
30
+ cover: "cover";
31
+ contain: "contain";
32
+ }>>;
33
+ }, z.core.$strict>], "kind">;
34
+ /**
35
+ * Style-token override (theme.style): deep-partial palette/fonts/shape
36
+ * merged over the built-in theme (see themes/index.ts resolveStyle). Scope is
37
+ * deliberately palette-level (spec §11): no defaultBackgrounds or manifest
38
+ * overrides. gapScale range mirrors the documented sane range in
39
+ * themes/tokens.ts StyleShape.
40
+ */
41
+ declare const StyleOverrideSchema: z.ZodObject<{
42
+ colors: z.ZodOptional<z.ZodObject<{
43
+ bg: z.ZodOptional<z.ZodString>;
44
+ surface: z.ZodOptional<z.ZodString>;
45
+ panel: z.ZodOptional<z.ZodString>;
46
+ primary: z.ZodOptional<z.ZodString>;
47
+ accent: z.ZodOptional<z.ZodString>;
48
+ text: z.ZodOptional<z.ZodString>;
49
+ muted: z.ZodOptional<z.ZodString>;
50
+ border: z.ZodOptional<z.ZodString>;
51
+ chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
+ accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
53
+ cardStroke: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strict>>;
55
+ fonts: z.ZodOptional<z.ZodObject<{
56
+ heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
57
+ body: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
+ }, z.core.$strict>>;
60
+ shape: z.ZodOptional<z.ZodObject<{
61
+ radius: z.ZodOptional<z.ZodNumber>;
62
+ gapScale: z.ZodOptional<z.ZodNumber>;
63
+ }, z.core.$strict>>;
64
+ }, z.core.$strict>;
65
+ type StyleOverride = z.infer<typeof StyleOverrideSchema>;
66
+ /**
67
+ * Brand (logical slide-master) config: brand-chrome behavior owned by a theme.
68
+ * W1 scope = exactly the two flags migrated from the old manifest.chrome.
69
+ * Single source of truth — the TS type is inferred, never hand-written.
70
+ */
71
+ declare const BrandConfigSchema: z.ZodObject<{
72
+ suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
73
+ suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
74
+ }, z.core.$strict>;
75
+ type BrandConfig = z.infer<typeof BrandConfigSchema>;
76
+ declare const ThemeSchema: z.ZodObject<{
77
+ id: z.ZodDefault<z.ZodString>;
78
+ style: z.ZodOptional<z.ZodObject<{
79
+ colors: z.ZodOptional<z.ZodObject<{
80
+ bg: z.ZodOptional<z.ZodString>;
81
+ surface: z.ZodOptional<z.ZodString>;
82
+ panel: z.ZodOptional<z.ZodString>;
83
+ primary: z.ZodOptional<z.ZodString>;
84
+ accent: z.ZodOptional<z.ZodString>;
85
+ text: z.ZodOptional<z.ZodString>;
86
+ muted: z.ZodOptional<z.ZodString>;
87
+ border: z.ZodOptional<z.ZodString>;
88
+ chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
90
+ cardStroke: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strict>>;
92
+ fonts: z.ZodOptional<z.ZodObject<{
93
+ heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
94
+ body: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
+ mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
+ }, z.core.$strict>>;
97
+ shape: z.ZodOptional<z.ZodObject<{
98
+ radius: z.ZodOptional<z.ZodNumber>;
99
+ gapScale: z.ZodOptional<z.ZodNumber>;
100
+ }, z.core.$strict>>;
101
+ }, z.core.$strict>>;
102
+ brand: z.ZodOptional<z.ZodObject<{
103
+ suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
104
+ suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
105
+ }, z.core.$strict>>;
106
+ }, z.core.$strict>;
107
+ declare const MetaSchema: z.ZodObject<{
108
+ organization: z.ZodOptional<z.ZodString>;
109
+ authors: z.ZodOptional<z.ZodArray<z.ZodObject<{
110
+ name: z.ZodString;
111
+ role: z.ZodOptional<z.ZodString>;
112
+ org: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$strict>>>;
114
+ date: z.ZodOptional<z.ZodString>;
115
+ version: z.ZodOptional<z.ZodString>;
116
+ confidentiality: z.ZodOptional<z.ZodEnum<{
117
+ public: "public";
118
+ internal: "internal";
119
+ confidential: "confidential";
120
+ restricted: "restricted";
121
+ }>>;
122
+ contact: z.ZodOptional<z.ZodObject<{
123
+ name: z.ZodOptional<z.ZodString>;
124
+ email: z.ZodOptional<z.ZodString>;
125
+ phone: z.ZodOptional<z.ZodString>;
126
+ website: z.ZodOptional<z.ZodString>;
127
+ }, z.core.$strict>>;
128
+ copyright: z.ZodOptional<z.ZodString>;
129
+ animation: z.ZodOptional<z.ZodObject<{
130
+ transition: z.ZodOptional<z.ZodEnum<{
131
+ push: "push";
132
+ fade: "fade";
133
+ wipe: "wipe";
134
+ none: "none";
135
+ }>>;
136
+ elements: z.ZodOptional<z.ZodEnum<{
137
+ none: "none";
138
+ auto: "auto";
139
+ }>>;
140
+ }, z.core.$strict>>;
141
+ }, z.core.$strict>;
142
+ declare const AssetsSchema: z.ZodObject<{
143
+ images: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
144
+ src: z.ZodString;
145
+ alt: z.ZodOptional<z.ZodString>;
146
+ error: z.ZodOptional<z.ZodString>;
147
+ }, z.core.$strict>>>;
148
+ }, z.core.$strict>;
149
+ declare const ComponentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
150
+ type: z.ZodLiteral<"bullets">;
151
+ items: z.ZodArray<z.ZodString>;
152
+ style: z.ZodOptional<z.ZodEnum<{
153
+ default: "default";
154
+ checklist: "checklist";
155
+ numbered: "numbered";
156
+ plain: "plain";
157
+ divided: "divided";
158
+ }>>;
159
+ }, z.core.$strict>, z.ZodObject<{
160
+ type: z.ZodLiteral<"paragraph">;
161
+ text: z.ZodString;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ type: z.ZodLiteral<"quote">;
164
+ text: z.ZodString;
165
+ attribution: z.ZodOptional<z.ZodString>;
166
+ }, z.core.$strict>, z.ZodObject<{
167
+ type: z.ZodLiteral<"callout">;
168
+ variant: z.ZodEnum<{
169
+ info: "info";
170
+ warn: "warn";
171
+ tip: "tip";
172
+ }>;
173
+ text: z.ZodString;
174
+ icon: z.ZodOptional<z.ZodEnum<{
175
+ [x: string]: string;
176
+ }>>;
177
+ }, z.core.$strict>, z.ZodObject<{
178
+ type: z.ZodLiteral<"code">;
179
+ language: z.ZodString;
180
+ code: z.ZodString;
181
+ }, z.core.$strict>, z.ZodObject<{
182
+ type: z.ZodLiteral<"kpi_cards">;
183
+ items: z.ZodArray<z.ZodObject<{
184
+ value: z.ZodString;
185
+ unit: z.ZodOptional<z.ZodString>;
186
+ label: z.ZodString;
187
+ delta: z.ZodOptional<z.ZodEnum<{
188
+ flat: "flat";
189
+ up: "up";
190
+ down: "down";
191
+ }>>;
192
+ icon: z.ZodOptional<z.ZodEnum<{
193
+ [x: string]: string;
194
+ }>>;
195
+ source: z.ZodOptional<z.ZodString>;
196
+ }, z.core.$strict>>;
197
+ }, z.core.$strict>, z.ZodObject<{
198
+ type: z.ZodLiteral<"chart">;
199
+ chart_type: z.ZodEnum<{
200
+ line: "line";
201
+ dumbbell: "dumbbell";
202
+ funnel: "funnel";
203
+ bar: "bar";
204
+ pie: "pie";
205
+ }>;
206
+ direction: z.ZodOptional<z.ZodEnum<{
207
+ horizontal: "horizontal";
208
+ vertical: "vertical";
209
+ }>>;
210
+ style: z.ZodOptional<z.ZodEnum<{
211
+ donut: "donut";
212
+ }>>;
213
+ axes: z.ZodOptional<z.ZodObject<{
214
+ x_title: z.ZodOptional<z.ZodString>;
215
+ y_title: z.ZodOptional<z.ZodString>;
216
+ show_grid: z.ZodOptional<z.ZodBoolean>;
217
+ }, z.core.$strict>>;
218
+ series: z.ZodArray<z.ZodObject<{
219
+ name: z.ZodString;
220
+ data: z.ZodArray<z.ZodObject<{
221
+ x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
222
+ y: z.ZodNumber;
223
+ }, z.core.$strict>>;
224
+ }, z.core.$strict>>;
225
+ }, z.core.$strict>, z.ZodObject<{
226
+ type: z.ZodLiteral<"flowchart">;
227
+ nodes: z.ZodArray<z.ZodObject<{
228
+ id: z.ZodString;
229
+ label: z.ZodString;
230
+ kind: z.ZodOptional<z.ZodEnum<{
231
+ rect: "rect";
232
+ diamond: "diamond";
233
+ round: "round";
234
+ }>>;
235
+ }, z.core.$strict>>;
236
+ edges: z.ZodArray<z.ZodObject<{
237
+ from: z.ZodString;
238
+ to: z.ZodString;
239
+ label: z.ZodOptional<z.ZodString>;
240
+ }, z.core.$strict>>;
241
+ direction: z.ZodOptional<z.ZodEnum<{
242
+ TB: "TB";
243
+ TD: "TD";
244
+ BT: "BT";
245
+ LR: "LR";
246
+ RL: "RL";
247
+ }>>;
248
+ }, z.core.$strict>, z.ZodObject<{
249
+ type: z.ZodLiteral<"architecture">;
250
+ layers: z.ZodArray<z.ZodObject<{
251
+ title: z.ZodString;
252
+ items: z.ZodArray<z.ZodString>;
253
+ }, z.core.$strict>>;
254
+ }, z.core.$strict>, z.ZodObject<{
255
+ type: z.ZodLiteral<"timeline">;
256
+ layout: z.ZodOptional<z.ZodEnum<{
257
+ horizontal: "horizontal";
258
+ vertical: "vertical";
259
+ }>>;
260
+ milestones: z.ZodArray<z.ZodObject<{
261
+ date: z.ZodString;
262
+ title: z.ZodString;
263
+ desc: z.ZodOptional<z.ZodString>;
264
+ highlight: z.ZodOptional<z.ZodBoolean>;
265
+ }, z.core.$strict>>;
266
+ }, z.core.$strict>, z.ZodObject<{
267
+ type: z.ZodLiteral<"comparison">;
268
+ columns: z.ZodArray<z.ZodString>;
269
+ rows: z.ZodArray<z.ZodObject<{
270
+ label: z.ZodString;
271
+ cells: z.ZodArray<z.ZodString>;
272
+ }, z.core.$strict>>;
273
+ }, z.core.$strict>, z.ZodObject<{
274
+ type: z.ZodLiteral<"icon_cards">;
275
+ items: z.ZodArray<z.ZodObject<{
276
+ icon: z.ZodEnum<{
277
+ [x: string]: string;
278
+ }>;
279
+ title: z.ZodString;
280
+ text: z.ZodString;
281
+ }, z.core.$strict>>;
282
+ }, z.core.$strict>, z.ZodObject<{
283
+ type: z.ZodLiteral<"row_cards">;
284
+ items: z.ZodArray<z.ZodObject<{
285
+ icon: z.ZodOptional<z.ZodEnum<{
286
+ [x: string]: string;
287
+ }>>;
288
+ title: z.ZodString;
289
+ text: z.ZodOptional<z.ZodString>;
290
+ sub: z.ZodOptional<z.ZodString>;
291
+ highlight: z.ZodOptional<z.ZodBoolean>;
292
+ }, z.core.$strict>>;
293
+ }, z.core.$strict>, z.ZodObject<{
294
+ type: z.ZodLiteral<"steps">;
295
+ items: z.ZodArray<z.ZodObject<{
296
+ title: z.ZodString;
297
+ text: z.ZodString;
298
+ }, z.core.$strict>>;
299
+ }, z.core.$strict>, z.ZodObject<{
300
+ type: z.ZodLiteral<"rings">;
301
+ items: z.ZodArray<z.ZodObject<{
302
+ label: z.ZodString;
303
+ desc: z.ZodOptional<z.ZodString>;
304
+ }, z.core.$strict>>;
305
+ }, z.core.$strict>, z.ZodObject<{
306
+ type: z.ZodLiteral<"numbered_cards">;
307
+ items: z.ZodArray<z.ZodObject<{
308
+ title: z.ZodString;
309
+ text: z.ZodOptional<z.ZodString>;
310
+ sub: z.ZodOptional<z.ZodString>;
311
+ }, z.core.$strict>>;
312
+ }, z.core.$strict>, z.ZodObject<{
313
+ type: z.ZodLiteral<"roadmap">;
314
+ items: z.ZodArray<z.ZodObject<{
315
+ title: z.ZodString;
316
+ period: z.ZodOptional<z.ZodString>;
317
+ rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
318
+ label: z.ZodString;
319
+ value: z.ZodString;
320
+ }, z.core.$strict>>>;
321
+ }, z.core.$strict>>;
322
+ }, z.core.$strict>, z.ZodObject<{
323
+ type: z.ZodLiteral<"matrix">;
324
+ x_title: z.ZodOptional<z.ZodString>;
325
+ y_title: z.ZodOptional<z.ZodString>;
326
+ cols: z.ZodNumber;
327
+ items: z.ZodArray<z.ZodObject<{
328
+ title: z.ZodString;
329
+ tag: z.ZodOptional<z.ZodString>;
330
+ tone: z.ZodOptional<z.ZodEnum<{
331
+ info: "info";
332
+ accent: "accent";
333
+ neutral: "neutral";
334
+ }>>;
335
+ }, z.core.$strict>>;
336
+ }, z.core.$strict>, z.ZodObject<{
337
+ type: z.ZodLiteral<"insight_panel">;
338
+ title: z.ZodString;
339
+ rows: z.ZodArray<z.ZodObject<{
340
+ label: z.ZodString;
341
+ text: z.ZodString;
342
+ }, z.core.$strict>>;
343
+ footnote: z.ZodOptional<z.ZodString>;
344
+ }, z.core.$strict>, z.ZodObject<{
345
+ type: z.ZodLiteral<"verdict_banner">;
346
+ text: z.ZodString;
347
+ tone: z.ZodEnum<{
348
+ neutral: "neutral";
349
+ positive: "positive";
350
+ warning: "warning";
351
+ }>;
352
+ icon: z.ZodOptional<z.ZodEnum<{
353
+ [x: string]: string;
354
+ }>>;
355
+ }, z.core.$strict>, z.ZodObject<{
356
+ type: z.ZodLiteral<"citation">;
357
+ sources: z.ZodArray<z.ZodObject<{
358
+ label: z.ZodString;
359
+ url: z.ZodOptional<z.ZodString>;
360
+ ref: z.ZodOptional<z.ZodString>;
361
+ }, z.core.$strict>>;
362
+ }, z.core.$strict>, z.ZodObject<{
363
+ type: z.ZodLiteral<"image">;
364
+ asset_id: z.ZodString;
365
+ caption: z.ZodOptional<z.ZodString>;
366
+ fit: z.ZodDefault<z.ZodEnum<{
367
+ cover: "cover";
368
+ contain: "contain";
369
+ }>>;
370
+ }, z.core.$strict>, z.ZodObject<{
371
+ type: z.ZodLiteral<"image_grid">;
372
+ items: z.ZodArray<z.ZodObject<{
373
+ asset_id: z.ZodString;
374
+ caption: z.ZodOptional<z.ZodString>;
375
+ }, z.core.$strict>>;
376
+ emphasis: z.ZodOptional<z.ZodEnum<{
377
+ none: "none";
378
+ first: "first";
379
+ }>>;
380
+ }, z.core.$strict>, z.ZodObject<{
381
+ type: z.ZodLiteral<"image_compare">;
382
+ left: z.ZodObject<{
383
+ asset_id: z.ZodString;
384
+ label: z.ZodString;
385
+ }, z.core.$strict>;
386
+ right: z.ZodObject<{
387
+ asset_id: z.ZodString;
388
+ label: z.ZodString;
389
+ }, z.core.$strict>;
390
+ style: z.ZodOptional<z.ZodEnum<{
391
+ vs: "vs";
392
+ before_after: "before_after";
393
+ }>>;
394
+ }, z.core.$strict>, z.ZodObject<{
395
+ type: z.ZodLiteral<"swot">;
396
+ strengths: z.ZodArray<z.ZodString>;
397
+ weaknesses: z.ZodArray<z.ZodString>;
398
+ opportunities: z.ZodArray<z.ZodString>;
399
+ threats: z.ZodArray<z.ZodString>;
400
+ labels: z.ZodOptional<z.ZodObject<{
401
+ strengths: z.ZodOptional<z.ZodString>;
402
+ weaknesses: z.ZodOptional<z.ZodString>;
403
+ opportunities: z.ZodOptional<z.ZodString>;
404
+ threats: z.ZodOptional<z.ZodString>;
405
+ }, z.core.$strict>>;
406
+ }, z.core.$strict>, z.ZodObject<{
407
+ type: z.ZodLiteral<"bmc">;
408
+ key_partners: z.ZodArray<z.ZodString>;
409
+ key_activities: z.ZodArray<z.ZodString>;
410
+ key_resources: z.ZodArray<z.ZodString>;
411
+ value_propositions: z.ZodArray<z.ZodString>;
412
+ customer_relationships: z.ZodArray<z.ZodString>;
413
+ channels: z.ZodArray<z.ZodString>;
414
+ customer_segments: z.ZodArray<z.ZodString>;
415
+ cost_structure: z.ZodArray<z.ZodString>;
416
+ revenue_streams: z.ZodArray<z.ZodString>;
417
+ }, z.core.$strict>, z.ZodObject<{
418
+ type: z.ZodLiteral<"waterfall">;
419
+ items: z.ZodArray<z.ZodObject<{
420
+ label: z.ZodString;
421
+ value: z.ZodNumber;
422
+ kind: z.ZodOptional<z.ZodEnum<{
423
+ delta: "delta";
424
+ total: "total";
425
+ }>>;
426
+ }, z.core.$strict>>;
427
+ unit: z.ZodOptional<z.ZodString>;
428
+ }, z.core.$strict>, z.ZodObject<{
429
+ type: z.ZodLiteral<"gantt">;
430
+ items: z.ZodArray<z.ZodObject<{
431
+ label: z.ZodString;
432
+ start: z.ZodNumber;
433
+ end: z.ZodNumber;
434
+ }, z.core.$strict>>;
435
+ axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
436
+ }, z.core.$strict>, z.ZodObject<{
437
+ type: z.ZodLiteral<"pest">;
438
+ political: z.ZodObject<{
439
+ title: z.ZodOptional<z.ZodString>;
440
+ items: z.ZodArray<z.ZodString>;
441
+ }, z.core.$strict>;
442
+ economic: z.ZodObject<{
443
+ title: z.ZodOptional<z.ZodString>;
444
+ items: z.ZodArray<z.ZodString>;
445
+ }, z.core.$strict>;
446
+ social: z.ZodObject<{
447
+ title: z.ZodOptional<z.ZodString>;
448
+ items: z.ZodArray<z.ZodString>;
449
+ }, z.core.$strict>;
450
+ technological: z.ZodObject<{
451
+ title: z.ZodOptional<z.ZodString>;
452
+ items: z.ZodArray<z.ZodString>;
453
+ }, z.core.$strict>;
454
+ }, z.core.$strict>, z.ZodObject<{
455
+ type: z.ZodLiteral<"five_forces">;
456
+ rivalry: z.ZodObject<{
457
+ label: z.ZodOptional<z.ZodString>;
458
+ intensity: z.ZodOptional<z.ZodEnum<{
459
+ low: "low";
460
+ medium: "medium";
461
+ high: "high";
462
+ }>>;
463
+ items: z.ZodArray<z.ZodString>;
464
+ }, z.core.$strict>;
465
+ new_entrants: z.ZodObject<{
466
+ label: z.ZodOptional<z.ZodString>;
467
+ intensity: z.ZodOptional<z.ZodEnum<{
468
+ low: "low";
469
+ medium: "medium";
470
+ high: "high";
471
+ }>>;
472
+ items: z.ZodArray<z.ZodString>;
473
+ }, z.core.$strict>;
474
+ supplier_power: z.ZodObject<{
475
+ label: z.ZodOptional<z.ZodString>;
476
+ intensity: z.ZodOptional<z.ZodEnum<{
477
+ low: "low";
478
+ medium: "medium";
479
+ high: "high";
480
+ }>>;
481
+ items: z.ZodArray<z.ZodString>;
482
+ }, z.core.$strict>;
483
+ buyer_power: z.ZodObject<{
484
+ label: z.ZodOptional<z.ZodString>;
485
+ intensity: z.ZodOptional<z.ZodEnum<{
486
+ low: "low";
487
+ medium: "medium";
488
+ high: "high";
489
+ }>>;
490
+ items: z.ZodArray<z.ZodString>;
491
+ }, z.core.$strict>;
492
+ substitutes: z.ZodObject<{
493
+ label: z.ZodOptional<z.ZodString>;
494
+ intensity: z.ZodOptional<z.ZodEnum<{
495
+ low: "low";
496
+ medium: "medium";
497
+ high: "high";
498
+ }>>;
499
+ items: z.ZodArray<z.ZodString>;
500
+ }, z.core.$strict>;
501
+ }, z.core.$strict>, z.ZodObject<{
502
+ type: z.ZodLiteral<"heatmap">;
503
+ x_labels: z.ZodArray<z.ZodString>;
504
+ y_labels: z.ZodArray<z.ZodString>;
505
+ values: z.ZodArray<z.ZodArray<z.ZodNumber>>;
506
+ domain: z.ZodOptional<z.ZodObject<{
507
+ min: z.ZodNumber;
508
+ max: z.ZodNumber;
509
+ }, z.core.$strict>>;
510
+ show_values: z.ZodOptional<z.ZodBoolean>;
511
+ x_title: z.ZodOptional<z.ZodString>;
512
+ y_title: z.ZodOptional<z.ZodString>;
513
+ }, z.core.$strict>, z.ZodObject<{
514
+ type: z.ZodLiteral<"sankey">;
515
+ nodes: z.ZodArray<z.ZodObject<{
516
+ id: z.ZodString;
517
+ label: z.ZodString;
518
+ }, z.core.$strict>>;
519
+ links: z.ZodArray<z.ZodObject<{
520
+ from: z.ZodString;
521
+ to: z.ZodString;
522
+ value: z.ZodNumber;
523
+ }, z.core.$strict>>;
524
+ }, z.core.$strict>], "type">;
525
+ /**
526
+ * All 32 component `type` discriminant values, derived from `ComponentSchema`
527
+ * itself (never hand-copied) so this list can't drift from the union above.
528
+ * Typed as plain `readonly string[]` rather than `Component["type"][]` —
529
+ * every consumer of this list (W5's plan `focus` vocabulary gate,
530
+ * `src/plan/index.ts`) tests membership of an arbitrary author-supplied
531
+ * string, and TS's `Array.includes` is invariant in its element type, so a
532
+ * narrower literal-union type would reject that call at the caller.
533
+ */
534
+ declare const COMPONENT_TYPES: readonly string[];
535
+ declare const SlideSchema: z.ZodObject<{
536
+ type: z.ZodDefault<z.ZodEnum<{
537
+ cover: "cover";
538
+ chapter: "chapter";
539
+ content: "content";
540
+ ending: "ending";
541
+ }>>;
542
+ id: z.ZodOptional<z.ZodString>;
543
+ placeholder: z.ZodOptional<z.ZodLiteral<true>>;
544
+ layout: z.ZodOptional<z.ZodString>;
545
+ beat: z.ZodOptional<z.ZodEnum<{
546
+ anchor: "anchor";
547
+ dense: "dense";
548
+ breathing: "breathing";
549
+ }>>;
550
+ arrangement: z.ZodOptional<z.ZodEnum<{
551
+ code: "code";
552
+ quote: "quote";
553
+ single: "single";
554
+ two_column: "two_column";
555
+ kpi_focus: "kpi_focus";
556
+ image_focus: "image_focus";
557
+ big_number: "big_number";
558
+ assertion_evidence: "assertion_evidence";
559
+ aside: "aside";
560
+ }>>;
561
+ heading: z.ZodOptional<z.ZodString>;
562
+ subheading: z.ZodOptional<z.ZodString>;
563
+ components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
564
+ type: z.ZodLiteral<"bullets">;
565
+ items: z.ZodArray<z.ZodString>;
566
+ style: z.ZodOptional<z.ZodEnum<{
567
+ default: "default";
568
+ checklist: "checklist";
569
+ numbered: "numbered";
570
+ plain: "plain";
571
+ divided: "divided";
572
+ }>>;
573
+ }, z.core.$strict>, z.ZodObject<{
574
+ type: z.ZodLiteral<"paragraph">;
575
+ text: z.ZodString;
576
+ }, z.core.$strict>, z.ZodObject<{
577
+ type: z.ZodLiteral<"quote">;
578
+ text: z.ZodString;
579
+ attribution: z.ZodOptional<z.ZodString>;
580
+ }, z.core.$strict>, z.ZodObject<{
581
+ type: z.ZodLiteral<"callout">;
582
+ variant: z.ZodEnum<{
583
+ info: "info";
584
+ warn: "warn";
585
+ tip: "tip";
586
+ }>;
587
+ text: z.ZodString;
588
+ icon: z.ZodOptional<z.ZodEnum<{
589
+ [x: string]: string;
590
+ }>>;
591
+ }, z.core.$strict>, z.ZodObject<{
592
+ type: z.ZodLiteral<"code">;
593
+ language: z.ZodString;
594
+ code: z.ZodString;
595
+ }, z.core.$strict>, z.ZodObject<{
596
+ type: z.ZodLiteral<"kpi_cards">;
597
+ items: z.ZodArray<z.ZodObject<{
598
+ value: z.ZodString;
599
+ unit: z.ZodOptional<z.ZodString>;
600
+ label: z.ZodString;
601
+ delta: z.ZodOptional<z.ZodEnum<{
602
+ flat: "flat";
603
+ up: "up";
604
+ down: "down";
605
+ }>>;
606
+ icon: z.ZodOptional<z.ZodEnum<{
607
+ [x: string]: string;
608
+ }>>;
609
+ source: z.ZodOptional<z.ZodString>;
610
+ }, z.core.$strict>>;
611
+ }, z.core.$strict>, z.ZodObject<{
612
+ type: z.ZodLiteral<"chart">;
613
+ chart_type: z.ZodEnum<{
614
+ line: "line";
615
+ dumbbell: "dumbbell";
616
+ funnel: "funnel";
617
+ bar: "bar";
618
+ pie: "pie";
619
+ }>;
620
+ direction: z.ZodOptional<z.ZodEnum<{
621
+ horizontal: "horizontal";
622
+ vertical: "vertical";
623
+ }>>;
624
+ style: z.ZodOptional<z.ZodEnum<{
625
+ donut: "donut";
626
+ }>>;
627
+ axes: z.ZodOptional<z.ZodObject<{
628
+ x_title: z.ZodOptional<z.ZodString>;
629
+ y_title: z.ZodOptional<z.ZodString>;
630
+ show_grid: z.ZodOptional<z.ZodBoolean>;
631
+ }, z.core.$strict>>;
632
+ series: z.ZodArray<z.ZodObject<{
633
+ name: z.ZodString;
634
+ data: z.ZodArray<z.ZodObject<{
635
+ x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
636
+ y: z.ZodNumber;
637
+ }, z.core.$strict>>;
638
+ }, z.core.$strict>>;
639
+ }, z.core.$strict>, z.ZodObject<{
640
+ type: z.ZodLiteral<"flowchart">;
641
+ nodes: z.ZodArray<z.ZodObject<{
642
+ id: z.ZodString;
643
+ label: z.ZodString;
644
+ kind: z.ZodOptional<z.ZodEnum<{
645
+ rect: "rect";
646
+ diamond: "diamond";
647
+ round: "round";
648
+ }>>;
649
+ }, z.core.$strict>>;
650
+ edges: z.ZodArray<z.ZodObject<{
651
+ from: z.ZodString;
652
+ to: z.ZodString;
653
+ label: z.ZodOptional<z.ZodString>;
654
+ }, z.core.$strict>>;
655
+ direction: z.ZodOptional<z.ZodEnum<{
656
+ TB: "TB";
657
+ TD: "TD";
658
+ BT: "BT";
659
+ LR: "LR";
660
+ RL: "RL";
661
+ }>>;
662
+ }, z.core.$strict>, z.ZodObject<{
663
+ type: z.ZodLiteral<"architecture">;
664
+ layers: z.ZodArray<z.ZodObject<{
665
+ title: z.ZodString;
666
+ items: z.ZodArray<z.ZodString>;
667
+ }, z.core.$strict>>;
668
+ }, z.core.$strict>, z.ZodObject<{
669
+ type: z.ZodLiteral<"timeline">;
670
+ layout: z.ZodOptional<z.ZodEnum<{
671
+ horizontal: "horizontal";
672
+ vertical: "vertical";
673
+ }>>;
674
+ milestones: z.ZodArray<z.ZodObject<{
675
+ date: z.ZodString;
676
+ title: z.ZodString;
677
+ desc: z.ZodOptional<z.ZodString>;
678
+ highlight: z.ZodOptional<z.ZodBoolean>;
679
+ }, z.core.$strict>>;
680
+ }, z.core.$strict>, z.ZodObject<{
681
+ type: z.ZodLiteral<"comparison">;
682
+ columns: z.ZodArray<z.ZodString>;
683
+ rows: z.ZodArray<z.ZodObject<{
684
+ label: z.ZodString;
685
+ cells: z.ZodArray<z.ZodString>;
686
+ }, z.core.$strict>>;
687
+ }, z.core.$strict>, z.ZodObject<{
688
+ type: z.ZodLiteral<"icon_cards">;
689
+ items: z.ZodArray<z.ZodObject<{
690
+ icon: z.ZodEnum<{
691
+ [x: string]: string;
692
+ }>;
693
+ title: z.ZodString;
694
+ text: z.ZodString;
695
+ }, z.core.$strict>>;
696
+ }, z.core.$strict>, z.ZodObject<{
697
+ type: z.ZodLiteral<"row_cards">;
698
+ items: z.ZodArray<z.ZodObject<{
699
+ icon: z.ZodOptional<z.ZodEnum<{
700
+ [x: string]: string;
701
+ }>>;
702
+ title: z.ZodString;
703
+ text: z.ZodOptional<z.ZodString>;
704
+ sub: z.ZodOptional<z.ZodString>;
705
+ highlight: z.ZodOptional<z.ZodBoolean>;
706
+ }, z.core.$strict>>;
707
+ }, z.core.$strict>, z.ZodObject<{
708
+ type: z.ZodLiteral<"steps">;
709
+ items: z.ZodArray<z.ZodObject<{
710
+ title: z.ZodString;
711
+ text: z.ZodString;
712
+ }, z.core.$strict>>;
713
+ }, z.core.$strict>, z.ZodObject<{
714
+ type: z.ZodLiteral<"rings">;
715
+ items: z.ZodArray<z.ZodObject<{
716
+ label: z.ZodString;
717
+ desc: z.ZodOptional<z.ZodString>;
718
+ }, z.core.$strict>>;
719
+ }, z.core.$strict>, z.ZodObject<{
720
+ type: z.ZodLiteral<"numbered_cards">;
721
+ items: z.ZodArray<z.ZodObject<{
722
+ title: z.ZodString;
723
+ text: z.ZodOptional<z.ZodString>;
724
+ sub: z.ZodOptional<z.ZodString>;
725
+ }, z.core.$strict>>;
726
+ }, z.core.$strict>, z.ZodObject<{
727
+ type: z.ZodLiteral<"roadmap">;
728
+ items: z.ZodArray<z.ZodObject<{
729
+ title: z.ZodString;
730
+ period: z.ZodOptional<z.ZodString>;
731
+ rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
732
+ label: z.ZodString;
733
+ value: z.ZodString;
734
+ }, z.core.$strict>>>;
735
+ }, z.core.$strict>>;
736
+ }, z.core.$strict>, z.ZodObject<{
737
+ type: z.ZodLiteral<"matrix">;
738
+ x_title: z.ZodOptional<z.ZodString>;
739
+ y_title: z.ZodOptional<z.ZodString>;
740
+ cols: z.ZodNumber;
741
+ items: z.ZodArray<z.ZodObject<{
742
+ title: z.ZodString;
743
+ tag: z.ZodOptional<z.ZodString>;
744
+ tone: z.ZodOptional<z.ZodEnum<{
745
+ info: "info";
746
+ accent: "accent";
747
+ neutral: "neutral";
748
+ }>>;
749
+ }, z.core.$strict>>;
750
+ }, z.core.$strict>, z.ZodObject<{
751
+ type: z.ZodLiteral<"insight_panel">;
752
+ title: z.ZodString;
753
+ rows: z.ZodArray<z.ZodObject<{
754
+ label: z.ZodString;
755
+ text: z.ZodString;
756
+ }, z.core.$strict>>;
757
+ footnote: z.ZodOptional<z.ZodString>;
758
+ }, z.core.$strict>, z.ZodObject<{
759
+ type: z.ZodLiteral<"verdict_banner">;
760
+ text: z.ZodString;
761
+ tone: z.ZodEnum<{
762
+ neutral: "neutral";
763
+ positive: "positive";
764
+ warning: "warning";
765
+ }>;
766
+ icon: z.ZodOptional<z.ZodEnum<{
767
+ [x: string]: string;
768
+ }>>;
769
+ }, z.core.$strict>, z.ZodObject<{
770
+ type: z.ZodLiteral<"citation">;
771
+ sources: z.ZodArray<z.ZodObject<{
772
+ label: z.ZodString;
773
+ url: z.ZodOptional<z.ZodString>;
774
+ ref: z.ZodOptional<z.ZodString>;
775
+ }, z.core.$strict>>;
776
+ }, z.core.$strict>, z.ZodObject<{
777
+ type: z.ZodLiteral<"image">;
778
+ asset_id: z.ZodString;
779
+ caption: z.ZodOptional<z.ZodString>;
780
+ fit: z.ZodDefault<z.ZodEnum<{
781
+ cover: "cover";
782
+ contain: "contain";
783
+ }>>;
784
+ }, z.core.$strict>, z.ZodObject<{
785
+ type: z.ZodLiteral<"image_grid">;
786
+ items: z.ZodArray<z.ZodObject<{
787
+ asset_id: z.ZodString;
788
+ caption: z.ZodOptional<z.ZodString>;
789
+ }, z.core.$strict>>;
790
+ emphasis: z.ZodOptional<z.ZodEnum<{
791
+ none: "none";
792
+ first: "first";
793
+ }>>;
794
+ }, z.core.$strict>, z.ZodObject<{
795
+ type: z.ZodLiteral<"image_compare">;
796
+ left: z.ZodObject<{
797
+ asset_id: z.ZodString;
798
+ label: z.ZodString;
799
+ }, z.core.$strict>;
800
+ right: z.ZodObject<{
801
+ asset_id: z.ZodString;
802
+ label: z.ZodString;
803
+ }, z.core.$strict>;
804
+ style: z.ZodOptional<z.ZodEnum<{
805
+ vs: "vs";
806
+ before_after: "before_after";
807
+ }>>;
808
+ }, z.core.$strict>, z.ZodObject<{
809
+ type: z.ZodLiteral<"swot">;
810
+ strengths: z.ZodArray<z.ZodString>;
811
+ weaknesses: z.ZodArray<z.ZodString>;
812
+ opportunities: z.ZodArray<z.ZodString>;
813
+ threats: z.ZodArray<z.ZodString>;
814
+ labels: z.ZodOptional<z.ZodObject<{
815
+ strengths: z.ZodOptional<z.ZodString>;
816
+ weaknesses: z.ZodOptional<z.ZodString>;
817
+ opportunities: z.ZodOptional<z.ZodString>;
818
+ threats: z.ZodOptional<z.ZodString>;
819
+ }, z.core.$strict>>;
820
+ }, z.core.$strict>, z.ZodObject<{
821
+ type: z.ZodLiteral<"bmc">;
822
+ key_partners: z.ZodArray<z.ZodString>;
823
+ key_activities: z.ZodArray<z.ZodString>;
824
+ key_resources: z.ZodArray<z.ZodString>;
825
+ value_propositions: z.ZodArray<z.ZodString>;
826
+ customer_relationships: z.ZodArray<z.ZodString>;
827
+ channels: z.ZodArray<z.ZodString>;
828
+ customer_segments: z.ZodArray<z.ZodString>;
829
+ cost_structure: z.ZodArray<z.ZodString>;
830
+ revenue_streams: z.ZodArray<z.ZodString>;
831
+ }, z.core.$strict>, z.ZodObject<{
832
+ type: z.ZodLiteral<"waterfall">;
833
+ items: z.ZodArray<z.ZodObject<{
834
+ label: z.ZodString;
835
+ value: z.ZodNumber;
836
+ kind: z.ZodOptional<z.ZodEnum<{
837
+ delta: "delta";
838
+ total: "total";
839
+ }>>;
840
+ }, z.core.$strict>>;
841
+ unit: z.ZodOptional<z.ZodString>;
842
+ }, z.core.$strict>, z.ZodObject<{
843
+ type: z.ZodLiteral<"gantt">;
844
+ items: z.ZodArray<z.ZodObject<{
845
+ label: z.ZodString;
846
+ start: z.ZodNumber;
847
+ end: z.ZodNumber;
848
+ }, z.core.$strict>>;
849
+ axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
850
+ }, z.core.$strict>, z.ZodObject<{
851
+ type: z.ZodLiteral<"pest">;
852
+ political: z.ZodObject<{
853
+ title: z.ZodOptional<z.ZodString>;
854
+ items: z.ZodArray<z.ZodString>;
855
+ }, z.core.$strict>;
856
+ economic: z.ZodObject<{
857
+ title: z.ZodOptional<z.ZodString>;
858
+ items: z.ZodArray<z.ZodString>;
859
+ }, z.core.$strict>;
860
+ social: z.ZodObject<{
861
+ title: z.ZodOptional<z.ZodString>;
862
+ items: z.ZodArray<z.ZodString>;
863
+ }, z.core.$strict>;
864
+ technological: z.ZodObject<{
865
+ title: z.ZodOptional<z.ZodString>;
866
+ items: z.ZodArray<z.ZodString>;
867
+ }, z.core.$strict>;
868
+ }, z.core.$strict>, z.ZodObject<{
869
+ type: z.ZodLiteral<"five_forces">;
870
+ rivalry: z.ZodObject<{
871
+ label: z.ZodOptional<z.ZodString>;
872
+ intensity: z.ZodOptional<z.ZodEnum<{
873
+ low: "low";
874
+ medium: "medium";
875
+ high: "high";
876
+ }>>;
877
+ items: z.ZodArray<z.ZodString>;
878
+ }, z.core.$strict>;
879
+ new_entrants: z.ZodObject<{
880
+ label: z.ZodOptional<z.ZodString>;
881
+ intensity: z.ZodOptional<z.ZodEnum<{
882
+ low: "low";
883
+ medium: "medium";
884
+ high: "high";
885
+ }>>;
886
+ items: z.ZodArray<z.ZodString>;
887
+ }, z.core.$strict>;
888
+ supplier_power: z.ZodObject<{
889
+ label: z.ZodOptional<z.ZodString>;
890
+ intensity: z.ZodOptional<z.ZodEnum<{
891
+ low: "low";
892
+ medium: "medium";
893
+ high: "high";
894
+ }>>;
895
+ items: z.ZodArray<z.ZodString>;
896
+ }, z.core.$strict>;
897
+ buyer_power: z.ZodObject<{
898
+ label: z.ZodOptional<z.ZodString>;
899
+ intensity: z.ZodOptional<z.ZodEnum<{
900
+ low: "low";
901
+ medium: "medium";
902
+ high: "high";
903
+ }>>;
904
+ items: z.ZodArray<z.ZodString>;
905
+ }, z.core.$strict>;
906
+ substitutes: z.ZodObject<{
907
+ label: z.ZodOptional<z.ZodString>;
908
+ intensity: z.ZodOptional<z.ZodEnum<{
909
+ low: "low";
910
+ medium: "medium";
911
+ high: "high";
912
+ }>>;
913
+ items: z.ZodArray<z.ZodString>;
914
+ }, z.core.$strict>;
915
+ }, z.core.$strict>, z.ZodObject<{
916
+ type: z.ZodLiteral<"heatmap">;
917
+ x_labels: z.ZodArray<z.ZodString>;
918
+ y_labels: z.ZodArray<z.ZodString>;
919
+ values: z.ZodArray<z.ZodArray<z.ZodNumber>>;
920
+ domain: z.ZodOptional<z.ZodObject<{
921
+ min: z.ZodNumber;
922
+ max: z.ZodNumber;
923
+ }, z.core.$strict>>;
924
+ show_values: z.ZodOptional<z.ZodBoolean>;
925
+ x_title: z.ZodOptional<z.ZodString>;
926
+ y_title: z.ZodOptional<z.ZodString>;
927
+ }, z.core.$strict>, z.ZodObject<{
928
+ type: z.ZodLiteral<"sankey">;
929
+ nodes: z.ZodArray<z.ZodObject<{
930
+ id: z.ZodString;
931
+ label: z.ZodString;
932
+ }, z.core.$strict>>;
933
+ links: z.ZodArray<z.ZodObject<{
934
+ from: z.ZodString;
935
+ to: z.ZodString;
936
+ value: z.ZodNumber;
937
+ }, z.core.$strict>>;
938
+ }, z.core.$strict>], "type">>>;
939
+ background: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
940
+ kind: z.ZodLiteral<"color">;
941
+ value: z.ZodString;
942
+ }, z.core.$strict>, z.ZodObject<{
943
+ kind: z.ZodLiteral<"gradient">;
944
+ from: z.ZodString;
945
+ to: z.ZodString;
946
+ direction: z.ZodOptional<z.ZodEnum<{
947
+ tb: "tb";
948
+ lr: "lr";
949
+ diagonal: "diagonal";
950
+ }>>;
951
+ }, z.core.$strict>, z.ZodObject<{
952
+ kind: z.ZodLiteral<"asset">;
953
+ asset_id: z.ZodString;
954
+ overlay: z.ZodOptional<z.ZodObject<{
955
+ color: z.ZodString;
956
+ opacity: z.ZodNumber;
957
+ }, z.core.$strict>>;
958
+ fit: z.ZodOptional<z.ZodEnum<{
959
+ cover: "cover";
960
+ contain: "contain";
961
+ }>>;
962
+ }, z.core.$strict>], "kind">>;
963
+ decor: z.ZodOptional<z.ZodObject<{
964
+ kind: z.ZodEnum<{
965
+ big_number: "big_number";
966
+ corner_tag: "corner_tag";
967
+ rule_line: "rule_line";
968
+ quote_marks: "quote_marks";
969
+ geo_dots: "geo_dots";
970
+ }>;
971
+ intensity: z.ZodOptional<z.ZodEnum<{
972
+ subtle: "subtle";
973
+ normal: "normal";
974
+ }>>;
975
+ text: z.ZodOptional<z.ZodString>;
976
+ }, z.core.$strict>>;
977
+ image_side: z.ZodOptional<z.ZodEnum<{
978
+ left: "left";
979
+ right: "right";
980
+ }>>;
981
+ footnote: z.ZodOptional<z.ZodString>;
982
+ notes: z.ZodOptional<z.ZodString>;
983
+ }, z.core.$strict>;
984
+ declare const PptxIRSchema: z.ZodObject<{
985
+ version: z.ZodDefault<z.ZodLiteral<"4">>;
986
+ filename: z.ZodDefault<z.ZodString>;
987
+ narrative: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>>;
988
+ theme: z.ZodDefault<z.ZodObject<{
989
+ id: z.ZodDefault<z.ZodString>;
990
+ style: z.ZodOptional<z.ZodObject<{
991
+ colors: z.ZodOptional<z.ZodObject<{
992
+ bg: z.ZodOptional<z.ZodString>;
993
+ surface: z.ZodOptional<z.ZodString>;
994
+ panel: z.ZodOptional<z.ZodString>;
995
+ primary: z.ZodOptional<z.ZodString>;
996
+ accent: z.ZodOptional<z.ZodString>;
997
+ text: z.ZodOptional<z.ZodString>;
998
+ muted: z.ZodOptional<z.ZodString>;
999
+ border: z.ZodOptional<z.ZodString>;
1000
+ chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
1001
+ accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
1002
+ cardStroke: z.ZodOptional<z.ZodString>;
1003
+ }, z.core.$strict>>;
1004
+ fonts: z.ZodOptional<z.ZodObject<{
1005
+ heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
1006
+ body: z.ZodOptional<z.ZodArray<z.ZodString>>;
1007
+ mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
1008
+ }, z.core.$strict>>;
1009
+ shape: z.ZodOptional<z.ZodObject<{
1010
+ radius: z.ZodOptional<z.ZodNumber>;
1011
+ gapScale: z.ZodOptional<z.ZodNumber>;
1012
+ }, z.core.$strict>>;
1013
+ }, z.core.$strict>>;
1014
+ brand: z.ZodOptional<z.ZodObject<{
1015
+ suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
1016
+ suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
1017
+ }, z.core.$strict>>;
1018
+ }, z.core.$strict>>;
1019
+ meta: z.ZodDefault<z.ZodObject<{
1020
+ organization: z.ZodOptional<z.ZodString>;
1021
+ authors: z.ZodOptional<z.ZodArray<z.ZodObject<{
1022
+ name: z.ZodString;
1023
+ role: z.ZodOptional<z.ZodString>;
1024
+ org: z.ZodOptional<z.ZodString>;
1025
+ }, z.core.$strict>>>;
1026
+ date: z.ZodOptional<z.ZodString>;
1027
+ version: z.ZodOptional<z.ZodString>;
1028
+ confidentiality: z.ZodOptional<z.ZodEnum<{
1029
+ public: "public";
1030
+ internal: "internal";
1031
+ confidential: "confidential";
1032
+ restricted: "restricted";
1033
+ }>>;
1034
+ contact: z.ZodOptional<z.ZodObject<{
1035
+ name: z.ZodOptional<z.ZodString>;
1036
+ email: z.ZodOptional<z.ZodString>;
1037
+ phone: z.ZodOptional<z.ZodString>;
1038
+ website: z.ZodOptional<z.ZodString>;
1039
+ }, z.core.$strict>>;
1040
+ copyright: z.ZodOptional<z.ZodString>;
1041
+ animation: z.ZodOptional<z.ZodObject<{
1042
+ transition: z.ZodOptional<z.ZodEnum<{
1043
+ push: "push";
1044
+ fade: "fade";
1045
+ wipe: "wipe";
1046
+ none: "none";
1047
+ }>>;
1048
+ elements: z.ZodOptional<z.ZodEnum<{
1049
+ none: "none";
1050
+ auto: "auto";
1051
+ }>>;
1052
+ }, z.core.$strict>>;
1053
+ }, z.core.$strict>>;
1054
+ assets: z.ZodDefault<z.ZodObject<{
1055
+ images: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
1056
+ src: z.ZodString;
1057
+ alt: z.ZodOptional<z.ZodString>;
1058
+ error: z.ZodOptional<z.ZodString>;
1059
+ }, z.core.$strict>>>;
1060
+ }, z.core.$strict>>;
1061
+ brand: z.ZodOptional<z.ZodObject<{
1062
+ logo_asset_id: z.ZodOptional<z.ZodString>;
1063
+ position: z.ZodOptional<z.ZodEnum<{
1064
+ tl: "tl";
1065
+ tr: "tr";
1066
+ bl: "bl";
1067
+ br: "br";
1068
+ }>>;
1069
+ }, z.core.$strict>>;
1070
+ seed: z.ZodOptional<z.ZodNumber>;
1071
+ slides: z.ZodArray<z.ZodObject<{
1072
+ type: z.ZodDefault<z.ZodEnum<{
1073
+ cover: "cover";
1074
+ chapter: "chapter";
1075
+ content: "content";
1076
+ ending: "ending";
1077
+ }>>;
1078
+ id: z.ZodOptional<z.ZodString>;
1079
+ placeholder: z.ZodOptional<z.ZodLiteral<true>>;
1080
+ layout: z.ZodOptional<z.ZodString>;
1081
+ beat: z.ZodOptional<z.ZodEnum<{
1082
+ anchor: "anchor";
1083
+ dense: "dense";
1084
+ breathing: "breathing";
1085
+ }>>;
1086
+ arrangement: z.ZodOptional<z.ZodEnum<{
1087
+ code: "code";
1088
+ quote: "quote";
1089
+ single: "single";
1090
+ two_column: "two_column";
1091
+ kpi_focus: "kpi_focus";
1092
+ image_focus: "image_focus";
1093
+ big_number: "big_number";
1094
+ assertion_evidence: "assertion_evidence";
1095
+ aside: "aside";
1096
+ }>>;
1097
+ heading: z.ZodOptional<z.ZodString>;
1098
+ subheading: z.ZodOptional<z.ZodString>;
1099
+ components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
1100
+ type: z.ZodLiteral<"bullets">;
1101
+ items: z.ZodArray<z.ZodString>;
1102
+ style: z.ZodOptional<z.ZodEnum<{
1103
+ default: "default";
1104
+ checklist: "checklist";
1105
+ numbered: "numbered";
1106
+ plain: "plain";
1107
+ divided: "divided";
1108
+ }>>;
1109
+ }, z.core.$strict>, z.ZodObject<{
1110
+ type: z.ZodLiteral<"paragraph">;
1111
+ text: z.ZodString;
1112
+ }, z.core.$strict>, z.ZodObject<{
1113
+ type: z.ZodLiteral<"quote">;
1114
+ text: z.ZodString;
1115
+ attribution: z.ZodOptional<z.ZodString>;
1116
+ }, z.core.$strict>, z.ZodObject<{
1117
+ type: z.ZodLiteral<"callout">;
1118
+ variant: z.ZodEnum<{
1119
+ info: "info";
1120
+ warn: "warn";
1121
+ tip: "tip";
1122
+ }>;
1123
+ text: z.ZodString;
1124
+ icon: z.ZodOptional<z.ZodEnum<{
1125
+ [x: string]: string;
1126
+ }>>;
1127
+ }, z.core.$strict>, z.ZodObject<{
1128
+ type: z.ZodLiteral<"code">;
1129
+ language: z.ZodString;
1130
+ code: z.ZodString;
1131
+ }, z.core.$strict>, z.ZodObject<{
1132
+ type: z.ZodLiteral<"kpi_cards">;
1133
+ items: z.ZodArray<z.ZodObject<{
1134
+ value: z.ZodString;
1135
+ unit: z.ZodOptional<z.ZodString>;
1136
+ label: z.ZodString;
1137
+ delta: z.ZodOptional<z.ZodEnum<{
1138
+ flat: "flat";
1139
+ up: "up";
1140
+ down: "down";
1141
+ }>>;
1142
+ icon: z.ZodOptional<z.ZodEnum<{
1143
+ [x: string]: string;
1144
+ }>>;
1145
+ source: z.ZodOptional<z.ZodString>;
1146
+ }, z.core.$strict>>;
1147
+ }, z.core.$strict>, z.ZodObject<{
1148
+ type: z.ZodLiteral<"chart">;
1149
+ chart_type: z.ZodEnum<{
1150
+ line: "line";
1151
+ dumbbell: "dumbbell";
1152
+ funnel: "funnel";
1153
+ bar: "bar";
1154
+ pie: "pie";
1155
+ }>;
1156
+ direction: z.ZodOptional<z.ZodEnum<{
1157
+ horizontal: "horizontal";
1158
+ vertical: "vertical";
1159
+ }>>;
1160
+ style: z.ZodOptional<z.ZodEnum<{
1161
+ donut: "donut";
1162
+ }>>;
1163
+ axes: z.ZodOptional<z.ZodObject<{
1164
+ x_title: z.ZodOptional<z.ZodString>;
1165
+ y_title: z.ZodOptional<z.ZodString>;
1166
+ show_grid: z.ZodOptional<z.ZodBoolean>;
1167
+ }, z.core.$strict>>;
1168
+ series: z.ZodArray<z.ZodObject<{
1169
+ name: z.ZodString;
1170
+ data: z.ZodArray<z.ZodObject<{
1171
+ x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
1172
+ y: z.ZodNumber;
1173
+ }, z.core.$strict>>;
1174
+ }, z.core.$strict>>;
1175
+ }, z.core.$strict>, z.ZodObject<{
1176
+ type: z.ZodLiteral<"flowchart">;
1177
+ nodes: z.ZodArray<z.ZodObject<{
1178
+ id: z.ZodString;
1179
+ label: z.ZodString;
1180
+ kind: z.ZodOptional<z.ZodEnum<{
1181
+ rect: "rect";
1182
+ diamond: "diamond";
1183
+ round: "round";
1184
+ }>>;
1185
+ }, z.core.$strict>>;
1186
+ edges: z.ZodArray<z.ZodObject<{
1187
+ from: z.ZodString;
1188
+ to: z.ZodString;
1189
+ label: z.ZodOptional<z.ZodString>;
1190
+ }, z.core.$strict>>;
1191
+ direction: z.ZodOptional<z.ZodEnum<{
1192
+ TB: "TB";
1193
+ TD: "TD";
1194
+ BT: "BT";
1195
+ LR: "LR";
1196
+ RL: "RL";
1197
+ }>>;
1198
+ }, z.core.$strict>, z.ZodObject<{
1199
+ type: z.ZodLiteral<"architecture">;
1200
+ layers: z.ZodArray<z.ZodObject<{
1201
+ title: z.ZodString;
1202
+ items: z.ZodArray<z.ZodString>;
1203
+ }, z.core.$strict>>;
1204
+ }, z.core.$strict>, z.ZodObject<{
1205
+ type: z.ZodLiteral<"timeline">;
1206
+ layout: z.ZodOptional<z.ZodEnum<{
1207
+ horizontal: "horizontal";
1208
+ vertical: "vertical";
1209
+ }>>;
1210
+ milestones: z.ZodArray<z.ZodObject<{
1211
+ date: z.ZodString;
1212
+ title: z.ZodString;
1213
+ desc: z.ZodOptional<z.ZodString>;
1214
+ highlight: z.ZodOptional<z.ZodBoolean>;
1215
+ }, z.core.$strict>>;
1216
+ }, z.core.$strict>, z.ZodObject<{
1217
+ type: z.ZodLiteral<"comparison">;
1218
+ columns: z.ZodArray<z.ZodString>;
1219
+ rows: z.ZodArray<z.ZodObject<{
1220
+ label: z.ZodString;
1221
+ cells: z.ZodArray<z.ZodString>;
1222
+ }, z.core.$strict>>;
1223
+ }, z.core.$strict>, z.ZodObject<{
1224
+ type: z.ZodLiteral<"icon_cards">;
1225
+ items: z.ZodArray<z.ZodObject<{
1226
+ icon: z.ZodEnum<{
1227
+ [x: string]: string;
1228
+ }>;
1229
+ title: z.ZodString;
1230
+ text: z.ZodString;
1231
+ }, z.core.$strict>>;
1232
+ }, z.core.$strict>, z.ZodObject<{
1233
+ type: z.ZodLiteral<"row_cards">;
1234
+ items: z.ZodArray<z.ZodObject<{
1235
+ icon: z.ZodOptional<z.ZodEnum<{
1236
+ [x: string]: string;
1237
+ }>>;
1238
+ title: z.ZodString;
1239
+ text: z.ZodOptional<z.ZodString>;
1240
+ sub: z.ZodOptional<z.ZodString>;
1241
+ highlight: z.ZodOptional<z.ZodBoolean>;
1242
+ }, z.core.$strict>>;
1243
+ }, z.core.$strict>, z.ZodObject<{
1244
+ type: z.ZodLiteral<"steps">;
1245
+ items: z.ZodArray<z.ZodObject<{
1246
+ title: z.ZodString;
1247
+ text: z.ZodString;
1248
+ }, z.core.$strict>>;
1249
+ }, z.core.$strict>, z.ZodObject<{
1250
+ type: z.ZodLiteral<"rings">;
1251
+ items: z.ZodArray<z.ZodObject<{
1252
+ label: z.ZodString;
1253
+ desc: z.ZodOptional<z.ZodString>;
1254
+ }, z.core.$strict>>;
1255
+ }, z.core.$strict>, z.ZodObject<{
1256
+ type: z.ZodLiteral<"numbered_cards">;
1257
+ items: z.ZodArray<z.ZodObject<{
1258
+ title: z.ZodString;
1259
+ text: z.ZodOptional<z.ZodString>;
1260
+ sub: z.ZodOptional<z.ZodString>;
1261
+ }, z.core.$strict>>;
1262
+ }, z.core.$strict>, z.ZodObject<{
1263
+ type: z.ZodLiteral<"roadmap">;
1264
+ items: z.ZodArray<z.ZodObject<{
1265
+ title: z.ZodString;
1266
+ period: z.ZodOptional<z.ZodString>;
1267
+ rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
1268
+ label: z.ZodString;
1269
+ value: z.ZodString;
1270
+ }, z.core.$strict>>>;
1271
+ }, z.core.$strict>>;
1272
+ }, z.core.$strict>, z.ZodObject<{
1273
+ type: z.ZodLiteral<"matrix">;
1274
+ x_title: z.ZodOptional<z.ZodString>;
1275
+ y_title: z.ZodOptional<z.ZodString>;
1276
+ cols: z.ZodNumber;
1277
+ items: z.ZodArray<z.ZodObject<{
1278
+ title: z.ZodString;
1279
+ tag: z.ZodOptional<z.ZodString>;
1280
+ tone: z.ZodOptional<z.ZodEnum<{
1281
+ info: "info";
1282
+ accent: "accent";
1283
+ neutral: "neutral";
1284
+ }>>;
1285
+ }, z.core.$strict>>;
1286
+ }, z.core.$strict>, z.ZodObject<{
1287
+ type: z.ZodLiteral<"insight_panel">;
1288
+ title: z.ZodString;
1289
+ rows: z.ZodArray<z.ZodObject<{
1290
+ label: z.ZodString;
1291
+ text: z.ZodString;
1292
+ }, z.core.$strict>>;
1293
+ footnote: z.ZodOptional<z.ZodString>;
1294
+ }, z.core.$strict>, z.ZodObject<{
1295
+ type: z.ZodLiteral<"verdict_banner">;
1296
+ text: z.ZodString;
1297
+ tone: z.ZodEnum<{
1298
+ neutral: "neutral";
1299
+ positive: "positive";
1300
+ warning: "warning";
1301
+ }>;
1302
+ icon: z.ZodOptional<z.ZodEnum<{
1303
+ [x: string]: string;
1304
+ }>>;
1305
+ }, z.core.$strict>, z.ZodObject<{
1306
+ type: z.ZodLiteral<"citation">;
1307
+ sources: z.ZodArray<z.ZodObject<{
1308
+ label: z.ZodString;
1309
+ url: z.ZodOptional<z.ZodString>;
1310
+ ref: z.ZodOptional<z.ZodString>;
1311
+ }, z.core.$strict>>;
1312
+ }, z.core.$strict>, z.ZodObject<{
1313
+ type: z.ZodLiteral<"image">;
1314
+ asset_id: z.ZodString;
1315
+ caption: z.ZodOptional<z.ZodString>;
1316
+ fit: z.ZodDefault<z.ZodEnum<{
1317
+ cover: "cover";
1318
+ contain: "contain";
1319
+ }>>;
1320
+ }, z.core.$strict>, z.ZodObject<{
1321
+ type: z.ZodLiteral<"image_grid">;
1322
+ items: z.ZodArray<z.ZodObject<{
1323
+ asset_id: z.ZodString;
1324
+ caption: z.ZodOptional<z.ZodString>;
1325
+ }, z.core.$strict>>;
1326
+ emphasis: z.ZodOptional<z.ZodEnum<{
1327
+ none: "none";
1328
+ first: "first";
1329
+ }>>;
1330
+ }, z.core.$strict>, z.ZodObject<{
1331
+ type: z.ZodLiteral<"image_compare">;
1332
+ left: z.ZodObject<{
1333
+ asset_id: z.ZodString;
1334
+ label: z.ZodString;
1335
+ }, z.core.$strict>;
1336
+ right: z.ZodObject<{
1337
+ asset_id: z.ZodString;
1338
+ label: z.ZodString;
1339
+ }, z.core.$strict>;
1340
+ style: z.ZodOptional<z.ZodEnum<{
1341
+ vs: "vs";
1342
+ before_after: "before_after";
1343
+ }>>;
1344
+ }, z.core.$strict>, z.ZodObject<{
1345
+ type: z.ZodLiteral<"swot">;
1346
+ strengths: z.ZodArray<z.ZodString>;
1347
+ weaknesses: z.ZodArray<z.ZodString>;
1348
+ opportunities: z.ZodArray<z.ZodString>;
1349
+ threats: z.ZodArray<z.ZodString>;
1350
+ labels: z.ZodOptional<z.ZodObject<{
1351
+ strengths: z.ZodOptional<z.ZodString>;
1352
+ weaknesses: z.ZodOptional<z.ZodString>;
1353
+ opportunities: z.ZodOptional<z.ZodString>;
1354
+ threats: z.ZodOptional<z.ZodString>;
1355
+ }, z.core.$strict>>;
1356
+ }, z.core.$strict>, z.ZodObject<{
1357
+ type: z.ZodLiteral<"bmc">;
1358
+ key_partners: z.ZodArray<z.ZodString>;
1359
+ key_activities: z.ZodArray<z.ZodString>;
1360
+ key_resources: z.ZodArray<z.ZodString>;
1361
+ value_propositions: z.ZodArray<z.ZodString>;
1362
+ customer_relationships: z.ZodArray<z.ZodString>;
1363
+ channels: z.ZodArray<z.ZodString>;
1364
+ customer_segments: z.ZodArray<z.ZodString>;
1365
+ cost_structure: z.ZodArray<z.ZodString>;
1366
+ revenue_streams: z.ZodArray<z.ZodString>;
1367
+ }, z.core.$strict>, z.ZodObject<{
1368
+ type: z.ZodLiteral<"waterfall">;
1369
+ items: z.ZodArray<z.ZodObject<{
1370
+ label: z.ZodString;
1371
+ value: z.ZodNumber;
1372
+ kind: z.ZodOptional<z.ZodEnum<{
1373
+ delta: "delta";
1374
+ total: "total";
1375
+ }>>;
1376
+ }, z.core.$strict>>;
1377
+ unit: z.ZodOptional<z.ZodString>;
1378
+ }, z.core.$strict>, z.ZodObject<{
1379
+ type: z.ZodLiteral<"gantt">;
1380
+ items: z.ZodArray<z.ZodObject<{
1381
+ label: z.ZodString;
1382
+ start: z.ZodNumber;
1383
+ end: z.ZodNumber;
1384
+ }, z.core.$strict>>;
1385
+ axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
1386
+ }, z.core.$strict>, z.ZodObject<{
1387
+ type: z.ZodLiteral<"pest">;
1388
+ political: z.ZodObject<{
1389
+ title: z.ZodOptional<z.ZodString>;
1390
+ items: z.ZodArray<z.ZodString>;
1391
+ }, z.core.$strict>;
1392
+ economic: z.ZodObject<{
1393
+ title: z.ZodOptional<z.ZodString>;
1394
+ items: z.ZodArray<z.ZodString>;
1395
+ }, z.core.$strict>;
1396
+ social: z.ZodObject<{
1397
+ title: z.ZodOptional<z.ZodString>;
1398
+ items: z.ZodArray<z.ZodString>;
1399
+ }, z.core.$strict>;
1400
+ technological: z.ZodObject<{
1401
+ title: z.ZodOptional<z.ZodString>;
1402
+ items: z.ZodArray<z.ZodString>;
1403
+ }, z.core.$strict>;
1404
+ }, z.core.$strict>, z.ZodObject<{
1405
+ type: z.ZodLiteral<"five_forces">;
1406
+ rivalry: z.ZodObject<{
1407
+ label: z.ZodOptional<z.ZodString>;
1408
+ intensity: z.ZodOptional<z.ZodEnum<{
1409
+ low: "low";
1410
+ medium: "medium";
1411
+ high: "high";
1412
+ }>>;
1413
+ items: z.ZodArray<z.ZodString>;
1414
+ }, z.core.$strict>;
1415
+ new_entrants: z.ZodObject<{
1416
+ label: z.ZodOptional<z.ZodString>;
1417
+ intensity: z.ZodOptional<z.ZodEnum<{
1418
+ low: "low";
1419
+ medium: "medium";
1420
+ high: "high";
1421
+ }>>;
1422
+ items: z.ZodArray<z.ZodString>;
1423
+ }, z.core.$strict>;
1424
+ supplier_power: z.ZodObject<{
1425
+ label: z.ZodOptional<z.ZodString>;
1426
+ intensity: z.ZodOptional<z.ZodEnum<{
1427
+ low: "low";
1428
+ medium: "medium";
1429
+ high: "high";
1430
+ }>>;
1431
+ items: z.ZodArray<z.ZodString>;
1432
+ }, z.core.$strict>;
1433
+ buyer_power: z.ZodObject<{
1434
+ label: z.ZodOptional<z.ZodString>;
1435
+ intensity: z.ZodOptional<z.ZodEnum<{
1436
+ low: "low";
1437
+ medium: "medium";
1438
+ high: "high";
1439
+ }>>;
1440
+ items: z.ZodArray<z.ZodString>;
1441
+ }, z.core.$strict>;
1442
+ substitutes: z.ZodObject<{
1443
+ label: z.ZodOptional<z.ZodString>;
1444
+ intensity: z.ZodOptional<z.ZodEnum<{
1445
+ low: "low";
1446
+ medium: "medium";
1447
+ high: "high";
1448
+ }>>;
1449
+ items: z.ZodArray<z.ZodString>;
1450
+ }, z.core.$strict>;
1451
+ }, z.core.$strict>, z.ZodObject<{
1452
+ type: z.ZodLiteral<"heatmap">;
1453
+ x_labels: z.ZodArray<z.ZodString>;
1454
+ y_labels: z.ZodArray<z.ZodString>;
1455
+ values: z.ZodArray<z.ZodArray<z.ZodNumber>>;
1456
+ domain: z.ZodOptional<z.ZodObject<{
1457
+ min: z.ZodNumber;
1458
+ max: z.ZodNumber;
1459
+ }, z.core.$strict>>;
1460
+ show_values: z.ZodOptional<z.ZodBoolean>;
1461
+ x_title: z.ZodOptional<z.ZodString>;
1462
+ y_title: z.ZodOptional<z.ZodString>;
1463
+ }, z.core.$strict>, z.ZodObject<{
1464
+ type: z.ZodLiteral<"sankey">;
1465
+ nodes: z.ZodArray<z.ZodObject<{
1466
+ id: z.ZodString;
1467
+ label: z.ZodString;
1468
+ }, z.core.$strict>>;
1469
+ links: z.ZodArray<z.ZodObject<{
1470
+ from: z.ZodString;
1471
+ to: z.ZodString;
1472
+ value: z.ZodNumber;
1473
+ }, z.core.$strict>>;
1474
+ }, z.core.$strict>], "type">>>;
1475
+ background: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1476
+ kind: z.ZodLiteral<"color">;
1477
+ value: z.ZodString;
1478
+ }, z.core.$strict>, z.ZodObject<{
1479
+ kind: z.ZodLiteral<"gradient">;
1480
+ from: z.ZodString;
1481
+ to: z.ZodString;
1482
+ direction: z.ZodOptional<z.ZodEnum<{
1483
+ tb: "tb";
1484
+ lr: "lr";
1485
+ diagonal: "diagonal";
1486
+ }>>;
1487
+ }, z.core.$strict>, z.ZodObject<{
1488
+ kind: z.ZodLiteral<"asset">;
1489
+ asset_id: z.ZodString;
1490
+ overlay: z.ZodOptional<z.ZodObject<{
1491
+ color: z.ZodString;
1492
+ opacity: z.ZodNumber;
1493
+ }, z.core.$strict>>;
1494
+ fit: z.ZodOptional<z.ZodEnum<{
1495
+ cover: "cover";
1496
+ contain: "contain";
1497
+ }>>;
1498
+ }, z.core.$strict>], "kind">>;
1499
+ decor: z.ZodOptional<z.ZodObject<{
1500
+ kind: z.ZodEnum<{
1501
+ big_number: "big_number";
1502
+ corner_tag: "corner_tag";
1503
+ rule_line: "rule_line";
1504
+ quote_marks: "quote_marks";
1505
+ geo_dots: "geo_dots";
1506
+ }>;
1507
+ intensity: z.ZodOptional<z.ZodEnum<{
1508
+ subtle: "subtle";
1509
+ normal: "normal";
1510
+ }>>;
1511
+ text: z.ZodOptional<z.ZodString>;
1512
+ }, z.core.$strict>>;
1513
+ image_side: z.ZodOptional<z.ZodEnum<{
1514
+ left: "left";
1515
+ right: "right";
1516
+ }>>;
1517
+ footnote: z.ZodOptional<z.ZodString>;
1518
+ notes: z.ZodOptional<z.ZodString>;
1519
+ }, z.core.$strict>>;
1520
+ }, z.core.$strict>;
1521
+ type PptxIR = z.infer<typeof PptxIRSchema>;
1522
+ type Component = z.infer<typeof ComponentSchema>;
1523
+ type BackgroundSpec = z.infer<typeof BackgroundSpecSchema>;
1524
+ type Slide = z.infer<typeof SlideSchema>;
1525
+ type Assets = z.infer<typeof AssetsSchema>;
1526
+ type Meta = z.infer<typeof MetaSchema>;
1527
+
1528
+ interface ValidationIssue {
1529
+ path: string;
1530
+ message: string;
1531
+ /** 1-based slide number when the issue is scoped to a slide. */
1532
+ page?: number;
1533
+ /**
1534
+ * The offending slide's own `id` (`Slide.id`, `ir/index.ts`) — W5
1535
+ * whole-branch review finding 2: the README already claimed "validation
1536
+ * error messages reference [a slide] by [its] id"; this is what makes
1537
+ * that true. Set by every page-scoped issue producer
1538
+ * ({@link checkLayoutApplicability}, {@link checkBoundaryPageContent},
1539
+ * the content-quality-gate translation in {@link validateIr},
1540
+ * {@link checkDuplicateSlideIds})
1541
+ * when the slide in question has an `id` — absent when the slide has
1542
+ * none (bare, pre-W5 IR) or the issue is deck-level, not scoped to any
1543
+ * single slide. {@link formatIssues} appends it in parens after the page
1544
+ * number.
1545
+ */
1546
+ slideId?: string;
1547
+ }
1548
+ interface ValidateResult {
1549
+ ok: boolean;
1550
+ ir?: PptxIR;
1551
+ errors: ValidationIssue[];
1552
+ /**
1553
+ * Human-readable "`path`: `alias` → `canonical`" entries for every
1554
+ * deterministic field-alias rewrite `validateIr` applied before parsing
1555
+ * (W5 task 4, `ir/field-aliases.ts`'s `normalizeComponentAliases`) — e.g. a
1556
+ * kpi item's `title` silently adopted as `label`. Present only when at
1557
+ * least one rewrite happened; informational, never gates `ok` on its own.
1558
+ */
1559
+ normalized?: string[];
1560
+ /**
1561
+ * Backward-compatible addition (borrow wave, Task 2 — dual-threshold
1562
+ * severity recalibration): warn-severity {@link checkIrQuality} findings
1563
+ * (editorial-budget codes — `missing_heading`/`long_heading`/`density`/
1564
+ * `bullets_overflow`/`bullet_item_long`/`big_number_no_kpi`) plus
1565
+ * {@link checkAssetReferences}'s dangling-`asset_id` findings (borrow wave,
1566
+ * Task 2, B5 — a reference to an `assets.images` key that doesn't exist),
1567
+ * formatted the same shape {@link formatIssues} already prints for `errors`
1568
+ * (page/id/path all included). Present only when at least one warn-severity
1569
+ * finding exists, and never gates `ok` on its own — that is exactly what
1570
+ * moved these findings off `errors` and onto here. Can be present alongside
1571
+ * a failing (`ok:false`) result too, whenever `checkIrQuality`/
1572
+ * `checkAssetReferences` themselves ran (an *earlier* hard gate — schema,
1573
+ * theme id, layout applicability, full-body exclusivity, boundary-page
1574
+ * content, duplicate ids, asset bytes, narrative — short-circuits before
1575
+ * either runs at all, so a deck rejected by one of those never reaches
1576
+ * this field either way, see `validateIr`'s own body for the exact gate
1577
+ * order). {@link formatWarnings} renders this array as CLI-ready
1578
+ * `"warning: ..."` lines.
1579
+ */
1580
+ warnings?: ValidationIssue[];
1581
+ }
1582
+ /**
1583
+ * Validate raw JSON against the IR schema, then — once it parses — resolve
1584
+ * `narrative` (`resolveNarrative`, spec §5: an unrecognized preset name is a
1585
+ * `narrative`-path error, page-less) and run the content-quality gate
1586
+ * (`checkIrQuality`, passed the resolved axes) against the parsed IR. Every
1587
+ * hard-gate stage (schema, theme id, layout applicability, full-body
1588
+ * exclusivity, boundary-page content, duplicate ids, asset bytes, narrative)
1589
+ * must pass for `ok: true`, same as before. Quality findings are reported
1590
+ * the same way as schema errors (page-scoped, 1-based).
1591
+ *
1592
+ * Dual-threshold severity (borrow wave, Task 2 — recalibrated from the prior
1593
+ * "any finding blocks" design): `checkIrQuality`'s own "warn" vs "error" tag
1594
+ * is now respected, not flattened. Only "error"-severity findings
1595
+ * (`empty_deck`, `bullet_item_overflow` — content genuinely lost: an empty
1596
+ * deck, or a bullet item long enough to hit `bullets.tsx`'s MIN_FONT floor
1597
+ * and actually get truncated) gate `ok`. "warn"-severity findings — the
1598
+ * editorial-budget codes (`missing_heading`/`long_heading`/`density`/
1599
+ * `bullets_overflow`/`bullet_item_long`/`big_number_no_kpi`) — surface on
1600
+ * {@link ValidateResult.warnings} instead: visible to every caller (the SDK,
1601
+ * the CLI's `validate`/`render` pre-flight), never blocking. This reverses
1602
+ * the prior posture (this comment used to read "any finding blocks... not
1603
+ * only 'error'-severity ones") because the evidence behind it did not hold:
1604
+ * a boundary scan (borrow-wave fact-report, Q3) found the editorial bullets
1605
+ * threshold blocking content roughly 3.5x below where `bullets.tsx`'s own
1606
+ * render safety net (2-line wrap, shrink to a 14px floor) actually starts
1607
+ * losing characters — so the hard gate was rejecting deck content that
1608
+ * would have rendered with zero visible defect, and a tight hard gate on an
1609
+ * editorial (not geometric) threshold taught truncate-content-to-pass
1610
+ * workarounds rather than catching real loss. `generatePptx`'s default path
1611
+ * inherits this unchanged (`if (!v.ok) throw`) — it already only ever
1612
+ * blocked on `ok`, never inspected `errors`/`warnings` directly.
1613
+ *
1614
+ * Before any of that, one deterministic alias pass runs
1615
+ * ({@link normalizeComponentAliases}, W5 task 4) for the component
1616
+ * field-name synonym rescue only (kpi `title`→`label`, quote
1617
+ * `content`→`text`, …) — a weak-model rescue for schema-internal synonym
1618
+ * drift, scoped to `slides[]`. It only rewrites where the canonical key is
1619
+ * absent, so the schema parse below never sees an alias as an "unrecognized
1620
+ * key" in the first place. Purely informational: every rewrite is recorded
1621
+ * as a human-readable `path: alias → canonical` string and threaded onto
1622
+ * `ValidateResult.normalized` on *every* return path below via
1623
+ * `withNormalized`, success or failure alike — it never itself gates `ok`.
1624
+ *
1625
+ * There is deliberately no root/narrative-level alias pass (spec §16,
1626
+ * reversing the now-superseded §15.4): a v4 document that still spells its
1627
+ * pre-rename vocabulary — `scenario` instead of `narrative`, `mode`/
1628
+ * `delivery` instead of `strategy`/`pacing`, or the old enum values
1629
+ * `"text"`/`"presentation"`/`"narrative"` — is not old-vocabulary
1630
+ * *compatibility*, it is exactly the vocabulary this rename retired, so it
1631
+ * hard-errors like any other unknown key or value: `scenario` fails the
1632
+ * schema's `.strict()` parse below as an unrecognized key, and an old enum
1633
+ * value (or the axis-key names `mode`/`delivery` inside `narrative`, which
1634
+ * the schema itself leaves open) fails `resolveNarrative`'s own runtime
1635
+ * check, listing the current values. `pptfast migrate` (`ir/migrate.ts`)
1636
+ * remains the sanctioned bridge for a genuine v3 document — see the v3 hard
1637
+ * reject below, which points there. Hard-erroring is not the same as
1638
+ * leaving the error message unhelpful, though: the schema-parse branch below
1639
+ * appends a rename hint to `scenario` and the rest of the documented v2/v3
1640
+ * rename map (`blocks`/`variant`/`theme.override` — `./ir/rename-hints.ts`,
1641
+ * borrow-wave task 3) whenever the offending key matches one, and a generic
1642
+ * "belongs inside components[]" hint for any other slide-level unrecognized
1643
+ * key — message-layer annotation only, never a second, silent rewrite path
1644
+ * alongside {@link normalizeComponentAliases}.
1645
+ *
1646
+ * The component-alias pass only ever runs for a document already headed for
1647
+ * the v4 schema — an explicit `version: "2"` or `version: "3"` is
1648
+ * hard-rejected first, below, before the alias pass or any schema parse
1649
+ * (spec §9.3: a v2/v3 document is never silently reinterpreted as v4).
1650
+ */
1651
+ declare function validateIr(input: unknown): ValidateResult;
1652
+ /**
1653
+ * `"page 2 (p-kpi) — path: message"` when the issue carries both a `page`
1654
+ * and a `slideId` (W5 whole-branch review finding 2 — the README's own
1655
+ * claim that a validation error "references [a slide] by [its] id", made
1656
+ * true) — the parenthesized id is appended only alongside a `page` number,
1657
+ * never on its own: a deck-level issue that happens to set a representative
1658
+ * `slideId` with no `page` ({@link checkDuplicateSlideIds} above) keeps its
1659
+ * pre-existing, unchanged format. Every other combination — `page` with no
1660
+ * `slideId` (an id-less slide), or neither — is byte-identical to before
1661
+ * this task.
1662
+ */
1663
+ declare function formatIssues(errors: ValidationIssue[]): string;
1664
+ /**
1665
+ * `"warning: page 2 (p-kpi) — path: message"` per {@link ValidateResult.warnings}
1666
+ * entry (borrow wave, Task 2) — the CLI warn-line convention: `pptfast
1667
+ * validate`/`render` print one of these per warn-severity finding, exit 0
1668
+ * regardless (only `errors` drives the exit code — see `cli/commands.ts`'s
1669
+ * `runValidate`/`runRender`). Formats each issue alone through
1670
+ * {@link formatIssues} and prefixes the result rather than duplicating its
1671
+ * page/id/path shape — a warning line is byte-identical to an error line
1672
+ * past the leading label.
1673
+ */
1674
+ declare function formatWarnings(warnings: ValidationIssue[]): string;
1675
+ interface ThemeInfo {
1676
+ id: string;
1677
+ label: string;
1678
+ colors: Record<string, unknown>;
1679
+ }
1680
+ /** Built-in theme catalog with labels and style color tokens. */
1681
+ declare function listThemes(): ThemeInfo[];
1682
+ /** JSON Schema for the IR — feed this to a model before it writes IR. */
1683
+ declare function irJsonSchema(): Record<string, unknown>;
1684
+ /** JSON Schema for style-token overrides (IR theme.style, --style files, config "style"). */
1685
+ declare function styleJsonSchema(): Record<string, unknown>;
1686
+
1687
+ export { type Assets, BUILTIN_THEME_IDS, type BackgroundSpec, type BrandConfig, BrandConfigSchema, COMPONENT_TYPES, type Component, type Meta, PptfastError, type PptxIR, PptxIRSchema, type Slide, type StyleOverride, StyleOverrideSchema, type ThemeInfo, ThemeSchema, VERSION, type ValidateResult, type ValidationIssue, formatIssues, formatWarnings, irJsonSchema, listThemes, styleJsonSchema, validateIr };