@liustack/pptfast 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,1365 +1,29 @@
1
+ import { PptxIR, BackgroundSpec, BrandConfig, Slide, Component } from './validate.js';
2
+ export { Assets, BUILTIN_THEME_IDS, BrandConfigSchema, COMPONENT_TYPES, Meta, PptfastError, PptxIRSchema, StyleOverride, StyleOverrideSchema, ThemeInfo, ThemeSchema, VERSION, ValidateResult, ValidationIssue, formatIssues, irJsonSchema, listThemes, styleJsonSchema, validateIr } from './validate.js';
1
3
  import { z } from 'zod';
2
4
  export { P as PptfastPlatform, R as RasterizedImage, i as installPlatform } from './registry-V079Jkry.js';
3
5
 
4
- declare const VERSION = "0.4.0";
5
-
6
- /** Error class thrown by pptfast's public API surface (validation, rendering, export). */
7
- declare class PptfastError extends Error {
8
- }
9
-
10
- declare const BUILTIN_THEME_IDS: readonly ["consulting", "enterprise", "academic", "insight", "campaign", "bloom", "classroom", "ink", "tech", "runway", "journal", "luxe", "heritage"];
11
- declare const BackgroundSpecSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
12
- kind: z.ZodLiteral<"color">;
13
- value: z.ZodString;
14
- }, z.core.$strict>, z.ZodObject<{
15
- kind: z.ZodLiteral<"gradient">;
16
- from: z.ZodString;
17
- to: z.ZodString;
18
- direction: z.ZodOptional<z.ZodEnum<{
19
- tb: "tb";
20
- lr: "lr";
21
- diagonal: "diagonal";
22
- }>>;
23
- }, z.core.$strict>, z.ZodObject<{
24
- kind: z.ZodLiteral<"asset">;
25
- asset_id: z.ZodString;
26
- overlay: z.ZodOptional<z.ZodObject<{
27
- color: z.ZodString;
28
- opacity: z.ZodNumber;
29
- }, z.core.$strict>>;
30
- fit: z.ZodOptional<z.ZodEnum<{
31
- cover: "cover";
32
- contain: "contain";
33
- }>>;
34
- }, z.core.$strict>], "kind">;
35
- /**
36
- * Style-token override (theme.style): deep-partial palette/fonts/shape
37
- * merged over the built-in theme (see themes/index.ts resolveStyle). Scope is
38
- * deliberately palette-level (spec §11): no defaultBackgrounds or manifest
39
- * overrides. gapScale range mirrors the documented sane range in
40
- * themes/tokens.ts StyleShape.
41
- */
42
- declare const StyleOverrideSchema: z.ZodObject<{
43
- colors: z.ZodOptional<z.ZodObject<{
44
- bg: z.ZodOptional<z.ZodString>;
45
- surface: z.ZodOptional<z.ZodString>;
46
- panel: z.ZodOptional<z.ZodString>;
47
- primary: z.ZodOptional<z.ZodString>;
48
- accent: z.ZodOptional<z.ZodString>;
49
- text: z.ZodOptional<z.ZodString>;
50
- muted: z.ZodOptional<z.ZodString>;
51
- border: z.ZodOptional<z.ZodString>;
52
- chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
53
- accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
- cardStroke: z.ZodOptional<z.ZodString>;
55
- }, z.core.$strict>>;
56
- fonts: z.ZodOptional<z.ZodObject<{
57
- heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
- body: z.ZodOptional<z.ZodArray<z.ZodString>>;
59
- mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
60
- }, z.core.$strict>>;
61
- shape: z.ZodOptional<z.ZodObject<{
62
- radius: z.ZodOptional<z.ZodNumber>;
63
- gapScale: z.ZodOptional<z.ZodNumber>;
64
- }, z.core.$strict>>;
65
- }, z.core.$strict>;
66
- type StyleOverride = z.infer<typeof StyleOverrideSchema>;
67
- /**
68
- * Brand (logical slide-master) config: brand-chrome behavior owned by a theme.
69
- * W1 scope = exactly the two flags migrated from the old manifest.chrome.
70
- * Single source of truth — the TS type is inferred, never hand-written.
71
- */
72
- declare const BrandConfigSchema: z.ZodObject<{
73
- suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
74
- suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
75
- }, z.core.$strict>;
76
- type BrandConfig = z.infer<typeof BrandConfigSchema>;
77
- declare const ThemeSchema: z.ZodObject<{
78
- id: z.ZodDefault<z.ZodString>;
79
- style: z.ZodOptional<z.ZodObject<{
80
- colors: z.ZodOptional<z.ZodObject<{
81
- bg: z.ZodOptional<z.ZodString>;
82
- surface: z.ZodOptional<z.ZodString>;
83
- panel: z.ZodOptional<z.ZodString>;
84
- primary: z.ZodOptional<z.ZodString>;
85
- accent: z.ZodOptional<z.ZodString>;
86
- text: z.ZodOptional<z.ZodString>;
87
- muted: z.ZodOptional<z.ZodString>;
88
- border: z.ZodOptional<z.ZodString>;
89
- chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
90
- accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
91
- cardStroke: z.ZodOptional<z.ZodString>;
92
- }, z.core.$strict>>;
93
- fonts: z.ZodOptional<z.ZodObject<{
94
- heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
- body: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
- mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
97
- }, z.core.$strict>>;
98
- shape: z.ZodOptional<z.ZodObject<{
99
- radius: z.ZodOptional<z.ZodNumber>;
100
- gapScale: z.ZodOptional<z.ZodNumber>;
101
- }, z.core.$strict>>;
102
- }, z.core.$strict>>;
103
- brand: z.ZodOptional<z.ZodObject<{
104
- suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
105
- suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
106
- }, z.core.$strict>>;
107
- }, z.core.$strict>;
108
- declare const MetaSchema: z.ZodObject<{
109
- organization: z.ZodOptional<z.ZodString>;
110
- authors: z.ZodOptional<z.ZodArray<z.ZodObject<{
111
- name: z.ZodString;
112
- role: z.ZodOptional<z.ZodString>;
113
- org: z.ZodOptional<z.ZodString>;
114
- }, z.core.$strict>>>;
115
- date: z.ZodOptional<z.ZodString>;
116
- version: z.ZodOptional<z.ZodString>;
117
- confidentiality: z.ZodOptional<z.ZodEnum<{
118
- public: "public";
119
- internal: "internal";
120
- confidential: "confidential";
121
- restricted: "restricted";
122
- }>>;
123
- contact: z.ZodOptional<z.ZodObject<{
124
- name: z.ZodOptional<z.ZodString>;
125
- email: z.ZodOptional<z.ZodString>;
126
- phone: z.ZodOptional<z.ZodString>;
127
- website: z.ZodOptional<z.ZodString>;
128
- }, z.core.$strict>>;
129
- copyright: z.ZodOptional<z.ZodString>;
130
- animation: z.ZodOptional<z.ZodObject<{
131
- transition: z.ZodOptional<z.ZodEnum<{
132
- fade: "fade";
133
- push: "push";
134
- wipe: "wipe";
135
- none: "none";
136
- }>>;
137
- elements: z.ZodOptional<z.ZodEnum<{
138
- none: "none";
139
- auto: "auto";
140
- }>>;
141
- }, z.core.$strict>>;
142
- }, z.core.$strict>;
143
- declare const AssetsSchema: z.ZodObject<{
144
- images: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
145
- src: z.ZodString;
146
- alt: z.ZodOptional<z.ZodString>;
147
- error: z.ZodOptional<z.ZodString>;
148
- }, z.core.$strict>>>;
149
- }, z.core.$strict>;
150
- declare const ComponentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
151
- type: z.ZodLiteral<"bullets">;
152
- items: z.ZodArray<z.ZodString>;
153
- style: z.ZodOptional<z.ZodEnum<{
154
- default: "default";
155
- checklist: "checklist";
156
- numbered: "numbered";
157
- plain: "plain";
158
- divided: "divided";
159
- }>>;
160
- }, z.core.$strict>, z.ZodObject<{
161
- type: z.ZodLiteral<"paragraph">;
162
- text: z.ZodString;
163
- }, z.core.$strict>, z.ZodObject<{
164
- type: z.ZodLiteral<"quote">;
165
- text: z.ZodString;
166
- attribution: z.ZodOptional<z.ZodString>;
167
- }, z.core.$strict>, z.ZodObject<{
168
- type: z.ZodLiteral<"callout">;
169
- variant: z.ZodEnum<{
170
- info: "info";
171
- warn: "warn";
172
- tip: "tip";
173
- }>;
174
- text: z.ZodString;
175
- icon: z.ZodOptional<z.ZodEnum<{
176
- [x: string]: string;
177
- }>>;
178
- }, z.core.$strict>, z.ZodObject<{
179
- type: z.ZodLiteral<"code">;
180
- language: z.ZodString;
181
- code: z.ZodString;
182
- }, z.core.$strict>, z.ZodObject<{
183
- type: z.ZodLiteral<"kpi_cards">;
184
- items: z.ZodArray<z.ZodObject<{
185
- value: z.ZodString;
186
- unit: z.ZodOptional<z.ZodString>;
187
- label: z.ZodString;
188
- delta: z.ZodOptional<z.ZodEnum<{
189
- up: "up";
190
- down: "down";
191
- flat: "flat";
192
- }>>;
193
- icon: z.ZodOptional<z.ZodEnum<{
194
- [x: string]: string;
195
- }>>;
196
- source: z.ZodOptional<z.ZodString>;
197
- }, z.core.$strict>>;
198
- }, z.core.$strict>, z.ZodObject<{
199
- type: z.ZodLiteral<"chart">;
200
- chart_type: z.ZodEnum<{
201
- line: "line";
202
- dumbbell: "dumbbell";
203
- funnel: "funnel";
204
- bar: "bar";
205
- pie: "pie";
206
- }>;
207
- direction: z.ZodOptional<z.ZodEnum<{
208
- horizontal: "horizontal";
209
- vertical: "vertical";
210
- }>>;
211
- style: z.ZodOptional<z.ZodEnum<{
212
- donut: "donut";
213
- }>>;
214
- axes: z.ZodOptional<z.ZodObject<{
215
- x_title: z.ZodOptional<z.ZodString>;
216
- y_title: z.ZodOptional<z.ZodString>;
217
- show_grid: z.ZodOptional<z.ZodBoolean>;
218
- }, z.core.$strict>>;
219
- series: z.ZodArray<z.ZodObject<{
220
- name: z.ZodString;
221
- data: z.ZodArray<z.ZodObject<{
222
- x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
223
- y: z.ZodNumber;
224
- }, z.core.$strict>>;
225
- }, z.core.$strict>>;
226
- }, z.core.$strict>, z.ZodObject<{
227
- type: z.ZodLiteral<"flowchart">;
228
- nodes: z.ZodArray<z.ZodObject<{
229
- id: z.ZodString;
230
- label: z.ZodString;
231
- kind: z.ZodOptional<z.ZodEnum<{
232
- rect: "rect";
233
- diamond: "diamond";
234
- round: "round";
235
- }>>;
236
- }, z.core.$strict>>;
237
- edges: z.ZodArray<z.ZodObject<{
238
- from: z.ZodString;
239
- to: z.ZodString;
240
- label: z.ZodOptional<z.ZodString>;
241
- }, z.core.$strict>>;
242
- direction: z.ZodOptional<z.ZodEnum<{
243
- TB: "TB";
244
- TD: "TD";
245
- BT: "BT";
246
- LR: "LR";
247
- RL: "RL";
248
- }>>;
249
- }, z.core.$strict>, z.ZodObject<{
250
- type: z.ZodLiteral<"architecture">;
251
- layers: z.ZodArray<z.ZodObject<{
252
- title: z.ZodString;
253
- items: z.ZodArray<z.ZodString>;
254
- }, z.core.$strict>>;
255
- }, z.core.$strict>, z.ZodObject<{
256
- type: z.ZodLiteral<"timeline">;
257
- layout: z.ZodOptional<z.ZodEnum<{
258
- horizontal: "horizontal";
259
- vertical: "vertical";
260
- }>>;
261
- milestones: z.ZodArray<z.ZodObject<{
262
- date: z.ZodString;
263
- title: z.ZodString;
264
- desc: z.ZodOptional<z.ZodString>;
265
- highlight: z.ZodOptional<z.ZodBoolean>;
266
- }, z.core.$strict>>;
267
- }, z.core.$strict>, z.ZodObject<{
268
- type: z.ZodLiteral<"comparison">;
269
- columns: z.ZodArray<z.ZodString>;
270
- rows: z.ZodArray<z.ZodObject<{
271
- label: z.ZodString;
272
- cells: z.ZodArray<z.ZodString>;
273
- }, z.core.$strict>>;
274
- }, z.core.$strict>, z.ZodObject<{
275
- type: z.ZodLiteral<"icon_cards">;
276
- items: z.ZodArray<z.ZodObject<{
277
- icon: z.ZodEnum<{
278
- [x: string]: string;
279
- }>;
280
- title: z.ZodString;
281
- text: z.ZodString;
282
- }, z.core.$strict>>;
283
- }, z.core.$strict>, z.ZodObject<{
284
- type: z.ZodLiteral<"row_cards">;
285
- items: z.ZodArray<z.ZodObject<{
286
- icon: z.ZodOptional<z.ZodEnum<{
287
- [x: string]: string;
288
- }>>;
289
- title: z.ZodString;
290
- text: z.ZodOptional<z.ZodString>;
291
- sub: z.ZodOptional<z.ZodString>;
292
- highlight: z.ZodOptional<z.ZodBoolean>;
293
- }, z.core.$strict>>;
294
- }, z.core.$strict>, z.ZodObject<{
295
- type: z.ZodLiteral<"steps">;
296
- items: z.ZodArray<z.ZodObject<{
297
- title: z.ZodString;
298
- text: z.ZodString;
299
- }, z.core.$strict>>;
300
- }, z.core.$strict>, z.ZodObject<{
301
- type: z.ZodLiteral<"rings">;
302
- items: z.ZodArray<z.ZodObject<{
303
- label: z.ZodString;
304
- desc: z.ZodOptional<z.ZodString>;
305
- }, z.core.$strict>>;
306
- }, z.core.$strict>, z.ZodObject<{
307
- type: z.ZodLiteral<"numbered_cards">;
308
- items: z.ZodArray<z.ZodObject<{
309
- title: z.ZodString;
310
- text: z.ZodOptional<z.ZodString>;
311
- sub: z.ZodOptional<z.ZodString>;
312
- }, z.core.$strict>>;
313
- }, z.core.$strict>, z.ZodObject<{
314
- type: z.ZodLiteral<"roadmap">;
315
- items: z.ZodArray<z.ZodObject<{
316
- title: z.ZodString;
317
- period: z.ZodOptional<z.ZodString>;
318
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
319
- label: z.ZodString;
320
- value: z.ZodString;
321
- }, z.core.$strict>>>;
322
- }, z.core.$strict>>;
323
- }, z.core.$strict>, z.ZodObject<{
324
- type: z.ZodLiteral<"matrix">;
325
- x_title: z.ZodOptional<z.ZodString>;
326
- y_title: z.ZodOptional<z.ZodString>;
327
- cols: z.ZodNumber;
328
- items: z.ZodArray<z.ZodObject<{
329
- title: z.ZodString;
330
- tag: z.ZodOptional<z.ZodString>;
331
- tone: z.ZodOptional<z.ZodEnum<{
332
- info: "info";
333
- accent: "accent";
334
- neutral: "neutral";
335
- }>>;
336
- }, z.core.$strict>>;
337
- }, z.core.$strict>, z.ZodObject<{
338
- type: z.ZodLiteral<"insight_panel">;
339
- title: z.ZodString;
340
- rows: z.ZodArray<z.ZodObject<{
341
- label: z.ZodString;
342
- text: z.ZodString;
343
- }, z.core.$strict>>;
344
- footnote: z.ZodOptional<z.ZodString>;
345
- }, z.core.$strict>, z.ZodObject<{
346
- type: z.ZodLiteral<"verdict_banner">;
347
- text: z.ZodString;
348
- tone: z.ZodEnum<{
349
- neutral: "neutral";
350
- positive: "positive";
351
- warning: "warning";
352
- }>;
353
- icon: z.ZodOptional<z.ZodEnum<{
354
- [x: string]: string;
355
- }>>;
356
- }, z.core.$strict>, z.ZodObject<{
357
- type: z.ZodLiteral<"citation">;
358
- sources: z.ZodArray<z.ZodObject<{
359
- label: z.ZodString;
360
- url: z.ZodOptional<z.ZodString>;
361
- ref: z.ZodOptional<z.ZodString>;
362
- }, z.core.$strict>>;
363
- }, z.core.$strict>, z.ZodObject<{
364
- type: z.ZodLiteral<"image">;
365
- asset_id: z.ZodString;
366
- caption: z.ZodOptional<z.ZodString>;
367
- fit: z.ZodDefault<z.ZodEnum<{
368
- cover: "cover";
369
- contain: "contain";
370
- }>>;
371
- }, z.core.$strict>, z.ZodObject<{
372
- type: z.ZodLiteral<"image_grid">;
373
- items: z.ZodArray<z.ZodObject<{
374
- asset_id: z.ZodString;
375
- caption: z.ZodOptional<z.ZodString>;
376
- }, z.core.$strict>>;
377
- emphasis: z.ZodOptional<z.ZodEnum<{
378
- none: "none";
379
- first: "first";
380
- }>>;
381
- }, z.core.$strict>, z.ZodObject<{
382
- type: z.ZodLiteral<"image_compare">;
383
- left: z.ZodObject<{
384
- asset_id: z.ZodString;
385
- label: z.ZodString;
386
- }, z.core.$strict>;
387
- right: z.ZodObject<{
388
- asset_id: z.ZodString;
389
- label: z.ZodString;
390
- }, z.core.$strict>;
391
- style: z.ZodOptional<z.ZodEnum<{
392
- vs: "vs";
393
- before_after: "before_after";
394
- }>>;
395
- }, z.core.$strict>, z.ZodObject<{
396
- type: z.ZodLiteral<"swot">;
397
- strengths: z.ZodArray<z.ZodString>;
398
- weaknesses: z.ZodArray<z.ZodString>;
399
- opportunities: z.ZodArray<z.ZodString>;
400
- threats: z.ZodArray<z.ZodString>;
401
- labels: z.ZodOptional<z.ZodObject<{
402
- strengths: z.ZodOptional<z.ZodString>;
403
- weaknesses: z.ZodOptional<z.ZodString>;
404
- opportunities: z.ZodOptional<z.ZodString>;
405
- threats: z.ZodOptional<z.ZodString>;
406
- }, z.core.$strict>>;
407
- }, z.core.$strict>, z.ZodObject<{
408
- type: z.ZodLiteral<"bmc">;
409
- key_partners: z.ZodArray<z.ZodString>;
410
- key_activities: z.ZodArray<z.ZodString>;
411
- key_resources: z.ZodArray<z.ZodString>;
412
- value_propositions: z.ZodArray<z.ZodString>;
413
- customer_relationships: z.ZodArray<z.ZodString>;
414
- channels: z.ZodArray<z.ZodString>;
415
- customer_segments: z.ZodArray<z.ZodString>;
416
- cost_structure: z.ZodArray<z.ZodString>;
417
- revenue_streams: z.ZodArray<z.ZodString>;
418
- }, z.core.$strict>, z.ZodObject<{
419
- type: z.ZodLiteral<"waterfall">;
420
- items: z.ZodArray<z.ZodObject<{
421
- label: z.ZodString;
422
- value: z.ZodNumber;
423
- kind: z.ZodOptional<z.ZodEnum<{
424
- delta: "delta";
425
- total: "total";
426
- }>>;
427
- }, z.core.$strict>>;
428
- unit: z.ZodOptional<z.ZodString>;
429
- }, z.core.$strict>, z.ZodObject<{
430
- type: z.ZodLiteral<"gantt">;
431
- items: z.ZodArray<z.ZodObject<{
432
- label: z.ZodString;
433
- start: z.ZodNumber;
434
- end: z.ZodNumber;
435
- }, z.core.$strict>>;
436
- axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
437
- }, z.core.$strict>], "type">;
438
- /**
439
- * All 28 component `type` discriminant values, derived from `ComponentSchema`
440
- * itself (never hand-copied) so this list can't drift from the union above.
441
- * Typed as plain `readonly string[]` rather than `Component["type"][]` —
442
- * every consumer of this list (W5's plan `focus` vocabulary gate,
443
- * `src/plan/index.ts`) tests membership of an arbitrary author-supplied
444
- * string, and TS's `Array.includes` is invariant in its element type, so a
445
- * narrower literal-union type would reject that call at the caller.
446
- */
447
- declare const COMPONENT_TYPES: readonly string[];
448
- declare const SlideSchema: z.ZodObject<{
449
- type: z.ZodDefault<z.ZodEnum<{
450
- cover: "cover";
451
- chapter: "chapter";
452
- content: "content";
453
- ending: "ending";
454
- }>>;
455
- id: z.ZodOptional<z.ZodString>;
456
- placeholder: z.ZodOptional<z.ZodLiteral<true>>;
457
- layout: z.ZodOptional<z.ZodString>;
458
- arrangement: z.ZodOptional<z.ZodEnum<{
459
- code: "code";
460
- quote: "quote";
461
- single: "single";
462
- two_column: "two_column";
463
- kpi_focus: "kpi_focus";
464
- image_focus: "image_focus";
465
- big_number: "big_number";
466
- assertion_evidence: "assertion_evidence";
467
- aside: "aside";
468
- }>>;
469
- heading: z.ZodOptional<z.ZodString>;
470
- subheading: z.ZodOptional<z.ZodString>;
471
- components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
472
- type: z.ZodLiteral<"bullets">;
473
- items: z.ZodArray<z.ZodString>;
474
- style: z.ZodOptional<z.ZodEnum<{
475
- default: "default";
476
- checklist: "checklist";
477
- numbered: "numbered";
478
- plain: "plain";
479
- divided: "divided";
480
- }>>;
481
- }, z.core.$strict>, z.ZodObject<{
482
- type: z.ZodLiteral<"paragraph">;
483
- text: z.ZodString;
484
- }, z.core.$strict>, z.ZodObject<{
485
- type: z.ZodLiteral<"quote">;
486
- text: z.ZodString;
487
- attribution: z.ZodOptional<z.ZodString>;
488
- }, z.core.$strict>, z.ZodObject<{
489
- type: z.ZodLiteral<"callout">;
490
- variant: z.ZodEnum<{
491
- info: "info";
492
- warn: "warn";
493
- tip: "tip";
494
- }>;
495
- text: z.ZodString;
496
- icon: z.ZodOptional<z.ZodEnum<{
497
- [x: string]: string;
498
- }>>;
499
- }, z.core.$strict>, z.ZodObject<{
500
- type: z.ZodLiteral<"code">;
501
- language: z.ZodString;
502
- code: z.ZodString;
503
- }, z.core.$strict>, z.ZodObject<{
504
- type: z.ZodLiteral<"kpi_cards">;
505
- items: z.ZodArray<z.ZodObject<{
506
- value: z.ZodString;
507
- unit: z.ZodOptional<z.ZodString>;
508
- label: z.ZodString;
509
- delta: z.ZodOptional<z.ZodEnum<{
510
- up: "up";
511
- down: "down";
512
- flat: "flat";
513
- }>>;
514
- icon: z.ZodOptional<z.ZodEnum<{
515
- [x: string]: string;
516
- }>>;
517
- source: z.ZodOptional<z.ZodString>;
518
- }, z.core.$strict>>;
519
- }, z.core.$strict>, z.ZodObject<{
520
- type: z.ZodLiteral<"chart">;
521
- chart_type: z.ZodEnum<{
522
- line: "line";
523
- dumbbell: "dumbbell";
524
- funnel: "funnel";
525
- bar: "bar";
526
- pie: "pie";
527
- }>;
528
- direction: z.ZodOptional<z.ZodEnum<{
529
- horizontal: "horizontal";
530
- vertical: "vertical";
531
- }>>;
532
- style: z.ZodOptional<z.ZodEnum<{
533
- donut: "donut";
534
- }>>;
535
- axes: z.ZodOptional<z.ZodObject<{
536
- x_title: z.ZodOptional<z.ZodString>;
537
- y_title: z.ZodOptional<z.ZodString>;
538
- show_grid: z.ZodOptional<z.ZodBoolean>;
539
- }, z.core.$strict>>;
540
- series: z.ZodArray<z.ZodObject<{
541
- name: z.ZodString;
542
- data: z.ZodArray<z.ZodObject<{
543
- x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
544
- y: z.ZodNumber;
545
- }, z.core.$strict>>;
546
- }, z.core.$strict>>;
547
- }, z.core.$strict>, z.ZodObject<{
548
- type: z.ZodLiteral<"flowchart">;
549
- nodes: z.ZodArray<z.ZodObject<{
550
- id: z.ZodString;
551
- label: z.ZodString;
552
- kind: z.ZodOptional<z.ZodEnum<{
553
- rect: "rect";
554
- diamond: "diamond";
555
- round: "round";
556
- }>>;
557
- }, z.core.$strict>>;
558
- edges: z.ZodArray<z.ZodObject<{
559
- from: z.ZodString;
560
- to: z.ZodString;
561
- label: z.ZodOptional<z.ZodString>;
562
- }, z.core.$strict>>;
563
- direction: z.ZodOptional<z.ZodEnum<{
564
- TB: "TB";
565
- TD: "TD";
566
- BT: "BT";
567
- LR: "LR";
568
- RL: "RL";
569
- }>>;
570
- }, z.core.$strict>, z.ZodObject<{
571
- type: z.ZodLiteral<"architecture">;
572
- layers: z.ZodArray<z.ZodObject<{
573
- title: z.ZodString;
574
- items: z.ZodArray<z.ZodString>;
575
- }, z.core.$strict>>;
576
- }, z.core.$strict>, z.ZodObject<{
577
- type: z.ZodLiteral<"timeline">;
578
- layout: z.ZodOptional<z.ZodEnum<{
579
- horizontal: "horizontal";
580
- vertical: "vertical";
581
- }>>;
582
- milestones: z.ZodArray<z.ZodObject<{
583
- date: z.ZodString;
584
- title: z.ZodString;
585
- desc: z.ZodOptional<z.ZodString>;
586
- highlight: z.ZodOptional<z.ZodBoolean>;
587
- }, z.core.$strict>>;
588
- }, z.core.$strict>, z.ZodObject<{
589
- type: z.ZodLiteral<"comparison">;
590
- columns: z.ZodArray<z.ZodString>;
591
- rows: z.ZodArray<z.ZodObject<{
592
- label: z.ZodString;
593
- cells: z.ZodArray<z.ZodString>;
594
- }, z.core.$strict>>;
595
- }, z.core.$strict>, z.ZodObject<{
596
- type: z.ZodLiteral<"icon_cards">;
597
- items: z.ZodArray<z.ZodObject<{
598
- icon: z.ZodEnum<{
599
- [x: string]: string;
600
- }>;
601
- title: z.ZodString;
602
- text: z.ZodString;
603
- }, z.core.$strict>>;
604
- }, z.core.$strict>, z.ZodObject<{
605
- type: z.ZodLiteral<"row_cards">;
606
- items: z.ZodArray<z.ZodObject<{
607
- icon: z.ZodOptional<z.ZodEnum<{
608
- [x: string]: string;
609
- }>>;
610
- title: z.ZodString;
611
- text: z.ZodOptional<z.ZodString>;
612
- sub: z.ZodOptional<z.ZodString>;
613
- highlight: z.ZodOptional<z.ZodBoolean>;
614
- }, z.core.$strict>>;
615
- }, z.core.$strict>, z.ZodObject<{
616
- type: z.ZodLiteral<"steps">;
617
- items: z.ZodArray<z.ZodObject<{
618
- title: z.ZodString;
619
- text: z.ZodString;
620
- }, z.core.$strict>>;
621
- }, z.core.$strict>, z.ZodObject<{
622
- type: z.ZodLiteral<"rings">;
623
- items: z.ZodArray<z.ZodObject<{
624
- label: z.ZodString;
625
- desc: z.ZodOptional<z.ZodString>;
626
- }, z.core.$strict>>;
627
- }, z.core.$strict>, z.ZodObject<{
628
- type: z.ZodLiteral<"numbered_cards">;
629
- items: z.ZodArray<z.ZodObject<{
630
- title: z.ZodString;
631
- text: z.ZodOptional<z.ZodString>;
632
- sub: z.ZodOptional<z.ZodString>;
633
- }, z.core.$strict>>;
634
- }, z.core.$strict>, z.ZodObject<{
635
- type: z.ZodLiteral<"roadmap">;
636
- items: z.ZodArray<z.ZodObject<{
637
- title: z.ZodString;
638
- period: z.ZodOptional<z.ZodString>;
639
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
640
- label: z.ZodString;
641
- value: z.ZodString;
642
- }, z.core.$strict>>>;
643
- }, z.core.$strict>>;
644
- }, z.core.$strict>, z.ZodObject<{
645
- type: z.ZodLiteral<"matrix">;
646
- x_title: z.ZodOptional<z.ZodString>;
647
- y_title: z.ZodOptional<z.ZodString>;
648
- cols: z.ZodNumber;
649
- items: z.ZodArray<z.ZodObject<{
650
- title: z.ZodString;
651
- tag: z.ZodOptional<z.ZodString>;
652
- tone: z.ZodOptional<z.ZodEnum<{
653
- info: "info";
654
- accent: "accent";
655
- neutral: "neutral";
656
- }>>;
657
- }, z.core.$strict>>;
658
- }, z.core.$strict>, z.ZodObject<{
659
- type: z.ZodLiteral<"insight_panel">;
660
- title: z.ZodString;
661
- rows: z.ZodArray<z.ZodObject<{
662
- label: z.ZodString;
663
- text: z.ZodString;
664
- }, z.core.$strict>>;
665
- footnote: z.ZodOptional<z.ZodString>;
666
- }, z.core.$strict>, z.ZodObject<{
667
- type: z.ZodLiteral<"verdict_banner">;
668
- text: z.ZodString;
669
- tone: z.ZodEnum<{
670
- neutral: "neutral";
671
- positive: "positive";
672
- warning: "warning";
673
- }>;
674
- icon: z.ZodOptional<z.ZodEnum<{
675
- [x: string]: string;
676
- }>>;
677
- }, z.core.$strict>, z.ZodObject<{
678
- type: z.ZodLiteral<"citation">;
679
- sources: z.ZodArray<z.ZodObject<{
680
- label: z.ZodString;
681
- url: z.ZodOptional<z.ZodString>;
682
- ref: z.ZodOptional<z.ZodString>;
683
- }, z.core.$strict>>;
684
- }, z.core.$strict>, z.ZodObject<{
685
- type: z.ZodLiteral<"image">;
686
- asset_id: z.ZodString;
687
- caption: z.ZodOptional<z.ZodString>;
688
- fit: z.ZodDefault<z.ZodEnum<{
689
- cover: "cover";
690
- contain: "contain";
691
- }>>;
692
- }, z.core.$strict>, z.ZodObject<{
693
- type: z.ZodLiteral<"image_grid">;
694
- items: z.ZodArray<z.ZodObject<{
695
- asset_id: z.ZodString;
696
- caption: z.ZodOptional<z.ZodString>;
697
- }, z.core.$strict>>;
698
- emphasis: z.ZodOptional<z.ZodEnum<{
699
- none: "none";
700
- first: "first";
701
- }>>;
702
- }, z.core.$strict>, z.ZodObject<{
703
- type: z.ZodLiteral<"image_compare">;
704
- left: z.ZodObject<{
705
- asset_id: z.ZodString;
706
- label: z.ZodString;
707
- }, z.core.$strict>;
708
- right: z.ZodObject<{
709
- asset_id: z.ZodString;
710
- label: z.ZodString;
711
- }, z.core.$strict>;
712
- style: z.ZodOptional<z.ZodEnum<{
713
- vs: "vs";
714
- before_after: "before_after";
715
- }>>;
716
- }, z.core.$strict>, z.ZodObject<{
717
- type: z.ZodLiteral<"swot">;
718
- strengths: z.ZodArray<z.ZodString>;
719
- weaknesses: z.ZodArray<z.ZodString>;
720
- opportunities: z.ZodArray<z.ZodString>;
721
- threats: z.ZodArray<z.ZodString>;
722
- labels: z.ZodOptional<z.ZodObject<{
723
- strengths: z.ZodOptional<z.ZodString>;
724
- weaknesses: z.ZodOptional<z.ZodString>;
725
- opportunities: z.ZodOptional<z.ZodString>;
726
- threats: z.ZodOptional<z.ZodString>;
727
- }, z.core.$strict>>;
728
- }, z.core.$strict>, z.ZodObject<{
729
- type: z.ZodLiteral<"bmc">;
730
- key_partners: z.ZodArray<z.ZodString>;
731
- key_activities: z.ZodArray<z.ZodString>;
732
- key_resources: z.ZodArray<z.ZodString>;
733
- value_propositions: z.ZodArray<z.ZodString>;
734
- customer_relationships: z.ZodArray<z.ZodString>;
735
- channels: z.ZodArray<z.ZodString>;
736
- customer_segments: z.ZodArray<z.ZodString>;
737
- cost_structure: z.ZodArray<z.ZodString>;
738
- revenue_streams: z.ZodArray<z.ZodString>;
739
- }, z.core.$strict>, z.ZodObject<{
740
- type: z.ZodLiteral<"waterfall">;
741
- items: z.ZodArray<z.ZodObject<{
742
- label: z.ZodString;
743
- value: z.ZodNumber;
744
- kind: z.ZodOptional<z.ZodEnum<{
745
- delta: "delta";
746
- total: "total";
747
- }>>;
748
- }, z.core.$strict>>;
749
- unit: z.ZodOptional<z.ZodString>;
750
- }, z.core.$strict>, z.ZodObject<{
751
- type: z.ZodLiteral<"gantt">;
752
- items: z.ZodArray<z.ZodObject<{
753
- label: z.ZodString;
754
- start: z.ZodNumber;
755
- end: z.ZodNumber;
756
- }, z.core.$strict>>;
757
- axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
758
- }, z.core.$strict>], "type">>>;
759
- background: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
760
- kind: z.ZodLiteral<"color">;
761
- value: z.ZodString;
762
- }, z.core.$strict>, z.ZodObject<{
763
- kind: z.ZodLiteral<"gradient">;
764
- from: z.ZodString;
765
- to: z.ZodString;
766
- direction: z.ZodOptional<z.ZodEnum<{
767
- tb: "tb";
768
- lr: "lr";
769
- diagonal: "diagonal";
770
- }>>;
771
- }, z.core.$strict>, z.ZodObject<{
772
- kind: z.ZodLiteral<"asset">;
773
- asset_id: z.ZodString;
774
- overlay: z.ZodOptional<z.ZodObject<{
775
- color: z.ZodString;
776
- opacity: z.ZodNumber;
777
- }, z.core.$strict>>;
778
- fit: z.ZodOptional<z.ZodEnum<{
779
- cover: "cover";
780
- contain: "contain";
781
- }>>;
782
- }, z.core.$strict>], "kind">>;
783
- decor: z.ZodOptional<z.ZodObject<{
784
- kind: z.ZodEnum<{
785
- big_number: "big_number";
786
- corner_tag: "corner_tag";
787
- rule_line: "rule_line";
788
- quote_marks: "quote_marks";
789
- geo_dots: "geo_dots";
790
- }>;
791
- intensity: z.ZodOptional<z.ZodEnum<{
792
- subtle: "subtle";
793
- normal: "normal";
794
- }>>;
795
- text: z.ZodOptional<z.ZodString>;
796
- }, z.core.$strict>>;
797
- image_side: z.ZodOptional<z.ZodEnum<{
798
- left: "left";
799
- right: "right";
800
- }>>;
801
- footnote: z.ZodOptional<z.ZodString>;
802
- notes: z.ZodOptional<z.ZodString>;
803
- }, z.core.$strict>;
804
- declare const PptxIRSchema: z.ZodObject<{
805
- version: z.ZodDefault<z.ZodLiteral<"4">>;
806
- filename: z.ZodDefault<z.ZodString>;
807
- narrative: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>>;
808
- theme: z.ZodDefault<z.ZodObject<{
809
- id: z.ZodDefault<z.ZodString>;
810
- style: z.ZodOptional<z.ZodObject<{
811
- colors: z.ZodOptional<z.ZodObject<{
812
- bg: z.ZodOptional<z.ZodString>;
813
- surface: z.ZodOptional<z.ZodString>;
814
- panel: z.ZodOptional<z.ZodString>;
815
- primary: z.ZodOptional<z.ZodString>;
816
- accent: z.ZodOptional<z.ZodString>;
817
- text: z.ZodOptional<z.ZodString>;
818
- muted: z.ZodOptional<z.ZodString>;
819
- border: z.ZodOptional<z.ZodString>;
820
- chartPalette: z.ZodOptional<z.ZodArray<z.ZodString>>;
821
- accentPool: z.ZodOptional<z.ZodArray<z.ZodString>>;
822
- cardStroke: z.ZodOptional<z.ZodString>;
823
- }, z.core.$strict>>;
824
- fonts: z.ZodOptional<z.ZodObject<{
825
- heading: z.ZodOptional<z.ZodArray<z.ZodString>>;
826
- body: z.ZodOptional<z.ZodArray<z.ZodString>>;
827
- mono: z.ZodOptional<z.ZodArray<z.ZodString>>;
828
- }, z.core.$strict>>;
829
- shape: z.ZodOptional<z.ZodObject<{
830
- radius: z.ZodOptional<z.ZodNumber>;
831
- gapScale: z.ZodOptional<z.ZodNumber>;
832
- }, z.core.$strict>>;
833
- }, z.core.$strict>>;
834
- brand: z.ZodOptional<z.ZodObject<{
835
- suppressFooterOnCardContent: z.ZodOptional<z.ZodBoolean>;
836
- suppressFooterRule: z.ZodOptional<z.ZodBoolean>;
837
- }, z.core.$strict>>;
838
- }, z.core.$strict>>;
839
- meta: z.ZodDefault<z.ZodObject<{
840
- organization: z.ZodOptional<z.ZodString>;
841
- authors: z.ZodOptional<z.ZodArray<z.ZodObject<{
842
- name: z.ZodString;
843
- role: z.ZodOptional<z.ZodString>;
844
- org: z.ZodOptional<z.ZodString>;
845
- }, z.core.$strict>>>;
846
- date: z.ZodOptional<z.ZodString>;
847
- version: z.ZodOptional<z.ZodString>;
848
- confidentiality: z.ZodOptional<z.ZodEnum<{
849
- public: "public";
850
- internal: "internal";
851
- confidential: "confidential";
852
- restricted: "restricted";
853
- }>>;
854
- contact: z.ZodOptional<z.ZodObject<{
855
- name: z.ZodOptional<z.ZodString>;
856
- email: z.ZodOptional<z.ZodString>;
857
- phone: z.ZodOptional<z.ZodString>;
858
- website: z.ZodOptional<z.ZodString>;
859
- }, z.core.$strict>>;
860
- copyright: z.ZodOptional<z.ZodString>;
861
- animation: z.ZodOptional<z.ZodObject<{
862
- transition: z.ZodOptional<z.ZodEnum<{
863
- fade: "fade";
864
- push: "push";
865
- wipe: "wipe";
866
- none: "none";
867
- }>>;
868
- elements: z.ZodOptional<z.ZodEnum<{
869
- none: "none";
870
- auto: "auto";
871
- }>>;
872
- }, z.core.$strict>>;
873
- }, z.core.$strict>>;
874
- assets: z.ZodDefault<z.ZodObject<{
875
- images: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
876
- src: z.ZodString;
877
- alt: z.ZodOptional<z.ZodString>;
878
- error: z.ZodOptional<z.ZodString>;
879
- }, z.core.$strict>>>;
880
- }, z.core.$strict>>;
881
- brand: z.ZodOptional<z.ZodObject<{
882
- logo_asset_id: z.ZodOptional<z.ZodString>;
883
- position: z.ZodOptional<z.ZodEnum<{
884
- tl: "tl";
885
- tr: "tr";
886
- bl: "bl";
887
- br: "br";
888
- }>>;
889
- }, z.core.$strict>>;
890
- seed: z.ZodOptional<z.ZodNumber>;
891
- slides: z.ZodArray<z.ZodObject<{
892
- type: z.ZodDefault<z.ZodEnum<{
893
- cover: "cover";
894
- chapter: "chapter";
895
- content: "content";
896
- ending: "ending";
897
- }>>;
898
- id: z.ZodOptional<z.ZodString>;
899
- placeholder: z.ZodOptional<z.ZodLiteral<true>>;
900
- layout: z.ZodOptional<z.ZodString>;
901
- arrangement: z.ZodOptional<z.ZodEnum<{
902
- code: "code";
903
- quote: "quote";
904
- single: "single";
905
- two_column: "two_column";
906
- kpi_focus: "kpi_focus";
907
- image_focus: "image_focus";
908
- big_number: "big_number";
909
- assertion_evidence: "assertion_evidence";
910
- aside: "aside";
911
- }>>;
912
- heading: z.ZodOptional<z.ZodString>;
913
- subheading: z.ZodOptional<z.ZodString>;
914
- components: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
915
- type: z.ZodLiteral<"bullets">;
916
- items: z.ZodArray<z.ZodString>;
917
- style: z.ZodOptional<z.ZodEnum<{
918
- default: "default";
919
- checklist: "checklist";
920
- numbered: "numbered";
921
- plain: "plain";
922
- divided: "divided";
923
- }>>;
924
- }, z.core.$strict>, z.ZodObject<{
925
- type: z.ZodLiteral<"paragraph">;
926
- text: z.ZodString;
927
- }, z.core.$strict>, z.ZodObject<{
928
- type: z.ZodLiteral<"quote">;
929
- text: z.ZodString;
930
- attribution: z.ZodOptional<z.ZodString>;
931
- }, z.core.$strict>, z.ZodObject<{
932
- type: z.ZodLiteral<"callout">;
933
- variant: z.ZodEnum<{
934
- info: "info";
935
- warn: "warn";
936
- tip: "tip";
937
- }>;
938
- text: z.ZodString;
939
- icon: z.ZodOptional<z.ZodEnum<{
940
- [x: string]: string;
941
- }>>;
942
- }, z.core.$strict>, z.ZodObject<{
943
- type: z.ZodLiteral<"code">;
944
- language: z.ZodString;
945
- code: z.ZodString;
946
- }, z.core.$strict>, z.ZodObject<{
947
- type: z.ZodLiteral<"kpi_cards">;
948
- items: z.ZodArray<z.ZodObject<{
949
- value: z.ZodString;
950
- unit: z.ZodOptional<z.ZodString>;
951
- label: z.ZodString;
952
- delta: z.ZodOptional<z.ZodEnum<{
953
- up: "up";
954
- down: "down";
955
- flat: "flat";
956
- }>>;
957
- icon: z.ZodOptional<z.ZodEnum<{
958
- [x: string]: string;
959
- }>>;
960
- source: z.ZodOptional<z.ZodString>;
961
- }, z.core.$strict>>;
962
- }, z.core.$strict>, z.ZodObject<{
963
- type: z.ZodLiteral<"chart">;
964
- chart_type: z.ZodEnum<{
965
- line: "line";
966
- dumbbell: "dumbbell";
967
- funnel: "funnel";
968
- bar: "bar";
969
- pie: "pie";
970
- }>;
971
- direction: z.ZodOptional<z.ZodEnum<{
972
- horizontal: "horizontal";
973
- vertical: "vertical";
974
- }>>;
975
- style: z.ZodOptional<z.ZodEnum<{
976
- donut: "donut";
977
- }>>;
978
- axes: z.ZodOptional<z.ZodObject<{
979
- x_title: z.ZodOptional<z.ZodString>;
980
- y_title: z.ZodOptional<z.ZodString>;
981
- show_grid: z.ZodOptional<z.ZodBoolean>;
982
- }, z.core.$strict>>;
983
- series: z.ZodArray<z.ZodObject<{
984
- name: z.ZodString;
985
- data: z.ZodArray<z.ZodObject<{
986
- x: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
987
- y: z.ZodNumber;
988
- }, z.core.$strict>>;
989
- }, z.core.$strict>>;
990
- }, z.core.$strict>, z.ZodObject<{
991
- type: z.ZodLiteral<"flowchart">;
992
- nodes: z.ZodArray<z.ZodObject<{
993
- id: z.ZodString;
994
- label: z.ZodString;
995
- kind: z.ZodOptional<z.ZodEnum<{
996
- rect: "rect";
997
- diamond: "diamond";
998
- round: "round";
999
- }>>;
1000
- }, z.core.$strict>>;
1001
- edges: z.ZodArray<z.ZodObject<{
1002
- from: z.ZodString;
1003
- to: z.ZodString;
1004
- label: z.ZodOptional<z.ZodString>;
1005
- }, z.core.$strict>>;
1006
- direction: z.ZodOptional<z.ZodEnum<{
1007
- TB: "TB";
1008
- TD: "TD";
1009
- BT: "BT";
1010
- LR: "LR";
1011
- RL: "RL";
1012
- }>>;
1013
- }, z.core.$strict>, z.ZodObject<{
1014
- type: z.ZodLiteral<"architecture">;
1015
- layers: z.ZodArray<z.ZodObject<{
1016
- title: z.ZodString;
1017
- items: z.ZodArray<z.ZodString>;
1018
- }, z.core.$strict>>;
1019
- }, z.core.$strict>, z.ZodObject<{
1020
- type: z.ZodLiteral<"timeline">;
1021
- layout: z.ZodOptional<z.ZodEnum<{
1022
- horizontal: "horizontal";
1023
- vertical: "vertical";
1024
- }>>;
1025
- milestones: z.ZodArray<z.ZodObject<{
1026
- date: z.ZodString;
1027
- title: z.ZodString;
1028
- desc: z.ZodOptional<z.ZodString>;
1029
- highlight: z.ZodOptional<z.ZodBoolean>;
1030
- }, z.core.$strict>>;
1031
- }, z.core.$strict>, z.ZodObject<{
1032
- type: z.ZodLiteral<"comparison">;
1033
- columns: z.ZodArray<z.ZodString>;
1034
- rows: z.ZodArray<z.ZodObject<{
1035
- label: z.ZodString;
1036
- cells: z.ZodArray<z.ZodString>;
1037
- }, z.core.$strict>>;
1038
- }, z.core.$strict>, z.ZodObject<{
1039
- type: z.ZodLiteral<"icon_cards">;
1040
- items: z.ZodArray<z.ZodObject<{
1041
- icon: z.ZodEnum<{
1042
- [x: string]: string;
1043
- }>;
1044
- title: z.ZodString;
1045
- text: z.ZodString;
1046
- }, z.core.$strict>>;
1047
- }, z.core.$strict>, z.ZodObject<{
1048
- type: z.ZodLiteral<"row_cards">;
1049
- items: z.ZodArray<z.ZodObject<{
1050
- icon: z.ZodOptional<z.ZodEnum<{
1051
- [x: string]: string;
1052
- }>>;
1053
- title: z.ZodString;
1054
- text: z.ZodOptional<z.ZodString>;
1055
- sub: z.ZodOptional<z.ZodString>;
1056
- highlight: z.ZodOptional<z.ZodBoolean>;
1057
- }, z.core.$strict>>;
1058
- }, z.core.$strict>, z.ZodObject<{
1059
- type: z.ZodLiteral<"steps">;
1060
- items: z.ZodArray<z.ZodObject<{
1061
- title: z.ZodString;
1062
- text: z.ZodString;
1063
- }, z.core.$strict>>;
1064
- }, z.core.$strict>, z.ZodObject<{
1065
- type: z.ZodLiteral<"rings">;
1066
- items: z.ZodArray<z.ZodObject<{
1067
- label: z.ZodString;
1068
- desc: z.ZodOptional<z.ZodString>;
1069
- }, z.core.$strict>>;
1070
- }, z.core.$strict>, z.ZodObject<{
1071
- type: z.ZodLiteral<"numbered_cards">;
1072
- items: z.ZodArray<z.ZodObject<{
1073
- title: z.ZodString;
1074
- text: z.ZodOptional<z.ZodString>;
1075
- sub: z.ZodOptional<z.ZodString>;
1076
- }, z.core.$strict>>;
1077
- }, z.core.$strict>, z.ZodObject<{
1078
- type: z.ZodLiteral<"roadmap">;
1079
- items: z.ZodArray<z.ZodObject<{
1080
- title: z.ZodString;
1081
- period: z.ZodOptional<z.ZodString>;
1082
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
1083
- label: z.ZodString;
1084
- value: z.ZodString;
1085
- }, z.core.$strict>>>;
1086
- }, z.core.$strict>>;
1087
- }, z.core.$strict>, z.ZodObject<{
1088
- type: z.ZodLiteral<"matrix">;
1089
- x_title: z.ZodOptional<z.ZodString>;
1090
- y_title: z.ZodOptional<z.ZodString>;
1091
- cols: z.ZodNumber;
1092
- items: z.ZodArray<z.ZodObject<{
1093
- title: z.ZodString;
1094
- tag: z.ZodOptional<z.ZodString>;
1095
- tone: z.ZodOptional<z.ZodEnum<{
1096
- info: "info";
1097
- accent: "accent";
1098
- neutral: "neutral";
1099
- }>>;
1100
- }, z.core.$strict>>;
1101
- }, z.core.$strict>, z.ZodObject<{
1102
- type: z.ZodLiteral<"insight_panel">;
1103
- title: z.ZodString;
1104
- rows: z.ZodArray<z.ZodObject<{
1105
- label: z.ZodString;
1106
- text: z.ZodString;
1107
- }, z.core.$strict>>;
1108
- footnote: z.ZodOptional<z.ZodString>;
1109
- }, z.core.$strict>, z.ZodObject<{
1110
- type: z.ZodLiteral<"verdict_banner">;
1111
- text: z.ZodString;
1112
- tone: z.ZodEnum<{
1113
- neutral: "neutral";
1114
- positive: "positive";
1115
- warning: "warning";
1116
- }>;
1117
- icon: z.ZodOptional<z.ZodEnum<{
1118
- [x: string]: string;
1119
- }>>;
1120
- }, z.core.$strict>, z.ZodObject<{
1121
- type: z.ZodLiteral<"citation">;
1122
- sources: z.ZodArray<z.ZodObject<{
1123
- label: z.ZodString;
1124
- url: z.ZodOptional<z.ZodString>;
1125
- ref: z.ZodOptional<z.ZodString>;
1126
- }, z.core.$strict>>;
1127
- }, z.core.$strict>, z.ZodObject<{
1128
- type: z.ZodLiteral<"image">;
1129
- asset_id: z.ZodString;
1130
- caption: z.ZodOptional<z.ZodString>;
1131
- fit: z.ZodDefault<z.ZodEnum<{
1132
- cover: "cover";
1133
- contain: "contain";
1134
- }>>;
1135
- }, z.core.$strict>, z.ZodObject<{
1136
- type: z.ZodLiteral<"image_grid">;
1137
- items: z.ZodArray<z.ZodObject<{
1138
- asset_id: z.ZodString;
1139
- caption: z.ZodOptional<z.ZodString>;
1140
- }, z.core.$strict>>;
1141
- emphasis: z.ZodOptional<z.ZodEnum<{
1142
- none: "none";
1143
- first: "first";
1144
- }>>;
1145
- }, z.core.$strict>, z.ZodObject<{
1146
- type: z.ZodLiteral<"image_compare">;
1147
- left: z.ZodObject<{
1148
- asset_id: z.ZodString;
1149
- label: z.ZodString;
1150
- }, z.core.$strict>;
1151
- right: z.ZodObject<{
1152
- asset_id: z.ZodString;
1153
- label: z.ZodString;
1154
- }, z.core.$strict>;
1155
- style: z.ZodOptional<z.ZodEnum<{
1156
- vs: "vs";
1157
- before_after: "before_after";
1158
- }>>;
1159
- }, z.core.$strict>, z.ZodObject<{
1160
- type: z.ZodLiteral<"swot">;
1161
- strengths: z.ZodArray<z.ZodString>;
1162
- weaknesses: z.ZodArray<z.ZodString>;
1163
- opportunities: z.ZodArray<z.ZodString>;
1164
- threats: z.ZodArray<z.ZodString>;
1165
- labels: z.ZodOptional<z.ZodObject<{
1166
- strengths: z.ZodOptional<z.ZodString>;
1167
- weaknesses: z.ZodOptional<z.ZodString>;
1168
- opportunities: z.ZodOptional<z.ZodString>;
1169
- threats: z.ZodOptional<z.ZodString>;
1170
- }, z.core.$strict>>;
1171
- }, z.core.$strict>, z.ZodObject<{
1172
- type: z.ZodLiteral<"bmc">;
1173
- key_partners: z.ZodArray<z.ZodString>;
1174
- key_activities: z.ZodArray<z.ZodString>;
1175
- key_resources: z.ZodArray<z.ZodString>;
1176
- value_propositions: z.ZodArray<z.ZodString>;
1177
- customer_relationships: z.ZodArray<z.ZodString>;
1178
- channels: z.ZodArray<z.ZodString>;
1179
- customer_segments: z.ZodArray<z.ZodString>;
1180
- cost_structure: z.ZodArray<z.ZodString>;
1181
- revenue_streams: z.ZodArray<z.ZodString>;
1182
- }, z.core.$strict>, z.ZodObject<{
1183
- type: z.ZodLiteral<"waterfall">;
1184
- items: z.ZodArray<z.ZodObject<{
1185
- label: z.ZodString;
1186
- value: z.ZodNumber;
1187
- kind: z.ZodOptional<z.ZodEnum<{
1188
- delta: "delta";
1189
- total: "total";
1190
- }>>;
1191
- }, z.core.$strict>>;
1192
- unit: z.ZodOptional<z.ZodString>;
1193
- }, z.core.$strict>, z.ZodObject<{
1194
- type: z.ZodLiteral<"gantt">;
1195
- items: z.ZodArray<z.ZodObject<{
1196
- label: z.ZodString;
1197
- start: z.ZodNumber;
1198
- end: z.ZodNumber;
1199
- }, z.core.$strict>>;
1200
- axis_labels: z.ZodOptional<z.ZodArray<z.ZodString>>;
1201
- }, z.core.$strict>], "type">>>;
1202
- background: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1203
- kind: z.ZodLiteral<"color">;
1204
- value: z.ZodString;
1205
- }, z.core.$strict>, z.ZodObject<{
1206
- kind: z.ZodLiteral<"gradient">;
1207
- from: z.ZodString;
1208
- to: z.ZodString;
1209
- direction: z.ZodOptional<z.ZodEnum<{
1210
- tb: "tb";
1211
- lr: "lr";
1212
- diagonal: "diagonal";
1213
- }>>;
1214
- }, z.core.$strict>, z.ZodObject<{
1215
- kind: z.ZodLiteral<"asset">;
1216
- asset_id: z.ZodString;
1217
- overlay: z.ZodOptional<z.ZodObject<{
1218
- color: z.ZodString;
1219
- opacity: z.ZodNumber;
1220
- }, z.core.$strict>>;
1221
- fit: z.ZodOptional<z.ZodEnum<{
1222
- cover: "cover";
1223
- contain: "contain";
1224
- }>>;
1225
- }, z.core.$strict>], "kind">>;
1226
- decor: z.ZodOptional<z.ZodObject<{
1227
- kind: z.ZodEnum<{
1228
- big_number: "big_number";
1229
- corner_tag: "corner_tag";
1230
- rule_line: "rule_line";
1231
- quote_marks: "quote_marks";
1232
- geo_dots: "geo_dots";
1233
- }>;
1234
- intensity: z.ZodOptional<z.ZodEnum<{
1235
- subtle: "subtle";
1236
- normal: "normal";
1237
- }>>;
1238
- text: z.ZodOptional<z.ZodString>;
1239
- }, z.core.$strict>>;
1240
- image_side: z.ZodOptional<z.ZodEnum<{
1241
- left: "left";
1242
- right: "right";
1243
- }>>;
1244
- footnote: z.ZodOptional<z.ZodString>;
1245
- notes: z.ZodOptional<z.ZodString>;
1246
- }, z.core.$strict>>;
1247
- }, z.core.$strict>;
1248
- type PptxIR = z.infer<typeof PptxIRSchema>;
1249
- type Component = z.infer<typeof ComponentSchema>;
1250
- type BackgroundSpec = z.infer<typeof BackgroundSpecSchema>;
1251
- type Slide = z.infer<typeof SlideSchema>;
1252
- type Assets = z.infer<typeof AssetsSchema>;
1253
- type Meta = z.infer<typeof MetaSchema>;
6
+ declare const STRATEGY_VALUES: readonly ["pyramid", "storytelling", "instructional", "showcase", "briefing"];
7
+ declare const PACING_VALUES: readonly ["dense", "balanced", "spacious"];
8
+ declare const AUDIENCE_VALUES: readonly ["executive", "technical", "customer", "public"];
9
+ declare const BEAT_VALUES: readonly ["anchor", "dense", "breathing"];
1254
10
 
