@vanillaskyai/video 0.8.8 → 0.9.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.
Files changed (175) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/PUBLIC-API.md +5 -8
  3. package/dist/{builtin-server-CUYPIDE7.js → builtin-server-HW6HGXCZ.js} +2 -2
  4. package/dist/{catalog-types-BIhSpOWK.d.ts → catalog-types-WTbLP6Jh.d.ts} +5 -1
  5. package/dist/chapter-title-YRLIQY3V.js +7 -0
  6. package/dist/check-runtime.js +6 -15
  7. package/dist/{chunk-2USVB3CY.js → chunk-3ZTEFJIR.js} +285 -178
  8. package/dist/chunk-4YM2M62S.js +13 -0
  9. package/dist/chunk-77VY4O7A.js +390 -0
  10. package/dist/{chunk-MMUXVA47.js → chunk-7M56IUUX.js} +9 -8
  11. package/dist/chunk-7NZOMTAL.js +63 -0
  12. package/dist/{chunk-2DOLF4QN.js → chunk-AUPC6MDK.js} +12 -14
  13. package/dist/{chunk-352ZZCET.js → chunk-EGVQODKU.js} +2 -2
  14. package/dist/chunk-EWWCQFTI.js +18 -0
  15. package/dist/{chunk-MXZSDGZQ.js → chunk-G7IZBBWF.js} +14 -9
  16. package/dist/{chunk-KT3M7KDL.js → chunk-HKUI5BTB.js} +3 -3
  17. package/dist/{chunk-LMG3GHLL.js → chunk-IQMYK5DX.js} +29 -3
  18. package/dist/chunk-LH4BPALA.js +564 -0
  19. package/dist/{chunk-OWBT45EN.js → chunk-MQILEEXC.js} +1 -1
  20. package/dist/chunk-MXEYPK7M.js +552 -0
  21. package/dist/{chunk-AITKH6QT.js → chunk-OR52UMSF.js} +13 -39
  22. package/dist/{chunk-5SLENAJW.js → chunk-PAJ44TFW.js} +1 -2
  23. package/dist/{chunk-L7QGGKJ2.js → chunk-PDQFQIQW.js} +1 -1
  24. package/dist/{chunk-WJ6FLKNC.js → chunk-R3XAOMKP.js} +14 -0
  25. package/dist/{chunk-2OKB27TG.js → chunk-RXTN2CW6.js} +2 -2
  26. package/dist/{chunk-XWWLKRNU.js → chunk-TVIU23OM.js} +38 -49
  27. package/dist/{chunk-224QNWRA.js → chunk-UDIODEDK.js} +1 -5
  28. package/dist/{chunk-3VRMKFM7.js → chunk-ZDJNFA52.js} +11 -24
  29. package/dist/cinema-media-YQHSIFDA.js +11 -0
  30. package/dist/cli.js +18 -9
  31. package/dist/comparison-RZMMHZR2.js +27 -0
  32. package/dist/compose-video-TBFTONUC.js +12 -0
  33. package/dist/editorial-timeline-OZX7OS6G.js +36 -0
  34. package/dist/{events-BQ6z264n.d.ts → events-B4YCc4vc.d.ts} +1 -1
  35. package/dist/focus-cards-TJ72BT7U.js +20 -0
  36. package/dist/index.d.ts +4 -6
  37. package/dist/index.js +3 -7
  38. package/dist/key-figure-GYENXKH3.js +20 -0
  39. package/dist/{kit-tQnCPMOM.d.ts → kit-DrRpdn0p.d.ts} +2 -2
  40. package/dist/mobile-message-UZUPIKHD.js +49 -0
  41. package/dist/{preload-media-LJXWKTWG.js → preload-media-CFTZIMZL.js} +1 -1
  42. package/dist/quote-EW5HQA6H.js +23 -0
  43. package/dist/react.d.ts +21 -11
  44. package/dist/react.js +590 -833
  45. package/dist/scene-video-backdrop-PCTARAAJ.js +7 -0
  46. package/dist/server.d.ts +7 -8
  47. package/dist/server.js +91 -74
  48. package/dist/{system-prompt-RRXIWDDD.js → system-prompt-SYRT5DWM.js} +1 -1
  49. package/dist/template-catalog.d.ts +257 -16
  50. package/dist/template-catalog.js +1 -1
  51. package/dist/templates.d.ts +5 -5
  52. package/dist/test.d.ts +3 -3
  53. package/dist/test.js +18 -18
  54. package/dist/text-stream-LD364KBI.js +9 -0
  55. package/dist/{types-DWFO6qca.d.ts → types-CdBmNTGD.d.ts} +1 -1
  56. package/dist/{types-CEh9eUFu.d.ts → types-DdZw4GRQ.d.ts} +17 -48
  57. package/dist/validate-4OUD2CLX.js +10 -0
  58. package/docs/architecture.md +1 -1
  59. package/docs/concepts.md +1 -1
  60. package/docs/custom-templates.md +13 -28
  61. package/docs/customization.md +11 -59
  62. package/docs/getting-started.md +2 -2
  63. package/docs/immersive-interface.md +3 -4
  64. package/docs/maintainers/cinematic-migration.md +34 -0
  65. package/docs/media-and-audio.md +14 -14
  66. package/docs/motion-and-effects.md +6 -14
  67. package/docs/persistence.md +3 -3
  68. package/docs/production.md +11 -9
  69. package/docs/provider-integration.md +9 -16
  70. package/docs/reference/design-system.html +1 -1
  71. package/docs/reference/protocol.md +14 -4
  72. package/docs/testing.md +1 -1
  73. package/package.json +6 -3
  74. package/registry/items/backgrounds.json +1 -1
  75. package/registry/items/chapterTitle.json +80 -0
  76. package/registry/items/cinemaMedia.json +136 -0
  77. package/registry/items/comparison.json +101 -0
  78. package/registry/items/editorialTimeline.json +105 -0
  79. package/registry/items/focusCards.json +90 -0
  80. package/registry/items/keyFigure.json +97 -0
  81. package/registry/items/mobileMessage.json +153 -0
  82. package/registry/items/quote.json +94 -0
  83. package/registry/items/template-context.json +1 -1
  84. package/registry/items/theme.json +1 -1
  85. package/starters/video-chat/README.md +24 -26
  86. package/starters/video-chat/package.json +1 -1
  87. package/starters/video-chat/providers/video.ts +6 -5
  88. package/starters/video-chat/stock.ts +35 -151
  89. package/styles/fonts/OFL.txt +93 -0
  90. package/styles/fonts/manifest.json +66 -0
  91. package/styles/fonts/roboto-v51-cyrillic-ext.woff2 +0 -0
  92. package/styles/fonts/roboto-v51-cyrillic.woff2 +0 -0
  93. package/styles/fonts/roboto-v51-greek-ext.woff2 +0 -0
  94. package/styles/fonts/roboto-v51-greek.woff2 +0 -0
  95. package/styles/fonts/roboto-v51-latin-ext.woff2 +0 -0
  96. package/styles/fonts/roboto-v51-latin.woff2 +0 -0
  97. package/styles/fonts/roboto-v51-math.woff2 +0 -0
  98. package/styles/fonts/roboto-v51-symbols.woff2 +0 -0
  99. package/styles/fonts/roboto-v51-vietnamese.woff2 +0 -0
  100. package/styles/fonts/roboto.css +91 -0
  101. package/styles/video-chat.css +30 -22
  102. package/dist/bg-confetti-HITCGLGD.js +0 -89
  103. package/dist/bg-emoji-VU4UZYZN.js +0 -150
  104. package/dist/bg-media-L34PDQXJ.js +0 -106
  105. package/dist/brand-message-FUJ4STFO.js +0 -256
  106. package/dist/chart-bar-EGPHJATL.js +0 -310
  107. package/dist/chart-counter-5FFWQNZO.js +0 -306
  108. package/dist/chart-progress-ring-JMXQLMLC.js +0 -302
  109. package/dist/chunk-4UNKZEAT.js +0 -3575
  110. package/dist/chunk-5CDAM24P.js +0 -31
  111. package/dist/chunk-AOWSXU2K.js +0 -18
  112. package/dist/chunk-CJ7F2CE6.js +0 -104
  113. package/dist/chunk-FRN6WKHA.js +0 -185
  114. package/dist/chunk-G5JPHBX7.js +0 -336
  115. package/dist/chunk-L5BTTCZV.js +0 -97
  116. package/dist/chunk-P22HHFDK.js +0 -43
  117. package/dist/chunk-PP3MCPN4.js +0 -1998
  118. package/dist/chunk-QAAO7OAY.js +0 -19
  119. package/dist/chunk-S7HFLYNN.js +0 -35
  120. package/dist/chunk-W3VDIBGR.js +0 -217
  121. package/dist/chunk-XGRA2MUV.js +0 -242
  122. package/dist/chunk-XTOXFMLM.js +0 -105
  123. package/dist/chunk-YJJC4N4D.js +0 -761
  124. package/dist/compose-video-2NFH4DZY.js +0 -13
  125. package/dist/cta-logo-YR7LYUR5.js +0 -212
  126. package/dist/cta-media-DQJBKUO2.js +0 -221
  127. package/dist/incoming-call-54KQ7O5A.js +0 -323
  128. package/dist/infographic-before-after-ROS52GOW.js +0 -460
  129. package/dist/infographic-feature-list-E7MGUDAN.js +0 -272
  130. package/dist/infographic-problem-solution-3S6NGO5N.js +0 -343
  131. package/dist/infographic-stat-row-SYB7AB7H.js +0 -247
  132. package/dist/infographic-steps-KCE6JWE2.js +0 -406
  133. package/dist/prompt-input-MHX4O42G.js +0 -239
  134. package/dist/reaction-SLEGR3BE.js +0 -122
  135. package/dist/scene-video-backdrop-XFPX4O3I.js +0 -10
  136. package/dist/showcase-code-2HLAVKBM.js +0 -357
  137. package/dist/showcase-phone-Q4HEO4LH.js +0 -278
  138. package/dist/showcase-terminal-DL45LUFG.js +0 -312
  139. package/dist/showcase-web-2QZO73FZ.js +0 -396
  140. package/dist/social-conversation-75SD2637.js +0 -695
  141. package/dist/social-milestone-GEFUQSBF.js +0 -296
  142. package/dist/social-notification-FJ5VHVLK.js +0 -247
  143. package/dist/social-review-stack-KXQCKFRP.js +0 -242
  144. package/dist/social-testimonial-JZ7CHC7S.js +0 -287
  145. package/dist/social-tweet-UCDXM25F.js +0 -298
  146. package/dist/text-stream-54LXABJW.js +0 -10
  147. package/dist/validate-T7GBU2YF.js +0 -8
  148. package/registry/items/barChart.json +0 -245
  149. package/registry/items/beforeAfter.json +0 -180
  150. package/registry/items/bigNumber.json +0 -232
  151. package/registry/items/brandMessage.json +0 -164
  152. package/registry/items/cardList.json +0 -214
  153. package/registry/items/chatMessenger.json +0 -151
  154. package/registry/items/chatWhatsapp.json +0 -151
  155. package/registry/items/codeEditor.json +0 -191
  156. package/registry/items/confetti.json +0 -107
  157. package/registry/items/ctaLogo.json +0 -167
  158. package/registry/items/ctaMedia.json +0 -200
  159. package/registry/items/emojiBurst.json +0 -101
  160. package/registry/items/incomingCall.json +0 -177
  161. package/registry/items/media.json +0 -187
  162. package/registry/items/milestone.json +0 -212
  163. package/registry/items/notification.json +0 -189
  164. package/registry/items/phoneMockup.json +0 -261
  165. package/registry/items/problemSolution.json +0 -193
  166. package/registry/items/progressRing.json +0 -206
  167. package/registry/items/promptInput.json +0 -155
  168. package/registry/items/reaction.json +0 -176
  169. package/registry/items/reviewStack.json +0 -231
  170. package/registry/items/steps.json +0 -215
  171. package/registry/items/terminal.json +0 -219
  172. package/registry/items/testimonial.json +0 -171
  173. package/registry/items/tripleStats.json +0 -235
  174. package/registry/items/tweet.json +0 -210
  175. package/registry/items/webMockup.json +0 -280
