@hypit/hypit 0.1.3 → 0.1.5

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 (486) hide show
  1. package/README.md +5 -3
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +107 -16
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +6 -0
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  32. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  33. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  34. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  35. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  36. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  39. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  40. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  41. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  42. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  43. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  44. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  45. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  47. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  48. package/package.json +35 -15
  49. package/packages/audio-track/README.md +20 -13
  50. package/packages/audio-track/package.json +1 -1
  51. package/packages/audio-track/src/component.ts +4 -4
  52. package/packages/audio-track/src/fragment.ts +6 -5
  53. package/packages/audio-track/src/index.ts +1 -1
  54. package/packages/audio-track/src/manifest.ts +17 -16
  55. package/packages/audio-track/src/program.ts +21 -25
  56. package/packages/audio-track/src/surface.ts +19 -18
  57. package/packages/audio-track-studio/README.md +23 -0
  58. package/packages/audio-track-studio/src/index.ts +33 -19
  59. package/packages/author-kit/README.md +1 -1
  60. package/packages/background-removal/README.md +4 -7
  61. package/packages/browser-capture/package.json +1 -1
  62. package/packages/build-result/README.md +69 -0
  63. package/packages/build-result/package.json +2 -1
  64. package/packages/build-result/src/decode.ts +12 -8
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/file-reference.ts +42 -0
  67. package/packages/build-result/src/index.ts +4 -0
  68. package/packages/build-result/src/replace-file-windows.ts +58 -0
  69. package/packages/build-result/src/replace-file.ts +11 -0
  70. package/packages/build-result/src/store.ts +58 -14
  71. package/packages/build-result/src/types.ts +41 -8
  72. package/packages/build-result/src/writer.ts +12 -1
  73. package/packages/build-result-fs/README.md +23 -1
  74. package/packages/build-result-s3/README.md +5 -0
  75. package/packages/build-result-s3/src/repository.ts +23 -5
  76. package/packages/caption/README.md +61 -73
  77. package/packages/caption/package.json +3 -2
  78. package/packages/caption/src/activation.ts +2 -2
  79. package/packages/caption/src/component.ts +20 -5
  80. package/packages/caption/src/display.ts +3 -18
  81. package/packages/caption/src/fragment.ts +3 -7
  82. package/packages/caption/src/index.ts +6 -5
  83. package/packages/caption/src/manifest.ts +29 -46
  84. package/packages/caption/src/style.ts +24 -135
  85. package/packages/caption/src/surface.ts +12 -92
  86. package/packages/caption/src/temporalize.ts +18 -53
  87. package/packages/caption/src/types.ts +8 -35
  88. package/packages/caption/src/visibility.ts +23 -0
  89. package/packages/caption-fine/README.md +31 -11
  90. package/packages/caption-fine/package.json +4 -2
  91. package/packages/caption-fine/src/component.ts +3 -3
  92. package/packages/caption-fine/src/fragment.ts +7 -19
  93. package/packages/caption-fine/src/index.ts +2 -0
  94. package/packages/caption-fine/src/manifest.ts +27 -18
  95. package/packages/caption-fine/src/recipe.ts +7 -0
  96. package/packages/caption-fine/src/render.ts +62 -49
  97. package/packages/caption-fine/src/schedule.ts +39 -35
  98. package/packages/caption-fine/src/style.ts +10 -9
  99. package/packages/caption-fine/src/surface.ts +62 -35
  100. package/packages/caption-fine/src/types.ts +2 -0
  101. package/packages/caption-fine-studio/README.md +24 -2
  102. package/packages/caption-fine-studio/package.json +10 -3
  103. package/packages/caption-fine-studio/src/activation.ts +3 -3
  104. package/packages/caption-fine-studio/src/index.ts +61 -40
  105. package/packages/cli/README.md +81 -3
  106. package/packages/cli/package.json +1 -0
  107. package/packages/cli/src/arguments.ts +39 -15
  108. package/packages/cli/src/build-planning.ts +9 -3
  109. package/packages/cli/src/command.ts +7 -1
  110. package/packages/cli/src/commands/environment.ts +66 -27
  111. package/packages/cli/src/commands/execution.ts +81 -26
  112. package/packages/cli/src/commands/results.ts +7 -11
  113. package/packages/cli/src/index.ts +2 -2
  114. package/packages/cli/src/machine-view.ts +15 -5
  115. package/packages/cli/src/main.ts +38 -42
  116. package/packages/cli/src/observation.ts +7 -1
  117. package/packages/cli/src/output.ts +92 -34
  118. package/packages/cli/src/result-export.ts +22 -13
  119. package/packages/cli/src/run-file.ts +19 -8
  120. package/packages/cli/src/view.ts +64 -18
  121. package/packages/comment-sticker/README.md +3 -3
  122. package/packages/comment-sticker/package.json +1 -1
  123. package/packages/comment-sticker/src/component.ts +4 -4
  124. package/packages/comment-sticker/src/fragment.ts +5 -4
  125. package/packages/comment-sticker/src/manifest.ts +7 -6
  126. package/packages/comment-sticker/src/program.ts +9 -9
  127. package/packages/comment-sticker/src/surface.ts +6 -7
  128. package/packages/comment-sticker-studio/src/index.ts +2 -1
  129. package/packages/compiler-node/src/compiler.ts +1 -0
  130. package/packages/composition/README.md +21 -0
  131. package/packages/composition/src/audio-presentation.ts +44 -0
  132. package/packages/composition/src/index.ts +3 -0
  133. package/packages/composition/src/schema.ts +8 -3
  134. package/packages/composition/src/track.ts +15 -1
  135. package/packages/credential-store-env/README.md +1 -1
  136. package/packages/deck-track/README.md +3 -3
  137. package/packages/deck-track/package.json +1 -1
  138. package/packages/deck-track/src/component.ts +5 -5
  139. package/packages/deck-track/src/fragment.ts +6 -5
  140. package/packages/deck-track/src/lower.ts +12 -12
  141. package/packages/deck-track/src/manifest.ts +8 -7
  142. package/packages/deck-track/src/program.ts +13 -16
  143. package/packages/deck-track/src/surface.ts +9 -10
  144. package/packages/driver-node/src/driver.ts +41 -3
  145. package/packages/elevenlabs-speech/README.md +27 -0
  146. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  147. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  148. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  149. package/packages/elevenlabs-speech/src/index.ts +111 -0
  150. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  151. package/packages/endpoint-kit/README.md +24 -0
  152. package/packages/endpoint-kit/src/index.ts +7 -1
  153. package/packages/estimate/README.md +56 -3
  154. package/packages/estimate/src/program.ts +7 -8
  155. package/packages/film/README.md +12 -7
  156. package/packages/film/package.json +1 -1
  157. package/packages/film/src/component.ts +4 -4
  158. package/packages/film/src/fragment.ts +6 -5
  159. package/packages/film/src/manifest.ts +11 -10
  160. package/packages/film/src/program.ts +5 -5
  161. package/packages/film/src/recipe.ts +2 -1
  162. package/packages/film/src/surface.ts +6 -6
  163. package/packages/film-studio/package.json +1 -1
  164. package/packages/film-studio/src/index.ts +2 -2
  165. package/packages/fishaudio-speech/README.md +33 -0
  166. package/packages/fishaudio-speech/package.json +21 -0
  167. package/packages/fishaudio-speech/src/activation.ts +32 -0
  168. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  169. package/packages/fishaudio-speech/src/index.ts +156 -0
  170. package/packages/fishaudio-speech/src/surface.ts +192 -0
  171. package/packages/fonts-open/README.md +5 -0
  172. package/packages/fonts-open/package.json +5 -1
  173. package/packages/fonts-open/src/studio.ts +21 -0
  174. package/packages/generation/README.md +11 -1
  175. package/packages/generation/src/mapping.ts +28 -30
  176. package/packages/gpt-image/README.md +1 -2
  177. package/packages/grok-imagine/README.md +1 -2
  178. package/packages/hyperframes/README.md +7 -3
  179. package/packages/hyperframes/src/browser-program.ts +11 -2
  180. package/packages/hyperframes/src/document.ts +15 -2
  181. package/packages/interview-emoji-reveal/README.md +4 -4
  182. package/packages/interview-emoji-reveal/package.json +1 -1
  183. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  184. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  185. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  186. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  187. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  188. package/packages/media-execution/README.md +7 -3
  189. package/packages/media-execution/src/audio-presentation.ts +23 -0
  190. package/packages/media-execution/src/execute.ts +2 -0
  191. package/packages/media-pipeline/README.md +7 -3
  192. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  193. package/packages/media-pipeline/src/component.ts +16 -2
  194. package/packages/media-pipeline/src/manifest.ts +3 -1
  195. package/packages/media-pipeline/src/types.ts +2 -1
  196. package/packages/media-track/README.md +14 -47
  197. package/packages/media-track/package.json +1 -1
  198. package/packages/media-track/preview/preview.svml +5 -5
  199. package/packages/media-track/src/author.ts +12 -6
  200. package/packages/media-track/src/component.ts +10 -16
  201. package/packages/media-track/src/fragment.ts +8 -7
  202. package/packages/media-track/src/index.ts +3 -1
  203. package/packages/media-track/src/lower.ts +7 -7
  204. package/packages/media-track/src/manifest.ts +16 -38
  205. package/packages/media-track/src/program.ts +62 -67
  206. package/packages/media-track/src/sampling.ts +6 -6
  207. package/packages/media-track/src/sequence.ts +8 -8
  208. package/packages/media-track/src/surface.ts +25 -43
  209. package/packages/media-track-studio/README.md +9 -0
  210. package/packages/media-track-studio/src/index.ts +23 -13
  211. package/packages/mimo-speech/README.md +1 -1
  212. package/packages/minimax-h3/README.md +1 -1
  213. package/packages/nano-banana/README.md +1 -1
  214. package/packages/narrative/README.md +23 -1
  215. package/packages/narrative/src/identity.ts +11 -0
  216. package/packages/narrative/src/index.ts +3 -0
  217. package/packages/narrative/src/schema.ts +28 -27
  218. package/packages/narrative/src/selection.ts +52 -0
  219. package/packages/narrative/src/types.ts +2 -0
  220. package/packages/package-loader-node/README.md +30 -0
  221. package/packages/package-loader-node/package.json +5 -2
  222. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  223. package/packages/package-loader-node/src/index.ts +1 -0
  224. package/packages/package-loader-node/src/loader.ts +12 -15
  225. package/packages/package-loader-node/src/location.ts +27 -1
  226. package/packages/package-loader-node/src/module-scope.ts +183 -0
  227. package/packages/package-loader-node/src/types.ts +4 -0
  228. package/packages/performance/README.md +83 -0
  229. package/packages/performance/package.json +30 -0
  230. package/packages/performance/src/activation.ts +11 -0
  231. package/packages/performance/src/component.ts +46 -0
  232. package/packages/performance/src/index.ts +6 -0
  233. package/packages/performance/src/manifest.ts +53 -0
  234. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  235. package/packages/performance/src/program.ts +51 -0
  236. package/packages/performance/src/style.ts +35 -0
  237. package/packages/performance/src/surface.ts +99 -0
  238. package/packages/performance-studio/README.md +25 -0
  239. package/packages/performance-studio/package.json +21 -0
  240. package/packages/performance-studio/src/activation.ts +6 -0
  241. package/packages/performance-studio/src/index.ts +84 -0
  242. package/packages/program-space/README.md +9 -18
  243. package/packages/program-space/src/activation.ts +1 -5
  244. package/packages/program-space/src/index.ts +2 -11
  245. package/packages/program-space/src/surface.ts +1 -20
  246. package/packages/project-context-node/README.md +20 -0
  247. package/packages/project-context-node/package.json +10 -0
  248. package/packages/project-context-node/src/index.ts +3 -0
  249. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  250. package/packages/provider-hyperframes-local/README.md +43 -15
  251. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  252. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  253. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  254. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  255. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  256. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  257. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  258. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  259. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  260. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  261. package/packages/provider-hypihub/README.md +48 -17
  262. package/packages/provider-hypihub/package.json +2 -0
  263. package/packages/provider-hypihub/src/mapping.ts +31 -7
  264. package/packages/provider-hypihub/src/oauth.ts +6 -0
  265. package/packages/provider-hypihub/src/provider.ts +25 -13
  266. package/packages/provider-hypihub/src/routes.ts +1 -2
  267. package/packages/provider-hypihub/src/upload.ts +2 -0
  268. package/packages/provider-media-local/README.md +3 -4
  269. package/packages/provider-whisperx-local/README.md +57 -0
  270. package/packages/provider-whisperx-local/src/program.ts +1 -0
  271. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  272. package/packages/ranking/README.md +8 -6
  273. package/packages/ranking/package.json +1 -1
  274. package/packages/ranking/src/component.ts +6 -6
  275. package/packages/ranking/src/fragment.ts +11 -7
  276. package/packages/ranking/src/manifest.ts +21 -14
  277. package/packages/ranking/src/render.ts +33 -35
  278. package/packages/ranking/src/schedule.ts +16 -19
  279. package/packages/ranking/src/surface.ts +12 -13
  280. package/packages/ranking-studio/README.md +29 -0
  281. package/packages/ranking-studio/package.json +8 -3
  282. package/packages/ranking-studio/src/index.ts +71 -12
  283. package/packages/render-hyperframes/README.md +7 -7
  284. package/packages/render-hyperframes/package.json +1 -1
  285. package/packages/render-hyperframes/src/component.ts +11 -1
  286. package/packages/render-hyperframes/src/fragment.ts +7 -4
  287. package/packages/render-hyperframes/src/manifest.ts +4 -4
  288. package/packages/render-hyperframes/src/surface.ts +6 -6
  289. package/packages/runtime/README.md +8 -1
  290. package/packages/runtime/src/catalog.ts +2 -0
  291. package/packages/runtime/src/execution.ts +15 -4
  292. package/packages/runtime/src/index.ts +2 -1
  293. package/packages/runtime/src/log.ts +51 -0
  294. package/packages/runtime/src/types.ts +5 -8
  295. package/packages/runtime-host-node/README.md +30 -0
  296. package/packages/runtime-host-node/package.json +1 -0
  297. package/packages/runtime-host-node/src/index.ts +25 -9
  298. package/packages/runtime-host-node/src/packages.ts +47 -50
  299. package/packages/runtime-kit/README.md +5 -0
  300. package/packages/runtime-kit/src/index.ts +3 -1
  301. package/packages/runtime-local/README.md +111 -4
  302. package/packages/runtime-local/src/config.ts +202 -56
  303. package/packages/runtime-local/src/control.ts +9 -1
  304. package/packages/runtime-local/src/executor.ts +66 -0
  305. package/packages/runtime-local/src/host.ts +37 -17
  306. package/packages/runtime-local/src/log.ts +48 -0
  307. package/packages/runtime-local/src/programs.ts +41 -25
  308. package/packages/runtime-local/src/result-writer.ts +2 -0
  309. package/packages/runtime-local/src/runtime.ts +10 -6
  310. package/packages/runtime-local/src/supervisor.ts +142 -0
  311. package/packages/runtime-local/src/types.ts +9 -2
  312. package/packages/runtime-local/src/worker-process.ts +7 -24
  313. package/packages/runtime-local/src/worker.ts +55 -83
  314. package/packages/screen-overlay/README.md +3 -3
  315. package/packages/screen-overlay/package.json +1 -1
  316. package/packages/screen-overlay/src/component.ts +3 -3
  317. package/packages/screen-overlay/src/fragment.ts +5 -4
  318. package/packages/screen-overlay/src/manifest.ts +7 -6
  319. package/packages/screen-overlay/src/program.ts +9 -9
  320. package/packages/screen-overlay/src/surface.ts +6 -7
  321. package/packages/script/README.md +37 -2
  322. package/packages/script/src/edit.ts +123 -73
  323. package/packages/script/src/lexical.ts +40 -6
  324. package/packages/script/src/manifest.ts +2 -2
  325. package/packages/script/src/narrative.ts +1 -0
  326. package/packages/script/src/parser.ts +36 -8
  327. package/packages/script/src/surface.ts +4 -3
  328. package/packages/script/src/types.ts +5 -1
  329. package/packages/script-studio/package.json +9 -3
  330. package/packages/script-studio/src/index.ts +2 -0
  331. package/packages/script-studio/src/projection.ts +105 -0
  332. package/packages/seedance/README.md +30 -1
  333. package/packages/seedance/src/index.ts +18 -7
  334. package/packages/seedance/src/surface.ts +17 -4
  335. package/packages/seedance-kits/README.md +10 -2
  336. package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
  337. package/packages/seedream/README.md +1 -1
  338. package/packages/sound/README.md +81 -0
  339. package/packages/sound/package.json +25 -0
  340. package/packages/sound/src/activation.ts +11 -0
  341. package/packages/sound/src/component.ts +28 -0
  342. package/packages/sound/src/index.ts +5 -0
  343. package/packages/sound/src/manifest.ts +47 -0
  344. package/packages/sound/src/program.ts +84 -0
  345. package/packages/sound/src/style.ts +34 -0
  346. package/packages/sound/src/surface.ts +90 -0
  347. package/packages/sound-studio/README.md +22 -0
  348. package/packages/sound-studio/package.json +20 -0
  349. package/packages/sound-studio/src/activation.ts +6 -0
  350. package/packages/sound-studio/src/index.ts +74 -0
  351. package/packages/speech/README.md +2 -2
  352. package/packages/speech-alignment/src/align.ts +45 -21
  353. package/packages/speech-alignment/src/local.ts +8 -0
  354. package/packages/speech-alignment/src/locate.ts +1 -1
  355. package/packages/store-sqlite/README.md +7 -0
  356. package/packages/store-sqlite/src/store.ts +84 -83
  357. package/packages/studio/INSPECTOR.md +117 -0
  358. package/packages/studio/README.md +149 -14
  359. package/packages/studio/package.json +8 -7
  360. package/packages/studio/src/build-library.ts +99 -84
  361. package/packages/studio/src/companion-assembly.ts +1 -0
  362. package/packages/studio/src/domain.ts +1 -1
  363. package/packages/studio/src/fallback-companions.ts +3 -3
  364. package/packages/studio/src/feedback-server.ts +51 -0
  365. package/packages/studio/src/feedback-store.ts +66 -0
  366. package/packages/studio/src/feedback.ts +60 -0
  367. package/packages/studio/src/library-media.ts +19 -0
  368. package/packages/studio/src/parameter-values.ts +83 -1
  369. package/packages/studio/src/parameters.ts +132 -43
  370. package/packages/studio/src/preview/render.ts +5 -1
  371. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  372. package/packages/studio/src/programme.ts +14 -30
  373. package/packages/studio/src/server.ts +66 -34
  374. package/packages/studio/src/shared.ts +24 -8
  375. package/packages/studio/src/snapshot.ts +21 -132
  376. package/packages/studio/src/studio-preflight.ts +3 -3
  377. package/packages/studio/src/studio-registry.ts +72 -6
  378. package/packages/studio/src/style.css +342 -190
  379. package/packages/studio/src/temporal-edit.ts +131 -0
  380. package/packages/studio/src/ui/artifact-name.ts +80 -0
  381. package/packages/studio/src/ui/artifact-preview.ts +99 -0
  382. package/packages/studio/src/ui/comments.ts +233 -0
  383. package/packages/studio/src/ui/icons.ts +10 -1
  384. package/packages/studio/src/ui/library.ts +373 -192
  385. package/packages/studio/src/ui/main.ts +291 -110
  386. package/packages/studio/src/ui/material-preview.ts +1 -1
  387. package/packages/studio/src/ui/overlay.ts +31 -26
  388. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  389. package/packages/studio/src/ui/sidebar-panel.ts +31 -0
  390. package/packages/studio/src/ui/stage.ts +188 -9
  391. package/packages/studio/src/ui/timeline.ts +187 -281
  392. package/packages/studio/start.ts +19 -5
  393. package/packages/studio-adapter/README.md +151 -11
  394. package/packages/studio-adapter/src/index.ts +126 -14
  395. package/packages/temporal/README.md +6 -6
  396. package/packages/temporal/package.json +1 -1
  397. package/packages/temporal/src/component.ts +5 -6
  398. package/packages/temporal/src/index.ts +8 -6
  399. package/packages/temporal/src/location.ts +11 -11
  400. package/packages/temporal/src/projection.ts +19 -19
  401. package/packages/temporal/src/rational.ts +4 -4
  402. package/packages/temporal-markup/EDITING.md +183 -0
  403. package/packages/temporal-markup/README.md +31 -11
  404. package/packages/temporal-markup/package.json +1 -1
  405. package/packages/temporal-markup/src/index.ts +20 -25
  406. package/packages/temporal-markup/src/space.ts +10 -41
  407. package/packages/timeline/README.md +31 -0
  408. package/packages/{semantic-track → timeline}/package.json +1 -1
  409. package/packages/timeline/src/activation.ts +8 -0
  410. package/packages/timeline/src/component.ts +24 -0
  411. package/packages/timeline/src/identity.ts +60 -0
  412. package/packages/timeline/src/index.ts +6 -0
  413. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  414. package/packages/timeline/src/manifest.ts +39 -0
  415. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  416. package/packages/timeline/src/types.ts +24 -0
  417. package/packages/timeline-author/README.md +68 -0
  418. package/packages/{speech-track → timeline-author}/package.json +6 -4
  419. package/packages/timeline-author/src/activation.ts +22 -0
  420. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  421. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  422. package/packages/timeline-author/src/index.ts +7 -0
  423. package/packages/timeline-author/src/manifest.ts +78 -0
  424. package/packages/timeline-author/src/program.ts +107 -0
  425. package/packages/timeline-author/src/surface.ts +46 -0
  426. package/packages/timeline-author/src/types.ts +6 -0
  427. package/packages/typography-track/README.md +4 -4
  428. package/packages/typography-track/package.json +1 -1
  429. package/packages/typography-track/src/component.ts +4 -4
  430. package/packages/typography-track/src/fragment.ts +4 -3
  431. package/packages/typography-track/src/manifest.ts +11 -9
  432. package/packages/typography-track/src/program.ts +15 -15
  433. package/packages/typography-track/src/surface.ts +17 -18
  434. package/packages/typography-track-studio/package.json +8 -3
  435. package/packages/typography-track-studio/src/index.ts +5 -1
  436. package/packages/video-cli/README.md +16 -4
  437. package/packages/video-cli/package.json +2 -1
  438. package/packages/video-cli/src/creation.ts +25 -9
  439. package/packages/video-cli/src/index.ts +1 -1
  440. package/packages/video-cli/src/studio-distribution.ts +2 -1
  441. package/packages/volcengine-matting/README.md +3 -3
  442. package/packages/whisperx/README.md +8 -1
  443. package/packages/workspace/src/index.ts +2 -0
  444. package/packages/workspace-fs-node/README.md +4 -1
  445. package/packages/workspace-fs-node/src/workspace.ts +3 -1
  446. package/services/whisperx/README.md +14 -0
  447. package/services/whisperx/pyproject.toml +2 -0
  448. package/services/whisperx/uv.lock +20 -20
  449. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  450. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  451. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  452. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  453. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  454. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  455. package/packages/provider-kie/README.md +0 -134
  456. package/packages/provider-kie/package.json +0 -43
  457. package/packages/provider-kie/src/activation.ts +0 -71
  458. package/packages/provider-kie/src/index.ts +0 -10
  459. package/packages/provider-kie/src/mapping.ts +0 -182
  460. package/packages/provider-kie/src/provider.ts +0 -657
  461. package/packages/provider-kie/src/routes.ts +0 -150
  462. package/packages/provider-xiaomi-mimo/README.md +0 -32
  463. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  464. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  465. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  466. package/packages/runtime/src/environment.ts +0 -6
  467. package/packages/semantic-track/README.md +0 -21
  468. package/packages/semantic-track/src/activation.ts +0 -8
  469. package/packages/semantic-track/src/component.ts +0 -24
  470. package/packages/semantic-track/src/identity.ts +0 -58
  471. package/packages/semantic-track/src/index.ts +0 -6
  472. package/packages/semantic-track/src/manifest.ts +0 -38
  473. package/packages/semantic-track/src/types.ts +0 -26
  474. package/packages/speech-track/README.md +0 -51
  475. package/packages/speech-track/src/activation.ts +0 -19
  476. package/packages/speech-track/src/index.ts +0 -7
  477. package/packages/speech-track/src/manifest.ts +0 -73
  478. package/packages/speech-track/src/program.ts +0 -64
  479. package/packages/speech-track/src/surface.ts +0 -35
  480. package/packages/speech-track/src/types.ts +0 -6
  481. package/packages/speech-track-studio/README.md +0 -3
  482. package/packages/speech-track-studio/package.json +0 -14
  483. package/packages/speech-track-studio/src/activation.ts +0 -7
  484. package/packages/speech-track-studio/src/index.ts +0 -40
  485. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  486. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -1,7 +1,7 @@