1255
- interface ValidationIssue {
1256
- path: string;
1257
- message: string;
1258
- /** 1-based slide number when the issue is scoped to a slide. */
1259
- page?: number;
1260
- /**
1261
- * The offending slide's own `id` (`Slide.id`, `ir/index.ts`) — W5
1262
- * whole-branch review finding 2: the README already claimed "validation
1263
- * error messages reference [a slide] by [its] id"; this is what makes
1264
- * that true. Set by every page-scoped issue producer
1265
- * ({@link checkLayoutApplicability}, {@link checkBoundaryPageContent},
1266
- * the content-quality-gate translation in {@link validateIr},
1267
- * {@link checkDuplicateSlideIds})
1268
- * when the slide in question has an `id` — absent when the slide has
1269
- * none (bare, pre-W5 IR) or the issue is deck-level, not scoped to any
1270
- * single slide. {@link formatIssues} appends it in parens after the page
1271
- * number.
1272
- */
1273
- slideId?: string;
1274
- }
1275
- interface ValidateResult {
1276
- ok: boolean;
1277
- ir?: PptxIR;
1278
- errors: ValidationIssue[];
1279
- /**
1280
- * Human-readable "`path`: `alias` → `canonical`" entries for every
1281
- * deterministic field-alias rewrite `validateIr` applied before parsing
1282
- * (W5 task 4, `ir/field-aliases.ts`'s `normalizeComponentAliases`) — e.g. a
1283
- * kpi item's `title` silently adopted as `label`. Present only when at
1284
- * least one rewrite happened; informational, never gates `ok` on its own.
1285
- */
1286
- normalized?: string[];
1287
- }
1288
- /**
1289
- * Validate raw JSON against the IR schema, then — once it parses — resolve
1290
- * `narrative` (`resolveNarrative`, spec §5: an unrecognized preset name is a
1291
- * `narrative`-path error, page-less) and run the content-quality gate
1292
- * (`checkIrQuality`, passed the resolved axes) against the parsed IR. All
1293
- * stages must pass for `ok: true`. Quality findings are reported the same
1294
- * way as schema errors (page-scoped, 1-based). `checkIrQuality` itself tags
1295
- * findings "warn" vs "error", but that split was designed for its original
1296
- * consumer (surfacing informational warnings in a UI after generation, per
1297
- * its own docstring) — here it is the pre-generation hard gate, so any
1298
- * finding blocks (`ok: false`), not only "error"-severity ones. Treating
1299
- * "warn" findings (e.g. a cover with no heading) as advisory-only would
1300
- * defeat the point of wiring this in: the spec's core principle is a hard
1301
- * protocol gate, not hoped-for prompt compliance.
1302
- *
1303
- * Before any of that, one deterministic alias pass runs
1304
- * ({@link normalizeComponentAliases}, W5 task 4) for the component
1305
- * field-name synonym rescue only (kpi `title`→`label`, quote
1306
- * `content`→`text`, …) — a weak-model rescue for schema-internal synonym
1307
- * drift, scoped to `slides[]`. It only rewrites where the canonical key is
1308
- * absent, so the schema parse below never sees an alias as an "unrecognized
1309
- * key" in the first place. Purely informational: every rewrite is recorded
1310
- * as a human-readable `path: alias → canonical` string and threaded onto
1311
- * `ValidateResult.normalized` on *every* return path below via
1312
- * `withNormalized`, success or failure alike — it never itself gates `ok`.
1313
- *
1314
- * There is deliberately no root/narrative-level alias pass (spec §16,
1315
- * reversing the now-superseded §15.4): a v4 document that still spells its
1316
- * pre-rename vocabulary — `scenario` instead of `narrative`, `mode`/
1317
- * `delivery` instead of `strategy`/`pacing`, or the old enum values
1318
- * `"text"`/`"presentation"`/`"narrative"` — is not old-vocabulary
1319
- * *compatibility*, it is exactly the vocabulary this rename retired, so it
1320
- * hard-errors like any other unknown key or value: `scenario` fails the
1321
- * schema's `.strict()` parse below as an unrecognized key, and an old enum
1322
- * value (or the axis-key names `mode`/`delivery` inside `narrative`, which
1323
- * the schema itself leaves open) fails `resolveNarrative`'s own runtime
1324
- * check, listing the current values. `pptfast migrate` (`ir/migrate.ts`)
1325
- * remains the sanctioned bridge for a genuine v3 document — see the v3 hard
1326
- * reject below, which points there.
1327
- *
1328
- * The component-alias pass only ever runs for a document already headed for
1329
- * the v4 schema — an explicit `version: "2"` or `version: "3"` is
1330
- * hard-rejected first, below, before the alias pass or any schema parse
1331
- * (spec §9.3: a v2/v3 document is never silently reinterpreted as v4).
1332
- */
1333
- declare function validateIr(input: unknown): ValidateResult;
1334
11
  /**
1335
- * `"page 2 (p-kpi) — path: message"` when the issue carries both a `page`
1336
- * and a `slideId` (W5 whole-branch review finding 2the README's own
1337
- * claim that a validation error "references [a slide] by [its] id", made
1338
- * true) the parenthesized id is appended only alongside a `page` number,
1339
- * never on its own: a deck-level issue that happens to set a representative
1340
- * `slideId` with no `page` ({@link checkDuplicateSlideIds} above) keeps its
1341
- * pre-existing, unchanged format. Every other combination — `page` with no
1342
- * `slideId` (an id-less slide), or neither — is byte-identical to before
1343
- * this task.
12
+ * Public API surface: validateIr's own logic lives in `./validate-core`
13
+ * (P2 browser-distribution wave, task 1see that file's own doc comment
14
+ * for why) and is re-exported below unchanged, so every existing consumer
15
+ * of this module keeps working exactly as before. `renderSlideSvg` and
16
+ * `generatePptx` stay defined here this is the one file allowed to reach
17
+ * into `./svg/render-slide` and `./pptx/generate` (react-dom/server, jszip,
18
+ * pptxgenjs, dagre).
1344
19
  */
