@liustack/pptfast 0.6.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,1400 +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.6.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
- * Backward-compatible addition (borrow wave, Task 2 — dual-threshold
1289
- * severity recalibration): warn-severity {@link checkIrQuality} findings
1290
- * (editorial-budget codes — `missing_heading`/`long_heading`/`density`/
1291
- * `bullets_overflow`/`bullet_item_long`/`big_number_no_kpi`), formatted the
1292
- * same shape {@link formatIssues} already prints for `errors` (page/id/path
1293
- * all included). Present only when at least one warn-severity finding
1294
- * exists, and never gates `ok` on its own — that is exactly what moved
1295
- * these findings off `errors` and onto here. Can be present alongside a
1296
- * failing (`ok:false`) result too, whenever `checkIrQuality` itself ran
1297
- * (an *earlier* hard gate — schema, theme id, layout applicability,
1298
- * full-body exclusivity, boundary-page content, duplicate ids, narrative —
1299
- * short-circuits before `checkIrQuality` runs at all, so a deck rejected
1300
- * by one of those never reaches this field either way, see `validateIr`'s
1301
- * own body for the exact gate order). {@link formatWarnings} renders this
1302
- * array as CLI-ready `"warning: ..."` lines.
1303
- */
1304
- warnings?: ValidationIssue[];
1305
- }
1306
11
  /**
1307
- * Validate raw JSON against the IR schema, then — once it parses — resolve
1308
- * `narrative` (`resolveNarrative`, spec §5: an unrecognized preset name is a
1309
- * `narrative`-path error, page-less) and run the content-quality gate
1310
- * (`checkIrQuality`, passed the resolved axes) against the parsed IR. Every
1311
- * hard-gate stage (schema, theme id, layout applicability, full-body
1312
- * exclusivity, boundary-page content, duplicate ids, narrative) must pass for
1313
- * `ok: true`, same as before. Quality findings are reported the same way as
1314
- * schema errors (page-scoped, 1-based).
1315
- *
1316
- * Dual-threshold severity (borrow wave, Task 2 — recalibrated from the prior
1317
- * "any finding blocks" design): `checkIrQuality`'s own "warn" vs "error" tag
1318
- * is now respected, not flattened. Only "error"-severity findings
1319
- * (`empty_deck`, `bullet_item_overflow` — content genuinely lost: an empty
1320
- * deck, or a bullet item long enough to hit `bullets.tsx`'s MIN_FONT floor
1321
- * and actually get truncated) gate `ok`. "warn"-severity findings — the
1322
- * editorial-budget codes (`missing_heading`/`long_heading`/`density`/
1323
- * `bullets_overflow`/`bullet_item_long`/`big_number_no_kpi`) — surface on
1324
- * {@link ValidateResult.warnings} instead: visible to every caller (the SDK,
1325
- * the CLI's `validate`/`render` pre-flight), never blocking. This reverses
1326
- * the prior posture (this comment used to read "any finding blocks... not
1327
- * only 'error'-severity ones") because the evidence behind it did not hold:
1328
- * a boundary scan (borrow-wave fact-report, Q3) found the editorial bullets
1329
- * threshold blocking content roughly 3.5x below where `bullets.tsx`'s own
1330
- * render safety net (2-line wrap, shrink to a 14px floor) actually starts
1331
- * losing characters — so the hard gate was rejecting deck content that
1332
- * would have rendered with zero visible defect, and a tight hard gate on an
1333
- * editorial (not geometric) threshold taught truncate-content-to-pass
1334
- * workarounds rather than catching real loss. `generatePptx`'s default path
1335
- * inherits this unchanged (`if (!v.ok) throw`) — it already only ever
1336
- * blocked on `ok`, never inspected `errors`/`warnings` directly.
1337
- *
1338
- * Before any of that, one deterministic alias pass runs
1339
- * ({@link normalizeComponentAliases}, W5 task 4) for the component
1340
- * field-name synonym rescue only (kpi `title`→`label`, quote
1341
- * `content`→`text`, …) — a weak-model rescue for schema-internal synonym
1342
- * drift, scoped to `slides[]`. It only rewrites where the canonical key is
1343
- * absent, so the schema parse below never sees an alias as an "unrecognized
1344
- * key" in the first place. Purely informational: every rewrite is recorded
1345
- * as a human-readable `path: alias → canonical` string and threaded onto
1346
- * `ValidateResult.normalized` on *every* return path below via
1347
- * `withNormalized`, success or failure alike — it never itself gates `ok`.
1348
- *
1349
- * There is deliberately no root/narrative-level alias pass (spec §16,
1350
- * reversing the now-superseded §15.4): a v4 document that still spells its
1351
- * pre-rename vocabulary — `scenario` instead of `narrative`, `mode`/
1352
- * `delivery` instead of `strategy`/`pacing`, or the old enum values
1353
- * `"text"`/`"presentation"`/`"narrative"` — is not old-vocabulary
1354
- * *compatibility*, it is exactly the vocabulary this rename retired, so it
1355
- * hard-errors like any other unknown key or value: `scenario` fails the
1356
- * schema's `.strict()` parse below as an unrecognized key, and an old enum
1357
- * value (or the axis-key names `mode`/`delivery` inside `narrative`, which
1358
- * the schema itself leaves open) fails `resolveNarrative`'s own runtime
1359
- * check, listing the current values. `pptfast migrate` (`ir/migrate.ts`)
1360
- * remains the sanctioned bridge for a genuine v3 document — see the v3 hard
1361
- * reject below, which points there.
1362
- *
1363
- * The component-alias pass only ever runs for a document already headed for
1364
- * the v4 schema — an explicit `version: "2"` or `version: "3"` is
1365
- * hard-rejected first, below, before the alias pass or any schema parse
1366
- * (spec §9.3: a v2/v3 document is never silently reinterpreted as v4).
12
+ * Public API surface: validateIr's own logic lives in `./validate-core`
13
+ * (P2 browser-distribution wave, task 1 see 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).
1367
19
  */
