@vgai/engine 0.2.0 → 0.3.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 (541) hide show
  1. package/README.md +3 -1
  2. package/dist/adapter/authoring.d.ts +404 -0
  3. package/dist/adapter/authoring.d.ts.map +1 -0
  4. package/dist/adapter/authoring.js +22 -0
  5. package/dist/adapter/colyseus-networking-adapter.d.ts +43 -0
  6. package/dist/adapter/colyseus-networking-adapter.d.ts.map +1 -0
  7. package/dist/adapter/colyseus-networking-adapter.js +38 -0
  8. package/dist/adapter/first-party-systems.d.ts +38 -0
  9. package/dist/adapter/first-party-systems.d.ts.map +1 -0
  10. package/dist/adapter/first-party-systems.js +77 -0
  11. package/dist/adapter/game-adapter.d.ts +133 -0
  12. package/dist/adapter/game-adapter.d.ts.map +1 -0
  13. package/dist/adapter/game-adapter.js +10 -0
  14. package/dist/adapter/host-context.d.ts +73 -0
  15. package/dist/adapter/host-context.d.ts.map +1 -0
  16. package/dist/adapter/host-context.js +16 -0
  17. package/dist/adapter/index.d.ts +22 -0
  18. package/dist/adapter/index.d.ts.map +1 -0
  19. package/dist/adapter/index.js +15 -0
  20. package/dist/adapter/ingest/game-contract.d.ts +53 -0
  21. package/dist/adapter/ingest/game-contract.d.ts.map +1 -0
  22. package/dist/adapter/ingest/game-contract.js +30 -0
  23. package/dist/adapter/ingest/overlay-applier.d.ts +118 -0
  24. package/dist/adapter/ingest/overlay-applier.d.ts.map +1 -0
  25. package/dist/adapter/ingest/overlay-applier.js +132 -0
  26. package/dist/adapter/ingest/overlay-apply.d.ts +60 -0
  27. package/dist/adapter/ingest/overlay-apply.d.ts.map +1 -0
  28. package/dist/adapter/ingest/overlay-apply.js +101 -0
  29. package/dist/adapter/ingest/overlay-file.d.ts +79 -0
  30. package/dist/adapter/ingest/overlay-file.d.ts.map +1 -0
  31. package/dist/adapter/ingest/overlay-file.js +66 -0
  32. package/dist/adapter/ingest/overlay-report.d.ts +113 -0
  33. package/dist/adapter/ingest/overlay-report.d.ts.map +1 -0
  34. package/dist/adapter/ingest/overlay-report.js +103 -0
  35. package/dist/adapter/ingest/scene-capture.d.ts +97 -0
  36. package/dist/adapter/ingest/scene-capture.d.ts.map +1 -0
  37. package/dist/adapter/ingest/scene-capture.js +248 -0
  38. package/dist/adapter/ingest/upstream-pin.d.ts +47 -0
  39. package/dist/adapter/ingest/upstream-pin.d.ts.map +1 -0
  40. package/dist/adapter/ingest/upstream-pin.js +50 -0
  41. package/dist/adapter/loop-gate-report.d.ts +34 -0
  42. package/dist/adapter/loop-gate-report.d.ts.map +1 -0
  43. package/dist/adapter/loop-gate-report.js +37 -0
  44. package/dist/adapter/rapier-physics-adapter.d.ts +12 -0
  45. package/dist/adapter/rapier-physics-adapter.d.ts.map +1 -0
  46. package/dist/adapter/rapier-physics-adapter.js +46 -0
  47. package/dist/adapter/system-adapter.d.ts +133 -0
  48. package/dist/adapter/system-adapter.d.ts.map +1 -0
  49. package/dist/adapter/system-adapter.js +13 -0
  50. package/dist/adapter/transform.d.ts +18 -0
  51. package/dist/adapter/transform.d.ts.map +1 -0
  52. package/dist/adapter/transform.js +1 -0
  53. package/dist/adapter/vgai-scene-game-adapter.d.ts +116 -0
  54. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +1 -0
  55. package/dist/adapter/vgai-scene-game-adapter.js +714 -0
  56. package/dist/adapter/world-kind.d.ts +30 -0
  57. package/dist/adapter/world-kind.d.ts.map +1 -0
  58. package/dist/adapter/world-kind.js +18 -0
  59. package/dist/ai/navigation.d.ts +64 -0
  60. package/dist/ai/navigation.d.ts.map +1 -0
  61. package/dist/ai/navigation.js +133 -0
  62. package/dist/animation/anim-graph-types.d.ts +25 -0
  63. package/dist/animation/anim-graph-types.d.ts.map +1 -0
  64. package/dist/animation/anim-graph-types.js +1 -0
  65. package/dist/animation/animation-clock.d.ts +213 -0
  66. package/dist/animation/animation-clock.d.ts.map +1 -0
  67. package/dist/animation/animation-clock.js +301 -0
  68. package/dist/animation/blend-node.d.ts +22 -0
  69. package/dist/animation/blend-node.d.ts.map +1 -0
  70. package/dist/animation/blend-node.js +97 -0
  71. package/dist/animation/camera-ownership.d.ts +250 -0
  72. package/dist/animation/camera-ownership.d.ts.map +1 -0
  73. package/dist/animation/camera-ownership.js +169 -0
  74. package/dist/animation/cinematic-cues.d.ts +200 -0
  75. package/dist/animation/cinematic-cues.d.ts.map +1 -0
  76. package/dist/animation/cinematic-cues.js +213 -0
  77. package/dist/animation/clip-map.d.ts +12 -0
  78. package/dist/animation/clip-map.d.ts.map +1 -0
  79. package/dist/animation/clip-map.js +37 -0
  80. package/dist/animation/gsap-registration.d.ts +119 -0
  81. package/dist/animation/gsap-registration.d.ts.map +1 -0
  82. package/dist/animation/gsap-registration.js +92 -0
  83. package/dist/animation/theatre-clock-binding.d.ts +89 -0
  84. package/dist/animation/theatre-clock-binding.d.ts.map +1 -0
  85. package/dist/animation/theatre-clock-binding.js +29 -0
  86. package/dist/animation/theatre-director.d.ts +242 -0
  87. package/dist/animation/theatre-director.d.ts.map +1 -0
  88. package/dist/animation/theatre-director.js +235 -0
  89. package/dist/animation/theatre-object-binding.d.ts +305 -0
  90. package/dist/animation/theatre-object-binding.d.ts.map +1 -0
  91. package/dist/animation/theatre-object-binding.js +351 -0
  92. package/dist/animation/xstate-animation-binding.d.ts +111 -0
  93. package/dist/animation/xstate-animation-binding.d.ts.map +1 -0
  94. package/dist/animation/xstate-animation-binding.js +307 -0
  95. package/dist/animation/xstate-animation-meta.d.ts +228 -0
  96. package/dist/animation/xstate-animation-meta.d.ts.map +1 -0
  97. package/dist/animation/xstate-animation-meta.js +221 -0
  98. package/dist/assets.d.ts +26 -0
  99. package/dist/assets.d.ts.map +1 -0
  100. package/dist/assets.js +55 -0
  101. package/dist/audio/index.d.ts +4 -0
  102. package/dist/audio/index.d.ts.map +1 -0
  103. package/dist/audio/index.js +24 -0
  104. package/dist/audio/tone-clock-binding.d.ts +75 -0
  105. package/dist/audio/tone-clock-binding.d.ts.map +1 -0
  106. package/dist/audio/tone-clock-binding.js +29 -0
  107. package/dist/audio/tone-context.d.ts +114 -0
  108. package/dist/audio/tone-context.d.ts.map +1 -0
  109. package/dist/audio/tone-context.js +39 -0
  110. package/dist/audio/tone-offline-render.d.ts +90 -0
  111. package/dist/audio/tone-offline-render.d.ts.map +1 -0
  112. package/dist/audio/tone-offline-render.js +56 -0
  113. package/dist/audio/wav-encode.d.ts +38 -0
  114. package/dist/audio/wav-encode.d.ts.map +1 -0
  115. package/dist/audio/wav-encode.js +97 -0
  116. package/dist/core/game-loop.d.ts +21 -0
  117. package/dist/core/game-loop.d.ts.map +1 -0
  118. package/dist/core/game-loop.js +130 -0
  119. package/dist/core/system-runner.d.ts +120 -0
  120. package/dist/core/system-runner.d.ts.map +1 -0
  121. package/dist/core/system-runner.js +286 -0
  122. package/dist/core/types.d.ts +58 -0
  123. package/dist/core/types.d.ts.map +1 -0
  124. package/dist/core/types.js +25 -0
  125. package/dist/data/data-asset.d.ts +101 -0
  126. package/dist/data/data-asset.d.ts.map +1 -0
  127. package/dist/data/data-asset.js +122 -0
  128. package/dist/data/data-check-core.d.ts +110 -0
  129. package/dist/data/data-check-core.d.ts.map +1 -0
  130. package/dist/data/data-check-core.js +178 -0
  131. package/dist/data/data-ref.d.ts +79 -0
  132. package/dist/data/data-ref.d.ts.map +1 -0
  133. package/dist/data/data-ref.js +130 -0
  134. package/dist/data/vite-plugin-data.d.ts +79 -0
  135. package/dist/data/vite-plugin-data.d.ts.map +1 -0
  136. package/dist/data/vite-plugin-data.js +217 -0
  137. package/dist/dev/console-bridge.d.ts +22 -0
  138. package/dist/dev/console-bridge.d.ts.map +1 -0
  139. package/dist/dev/console-bridge.js +71 -0
  140. package/dist/dev/debug-draw.d.ts +24 -0
  141. package/dist/dev/debug-draw.d.ts.map +1 -0
  142. package/dist/dev/debug-draw.js +73 -0
  143. package/dist/dev/logger.d.ts +30 -0
  144. package/dist/dev/logger.d.ts.map +1 -0
  145. package/dist/dev/logger.js +90 -0
  146. package/dist/ecs/component-manager.d.ts +189 -0
  147. package/dist/ecs/component-manager.d.ts.map +1 -0
  148. package/dist/ecs/component-manager.js +676 -0
  149. package/dist/ecs/game-component.d.ts +97 -0
  150. package/dist/ecs/game-component.d.ts.map +1 -0
  151. package/dist/ecs/game-component.js +80 -0
  152. package/dist/ecs/hmr-swap-report.d.ts +53 -0
  153. package/dist/ecs/hmr-swap-report.d.ts.map +1 -0
  154. package/dist/ecs/hmr-swap-report.js +55 -0
  155. package/dist/index.d.ts +37 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +30 -0
  158. package/dist/input/input-manager.d.ts +596 -0
  159. package/dist/input/input-manager.d.ts.map +1 -0
  160. package/dist/input/input-manager.js +1564 -0
  161. package/dist/input/input-types.d.ts +171 -0
  162. package/dist/input/input-types.d.ts.map +1 -0
  163. package/dist/input/input-types.js +1 -0
  164. package/dist/input/prompt-labels.d.ts +21 -0
  165. package/dist/input/prompt-labels.d.ts.map +1 -0
  166. package/dist/input/prompt-labels.js +121 -0
  167. package/dist/input/rebind-controller.d.ts +59 -0
  168. package/dist/input/rebind-controller.d.ts.map +1 -0
  169. package/dist/input/rebind-controller.js +85 -0
  170. package/dist/input/schema.d.ts +16 -0
  171. package/dist/input/schema.d.ts.map +1 -0
  172. package/dist/input/schema.js +228 -0
  173. package/dist/loader.d.ts +43 -0
  174. package/dist/loader.d.ts.map +1 -0
  175. package/dist/loader.js +59 -0
  176. package/dist/manifest/index.d.ts +5 -0
  177. package/dist/manifest/index.d.ts.map +1 -0
  178. package/dist/manifest/index.js +8 -0
  179. package/dist/manifest/load-file.d.ts +4 -0
  180. package/dist/manifest/load-file.d.ts.map +1 -0
  181. package/dist/manifest/load-file.js +14 -0
  182. package/dist/manifest/load.d.ts +117 -0
  183. package/dist/manifest/load.d.ts.map +1 -0
  184. package/dist/manifest/load.js +255 -0
  185. package/dist/manifest/schema.d.ts +173 -0
  186. package/dist/manifest/schema.d.ts.map +1 -0
  187. package/dist/manifest/schema.js +302 -0
  188. package/dist/physics/collision-system.d.ts +41 -0
  189. package/dist/physics/collision-system.d.ts.map +1 -0
  190. package/dist/physics/collision-system.js +64 -0
  191. package/dist/physics/physics-registry.d.ts +45 -0
  192. package/dist/physics/physics-registry.d.ts.map +1 -0
  193. package/dist/physics/physics-registry.js +65 -0
  194. package/dist/physics/transform-writer.d.ts +16 -0
  195. package/dist/physics/transform-writer.d.ts.map +1 -0
  196. package/dist/physics/transform-writer.js +38 -0
  197. package/dist/physics/trigger-dispatch.d.ts +24 -0
  198. package/dist/physics/trigger-dispatch.d.ts.map +1 -0
  199. package/dist/physics/trigger-dispatch.js +80 -0
  200. package/dist/react/game-state.d.ts +105 -0
  201. package/dist/react/game-state.d.ts.map +1 -0
  202. package/dist/react/game-state.js +144 -0
  203. package/dist/react/use-data.d.ts +60 -0
  204. package/dist/react/use-data.d.ts.map +1 -0
  205. package/dist/react/use-data.js +96 -0
  206. package/dist/react/use-selection.d.ts +75 -0
  207. package/dist/react/use-selection.d.ts.map +1 -0
  208. package/dist/react/use-selection.js +90 -0
  209. package/dist/render/auto-batcher.d.ts +34 -0
  210. package/dist/render/auto-batcher.d.ts.map +1 -0
  211. package/dist/render/auto-batcher.js +140 -0
  212. package/dist/render/render-batch-system.d.ts +33 -0
  213. package/dist/render/render-batch-system.d.ts.map +1 -0
  214. package/dist/render/render-batch-system.js +230 -0
  215. package/dist/render/render-features.d.ts +47 -0
  216. package/dist/render/render-features.d.ts.map +1 -0
  217. package/dist/render/render-features.js +105 -0
  218. package/dist/render/render-settings.d.ts +36 -0
  219. package/dist/render/render-settings.d.ts.map +1 -0
  220. package/dist/render/render-settings.js +51 -0
  221. package/dist/runtime/create-runtime.d.ts +280 -0
  222. package/dist/runtime/create-runtime.d.ts.map +1 -0
  223. package/dist/runtime/create-runtime.js +795 -0
  224. package/dist/runtime/frame-selector-cache.d.ts +41 -0
  225. package/dist/runtime/frame-selector-cache.d.ts.map +1 -0
  226. package/dist/runtime/frame-selector-cache.js +65 -0
  227. package/dist/runtime/game.d.ts +433 -0
  228. package/dist/runtime/game.d.ts.map +1 -0
  229. package/dist/runtime/game.js +569 -0
  230. package/dist/runtime/input-router.d.ts +78 -0
  231. package/dist/runtime/input-router.d.ts.map +1 -0
  232. package/dist/runtime/input-router.js +171 -0
  233. package/dist/runtime/mount-game.d.ts +129 -0
  234. package/dist/runtime/mount-game.d.ts.map +1 -0
  235. package/dist/runtime/mount-game.js +152 -0
  236. package/dist/runtime/mount-manifest.d.ts +119 -0
  237. package/dist/runtime/mount-manifest.d.ts.map +1 -0
  238. package/dist/runtime/mount-manifest.js +204 -0
  239. package/dist/runtime/render-audio-control.d.ts +110 -0
  240. package/dist/runtime/render-audio-control.d.ts.map +1 -0
  241. package/dist/runtime/render-audio-control.js +111 -0
  242. package/dist/runtime/render-control.d.ts +291 -0
  243. package/dist/runtime/render-control.d.ts.map +1 -0
  244. package/dist/runtime/render-control.js +264 -0
  245. package/dist/runtime/render-seed.d.ts +57 -0
  246. package/dist/runtime/render-seed.d.ts.map +1 -0
  247. package/dist/runtime/render-seed.js +74 -0
  248. package/dist/runtime/scene-ui-bridge.d.ts +69 -0
  249. package/dist/runtime/scene-ui-bridge.d.ts.map +1 -0
  250. package/dist/runtime/scene-ui-bridge.js +23 -0
  251. package/dist/runtime/scene-ui-data.d.ts +13 -0
  252. package/dist/runtime/scene-ui-data.d.ts.map +1 -0
  253. package/dist/runtime/scene-ui-data.js +92 -0
  254. package/dist/runtime/state-bridge.d.ts +47 -0
  255. package/dist/runtime/state-bridge.d.ts.map +1 -0
  256. package/dist/runtime/state-bridge.js +53 -0
  257. package/dist/runtime/types.d.ts +179 -0
  258. package/dist/runtime/types.d.ts.map +1 -0
  259. package/dist/runtime/types.js +1 -0
  260. package/dist/scene/asset-loaders.d.ts +79 -0
  261. package/dist/scene/asset-loaders.d.ts.map +1 -0
  262. package/dist/scene/asset-loaders.js +141 -0
  263. package/dist/scene/asset-paths.d.ts +11 -0
  264. package/dist/scene/asset-paths.d.ts.map +1 -0
  265. package/dist/scene/asset-paths.js +108 -0
  266. package/dist/scene/asset-ref-check.d.ts +88 -0
  267. package/dist/scene/asset-ref-check.d.ts.map +1 -0
  268. package/dist/scene/asset-ref-check.js +214 -0
  269. package/dist/scene/asset-registry.d.ts +30 -0
  270. package/dist/scene/asset-registry.d.ts.map +1 -0
  271. package/dist/scene/asset-registry.js +50 -0
  272. package/dist/scene/collider-dimensions.d.ts +63 -0
  273. package/dist/scene/collider-dimensions.d.ts.map +1 -0
  274. package/dist/scene/collider-dimensions.js +98 -0
  275. package/dist/scene/component-registry.d.ts +17 -0
  276. package/dist/scene/component-registry.d.ts.map +1 -0
  277. package/dist/scene/component-registry.js +28 -0
  278. package/dist/scene/defaults.d.ts +252 -0
  279. package/dist/scene/defaults.d.ts.map +1 -0
  280. package/dist/scene/defaults.js +151 -0
  281. package/dist/scene/geometries/index.d.ts +8 -0
  282. package/dist/scene/geometries/index.d.ts.map +1 -0
  283. package/dist/scene/geometries/index.js +7 -0
  284. package/dist/scene/geometries/terrain.d.ts +2 -0
  285. package/dist/scene/geometries/terrain.d.ts.map +1 -0
  286. package/dist/scene/geometries/terrain.js +37 -0
  287. package/dist/scene/geometry-registry.d.ts +24 -0
  288. package/dist/scene/geometry-registry.d.ts.map +1 -0
  289. package/dist/scene/geometry-registry.js +20 -0
  290. package/dist/scene/instance-registry.d.ts +36 -0
  291. package/dist/scene/instance-registry.d.ts.map +1 -0
  292. package/dist/scene/instance-registry.js +55 -0
  293. package/dist/scene/instancers/grid.d.ts +2 -0
  294. package/dist/scene/instancers/grid.d.ts.map +1 -0
  295. package/dist/scene/instancers/grid.js +36 -0
  296. package/dist/scene/instancers/index.d.ts +8 -0
  297. package/dist/scene/instancers/index.d.ts.map +1 -0
  298. package/dist/scene/instancers/index.js +7 -0
  299. package/dist/scene/light-camera-factory.d.ts +23 -0
  300. package/dist/scene/light-camera-factory.d.ts.map +1 -0
  301. package/dist/scene/light-camera-factory.js +68 -0
  302. package/dist/scene/material-factory.d.ts +17 -0
  303. package/dist/scene/material-factory.d.ts.map +1 -0
  304. package/dist/scene/material-factory.js +197 -0
  305. package/dist/scene/material-registry.d.ts +40 -0
  306. package/dist/scene/material-registry.d.ts.map +1 -0
  307. package/dist/scene/material-registry.js +44 -0
  308. package/dist/scene/materials/index.d.ts +8 -0
  309. package/dist/scene/materials/index.d.ts.map +1 -0
  310. package/dist/scene/materials/index.js +7 -0
  311. package/dist/scene/materials/water.d.ts +2 -0
  312. package/dist/scene/materials/water.d.ts.map +1 -0
  313. package/dist/scene/materials/water.js +54 -0
  314. package/dist/scene/parse.d.ts +23 -0
  315. package/dist/scene/parse.d.ts.map +1 -0
  316. package/dist/scene/parse.js +179 -0
  317. package/dist/scene/particles-factory.d.ts +33 -0
  318. package/dist/scene/particles-factory.d.ts.map +1 -0
  319. package/dist/scene/particles-factory.js +282 -0
  320. package/dist/scene/scene-apply.d.ts +109 -0
  321. package/dist/scene/scene-apply.d.ts.map +1 -0
  322. package/dist/scene/scene-apply.js +326 -0
  323. package/dist/scene/scene-diff-schema.d.ts +285 -0
  324. package/dist/scene/scene-diff-schema.d.ts.map +1 -0
  325. package/dist/scene/scene-diff-schema.js +92 -0
  326. package/dist/scene/scene-diff-types.d.ts +40 -0
  327. package/dist/scene/scene-diff-types.d.ts.map +1 -0
  328. package/dist/scene/scene-diff-types.js +14 -0
  329. package/dist/scene/scene-loader.d.ts +177 -0
  330. package/dist/scene/scene-loader.d.ts.map +1 -0
  331. package/dist/scene/scene-loader.js +1213 -0
  332. package/dist/scene/scene-query.d.ts +11 -0
  333. package/dist/scene/scene-query.d.ts.map +1 -0
  334. package/dist/scene/scene-query.js +63 -0
  335. package/dist/scene/scene-types.d.ts +10 -0
  336. package/dist/scene/scene-types.d.ts.map +1 -0
  337. package/dist/scene/scene-types.js +8 -0
  338. package/dist/scene/scene-version.d.ts +26 -0
  339. package/dist/scene/scene-version.d.ts.map +1 -0
  340. package/dist/scene/scene-version.js +34 -0
  341. package/dist/scene/schema/animation.d.ts +8 -0
  342. package/dist/scene/schema/animation.d.ts.map +1 -0
  343. package/dist/scene/schema/animation.js +42 -0
  344. package/dist/scene/schema/audio.d.ts +13 -0
  345. package/dist/scene/schema/audio.d.ts.map +1 -0
  346. package/dist/scene/schema/audio.js +22 -0
  347. package/dist/scene/schema/camera.d.ts +28 -0
  348. package/dist/scene/schema/camera.d.ts.map +1 -0
  349. package/dist/scene/schema/camera.js +17 -0
  350. package/dist/scene/schema/collider.d.ts +40 -0
  351. package/dist/scene/schema/collider.d.ts.map +1 -0
  352. package/dist/scene/schema/collider.js +55 -0
  353. package/dist/scene/schema/entity-ref.d.ts +31 -0
  354. package/dist/scene/schema/entity-ref.d.ts.map +1 -0
  355. package/dist/scene/schema/entity-ref.js +61 -0
  356. package/dist/scene/schema/entity.d.ts +1036 -0
  357. package/dist/scene/schema/entity.d.ts.map +1 -0
  358. package/dist/scene/schema/entity.js +153 -0
  359. package/dist/scene/schema/environment.d.ts +425 -0
  360. package/dist/scene/schema/environment.d.ts.map +1 -0
  361. package/dist/scene/schema/environment.js +357 -0
  362. package/dist/scene/schema/index.d.ts +39 -0
  363. package/dist/scene/schema/index.d.ts.map +1 -0
  364. package/dist/scene/schema/index.js +20 -0
  365. package/dist/scene/schema/instances.d.ts +14 -0
  366. package/dist/scene/schema/instances.d.ts.map +1 -0
  367. package/dist/scene/schema/instances.js +28 -0
  368. package/dist/scene/schema/joint.d.ts +23 -0
  369. package/dist/scene/schema/joint.d.ts.map +1 -0
  370. package/dist/scene/schema/joint.js +23 -0
  371. package/dist/scene/schema/light.d.ts +38 -0
  372. package/dist/scene/schema/light.d.ts.map +1 -0
  373. package/dist/scene/schema/light.js +26 -0
  374. package/dist/scene/schema/material.d.ts +199 -0
  375. package/dist/scene/schema/material.d.ts.map +1 -0
  376. package/dist/scene/schema/material.js +99 -0
  377. package/dist/scene/schema/mesh.d.ts +48 -0
  378. package/dist/scene/schema/mesh.d.ts.map +1 -0
  379. package/dist/scene/schema/mesh.js +82 -0
  380. package/dist/scene/schema/particles.d.ts +2178 -0
  381. package/dist/scene/schema/particles.d.ts.map +1 -0
  382. package/dist/scene/schema/particles.js +321 -0
  383. package/dist/scene/schema/physics.d.ts +56 -0
  384. package/dist/scene/schema/physics.d.ts.map +1 -0
  385. package/dist/scene/schema/physics.js +37 -0
  386. package/dist/scene/schema/scene-file.d.ts +304 -0
  387. package/dist/scene/schema/scene-file.d.ts.map +1 -0
  388. package/dist/scene/schema/scene-file.js +262 -0
  389. package/dist/scene/schema/shadow.d.ts +28 -0
  390. package/dist/scene/schema/shadow.d.ts.map +1 -0
  391. package/dist/scene/schema/shadow.js +20 -0
  392. package/dist/scene/schema/spline.d.ts +25 -0
  393. package/dist/scene/schema/spline.d.ts.map +1 -0
  394. package/dist/scene/schema/spline.js +15 -0
  395. package/dist/scene/schema/tuples.d.ts +12 -0
  396. package/dist/scene/schema/tuples.d.ts.map +1 -0
  397. package/dist/scene/schema/tuples.js +14 -0
  398. package/dist/scene/schema/ui.d.ts +880 -0
  399. package/dist/scene/schema/ui.d.ts.map +1 -0
  400. package/dist/scene/schema/ui.js +506 -0
  401. package/dist/scene/user-data.d.ts +171 -0
  402. package/dist/scene/user-data.d.ts.map +1 -0
  403. package/dist/scene/user-data.js +137 -0
  404. package/dist/setup/setup-audio.d.ts +20 -0
  405. package/dist/setup/setup-audio.d.ts.map +1 -0
  406. package/dist/setup/setup-audio.js +41 -0
  407. package/dist/setup/setup-particles.d.ts +17 -0
  408. package/dist/setup/setup-particles.d.ts.map +1 -0
  409. package/dist/setup/setup-particles.js +16 -0
  410. package/dist/setup/setup-physics.d.ts +25 -0
  411. package/dist/setup/setup-physics.d.ts.map +1 -0
  412. package/dist/setup/setup-physics.js +51 -0
  413. package/dist/setup/setup-renderer.d.ts +69 -0
  414. package/dist/setup/setup-renderer.d.ts.map +1 -0
  415. package/dist/setup/setup-renderer.js +363 -0
  416. package/dist/tools/define-tool.d.ts +105 -0
  417. package/dist/tools/define-tool.d.ts.map +1 -0
  418. package/dist/tools/define-tool.js +82 -0
  419. package/dist/world2d/authoring-2d.d.ts +76 -0
  420. package/dist/world2d/authoring-2d.d.ts.map +1 -0
  421. package/dist/world2d/authoring-2d.js +176 -0
  422. package/dist/world2d/capture-to-scene2d.d.ts +5 -0
  423. package/dist/world2d/capture-to-scene2d.d.ts.map +1 -0
  424. package/dist/world2d/capture-to-scene2d.js +49 -0
  425. package/dist/world2d/collision-2d.d.ts +52 -0
  426. package/dist/world2d/collision-2d.d.ts.map +1 -0
  427. package/dist/world2d/collision-2d.js +70 -0
  428. package/dist/world2d/components-2d.d.ts +47 -0
  429. package/dist/world2d/components-2d.d.ts.map +1 -0
  430. package/dist/world2d/components-2d.js +77 -0
  431. package/dist/world2d/index.d.ts +34 -0
  432. package/dist/world2d/index.d.ts.map +1 -0
  433. package/dist/world2d/index.js +32 -0
  434. package/dist/world2d/ingest-iframe-2d.d.ts +82 -0
  435. package/dist/world2d/ingest-iframe-2d.d.ts.map +1 -0
  436. package/dist/world2d/ingest-iframe-2d.js +166 -0
  437. package/dist/world2d/ingest2d.d.ts +97 -0
  438. package/dist/world2d/ingest2d.d.ts.map +1 -0
  439. package/dist/world2d/ingest2d.js +40 -0
  440. package/dist/world2d/physics2d-registry.d.ts +24 -0
  441. package/dist/world2d/physics2d-registry.d.ts.map +1 -0
  442. package/dist/world2d/physics2d-registry.js +38 -0
  443. package/dist/world2d/pixi-game-adapter.d.ts +107 -0
  444. package/dist/world2d/pixi-game-adapter.d.ts.map +1 -0
  445. package/dist/world2d/pixi-game-adapter.js +211 -0
  446. package/dist/world2d/pixi-surface.d.ts +39 -0
  447. package/dist/world2d/pixi-surface.d.ts.map +1 -0
  448. package/dist/world2d/pixi-surface.js +47 -0
  449. package/dist/world2d/scene-capture-2d.d.ts +43 -0
  450. package/dist/world2d/scene-capture-2d.d.ts.map +1 -0
  451. package/dist/world2d/scene-capture-2d.js +92 -0
  452. package/dist/world2d/scene2d-loader.d.ts +27 -0
  453. package/dist/world2d/scene2d-loader.d.ts.map +1 -0
  454. package/dist/world2d/scene2d-loader.js +274 -0
  455. package/dist/world2d/schema/entity2d.d.ts +102 -0
  456. package/dist/world2d/schema/entity2d.d.ts.map +1 -0
  457. package/dist/world2d/schema/entity2d.js +119 -0
  458. package/dist/world2d/schema/physics2d.d.ts +46 -0
  459. package/dist/world2d/schema/physics2d.d.ts.map +1 -0
  460. package/dist/world2d/schema/physics2d.js +45 -0
  461. package/dist/world2d/schema/sprite.d.ts +42 -0
  462. package/dist/world2d/schema/sprite.d.ts.map +1 -0
  463. package/dist/world2d/schema/sprite.js +63 -0
  464. package/dist/world2d/schema/tilemap.d.ts +15 -0
  465. package/dist/world2d/schema/tilemap.d.ts.map +1 -0
  466. package/dist/world2d/schema/tilemap.js +19 -0
  467. package/dist/world2d/schema/tuples2d.d.ts +20 -0
  468. package/dist/world2d/schema/tuples2d.d.ts.map +1 -0
  469. package/dist/world2d/schema/tuples2d.js +19 -0
  470. package/dist/world2d/system-adapters-2d.d.ts +16 -0
  471. package/dist/world2d/system-adapters-2d.d.ts.map +1 -0
  472. package/dist/world2d/system-adapters-2d.js +37 -0
  473. package/dist/world2d/transform-writer-2d.d.ts +16 -0
  474. package/dist/world2d/transform-writer-2d.d.ts.map +1 -0
  475. package/dist/world2d/transform-writer-2d.js +22 -0
  476. package/dist/world2d/types.d.ts +53 -0
  477. package/dist/world2d/types.d.ts.map +1 -0
  478. package/dist/world2d/types.js +1 -0
  479. package/package.json +18 -4
  480. package/src/adapter/authoring.ts +10 -0
  481. package/src/adapter/first-party-systems.ts +23 -34
  482. package/src/adapter/index.ts +1 -3
  483. package/src/adapter/system-adapter.ts +15 -22
  484. package/src/adapter/vgai-scene-game-adapter.ts +5 -14
  485. package/src/animation/anim-graph-types.ts +12 -43
  486. package/src/animation/animation-clock.ts +479 -0
  487. package/src/animation/camera-ownership.ts +467 -0
  488. package/src/animation/cinematic-cues.ts +451 -0
  489. package/src/animation/clip-map.ts +41 -0
  490. package/src/animation/gsap-registration.ts +184 -0
  491. package/src/animation/theatre-clock-binding.ts +111 -0
  492. package/src/animation/theatre-director.ts +347 -0
  493. package/src/animation/theatre-object-binding.ts +661 -0
  494. package/src/animation/xstate-animation-binding.ts +398 -0
  495. package/src/animation/xstate-animation-meta.ts +282 -0
  496. package/src/audio/index.ts +39 -7
  497. package/src/audio/tone-clock-binding.ts +98 -0
  498. package/src/audio/tone-context.ts +129 -0
  499. package/src/audio/tone-offline-render.ts +167 -0
  500. package/src/audio/wav-encode.ts +119 -0
  501. package/src/core/game-loop.ts +17 -0
  502. package/src/core/types.ts +13 -0
  503. package/src/data/data-asset.ts +167 -0
  504. package/src/data/data-check-core.ts +242 -0
  505. package/src/data/data-ref.ts +145 -0
  506. package/src/data/vite-plugin-data.ts +290 -0
  507. package/src/index.ts +48 -0
  508. package/src/input/input-manager.ts +1206 -32
  509. package/src/input/input-types.ts +155 -3
  510. package/src/input/prompt-labels.ts +122 -0
  511. package/src/input/rebind-controller.ts +105 -0
  512. package/src/input/schema.ts +206 -52
  513. package/src/react/use-data.ts +114 -0
  514. package/src/react/use-selection.tsx +135 -0
  515. package/src/runtime/create-runtime.ts +30 -9
  516. package/src/runtime/render-audio-control.ts +168 -0
  517. package/src/runtime/render-control.ts +522 -0
  518. package/src/runtime/render-seed.ts +79 -0
  519. package/src/runtime/types.ts +0 -5
  520. package/src/scene/asset-loaders.ts +10 -36
  521. package/src/scene/asset-paths.ts +0 -2
  522. package/src/scene/asset-ref-check.ts +248 -0
  523. package/src/scene/parse.ts +133 -0
  524. package/src/scene/scene-loader.ts +81 -96
  525. package/src/scene/schema/animation.ts +30 -79
  526. package/src/scene/schema/entity.ts +20 -0
  527. package/src/scene/schema/index.ts +2 -12
  528. package/src/scene/user-data.ts +8 -9
  529. package/src/setup/setup-renderer.ts +9 -2
  530. package/src/tools/define-tool.ts +152 -0
  531. package/src/animation/anim-graph.ts +0 -406
  532. package/src/animation/anim-system.ts +0 -28
  533. package/src/animation/property-track.ts +0 -178
  534. package/src/animation/schema.ts +0 -204
  535. package/src/audio/ambient.ts +0 -300
  536. package/src/audio/impacts.ts +0 -212
  537. package/src/audio/movement.ts +0 -140
  538. package/src/audio/musical.ts +0 -200
  539. package/src/audio/ui-sounds.ts +0 -171
  540. package/src/audio/vehicle.ts +0 -235
  541. package/src/audio/weapons.ts +0 -152
