vidspotai-shared 1.0.91 → 1.0.93

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.
Files changed (61) hide show
  1. package/lib/schemas/demoSpec.schema.d.ts +689 -0
  2. package/lib/schemas/demoSpec.schema.d.ts.map +1 -0
  3. package/lib/schemas/demoSpec.schema.js +276 -0
  4. package/lib/schemas/index.d.ts +1 -0
  5. package/lib/schemas/index.d.ts.map +1 -1
  6. package/lib/schemas/index.js +1 -0
  7. package/lib/schemas/project.schema.d.ts +78 -0
  8. package/lib/schemas/project.schema.d.ts.map +1 -1
  9. package/lib/schemas/project.schema.js +55 -1
  10. package/lib/schemas/videoPlan.schema.d.ts +69 -0
  11. package/lib/schemas/videoPlan.schema.d.ts.map +1 -1
  12. package/lib/schemas/videoPlan.schema.js +30 -1
  13. package/lib/services/agent/editClassifier.d.ts +16 -0
  14. package/lib/services/agent/editClassifier.d.ts.map +1 -1
  15. package/lib/services/agent/index.d.ts +1 -0
  16. package/lib/services/agent/index.d.ts.map +1 -1
  17. package/lib/services/agent/index.js +1 -0
  18. package/lib/services/agent/overlayRenderer.d.ts.map +1 -1
  19. package/lib/services/agent/overlayRenderer.js +8 -0
  20. package/lib/services/agent/planner/Planner.d.ts.map +1 -1
  21. package/lib/services/agent/planner/Planner.js +13 -2
  22. package/lib/services/agent/planner/structuralRules.d.ts.map +1 -1
  23. package/lib/services/agent/planner/structuralRules.js +6 -1
  24. package/lib/services/agent/textStylePacks.d.ts +35 -0
  25. package/lib/services/agent/textStylePacks.d.ts.map +1 -0
  26. package/lib/services/agent/textStylePacks.js +70 -0
  27. package/lib/services/agent/tools/composeScene.tool.d.ts +46 -0
  28. package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -1
  29. package/lib/services/agent/tools/estimateCost.tool.d.ts +16 -0
  30. package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -1
  31. package/lib/services/agent/tools/planVideo.tool.d.ts +27 -0
  32. package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -1
  33. package/lib/services/agent/tools/render.tool.d.ts +16 -0
  34. package/lib/services/agent/tools/render.tool.d.ts.map +1 -1
  35. package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
  36. package/lib/services/aiGen/providers/bytedance/bytedance.service.js +8 -8
  37. package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
  38. package/lib/services/aiGen/providers/google/google.service.js +54 -18
  39. package/lib/services/aiGen/providers/google/googleApiKeys.d.ts +10 -6
  40. package/lib/services/aiGen/providers/google/googleApiKeys.d.ts.map +1 -1
  41. package/lib/services/aiGen/providers/google/googleApiKeys.js +10 -6
  42. package/lib/services/aiGen/providers/google/googleErrors.d.ts +17 -10
  43. package/lib/services/aiGen/providers/google/googleErrors.d.ts.map +1 -1
  44. package/lib/services/aiGen/providers/google/googleErrors.js +60 -21
  45. package/lib/services/aiGen/providers/google/googleKeyPool.d.ts.map +1 -1
  46. package/lib/services/aiGen/providers/google/googleKeyPool.js +40 -12
  47. package/lib/services/asr/index.d.ts +1 -0
  48. package/lib/services/asr/index.d.ts.map +1 -1
  49. package/lib/services/asr/index.js +1 -0
  50. package/lib/services/asr/transcribeWithFallback.d.ts +54 -0
  51. package/lib/services/asr/transcribeWithFallback.d.ts.map +1 -0
  52. package/lib/services/asr/transcribeWithFallback.js +87 -0
  53. package/lib/services/editor/designToProject.d.ts +2 -0
  54. package/lib/services/editor/designToProject.d.ts.map +1 -1
  55. package/lib/services/editor/designToProject.js +10 -0
  56. package/lib/services/editor/planToProject.d.ts.map +1 -1
  57. package/lib/services/editor/planToProject.helpers.d.ts +9 -3
  58. package/lib/services/editor/planToProject.helpers.d.ts.map +1 -1
  59. package/lib/services/editor/planToProject.helpers.js +17 -2
  60. package/lib/services/editor/planToProject.js +21 -3
  61. package/package.json +1 -1