1
1
  # `@hypit/ranking`
2
2
 
3
- The Track Surface accepts `semantic={speech.semantic}` or `space={animation}`. Semantic context
4
- resolves Script Selections and Moments; authored space supports clock-based animation. Shared `at`
3
+ The Track Surface accepts `timeline={program.timeline}`. The same Timeline supports authored
4
+ positions and, where prepared Takes supply evidence, Script Selections and Moments. Shared `at`
5
5
  inputs accept a Moment or a time such as `2s`; `at` with `for` produces a Window where required.
6
6
 
7
7
  Ranking boards that follow the argument of a video: introduce an item, give its verdict, and retain
@@ -20,12 +20,12 @@ where the selected schedule requires succession. Ending a reveal does not remove
20
20
 
21
21
  ## Bind the ranking to the target Script
22
22
 
23
- This excerpt assumes the Script, SemanticTrack, Canvas, Frame and Style have been declared:
23
+ This excerpt assumes the Script, Timeline, Canvas, Frame and Style have been declared:
24
24
 
25
25
  ```svml
26
26
  <import as="ranking" from="@hypit/ranking@1"/>
27
27
 
28
- <ranking:Column id="priorities" semantic={speech.semantic} canvas={vertical}
28
+ <ranking:Column id="priorities" timeline={speech.timeline} canvas={vertical}
29
29
  frame={layout.ranking} during={story.segment.ranking} style={ranking-style}>
30
30
  <ranking:ColumnItem rank="1" label="Winner" during={story.selection.winner}/>
31
31
  <ranking:ColumnItem rank="2" preset="true" label="Already placed"/>
@@ -38,7 +38,9 @@ Window. TopThree instead accepts item `at` projections and a board `terminal` pr
38
38
  can supply the intended trigger.
39
39
 
40
40
  Each board publishes `.schedule`, `.program` and `.visual`. Optional normalized `appear-sound` or
41
- `move-sound` inputs add `.audio` where that form supports them. Include the wanted visual and audio
41
+ `move-sound` inputs add `.events` and `.audio` where that form supports them.
42
+ The event plan drives the audio from the same appearance and movement timing
43
+ as the visual animation. Include the wanted visual and audio
42
44
  outputs as peers in Film. Labels can be literal or graph Text; Styles are typed SVS Recipes with
43
45
  exact fonts. Use `hypit vocabulary @hypit/ranking --tag Column` (or another declared tag) for its
44
46
  attributes, children, outputs and configured example.
@@ -50,7 +52,7 @@ The following files are included in the Distribution and show how the responsibi
50
52
  | File | What to learn from it |
51
53
  | --- | --- |
52
54
  | [surface.ts](src/surface.ts) | `rankingSurface` resolves author inputs, projects the outer and item times through `createTemporalWindowProjection` / `createTemporalInstantProjection`, and retains the returned drafts and references. |
53
- | [fragment.ts](src/fragment.ts) | `createRankingFragment` receives ProgramSpace and wires typed content, time, layout and Style inputs into finite operations. |
55
+ | [fragment.ts](src/fragment.ts) | `createRankingFragment` receives Timeline and wires typed content, time, layout and Style inputs into finite operations. |
54
56
  | [schedule.ts](src/schedule.ts) | Compute reveal, activation and settled spans from the projected times. |
55
57
  | [component.ts](src/component.ts) and [render.ts](src/render.ts) | Build the ranking program and produce picture and optional sound from that schedule. |
56
58
  | [manifest.ts](src/manifest.ts) and [activation.ts](src/activation.ts) | Publish Types, Producers, Surface vocabulary and package contributions. |
@@ -19,7 +19,7 @@
19
19
  "@hypit/narrative": "workspace:*",
20
20
  "@hypit/program-space": "workspace:*",
21
21
  "@hypit/protocol": "workspace:*",
22
- "@hypit/semantic-track": "workspace:*",
22
+ "@hypit/timeline": "workspace:*",
23
23
  "@hypit/spatial": "workspace:*",
24
24
  "@hypit/svs": "workspace:*",
25
25
  "@hypit/temporal": "workspace:*",
@@ -1,6 +1,6 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import type { ComponentPackage, ProducerHandlerContext } from "@hypit/component-kit";
2
3
  import type { SynchronizedMedia } from "@hypit/media";
3
- import type { ProgramSpace } from "@hypit/program-space";
4
4
  import { canonicalize } from "@hypit/protocol";
5
5
  import type { BlobRef, StoredValue } from "@hypit/protocol";
6
6
  import type { TemporalInstant, TemporalWindow } from "@hypit/temporal";
@@ -96,7 +96,7 @@ export const rankingComponent = {
96
96
  producer: rankingProducers.schedule,
97
97
  handler: ({ inputs }) => ({ outputs: { schedule: output(buildTriggeredRankingSchedule({
98
98
  header: inline(inputs.header?.value, "RankingHeader"), items: inline(inputs.items?.value, "RankingItemSpecSet"),
99
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
99
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
100
100
  outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
101
101
  candidates: inline(inputs.candidates?.value, "TriggeredRankingCandidateSet"),
102
102
  terminal: inline<TemporalInstant>(inputs.terminal?.value, "TemporalInstant"),
@@ -119,7 +119,7 @@ export const rankingComponent = {
119
119
  handler: ({ inputs }) => ({ outputs: { schedule: output(buildTierBoardSchedule({
120
120
  header: inline<RankingHeader>(inputs.header?.value, "RankingHeader"),
121
121
  items: inline<RankingItemSpecSet>(inputs.items?.value, "RankingItemSpecSet"),
122
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
122
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
123
123
  outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
124
124
  windows: inline<TierBoardWindowSet>(inputs.windows?.value, "TierBoardWindowSet"),
125
125
  })) }, needs: {} }),
@@ -141,7 +141,7 @@ export const rankingComponent = {
141
141
  handler: ({ inputs }) => ({ outputs: { schedule: output(buildColumnSchedule({
142
142
  header: inline<RankingHeader>(inputs.header?.value, "RankingHeader"),
143
143
  items: inline<RankingItemSpecSet>(inputs.items?.value, "RankingItemSpecSet"),
144
- space: inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
144
+ timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
145
145
  outer: inline<TemporalWindow>(inputs.outer?.value, "TemporalWindow"),
146
146
  windows: inline<ColumnWindowSet>(inputs.windows?.value, "ColumnWindowSet"),
147
147
  })) }, needs: {} }),
@@ -239,7 +239,7 @@ export const rankingComponent = {
239
239
  {
240
240
  producer: rankingProducers.renderAudio,
241
241
  handler: ({ inputs }) => ({ outputs: { track: output(renderRankingAudio(
242
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"),
242
+ inline<Timeline>(inputs.timeline?.value, "Timeline"),
243
243
  inline<RankingSoundEventPlan>(inputs.events?.value, "RankingSoundEventPlan"),
244
244
  inline<RankingSoundStyle>(inputs.style?.value, "RankingSoundStyle"),
245
245
  inline<RankingSoundSet>(inputs.sounds?.value, "RankingSoundSet"),
@@ -252,7 +252,7 @@ export const rankingComponent = {
252
252
  ] as const).map(([producer, render, label]) => ({
253
253
  producer,
254
254
  handler: ({ inputs }: ProducerHandlerContext) => ({ outputs: { track: output(render(
255
- inline<ProgramSpace>(inputs.space?.value, "ProgramSpace"), inline(inputs.program?.value, label) as never,
255
+ inline<Timeline>(inputs.timeline?.value, "Timeline"), inline(inputs.program?.value, label) as never,
256
256
  )) }, needs: {} }),
257
257
  })),
258
258
  ],
@@ -1,4 +1,5 @@
1
- import { programSpaceTypes } from "@hypit/program-space";
1
+ import { timelineTypes } from "@hypit/timeline";
2
+
2
3
  import { compositionTypes } from "@hypit/composition";
3
4
  import { sealGraphFragment } from "@hypit/elaborator";
4
5
  import type { FragmentOperation, GraphFragment } from "@hypit/elaborator";
@@ -56,7 +57,7 @@ export function createRankingFragment(
56
57
  const selected = definition(variant);
57
58
  const inputs: Array<GraphFragment["inputs"][number]> = [
58
59
  { name: "header", type: rankingTypes.header },
59
- { name: "space", type: programSpaceTypes.programSpace },
60
+ { name: "timeline", type: timelineTypes.track },
60
61
  { name: "outer", type: temporalTypes.window },
61
62
  ...(variant === "top-three" ? [
62
63
  { name: "terminal", type: temporalTypes.instant },
@@ -133,7 +134,7 @@ export function createRankingFragment(
133
134
  operations.push({
134
135
  id: "schedule",
135
136
  producer: variant === "column" ? rankingProducers.columnSchedule : rankingProducers.tierSchedule,
136
- inputs: { header: input("header"), items: specs, space: input("space"), outer: input("outer"), windows: candidates },
137
+ inputs: { header: input("header"), items: specs, timeline: input("timeline"), outer: input("outer"), windows: candidates },
137
138
  result: { kind: "output", name: "schedule" },
138
139
  });
139
140
  } else {
@@ -141,7 +142,7 @@ export function createRankingFragment(
141
142
  id: "schedule",
142
143
  producer: rankingProducers.schedule,
143
144
  inputs: {
144
- header: input("header"), items: specs, space: input("space"),
145
+ header: input("header"), items: specs, timeline: input("timeline"),
145
146
  outer: input("outer"), candidates, terminal: input("terminal"),
146
147
  },
147
148
  result: { kind: "output", name: "schedule" },
@@ -160,7 +161,7 @@ export function createRankingFragment(
160
161
  operations.push({
161
162
  id: "visual",
162
163
  producer: selected.render,
163
- inputs: { space: input("space"), program: operation("program") },
164
+ inputs: { timeline: input("timeline"), program: operation("program") },
164
165
  result: { kind: "output", name: "track" },
165
166
  });
166
167
  const hasAudio = sound.appearName !== undefined || sound.moveName !== undefined;
@@ -189,7 +190,7 @@ export function createRankingFragment(
189
190
  }
190
191
  operations.push({
191
192
  id: "audio", producer: rankingProducers.renderAudio,
192
- inputs: { space: input("space"), events: operation("events"), style: input("sound-style"), sounds },
193
+ inputs: { timeline: input("timeline"), events: operation("events"), style: input("sound-style"), sounds },
193
194
  result: { kind: "output", name: "track" },
194
195
  });
195
196
  }
@@ -200,7 +201,10 @@ export function createRankingFragment(
200
201
  { name: "schedule", type: rankingTypes.schedule, root: operation("schedule") },
201
202
  { name: "program", type: selected.program, root: operation("program") },
202
203
  { name: "visual", type: compositionTypes.visualTrack, root: operation("visual") },
203
- ...(hasAudio ? [{ name: "audio", type: compositionTypes.audioTrack, root: operation("audio") }] : []),
204
+ ...(hasAudio ? [
205
+ { name: "events", type: rankingTypes.soundEvents, root: operation("events") },
206
+ { name: "audio", type: compositionTypes.audioTrack, root: operation("audio") },
207
+ ] : []),
204
208
  ],
205
209
  });
206
210
  }
@@ -1,3 +1,4 @@
1
+ import { timelineTypes } from "@hypit/timeline";
1
2
  import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
2
3
  import { readFile } from "node:fs/promises";
3
4
 
@@ -5,9 +6,9 @@ import { artifactDependency } from "@hypit/artifact";
5
6
  import { compositionDependency, compositionTypes } from "@hypit/composition";
6
7
  import { mediaDependency, mediaTypes } from "@hypit/media";
7
8
  import { narrativeDependency, narrativeTypes } from "@hypit/narrative";
8
- import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
9
+
9
10
  import type { ModuleManifest, ProducerRef, TypeRef, ValueSchema } from "@hypit/protocol";
10
- import { semanticTrackDependency } from "@hypit/semantic-track";
11
+ import { timelineDependency } from "@hypit/timeline";
11
12
  import { spatialDependency, spatialFrameSchema, spatialTypes } from "@hypit/spatial";
12
13
  import { svsRecipeType } from "@hypit/svs";
13
14
  import { temporalDependency, temporalInstantSchema, temporalTypes, temporalWindowSchema } from "@hypit/temporal";
@@ -487,7 +488,7 @@ const allRankingMarkupSurfaces = [
487
488
  "Every other property is refused by name.",
488
489
  ],
489
490
  } },
490
- { name: "tier", tag: "TierBoard", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.tierProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
491
+ { name: "tier", tag: "TierBoard", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.tierProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
491
492
  vocabulary: {
492
493
  summary: "Places Items into tier rows from preset state or explicit reveal Selections, and publishes the board and the Tracks it renders to.",
493
494
  appearance:
@@ -537,11 +538,13 @@ const allRankingMarkupSurfaces = [
537
538
  summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
538
539
  { name: "visual", type: compositionTypes.visualTrack,
539
540
  summary: "The rendered board, an ordinary peer VisualTrack." },
541
+ { name: "events", type: rankingTypes.soundEvents,
542
+ summary: "Animation-linked sound events, published when a sound is authored." },
540
543
  { name: "audio", type: compositionTypes.audioTrack,
541
544
  summary: "The rendered board sound, published only when a sound is authored." },
542
545
  ],
543
546
  example: `<ranking:TierBoardStyle id="tier-style" recipe={recipes.ranking.tier} font={ui-font}/>