1345
- declare function formatIssues(errors: ValidationIssue[]): string;
20
+
1346
21
  /** Render a single slide to standalone SVG markup (preview / self-check). */
1347
22
  declare function renderSlideSvg(ir: PptxIR, slideIndex: number): string;
1348
23
  /** Full pipeline: validate → SVG → DrawingML → animation patches → pptx bytes. */
1349
24
  declare function generatePptx(input: unknown, opts?: {
1350
25
  draft?: boolean;
1351
26
  }): Promise<Uint8Array>;
1352
- interface ThemeInfo {
1353
- id: string;
1354
- label: string;
1355
- colors: Record<string, unknown>;
1356
- }
1357
- /** Built-in theme catalog with labels and style color tokens. */
1358
- declare function listThemes(): ThemeInfo[];
1359
- /** JSON Schema for the IR — feed this to a model before it writes IR. */
1360
- declare function irJsonSchema(): Record<string, unknown>;
1361
- /** JSON Schema for style-token overrides (IR theme.style, --style files, config "style"). */
1362
- declare function styleJsonSchema(): Record<string, unknown>;
1363
27
 
1364
28
  /**
1365
29
  * The frozen IR v3 top-level shape (vocabulary-v4 rename, task 1 — spec
@@ -1440,8 +104,8 @@ declare const PptxIRV3Schema: z.ZodObject<{
1440
104
  copyright: z.ZodOptional<z.ZodString>;
1441
105
  animation: z.ZodOptional<z.ZodObject<{
1442
106
  transition: z.ZodOptional<z.ZodEnum<{
1443
- fade: "fade";
1444
107
  push: "push";
108
+ fade: "fade";
1445
109
  wipe: "wipe";
1446
110
  none: "none";
1447
111
  }>>;
@@ -1478,6 +142,11 @@ declare const PptxIRV3Schema: z.ZodObject<{
1478
142
  id: z.ZodOptional<z.ZodString>;
1479
143
  placeholder: z.ZodOptional<z.ZodLiteral<true>>;
1480
144
  layout: z.ZodOptional<z.ZodString>;
145
+ beat: z.ZodOptional<z.ZodEnum<{
146
+ anchor: "anchor";
147
+ dense: "dense";
148
+ breathing: "breathing";
149
+ }>>;
1481
150
  arrangement: z.ZodOptional<z.ZodEnum<{
1482
151
  code: "code";
1483
152
  quote: "quote";
@@ -1530,9 +199,9 @@ declare const PptxIRV3Schema: z.ZodObject<{
1530
199
  unit: z.ZodOptional<z.ZodString>;
1531
200
  label: z.ZodString;
1532
201
  delta: z.ZodOptional<z.ZodEnum<{
202
+ flat: "flat";
1533
203
  up: "up";
1534
204
  down: "down";
1535
- flat: "flat";
1536
205
  }>>;
1537
206
  icon: z.ZodOptional<z.ZodEnum<{
1538
207
  [x: string]: string;
@@ -1995,10 +664,6 @@ declare function getInstalledThemeIds(): readonly string[];
1995
664
  */