@@ -0,0 +1,552 @@
1
+ // src/visual-system/scene-templates/schemas.ts
2
+ var BUILTIN_TEMPLATE_SCHEMAS = {
3
+ "cinemaMedia": {
4
+ "type": "object",
5
+ "properties": {
6
+ "mediaKeyword": {
7
+ "type": "string",
8
+ "format": "stock-media-keyword",
9
+ "minLength": 1,
10
+ "maxLength": 80,
11
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
12
+ "examples": [
13
+ "Ocean waves breaking on a rocky shore"
14
+ ]
15
+ },
16
+ "mediaUrl": {
17
+ "type": "string",
18
+ "format": "uri",
19
+ "description": "Host-only approved photo or video URL.",
20
+ "default": ""
21
+ },
22
+ "mediaType": {
23
+ "type": "string",
24
+ "enum": [
25
+ "photo",
26
+ "video"
27
+ ],
28
+ "default": "video",
29
+ "description": "Host-resolved asset kind."
30
+ },
31
+ "mediaPoster": {
32
+ "type": "string",
33
+ "format": "uri",
34
+ "description": "Host-only approved poster URL for video decoding.",
35
+ "default": ""
36
+ },
37
+ "shotDirection": {
38
+ "type": "string",
39
+ "maxLength": 220,
40
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
41
+ },
42
+ "mediaSource": {
43
+ "type": "string",
44
+ "enum": [
45
+ "generate",
46
+ "stock"
47
+ ],
48
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
49
+ },
50
+ "fallbackText": {
51
+ "type": "string",
52
+ "maxLength": 65,
53
+ "description": "Optional grounded concise chapter text if this shot cannot be resolved; not visible over footage."
54
+ }
55
+ },
56
+ "required": [],
57
+ "additionalProperties": false,
58
+ "x-vanillasky": {
59
+ "allowsStockMedia": true,
60
+ "requiredAnyOf": [
61
+ [
62
+ "mediaKeyword",
63
+ "mediaUrl"
64
+ ]
65
+ ]
66
+ }
67
+ },
68
+ "chapterTitle": {
69
+ "type": "object",
70
+ "properties": {
71
+ "title": {
72
+ "type": "string",
73
+ "maxLength": 65,
74
+ "description": "Short title. Line breaks optional.",
75
+ "default": "A different perspective"
76
+ }
77
+ },
78
+ "required": [
79
+ "title"
80
+ ],
81
+ "additionalProperties": false
82
+ },
83
+ "focusCards": {
84
+ "type": "object",
85
+ "properties": {
86
+ "items": {
87
+ "type": "array",
88
+ "minItems": 2,
89
+ "maxItems": 4,
90
+ "items": {
91
+ "type": "string",
92
+ "minLength": 1,
93
+ "maxLength": 55
94
+ },
95
+ "default": [
96
+ "Listen closely",
97
+ "Notice the pattern",
98
+ "Make room for change"
99
+ ],
100
+ "description": "2\u20134 parallel phrases, about 2\u20136 words each; no heading or numbering."
101
+ }
102
+ },
103
+ "required": [
104
+ "items"
105
+ ],
106
+ "additionalProperties": false
107
+ },
108
+ "editorialTimeline": {
109
+ "type": "object",
110
+ "properties": {
111
+ "events": {
112
+ "type": "array",
113
+ "minItems": 3,
114
+ "maxItems": 5,
115
+ "items": {
116
+ "type": "object",
117
+ "properties": {
118
+ "label": {
119
+ "type": "string",
120
+ "minLength": 1,
121
+ "maxLength": 45
122
+ }
123
+ },
124
+ "required": [
125
+ "label"
126
+ ],
127
+ "additionalProperties": false
128
+ },
129
+ "default": [
130
+ {
131
+ "label": "Observe"
132
+ },
133
+ {
134
+ "label": "Understand"
135
+ },
136
+ {
137
+ "label": "Act"
138
+ }
139
+ ],
140
+ "description": "3\u20135 ordered events or actions, each with one short label; no dates."
141
+ }
142
+ },
143
+ "required": [
144
+ "events"
145
+ ],
146
+ "additionalProperties": false
147
+ },
148
+ "mobileMessage": {
149
+ "type": "object",
150
+ "properties": {
151
+ "mediaKeyword": {
152
+ "type": "string",
153
+ "format": "stock-media-keyword",
154
+ "minLength": 1,
155
+ "maxLength": 80,
156
+ "description": "2\u20138 word literal subject/action search intent, maximum 80 characters. Host resolves URLs.",
157
+ "examples": [
158
+ "Ocean waves breaking on a rocky shore"
159
+ ]
160
+ },
161
+ "mediaUrl": {
162
+ "type": "string",
163
+ "format": "uri",
164
+ "description": "Host-only approved photo or video URL.",
165
+ "default": ""
166
+ },
167
+ "mediaType": {
168
+ "type": "string",
169
+ "enum": [
170
+ "photo",
171
+ "video"
172
+ ],
173
+ "default": "video",
174
+ "description": "Host-resolved asset kind."
175
+ },
176
+ "mediaPoster": {
177
+ "type": "string",
178
+ "format": "uri",
179
+ "description": "Host-only approved poster URL for video decoding.",
180
+ "default": ""
181
+ },
182
+ "message": {
183
+ "type": "string",
184
+ "maxLength": 120,
185
+ "default": "Can we talk?",
186
+ "description": "Exact supplied or explicitly illustrative message, preferably 6\u201316 words."
187
+ },
188
+ "app": {
189
+ "type": "string",
190
+ "maxLength": 24,
191
+ "default": "Messages",
192
+ "description": "Optional app label; Messages is the visual default."
193
+ },
194
+ "shotDirection": {
195
+ "type": "string",
196
+ "maxLength": 220,
197
+ "description": "Optional action, framing and continuity for generation. Preserve the subject; do not request rendered text."
198
+ },
199
+ "mediaSource": {
200
+ "type": "string",
201
+ "enum": [
202
+ "generate",
203
+ "stock"
204
+ ],
205
+ "description": "Generate distinctive illustrative shots; use approved stock for familiar observable subjects."
206
+ }
207
+ },
208
+ "required": [
209
+ "message"
210
+ ],
211
+ "additionalProperties": false,
212
+ "x-vanillasky": {
213
+ "allowsStockMedia": true
214
+ }
215
+ },
216
+ "comparison": {
217
+ "type": "object",
218
+ "properties": {
219
+ "leftLabel": {
220
+ "type": "string",
221
+ "maxLength": 20,
222
+ "description": "Optional short identifier for the first alternative."
223
+ },
224
+ "rightLabel": {
225
+ "type": "string",
226
+ "maxLength": 20,
227
+ "description": "Optional short identifier for the second alternative."
228
+ },
229
+ "leftText": {
230
+ "type": "string",
231
+ "minLength": 1,
232
+ "maxLength": 60,
233
+ "default": "More distractions",
234
+ "description": "First real alternative in one short phrase."
235
+ },
236
+ "rightText": {
237
+ "type": "string",
238
+ "minLength": 1,
239
+ "maxLength": 60,
240
+ "default": "More room to think",
241
+ "description": "Second real alternative, parallel to the first."
242
+ }
243
+ },
244
+ "required": [
245
+ "leftText",
246
+ "rightText"
247
+ ],
248
+ "additionalProperties": false
249
+ },
250
+ "quote": {
251
+ "type": "object",
252
+ "properties": {
253
+ "quote": {
254
+ "type": "string",
255
+ "minLength": 1,
256
+ "maxLength": 140,
257
+ "format": "grounded-quote",
258
+ "examples": [
259
+ "Look closely. There is always more to see."
260
+ ],
261
+ "description": "Exact supplied quotation; do not paraphrase or invent."
262
+ },
263
+ "attribution": {
264
+ "type": "string",
265
+ "minLength": 1,
266
+ "maxLength": 60,
267
+ "examples": [
268
+ "Illustrative example"
269
+ ],
270
+ "description": "Grounded attribution belonging to these exact quoted words."
271
+ }
272
+ },
273
+ "required": [
274
+ "quote",
275
+ "attribution"
276
+ ],
277
+ "additionalProperties": false
278
+ },
279
+ "keyFigure": {
280
+ "type": "object",
281
+ "properties": {
282
+ "value": {
283
+ "type": "string",
284
+ "minLength": 1,
285
+ "maxLength": 14,
286
+ "format": "grounded-stat",
287
+ "examples": [
288
+ "42%"
289
+ ],
290
+ "description": "One supplied supported quantity, preserving its unit."
291
+ },
292
+ "label": {
293
+ "type": "string",
294
+ "minLength": 1,
295
+ "maxLength": 50,
296
+ "examples": [
297
+ "Illustrative example"
298
+ ],
299
+ "description": "Exactly one short label identifying the quantity and its context."
300
+ }
301
+ },
302
+ "required": [
303
+ "value",
304
+ "label"
305
+ ],
306
+ "additionalProperties": false,
307
+ "x-vanillasky": {
308
+ "requiresStat": true
309
+ }
310
+ }
311
+ };
312
+
313
+ // src/visual-system/catalog/builtin-manifest.ts
314
+ var BUILTIN_TEMPLATE_MANIFEST = [
315
+ {
316
+ "label": "Full-bleed",
317
+ "description": "Immersive photo or video without a headline.",
318
+ "usesGlobalTextEffect": false,
319
+ "usesGlobalTransition": false,
320
+ "usesGlobalBackgroundEffect": false,
321
+ "textCanvas": "tight",
322
+ "id": "cinemaMedia",
323
+ "family": "Media & motion",
324
+ "jobs": [
325
+ "setup",
326
+ "atmosphere",
327
+ "payoff"
328
+ ],
329
+ "register": "motion-led",
330
+ "useWhen": "Show a relevant place, activity or subject. The asset is resolved separately from a shot description. ",
331
+ "avoidWhen": "No relevant asset can be resolved or the scene needs structured explanation.",
332
+ "minDuration": 3,
333
+ "preferredDuration": 6,
334
+ "timing": {
335
+ "contentFields": [],
336
+ "contentUnit": "words",
337
+ "revealSeconds": 0,
338
+ "holdSeconds": 3,
339
+ "exitSeconds": 0
340
+ },
341
+ schema: BUILTIN_TEMPLATE_SCHEMAS.cinemaMedia
342
+ },
343
+ {
344
+ "label": "Chapter",
345
+ "description": "Centered white typography fades in, holds, and fades out on black.",
346
+ "usesGlobalTextEffect": false,
347
+ "usesGlobalTransition": false,
348
+ "usesGlobalBackgroundEffect": false,
349
+ "textCanvas": "tight",
350
+ "id": "chapterTitle",
351
+ "family": "Explainers",
352
+ "jobs": [
353
+ "setup",
354
+ "payoff"
355
+ ],
356
+ "register": "motion-led",
357
+ "useWhen": "An opening, new chapter or deliberate short takeaway needs its own visual beat. ",
358
+ "avoidWhen": "A headline would merely repeat subtitles over an ordinary footage scene.",
359
+ "minDuration": 3,
360
+ "preferredDuration": 4,
361
+ "timing": {
362
+ "contentFields": [
363
+ "title"
364
+ ],
365
+ "contentUnit": "words",
366
+ "revealSeconds": 0.8,
367
+ "holdSeconds": 1.5,
368
+ "exitSeconds": 0.8
369
+ },
370
+ schema: BUILTIN_TEMPLATE_SCHEMAS.chapterTitle
371
+ },
372
+ {
373
+ "label": "Focus cards",
374
+ "description": "Two to four short phrases fade in sequentially on black; no boxes or heading.",
375
+ "usesGlobalTextEffect": false,
376
+ "usesGlobalTransition": false,
377
+ "usesGlobalBackgroundEffect": false,
378
+ "textCanvas": "tight",
379
+ "id": "focusCards",
380
+ "family": "Explainers",
381
+ "jobs": [
382
+ "setup",
383
+ "proof"
384
+ ],
385
+ "register": "card-led",
386
+ "useWhen": "Two to four short parallel points support an explanation. ",
387
+ "avoidWhen": "The points require an order, long paragraphs, numerical data or additional images to make sense.",
388
+ "minDuration": 4,
389
+ "preferredDuration": 5,
390
+ "timing": {
391
+ "contentFields": [
392
+ "items"
393
+ ],
394
+ "contentUnit": "items",
395
+ "revealSeconds": 2.4,
396
+ "holdSeconds": 1.8,
397
+ "exitSeconds": 0
398
+ },
399
+ schema: BUILTIN_TEMPLATE_SCHEMAS.focusCards
400
+ },
401
+ {
402
+ "label": "Timeline",
403
+ "description": "Three to five events on a fine continuous line on black; without dates.",
404
+ "usesGlobalTextEffect": false,
405
+ "usesGlobalTransition": false,
406
+ "usesGlobalBackgroundEffect": false,
407
+ "textCanvas": "tight",
408
+ "id": "editorialTimeline",
409
+ "family": "Explainers",
410
+ "jobs": [
411
+ "setup",
412
+ "proof"
413
+ ],
414
+ "register": "card-led",
415
+ "useWhen": "Events unfold in an order, or actions form a process. No dates or heading. ",
416
+ "avoidWhen": "The points are unordered or the story needs branching relationships.",
417
+ "minDuration": 5,
418
+ "preferredDuration": 6,
419
+ "timing": {
420
+ "contentFields": [
421
+ "events"
422
+ ],
423
+ "contentUnit": "items",
424
+ "revealSeconds": 3.2,
425
+ "holdSeconds": 1.8,
426
+ "exitSeconds": 0
427
+ },
428
+ schema: BUILTIN_TEMPLATE_SCHEMAS.editorialTimeline
429
+ },
430
+ {
431
+ "label": "Reach out",
432
+ "description": "A frosted glass message over resolved media, without sender or timestamp.",
433
+ "usesGlobalTextEffect": false,
434
+ "usesGlobalTransition": false,
435
+ "usesGlobalBackgroundEffect": false,
436
+ "textCanvas": "tight",
437
+ "id": "mobileMessage",
438
+ "family": "Social & messaging",
439
+ "jobs": [
440
+ "setup"
441
+ ],
442
+ "register": "card-led",
443
+ "useWhen": "A person or organization reaches out with a short message, alert or invitation. Message must be supplied or explicitly illustrative.",
444
+ "avoidWhen": "The scene is a generic fact, a long exchange, or a message that would fabricate evidence.",
445
+ "minDuration": 4,
446
+ "preferredDuration": 6,
447
+ "timing": {
448
+ "contentFields": [
449
+ "message",
450
+ "app"
451
+ ],
452
+ "contentUnit": "words",
453
+ "revealSeconds": 1,
454
+ "holdSeconds": 2.2,
455
+ "exitSeconds": 0
456
+ },
457
+ schema: BUILTIN_TEMPLATE_SCHEMAS.mobileMessage
458
+ },
459
+ {
460
+ "label": "Comparison",
461
+ "description": "Two short statements with equal weight on black, side by side or stacked in portrait.",
462
+ "usesGlobalTextEffect": false,
463
+ "usesGlobalTransition": false,
464
+ "usesGlobalBackgroundEffect": false,
465
+ "textCanvas": "tight",
466
+ "id": "comparison",
467
+ "family": "Explainers",
468
+ "jobs": [
469
+ "proof"
470
+ ],
471
+ "register": "motion-led",
472
+ "useWhen": "Explain a before/after change or two alternatives with short parallel statements. ",
473
+ "avoidWhen": "There are more than two alternatives or a numerical chart is needed.",
474
+ "minDuration": 4,
475
+ "preferredDuration": 6,
476
+ "timing": {
477
+ "contentFields": [
478
+ "leftText",
479
+ "rightText",
480
+ "leftLabel",
481
+ "rightLabel"
482
+ ],
483
+ "contentUnit": "words",
484
+ "revealSeconds": 1.2,
485
+ "holdSeconds": 2.5,
486
+ "exitSeconds": 0
487
+ },
488
+ schema: BUILTIN_TEMPLATE_SCHEMAS.comparison
489
+ },
490
+ {
491
+ "label": "Quote",
492
+ "description": "A short exact quotation with a legible attribution on black.",
493
+ "usesGlobalTextEffect": false,
494
+ "usesGlobalTransition": false,
495
+ "usesGlobalBackgroundEffect": false,
496
+ "textCanvas": "tight",
497
+ "id": "quote",
498
+ "family": "Explainers",
499
+ "jobs": [
500
+ "proof"
501
+ ],
502
+ "register": "motion-led",
503
+ "useWhen": "A supplied quotation deserves its own moment. Use exact source words and attribution only.",
504
+ "avoidWhen": "No exact quotation or reliable attribution is supplied; never invent testimony.",
505
+ "minDuration": 5,
506
+ "preferredDuration": 7,
507
+ "timing": {
508
+ "contentFields": [
509
+ "quote",
510
+ "attribution"
511
+ ],
512
+ "contentUnit": "words",
513
+ "revealSeconds": 1.2,
514
+ "holdSeconds": 3,
515
+ "exitSeconds": 0
516
+ },
517
+ schema: BUILTIN_TEMPLATE_SCHEMAS.quote
518
+ },
519
+ {
520
+ "label": "Key figure",
521
+ "description": "One supplied figure with one short label on black.",
522
+ "usesGlobalTextEffect": false,
523
+ "usesGlobalTransition": false,
524
+ "usesGlobalBackgroundEffect": false,
525
+ "textCanvas": "tight",
526
+ "id": "keyFigure",
527
+ "family": "Explainers",
528
+ "jobs": [
529
+ "proof"
530
+ ],
531
+ "register": "motion-led",
532
+ "useWhen": "One verified quantity or supplied target anchors the explanation. Value, unit and context must match supplied evidence.",
533
+ "avoidWhen": "No reliable figure is supplied or multiple values require a chart.",
534
+ "minDuration": 4,
535
+ "preferredDuration": 5,
536
+ "timing": {
537
+ "contentFields": [
538
+ "value",
539
+ "label"
540
+ ],
541
+ "contentUnit": "words",
542
+ "revealSeconds": 0.8,
543
+ "holdSeconds": 2.5,
544
+ "exitSeconds": 0
545
+ },
546
+ schema: BUILTIN_TEMPLATE_SCHEMAS.keyFigure
547
+ }
548
+ ];
549
+
550
+ export {
551
+ BUILTIN_TEMPLATE_MANIFEST
552
+ };