@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,363 @@
1
+ import { N8AOPostPass } from 'n8ao';
2
+ import { BloomEffect, BrightnessContrastEffect, ChromaticAberrationEffect, ColorDepthEffect, DepthOfFieldEffect, DotScreenEffect, EffectComposer, EffectPass, GlitchEffect, GodRaysEffect, GridEffect, HueSaturationEffect, LensDistortionEffect, NoiseEffect, NormalPass, OutlineEffect, PixelationEffect, RenderPass, ScanlineEffect, SepiaEffect, ShockWaveEffect, SMAAEffect, SMAAPreset, SSAOEffect, TiltShiftEffect, VignetteEffect, } from 'postprocessing';
3
+ import { MotionBlurEffect, SSGIEffect, SSREffect, VelocityDepthNormalPass } from 'realism-effects';
4
+ import * as THREE from 'three';
5
+ import { resolveRenderSettings } from '../render/render-settings';
6
+ import { DEFAULTS } from '../scene/defaults';
7
+ /**
8
+ * Apply the live renderer-level render settings (shadows, resolution scale) from
9
+ * the resolved cascade. `antialias`/`backend` are reload-only (renderer re-init)
10
+ * and are handled at construction, not here. Pass the scene `rendering` scope
11
+ * (e.g. `env.rendering`); absent values fall back to the registry defaults so
12
+ * behavior is unchanged when a scene omits `rendering`.
13
+ *
14
+ * `basePixelRatio` is the call-site's native pixel-ratio policy (the runtime caps
15
+ * at 2; the editor uses the raw devicePixelRatio); `resolutionScale` multiplies it.
16
+ */
17
+ export function applyRendererSettings(renderer, rendering, basePixelRatio = Math.min(window.devicePixelRatio, 2)) {
18
+ const settings = resolveRenderSettings(rendering);
19
+ renderer.shadowMap.enabled = Boolean(settings['shadows']);
20
+ const scale = Number(settings['resolutionScale']) || 1;
21
+ renderer.setPixelRatio(basePixelRatio * scale);
22
+ }
23
+ /**
24
+ * Create ONLY the WebGL renderer. The HOST owns the renderer (see
25
+ * `HostContext.renderer`); the game/adapter owns the scene/camera/composer it
26
+ * renders into. Split out of `setupRenderer` for the adapter inversion.
27
+ *
28
+ * `rendering` is the scene-level render scope (`env.rendering`); it seeds the
29
+ * reload-only `antialias` option at construction and the live shadow/resolution
30
+ * settings (via {@link applyRendererSettings}). Absent → registry defaults.
31
+ *
32
+ * `opts` is additive (T6.1 slice 1, COMPOSITION-DESIGN.md D5 §1/§4): omitted
33
+ * entirely, construction is byte-identical to before (no `alpha`/
34
+ * `preserveDrawingBuffer` keys at all) — the legacy single-canvas host never
35
+ * passes it. The worlds path passes `alpha:true` for every stacked canvas
36
+ * above the bottom one (so its clear-alpha-0 shows the layer below through
37
+ * it) and `preserveDrawingBuffer:true` for every stacked canvas (the
38
+ * recorded capture-tier cost, paid once here rather than re-derived later).
39
+ */
40
+ export function createHostRenderer(canvas, width = window.innerWidth, height = window.innerHeight, rendering, opts) {
41
+ // A newly-shown editor tab can report 0x0 for one layout frame. WebGL render
42
+ // targets cannot have zero-sized attachments, so boot at the smallest valid
43
+ // backing size and let the normal resize path apply the real dimensions.
44
+ const safeWidth = Math.max(1, width);
45
+ const safeHeight = Math.max(1, height);
46
+ const settings = resolveRenderSettings(rendering);
47
+ const renderer = new THREE.WebGLRenderer({
48
+ canvas,
49
+ antialias: Boolean(settings['antialias']),
50
+ powerPreference: 'high-performance',
51
+ ...(opts?.alpha ? { alpha: true } : {}),
52
+ ...(opts?.preserveDrawingBuffer ? { preserveDrawingBuffer: true } : {}),
53
+ });
54
+ renderer.setSize(safeWidth, safeHeight);
55
+ applyRendererSettings(renderer, rendering);
56
+ renderer.shadowMap.type = THREE.PCFSoftShadowMap;
57
+ renderer.toneMapping = toneMappingModes[DEFAULTS.toneMapping.mode] ?? THREE.ACESFilmicToneMapping;
58
+ renderer.toneMappingExposure = DEFAULTS.toneMapping.exposure;
59
+ return renderer;
60
+ }
61
+ /**
62
+ * Create the scene, camera, and postprocessing composer that a first-party game
63
+ * renders into, given a host-provided renderer. The GPU-only `composer` is
64
+ * created here; a headless host (no GPU) skips this entirely.
65
+ */
66
+ export function createSceneView(renderer, width = window.innerWidth, height = window.innerHeight) {
67
+ const safeWidth = Math.max(1, width);
68
+ const safeHeight = Math.max(1, height);
69
+ const scene = new THREE.Scene();
70
+ scene.background = new THREE.Color(0x1a1a2e);
71
+ const camera = new THREE.PerspectiveCamera(DEFAULTS.camera.fov, safeWidth / safeHeight, DEFAULTS.camera.near, DEFAULTS.camera.far);
72
+ camera.position.set(0, 5, 10);
73
+ camera.lookAt(0, 0, 0);
74
+ const composer = new EffectComposer(renderer);
75
+ composer.addPass(new RenderPass(scene, camera));
76
+ composer.addPass(new EffectPass(camera, new BloomEffect({ luminanceThreshold: DEFAULTS.postProcessing.bloom.luminanceThreshold })));
77
+ return { scene, camera, composer };
78
+ }
79
+ /**
80
+ * Creates the Three.js renderer, scene, camera, and postprocessing pipeline.
81
+ *
82
+ * This is direct Three.js setup — no abstraction. Edit freely. (Now a thin
83
+ * combination of {@link createHostRenderer} + {@link createSceneView}.)
84
+ */
85
+ export function setupRenderer(canvas, width = window.innerWidth, height = window.innerHeight) {
86
+ const renderer = createHostRenderer(canvas, width, height);
87
+ const { scene, camera, composer } = createSceneView(renderer, width, height);
88
+ return { renderer, scene, camera, composer };
89
+ }
90
+ const toneMappingModes = {
91
+ none: THREE.NoToneMapping,
92
+ linear: THREE.LinearToneMapping,
93
+ reinhard: THREE.ReinhardToneMapping,
94
+ cineon: THREE.CineonToneMapping,
95
+ aces: THREE.ACESFilmicToneMapping,
96
+ agx: THREE.AgXToneMapping,
97
+ };
98
+ const smaaPresets = {
99
+ low: SMAAPreset.LOW,
100
+ medium: SMAAPreset.MEDIUM,
101
+ high: SMAAPreset.HIGH,
102
+ ultra: SMAAPreset.ULTRA,
103
+ };
104
+ /**
105
+ * Rebuild composer passes from scene environment settings.
106
+ * Scenes without toneMapping default to ACES (the runtime default).
107
+ * Code can further modify the composer after this call.
108
+ *
109
+ * Pass objectMap to enable entity-referencing effects (godRays, outline).
110
+ * Pass entities to resolve tag-based references (outline).
111
+ */
112
+ export function applyScenePostProcessing(composer, renderer, scene, camera, env, objectMap, entityTags) {
113
+ // Dispose the existing passes before discarding them — removeAllPasses() just
114
+ // drops the references, so their GPU render targets would otherwise leak on
115
+ // every env edit / scene switch.
116
+ for (const pass of composer.passes) {
117
+ pass.dispose?.();
118
+ }
119
+ composer.removeAllPasses();
120
+ composer.addPass(new RenderPass(scene, camera));
121
+ // ── Tone mapping ──────────────────────────────────────────────────────
122
+ const tm = env?.toneMapping;
123
+ renderer.toneMapping =
124
+ toneMappingModes[tm?.mode ?? DEFAULTS.toneMapping.mode] ?? THREE.ACESFilmicToneMapping;
125
+ renderer.toneMappingExposure = tm?.exposure ?? DEFAULTS.toneMapping.exposure;
126
+ // ── Master switch ─────────────────────────────────────────────────────
127
+ // When post-processing is disabled at the scene/engine level, render the
128
+ // plain scene (the RenderPass added above) and skip every effect pass. The
129
+ // per-effect `enabled` flags below still apply when the master switch is on.
130
+ if (!resolveRenderSettings(env?.rendering)['postProcessing'])
131
+ return;
132
+ const pp = env?.postProcessing;
133
+ const d = DEFAULTS.postProcessing;
134
+ // ── Prerequisite passes ───────────────────────────────────────────────
135
+ // NormalPass — needed by SSAO
136
+ let normalPass;
137
+ if (pp?.ssao?.enabled) {
138
+ normalPass = new NormalPass(scene, camera);
139
+ composer.addPass(normalPass);
140
+ }
141
+ // VelocityDepthNormalPass — needed by SSR, SSGI, MotionBlur
142
+ let velocityPass;
143
+ if (pp?.ssr?.enabled || pp?.ssgi?.enabled || pp?.motionBlur?.enabled) {
144
+ velocityPass = new VelocityDepthNormalPass(scene, camera);
145
+ composer.addPass(velocityPass);
146
+ }
147
+ // N8AOPostPass — separate Pass, not an Effect
148
+ if (pp?.n8ao?.enabled) {
149
+ const n8aoPass = new N8AOPostPass(scene, camera);
150
+ const cfg = n8aoPass.configuration;
151
+ cfg.aoSamples = pp.n8ao.aoSamples ?? d.n8ao.aoSamples;
152
+ cfg.aoRadius = pp.n8ao.aoRadius ?? d.n8ao.aoRadius;
153
+ cfg.intensity = pp.n8ao.intensity ?? d.n8ao.intensity;
154
+ cfg.denoiseSamples = pp.n8ao.denoiseSamples ?? d.n8ao.denoiseSamples;
155
+ cfg.denoiseRadius = pp.n8ao.denoiseRadius ?? d.n8ao.denoiseRadius;
156
+ cfg.distanceFalloff = pp.n8ao.distanceFalloff ?? d.n8ao.distanceFalloff;
157
+ if (pp.n8ao.screenSpaceRadius !== undefined)
158
+ cfg.screenSpaceRadius = pp.n8ao.screenSpaceRadius;
159
+ if (pp.n8ao.halfRes !== undefined)
160
+ cfg.halfRes = pp.n8ao.halfRes;
161
+ if (pp.n8ao.color)
162
+ cfg.color = new THREE.Color(pp.n8ao.color);
163
+ composer.addPass(n8aoPass);
164
+ }
165
+ // ── Collect Effect instances ──────────────────────────────────────────
166
+ const effects = [];
167
+ // Anti-aliasing
168
+ if (pp?.smaa?.enabled) {
169
+ const preset = smaaPresets[pp.smaa.preset ?? d.smaa.preset] ?? SMAAPreset.HIGH;
170
+ effects.push(new SMAAEffect({ preset }));
171
+ }
172
+ // Ambient occlusion
173
+ if (pp?.ssao?.enabled && normalPass) {
174
+ effects.push(new SSAOEffect(camera, normalPass.texture, {
175
+ radius: pp.ssao.radius ?? d.ssao.radius,
176
+ intensity: pp.ssao.intensity ?? d.ssao.intensity,
177
+ bias: pp.ssao.bias ?? d.ssao.bias,
178
+ samples: pp.ssao.samples ?? d.ssao.samples,
179
+ rings: pp.ssao.rings ?? d.ssao.rings,
180
+ fade: pp.ssao.fade ?? d.ssao.fade,
181
+ ...(pp.ssao.color ? { color: new THREE.Color(pp.ssao.color) } : {}),
182
+ }));
183
+ }
184
+ // SSR (realism-effects)
185
+ if (pp?.ssr?.enabled && velocityPass) {
186
+ effects.push(new SSREffect(scene, camera, velocityPass, {
187
+ intensity: pp.ssr.intensity ?? d.ssr.intensity,
188
+ exponent: pp.ssr.exponent ?? d.ssr.exponent,
189
+ distance: pp.ssr.distance ?? d.ssr.distance,
190
+ thickness: pp.ssr.thickness ?? d.ssr.thickness,
191
+ maxRoughness: pp.ssr.maxRoughness ?? d.ssr.maxRoughness,
192
+ }));
193
+ }
194
+ // SSGI (realism-effects)
195
+ if (pp?.ssgi?.enabled && velocityPass) {
196
+ effects.push(new SSGIEffect(scene, camera, velocityPass, {
197
+ intensity: pp.ssgi.intensity ?? d.ssgi.intensity,
198
+ distance: pp.ssgi.distance ?? d.ssgi.distance,
199
+ thickness: pp.ssgi.thickness ?? d.ssgi.thickness,
200
+ maxRoughness: pp.ssgi.maxRoughness ?? d.ssgi.maxRoughness,
201
+ }));
202
+ }
203
+ // Motion blur (realism-effects)
204
+ if (pp?.motionBlur?.enabled && velocityPass) {
205
+ effects.push(new MotionBlurEffect(velocityPass, {
206
+ intensity: pp.motionBlur.intensity ?? d.motionBlur.intensity,
207
+ jitter: pp.motionBlur.jitter ?? d.motionBlur.jitter,
208
+ samples: pp.motionBlur.samples ?? d.motionBlur.samples,
209
+ }));
210
+ }
211
+ // Bloom
212
+ if (pp?.bloom?.enabled) {
213
+ effects.push(new BloomEffect({
214
+ intensity: pp.bloom.intensity ?? d.bloom.intensity,
215
+ luminanceThreshold: pp.bloom.luminanceThreshold ?? d.bloom.luminanceThreshold,
216
+ luminanceSmoothing: pp.bloom.luminanceSmoothing ?? d.bloom.luminanceSmoothing,
217
+ }));
218
+ }
219
+ // Depth of field
220
+ if (pp?.depthOfField?.enabled) {
221
+ effects.push(new DepthOfFieldEffect(camera, {
222
+ worldFocusDistance: pp.depthOfField.worldFocusDistance ?? d.depthOfField.worldFocusDistance,
223
+ worldFocusRange: pp.depthOfField.worldFocusRange ?? d.depthOfField.worldFocusRange,
224
+ bokehScale: pp.depthOfField.bokehScale ?? d.depthOfField.bokehScale,
225
+ focalLength: pp.depthOfField.focalLength ?? d.depthOfField.focalLength,
226
+ }));
227
+ }
228
+ // Tilt shift
229
+ if (pp?.tiltShift?.enabled) {
230
+ effects.push(new TiltShiftEffect({
231
+ offset: pp.tiltShift.offset ?? d.tiltShift.offset,
232
+ rotation: pp.tiltShift.rotation ?? d.tiltShift.rotation,
233
+ focusArea: pp.tiltShift.focusArea ?? d.tiltShift.focusArea,
234
+ feather: pp.tiltShift.feather ?? d.tiltShift.feather,
235
+ }));
236
+ }
237
+ // God rays (needs entity reference)
238
+ if (pp?.godRays?.enabled && pp.godRays.sourceEntity && objectMap) {
239
+ const lightObj = objectMap.get(pp.godRays.sourceEntity);
240
+ if (lightObj instanceof THREE.Mesh || lightObj instanceof THREE.Points) {
241
+ effects.push(new GodRaysEffect(camera, lightObj, {
242
+ density: pp.godRays.density ?? d.godRays.density,
243
+ decay: pp.godRays.decay ?? d.godRays.decay,
244
+ weight: pp.godRays.weight ?? d.godRays.weight,
245
+ exposure: pp.godRays.exposure ?? d.godRays.exposure,
246
+ samples: pp.godRays.samples ?? d.godRays.samples,
247
+ }));
248
+ }
249
+ }
250
+ // Outline (needs entity tag references)
251
+ if (pp?.outline?.enabled && objectMap) {
252
+ const outlineEffect = new OutlineEffect(scene, camera, {
253
+ edgeStrength: pp.outline.edgeStrength ?? d.outline.edgeStrength,
254
+ pulseSpeed: pp.outline.pulseSpeed ?? d.outline.pulseSpeed,
255
+ visibleEdgeColor: pp.outline.visibleEdgeColor
256
+ ? new THREE.Color(pp.outline.visibleEdgeColor).getHex()
257
+ : new THREE.Color(d.outline.visibleEdgeColor).getHex(),
258
+ hiddenEdgeColor: pp.outline.hiddenEdgeColor
259
+ ? new THREE.Color(pp.outline.hiddenEdgeColor).getHex()
260
+ : new THREE.Color(d.outline.hiddenEdgeColor).getHex(),
261
+ xRay: pp.outline.xRay ?? false,
262
+ });
263
+ // Add entities matching tags to selection
264
+ const tags = pp.outline.tags ?? [];
265
+ if (tags.length > 0 && entityTags) {
266
+ for (const [entityId, eTags] of entityTags) {
267
+ if (tags.some((t) => eTags.includes(t))) {
268
+ const obj = objectMap.get(entityId);
269
+ if (obj)
270
+ outlineEffect.selection.add(obj);
271
+ }
272
+ }
273
+ }
274
+ effects.push(outlineEffect);
275
+ }
276
+ // Chromatic aberration
277
+ if (pp?.chromaticAberration?.enabled) {
278
+ effects.push(new ChromaticAberrationEffect({
279
+ offset: new THREE.Vector2(pp.chromaticAberration.offsetX ?? d.chromaticAberration.offsetX, pp.chromaticAberration.offsetY ?? d.chromaticAberration.offsetY),
280
+ radialModulation: pp.chromaticAberration.radialModulation ?? false,
281
+ modulationOffset: pp.chromaticAberration.modulationOffset ?? d.chromaticAberration.modulationOffset,
282
+ }));
283
+ }
284
+ // Lens distortion
285
+ if (pp?.lensDistortion?.enabled) {
286
+ effects.push(new LensDistortionEffect({
287
+ distortion: new THREE.Vector2(pp.lensDistortion.distortionX ?? d.lensDistortion.distortionX, pp.lensDistortion.distortionY ?? d.lensDistortion.distortionY),
288
+ principalPoint: new THREE.Vector2(0, 0),
289
+ focalLength: new THREE.Vector2(pp.lensDistortion.focalLengthX ?? d.lensDistortion.focalLengthX, pp.lensDistortion.focalLengthY ?? d.lensDistortion.focalLengthY),
290
+ skew: pp.lensDistortion.skew ?? d.lensDistortion.skew,
291
+ }));
292
+ }
293
+ // Shock wave
294
+ if (pp?.shockWave?.enabled) {
295
+ effects.push(new ShockWaveEffect(camera, new THREE.Vector3(pp.shockWave.positionX ?? 0, pp.shockWave.positionY ?? 0, pp.shockWave.positionZ ?? 0), {
296
+ speed: pp.shockWave.speed ?? d.shockWave.speed,
297
+ maxRadius: pp.shockWave.maxRadius ?? d.shockWave.maxRadius,
298
+ waveSize: pp.shockWave.waveSize ?? d.shockWave.waveSize,
299
+ amplitude: pp.shockWave.amplitude ?? d.shockWave.amplitude,
300
+ }));
301
+ }
302
+ // Color adjustments
303
+ if (pp?.brightnessContrast?.enabled) {
304
+ effects.push(new BrightnessContrastEffect({
305
+ brightness: pp.brightnessContrast.brightness ?? d.brightnessContrast.brightness,
306
+ contrast: pp.brightnessContrast.contrast ?? d.brightnessContrast.contrast,
307
+ }));
308
+ }
309
+ if (pp?.hueSaturation?.enabled) {
310
+ effects.push(new HueSaturationEffect({
311
+ hue: pp.hueSaturation.hue ?? d.hueSaturation.hue,
312
+ saturation: pp.hueSaturation.saturation ?? d.hueSaturation.saturation,
313
+ }));
314
+ }
315
+ if (pp?.sepia?.enabled) {
316
+ effects.push(new SepiaEffect({ intensity: pp.sepia.intensity ?? d.sepia.intensity }));
317
+ }
318
+ if (pp?.colorDepth?.enabled) {
319
+ effects.push(new ColorDepthEffect({ bits: pp.colorDepth.bits ?? d.colorDepth.bits }));
320
+ }
321
+ // Film / retro
322
+ if (pp?.noise?.enabled) {
323
+ effects.push(new NoiseEffect({ premultiply: pp.noise.premultiply ?? d.noise.premultiply }));
324
+ }
325
+ if (pp?.scanline?.enabled) {
326
+ effects.push(new ScanlineEffect({ density: pp.scanline.density ?? d.scanline.density }));
327
+ }
328
+ if (pp?.dotScreen?.enabled) {
329
+ effects.push(new DotScreenEffect({
330
+ angle: pp.dotScreen.angle ?? d.dotScreen.angle,
331
+ scale: pp.dotScreen.scale ?? d.dotScreen.scale,
332
+ }));
333
+ }
334
+ if (pp?.grid?.enabled) {
335
+ effects.push(new GridEffect({
336
+ scale: pp.grid.scale ?? d.grid.scale,
337
+ lineWidth: pp.grid.lineWidth ?? d.grid.lineWidth,
338
+ }));
339
+ }
340
+ if (pp?.pixelation?.enabled) {
341
+ effects.push(new PixelationEffect(pp.pixelation.granularity ?? d.pixelation.granularity));
342
+ }
343
+ if (pp?.glitch?.enabled) {
344
+ effects.push(new GlitchEffect({
345
+ delay: new THREE.Vector2(pp.glitch.delayX ?? d.glitch.delayX, pp.glitch.delayY ?? d.glitch.delayY),
346
+ duration: new THREE.Vector2(pp.glitch.durationX ?? d.glitch.durationX, pp.glitch.durationY ?? d.glitch.durationY),
347
+ strength: new THREE.Vector2(pp.glitch.strengthX ?? d.glitch.strengthX, pp.glitch.strengthY ?? d.glitch.strengthY),
348
+ columns: pp.glitch.columns ?? d.glitch.columns,
349
+ ratio: pp.glitch.ratio ?? d.glitch.ratio,
350
+ }));
351
+ }
352
+ // Vignette (last color effect)
353
+ if (pp?.vignette?.enabled) {
354
+ effects.push(new VignetteEffect({
355
+ darkness: pp.vignette.darkness ?? d.vignette.darkness,
356
+ offset: pp.vignette.offset ?? d.vignette.offset,
357
+ }));
358
+ }
359
+ // ── Merge all effects into a single EffectPass ────────────────────────
360
+ if (effects.length > 0) {
361
+ composer.addPass(new EffectPass(camera, ...effects));
362
+ }
363
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Project tools — W4/W3 of `docs/DATA-TOOLS-DESIGN.md` (§3 contract).
3
+ *
4
+ * A project tool is ONE file, `src/tools/<name>.tool.tsx`, discovered by
5
+ * folder scan (same physics as data assets, §3.1: zero registration, delete
6
+ * the file → gone). The file exports exactly two things:
7
+ *
8
+ * ```tsx
9
+ * export const tool = defineTool({
10
+ * id: 'tuning', // stable slug — becomes the tab's test id
11
+ * title: 'Tuning', // the tab label (rendered after a ⚙ marker)
12
+ * placement: 'dock', // project-global dashboard tab (§3.2)
13
+ * });
14
+ * export default function Tuning() { … } // plain React
15
+ * ```
16
+ *
17
+ * or, selection-scoped (W3 — §3.2's second placement):
18
+ *
19
+ * ```tsx
20
+ * export const tool = defineTool({
21
+ * id: 'spin',
22
+ * title: 'Spin',
23
+ * placement: 'inspector', // selection-scoped section
24
+ * match: (node) => node?.kind === 'mesh', // same contract as the
25
+ * }); // inspector-section registry
26
+ * export default function Spin({ node }: InspectorToolProps) { … }
27
+ * ```
28
+ *
29
+ * The editor renders dock tools as visually distinct tabs after a separator
30
+ * at the end of the bottom dock's tab row (§3.5); inspector tools render as
31
+ * a ⚙-marked section in the Inspector rail whenever `match` accepts the
32
+ * current selection. Both render inside an error boundary — a crashing tool
33
+ * never takes the editor down. Tools are EDITOR-ONLY: no game build bundles
34
+ * `src/tools/` (§4 — nothing in game code imports it), so dev/cheat surfaces
35
+ * can never leak into a tester serve.
36
+ *
37
+ * This module is deliberately react-free metadata (the engine core outside
38
+ * `src/react/` must not import react — `test/react-core-import-ban.test.ts`);
39
+ * the react-facing tool hooks live in `@engine/react/use-data`, and the
40
+ * editor-styled widget kit tools build panels from is `@editor/widgets`.
41
+ */
42
+ import type { AuthoringAdapter, EditorNode } from '../adapter';
43
+ /** The two placements (§3.2). Deliberately nothing else — no floating
44
+ * windows, no in-game overlay host (§3.2 "deliberately NOT built"). */
45
+ export type ToolPlacement = 'dock' | 'inspector';
46
+ /** Fields every tool declares — see {@link defineTool} for the contract. */
47
+ interface ToolConfigBase {
48
+ /**
49
+ * Stable slug for this tool: letters/digits/`-`/`_` only. It becomes the
50
+ * mount's `data-testid` (`bottom-tab-tool-<id>` for dock tools,
51
+ * `inspector-tool-<id>` for inspector tools), so keep it short and never
52
+ * rename it casually — automation and saved layouts key off it.
53
+ */
54
+ id: string;
55
+ /** Human label: the dock tab text, or the inspector section's header,
56
+ * rendered after the ⚙ project-tool marker (§3.5). */
57
+ title: string;
58
+ }
59
+ /** A project-global dashboard tab in the bottom dock (§3.2, W4). */
60
+ export interface DockToolConfig extends ToolConfigBase {
61
+ placement: 'dock';
62
+ }
63
+ /** A selection-scoped Inspector section (§3.2, W3). */
64
+ export interface InspectorToolConfig extends ToolConfigBase {
65
+ placement: 'inspector';
66
+ /**
67
+ * When this section appears — the SAME contract as the editor's
68
+ * `inspector-section-registry`: called with the currently selected node
69
+ * (`null` in the no-selection/environment state) and the active authoring
70
+ * adapter; return `true` to render. Keep it cheap and pure — it runs on
71
+ * every inspector render. A `match` that throws is treated as `false`
72
+ * (with one console teaching error), never crashing the inspector.
73
+ */
74
+ match: (node: EditorNode | null, adapter: AuthoringAdapter) => boolean;
75
+ }
76
+ /** Metadata for a project tool — a discriminated union on `placement`. */
77
+ export type ToolConfig = DockToolConfig | InspectorToolConfig;
78
+ /**
79
+ * Props the editor passes to an INSPECTOR tool's default-exported component
80
+ * (dock tools receive no props). Everything richer (live game store, field
81
+ * addresses) arrives through the §3.3 hooks, not through more props.
82
+ */
83
+ export interface InspectorToolProps {
84
+ /** The selected node your `match` accepted (`null` in the no-selection
85
+ * state, if your `match` chose to accept it). */
86
+ node: EditorNode | null;
87
+ /** The selected node's stable id (`null` in the no-selection state). */
88
+ nodeId: string | null;
89
+ }
90
+ /**
91
+ * Validate and freeze a project tool's metadata (docs/DATA-TOOLS-DESIGN.md
92
+ * §3.1). Call it once at module scope of a `src/tools/<name>.tool.tsx` file
93
+ * and export the result as `tool`, next to a default-exported React
94
+ * component — the editor's folder scan picks the file up automatically.
95
+ *
96
+ * Fails loud (§6.5 "errors teach") on anything malformed rather than letting
97
+ * a half-shaped tool render confusingly: bad `id`/`title`, an unknown
98
+ * placement, an inspector tool without a callable `match`.
99
+ *
100
+ * The returned config is frozen: tool metadata is a definition, not state
101
+ * (the same immutability rule data assets follow, §2.1).
102
+ */
103
+ export declare function defineTool(config: ToolConfig): Readonly<ToolConfig>;
104
+ export {};
105
+ //# sourceMappingURL=define-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-tool.d.ts","sourceRoot":"","sources":["../../src/tools/define-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D;wEACwE;AACxE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,4EAA4E;AAC5E,UAAU,cAAc;IACtB;;;;;OAKG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;2DACuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,SAAS,EAAE,WAAW,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACxE;AAED,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;sDACkD;IAClD,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,wEAAwE;IACxE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAiCnE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Project tools — W4/W3 of `docs/DATA-TOOLS-DESIGN.md` (§3 contract).
3
+ *
4
+ * A project tool is ONE file, `src/tools/<name>.tool.tsx`, discovered by
5
+ * folder scan (same physics as data assets, §3.1: zero registration, delete
6
+ * the file → gone). The file exports exactly two things:
7
+ *
8
+ * ```tsx
9
+ * export const tool = defineTool({
10
+ * id: 'tuning', // stable slug — becomes the tab's test id
11
+ * title: 'Tuning', // the tab label (rendered after a ⚙ marker)
12
+ * placement: 'dock', // project-global dashboard tab (§3.2)
13
+ * });
14
+ * export default function Tuning() { … } // plain React
15
+ * ```
16
+ *
17
+ * or, selection-scoped (W3 — §3.2's second placement):
18
+ *
19
+ * ```tsx
20
+ * export const tool = defineTool({
21
+ * id: 'spin',
22
+ * title: 'Spin',
23
+ * placement: 'inspector', // selection-scoped section
24
+ * match: (node) => node?.kind === 'mesh', // same contract as the
25
+ * }); // inspector-section registry
26
+ * export default function Spin({ node }: InspectorToolProps) { … }
27
+ * ```
28
+ *
29
+ * The editor renders dock tools as visually distinct tabs after a separator
30
+ * at the end of the bottom dock's tab row (§3.5); inspector tools render as
31
+ * a ⚙-marked section in the Inspector rail whenever `match` accepts the
32
+ * current selection. Both render inside an error boundary — a crashing tool
33
+ * never takes the editor down. Tools are EDITOR-ONLY: no game build bundles
34
+ * `src/tools/` (§4 — nothing in game code imports it), so dev/cheat surfaces
35
+ * can never leak into a tester serve.
36
+ *
37
+ * This module is deliberately react-free metadata (the engine core outside
38
+ * `src/react/` must not import react — `test/react-core-import-ban.test.ts`);
39
+ * the react-facing tool hooks live in `@engine/react/use-data`, and the
40
+ * editor-styled widget kit tools build panels from is `@editor/widgets`.
41
+ */
42
+ const TEMPLATE_EXAMPLE = 'the template worked example: src/tools/example.tool.tsx';
43
+ /** Teaching-error helper (§6.5): every rejection names the fix and cites the
44
+ * template example by path. */
45
+ function toolError(problem, fix) {
46
+ return new Error(`defineTool: ${problem} — ${fix} (see ${TEMPLATE_EXAMPLE}).`);
47
+ }
48
+ /**
49
+ * Validate and freeze a project tool's metadata (docs/DATA-TOOLS-DESIGN.md
50
+ * §3.1). Call it once at module scope of a `src/tools/<name>.tool.tsx` file
51
+ * and export the result as `tool`, next to a default-exported React
52
+ * component — the editor's folder scan picks the file up automatically.
53
+ *
54
+ * Fails loud (§6.5 "errors teach") on anything malformed rather than letting
55
+ * a half-shaped tool render confusingly: bad `id`/`title`, an unknown
56
+ * placement, an inspector tool without a callable `match`.
57
+ *
58
+ * The returned config is frozen: tool metadata is a definition, not state
59
+ * (the same immutability rule data assets follow, §2.1).
60
+ */
61
+ export function defineTool(config) {
62
+ if (config === null || typeof config !== 'object') {
63
+ throw toolError('expected a config object', "call it as defineTool({ id, title, placement: 'dock' })");
64
+ }
65
+ const { id, title, placement } = config;
66
+ if (placement !== 'dock' && placement !== 'inspector') {
67
+ throw toolError(`unknown placement ${JSON.stringify(placement)}`, "the placements are 'dock' (project-global bottom tab) and 'inspector' (selection-scoped section, §3.2)");
68
+ }
69
+ if (typeof id !== 'string' || !/^[a-zA-Z0-9_-]+$/.test(id)) {
70
+ throw toolError(`invalid id ${JSON.stringify(id)}`, 'pass a non-empty slug of letters, digits, "-" or "_" — it becomes the tool\'s data-testid (bottom-tab-tool-<id> / inspector-tool-<id>)');
71
+ }
72
+ if (typeof title !== 'string' || title.trim() === '') {
73
+ throw toolError(`invalid title ${JSON.stringify(title)}`, 'pass a short human-readable label');
74
+ }
75
+ if (placement === 'inspector') {
76
+ if (typeof config.match !== 'function') {
77
+ throw toolError(`placement 'inspector' requires a match function (got ${JSON.stringify(config.match)})`, "pass match: (node) => boolean — e.g. match: (node) => node?.kind === 'mesh' — deciding which selections show this section");
78
+ }
79
+ return Object.freeze({ id, title, placement, match: config.match });
80
+ }
81
+ return Object.freeze({ id, title, placement });
82
+ }
@@ -0,0 +1,76 @@
1
+ import type { Container } from 'pixi.js';
2
+ /**
3
+ * AuthoringAdapter-2D — the world2d analog of the editor AuthoringAdapter /
4
+ * IngestAuthoringAdapter, implemented DIRECTLY over a live PixiJS display tree
5
+ * (no fabricated Scene2D / SceneEntity — the anti-shim rule). Used by the editor to
6
+ * inspect + edit world2d entities (first-party OR an ingested unmodified game),
7
+ * with stable structural-path ids so edits re-bind after the tree rebuilds.
8
+ */
9
+ export interface EditorNode2D {
10
+ id: string;
11
+ label: string;
12
+ kind: 'sprite' | 'animatedsprite' | 'text' | 'container' | string;
13
+ parentId: string | null;
14
+ childIds: string[];
15
+ }
16
+ export interface Transform2DValue {
17
+ position: [number, number];
18
+ rotation: number;
19
+ scale: [number, number];
20
+ }
21
+ export interface Property2D {
22
+ path: string;
23
+ label: string;
24
+ type: 'string' | 'number' | 'boolean' | 'vec2' | 'color';
25
+ value: unknown;
26
+ }
27
+ /** A persisted edit overlay keyed by structural-path id (the 2D analog of IngestOverlay). */
28
+ export interface Override2D {
29
+ position?: [number, number];
30
+ rotation?: number;
31
+ scale?: [number, number];
32
+ tint?: number;
33
+ visible?: boolean;
34
+ }
35
+ export type Overlay2D = Record<string, Override2D>;
36
+ export declare class AuthoringAdapter2D {
37
+ private readonly root;
38
+ private readonly byId;
39
+ private overlay;
40
+ private dirty;
41
+ constructor(root: Container, opts?: {
42
+ overlay?: Overlay2D;
43
+ });
44
+ /** Walk the live tree assigning deterministic structural-path ids, reapply overlay. */
45
+ refresh(): {
46
+ count: number;
47
+ sprites: number;
48
+ };
49
+ roots(): EditorNode2D[];
50
+ node(id: string): EditorNode2D | null;
51
+ displayObject(id: string): Container | null;
52
+ private toNode;
53
+ getTransform(id: string): Transform2DValue | null;
54
+ setTransform(id: string, t: Partial<Transform2DValue>): void;
55
+ properties(id: string): Property2D[];
56
+ set(id: string, path: string, value: unknown): void;
57
+ private applyOverride;
58
+ /**
59
+ * Re-apply a saved/external overlay onto the (already-walked) live tree, merging
60
+ * it into the in-memory overlay so a later `serializeOverlay()`/save preserves it
61
+ * and a later `refresh()` re-applies it again. Ids absent from the current tree
62
+ * are skipped (orphaned, not an error) — the 2D analog of
63
+ * `IngestAuthoringAdapter.applyOverlay` (T3.2 slice 3). Used both for the initial
64
+ * reload (constructor `opts.overlay`) and for `PersistenceProvider.applyExternal`
65
+ * (re-apply a changed overlay file without a full remount).
66
+ */
67
+ applyOverlay(overlay: Overlay2D): {
68
+ applied: number;
69
+ orphaned: number;
70
+ };
71
+ isDirty(): boolean;
72
+ serializeOverlay(): Overlay2D;
73
+ /** Clear the dirty flag after a successful save (mirrors IngestAuthoringAdapter). */
74
+ markClean(): void;
75
+ }
76
+ //# sourceMappingURL=authoring-2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-2d.d.ts","sourceRoot":"","sources":["../../src/world2d/authoring-2d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,6FAA6F;AAC7F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAUnD,qBAAa,kBAAkB;IAM3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,KAAK,CAAS;gBAGH,IAAI,EAAE,SAAS,EAChC,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAA;KAAO;IAMpC,uFAAuF;IACvF,OAAO,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAsB7C,KAAK,IAAI,YAAY,EAAE;IAIvB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKrC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM;IAYd,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAUjD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAe5D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,EAAE;IAkBpC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAUnD,OAAO,CAAC,aAAa;IAUrB;;;;;;;;OAQG;IACH,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAevE,OAAO,IAAI,OAAO;IAGlB,gBAAgB,IAAI,SAAS;IAG7B,qFAAqF;IACrF,SAAS,IAAI,IAAI;CAGlB"}