1996
665
  declare function getThemeDefinition(id: string): ThemeDefinition;
1997
666
 
1998
- declare const STRATEGY_VALUES: readonly ["pyramid", "storytelling", "instructional", "showcase", "briefing"];
1999
- declare const PACING_VALUES: readonly ["dense", "balanced", "spacious"];
2000
- declare const AUDIENCE_VALUES: readonly ["executive", "technical", "customer", "public"];
2001
-
2002
667
  /**
2003
668
  * Narrative argument style (spec §5's five-way strategy classification,
2004
669
  * renamed from "mode" — spec §8.1). Each strategy carries a
@@ -2057,17 +722,68 @@ interface StrategyDefinition {
2057
722
  * spec `focus` vocabulary gate, so narrowing its meaning here would be a
2058
723
  * breaking change to an existing consumer. This field holds only
2059
724
  * `LAYOUT_REGISTRY` content-archetype ids (`svg/layouts/registry.ts`'s
2060
- * `CONTENT_LAYOUTS` keys) — cover/chapter/ending ids never appear in any
2061
- * strategy's list here, which is exactly why `resolveArchetypeId`'s weighting
2062
- * is a no-op for those three slide types (spec: "身份页个性来自 theme 不来自
2063
- * strategy,均匀取样") without needing a slide-type special case a weight
2064
- * lookup against an id that can never match falls through to the ×1 floor
2065
- * for every candidate, uniform by construction. `tone-adaptive-content`
2066
- * appears in no strategy's list either (spec's "万金油" call-out: it is the
2067
- * one content archetype meant to read as strategy-neutral, so it always
2068
- * gets the ×1 floor too).
725
+ * `CONTENT_LAYOUTS` keys) — cover/chapter/ending ids never appear in this
726
+ * field's list, `resolveArchetypeId` reads {@link identityTendencies}
727
+ * below for those three slide types instead, so the two fields' id
728
+ * namespaces stay disjoint by construction rather than by convention.
729
+ * `tone-adaptive-content` appears in no strategy's list here (spec's "万金
730
+ * 油" call-out: it is the one content archetype meant to read as
731
+ * strategy-neutral, so it always gets the ×1 floor).
732
+ *
733
+ * **Historical note (corrected P1 variety wave, task 3):** this field's
734
+ * doc comment used to claim cover/chapter/ending stayed uniformly sampled
735
+ * because "身份页个性来自 theme 不来自 strategy" — that claim was already
736
+ * false when written (`theme.layouts` only curates the candidate *pool*,
737
+ * spec §6 step 3 — the 13 built-in themes' pools are all the full registry
738
+ * set for every slide type, so `theme.id` contributes zero shaping either —
739
+ * see `.issues/.../dr/c-diversity.md`'s §1.1 measurement). Identity pages
740
+ * now get their own strategy-driven soft weighting via
741
+ * {@link identityTendencies} — theme's role stays exactly what step 3
742
+ * always said it was — pool curation, not per-archetype preference — for
743
+ * both content and identity slides alike.
2069
744
  */