544
- <ranking:TierBoard id="tiers" semantic={speech.semantic} canvas={vertical} frame={board-frame}
547
+ <ranking:TierBoard id="tiers" timeline={speech.timeline} canvas={vertical} frame={board-frame}
545
548
  during="program"
546
549
  style={tier-style}>
547
550
  <ranking:TierItem id="row-regen" tier="s" preset="true" icon={icon-regen}/>
@@ -555,7 +558,7 @@ const allRankingMarkupSurfaces = [
555
558
  "Authoring either sound also connects the Style's `.sound` output, so `style` must name a TierBoardStyle written in this Source.",
556
559
  ],
557
560
  } },
558
- { name: "column", tag: "Column", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.columnProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
561
+ { name: "column", tag: "Column", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.columnProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
559
562
  vocabulary: {
560
563
  summary: "Places rows by explicit rank, reveals each non-preset row in its own Segment or Selection, and publishes the board and the Tracks it renders to.",
561
564
  appearance:
@@ -605,11 +608,13 @@ const allRankingMarkupSurfaces = [
605
608
  summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
606
609
  { name: "visual", type: compositionTypes.visualTrack,
607
610
  summary: "The rendered board, an ordinary peer VisualTrack." },
611
+ { name: "events", type: rankingTypes.soundEvents,
612
+ summary: "Animation-linked sound events, published when a sound is authored." },
608
613
  { name: "audio", type: compositionTypes.audioTrack,
609
614
  summary: "The rendered board sound, published only when a sound is authored." },
610
615
  ],
611
616
  example: `<ranking:ColumnStyle id="board-style" recipe={recipes.ranking.board} font={ui-font}/>
612
- <ranking:Column id="board" semantic={speech.semantic} canvas={vertical} frame={board-frame}
617
+ <ranking:Column id="board" timeline={speech.timeline} canvas={vertical} frame={board-frame}
613
618
  during={story.segment.ranking}
614
619
  style={board-style}>
615
620
  <ranking:ColumnItem id="row-regen" rank="1" label="ReGen" icon={icon-regen} during={story.selection.regen}/>
@@ -624,7 +629,7 @@ const allRankingMarkupSurfaces = [
624
629
  "Authoring either sound also connects the Style's `.sound` output, so `style` must name a ColumnStyle written in this Source.",
625
630
  ],
626
631
  } },
627
- { name: "top-three", tag: "TopThree", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.topThreeProgram, compositionTypes.visualTrack, compositionTypes.audioTrack],
632
+ { name: "top-three", tag: "TopThree", mode: "structured", outputs: [rankingTypes.header, rankingTypes.itemSpec, rankingTypes.textItemShell, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window, rankingTypes.schedule, rankingTypes.topThreeProgram, compositionTypes.visualTrack, rankingTypes.soundEvents, compositionTypes.audioTrack],
628
633
  vocabulary: {
629
634
  summary: "Fills a podium one slot at a time at the Moment owned by each Item, and publishes the board and the Tracks it renders to.",
630
635
  appearance:
@@ -667,11 +672,13 @@ const allRankingMarkupSurfaces = [
667
672
  summary: "The resolved board: its Frame, Style, Schedule and ordered Items." },
668
673
  { name: "visual", type: compositionTypes.visualTrack,
669
674
  summary: "The rendered board, an ordinary peer VisualTrack." },
675
+ { name: "events", type: rankingTypes.soundEvents,
676
+ summary: "Animation-linked sound events, published when a sound is authored." },
670
677
  { name: "audio", type: compositionTypes.audioTrack,
671
678
  summary: "The rendered board sound, published only when a sound is authored." },
672
679
  ],
673
680
  example: `<ranking:TopThreeStyle id="podium-style" recipe={recipes.ranking.podium} font={ui-font}/>
674
- <ranking:TopThree id="podium" semantic={speech.semantic} frame={board-frame}
681
+ <ranking:TopThree id="podium" timeline={speech.timeline} frame={board-frame}
675
682
  during={story.selection.board} terminal={story.moment.done}
676
683
  style={podium-style}>
677
684
  <ranking:TopThreeItem id="slot-gold" label="ReGen" icon={icon-regen} at={story.moment.regen}/>
@@ -692,7 +699,7 @@ export const rankingMarkupSurfaces = allRankingMarkupSurfaces;
692
699
 
693
700
  export const rankingManifest: ModuleManifest = {
694
701
  format: "hypit.module@1", name: rankingModuleRef.name, version: rankingModuleRef.version,
695
- dependencies: [artifactDependency, mediaDependency, narrativeDependency, programSpaceDependency, semanticTrackDependency, spatialDependency, temporalDependency, compositionDependency, textDependency],
702
+ dependencies: [artifactDependency, mediaDependency, narrativeDependency, timelineDependency, spatialDependency, temporalDependency, compositionDependency, textDependency],
696
703
  types: [
697
704
  { name: rankingTypes.header.name },
698
705
  { name: rankingTypes.itemSpec.name },
@@ -729,7 +736,7 @@ export const rankingManifest: ModuleManifest = {
729
736
  ], outputs: [{ name: "set", type: rankingTypes.triggeredCandidates }], needs: [] },
730
737
  { name: rankingProducers.schedule.name, inputs: [
731
738
  { name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
732
- { name: "space", type: programSpaceTypes.programSpace },
739
+ { name: "timeline", type: timelineTypes.track },
733
740
  { name: "outer", type: temporalTypes.window }, { name: "candidates", type: rankingTypes.triggeredCandidates },
734
741
  { name: "terminal", type: temporalTypes.instant },
735
742
  ], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
@@ -742,7 +749,7 @@ export const rankingManifest: ModuleManifest = {
742
749
  ], outputs: [{ name: "set", type: rankingTypes.tierWindows }], needs: [] },
743
750
  { name: rankingProducers.tierSchedule.name, inputs: [
744
751
  { name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
745
- { name: "space", type: programSpaceTypes.programSpace },
752
+ { name: "timeline", type: timelineTypes.track },
746
753
  { name: "outer", type: temporalTypes.window }, { name: "windows", type: rankingTypes.tierWindows },
747
754
  ], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
748
755
  { name: rankingProducers.createColumnWindows.name, inputs: [], outputs: [
@@ -754,7 +761,7 @@ export const rankingManifest: ModuleManifest = {
754
761
  ], outputs: [{ name: "set", type: rankingTypes.columnWindows }], needs: [] },
755
762
  { name: rankingProducers.columnSchedule.name, inputs: [
756
763
  { name: "header", type: rankingTypes.header }, { name: "items", type: rankingTypes.itemSpecs },
757
- { name: "space", type: programSpaceTypes.programSpace },
764
+ { name: "timeline", type: timelineTypes.track },
758
765
  { name: "outer", type: temporalTypes.window }, { name: "windows", type: rankingTypes.columnWindows },
759
766
  ], outputs: [{ name: "schedule", type: rankingTypes.schedule }], needs: [] },
760
767
  ...([
@@ -788,7 +795,7 @@ export const rankingManifest: ModuleManifest = {
788
795
  { name: eventProducer.name, inputs: [
789
796
  { name: "schedule", type: rankingTypes.schedule }, { name: "style", type: styleType }, { name: "specs", type: rankingTypes.itemSpecs },
790
797
  ], outputs: [{ name: "events", type: rankingTypes.soundEvents }], needs: [] },
791
- { name: renderProducer.name, inputs: [{ name: "space", type: programSpaceTypes.programSpace }, { name: "program", type: programType }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
798
+ { name: renderProducer.name, inputs: [{ name: "timeline", type: timelineTypes.track }, { name: "program", type: programType }], outputs: [{ name: "track", type: compositionTypes.visualTrack }], needs: [] },
792
799
  ]),
793
800
  { name: rankingProducers.createSounds.name, inputs: [], outputs: [{ name: "sounds", type: rankingTypes.sounds }], needs: [] },
794
801
  ...([
@@ -798,7 +805,7 @@ export const rankingManifest: ModuleManifest = {
798
805
  name: producer.name, inputs: [{ name: "sounds", type: rankingTypes.sounds }, { name: "media", type: mediaTypes.synchronized }], outputs: [{ name: "sounds", type: rankingTypes.sounds }], needs: [],
799
806
  })),
800
807
  { name: rankingProducers.renderAudio.name, inputs: [
801
- { name: "space", type: programSpaceTypes.programSpace }, { name: "events", type: rankingTypes.soundEvents },
808
+ { name: "timeline", type: timelineTypes.track }, { name: "events", type: rankingTypes.soundEvents },
802
809
  { name: "style", type: rankingTypes.soundStyle }, { name: "sounds", type: rankingTypes.sounds },
803
810
  ], outputs: [{ name: "track", type: compositionTypes.audioTrack }], needs: [] },
804
811
  ],
@@ -1,3 +1,4 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import {
2
3
  assertAudioTrackIdentity,
3
4
  assertVisualTrackIdentity,
@@ -14,12 +15,7 @@ import type {
14
15
  VisualTrack,
15
16
  } from "@hypit/composition";
16
17
  import { synchronizedMediaSampleFrames, verifySynchronizedMedia } from "@hypit/media";
17
- import {
18
- assertProgramSpaceIdentity,
19
- programFrameSampleBoundary,
20
- programSpaceSampleFrames,
21
- } from "@hypit/program-space";
22
- import type { ProgramSpace } from "@hypit/program-space";
18
+ import { assertProgramSpaceIdentity, programFrameSampleBoundary, programSpaceSampleFrames } from "@hypit/program-space";
23
19
 
24
20
  import {
25
21
  assertColumnProgram,
@@ -183,6 +179,7 @@ function iconElement(input: {
183
179
 
184
180
  function present(input: {
185
181
  readonly id: string;
182
+ readonly subjectId: string;
186
183
  readonly start: number;
187
184
  readonly end: number;
188
185
  readonly stacking: number;
@@ -191,6 +188,7 @@ function present(input: {
191
188
  }): VisualPresent {
192
189
  return {
193
190
  id: input.id,
191
+ subjectId: input.subjectId,
194
192
  span: { startFrame: input.start, endFrameExclusive: input.end },
195
193
  stacking: { order: input.stacking, tieBreak: input.tieBreak },
196
194
  elements: input.elements,
@@ -251,14 +249,14 @@ function tierItemAnimation(
251
249
  })));
252
250
  }
253
251
 
254
- function sealTrack(space: ProgramSpace, id: string, presents: readonly VisualPresent[]): VisualTrack {
255
- const value = sealVisualTrack({ programSpaceId: space.id, visualIr: "hypit.visual-ir@1", id, presents });
256
- assertVisualTrackIdentity(value, space);
252
+ function sealTrack(timeline: Timeline, id: string, presents: readonly VisualPresent[]): VisualTrack {
253
+ const value = sealVisualTrack({ programSpaceId: timeline.id, visualIr: "hypit.visual-ir@1", id, presents });
254
+ assertVisualTrackIdentity(value, timeline);
257
255
  return value;
258
256
  }
259
257
 
260
- export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram): VisualTrack {
261
- assertProgramSpaceIdentity(space);
258
+ export function renderTierBoard(timeline: Timeline, program: TierBoardProgram): VisualTrack {
259
+ assertProgramSpaceIdentity(timeline);
262
260
  assertTierBoardProgram(program);
263
261
  const { canvas, frame, style, schedule } = program;
264
262
  const geometry = tierBoardGeometry(frame.widthPx, frame.heightPx, style);
@@ -307,7 +305,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
307
305
  }));
308
306
  }
309
307
  presents.push(present({
310
- id: `${program.id}:board`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
308
+ id: `${program.id}:board`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
311
309
  stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:board`, elements: boardElements,
312
310
  }));
313
311
  const entries = new Map(schedule.entries.map((entry) => [entry.itemId, entry]));
@@ -351,7 +349,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
351
349
  : (localFrame) => fromHighTierItemPose(
352
350
  localFrame, duration, stage, absoluteCell, style.motion.appearFrames, style.motion.moveFrames));
353
351
  presents.push(present({
354
- id: `${program.id}:item:${item.id}:reveal`,
352
+ id: `${program.id}:item:${item.id}:reveal`, subjectId: item.id,
355
353
  start: entry.window.startFrame,
356
354
  end: entry.window.endFrameExclusive,
357
355
  stacking: item.stackingOrder ?? (item.entry === "drop" ? style.stageStackingOrder : style.itemStackingOrder),
@@ -360,7 +358,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
360
358
  }));
361
359
  }
362
360
  if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
363
- id: `${program.id}:item:${item.id}:settled`,
361
+ id: `${program.id}:item:${item.id}:settled`, subjectId: item.id,
364
362
  start: entry.settled.startFrame,
365
363
  end: entry.settled.endFrameExclusive,
366
364
  stacking: item.stackingOrder ?? style.itemStackingOrder,
@@ -368,7 +366,7 @@ export function renderTierBoard(space: ProgramSpace, program: TierBoardProgram):
368
366
  elements: itemElements(),
369
367
  }));
370
368
  }
371
- return sealTrack(space, program.id, presents);
369
+ return sealTrack(timeline, program.id, presents);
372
370
  }
373
371
 
374
372
  function rowY(frameY: number, frameHeight: number, padding: number, count: number, index: number, height: number, gap: number): number {
@@ -461,8 +459,8 @@ function columnRevealAnimation(input: {
461
459
  ]);
462
460
  }
463
461
 
464
- export function renderColumn(space: ProgramSpace, program: ColumnProgram): VisualTrack {
465
- assertProgramSpaceIdentity(space);
462
+ export function renderColumn(timeline: Timeline, program: ColumnProgram): VisualTrack {
463
+ assertProgramSpaceIdentity(timeline);
466
464
  assertColumnProgram(program);
467
465
  const { canvas, frame, style, schedule } = program;
468
466
  const presents: VisualPresent[] = [];
@@ -506,7 +504,7 @@ export function renderColumn(space: ProgramSpace, program: ColumnProgram): Visua
506
504
  ],
507
505
  }));
508
506
  }
509
- presents.push(present({ id: `${program.id}:board`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
507
+ presents.push(present({ id: `${program.id}:board`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
510
508
  stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:board`, elements: boardElements }));
511
509
  for (const [index, item] of program.items.entries()) {
512
510
  const entry = entries.get(item.id)!;
@@ -549,18 +547,18 @@ export function renderColumn(space: ProgramSpace, program: ColumnProgram): Visua
549
547
  stageSize: style.stageSizePx, finalSize: contentSize, easing: style.motion.easing,
550
548
  });
551
549
  presents.push(present({
552
- id: `${program.id}:item:${item.id}:stage`, start: entry.window.startFrame, end: entry.window.endFrameExclusive,
550
+ id: `${program.id}:item:${item.id}:stage`, subjectId: item.id, start: entry.window.startFrame, end: entry.window.endFrameExclusive,
553
551
  stacking: item.stackingOrder ?? style.stageStackingOrder,
554
552
  tieBreak: `${program.id}:item:${String(item.rank).padStart(4, "0")}:${item.id}:stage`, elements: itemElements(rootAnimation),
555
553
  }));
556
554
  }
557
555
  if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
558
- id: `${program.id}:item:${item.id}:settled`, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
556
+ id: `${program.id}:item:${item.id}:settled`, subjectId: item.id, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
559
557
  stacking: item.stackingOrder ?? style.itemStackingOrder,
560
558
  tieBreak: `${program.id}:item:${String(item.rank).padStart(4, "0")}:${item.id}:settled`, elements: itemElements(),
561
559
  }));
562
560
  }
563
- return sealTrack(space, program.id, presents);
561
+ return sealTrack(timeline, program.id, presents);
564
562
  }
565
563
 
566
564
  function topSlotX(program: TopThreeProgram, index: number): number {
@@ -578,8 +576,8 @@ function activeAccentAnimation(duration: number, activeFrames: number): VisualAn
578
576
  ]);
579
577
  }
580
578
 
581
- export function renderTopThree(space: ProgramSpace, program: TopThreeProgram): VisualTrack {
582
- assertProgramSpaceIdentity(space);
579
+ export function renderTopThree(timeline: Timeline, program: TopThreeProgram): VisualTrack {
580
+ assertProgramSpaceIdentity(timeline);
583
581
  assertTopThreeProgram(program);
584
582
  const { frame, style, schedule } = program;
585
583
  const boardElements: VisualElement[] = [absoluteBox({
@@ -599,7 +597,7 @@ export function renderTopThree(space: ProgramSpace, program: TopThreeProgram): V
599
597
  }));
600
598
  }
601
599
  const presents: VisualPresent[] = [present({
602
- id: `${program.id}:slots`, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
600
+ id: `${program.id}:slots`, subjectId: program.id, start: schedule.outer.startFrame, end: schedule.outer.endFrameExclusive,
603
601
  stacking: style.boardStackingOrder, tieBreak: `${program.id}:0000:slots`, elements: boardElements,
604
602
  })];
605
603
  for (const [index, item] of program.items.entries()) {
@@ -640,43 +638,43 @@ export function renderTopThree(space: ProgramSpace, program: TopThreeProgram): V
640
638
  return elements;
641
639
  };
642
640
  presents.push(present({
643
- id: `${program.id}:item:${item.id}:stage`, start: entry.stage.startFrame, end: entry.stage.endFrameExclusive,
641
+ id: `${program.id}:item:${item.id}:stage`, subjectId: item.id, start: entry.stage.startFrame, end: entry.stage.endFrameExclusive,
644
642
  stacking: item.stackingOrder ?? style.itemStackingOrder,
645
643
  tieBreak: `${program.id}:item:${String(index).padStart(4, "0")}:${item.id}:stage`, elements: itemElements(true),
646
644
  }));
647
645
  if (entry.settled.endFrameExclusive > entry.settled.startFrame) presents.push(present({
648
- id: `${program.id}:item:${item.id}:settled`, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
646
+ id: `${program.id}:item:${item.id}:settled`, subjectId: item.id, start: entry.settled.startFrame, end: entry.settled.endFrameExclusive,
649
647
  stacking: item.stackingOrder ?? style.itemStackingOrder,
650
648
  tieBreak: `${program.id}:item:${String(index).padStart(4, "0")}:${item.id}:settled`, elements: itemElements(false),
651
649
  }));
652
650
  }
653
- return sealTrack(space, program.id, presents);
651
+ return sealTrack(timeline, program.id, presents);
654
652
  }
655
653
 
656
654
  export function renderRankingAudio(
657
- space: ProgramSpace,
655
+ timeline: Timeline,
658
656
  plan: RankingSoundEventPlan,
659
657
  style: RankingSoundStyle,
660
658
  sounds: RankingSoundSet,
661
659
  ): AudioTrack {
662
- assertProgramSpaceIdentity(space);
660
+ assertProgramSpaceIdentity(timeline);
663
661
  assertRankingSoundEventPlan(plan);
664
662
  assertRankingSoundStyle(style);
665
663
  assert(sounds.appear !== undefined || sounds.move !== undefined, "Ranking audio requires at least one authored sound.");
666
664
  if (sounds.appear !== undefined) verifySynchronizedMedia(sounds.appear);
667
665
  if (sounds.move !== undefined) verifySynchronizedMedia(sounds.move);
668
- const totalSamples = programSpaceSampleFrames(space, 48_000);
669
- const fadeSamples = programFrameSampleBoundary(space, style.fadeFrames, 48_000);
666
+ const totalSamples = programSpaceSampleFrames(timeline, 48_000);
667
+ const fadeSamples = programFrameSampleBoundary(timeline, style.fadeFrames, 48_000);
670
668
  const clips: AudioClip[] = [];
671
669
  for (const event of plan.events) {
672
670
  const media = sounds[event.kind];
673
671
  if (media === undefined) continue;
674
672
  const audio = media.audio;
675
673
  assert(audio !== undefined, `Ranking ${event.kind} sound has no normalized audio.`);
676
- const startSample = programFrameSampleBoundary(space, event.frame, 48_000);
674
+ const startSample = programFrameSampleBoundary(timeline, event.frame, 48_000);
677
675
  const sourceSampleFrames = synchronizedMediaSampleFrames(media);
678
676
  const length = Math.min(sourceSampleFrames, totalSamples - startSample);
679
- assert(length > 0, `Ranking sound ${event.id} starts after ProgramSpace.`);
677
+ assert(length > 0, `Ranking sound ${event.id} starts after Timeline.`);
680
678
  assert(fadeSamples <= length, `Ranking sound ${event.id} fade exceeds its audible interval.`);
681
679
  clips.push({
682
680
  id: event.id,
@@ -692,7 +690,7 @@ export function renderRankingAudio(
692
690
  if (sounds[kind] !== undefined) assert(clips.some((clip) => clip.id.endsWith(`:${kind}`)),
693
691
  `Ranking ${kind} sound has no matching visual event.`);
694
692
  }
695
- const track = sealAudioTrack({ programSpaceId: space.id, id: `${plan.id}.audio`, clips });
696
- assertAudioTrackIdentity(track, space);
693
+ const track = sealAudioTrack({ programSpaceId: timeline.id, id: `${plan.id}.audio`, clips });
694
+ assertAudioTrackIdentity(track, timeline);
697
695
  return track;
698
696
  }
@@ -1,13 +1,10 @@
1
+ import type { Timeline } from "@hypit/timeline";
1
2
  import {
2
3
  assertFontArtifactRef,
3
4
  verifySynchronizedMedia,
4
5
  } from "@hypit/media";
5
6
  import type { SynchronizedMedia } from "@hypit/media";
6
- import {
7
- assertProgramSpaceIdentity,
8
- programSpaceFrameCount,
9
- } from "@hypit/program-space";
10
- import type { ProgramSpace } from "@hypit/program-space";
7
+ import { assertProgramSpaceIdentity, programSpaceFrameCount } from "@hypit/program-space";
11
8
  import { canonicalize, isResourceId } from "@hypit/protocol";
12
9
  import { verifyText } from "@hypit/text";
13
10
  import type { Text } from "@hypit/text";
@@ -334,7 +331,7 @@ export function appendTriggeredRankingCandidate(
334
331
  export function buildTriggeredRankingSchedule(input: {
335
332
  readonly header: RankingHeader;
336
333
  readonly items: RankingItemSpecSet;
337
- readonly space: ProgramSpace;
334
+ readonly timeline: Timeline;
338
335
  readonly outer: TemporalWindow;
339
336
  readonly candidates: TriggeredRankingCandidateSet;
340
337
  readonly terminal: TemporalInstant;
@@ -345,10 +342,10 @@ export function buildTriggeredRankingSchedule(input: {
345
342
  assert(input.header.variant === "top-three", "Only TopThree uses the triggered Ranking schedule.");
346
343
  assert(input.items.items.length > 0, "Ranking requires at least one Item.");
347
344
  assertTriggeredRankingCandidateSet(input.candidates);
348
- assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.space });
349
- assertTemporalInstantFor(input.terminal, { subjectId: input.header.id, space: input.space });
345
+ assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.timeline });
346
+ assertTemporalInstantFor(input.terminal, { subjectId: input.header.id, space: input.timeline });
350
347
  for (const candidate of input.candidates.entries) {
351
- assertTemporalInstantFor(candidate.activation, { subjectId: candidate.itemId, space: input.space });
348
+ assertTemporalInstantFor(candidate.activation, { subjectId: candidate.itemId, space: input.timeline });
352
349
  }
353
350
  const expected = new Set(input.items.items.map((item) => item.id));
354
351
  const received = new Set(input.candidates.entries.map((entry) => entry.itemId));
@@ -379,7 +376,7 @@ export function buildTriggeredRankingSchedule(input: {
379
376
  terminalFrame: resolved.terminalFrame,
380
377
  entries,
381
378
  };
382
- assertRankingSchedule(result, input.space);
379
+ assertRankingSchedule(result, input.timeline);
383
380
  return canonicalize(result) as unknown as TriggeredRankingSchedule;
384
381
  }
385
382
 
@@ -448,7 +445,7 @@ export function appendColumnWindow(
448
445
  function buildWindowedRankingSchedule(input: {
449
446
  readonly header: RankingHeader;
450
447
  readonly items: RankingItemSpecSet;
451
- readonly space: ProgramSpace;
448
+ readonly timeline: Timeline;
452
449
  readonly outer: TemporalWindow;
453
450
  readonly windows: RankingWindowSet;
454
451
  readonly variant: "tier-board" | "column";
@@ -460,7 +457,7 @@ function buildWindowedRankingSchedule(input: {
460
457
  assert(input.items.variant === input.variant, `${label} Schedule requires ${label} Items.`);
461
458
  assert(input.items.items.length > 0, `${label} requires at least one Item.`);
462
459
  assertRankingWindowSet(input.windows, `${label}WindowSet`);
463
- assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.space });
460
+ assertTemporalWindowFor(input.outer, { subjectId: input.header.id, space: input.timeline });
464
461
  frame(input.outer.span.startFrame, `${label} outer window start`);
465
462
  frame(input.outer.span.endFrameExclusive, `${label} outer window end`);
466
463
  assert(input.outer.span.endFrameExclusive > input.outer.span.startFrame, `${label} outer window is empty.`);
@@ -474,7 +471,7 @@ function buildWindowedRankingSchedule(input: {
474
471
  || left.window.span.endFrameExclusive - right.window.span.endFrameExclusive
475
472
  || left.itemId.localeCompare(right.itemId));
476
473
  for (const entry of orderedWindows) {
477
- assertTemporalWindowFor(entry.window, { subjectId: entry.itemId, space: input.space });
474
+ assertTemporalWindowFor(entry.window, { subjectId: entry.itemId, space: input.timeline });
478
475
  assert(entry.window.span.startFrame >= input.outer.span.startFrame
479
476
  && entry.window.span.endFrameExclusive <= input.outer.span.endFrameExclusive,
480
477
  `${label} Item ${entry.itemId} window is outside the outer window.`);
@@ -524,7 +521,7 @@ function buildWindowedRankingSchedule(input: {
524
521
  export function buildTierBoardSchedule(input: {
525
522
  readonly header: RankingHeader;
526
523
  readonly items: RankingItemSpecSet;
527
- readonly space: ProgramSpace;
524
+ readonly timeline: Timeline;
528
525
  readonly outer: TemporalWindow;
529
526
  readonly windows: TierBoardWindowSet;
530
527
  }): TierBoardSchedule {
@@ -534,7 +531,7 @@ export function buildTierBoardSchedule(input: {
534
531
  export function buildColumnSchedule(input: {
535
532
  readonly header: RankingHeader;
536
533
  readonly items: RankingItemSpecSet;
537
- readonly space: ProgramSpace;
534
+ readonly timeline: Timeline;
538
535
  readonly outer: TemporalWindow;
539
536
  readonly windows: ColumnWindowSet;
540
537
  }): ColumnSchedule {
@@ -626,12 +623,12 @@ function assertWindowedRankingSchedule(value: TierBoardSchedule | ColumnSchedule
626
623
  }
627
624
  }
628
625
 
629
- export function assertRankingSchedule(value: RankingSchedule, space?: ProgramSpace): void {
626
+ export function assertRankingSchedule(value: RankingSchedule, timeline?: Timeline): void {
630
627
  if (value.variant === "top-three") assertTriggeredRankingSchedule(value);
631
628
  else assertWindowedRankingSchedule(value);
632
- if (space !== undefined) {
633
- assertProgramSpaceIdentity(space);
634
- assert(value.outer.endFrameExclusive <= programSpaceFrameCount(space), "RankingSchedule exceeds ProgramSpace.");
629
+ if (timeline !== undefined) {
630
+ assertProgramSpaceIdentity(timeline);
631
+ assert(value.outer.endFrameExclusive <= programSpaceFrameCount(timeline), "RankingSchedule exceeds Timeline.");
635
632
  }
636
633
  }
637
634