1368
- declare function validateIr(input: unknown): ValidateResult;
1369
- /**
1370
- * `"page 2 (p-kpi) — path: message"` when the issue carries both a `page`
1371
- * and a `slideId` (W5 whole-branch review finding 2 — the README's own
1372
- * claim that a validation error "references [a slide] by [its] id", made
1373
- * true) — the parenthesized id is appended only alongside a `page` number,
1374
- * never on its own: a deck-level issue that happens to set a representative
1375
- * `slideId` with no `page` ({@link checkDuplicateSlideIds} above) keeps its
1376
- * pre-existing, unchanged format. Every other combination — `page` with no
1377
- * `slideId` (an id-less slide), or neither — is byte-identical to before
1378
- * this task.
1379
- */
1380
- declare function formatIssues(errors: ValidationIssue[]): string;
20
+
1381
21
  /** Render a single slide to standalone SVG markup (preview / self-check). */
1382
22
  declare function renderSlideSvg(ir: PptxIR, slideIndex: number): string;
1383
23
  /** Full pipeline: validate → SVG → DrawingML → animation patches → pptx bytes. */
1384
24
  declare function generatePptx(input: unknown, opts?: {
1385
25
  draft?: boolean;
1386
26
  }): Promise<Uint8Array>;
1387
- interface ThemeInfo {
1388
- id: string;
1389
- label: string;
1390
- colors: Record<string, unknown>;
1391
- }
1392
- /** Built-in theme catalog with labels and style color tokens. */
1393
- declare function listThemes(): ThemeInfo[];
1394
- /** JSON Schema for the IR — feed this to a model before it writes IR. */
1395
- declare function irJsonSchema(): Record<string, unknown>;
1396
- /** JSON Schema for style-token overrides (IR theme.style, --style files, config "style"). */
1397
- declare function styleJsonSchema(): Record<string, unknown>;
1398
27
 
1399
28
  /**
1400
29
  * The frozen IR v3 top-level shape (vocabulary-v4 rename, task 1 — spec
@@ -1475,8 +104,8 @@ declare const PptxIRV3Schema: z.ZodObject<{
1475
104
  copyright: z.ZodOptional<z.ZodString>;
1476
105
  animation: z.ZodOptional<z.ZodObject<{
1477
106
  transition: z.ZodOptional<z.ZodEnum<{
1478
- fade: "fade";
1479
107
  push: "push";
108
+ fade: "fade";
1480
109
  wipe: "wipe";
1481
110
  none: "none";
1482
111
  }>>;
@@ -1513,6 +142,11 @@ declare const PptxIRV3Schema: z.ZodObject<{
1513
142
  id: z.ZodOptional<z.ZodString>;
1514
143
  placeholder: z.ZodOptional<z.ZodLiteral<true>>;
1515
144
  layout: z.ZodOptional<z.ZodString>;
145
+ beat: z.ZodOptional<z.ZodEnum<{
146
+ anchor: "anchor";
147
+ dense: "dense";
148
+ breathing: "breathing";
149
+ }>>;
1516
150
  arrangement: z.ZodOptional<z.ZodEnum<{
1517
151
  code: "code";
1518
152
  quote: "quote";
@@ -1565,9 +199,9 @@ declare const PptxIRV3Schema: z.ZodObject<{
1565
199
  unit: z.ZodOptional<z.ZodString>;
1566
200
  label: z.ZodString;
1567
201
  delta: z.ZodOptional<z.ZodEnum<{
202
+ flat: "flat";
1568
203
  up: "up";
1569
204
  down: "down";
1570
- flat: "flat";
1571
205
  }>>;
1572
206
  icon: z.ZodOptional<z.ZodEnum<{
1573
207
  [x: string]: string;
@@ -2030,10 +664,6 @@ declare function getInstalledThemeIds(): readonly string[];
2030
664
  */
2031
665
  declare function getThemeDefinition(id: string): ThemeDefinition;