2070
745
  layoutTendencies: readonly string[];
746
+ /**
747
+ * Cover/chapter/ending soft-weight sets (P1 variety wave, task 3 — "身份页
748
+ * strategy 软加权"), one per identity slide type. Same ×3/×1 mechanics as
749
+ * {@link layoutTendencies} (`TENDENCY_WEIGHT`/`BASE_WEIGHT`,
750
+ * `svg/effective-layout.ts`) and the same consumer (`resolveArchetypeId`),
751
+ * just scoped to a disjoint id namespace: this field holds only
752
+ * `LAYOUT_REGISTRY` cover/chapter/ending archetype ids
753
+ * (`svg/layouts/registry.ts`'s `COVER_LAYOUTS`/`CHAPTER_LAYOUTS`/
754
+ * `ENDING_LAYOUTS` keys), never a content id — `resolveArchetypeId` picks
755
+ * this field or {@link layoutTendencies} based on the slide type being
756
+ * resolved, never both for the same candidate.
757
+ *
758
+ * Deliberately small (2-3 members per page type, out of a 7-8-id pool) —
759
+ * spec: "映射表提案是内容决策...权重不是排除", so every non-member archetype
760
+ * still stays reachable at the `BASE_WEIGHT` floor, just less often. Each
761
+ * member's rationale is documented next to its own strategy entry below,
762
+ * grounded in that archetype's own body comment in
763
+ * `svg/layouts/registry.ts` (`COVER_LAYOUTS`/`CHAPTER_LAYOUTS`/
764
+ * `ENDING_LAYOUTS`), not its name alone.
765
+ *
766
+ * `tone-adaptive-header`/`tone-adaptive-chapter`/`tone-adaptive-ending`
767
+ * never appear in any strategy's set here, mirroring
768
+ * `tone-adaptive-content`'s absence from every {@link layoutTendencies}
769
+ * list: each is its page type's "万金油" (registry.ts's own convention),
770
+ * the one archetype each identity slide type is meant to keep reading as
771
+ * strategy-neutral.
772
+ *
773
+ * Supersedes the old design note this field replaces (formerly recorded
774
+ * on {@link layoutTendencies} below, now corrected there): identity pages
775
+ * were never actually reading `theme.id` for their character either
776
+ * (`theme.layouts` only curates the *pool*, spec §6 step 3 — it was never
777
+ * a per-archetype weighting signal, for content or identity slides alike)
778
+ * — this field is what now gives cover/chapter/ending a strategy-driven
779
+ * personality, the same soft-weight mechanism content pages have had since
780
+ * W4.
781
+ */
782
+ identityTendencies: {
783
+ readonly cover: readonly string[];
784
+ readonly chapter: readonly string[];
785
+ readonly ending: readonly string[];
786
+ };
2071
787
  /**
2072
788
  * Beat template descriptor (spec §5's per-strategy beat-default column,
2073
789
  * renamed from "rhythm" — spec §2.3), parameterized by strategy for W5's
@@ -2221,7 +937,6 @@ declare function resolveNarrative(input: string | Partial<NarrativeProfile> | un
2221
937
  * silent mismatch.
2222
938
  */