@@ -0,0 +1,689 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * DemoSpec — the canonical, editable contract for an autonomous SaaS product-demo video.
4
+ *
5
+ * This is the single source of truth shared by:
6
+ * - the LLM author (Claude produces this via `.structured<DemoSpec>()` from the user's
7
+ * brand + features + screenshots + wizard answers)
8
+ * - the demo render engine (Remotion scene-template library consumes this -> MP4)
9
+ * - the persistence/editor layer (stored on `demoVideoProjects.demoSpec`; "change X"
10
+ * requests patch this and re-render — this is the "keep the source so you can edit
11
+ * later" requirement, structured instead of exported HTML)
12
+ * - the script/voiceover stage (reads the scene timeline + narration hints)
13
+ *
14
+ * Two render paths share this one contract (the "hybrid engine" decision):
15
+ * - Path A — parametric scene-template components (scene `type` !== "custom")
16
+ * - Path B — arbitrary Remotion TSX authored by the LLM (scene `type` === "custom"),
17
+ * dynamically bundled + sandboxed. Additive — Path A ignores `custom` scenes' tsx.
18
+ *
19
+ * Fields evolve forward only. Add new optional fields; never repurpose existing ones.
20
+ * Bump DEMO_SPEC_SCHEMA_VERSION on any breaking change.
21
+ *
22
+ * See notes/SAAS_DEMO_GENERATOR_PLAN.md for the full plan.
23
+ */
24
+ export declare const DEMO_SPEC_SCHEMA_VERSION: 1;
25
+ export declare const DemoBrandSchema: z.ZodObject<{
26
+ identity: z.ZodDefault<z.ZodObject<{
27
+ brandName: z.ZodOptional<z.ZodString>;
28
+ wordmark: z.ZodOptional<z.ZodString>;
29
+ logoUrl: z.ZodOptional<z.ZodString>;
30
+ }, z.core.$strip>>;
31
+ colors: z.ZodDefault<z.ZodObject<{
32
+ primary: z.ZodOptional<z.ZodString>;
33
+ secondary: z.ZodOptional<z.ZodString>;
34
+ accent: z.ZodOptional<z.ZodString>;
35
+ palette: z.ZodDefault<z.ZodArray<z.ZodString>>;
36
+ }, z.core.$strip>>;
37
+ fonts: z.ZodDefault<z.ZodObject<{
38
+ heading: z.ZodOptional<z.ZodString>;
39
+ body: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>>;
41
+ }, z.core.$strip>;
42
+ export type DemoBrand = z.infer<typeof DemoBrandSchema>;
43
+ /** The overarching visual language. */
44
+ export declare const VisualStyleSchema: z.ZodEnum<{
45
+ cinematic: "cinematic";
46
+ "clean-ui-walkthrough": "clean-ui-walkthrough";
47
+ "split-headline": "split-headline";
48
+ "kinetic-typography": "kinetic-typography";
49
+ "minimal-calm": "minimal-calm";
50
+ "energetic-punchy": "energetic-punchy";
51
+ }>;
52
+ export type VisualStyle = z.infer<typeof VisualStyleSchema>;
53
+ export declare const DemoStyleSchema: z.ZodObject<{
54
+ visual: z.ZodDefault<z.ZodEnum<{
55
+ cinematic: "cinematic";
56
+ "clean-ui-walkthrough": "clean-ui-walkthrough";
57
+ "split-headline": "split-headline";
58
+ "kinetic-typography": "kinetic-typography";
59
+ "minimal-calm": "minimal-calm";
60
+ "energetic-punchy": "energetic-punchy";
61
+ }>>;
62
+ pace: z.ZodDefault<z.ZodEnum<{
63
+ medium: "medium";
64
+ fast: "fast";
65
+ slow: "slow";
66
+ }>>;
67
+ colorMood: z.ZodDefault<z.ZodEnum<{
68
+ dark: "dark";
69
+ light: "light";
70
+ "brand-forward": "brand-forward";
71
+ }>>;
72
+ audioIntent: z.ZodDefault<z.ZodEnum<{
73
+ music: "music";
74
+ voiceover: "voiceover";
75
+ captions: "captions";
76
+ }>>;
77
+ motion: z.ZodDefault<z.ZodEnum<{
78
+ subtle: "subtle";
79
+ balanced: "balanced";
80
+ dynamic: "dynamic";
81
+ }>>;
82
+ }, z.core.$strip>;
83
+ export type DemoStyle = z.infer<typeof DemoStyleSchema>;
84
+ /** A lower-third on-screen caption (VO-ready headline), per the studied Caption component. */
85
+ export declare const SceneCaptionSchema: z.ZodObject<{
86
+ title: z.ZodString;
87
+ sub: z.ZodOptional<z.ZodString>;
88
+ }, z.core.$strip>;
89
+ /** A UI metric/stat chip used across dashboard/stats scenes. */
90
+ export declare const StatSchema: z.ZodObject<{
91
+ label: z.ZodString;
92
+ value: z.ZodOptional<z.ZodNumber>;
93
+ valueText: z.ZodOptional<z.ZodString>;
94
+ suffix: z.ZodOptional<z.ZodString>;
95
+ icon: z.ZodOptional<z.ZodString>;
96
+ }, z.core.$strip>;
97
+ /** A generic card used in featureShowcase / cardGrid scenes. */
98
+ export declare const DemoCardSchema: z.ZodObject<{
99
+ title: z.ZodString;
100
+ subtitle: z.ZodOptional<z.ZodString>;
101
+ badge: z.ZodOptional<z.ZodString>;
102
+ badgeKind: z.ZodOptional<z.ZodEnum<{
103
+ warning: "warning";
104
+ neutral: "neutral";
105
+ positive: "positive";
106
+ danger: "danger";
107
+ }>>;
108
+ icon: z.ZodOptional<z.ZodString>;
109
+ }, z.core.$strip>;
110
+ /** A single chat turn for the AI-assistant scene. */
111
+ export declare const ChatTurnSchema: z.ZodObject<{
112
+ role: z.ZodEnum<{
113
+ user: "user";
114
+ assistant: "assistant";
115
+ }>;
116
+ text: z.ZodString;
117
+ chips: z.ZodDefault<z.ZodArray<z.ZodString>>;
118
+ }, z.core.$strip>;
119
+ export declare const DemoSceneSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
120
+ id: z.ZodString;
121
+ durationMs: z.ZodNumber;
122
+ caption: z.ZodOptional<z.ZodObject<{
123
+ title: z.ZodString;
124
+ sub: z.ZodOptional<z.ZodString>;
125
+ }, z.core.$strip>>;
126
+ narrationHint: z.ZodOptional<z.ZodString>;
127
+ type: z.ZodLiteral<"problem">;
128
+ headline: z.ZodString;
129
+ motifs: z.ZodDefault<z.ZodArray<z.ZodString>>;
130
+ }, z.core.$strip>, z.ZodObject<{
131
+ id: z.ZodString;
132
+ durationMs: z.ZodNumber;
133
+ caption: z.ZodOptional<z.ZodObject<{
134
+ title: z.ZodString;
135
+ sub: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strip>>;
137
+ narrationHint: z.ZodOptional<z.ZodString>;
138
+ type: z.ZodLiteral<"logoReveal">;
139
+ tagline: z.ZodOptional<z.ZodString>;
140
+ }, z.core.$strip>, z.ZodObject<{
141
+ id: z.ZodString;
142
+ durationMs: z.ZodNumber;
143
+ caption: z.ZodOptional<z.ZodObject<{
144
+ title: z.ZodString;
145
+ sub: z.ZodOptional<z.ZodString>;
146
+ }, z.core.$strip>>;
147
+ narrationHint: z.ZodOptional<z.ZodString>;
148
+ type: z.ZodLiteral<"featureShowcase">;
149
+ title: z.ZodString;
150
+ surface: z.ZodDefault<z.ZodEnum<{
151
+ detail: "detail";
152
+ search: "search";
153
+ table: "table";
154
+ form: "form";
155
+ chat: "chat";
156
+ editor: "editor";
157
+ analysis: "analysis";
158
+ marketplace: "marketplace";
159
+ dashboard: "dashboard";
160
+ }>>;
161
+ cursorTypes: z.ZodOptional<z.ZodString>;
162
+ activeNav: z.ZodOptional<z.ZodString>;
163
+ cards: z.ZodDefault<z.ZodArray<z.ZodObject<{
164
+ title: z.ZodString;
165
+ subtitle: z.ZodOptional<z.ZodString>;
166
+ badge: z.ZodOptional<z.ZodString>;
167
+ badgeKind: z.ZodOptional<z.ZodEnum<{
168
+ warning: "warning";
169
+ neutral: "neutral";
170
+ positive: "positive";
171
+ danger: "danger";
172
+ }>>;
173
+ icon: z.ZodOptional<z.ZodString>;
174
+ }, z.core.$strip>>>;
175
+ screenshotUrl: z.ZodOptional<z.ZodString>;
176
+ }, z.core.$strip>, z.ZodObject<{
177
+ id: z.ZodString;
178
+ durationMs: z.ZodNumber;
179
+ caption: z.ZodOptional<z.ZodObject<{
180
+ title: z.ZodString;
181
+ sub: z.ZodOptional<z.ZodString>;
182
+ }, z.core.$strip>>;
183
+ narrationHint: z.ZodOptional<z.ZodString>;
184
+ type: z.ZodLiteral<"splitFeature">;
185
+ headline: z.ZodString;
186
+ body: z.ZodOptional<z.ZodString>;
187
+ stepLabel: z.ZodOptional<z.ZodString>;
188
+ side: z.ZodDefault<z.ZodEnum<{
189
+ left: "left";
190
+ right: "right";
191
+ }>>;
192
+ screenshotUrl: z.ZodOptional<z.ZodString>;
193
+ cards: z.ZodDefault<z.ZodArray<z.ZodObject<{
194
+ title: z.ZodString;
195
+ subtitle: z.ZodOptional<z.ZodString>;
196
+ badge: z.ZodOptional<z.ZodString>;
197
+ badgeKind: z.ZodOptional<z.ZodEnum<{
198
+ warning: "warning";
199
+ neutral: "neutral";
200
+ positive: "positive";
201
+ danger: "danger";
202
+ }>>;
203
+ icon: z.ZodOptional<z.ZodString>;
204
+ }, z.core.$strip>>>;
205
+ }, z.core.$strip>, z.ZodObject<{
206
+ id: z.ZodString;
207
+ durationMs: z.ZodNumber;
208
+ caption: z.ZodOptional<z.ZodObject<{
209
+ title: z.ZodString;
210
+ sub: z.ZodOptional<z.ZodString>;
211
+ }, z.core.$strip>>;
212
+ narrationHint: z.ZodOptional<z.ZodString>;
213
+ type: z.ZodLiteral<"bigStatement">;
214
+ lines: z.ZodArray<z.ZodString>;
215
+ kicker: z.ZodOptional<z.ZodString>;
216
+ }, z.core.$strip>, z.ZodObject<{
217
+ id: z.ZodString;
218
+ durationMs: z.ZodNumber;
219
+ caption: z.ZodOptional<z.ZodObject<{
220
+ title: z.ZodString;
221
+ sub: z.ZodOptional<z.ZodString>;
222
+ }, z.core.$strip>>;
223
+ narrationHint: z.ZodOptional<z.ZodString>;
224
+ type: z.ZodLiteral<"deviceMockup">;
225
+ device: z.ZodDefault<z.ZodEnum<{
226
+ phone: "phone";
227
+ browser: "browser";
228
+ laptop: "laptop";
229
+ tablet: "tablet";
230
+ }>>;
231
+ screenshotUrls: z.ZodArray<z.ZodString>;
232
+ motion: z.ZodDefault<z.ZodEnum<{
233
+ parallax: "parallax";
234
+ scroll: "scroll";
235
+ tilt: "tilt";
236
+ "zoom-in": "zoom-in";
237
+ orbit: "orbit";
238
+ }>>;
239
+ headline: z.ZodOptional<z.ZodString>;
240
+ }, z.core.$strip>, z.ZodObject<{
241
+ id: z.ZodString;
242
+ durationMs: z.ZodNumber;
243
+ caption: z.ZodOptional<z.ZodObject<{
244
+ title: z.ZodString;
245
+ sub: z.ZodOptional<z.ZodString>;
246
+ }, z.core.$strip>>;
247
+ narrationHint: z.ZodOptional<z.ZodString>;
248
+ type: z.ZodLiteral<"chat">;
249
+ title: z.ZodDefault<z.ZodString>;
250
+ turns: z.ZodArray<z.ZodObject<{
251
+ role: z.ZodEnum<{
252
+ user: "user";
253
+ assistant: "assistant";
254
+ }>;
255
+ text: z.ZodString;
256
+ chips: z.ZodDefault<z.ZodArray<z.ZodString>>;
257
+ }, z.core.$strip>>;
258
+ }, z.core.$strip>, z.ZodObject<{
259
+ id: z.ZodString;
260
+ durationMs: z.ZodNumber;
261
+ caption: z.ZodOptional<z.ZodObject<{
262
+ title: z.ZodString;
263
+ sub: z.ZodOptional<z.ZodString>;
264
+ }, z.core.$strip>>;
265
+ narrationHint: z.ZodOptional<z.ZodString>;
266
+ type: z.ZodLiteral<"dashboard">;
267
+ title: z.ZodString;
268
+ stats: z.ZodDefault<z.ZodArray<z.ZodObject<{
269
+ label: z.ZodString;
270
+ value: z.ZodOptional<z.ZodNumber>;
271
+ valueText: z.ZodOptional<z.ZodString>;
272
+ suffix: z.ZodOptional<z.ZodString>;
273
+ icon: z.ZodOptional<z.ZodString>;
274
+ }, z.core.$strip>>>;
275
+ chart: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
276
+ }, z.core.$strip>, z.ZodObject<{
277
+ id: z.ZodString;
278
+ durationMs: z.ZodNumber;
279
+ caption: z.ZodOptional<z.ZodObject<{
280
+ title: z.ZodString;
281
+ sub: z.ZodOptional<z.ZodString>;
282
+ }, z.core.$strip>>;
283
+ narrationHint: z.ZodOptional<z.ZodString>;
284
+ type: z.ZodLiteral<"docAnalysis">;
285
+ title: z.ZodString;
286
+ insights: z.ZodDefault<z.ZodArray<z.ZodObject<{
287
+ title: z.ZodString;
288
+ subtitle: z.ZodOptional<z.ZodString>;
289
+ badge: z.ZodOptional<z.ZodString>;
290
+ badgeKind: z.ZodOptional<z.ZodEnum<{
291
+ warning: "warning";
292
+ neutral: "neutral";
293
+ positive: "positive";
294
+ danger: "danger";
295
+ }>>;
296
+ icon: z.ZodOptional<z.ZodString>;
297
+ }, z.core.$strip>>>;
298
+ }, z.core.$strip>, z.ZodObject<{
299
+ id: z.ZodString;
300
+ durationMs: z.ZodNumber;
301
+ caption: z.ZodOptional<z.ZodObject<{
302
+ title: z.ZodString;
303
+ sub: z.ZodOptional<z.ZodString>;
304
+ }, z.core.$strip>>;
305
+ narrationHint: z.ZodOptional<z.ZodString>;
306
+ type: z.ZodLiteral<"cardGrid">;
307
+ title: z.ZodString;
308
+ cards: z.ZodArray<z.ZodObject<{
309
+ title: z.ZodString;
310
+ subtitle: z.ZodOptional<z.ZodString>;
311
+ badge: z.ZodOptional<z.ZodString>;
312
+ badgeKind: z.ZodOptional<z.ZodEnum<{
313
+ warning: "warning";
314
+ neutral: "neutral";
315
+ positive: "positive";
316
+ danger: "danger";
317
+ }>>;
318
+ icon: z.ZodOptional<z.ZodString>;
319
+ }, z.core.$strip>>;
320
+ }, z.core.$strip>, z.ZodObject<{
321
+ id: z.ZodString;
322
+ durationMs: z.ZodNumber;
323
+ caption: z.ZodOptional<z.ZodObject<{
324
+ title: z.ZodString;
325
+ sub: z.ZodOptional<z.ZodString>;
326
+ }, z.core.$strip>>;
327
+ narrationHint: z.ZodOptional<z.ZodString>;
328
+ type: z.ZodLiteral<"stats">;
329
+ headline: z.ZodOptional<z.ZodString>;
330
+ stats: z.ZodArray<z.ZodObject<{
331
+ label: z.ZodString;
332
+ value: z.ZodOptional<z.ZodNumber>;
333
+ valueText: z.ZodOptional<z.ZodString>;
334
+ suffix: z.ZodOptional<z.ZodString>;
335
+ icon: z.ZodOptional<z.ZodString>;
336
+ }, z.core.$strip>>;
337
+ }, z.core.$strip>, z.ZodObject<{
338
+ id: z.ZodString;
339
+ durationMs: z.ZodNumber;
340
+ caption: z.ZodOptional<z.ZodObject<{
341
+ title: z.ZodString;
342
+ sub: z.ZodOptional<z.ZodString>;
343
+ }, z.core.$strip>>;
344
+ narrationHint: z.ZodOptional<z.ZodString>;
345
+ type: z.ZodLiteral<"cta">;
346
+ headline: z.ZodString;
347
+ buttonText: z.ZodDefault<z.ZodString>;
348
+ url: z.ZodOptional<z.ZodString>;
349
+ stats: z.ZodDefault<z.ZodArray<z.ZodObject<{
350
+ label: z.ZodString;
351
+ value: z.ZodOptional<z.ZodNumber>;
352
+ valueText: z.ZodOptional<z.ZodString>;
353
+ suffix: z.ZodOptional<z.ZodString>;
354
+ icon: z.ZodOptional<z.ZodString>;
355
+ }, z.core.$strip>>>;
356
+ }, z.core.$strip>, z.ZodObject<{
357
+ id: z.ZodString;
358
+ durationMs: z.ZodNumber;
359
+ caption: z.ZodOptional<z.ZodObject<{
360
+ title: z.ZodString;
361
+ sub: z.ZodOptional<z.ZodString>;
362
+ }, z.core.$strip>>;
363
+ narrationHint: z.ZodOptional<z.ZodString>;
364
+ type: z.ZodLiteral<"custom">;
365
+ tsx: z.ZodString;
366
+ props: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
367
+ }, z.core.$strip>], "type">;
368
+ export type DemoScene = z.infer<typeof DemoSceneSchema>;
369
+ export type DemoSceneType = DemoScene["type"];
370
+ export declare const DemoSpecSchema: z.ZodObject<{
371
+ schemaVersion: z.ZodDefault<z.ZodLiteral<1>>;
372
+ productName: z.ZodString;
373
+ tagline: z.ZodOptional<z.ZodString>;
374
+ brand: z.ZodObject<{
375
+ identity: z.ZodDefault<z.ZodObject<{
376
+ brandName: z.ZodOptional<z.ZodString>;
377
+ wordmark: z.ZodOptional<z.ZodString>;
378
+ logoUrl: z.ZodOptional<z.ZodString>;
379
+ }, z.core.$strip>>;
380
+ colors: z.ZodDefault<z.ZodObject<{
381
+ primary: z.ZodOptional<z.ZodString>;
382
+ secondary: z.ZodOptional<z.ZodString>;
383
+ accent: z.ZodOptional<z.ZodString>;
384
+ palette: z.ZodDefault<z.ZodArray<z.ZodString>>;
385
+ }, z.core.$strip>>;
386
+ fonts: z.ZodDefault<z.ZodObject<{
387
+ heading: z.ZodOptional<z.ZodString>;
388
+ body: z.ZodOptional<z.ZodString>;
389
+ }, z.core.$strip>>;
390
+ }, z.core.$strip>;
391
+ style: z.ZodDefault<z.ZodObject<{
392
+ visual: z.ZodDefault<z.ZodEnum<{
393
+ cinematic: "cinematic";
394
+ "clean-ui-walkthrough": "clean-ui-walkthrough";
395
+ "split-headline": "split-headline";
396
+ "kinetic-typography": "kinetic-typography";
397
+ "minimal-calm": "minimal-calm";
398
+ "energetic-punchy": "energetic-punchy";
399
+ }>>;
400
+ pace: z.ZodDefault<z.ZodEnum<{
401
+ medium: "medium";
402
+ fast: "fast";
403
+ slow: "slow";
404
+ }>>;
405
+ colorMood: z.ZodDefault<z.ZodEnum<{
406
+ dark: "dark";
407
+ light: "light";
408
+ "brand-forward": "brand-forward";
409
+ }>>;
410
+ audioIntent: z.ZodDefault<z.ZodEnum<{
411
+ music: "music";
412
+ voiceover: "voiceover";
413
+ captions: "captions";
414
+ }>>;
415
+ motion: z.ZodDefault<z.ZodEnum<{
416
+ subtle: "subtle";
417
+ balanced: "balanced";
418
+ dynamic: "dynamic";
419
+ }>>;
420
+ }, z.core.$strip>>;
421
+ aspect: z.ZodDefault<z.ZodEnum<{
422
+ "9:16": "9:16";
423
+ "1:1": "1:1";
424
+ "4:5": "4:5";
425
+ "16:9": "16:9";
426
+ }>>;
427
+ fps: z.ZodDefault<z.ZodNumber>;
428
+ narrative: z.ZodDefault<z.ZodEnum<{
429
+ "problem-solution": "problem-solution";
430
+ "feature-showcase": "feature-showcase";
431
+ "day-in-the-life": "day-in-the-life";
432
+ "hero-workflow": "hero-workflow";
433
+ "value-prop": "value-prop";
434
+ }>>;
435
+ audience: z.ZodOptional<z.ZodString>;
436
+ scenes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
437
+ id: z.ZodString;
438
+ durationMs: z.ZodNumber;
439
+ caption: z.ZodOptional<z.ZodObject<{
440
+ title: z.ZodString;
441
+ sub: z.ZodOptional<z.ZodString>;
442
+ }, z.core.$strip>>;
443
+ narrationHint: z.ZodOptional<z.ZodString>;
444
+ type: z.ZodLiteral<"problem">;
445
+ headline: z.ZodString;
446
+ motifs: z.ZodDefault<z.ZodArray<z.ZodString>>;
447
+ }, z.core.$strip>, z.ZodObject<{
448
+ id: z.ZodString;
449
+ durationMs: z.ZodNumber;
450
+ caption: z.ZodOptional<z.ZodObject<{
451
+ title: z.ZodString;
452
+ sub: z.ZodOptional<z.ZodString>;
453
+ }, z.core.$strip>>;
454
+ narrationHint: z.ZodOptional<z.ZodString>;
455
+ type: z.ZodLiteral<"logoReveal">;
456
+ tagline: z.ZodOptional<z.ZodString>;
457
+ }, z.core.$strip>, z.ZodObject<{
458
+ id: z.ZodString;
459
+ durationMs: z.ZodNumber;
460
+ caption: z.ZodOptional<z.ZodObject<{
461
+ title: z.ZodString;
462
+ sub: z.ZodOptional<z.ZodString>;
463
+ }, z.core.$strip>>;
464
+ narrationHint: z.ZodOptional<z.ZodString>;
465
+ type: z.ZodLiteral<"featureShowcase">;
466
+ title: z.ZodString;
467
+ surface: z.ZodDefault<z.ZodEnum<{
468
+ detail: "detail";
469
+ search: "search";
470
+ table: "table";
471
+ form: "form";
472
+ chat: "chat";
473
+ editor: "editor";
474
+ analysis: "analysis";
475
+ marketplace: "marketplace";
476
+ dashboard: "dashboard";
477
+ }>>;
478
+ cursorTypes: z.ZodOptional<z.ZodString>;
479
+ activeNav: z.ZodOptional<z.ZodString>;
480
+ cards: z.ZodDefault<z.ZodArray<z.ZodObject<{
481
+ title: z.ZodString;
482
+ subtitle: z.ZodOptional<z.ZodString>;
483
+ badge: z.ZodOptional<z.ZodString>;
484
+ badgeKind: z.ZodOptional<z.ZodEnum<{
485
+ warning: "warning";
486
+ neutral: "neutral";
487
+ positive: "positive";
488
+ danger: "danger";
489
+ }>>;
490
+ icon: z.ZodOptional<z.ZodString>;
491
+ }, z.core.$strip>>>;
492
+ screenshotUrl: z.ZodOptional<z.ZodString>;
493
+ }, z.core.$strip>, z.ZodObject<{
494
+ id: z.ZodString;
495
+ durationMs: z.ZodNumber;
496
+ caption: z.ZodOptional<z.ZodObject<{
497
+ title: z.ZodString;
498
+ sub: z.ZodOptional<z.ZodString>;
499
+ }, z.core.$strip>>;
500
+ narrationHint: z.ZodOptional<z.ZodString>;
501
+ type: z.ZodLiteral<"splitFeature">;
502
+ headline: z.ZodString;
503
+ body: z.ZodOptional<z.ZodString>;
504
+ stepLabel: z.ZodOptional<z.ZodString>;
505
+ side: z.ZodDefault<z.ZodEnum<{
506
+ left: "left";
507
+ right: "right";
508
+ }>>;
509
+ screenshotUrl: z.ZodOptional<z.ZodString>;
510
+ cards: z.ZodDefault<z.ZodArray<z.ZodObject<{
511
+ title: z.ZodString;
512
+ subtitle: z.ZodOptional<z.ZodString>;
513
+ badge: z.ZodOptional<z.ZodString>;
514
+ badgeKind: z.ZodOptional<z.ZodEnum<{
515
+ warning: "warning";
516
+ neutral: "neutral";
517
+ positive: "positive";
518
+ danger: "danger";
519
+ }>>;
520
+ icon: z.ZodOptional<z.ZodString>;
521
+ }, z.core.$strip>>>;
522
+ }, z.core.$strip>, z.ZodObject<{
523
+ id: z.ZodString;
524
+ durationMs: z.ZodNumber;
525
+ caption: z.ZodOptional<z.ZodObject<{
526
+ title: z.ZodString;
527
+ sub: z.ZodOptional<z.ZodString>;
528
+ }, z.core.$strip>>;
529
+ narrationHint: z.ZodOptional<z.ZodString>;
530
+ type: z.ZodLiteral<"bigStatement">;
531
+ lines: z.ZodArray<z.ZodString>;
532
+ kicker: z.ZodOptional<z.ZodString>;
533
+ }, z.core.$strip>, z.ZodObject<{
534
+ id: z.ZodString;
535
+ durationMs: z.ZodNumber;
536
+ caption: z.ZodOptional<z.ZodObject<{
537
+ title: z.ZodString;
538
+ sub: z.ZodOptional<z.ZodString>;
539
+ }, z.core.$strip>>;
540
+ narrationHint: z.ZodOptional<z.ZodString>;
541
+ type: z.ZodLiteral<"deviceMockup">;
542
+ device: z.ZodDefault<z.ZodEnum<{
543
+ phone: "phone";
544
+ browser: "browser";
545
+ laptop: "laptop";
546
+ tablet: "tablet";
547
+ }>>;
548
+ screenshotUrls: z.ZodArray<z.ZodString>;
549
+ motion: z.ZodDefault<z.ZodEnum<{
550
+ parallax: "parallax";
551
+ scroll: "scroll";
552
+ tilt: "tilt";
553
+ "zoom-in": "zoom-in";
554
+ orbit: "orbit";
555
+ }>>;
556
+ headline: z.ZodOptional<z.ZodString>;
557
+ }, z.core.$strip>, z.ZodObject<{
558
+ id: z.ZodString;
559
+ durationMs: z.ZodNumber;
560
+ caption: z.ZodOptional<z.ZodObject<{
561
+ title: z.ZodString;
562
+ sub: z.ZodOptional<z.ZodString>;
563
+ }, z.core.$strip>>;
564
+ narrationHint: z.ZodOptional<z.ZodString>;
565
+ type: z.ZodLiteral<"chat">;
566
+ title: z.ZodDefault<z.ZodString>;
567
+ turns: z.ZodArray<z.ZodObject<{
568
+ role: z.ZodEnum<{
569
+ user: "user";
570
+ assistant: "assistant";
571
+ }>;
572
+ text: z.ZodString;
573
+ chips: z.ZodDefault<z.ZodArray<z.ZodString>>;
574
+ }, z.core.$strip>>;
575
+ }, z.core.$strip>, z.ZodObject<{
576
+ id: z.ZodString;
577
+ durationMs: z.ZodNumber;
578
+ caption: z.ZodOptional<z.ZodObject<{
579
+ title: z.ZodString;
580
+ sub: z.ZodOptional<z.ZodString>;
581
+ }, z.core.$strip>>;
582
+ narrationHint: z.ZodOptional<z.ZodString>;
583
+ type: z.ZodLiteral<"dashboard">;
584
+ title: z.ZodString;
585
+ stats: z.ZodDefault<z.ZodArray<z.ZodObject<{
586
+ label: z.ZodString;
587
+ value: z.ZodOptional<z.ZodNumber>;
588
+ valueText: z.ZodOptional<z.ZodString>;
589
+ suffix: z.ZodOptional<z.ZodString>;
590
+ icon: z.ZodOptional<z.ZodString>;
591
+ }, z.core.$strip>>>;
592
+ chart: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
593
+ }, z.core.$strip>, z.ZodObject<{
594
+ id: z.ZodString;
595
+ durationMs: z.ZodNumber;
596
+ caption: z.ZodOptional<z.ZodObject<{
597
+ title: z.ZodString;
598
+ sub: z.ZodOptional<z.ZodString>;
599
+ }, z.core.$strip>>;
600
+ narrationHint: z.ZodOptional<z.ZodString>;
601
+ type: z.ZodLiteral<"docAnalysis">;
602
+ title: z.ZodString;
603
+ insights: z.ZodDefault<z.ZodArray<z.ZodObject<{
604
+ title: z.ZodString;
605
+ subtitle: z.ZodOptional<z.ZodString>;
606
+ badge: z.ZodOptional<z.ZodString>;
607
+ badgeKind: z.ZodOptional<z.ZodEnum<{
608
+ warning: "warning";
609
+ neutral: "neutral";
610
+ positive: "positive";
611
+ danger: "danger";
612
+ }>>;
613
+ icon: z.ZodOptional<z.ZodString>;
614
+ }, z.core.$strip>>>;
615
+ }, z.core.$strip>, z.ZodObject<{
616
+ id: z.ZodString;
617
+ durationMs: z.ZodNumber;
618
+ caption: z.ZodOptional<z.ZodObject<{
619
+ title: z.ZodString;
620
+ sub: z.ZodOptional<z.ZodString>;
621
+ }, z.core.$strip>>;
622
+ narrationHint: z.ZodOptional<z.ZodString>;
623
+ type: z.ZodLiteral<"cardGrid">;
624
+ title: z.ZodString;
625
+ cards: z.ZodArray<z.ZodObject<{
626
+ title: z.ZodString;
627
+ subtitle: z.ZodOptional<z.ZodString>;
628
+ badge: z.ZodOptional<z.ZodString>;
629
+ badgeKind: z.ZodOptional<z.ZodEnum<{
630
+ warning: "warning";
631
+ neutral: "neutral";
632
+ positive: "positive";
633
+ danger: "danger";
634
+ }>>;
635
+ icon: z.ZodOptional<z.ZodString>;
636
+ }, z.core.$strip>>;
637
+ }, z.core.$strip>, z.ZodObject<{
638
+ id: z.ZodString;
639
+ durationMs: z.ZodNumber;
640
+ caption: z.ZodOptional<z.ZodObject<{
641
+ title: z.ZodString;
642
+ sub: z.ZodOptional<z.ZodString>;
643
+ }, z.core.$strip>>;
644
+ narrationHint: z.ZodOptional<z.ZodString>;
645
+ type: z.ZodLiteral<"stats">;
646
+ headline: z.ZodOptional<z.ZodString>;
647
+ stats: z.ZodArray<z.ZodObject<{
648
+ label: z.ZodString;
649
+ value: z.ZodOptional<z.ZodNumber>;
650
+ valueText: z.ZodOptional<z.ZodString>;
651
+ suffix: z.ZodOptional<z.ZodString>;
652
+ icon: z.ZodOptional<z.ZodString>;
653
+ }, z.core.$strip>>;
654
+ }, z.core.$strip>, z.ZodObject<{
655
+ id: z.ZodString;
656
+ durationMs: z.ZodNumber;
657
+ caption: z.ZodOptional<z.ZodObject<{
658
+ title: z.ZodString;
659
+ sub: z.ZodOptional<z.ZodString>;
660
+ }, z.core.$strip>>;
661
+ narrationHint: z.ZodOptional<z.ZodString>;
662
+ type: z.ZodLiteral<"cta">;
663
+ headline: z.ZodString;
664
+ buttonText: z.ZodDefault<z.ZodString>;
665
+ url: z.ZodOptional<z.ZodString>;
666
+ stats: z.ZodDefault<z.ZodArray<z.ZodObject<{
667
+ label: z.ZodString;
668
+ value: z.ZodOptional<z.ZodNumber>;
669
+ valueText: z.ZodOptional<z.ZodString>;
670
+ suffix: z.ZodOptional<z.ZodString>;
671
+ icon: z.ZodOptional<z.ZodString>;
672
+ }, z.core.$strip>>>;
673
+ }, z.core.$strip>, z.ZodObject<{
674
+ id: z.ZodString;
675
+ durationMs: z.ZodNumber;
676
+ caption: z.ZodOptional<z.ZodObject<{
677
+ title: z.ZodString;
678
+ sub: z.ZodOptional<z.ZodString>;
679
+ }, z.core.$strip>>;
680
+ narrationHint: z.ZodOptional<z.ZodString>;
681
+ type: z.ZodLiteral<"custom">;
682
+ tsx: z.ZodString;
683
+ props: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
684
+ }, z.core.$strip>], "type">>;
685
+ }, z.core.$strip>;
686
+ export type DemoSpec = z.infer<typeof DemoSpecSchema>;
687
+ /** Sum of scene durations — the canonical total timeline length in ms. */
688
+ export declare function demoSpecDurationMs(spec: Pick<DemoSpec, "scenes">): number;
689
+ //# sourceMappingURL=demoSpec.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demoSpec.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/demoSpec.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAC;AAMnD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;iBAI1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AASxD,uCAAuC;AACvC,eAAO,MAAM,iBAAiB;;;;;;;EAO5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAiBH,gEAAgE;AAChE,eAAO,MAAM,UAAU;;;;;;iBAOrB,CAAC;AAEH,gEAAgE;AAChE,eAAO,MAAM,cAAc;;;;;;;;;;;iBAMzB,CAAC;AAEH,qDAAqD;AACrD,eAAO,MAAM,cAAc;;;;;;;iBAKzB,CAAC;AA0IH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAc1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAI9C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,CAEzE"}