2032
666
 
2033
- declare const STRATEGY_VALUES: readonly ["pyramid", "storytelling", "instructional", "showcase", "briefing"];
2034
- declare const PACING_VALUES: readonly ["dense", "balanced", "spacious"];
2035
- declare const AUDIENCE_VALUES: readonly ["executive", "technical", "customer", "public"];
2036
-
2037
667
  /**
2038
668
  * Narrative argument style (spec §5's five-way strategy classification,
2039
669
  * renamed from "mode" — spec §8.1). Each strategy carries a
@@ -2092,17 +722,68 @@ interface StrategyDefinition {
2092
722
  * spec `focus` vocabulary gate, so narrowing its meaning here would be a
2093
723
  * breaking change to an existing consumer. This field holds only
2094
724
  * `LAYOUT_REGISTRY` content-archetype ids (`svg/layouts/registry.ts`'s
2095
- * `CONTENT_LAYOUTS` keys) — cover/chapter/ending ids never appear in any
2096
- * strategy's list here, which is exactly why `resolveArchetypeId`'s weighting
2097
- * is a no-op for those three slide types (spec: "身份页个性来自 theme 不来自
2098
- * strategy,均匀取样") without needing a slide-type special case a weight
2099
- * lookup against an id that can never match falls through to the ×1 floor
2100
- * for every candidate, uniform by construction. `tone-adaptive-content`
2101
- * appears in no strategy's list either (spec's "万金油" call-out: it is the
2102
- * one content archetype meant to read as strategy-neutral, so it always
2103
- * 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.
2104
744
  */
2105
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
+ };
2106
787
  /**
2107
788
  * Beat template descriptor (spec §5's per-strategy beat-default column,
2108
789
  * renamed from "rhythm" — spec §2.3), parameterized by strategy for W5's
@@ -2256,7 +937,6 @@ declare function resolveNarrative(input: string | Partial<NarrativeProfile> | un
2256
937
  * silent mismatch.
2257
938
  */
2258
939
  declare const PAGE_TYPES: readonly ["cover", "chapter", "content", "ending"];
2259
- declare const BEAT_VALUES: readonly ["anchor", "dense", "breathing"];
2260
940
  type PageSpecType = (typeof PAGE_TYPES)[number];
2261
941
  type PageBeat = (typeof BEAT_VALUES)[number];
2262
942
  /**
@@ -2333,8 +1013,8 @@ declare const DeckSpecSchema: z.ZodObject<{
2333
1013
  copyright: z.ZodOptional<z.ZodString>;
2334
1014
  animation: z.ZodOptional<z.ZodObject<{
2335
1015
  transition: z.ZodOptional<z.ZodEnum<{
2336
- fade: "fade";
2337
1016
  push: "push";
1017
+ fade: "fade";
2338
1018
  wipe: "wipe";
2339
1019
  none: "none";
2340
1020
  }>>;
@@ -2509,13 +1189,25 @@ interface AssembleResult {
2509
1189
  * declared `summary` becomes the placeholder's `subheading` (the one spot
2510
1190
  * `summary` — otherwise a spec-only anchor, see step 5 — does reach the
2511
1191
  * IR) so a `--draft` preview of an unfilled deck still reads as more than
2512
- * 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.
2513
1198
  * 5. Present pages become a full slide: `id`/`type`/`heading` from the page
2514
1199
  * spec (never the content record — see step 2), plus whichever of
2515
1200
  * {@link PageContent}'s seven fields the content record actually set.
2516
- * `beat`/`focus`/`summary` never reach the IR for a present page
2517
- * they are spec-only authoring anchors (beat/focus steer a future
2518
- * 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.
2519
1211
  * 6. Top-level: `version` is always the literal `"4"` (IR's own version,
2520
1212
  * unrelated to the deck spec's own `version: "1"`) — the deck spec's own
2521
1213
  * `narrative` field (renamed this task from `scenario`, spec §8.1's
@@ -2554,10 +1246,14 @@ declare function assembleDeck(spec: unknown, pages: Record<string, PageContent>)
2554
1246
  * written *to* the IR in the first place, so there is nothing here to read
2555
1247
  * back:
2556
1248
  *
2557
- * - `beat` and `focus` never appear on any produced {@link PageSpec} —
2558
- * both are spec-only authoring anchors with no corresponding `Slide`
2559
- * field at all (see {@link assembleDeck} step 5's doc comment). Nothing
2560
- * 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.
2561
1257
  * - `summary` is recovered *only* for a placeholder slide, by reversing
2562
1258
  * step 4's `summary` → `subheading` injection (`slide.subheading` back to
2563
1259
  * `pageSpec.summary`). A non-placeholder slide's own `subheading` — a
@@ -2762,4 +1458,4 @@ declare function auditDeck(ir: PptxIR, opts: {
2762
1458
  pixels: true;
2763
1459
  }): Promise<AuditReport>;
2764
1460
 
2765
- 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 };