2223
939
  declare const PAGE_TYPES: readonly ["cover", "chapter", "content", "ending"];
2224
- declare const BEAT_VALUES: readonly ["anchor", "dense", "breathing"];
2225
940
  type PageSpecType = (typeof PAGE_TYPES)[number];
2226
941
  type PageBeat = (typeof BEAT_VALUES)[number];
2227
942
  /**
@@ -2298,8 +1013,8 @@ declare const DeckSpecSchema: z.ZodObject<{
2298
1013
  copyright: z.ZodOptional<z.ZodString>;
2299
1014
  animation: z.ZodOptional<z.ZodObject<{
2300
1015
  transition: z.ZodOptional<z.ZodEnum<{
2301
- fade: "fade";
2302
1016
  push: "push";
1017
+ fade: "fade";
2303
1018
  wipe: "wipe";
2304
1019
  none: "none";
2305
1020
  }>>;
@@ -2474,13 +1189,25 @@ interface AssembleResult {
2474
1189
  * declared `summary` becomes the placeholder's `subheading` (the one spot
2475
1190
  * `summary` — otherwise a spec-only anchor, see step 5 — does reach the
2476
1191
  * IR) so a `--draft` preview of an unfilled deck still reads as more than
2477
- * a bare "Untitled".
1192
+ * a bare "Untitled". A declared `beat` carries straight into the
1193
+ * placeholder's own `Slide.beat` too (P1 variety wave, task 1 — see step
1194
+ * 5's note below). A placeholder page still participates in this
1195
+ * function's own layout materialization below, so its beat still needs
1196
+ * to reach the IR for that weighting to see it once the page is filled
1197
+ * in later without re-materializing.
2478
1198
  * 5. Present pages become a full slide: `id`/`type`/`heading` from the page
2479
1199
  * spec (never the content record — see step 2), plus whichever of
2480
1200
  * {@link PageContent}'s seven fields the content record actually set.
2481
- * `beat`/`focus`/`summary` never reach the IR for a present page
2482
- * they are spec-only authoring anchors (beat/focus steer a future
2483
- * fill/select step, summary is "for the fill step's own reading only"), not slide content.
1201
+ * `beat` now carries straight into the IR's own `Slide.beat` field too
1202
+ * reached from `PageSpec`, not `PageContent` (same source as `id`/`type`/
1203
+ * `heading`, since `beat` is spec-owned, not per-page content) as of
1204
+ * the P1 variety wave's task 1. Previously dropped here as a spec-only
1205
+ * authoring anchor, `SlideSchema.beat`'s own doc comment
1206
+ * (`../ir/index.ts`) has the full accounting of what it now does
1207
+ * downstream. `focus`/`summary` still never reach the IR for a present
1208
+ * page — they remain spec-only authoring anchors (focus steers a future
1209
+ * fill/select step, summary is "for the fill step's own reading only"),
1210
+ * not slide content.
2484
1211
  * 6. Top-level: `version` is always the literal `"4"` (IR's own version,
2485
1212
  * unrelated to the deck spec's own `version: "1"`) — the deck spec's own
2486
1213
  * `narrative` field (renamed this task from `scenario`, spec §8.1's
@@ -2519,10 +1246,14 @@ declare function assembleDeck(spec: unknown, pages: Record<string, PageContent>)
2519
1246
  * written *to* the IR in the first place, so there is nothing here to read
2520
1247
  * back:
2521
1248
  *
2522
- * - `beat` and `focus` never appear on any produced {@link PageSpec} —
2523
- * both are spec-only authoring anchors with no corresponding `Slide`
2524
- * field at all (see {@link assembleDeck} step 5's doc comment). Nothing
2525
- * here could recover a value that was never written anywhere.
1249
+ * - `focus` never appears on any produced {@link PageSpec} — it is a
1250
+ * spec-only authoring anchor with no corresponding `Slide` field at all
1251
+ * (see {@link assembleDeck} step 5's doc comment). Nothing here could
1252
+ * recover a value that was never written anywhere. `beat` used to share
1253
+ * this fate but no longer does (P1 variety wave, task 1): it is now a
1254
+ * plain passthrough on both sides, exactly like `layout`/`heading` below —
1255
+ * `assembleDeck` step 5/6 reads `pageSpec.beat` into `slide.beat`, this
1256
+ * function reads `slide.beat` straight back below.
2526
1257
  * - `summary` is recovered *only* for a placeholder slide, by reversing
2527
1258
  * step 4's `summary` → `subheading` injection (`slide.subheading` back to
2528
1259
  * `pageSpec.summary`). A non-placeholder slide's own `subheading` — a
@@ -2727,4 +1458,4 @@ declare function auditDeck(ir: PptxIR, opts: {
2727
1458
  pixels: true;
2728
1459
  }): Promise<AuditReport>;
2729
1460
 
2730
- export { AUDIENCE_VALUES, type AssembleResult, type Assets, type Audience, type AuditChecks, type AuditDeckOptions, type AuditFinding, type AuditReport, BUILTIN_THEME_IDS, type BackgroundSpec, type BrandConfig, BrandConfigSchema, COMPONENT_TYPES, type Component, DEFAULT_NARRATIVE, type DeckSpec, DeckSpecSchema, type Meta, NARRATIVE_PRESETS, type NarrativePreset, type NarrativeProfile, PACING_BUDGETS, PACING_VALUES, type Pacing, type PacingBudget, type PageBeat, type PageContent, type PageSpec, PageSpecSchema, type PageSpecType, PptfastError, type PptxIR, PptxIRSchema, type PptxIRV3, PptxIRV3Schema, SPEC_PAGE_COUNT_RANGE, STRATEGY_DEFINITIONS, STRATEGY_VALUES, type Slide, type SpecValidateResult, type SpecValidationIssue, type Strategy, type StrategyDefinition, type StyleOverride, StyleOverrideSchema, type ThemeDefinition, type ThemeInfo, type ThemeRegistration, ThemeSchema, VERSION, type ValidateResult, type ValidationIssue, assembleDeck, auditDeck, disassembleDeck, formatIssues, formatSpecIssues, generatePptx, getInstalledThemeIds, getThemeDefinition, irJsonSchema, listThemes, migrateDeckPlanToSpec, migrateIrV3ToV4, registerTheme, renderSlideSvg, resolveNarrative, resolveSpecThemeId, specJsonSchema, styleJsonSchema, validateIr, validateSpec };
1461
+ export { AUDIENCE_VALUES, type AssembleResult, type Audience, type AuditChecks, type AuditDeckOptions, type AuditFinding, type AuditReport, BackgroundSpec, BrandConfig, Component, DEFAULT_NARRATIVE, type DeckSpec, DeckSpecSchema, NARRATIVE_PRESETS, type NarrativePreset, type NarrativeProfile, PACING_BUDGETS, PACING_VALUES, type Pacing, type PacingBudget, type PageBeat, type PageContent, type PageSpec, PageSpecSchema, type PageSpecType, PptxIR, type PptxIRV3, PptxIRV3Schema, SPEC_PAGE_COUNT_RANGE, STRATEGY_DEFINITIONS, STRATEGY_VALUES, Slide, type SpecValidateResult, type SpecValidationIssue, type Strategy, type StrategyDefinition, type ThemeDefinition, type ThemeRegistration, assembleDeck, auditDeck, disassembleDeck, formatSpecIssues, generatePptx, getInstalledThemeIds, getThemeDefinition, migrateDeckPlanToSpec, migrateIrV3ToV4, registerTheme, renderSlideSvg, resolveNarrative, resolveSpecThemeId, specJsonSchema, validateSpec };