@@ -0,0 +1,119 @@
1
+ import type { SystemPhaseName } from '../core/types';
2
+ import type { AnimationClock } from './animation-clock';
3
+ /**
4
+ * D7 — register a native, paused GSAP timeline on the canonical
5
+ * `AnimationClock` (spec §10 D7, §5.5 GSAP Contract, §3.2).
6
+ *
7
+ * Mirrors `theatre-clock-binding.ts` (D2)'s shape: VGAI's entire GSAP
8
+ * integration is "who drives time". Games build GSAP timelines with GSAP's
9
+ * own native, un-renamed API (`gsap.timeline()`, `.to()`, `.from()`, …,
10
+ * spec §5.5) — this module never wraps or renames the tween-building API. It
11
+ * only stores the native `gsap.core.Timeline` and seeks it every time the
12
+ * clock moves, exactly like the Theatre sequence binding seeks
13
+ * `sequence.position`.
14
+ *
15
+ * ## Unregistered GSAP is unaffected (§5.5 contract)
16
+ *
17
+ * `gsap.to(enemy.position, { … })` called anywhere in game code — without
18
+ * ever touching this module — keeps running on GSAP's own real-time,
19
+ * `requestAnimationFrame`-driven global ticker exactly as GSAP ships it. This
20
+ * module does not touch `gsap.ticker`, `gsap.globalTimeline`, or any other
21
+ * global GSAP state, precisely so it cannot perturb that ordinary real-time
22
+ * code path. Only a timeline explicitly passed to `registerGsap` — and
23
+ * created paused — participates in deterministic scrub/export.
24
+ *
25
+ * ## Why a PAUSED timeline seeked with `.time()` is deterministic
26
+ *
27
+ * GSAP's global ticker only auto-advances animations that are actually
28
+ * playing; a timeline created with `{ paused: true }` (and never resumed) is
29
+ * never touched by the ticker's rAF-driven `dt` accumulation, so wall-clock
30
+ * elapsed time, dropped frames, and GSAP's lag-smoothing heuristics (which
31
+ * exist purely to compensate a *playing* animation for an irregular ticker
32
+ * `dt`) cannot affect it. The only thing that ever moves a registered
33
+ * timeline's playhead is this module's own `timeline.time(clock.time)` call,
34
+ * driven synchronously off the clock — same story as `theatre-clock-binding`
35
+ * driving `sequence.position` off the clock instead of Theatre's own raf
36
+ * loop. This is proven directly against the real `gsap` runtime in
37
+ * `packages/engine/test/gsap-registration.test.ts` (including a real
38
+ * wall-clock `setTimeout` wait between two `clock.seek()` calls to the same
39
+ * time, asserting the sampled value is bit-for-bit identical — nothing
40
+ * "polished" the value while real time passed). `timeline.time(value)` (not
41
+ * `.seek(value)`) is used because it takes only a numeric offset in the
42
+ * clock's own second-denominated domain — `.seek()`'s label-string overload
43
+ * is irrelevant here and would only widen the accepted input past what a
44
+ * clock time actually is. Neither call resumes playback; both simply
45
+ * position an already-paused timeline, which is why this module never calls
46
+ * `.play()`/`.resume()`.
47
+ *
48
+ * ## Phase choice
49
+ *
50
+ * Registered by default at the `'animation'` phase — the same phase
51
+ * `bindClockToTheatreSequence` (D2) uses, and the same phase
52
+ * XState-bound `AnimationMixer` playback ticks in (see `ARCHITECTURE.md`'s
53
+ * phase table). A registered GSAP timeline commonly targets the same
54
+ * Object3D/material properties a Theatre-driven object binding also writes,
55
+ * so keeping both in the `'animation'` phase (ahead of `'preRender'`, where
56
+ * camera/material reads happen) avoids ordering surprises.
57
+ */
58
+ export interface GsapRegistrationOptions {
59
+ /** Which `AnimationClock` phase to seek the timeline in. Defaults to `'animation'`. */
60
+ phase?: SystemPhaseName;
61
+ }
62
+ export interface GsapRegistration {
63
+ /**
64
+ * Removes the clock evaluator and stops driving the timeline (no further
65
+ * `timeline.time(...)` calls occur after this). Also frees this
66
+ * clock+timeline pair for re-registration (see `GsapRegistrationError`'s
67
+ * `'duplicate'` case below).
68
+ */
69
+ dispose(): void;
70
+ }
71
+ /**
72
+ * Thrown by `registerGsap` when the input does not satisfy the D7 contract.
73
+ * `code` distinguishes the three rejection reasons so a caller can branch on
74
+ * it programmatically instead of string-matching `message`:
75
+ *
76
+ * - `'not-a-timeline'` — the second argument is not a real
77
+ * `gsap.core.Timeline` instance (e.g. a plain object, a single GSAP
78
+ * `Tween`, or `undefined`). Checked with `instanceof gsap.core.Timeline`
79
+ * against the actual installed GSAP runtime, not duck-typing, so a
80
+ * same-shaped fake cannot slip through.
81
+ * - `'not-paused'` — the timeline exists but was not created with
82
+ * `{ paused: true }` (or was later resumed) at registration time. This
83
+ * module deliberately REJECTS rather than silently force-pausing: a
84
+ * caller who already relies on the timeline advancing in real time (e.g.
85
+ * a UI polish tween that happens to also get registered by mistake) would
86
+ * otherwise have its behavior silently changed. Rejecting makes the fix
87
+ * (`gsap.timeline({ paused: true })`) obvious at the call site instead of
88
+ * producing a hard-to-notice runtime pause.
89
+ * - `'duplicate'` — this exact timeline is already registered against this
90
+ * exact clock. Detected per `(clock, timeline)` pair (not globally), so
91
+ * the same timeline may legitimately be registered against two
92
+ * independent clocks/cinematic contexts — mirroring D2's "multiple
93
+ * projects/sheets coexist" allowance — while registering it twice on the
94
+ * SAME clock (almost always a bug: a duplicate `useEffect` run, a missed
95
+ * disposer, …) is caught immediately instead of silently doubling the
96
+ * number of `.time()` writes per crossing.
97
+ */
98
+ export declare class GsapRegistrationError extends Error {
99
+ readonly code: 'not-a-timeline' | 'not-paused' | 'duplicate';
100
+ constructor(message: string, code: 'not-a-timeline' | 'not-paused' | 'duplicate');
101
+ }
102
+ /**
103
+ * Register a native, paused `gsap.core.Timeline` on `clock`: from now on,
104
+ * every clock crossing (`seek`, `advance`, idempotent re-seeks, `setRange`
105
+ * clamps — anything that fires a `ClockEvaluator`, per `animation-clock.ts`)
106
+ * positions the timeline at `clock.time` via `timeline.time(clock.time)`.
107
+ * The timeline is never played/resumed — it stays paused and is driven
108
+ * exclusively by the clock, both in live preview and in offline
109
+ * frame-by-frame export (whatever calls `clock.seek`/`clock.seekFrame`).
110
+ *
111
+ * Throws `GsapRegistrationError` if `timeline` is not a real
112
+ * `gsap.core.Timeline`, is not paused, or is already registered against this
113
+ * `clock` — see that class's doc comment for the exact policy on each case.
114
+ *
115
+ * Returns a `GsapRegistration` whose `dispose()` removes the clock evaluator
116
+ * (mirrors `bindClockToTheatreSequence`'s `TheatreClockBinding`).
117
+ */
118
+ export declare function registerGsap(clock: AnimationClock, timeline: gsap.core.Timeline, options?: GsapRegistrationOptions): GsapRegistration;
119
+ //# sourceMappingURL=gsap-registration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsap-registration.d.ts","sourceRoot":"","sources":["../../src/animation/gsap-registration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,WAAW;gBAD5D,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,gBAAgB,GAAG,YAAY,GAAG,WAAW;CAK/D;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAC5B,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA6ClB"}
@@ -0,0 +1,92 @@
1
+ import gsap from 'gsap';
2
+ /**
3
+ * Thrown by `registerGsap` when the input does not satisfy the D7 contract.
4
+ * `code` distinguishes the three rejection reasons so a caller can branch on
5
+ * it programmatically instead of string-matching `message`:
6
+ *
7
+ * - `'not-a-timeline'` — the second argument is not a real
8
+ * `gsap.core.Timeline` instance (e.g. a plain object, a single GSAP
9
+ * `Tween`, or `undefined`). Checked with `instanceof gsap.core.Timeline`
10
+ * against the actual installed GSAP runtime, not duck-typing, so a
11
+ * same-shaped fake cannot slip through.
12
+ * - `'not-paused'` — the timeline exists but was not created with
13
+ * `{ paused: true }` (or was later resumed) at registration time. This
14
+ * module deliberately REJECTS rather than silently force-pausing: a
15
+ * caller who already relies on the timeline advancing in real time (e.g.
16
+ * a UI polish tween that happens to also get registered by mistake) would
17
+ * otherwise have its behavior silently changed. Rejecting makes the fix
18
+ * (`gsap.timeline({ paused: true })`) obvious at the call site instead of
19
+ * producing a hard-to-notice runtime pause.
20
+ * - `'duplicate'` — this exact timeline is already registered against this
21
+ * exact clock. Detected per `(clock, timeline)` pair (not globally), so
22
+ * the same timeline may legitimately be registered against two
23
+ * independent clocks/cinematic contexts — mirroring D2's "multiple
24
+ * projects/sheets coexist" allowance — while registering it twice on the
25
+ * SAME clock (almost always a bug: a duplicate `useEffect` run, a missed
26
+ * disposer, …) is caught immediately instead of silently doubling the
27
+ * number of `.time()` writes per crossing.
28
+ */
29
+ export class GsapRegistrationError extends Error {
30
+ code;
31
+ constructor(message, code) {
32
+ super(message);
33
+ this.code = code;
34
+ this.name = 'GsapRegistrationError';
35
+ }
36
+ }
37
+ // Per-clock membership of already-registered timelines. A WeakMap keyed by
38
+ // clock (not a field on AnimationClock itself — D1 owns no knowledge of
39
+ // GSAP) holding a WeakSet keyed by timeline, so neither the clock nor a
40
+ // disposed/dropped timeline is kept alive by this module.
41
+ const registeredByClock = new WeakMap();
42
+ /**
43
+ * Register a native, paused `gsap.core.Timeline` on `clock`: from now on,
44
+ * every clock crossing (`seek`, `advance`, idempotent re-seeks, `setRange`
45
+ * clamps — anything that fires a `ClockEvaluator`, per `animation-clock.ts`)
46
+ * positions the timeline at `clock.time` via `timeline.time(clock.time)`.
47
+ * The timeline is never played/resumed — it stays paused and is driven
48
+ * exclusively by the clock, both in live preview and in offline
49
+ * frame-by-frame export (whatever calls `clock.seek`/`clock.seekFrame`).
50
+ *
51
+ * Throws `GsapRegistrationError` if `timeline` is not a real
52
+ * `gsap.core.Timeline`, is not paused, or is already registered against this
53
+ * `clock` — see that class's doc comment for the exact policy on each case.
54
+ *
55
+ * Returns a `GsapRegistration` whose `dispose()` removes the clock evaluator
56
+ * (mirrors `bindClockToTheatreSequence`'s `TheatreClockBinding`).
57
+ */
58
+ export function registerGsap(clock, timeline, options = {}) {
59
+ if (!(timeline instanceof gsap.core.Timeline)) {
60
+ throw new GsapRegistrationError('[registerGsap] expected a native gsap.core.Timeline (e.g. gsap.timeline({ paused: true })), ' +
61
+ `got ${timeline === null ? 'null' : typeof timeline}`, 'not-a-timeline');
62
+ }
63
+ if (!timeline.paused()) {
64
+ throw new GsapRegistrationError('[registerGsap] timeline must be created paused — gsap.timeline({ paused: true }) — before ' +
65
+ 'registration; a registered timeline is driven exclusively by the clock and must never also ' +
66
+ 'be advancing under its own real-time playback', 'not-paused');
67
+ }
68
+ let seenForClock = registeredByClock.get(clock);
69
+ if (!seenForClock) {
70
+ seenForClock = new WeakSet();
71
+ registeredByClock.set(clock, seenForClock);
72
+ }
73
+ if (seenForClock.has(timeline)) {
74
+ throw new GsapRegistrationError('[registerGsap] this timeline is already registered against this clock — dispose() the prior ' +
75
+ 'registration before registering it again', 'duplicate');
76
+ }
77
+ seenForClock.add(timeline);
78
+ const phase = options.phase ?? 'animation';
79
+ const handle = clock.subscribe(phase, () => {
80
+ timeline.time(clock.time);
81
+ });
82
+ let disposed = false;
83
+ return {
84
+ dispose() {
85
+ if (disposed)
86
+ return;
87
+ disposed = true;
88
+ handle.dispose();
89
+ seenForClock.delete(timeline);
90
+ },
91
+ };
92
+ }
@@ -0,0 +1,89 @@
1
+ import type { ISequence } from '@theatre/core';
2
+ import type { SystemPhaseName } from '../core/types';
3
+ import type { AnimationClock } from './animation-clock';
4
+ /**
5
+ * D2 — bind the canonical `AnimationClock` to a Theatre sequence's playhead
6
+ * (spec §10 D2, §5.3, §3.2).
7
+ *
8
+ * This is VGAI's ENTIRE glue for Theatre integration on the clock side:
9
+ * games import and configure `@theatre/core` with its own native vocabulary
10
+ * (`getProject`/`types`/`sheet`/`object`, spec §5.3) — there is no renamed
11
+ * Theatre API here. The only thing VGAI owns is *who drives time*: the
12
+ * canonical clock is the single source of truth, and this binding seeks
13
+ * Theatre's sequence position to match it every time the clock moves. Theatre
14
+ * must never be left to drive its own `requestAnimationFrame` loop — see the
15
+ * module doc on `animation-clock.ts` for why (deterministic export, offline
16
+ * scrubbing, no wall-clock dependency).
17
+ *
18
+ * ## Why setting `sequence.position` is enough (no `sequence.play()`)
19
+ *
20
+ * Theatre's `ISequence.position` setter synchronously updates every bound
21
+ * `SheetObject`'s pull-based `.value` (proven against the real `@theatre/core`
22
+ * runtime in `packages/engine/test/theatre-binding.test.ts` — setting
23
+ * `position` and immediately reading `.value` reflects the new keyframe
24
+ * interpolation with no `requestAnimationFrame`/ticker wait, which is exactly
25
+ * what makes this safe to drive from a synchronous, wall-clock-free
26
+ * `AnimationClock.seek()`/`advance()` call, including headlessly in Node for
27
+ * the render/export seam, I2). Theatre's *push* notification channel
28
+ * (`onValuesChange`/`onChange`) is batched on its own internal raf-driven
29
+ * ticker — it is not delivered 1:1 with each programmatic `position` write,
30
+ * so a subscriber can observe several coalesced position writes as a single
31
+ * notification, or (in a headless/no-raf context) none at all — so object
32
+ * bindings (`theatre-object-binding.ts`) deliberately read `sheetObject.value`
33
+ * (pull) after this binding has run, rather than subscribing to Theatre's
34
+ * push channel, to stay exactly in lockstep with the clock.
35
+ *
36
+ * ## Phase choice
37
+ *
38
+ * Note on phase semantics: `phase` here orders evaluators WITHIN a single
39
+ * clock `emit()` — i.e. within one `seek()`/`advance()` call — using the
40
+ * engine's `SystemPhaseName` vocabulary purely as a shared, familiar naming
41
+ * convention (`animation-clock.ts`'s module doc). It does NOT mean an
42
+ * evaluator registered at, say, `'preRender'` executes during the live
43
+ * engine's own `system-runner` `preRender` phase call within a running RAF
44
+ * frame — the `AnimationClock` is independent of the live game loop's phase
45
+ * execution, and during offline export/scrub there is no RAF frame at all.
46
+ * `phase` only orders same-emit evaluators relative to each other (e.g.
47
+ * guaranteeing this clock-to-sequence binding runs before an object binding
48
+ * reads the sequence on the same crossing), never relative to unrelated
49
+ * engine systems that happen to run in a same-named phase during a live
50
+ * frame.
51
+ *
52
+ * Registered by default at the `'animation'` phase — the same phase
53
+ * XState-bound `AnimationMixer` playback ticks in (see `ARCHITECTURE.md`'s
54
+ * phase table: `... gameLogic → animation → preRender → render`). Object
55
+ * bindings (`bindObject3DTransform`/`bindCameraLens`) default to `'preRender'`
56
+ * (the documented home for camera placement/material tick) specifically so
57
+ * `PHASE_ORDER` — not registration order — guarantees they observe the
58
+ * position this binding just set, regardless of which binding a caller sets
59
+ * up first.
60
+ */
61
+ export interface TheatreClockBindingOptions {
62
+ /**
63
+ * Which `AnimationClock` phase to seek the sequence in. Defaults to
64
+ * `'animation'`. Any object binding reading this sheet's objects should use
65
+ * a phase that runs no earlier (see module doc above) — `'preRender'`, the
66
+ * default for `bindObject3DTransform`/`bindCameraLens`, always qualifies.
67
+ */
68
+ phase?: SystemPhaseName;
69
+ }
70
+ export interface TheatreClockBinding {
71
+ /** Removes the clock evaluator. No further `sequence.position` writes occur after this. */
72
+ dispose(): void;
73
+ }
74
+ /**
75
+ * Subscribe `sequence.position = clock.time` to every crossing of `clock` in
76
+ * the given phase (default `'animation'`). Returns a disposer; call it to
77
+ * stop driving the sequence (e.g. on `GameCleanup.dispose()` or before
78
+ * rebinding on hot reload — this is what keeps HMR from accumulating
79
+ * duplicate listeners, since re-running `setup()` disposes the old binding
80
+ * before creating a new one).
81
+ *
82
+ * Multiple sheets/sequences can each get their own binding with no shared
83
+ * mutable state on VGAI's side — collision avoidance for the underlying
84
+ * Theatre project/sheet identity is Theatre's own `getProject(id)`/
85
+ * `project.sheet(id)` namespacing (spec §5.3), which this function does not
86
+ * touch or wrap.
87
+ */
88
+ export declare function bindClockToTheatreSequence(clock: AnimationClock, sequence: ISequence, options?: TheatreClockBindingOptions): TheatreClockBinding;
89
+ //# sourceMappingURL=theatre-clock-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theatre-clock-binding.d.ts","sourceRoot":"","sources":["../../src/animation/theatre-clock-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AAEH,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,SAAS,EACnB,OAAO,GAAE,0BAA+B,GACvC,mBAAmB,CAerB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Subscribe `sequence.position = clock.time` to every crossing of `clock` in
3
+ * the given phase (default `'animation'`). Returns a disposer; call it to
4
+ * stop driving the sequence (e.g. on `GameCleanup.dispose()` or before
5
+ * rebinding on hot reload — this is what keeps HMR from accumulating
6
+ * duplicate listeners, since re-running `setup()` disposes the old binding
7
+ * before creating a new one).
8
+ *
9
+ * Multiple sheets/sequences can each get their own binding with no shared
10
+ * mutable state on VGAI's side — collision avoidance for the underlying
11
+ * Theatre project/sheet identity is Theatre's own `getProject(id)`/
12
+ * `project.sheet(id)` namespacing (spec §5.3), which this function does not
13
+ * touch or wrap.
14
+ */
15
+ export function bindClockToTheatreSequence(clock, sequence, options = {}) {
16
+ const phase = options.phase ?? 'animation';
17
+ const handle = clock.subscribe(phase, () => {
18
+ sequence.position = clock.time;
19
+ });
20
+ let disposed = false;
21
+ return {
22
+ dispose() {
23
+ if (disposed)
24
+ return;
25
+ disposed = true;
26
+ handle.dispose();
27
+ },
28
+ };
29
+ }
@@ -0,0 +1,242 @@
1
+ import type { ISheetObject, UnknownShorthandCompoundProps } from '@theatre/core';
2
+ import type { SystemPhaseName } from '../core/types';
3
+ import type { AnimationClock } from './animation-clock';
4
+ /**
5
+ * D4 — the Theatre "Director" convention (spec §10 D4, §5.3, §3.2).
6
+ *
7
+ * A `Director` is an ordinary Theatre Sheet Object, authored with Theatre's
8
+ * NATIVE `types.stringLiteral`/`types.boolean` vocabulary exactly as shown in
9
+ * spec §5.3 — this module never wraps or renames that API. It is a
10
+ * *convention* (a documented, stable shape) plus a thin binding, not a new
11
+ * animation format:
12
+ *
13
+ * ```ts
14
+ * import { types } from '@theatre/core';
15
+ * const director = sheet.object('Director', {
16
+ * activeCamera: types.stringLiteral('wide', { wide: 'wide', close: 'close', gameplay: 'gameplay' }),
17
+ * shot: types.stringLiteral('opening', { opening: 'opening', reveal: 'reveal', ending: 'ending' }),
18
+ * letterbox: types.boolean(false),
19
+ * // extensible: any additional directorial prop is carried through verbatim
20
+ * // as `DirectorState.extras`, e.g.:
21
+ * blendSeconds: types.number(0, { range: [0, Infinity] }),
22
+ * });
23
+ * ```
24
+ *
25
+ * `activeCamera`/`shot`/`letterbox` are required by the convention (spec §10
26
+ * D4 AC: "covers active camera, shot ID, letterbox, and optional directorial
27
+ * properties"). Anything else declared on the same Theatre object (exposure,
28
+ * grade, a blend-duration prop, ...) is an "optional directorial property" —
29
+ * it is read and surfaced verbatim through `DirectorState.extras`, never
30
+ * hardcoded here, which is what keeps the convention extensible without
31
+ * VGAI inventing a schema for it.
32
+ *
33
+ * ## Binding: pull-based, same lockstep pattern as D2/D3
34
+ *
35
+ * `bindDirectorToClock` follows exactly the `theatre-clock-binding.ts` /
36
+ * `theatre-object-binding.ts` pattern: it reads the Director object's
37
+ * pull-based `sheetObject.value` on every canonical-clock crossing (never
38
+ * Theatre's own batched `onValuesChange` push channel — see those modules'
39
+ * doc comments for why that would desync from a synchronous `clock.seek()`).
40
+ * Default phase is `'preRender'`, the same default `bindObject3DTransform`/
41
+ * `bindCameraLens` use, so — via `PHASE_ORDER`, not registration order — the
42
+ * Director always reads a sequence position that `bindClockToTheatreSequence`
43
+ * (registered at `'animation'`, which runs earlier) has already set for this
44
+ * crossing, regardless of which binding a caller sets up first.
45
+ *
46
+ * ## Seeking updates Director without firing gameplay cues
47
+ *
48
+ * This binding has NO concept of "seek" vs "advance" — unlike
49
+ * `CueRunner` (D5, `cinematic-cues.ts`), which deliberately distinguishes the
50
+ * two (via its own `seek()`/`advance()` wrapper methods) so a
51
+ * `firesDuringSeek: false` cue can be skipped on scrub. A Director value is
52
+ * *visual/directorial state*, not a gameplay consequence (spec §3.2: "Theatre
53
+ * carries visual/directorial values; ordinary TypeScript cues carry gameplay
54
+ * consequences") — it should always reflect the clock's current time,
55
+ * however the clock got there. Composing the two on the SAME
56
+ * `AnimationClock` (Director bound directly to the clock; cues bound through
57
+ * a `CueRunner` wrapping the same clock) is exactly what makes "seek updates
58
+ * Director but does not spuriously fire gameplay cues" fall out for free: a
59
+ * `CueRunner.seek(t)` call moves the one shared clock, which both this
60
+ * binding (always reacts) and the cue runner (gates on `firesDuringSeek`)
61
+ * observe on the same crossing. See `theatre-director.test.ts`'s
62
+ * "composes with D5" suite for the proof.
63
+ *
64
+ * ## Camera-ownership hook — the D6 seam
65
+ *
66
+ * Discrete `activeCamera` changes are exactly the moments a *camera
67
+ * ownership* system (D6, not built in this unit) needs to know about, to cut
68
+ * or blend the live gameplay camera to the Director's declared shot. This
69
+ * module does not own or perform any camera mutation — it only DETECTS a
70
+ * change in the Director's `activeCamera` value across successive
71
+ * evaluations and reports it through `onActiveCameraChange`
72
+ * (`CameraOwnershipHook`), a minimal, one-directional seam:
73
+ *
74
+ * - fired once per detected `activeCamera` transition (never for a
75
+ * no-op/unchanged evaluation, including a re-seek to the same time or a
76
+ * seek that stays within the same shot's camera);
77
+ * - the FIRST evaluation after bind is treated as an "assignment", not a
78
+ * "cut from something" — `previousCameraKey` is `null` and `mode` is
79
+ * forced to `'cut'` (there is nothing to blend FROM yet; D6 is expected
80
+ * to use this event to perform its initial camera capture/placement);
81
+ * - `mode`/`blendSeconds` are derived from an optional extra numeric prop on
82
+ * the SAME Director object (`blendSecondsKey`, default `'blendSeconds'`)
83
+ * — a positive value at the moment of the transition means `'blend'`
84
+ * (with that duration), anything else means `'cut'`. This is the "expose
85
+ * enough for a consumer to cut or blend" seam named in the D4 AC; the
86
+ * ACTUAL blend implementation (interpolating the live camera pose over
87
+ * `blendSeconds`) is D6's job, not this module's.
88
+ *
89
+ * ### `blendSeconds` MUST be authored as HOLD keyframes
90
+ *
91
+ * `blendSeconds` is read at the EXACT moment `activeCamera` is detected to
92
+ * change, whatever clock time that happens to land on. If `blendSeconds` is
93
+ * authored as an ordinary interpolating (bezier) track, a transition
94
+ * detected at a time that isn't exactly a keyframe position reads whatever
95
+ * partially-interpolated value the bezier curve has reached AT THAT MOMENT —
96
+ * not the value actually authored FOR that transition. Concretely: a cut
97
+ * authored at `t=3` with `blendSeconds=0`, followed by a blend authored at
98
+ * `t=6` with `blendSeconds=1.5`, makes the track interpolate from `0` to
99
+ * `1.5` across `[3, 6)`. If the `activeCamera` transition at `t=3` is first
100
+ * *observed* at some later non-keyframe time inside that span (e.g. a coarse
101
+ * seek from `t=2` straight to `t=4.5`, skipping past `t=3` without an
102
+ * intermediate evaluation), `blendSeconds` at `t=4.5` reads a nonzero,
103
+ * partially-interpolated value — misreporting an authored CUT as a partial
104
+ * BLEND.
105
+ *
106
+ * The fix is to author `blendSeconds` keyframes as Theatre HOLD keyframes
107
+ * (`connectedRight: false`, optionally also `type: 'hold'`) rather than the
108
+ * default interpolating bezier keyframes. `connectedRight: false` makes
109
+ * Theatre's own sequence evaluator hold the LEFT keyframe's value constant
110
+ * across the entire span up to (not including) the next keyframe, then snap
111
+ * — never partially interpolate. With `blendSeconds` authored this way, its
112
+ * value at ANY time within `[3, 6)` reads exactly `0` (the cut authored at
113
+ * `t=3`), and only reads `1.5` once the clock reaches `t=6` (the blend
114
+ * authored there) — correct regardless of which non-keyframe time a
115
+ * transition happens to first be observed at. See
116
+ * `fixtures/theatre-director-proof.theatre-project.json` (its `blendSeconds`
117
+ * track uses `connectedRight: false` on every keyframe) and
118
+ * `theatre-director.test.ts`'s "playback grid" suite, which proves this by
119
+ * evaluating a fine-grained, non-keyframe-aligned time grid across the whole
120
+ * span and asserting the reported `mode` never drifts from what was
121
+ * authored at the keyframe that produced the transition.
122
+ *
123
+ * D6 will most likely implement `CameraOwnershipHook` as (roughly) "capture
124
+ * gameplay camera pose once on the first `mode: 'cut'` event; on each
125
+ * subsequent event, cut or blend the owned camera to the shot named by
126
+ * `cameraKey`". Nothing above depends on that implementation existing —
127
+ * `onActiveCameraChange` is optional and this module works with no hook
128
+ * attached at all (Director values are still readable via `getState()`).
129
+ *
130
+ * ## Read API (SDK/CLI seam, B5)
131
+ *
132
+ * `readDirectorState` is a pure, synchronous read of whatever a Director
133
+ * Theatre object's CURRENT value is — no clock/binding required. It is what
134
+ * a later `cinematic.*` SDK/CLI operation (B5) would call to inspect Director
135
+ * state (e.g. "what shot is authored at time t") without needing to spin up
136
+ * a full runtime binding. `TheatreDirectorBinding.getState()` is the
137
+ * clock-driven equivalent — it returns the value read at bind time until the
138
+ * FIRST clock crossing occurs (not "the most recent crossing" — before any
139
+ * crossing there IS no crossing yet), and the value as of the most recent
140
+ * crossing thereafter.
141
+ *
142
+ * Authoring `Director` keyframes in Theatre Studio is a dev-only workflow
143
+ * (spec §10 D2: "Theatre Studio is available only in authoring/development
144
+ * contexts"); the committed project-state JSON is the source of truth this
145
+ * module reads in production — nothing here imports the Theatre Studio
146
+ * package (see `theatre-binding.test.ts`'s repo-wide grep proof of that).
147
+ */
148
+ /** Thrown when a Theatre object does not conform to the Director convention. */
149
+ export declare class TheatreDirectorError extends Error {
150
+ readonly objectKey: string;
151
+ constructor(message: string, objectKey: string);
152
+ }
153
+ /** The Director convention's three required props, plus everything else verbatim. */
154
+ export interface DirectorState {
155
+ readonly activeCamera: string;
156
+ readonly shot: string;
157
+ readonly letterbox: boolean;
158
+ /**
159
+ * Any additional directorial props declared on the same Theatre object
160
+ * (e.g. `exposure`, `grade`, `blendSeconds`), captured verbatim from
161
+ * `sheetObject.value`. The Director convention is deliberately extensible
162
+ * here — VGAI does not enumerate or validate extras beyond the three
163
+ * required props.
164
+ */
165
+ readonly extras: Readonly<Record<string, unknown>>;
166
+ }
167
+ /**
168
+ * Pure, synchronous read of a Director Theatre object's CURRENT value.
169
+ * No clock/binding involved — suitable for one-shot inspection (the later
170
+ * SDK/CLI read path, B5) as well as being the function
171
+ * `bindDirectorToClock` itself calls on every crossing.
172
+ *
173
+ * @throws {TheatreDirectorError} if the object's value does not conform to
174
+ * the Director convention (missing/mistyped `activeCamera`/`shot`/`letterbox`).
175
+ */
176
+ export declare function readDirectorState<Props extends UnknownShorthandCompoundProps>(sheetObject: ISheetObject<Props>): DirectorState;
177
+ /** Whether a reported `activeCamera` transition should be a hard cut or a blend. */
178
+ export type CameraCutMode = 'cut' | 'blend';
179
+ /**
180
+ * One detected `activeCamera` transition. This is the entire payload the
181
+ * D6 camera-ownership system needs to decide what to do — it carries no
182
+ * camera object or mutation itself (that stays entirely on the consumer's
183
+ * side, matching "no arbitrary unsafe property-path evaluator" / "thin
184
+ * integration code" throughout D2-D5).
185
+ */
186
+ export interface CameraOwnershipChangeEvent {
187
+ /** The Director's new `activeCamera` value. */
188
+ readonly cameraKey: string;
189
+ /** The Director's previous `activeCamera` value, or `null` on the first (assignment) event. */
190
+ readonly previousCameraKey: string | null;
191
+ /** `'cut'` unless a positive blend duration was authored for this transition. */
192
+ readonly mode: CameraCutMode;
193
+ /** Blend duration in seconds; `0` for a `'cut'`. */
194
+ readonly blendSeconds: number;
195
+ /** The Director's `shot` value at the moment of this transition, for convenience. */
196
+ readonly shot: string;
197
+ }
198
+ /**
199
+ * D6 seam: implemented fully by the camera-ownership/restoration system
200
+ * (spec §10 D6). This module only detects and reports discrete
201
+ * `activeCamera` transitions — it performs no camera capture, cut, blend, or
202
+ * restoration itself.
203
+ */
204
+ export type CameraOwnershipHook = (event: CameraOwnershipChangeEvent) => void;
205
+ export interface TheatreDirectorBindingOptions {
206
+ /**
207
+ * Which `AnimationClock` phase to evaluate the Director in. Defaults to
208
+ * `'preRender'` (see module doc — guaranteed by `PHASE_ORDER` to observe a
209
+ * sequence position `bindClockToTheatreSequence`'s `'animation'`-phase
210
+ * default has already set for this crossing).
211
+ */
212
+ phase?: SystemPhaseName;
213
+ /** Camera-ownership seam (D6) — see module doc. Optional; omit to just read state. */
214
+ onActiveCameraChange?: CameraOwnershipHook;
215
+ /**
216
+ * Name of an optional extra numeric Director prop that carries the blend
217
+ * duration (seconds) for the transition landing on the CURRENT
218
+ * evaluation. Defaults to `'blendSeconds'`. Absent, non-numeric, or
219
+ * non-positive at the moment of a transition reports `mode: 'cut'`.
220
+ */
221
+ blendSecondsKey?: string;
222
+ }
223
+ export interface TheatreDirectorBinding {
224
+ /**
225
+ * Current Director state (D4 AC: inspectable read API). Before the first
226
+ * clock crossing, this is the bind-time value (`readDirectorState` called
227
+ * once at bind); from the first crossing onward, it is the value as of the
228
+ * most recent crossing.
229
+ */
230
+ getState(): DirectorState;
231
+ /** Removes the clock evaluator. No further evaluation (or hook calls) occurs after this. */
232
+ dispose(): void;
233
+ }
234
+ /**
235
+ * Bind a Director Theatre Sheet Object to `clock`: on every crossing, read
236
+ * its current value (`readDirectorState`) and, if `activeCamera` changed
237
+ * since the last evaluation, report the transition through
238
+ * `onActiveCameraChange` (the D6 seam). Returns a disposer and a `getState()`
239
+ * read API. See the module doc comment for the full contract.
240
+ */
241
+ export declare function bindDirectorToClock<Props extends UnknownShorthandCompoundProps>(clock: AnimationClock, sheetObject: ISheetObject<Props>, options?: TheatreDirectorBindingOptions): TheatreDirectorBinding;
242
+ //# sourceMappingURL=theatre-director.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theatre-director.d.ts","sourceRoot":"","sources":["../../src/animation/theatre-director.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AAEH,gFAAgF;AAChF,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,SAAS,EAAE,MAAM;gBAD1B,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM;CAK7B;AAED,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD;AAID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,6BAA6B,EAC3E,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,GAC/B,aAAa,CAqCf;AAED,oFAAoF;AACpF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+FAA+F;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;AAE9E,MAAM,WAAW,6BAA6B;IAC5C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,QAAQ,IAAI,aAAa,CAAC;IAC1B,4FAA4F;IAC5F,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,SAAS,6BAA6B,EAC7E,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,EAChC,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CA8CxB"}