@codexo/exojs 0.13.0 → 0.14.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 (739) hide show
  1. package/CHANGELOG.md +133 -6
  2. package/README.md +80 -63
  3. package/dist/esm/animation/Tween.js +1 -1
  4. package/dist/esm/animation/Tween.js.map +1 -1
  5. package/dist/esm/animation/TweenManager.d.ts +9 -5
  6. package/dist/esm/animation/TweenManager.d.ts.map +1 -1
  7. package/dist/esm/animation/TweenManager.js +14 -8
  8. package/dist/esm/animation/TweenManager.js.map +1 -1
  9. package/dist/esm/animation/index.d.ts +6 -4
  10. package/dist/esm/animation/index.d.ts.map +1 -1
  11. package/dist/esm/audio/AudioBus.d.ts +12 -12
  12. package/dist/esm/audio/AudioBus.js +29 -29
  13. package/dist/esm/audio/AudioEffect.d.ts +18 -0
  14. package/dist/esm/audio/AudioEffect.d.ts.map +1 -0
  15. package/dist/esm/audio/AudioEffect.js +16 -0
  16. package/dist/esm/audio/AudioEffect.js.map +1 -0
  17. package/dist/esm/audio/AudioGenerator.d.ts +91 -0
  18. package/dist/esm/audio/AudioGenerator.d.ts.map +1 -0
  19. package/dist/esm/audio/AudioGenerator.js +165 -0
  20. package/dist/esm/audio/AudioGenerator.js.map +1 -0
  21. package/dist/esm/audio/AudioGeneratorVoice.d.ts +52 -0
  22. package/dist/esm/audio/AudioGeneratorVoice.d.ts.map +1 -0
  23. package/dist/esm/audio/AudioGeneratorVoice.js +141 -0
  24. package/dist/esm/audio/AudioGeneratorVoice.js.map +1 -0
  25. package/dist/esm/audio/AudioInput.d.ts +39 -0
  26. package/dist/esm/audio/AudioInput.d.ts.map +1 -0
  27. package/dist/esm/audio/AudioInput.js +53 -0
  28. package/dist/esm/audio/AudioInput.js.map +1 -0
  29. package/dist/esm/audio/AudioManager.d.ts +72 -34
  30. package/dist/esm/audio/AudioManager.d.ts.map +1 -1
  31. package/dist/esm/audio/AudioManager.js +97 -51
  32. package/dist/esm/audio/AudioManager.js.map +1 -1
  33. package/dist/esm/audio/AudioStream.d.ts +49 -0
  34. package/dist/esm/audio/AudioStream.d.ts.map +1 -0
  35. package/dist/esm/audio/AudioStream.js +109 -0
  36. package/dist/esm/audio/AudioStream.js.map +1 -0
  37. package/dist/esm/audio/AudioStreamVoice.d.ts +61 -0
  38. package/dist/esm/audio/AudioStreamVoice.d.ts.map +1 -0
  39. package/dist/esm/audio/AudioStreamVoice.js +137 -0
  40. package/dist/esm/audio/AudioStreamVoice.js.map +1 -0
  41. package/dist/esm/audio/BaseVoice.d.ts +111 -0
  42. package/dist/esm/audio/BaseVoice.d.ts.map +1 -0
  43. package/dist/esm/audio/BaseVoice.js +298 -0
  44. package/dist/esm/audio/BaseVoice.js.map +1 -0
  45. package/dist/esm/audio/BiquadEffect.d.ts +53 -0
  46. package/dist/esm/audio/BiquadEffect.d.ts.map +1 -0
  47. package/dist/esm/audio/BiquadEffect.js +110 -0
  48. package/dist/esm/audio/BiquadEffect.js.map +1 -0
  49. package/dist/esm/audio/InputVoice.d.ts +41 -0
  50. package/dist/esm/audio/InputVoice.d.ts.map +1 -0
  51. package/dist/esm/audio/InputVoice.js +85 -0
  52. package/dist/esm/audio/InputVoice.js.map +1 -0
  53. package/dist/esm/audio/NoopVoice.d.ts +29 -0
  54. package/dist/esm/audio/NoopVoice.d.ts.map +1 -0
  55. package/dist/esm/audio/NoopVoice.js +52 -0
  56. package/dist/esm/audio/NoopVoice.js.map +1 -0
  57. package/dist/esm/audio/Playable.d.ts +135 -0
  58. package/dist/esm/audio/Playable.d.ts.map +1 -0
  59. package/dist/esm/audio/Sound.d.ts +64 -69
  60. package/dist/esm/audio/Sound.d.ts.map +1 -1
  61. package/dist/esm/audio/Sound.js +176 -377
  62. package/dist/esm/audio/Sound.js.map +1 -1
  63. package/dist/esm/audio/SoundVoice.d.ts +63 -0
  64. package/dist/esm/audio/SoundVoice.d.ts.map +1 -0
  65. package/dist/esm/audio/SoundVoice.js +168 -0
  66. package/dist/esm/audio/SoundVoice.js.map +1 -0
  67. package/dist/esm/audio/{filters/WorkletFilter.d.ts → WorkletEffect.d.ts} +3 -3
  68. package/dist/esm/audio/WorkletEffect.d.ts.map +1 -0
  69. package/dist/esm/audio/{filters/WorkletFilter.js → WorkletEffect.js} +6 -6
  70. package/dist/esm/audio/WorkletEffect.js.map +1 -0
  71. package/dist/esm/audio/audio-context.js +1 -1
  72. package/dist/esm/audio/audio-context.js.map +1 -1
  73. package/dist/esm/audio/crossFade.d.ts +22 -13
  74. package/dist/esm/audio/crossFade.d.ts.map +1 -1
  75. package/dist/esm/audio/crossFade.js +21 -13
  76. package/dist/esm/audio/crossFade.js.map +1 -1
  77. package/dist/esm/audio/filters/HighpassFilter.d.ts +2 -2
  78. package/dist/esm/audio/filters/HighpassFilter.js +2 -2
  79. package/dist/esm/audio/filters/LowpassFilter.d.ts +2 -2
  80. package/dist/esm/audio/filters/LowpassFilter.js +2 -2
  81. package/dist/esm/audio/filters/index.d.ts +0 -10
  82. package/dist/esm/audio/filters/index.d.ts.map +1 -1
  83. package/dist/esm/audio/index.d.ts +13 -15
  84. package/dist/esm/audio/index.d.ts.map +1 -1
  85. package/dist/esm/core/Application.d.ts +127 -10
  86. package/dist/esm/core/Application.d.ts.map +1 -1
  87. package/dist/esm/core/Application.js +226 -25
  88. package/dist/esm/core/Application.js.map +1 -1
  89. package/dist/esm/core/BuildInfo.js +2 -2
  90. package/dist/esm/core/Color.d.ts +6 -4
  91. package/dist/esm/core/Color.d.ts.map +1 -1
  92. package/dist/esm/core/Color.js +19 -15
  93. package/dist/esm/core/Color.js.map +1 -1
  94. package/dist/esm/core/DisposalScope.d.ts +50 -0
  95. package/dist/esm/core/DisposalScope.d.ts.map +1 -0
  96. package/dist/esm/core/DisposalScope.js +86 -0
  97. package/dist/esm/core/DisposalScope.js.map +1 -0
  98. package/dist/esm/core/Perf.d.ts +10 -22
  99. package/dist/esm/core/Perf.d.ts.map +1 -1
  100. package/dist/esm/core/Perf.js +15 -8
  101. package/dist/esm/core/Perf.js.map +1 -1
  102. package/dist/esm/core/Registry.d.ts +64 -0
  103. package/dist/esm/core/Registry.d.ts.map +1 -0
  104. package/dist/esm/core/Registry.js +79 -0
  105. package/dist/esm/core/Registry.js.map +1 -0
  106. package/dist/esm/core/Scene.d.ts +69 -21
  107. package/dist/esm/core/Scene.d.ts.map +1 -1
  108. package/dist/esm/core/Scene.js +109 -16
  109. package/dist/esm/core/Scene.js.map +1 -1
  110. package/dist/esm/core/SceneManager.d.ts +22 -60
  111. package/dist/esm/core/SceneManager.d.ts.map +1 -1
  112. package/dist/esm/core/SceneManager.js +68 -153
  113. package/dist/esm/core/SceneManager.js.map +1 -1
  114. package/dist/esm/core/SceneNode.d.ts +43 -2
  115. package/dist/esm/core/SceneNode.d.ts.map +1 -1
  116. package/dist/esm/core/SceneNode.js +101 -12
  117. package/dist/esm/core/SceneNode.js.map +1 -1
  118. package/dist/esm/core/Signal.js.map +1 -1
  119. package/dist/esm/core/Stage.d.ts +42 -0
  120. package/dist/esm/core/Stage.d.ts.map +1 -0
  121. package/dist/esm/core/System.d.ts +22 -0
  122. package/dist/esm/core/System.d.ts.map +1 -0
  123. package/dist/esm/core/SystemRegistry.d.ts +35 -0
  124. package/dist/esm/core/SystemRegistry.d.ts.map +1 -0
  125. package/dist/esm/core/SystemRegistry.js +104 -0
  126. package/dist/esm/core/SystemRegistry.js.map +1 -0
  127. package/dist/esm/core/Time.d.ts +15 -0
  128. package/dist/esm/core/Time.d.ts.map +1 -1
  129. package/dist/esm/core/Time.js +25 -0
  130. package/dist/esm/core/Time.js.map +1 -1
  131. package/dist/esm/core/dev.d.ts +9 -4
  132. package/dist/esm/core/dev.d.ts.map +1 -1
  133. package/dist/esm/core/dev.js +5 -0
  134. package/dist/esm/core/dev.js.map +1 -1
  135. package/dist/esm/core/index.d.ts +26 -15
  136. package/dist/esm/core/index.d.ts.map +1 -1
  137. package/dist/esm/core/letterbox.d.ts +25 -0
  138. package/dist/esm/core/letterbox.d.ts.map +1 -0
  139. package/dist/esm/core/letterbox.js +26 -0
  140. package/dist/esm/core/letterbox.js.map +1 -0
  141. package/dist/esm/core/serialization/NodeSerializer.d.ts +71 -0
  142. package/dist/esm/core/serialization/NodeSerializer.d.ts.map +1 -0
  143. package/dist/esm/core/serialization/Prefab.d.ts +49 -0
  144. package/dist/esm/core/serialization/Prefab.d.ts.map +1 -0
  145. package/dist/esm/core/serialization/Prefab.js +61 -0
  146. package/dist/esm/core/serialization/Prefab.js.map +1 -0
  147. package/dist/esm/core/serialization/SerializationRegistry.d.ts +95 -0
  148. package/dist/esm/core/serialization/SerializationRegistry.d.ts.map +1 -0
  149. package/dist/esm/core/serialization/SerializationRegistry.js +108 -0
  150. package/dist/esm/core/serialization/SerializationRegistry.js.map +1 -0
  151. package/dist/esm/core/serialization/commonFields.d.ts +20 -0
  152. package/dist/esm/core/serialization/commonFields.d.ts.map +1 -0
  153. package/dist/esm/core/serialization/commonFields.js +149 -0
  154. package/dist/esm/core/serialization/commonFields.js.map +1 -0
  155. package/dist/esm/core/serialization/coreSerializers.d.ts +9 -0
  156. package/dist/esm/core/serialization/coreSerializers.d.ts.map +1 -0
  157. package/dist/esm/core/serialization/coreSerializers.js +101 -0
  158. package/dist/esm/core/serialization/coreSerializers.js.map +1 -0
  159. package/dist/esm/core/serialization/index.d.ts +6 -0
  160. package/dist/esm/core/serialization/index.d.ts.map +1 -0
  161. package/dist/esm/core/serialization/read.d.ts +65 -0
  162. package/dist/esm/core/serialization/read.d.ts.map +1 -0
  163. package/dist/esm/core/serialization/read.js +48 -0
  164. package/dist/esm/core/serialization/read.js.map +1 -0
  165. package/dist/esm/core/serialization/renderingSerializers.d.ts +7 -0
  166. package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -0
  167. package/dist/esm/core/serialization/renderingSerializers.js +311 -0
  168. package/dist/esm/core/serialization/renderingSerializers.js.map +1 -0
  169. package/dist/esm/core/serialization/serialize.d.ts +56 -0
  170. package/dist/esm/core/serialization/serialize.d.ts.map +1 -0
  171. package/dist/esm/core/serialization/serialize.js +144 -0
  172. package/dist/esm/core/serialization/serialize.js.map +1 -0
  173. package/dist/esm/core/serialization/serializerHelpers.d.ts +46 -0
  174. package/dist/esm/core/serialization/serializerHelpers.d.ts.map +1 -0
  175. package/dist/esm/core/serialization/serializerHelpers.js +161 -0
  176. package/dist/esm/core/serialization/serializerHelpers.js.map +1 -0
  177. package/dist/esm/core/serialization/types.d.ts +49 -0
  178. package/dist/esm/core/serialization/types.d.ts.map +1 -0
  179. package/dist/esm/core/serialization/types.js +9 -0
  180. package/dist/esm/core/serialization/types.js.map +1 -0
  181. package/dist/esm/core/serialization/uiSerializers.d.ts +7 -0
  182. package/dist/esm/core/serialization/uiSerializers.d.ts.map +1 -0
  183. package/dist/esm/core/serialization/uiSerializers.js +206 -0
  184. package/dist/esm/core/serialization/uiSerializers.js.map +1 -0
  185. package/dist/esm/core/types.d.ts +1 -1
  186. package/dist/esm/core/types.d.ts.map +1 -1
  187. package/dist/esm/core/utils.d.ts +1 -16
  188. package/dist/esm/core/utils.d.ts.map +1 -1
  189. package/dist/esm/core/utils.js +2 -100
  190. package/dist/esm/core/utils.js.map +1 -1
  191. package/dist/esm/debug/PerformanceLayer.js +8 -9
  192. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  193. package/dist/esm/debug/PointerStackLayer.d.ts.map +1 -1
  194. package/dist/esm/debug/PointerStackLayer.js +9 -6
  195. package/dist/esm/debug/PointerStackLayer.js.map +1 -1
  196. package/dist/esm/debug/RenderPassInspectorLayer.d.ts.map +1 -1
  197. package/dist/esm/debug/RenderPassInspectorLayer.js +19 -12
  198. package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
  199. package/dist/esm/extensions/Extension.d.ts +39 -4
  200. package/dist/esm/extensions/Extension.d.ts.map +1 -1
  201. package/dist/esm/extensions/materialize.d.ts +9 -1
  202. package/dist/esm/extensions/materialize.d.ts.map +1 -1
  203. package/dist/esm/extensions/materialize.js +17 -2
  204. package/dist/esm/extensions/materialize.js.map +1 -1
  205. package/dist/esm/extensions/snapshot.d.ts +2 -1
  206. package/dist/esm/extensions/snapshot.d.ts.map +1 -1
  207. package/dist/esm/extensions/snapshot.js +8 -0
  208. package/dist/esm/extensions/snapshot.js.map +1 -1
  209. package/dist/esm/index.d.ts +2 -1
  210. package/dist/esm/index.d.ts.map +1 -1
  211. package/dist/esm/index.js +34 -59
  212. package/dist/esm/index.js.map +1 -1
  213. package/dist/esm/input/FocusManager.d.ts +59 -0
  214. package/dist/esm/input/FocusManager.d.ts.map +1 -0
  215. package/dist/esm/input/FocusManager.js +175 -0
  216. package/dist/esm/input/FocusManager.js.map +1 -0
  217. package/dist/esm/input/Gamepad.d.ts.map +1 -1
  218. package/dist/esm/input/Gamepad.js +8 -4
  219. package/dist/esm/input/Gamepad.js.map +1 -1
  220. package/dist/esm/input/GamepadAxis.js +2 -2
  221. package/dist/esm/input/GamepadDefinitions.d.ts.map +1 -1
  222. package/dist/esm/input/GamepadDefinitions.js +6 -2
  223. package/dist/esm/input/GamepadDefinitions.js.map +1 -1
  224. package/dist/esm/input/GestureRecognizer.d.ts +1 -2
  225. package/dist/esm/input/GestureRecognizer.d.ts.map +1 -1
  226. package/dist/esm/input/GestureRecognizer.js +1 -3
  227. package/dist/esm/input/GestureRecognizer.js.map +1 -1
  228. package/dist/esm/input/InputBinding.js +3 -3
  229. package/dist/esm/input/InputBinding.js.map +1 -1
  230. package/dist/esm/input/InputManager.d.ts +7 -2
  231. package/dist/esm/input/InputManager.d.ts.map +1 -1
  232. package/dist/esm/input/InputManager.js +35 -21
  233. package/dist/esm/input/InputManager.js.map +1 -1
  234. package/dist/esm/input/InteractionManager.d.ts +67 -2
  235. package/dist/esm/input/InteractionManager.d.ts.map +1 -1
  236. package/dist/esm/input/InteractionManager.js +165 -41
  237. package/dist/esm/input/InteractionManager.js.map +1 -1
  238. package/dist/esm/input/KeyEvent.d.ts +25 -0
  239. package/dist/esm/input/KeyEvent.d.ts.map +1 -0
  240. package/dist/esm/input/KeyEvent.js +32 -0
  241. package/dist/esm/input/KeyEvent.js.map +1 -0
  242. package/dist/esm/input/Pointer.d.ts +21 -4
  243. package/dist/esm/input/Pointer.d.ts.map +1 -1
  244. package/dist/esm/input/Pointer.js +54 -15
  245. package/dist/esm/input/Pointer.js.map +1 -1
  246. package/dist/esm/input/index.d.ts +3 -1
  247. package/dist/esm/input/index.d.ts.map +1 -1
  248. package/dist/esm/math/AbstractVector.d.ts.map +1 -1
  249. package/dist/esm/math/AbstractVector.js +7 -2
  250. package/dist/esm/math/AbstractVector.js.map +1 -1
  251. package/dist/esm/math/Circle.d.ts.map +1 -1
  252. package/dist/esm/math/Circle.js +5 -1
  253. package/dist/esm/math/Circle.js.map +1 -1
  254. package/dist/esm/math/Line.d.ts +1 -1
  255. package/dist/esm/math/Line.d.ts.map +1 -1
  256. package/dist/esm/math/Line.js +1 -1
  257. package/dist/esm/math/Line.js.map +1 -1
  258. package/dist/esm/math/Matrix.d.ts.map +1 -1
  259. package/dist/esm/math/Matrix.js +6 -1
  260. package/dist/esm/math/Matrix.js.map +1 -1
  261. package/dist/esm/math/ObservableVector.d.ts +26 -8
  262. package/dist/esm/math/ObservableVector.d.ts.map +1 -1
  263. package/dist/esm/math/ObservableVector.js +24 -16
  264. package/dist/esm/math/ObservableVector.js.map +1 -1
  265. package/dist/esm/math/Polygon.d.ts +5 -0
  266. package/dist/esm/math/Polygon.d.ts.map +1 -1
  267. package/dist/esm/math/Polygon.js +27 -3
  268. package/dist/esm/math/Polygon.js.map +1 -1
  269. package/dist/esm/math/Random.d.ts +9 -9
  270. package/dist/esm/math/Random.d.ts.map +1 -1
  271. package/dist/esm/math/Random.js +46 -46
  272. package/dist/esm/math/Random.js.map +1 -1
  273. package/dist/esm/math/Rectangle.d.ts +11 -4
  274. package/dist/esm/math/Rectangle.d.ts.map +1 -1
  275. package/dist/esm/math/Rectangle.js +12 -6
  276. package/dist/esm/math/Rectangle.js.map +1 -1
  277. package/dist/esm/math/Vector.d.ts +1 -1
  278. package/dist/esm/math/Vector.d.ts.map +1 -1
  279. package/dist/esm/math/Vector.js +1 -1
  280. package/dist/esm/math/Vector.js.map +1 -1
  281. package/dist/esm/math/collision-detection.d.ts +42 -0
  282. package/dist/esm/math/collision-detection.d.ts.map +1 -1
  283. package/dist/esm/math/collision-detection.js +54 -4
  284. package/dist/esm/math/collision-detection.js.map +1 -1
  285. package/dist/esm/math/collision-primitives.d.ts.map +1 -1
  286. package/dist/esm/math/collision-primitives.js +4 -0
  287. package/dist/esm/math/collision-primitives.js.map +1 -1
  288. package/dist/esm/math/geometry.d.ts +26 -0
  289. package/dist/esm/math/geometry.d.ts.map +1 -1
  290. package/dist/esm/math/geometry.js +89 -2
  291. package/dist/esm/math/geometry.js.map +1 -1
  292. package/dist/esm/math/index.d.ts +7 -5
  293. package/dist/esm/math/index.d.ts.map +1 -1
  294. package/dist/esm/math/swept-collision.d.ts +13 -0
  295. package/dist/esm/math/swept-collision.d.ts.map +1 -1
  296. package/dist/esm/math/swept-collision.js +15 -1
  297. package/dist/esm/math/swept-collision.js.map +1 -1
  298. package/dist/esm/math/triangulate.d.ts.map +1 -1
  299. package/dist/esm/math/triangulate.js +9 -1
  300. package/dist/esm/math/triangulate.js.map +1 -1
  301. package/dist/esm/math/utils.d.ts +20 -0
  302. package/dist/esm/math/utils.d.ts.map +1 -1
  303. package/dist/esm/math/utils.js +18 -15
  304. package/dist/esm/math/utils.js.map +1 -1
  305. package/dist/esm/renderer-sdk.d.ts +2 -0
  306. package/dist/esm/renderer-sdk.d.ts.map +1 -1
  307. package/dist/esm/{rendering.js → renderer-sdk.js} +1 -1
  308. package/dist/esm/renderer-sdk.js.map +1 -0
  309. package/dist/esm/rendering/CallbackRenderPass.js +1 -1
  310. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  311. package/dist/esm/rendering/Container.d.ts +3 -0
  312. package/dist/esm/rendering/Container.d.ts.map +1 -1
  313. package/dist/esm/rendering/Container.js +28 -5
  314. package/dist/esm/rendering/Container.js.map +1 -1
  315. package/dist/esm/rendering/Drawable.d.ts +24 -0
  316. package/dist/esm/rendering/Drawable.d.ts.map +1 -1
  317. package/dist/esm/rendering/Drawable.js +54 -0
  318. package/dist/esm/rendering/Drawable.js.map +1 -1
  319. package/dist/esm/rendering/GpuResourceAccountant.d.ts +65 -0
  320. package/dist/esm/rendering/GpuResourceAccountant.d.ts.map +1 -0
  321. package/dist/esm/rendering/GpuResourceAccountant.js +130 -0
  322. package/dist/esm/rendering/GpuResourceAccountant.js.map +1 -0
  323. package/dist/esm/rendering/RenderBackend.d.ts +15 -1
  324. package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
  325. package/dist/esm/rendering/RenderBatch.d.ts +55 -0
  326. package/dist/esm/rendering/RenderBatch.d.ts.map +1 -0
  327. package/dist/esm/rendering/RenderBatch.js +107 -0
  328. package/dist/esm/rendering/RenderBatch.js.map +1 -0
  329. package/dist/esm/rendering/RenderNode.d.ts +50 -10
  330. package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
  331. package/dist/esm/rendering/RenderNode.js +113 -20
  332. package/dist/esm/rendering/RenderNode.js.map +1 -1
  333. package/dist/esm/rendering/RenderNodePass.js +2 -2
  334. package/dist/esm/rendering/RenderNodePass.js.map +1 -1
  335. package/dist/esm/rendering/RenderStats.d.ts +39 -0
  336. package/dist/esm/rendering/RenderStats.d.ts.map +1 -1
  337. package/dist/esm/rendering/RenderStats.js +14 -0
  338. package/dist/esm/rendering/RenderStats.js.map +1 -1
  339. package/dist/esm/rendering/RendererRegistry.d.ts.map +1 -1
  340. package/dist/esm/rendering/RendererRegistry.js +20 -23
  341. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  342. package/dist/esm/rendering/RenderingContext.d.ts +88 -4
  343. package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
  344. package/dist/esm/rendering/RenderingContext.js +107 -5
  345. package/dist/esm/rendering/RenderingContext.js.map +1 -1
  346. package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
  347. package/dist/esm/rendering/TransformBuffer.js +2 -0
  348. package/dist/esm/rendering/TransformBuffer.js.map +1 -1
  349. package/dist/esm/rendering/View.d.ts +47 -15
  350. package/dist/esm/rendering/View.d.ts.map +1 -1
  351. package/dist/esm/rendering/View.js +44 -27
  352. package/dist/esm/rendering/View.js.map +1 -1
  353. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
  354. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +3 -1
  355. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  356. package/dist/esm/rendering/geometry/Geometry.d.ts.map +1 -1
  357. package/dist/esm/rendering/geometry/Geometry.js +4 -2
  358. package/dist/esm/rendering/geometry/Geometry.js.map +1 -1
  359. package/dist/esm/rendering/gradient/Gradient.d.ts.map +1 -1
  360. package/dist/esm/rendering/gradient/Gradient.js +7 -2
  361. package/dist/esm/rendering/gradient/Gradient.js.map +1 -1
  362. package/dist/esm/rendering/material/MaterialKey.d.ts.map +1 -1
  363. package/dist/esm/rendering/material/MaterialKey.js +2 -0
  364. package/dist/esm/rendering/material/MaterialKey.js.map +1 -1
  365. package/dist/esm/rendering/material/ShaderSource.js +6 -0
  366. package/dist/esm/rendering/material/ShaderSource.js.map +1 -1
  367. package/dist/esm/rendering/mesh/ImmediateMesh.d.ts +48 -0
  368. package/dist/esm/rendering/mesh/ImmediateMesh.d.ts.map +1 -0
  369. package/dist/esm/rendering/mesh/ImmediateMesh.js +85 -0
  370. package/dist/esm/rendering/mesh/ImmediateMesh.js.map +1 -0
  371. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -6
  372. package/dist/esm/rendering/mesh/Mesh.d.ts.map +1 -1
  373. package/dist/esm/rendering/mesh/Mesh.js +40 -13
  374. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  375. package/dist/esm/rendering/pixelSnap.d.ts.map +1 -1
  376. package/dist/esm/rendering/pixelSnap.js +1 -0
  377. package/dist/esm/rendering/pixelSnap.js.map +1 -1
  378. package/dist/esm/rendering/plan/RenderCommand.d.ts +31 -9
  379. package/dist/esm/rendering/plan/RenderCommand.d.ts.map +1 -1
  380. package/dist/esm/rendering/plan/RenderCommand.js +23 -21
  381. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -1
  382. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
  383. package/dist/esm/rendering/plan/RenderEffectExecutor.js +1 -0
  384. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
  385. package/dist/esm/rendering/plan/RenderInstruction.d.ts +7 -37
  386. package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
  387. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +17 -2
  388. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
  389. package/dist/esm/rendering/plan/RenderPlanBuilder.js +132 -46
  390. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
  391. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts.map +1 -1
  392. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +31 -4
  393. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -1
  394. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts.map +1 -1
  395. package/dist/esm/rendering/plan/RenderPlanPlayer.js +54 -17
  396. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -1
  397. package/dist/esm/rendering/plan/RenderScope.d.ts +16 -10
  398. package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
  399. package/dist/esm/rendering/primitives/Graphics.d.ts +6 -0
  400. package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
  401. package/dist/esm/rendering/primitives/Graphics.js +17 -1
  402. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  403. package/dist/esm/rendering/{index.d.ts → public.d.ts} +5 -35
  404. package/dist/esm/rendering/public.d.ts.map +1 -0
  405. package/dist/esm/rendering/shader/ShaderAttribute.d.ts.map +1 -1
  406. package/dist/esm/rendering/shader/ShaderAttribute.js +2 -0
  407. package/dist/esm/rendering/shader/ShaderAttribute.js.map +1 -1
  408. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +11 -0
  409. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
  410. package/dist/esm/rendering/sprite/AnimatedSprite.js +24 -2
  411. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  412. package/dist/esm/rendering/sprite/NineSliceSprite.d.ts.map +1 -1
  413. package/dist/esm/rendering/sprite/NineSliceSprite.js +10 -11
  414. package/dist/esm/rendering/sprite/NineSliceSprite.js.map +1 -1
  415. package/dist/esm/rendering/sprite/RepeatingSprite.d.ts.map +1 -1
  416. package/dist/esm/rendering/sprite/RepeatingSprite.js +1 -3
  417. package/dist/esm/rendering/sprite/RepeatingSprite.js.map +1 -1
  418. package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
  419. package/dist/esm/rendering/sprite/Sprite.js +30 -3
  420. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  421. package/dist/esm/rendering/sprite/nineSlice.d.ts.map +1 -1
  422. package/dist/esm/rendering/sprite/nineSlice.js +12 -18
  423. package/dist/esm/rendering/sprite/nineSlice.js.map +1 -1
  424. package/dist/esm/rendering/sprite/repeatingSpritePlan.d.ts.map +1 -1
  425. package/dist/esm/rendering/sprite/repeatingSpritePlan.js +2 -2
  426. package/dist/esm/rendering/sprite/repeatingSpritePlan.js.map +1 -1
  427. package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
  428. package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
  429. package/dist/esm/rendering/text/BitmapText.js +4 -0
  430. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  431. package/dist/esm/rendering/text/GlyphAtlas.d.ts.map +1 -1
  432. package/dist/esm/rendering/text/GlyphAtlas.js +2 -1
  433. package/dist/esm/rendering/text/GlyphAtlas.js.map +1 -1
  434. package/dist/esm/rendering/text/GlyphAtlasPool.d.ts +8 -1
  435. package/dist/esm/rendering/text/GlyphAtlasPool.d.ts.map +1 -1
  436. package/dist/esm/rendering/text/GlyphAtlasPool.js +9 -12
  437. package/dist/esm/rendering/text/GlyphAtlasPool.js.map +1 -1
  438. package/dist/esm/rendering/text/GlyphSdf.d.ts.map +1 -1
  439. package/dist/esm/rendering/text/GlyphSdf.js +5 -1
  440. package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
  441. package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
  442. package/dist/esm/rendering/text/HTMLText.js +1 -0
  443. package/dist/esm/rendering/text/HTMLText.js.map +1 -1
  444. package/dist/esm/rendering/text/Text.d.ts +17 -6
  445. package/dist/esm/rendering/text/Text.d.ts.map +1 -1
  446. package/dist/esm/rendering/text/Text.js +7 -12
  447. package/dist/esm/rendering/text/Text.js.map +1 -1
  448. package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
  449. package/dist/esm/rendering/text/TextLayout.js +4 -18
  450. package/dist/esm/rendering/text/TextLayout.js.map +1 -1
  451. package/dist/esm/rendering/texture/DataTexture.js +2 -2
  452. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  453. package/dist/esm/rendering/texture/Texture.d.ts +6 -0
  454. package/dist/esm/rendering/texture/Texture.d.ts.map +1 -1
  455. package/dist/esm/rendering/texture/Texture.js +8 -0
  456. package/dist/esm/rendering/texture/Texture.js.map +1 -1
  457. package/dist/esm/rendering/texture/TextureRegion.d.ts.map +1 -1
  458. package/dist/esm/rendering/texture/TextureRegion.js.map +1 -1
  459. package/dist/esm/rendering/texture/repeat.d.ts.map +1 -1
  460. package/dist/esm/rendering/texture/repeat.js +2 -2
  461. package/dist/esm/rendering/texture/repeat.js.map +1 -1
  462. package/dist/esm/rendering/types.d.ts +11 -0
  463. package/dist/esm/rendering/types.d.ts.map +1 -1
  464. package/dist/esm/rendering/types.js +11 -0
  465. package/dist/esm/rendering/types.js.map +1 -1
  466. package/dist/esm/rendering/video/Video.d.ts +7 -3
  467. package/dist/esm/rendering/video/Video.d.ts.map +1 -1
  468. package/dist/esm/rendering/video/Video.js +7 -3
  469. package/dist/esm/rendering/video/Video.js.map +1 -1
  470. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts.map +1 -1
  471. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +2 -2
  472. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  473. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +21 -2
  474. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
  475. package/dist/esm/rendering/webgl2/WebGl2Backend.js +106 -6
  476. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  477. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts.map +1 -1
  478. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +2 -2
  479. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -1
  480. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +17 -0
  481. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts.map +1 -1
  482. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +122 -38
  483. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  484. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.d.ts.map +1 -1
  485. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js +2 -1
  486. package/dist/esm/rendering/webgl2/WebGl2NineSliceSpriteRenderer.js.map +1 -1
  487. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts +16 -1
  488. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.d.ts.map +1 -1
  489. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js +32 -1
  490. package/dist/esm/rendering/webgl2/WebGl2RenderBuffer.js.map +1 -1
  491. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.d.ts.map +1 -1
  492. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js +15 -11
  493. package/dist/esm/rendering/webgl2/WebGl2RepeatingSpriteRenderer.js.map +1 -1
  494. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.d.ts.map +1 -1
  495. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js +14 -3
  496. package/dist/esm/rendering/webgl2/WebGl2ShaderBlock.js.map +1 -1
  497. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +3 -3
  498. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
  499. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.d.ts.map +1 -1
  500. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js +11 -2
  501. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -1
  502. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts.map +1 -1
  503. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +7 -2
  504. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  505. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts.map +1 -1
  506. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +3 -2
  507. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -1
  508. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
  509. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +10 -4
  510. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  511. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +18 -2
  512. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
  513. package/dist/esm/rendering/webgpu/WebGpuBackend.js +91 -10
  514. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  515. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
  516. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +3 -0
  517. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  518. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +13 -0
  519. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
  520. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +102 -24
  521. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  522. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
  523. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +6 -1
  524. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
  525. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
  526. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +19 -9
  527. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
  528. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
  529. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +8 -4
  530. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  531. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
  532. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +1 -0
  533. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
  534. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
  535. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +19 -7
  536. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  537. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +13 -2
  538. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
  539. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +22 -2
  540. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
  541. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js +1 -1
  542. package/dist/esm/rendering/webgpu/compute/WebGpuComputePipeline.js.map +1 -1
  543. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts +7 -0
  544. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.d.ts.map +1 -1
  545. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js +8 -0
  546. package/dist/esm/rendering/webgpu/compute/WebGpuStorageBuffer.js.map +1 -1
  547. package/dist/esm/resources/Asset.d.ts +1 -1
  548. package/dist/esm/resources/Asset.d.ts.map +1 -1
  549. package/dist/esm/resources/Asset.js +0 -2
  550. package/dist/esm/resources/Asset.js.map +1 -1
  551. package/dist/esm/resources/AssetContainer.d.ts +75 -0
  552. package/dist/esm/resources/AssetContainer.d.ts.map +1 -0
  553. package/dist/esm/resources/AssetContainer.js +100 -0
  554. package/dist/esm/resources/AssetContainer.js.map +1 -0
  555. package/dist/esm/resources/AssetDefinitions.d.ts +3 -3
  556. package/dist/esm/resources/AssetDefinitions.d.ts.map +1 -1
  557. package/dist/esm/resources/Assets.d.ts.map +1 -1
  558. package/dist/esm/resources/Assets.js +0 -1
  559. package/dist/esm/resources/Assets.js.map +1 -1
  560. package/dist/esm/resources/FactoryRegistry.d.ts.map +1 -1
  561. package/dist/esm/resources/FactoryRegistry.js +14 -23
  562. package/dist/esm/resources/FactoryRegistry.js.map +1 -1
  563. package/dist/esm/resources/IndexedDbDatabase.d.ts.map +1 -1
  564. package/dist/esm/resources/IndexedDbDatabase.js +8 -1
  565. package/dist/esm/resources/IndexedDbDatabase.js.map +1 -1
  566. package/dist/esm/resources/IndexedDbKeyValueStore.d.ts +37 -0
  567. package/dist/esm/resources/IndexedDbKeyValueStore.d.ts.map +1 -0
  568. package/dist/esm/resources/IndexedDbKeyValueStore.js +58 -0
  569. package/dist/esm/resources/IndexedDbKeyValueStore.js.map +1 -0
  570. package/dist/esm/resources/KeyValueStore.d.ts +31 -0
  571. package/dist/esm/resources/KeyValueStore.d.ts.map +1 -0
  572. package/dist/esm/resources/Loader.d.ts +42 -2
  573. package/dist/esm/resources/Loader.d.ts.map +1 -1
  574. package/dist/esm/resources/Loader.js +92 -7
  575. package/dist/esm/resources/Loader.js.map +1 -1
  576. package/dist/esm/resources/MemoryStore.d.ts +17 -0
  577. package/dist/esm/resources/MemoryStore.d.ts.map +1 -0
  578. package/dist/esm/resources/MemoryStore.js +30 -0
  579. package/dist/esm/resources/MemoryStore.js.map +1 -0
  580. package/dist/esm/resources/WebStorageStore.d.ts +40 -0
  581. package/dist/esm/resources/WebStorageStore.d.ts.map +1 -0
  582. package/dist/esm/resources/WebStorageStore.js +84 -0
  583. package/dist/esm/resources/WebStorageStore.js.map +1 -0
  584. package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
  585. package/dist/esm/resources/coreAssetBindings.js +16 -5
  586. package/dist/esm/resources/coreAssetBindings.js.map +1 -1
  587. package/dist/esm/resources/factories/BmFontFactory.js +4 -4
  588. package/dist/esm/resources/factories/BmFontFactory.js.map +1 -1
  589. package/dist/esm/resources/factories/MusicFactory.d.ts +9 -9
  590. package/dist/esm/resources/factories/MusicFactory.d.ts.map +1 -1
  591. package/dist/esm/resources/factories/MusicFactory.js +7 -7
  592. package/dist/esm/resources/factories/MusicFactory.js.map +1 -1
  593. package/dist/esm/resources/factories/SoundFactory.js +2 -2
  594. package/dist/esm/resources/factories/SoundFactory.js.map +1 -1
  595. package/dist/esm/resources/factories/SubtitleFactory.d.ts +11 -1
  596. package/dist/esm/resources/factories/SubtitleFactory.d.ts.map +1 -1
  597. package/dist/esm/resources/factories/SubtitleFactory.js +13 -9
  598. package/dist/esm/resources/factories/SubtitleFactory.js.map +1 -1
  599. package/dist/esm/resources/index.d.ts +51 -34
  600. package/dist/esm/resources/index.d.ts.map +1 -1
  601. package/dist/esm/resources/utils.js +4 -4
  602. package/dist/esm/resources/utils.js.map +1 -1
  603. package/dist/esm/ui/Button.d.ts +54 -0
  604. package/dist/esm/ui/Button.d.ts.map +1 -0
  605. package/dist/esm/ui/Button.js +139 -0
  606. package/dist/esm/ui/Button.js.map +1 -0
  607. package/dist/esm/ui/Label.d.ts +17 -0
  608. package/dist/esm/ui/Label.d.ts.map +1 -0
  609. package/dist/esm/ui/Label.js +37 -0
  610. package/dist/esm/ui/Label.js.map +1 -0
  611. package/dist/esm/ui/Panel.d.ts +38 -0
  612. package/dist/esm/ui/Panel.d.ts.map +1 -0
  613. package/dist/esm/ui/Panel.js +61 -0
  614. package/dist/esm/ui/Panel.js.map +1 -0
  615. package/dist/esm/ui/ProgressBar.d.ts +37 -0
  616. package/dist/esm/ui/ProgressBar.d.ts.map +1 -0
  617. package/dist/esm/ui/ProgressBar.js +76 -0
  618. package/dist/esm/ui/ProgressBar.js.map +1 -0
  619. package/dist/esm/ui/Stack.d.ts +34 -0
  620. package/dist/esm/ui/Stack.d.ts.map +1 -0
  621. package/dist/esm/ui/Stack.js +69 -0
  622. package/dist/esm/ui/Stack.js.map +1 -0
  623. package/dist/esm/ui/UIRoot.d.ts +31 -0
  624. package/dist/esm/ui/UIRoot.d.ts.map +1 -0
  625. package/dist/esm/ui/UIRoot.js +49 -0
  626. package/dist/esm/ui/UIRoot.js.map +1 -0
  627. package/dist/esm/ui/Widget.d.ts +45 -0
  628. package/dist/esm/ui/Widget.d.ts.map +1 -0
  629. package/dist/esm/ui/Widget.js +113 -0
  630. package/dist/esm/ui/Widget.js.map +1 -0
  631. package/dist/esm/ui/index.d.ts +13 -0
  632. package/dist/esm/ui/index.d.ts.map +1 -0
  633. package/dist/exo.debug.esm.js +1 -948
  634. package/dist/exo.debug.esm.js.map +1 -1
  635. package/dist/exo.esm.js +1 -40945
  636. package/dist/exo.esm.js.map +1 -1
  637. package/package.json +24 -13
  638. package/dist/esm/audio/AbstractMedia.d.ts +0 -75
  639. package/dist/esm/audio/AbstractMedia.d.ts.map +0 -1
  640. package/dist/esm/audio/AbstractMedia.js +0 -179
  641. package/dist/esm/audio/AbstractMedia.js.map +0 -1
  642. package/dist/esm/audio/AudioAnalyser.d.ts +0 -128
  643. package/dist/esm/audio/AudioAnalyser.d.ts.map +0 -1
  644. package/dist/esm/audio/AudioAnalyser.js +0 -473
  645. package/dist/esm/audio/AudioAnalyser.js.map +0 -1
  646. package/dist/esm/audio/AudioFilter.d.ts +0 -17
  647. package/dist/esm/audio/AudioFilter.d.ts.map +0 -1
  648. package/dist/esm/audio/AudioFilter.js +0 -15
  649. package/dist/esm/audio/AudioFilter.js.map +0 -1
  650. package/dist/esm/audio/BeatDetector.d.ts +0 -207
  651. package/dist/esm/audio/BeatDetector.d.ts.map +0 -1
  652. package/dist/esm/audio/BeatDetector.js +0 -424
  653. package/dist/esm/audio/BeatDetector.js.map +0 -1
  654. package/dist/esm/audio/Media.d.ts +0 -37
  655. package/dist/esm/audio/Media.d.ts.map +0 -1
  656. package/dist/esm/audio/Music.d.ts +0 -42
  657. package/dist/esm/audio/Music.d.ts.map +0 -1
  658. package/dist/esm/audio/Music.js +0 -164
  659. package/dist/esm/audio/Music.js.map +0 -1
  660. package/dist/esm/audio/OscillatorSound.d.ts +0 -100
  661. package/dist/esm/audio/OscillatorSound.d.ts.map +0 -1
  662. package/dist/esm/audio/OscillatorSound.js +0 -346
  663. package/dist/esm/audio/OscillatorSound.js.map +0 -1
  664. package/dist/esm/audio/dsp/fft.d.ts +0 -23
  665. package/dist/esm/audio/dsp/fft.d.ts.map +0 -1
  666. package/dist/esm/audio/dsp/mel.d.ts +0 -44
  667. package/dist/esm/audio/dsp/mel.d.ts.map +0 -1
  668. package/dist/esm/audio/dsp/mel.js +0 -70
  669. package/dist/esm/audio/dsp/mel.js.map +0 -1
  670. package/dist/esm/audio/dsp/tempogram.d.ts +0 -52
  671. package/dist/esm/audio/dsp/tempogram.d.ts.map +0 -1
  672. package/dist/esm/audio/filters/ChorusFilter.d.ts +0 -54
  673. package/dist/esm/audio/filters/ChorusFilter.d.ts.map +0 -1
  674. package/dist/esm/audio/filters/ChorusFilter.js +0 -155
  675. package/dist/esm/audio/filters/ChorusFilter.js.map +0 -1
  676. package/dist/esm/audio/filters/CompressorFilter.d.ts +0 -54
  677. package/dist/esm/audio/filters/CompressorFilter.d.ts.map +0 -1
  678. package/dist/esm/audio/filters/CompressorFilter.js +0 -123
  679. package/dist/esm/audio/filters/CompressorFilter.js.map +0 -1
  680. package/dist/esm/audio/filters/DelayFilter.d.ts +0 -36
  681. package/dist/esm/audio/filters/DelayFilter.d.ts.map +0 -1
  682. package/dist/esm/audio/filters/DelayFilter.js +0 -114
  683. package/dist/esm/audio/filters/DelayFilter.js.map +0 -1
  684. package/dist/esm/audio/filters/DuckingFilter.d.ts +0 -45
  685. package/dist/esm/audio/filters/DuckingFilter.d.ts.map +0 -1
  686. package/dist/esm/audio/filters/DuckingFilter.js +0 -172
  687. package/dist/esm/audio/filters/DuckingFilter.js.map +0 -1
  688. package/dist/esm/audio/filters/EqualizerFilter.d.ts +0 -51
  689. package/dist/esm/audio/filters/EqualizerFilter.d.ts.map +0 -1
  690. package/dist/esm/audio/filters/EqualizerFilter.js +0 -138
  691. package/dist/esm/audio/filters/EqualizerFilter.js.map +0 -1
  692. package/dist/esm/audio/filters/GranularFilter.d.ts +0 -63
  693. package/dist/esm/audio/filters/GranularFilter.d.ts.map +0 -1
  694. package/dist/esm/audio/filters/GranularFilter.js +0 -107
  695. package/dist/esm/audio/filters/GranularFilter.js.map +0 -1
  696. package/dist/esm/audio/filters/PitchShiftFilter.d.ts +0 -45
  697. package/dist/esm/audio/filters/PitchShiftFilter.d.ts.map +0 -1
  698. package/dist/esm/audio/filters/PitchShiftFilter.js +0 -66
  699. package/dist/esm/audio/filters/PitchShiftFilter.js.map +0 -1
  700. package/dist/esm/audio/filters/ReverbFilter.d.ts +0 -38
  701. package/dist/esm/audio/filters/ReverbFilter.d.ts.map +0 -1
  702. package/dist/esm/audio/filters/ReverbFilter.js +0 -122
  703. package/dist/esm/audio/filters/ReverbFilter.js.map +0 -1
  704. package/dist/esm/audio/filters/VocoderFilter.d.ts +0 -50
  705. package/dist/esm/audio/filters/VocoderFilter.d.ts.map +0 -1
  706. package/dist/esm/audio/filters/VocoderFilter.js +0 -94
  707. package/dist/esm/audio/filters/VocoderFilter.js.map +0 -1
  708. package/dist/esm/audio/filters/WorkletFilter.d.ts.map +0 -1
  709. package/dist/esm/audio/filters/WorkletFilter.js.map +0 -1
  710. package/dist/esm/audio/worklets/beat-detector.worklet.d.ts +0 -2
  711. package/dist/esm/audio/worklets/beat-detector.worklet.d.ts.map +0 -1
  712. package/dist/esm/audio/worklets/beat-detector.worklet.js +0 -647
  713. package/dist/esm/audio/worklets/beat-detector.worklet.js.map +0 -1
  714. package/dist/esm/audio/worklets/granular.worklet.d.ts +0 -2
  715. package/dist/esm/audio/worklets/granular.worklet.d.ts.map +0 -1
  716. package/dist/esm/audio/worklets/granular.worklet.js +0 -89
  717. package/dist/esm/audio/worklets/granular.worklet.js.map +0 -1
  718. package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts +0 -2
  719. package/dist/esm/audio/worklets/pitch-shift.worklet.d.ts.map +0 -1
  720. package/dist/esm/audio/worklets/pitch-shift.worklet.js +0 -74
  721. package/dist/esm/audio/worklets/pitch-shift.worklet.js.map +0 -1
  722. package/dist/esm/audio/worklets/vocoder.worklet.d.ts +0 -2
  723. package/dist/esm/audio/worklets/vocoder.worklet.d.ts.map +0 -1
  724. package/dist/esm/audio/worklets/vocoder.worklet.js +0 -92
  725. package/dist/esm/audio/worklets/vocoder.worklet.js.map +0 -1
  726. package/dist/esm/input/internal/interactionManagerRegistry.d.ts +0 -10
  727. package/dist/esm/input/internal/interactionManagerRegistry.d.ts.map +0 -1
  728. package/dist/esm/input/internal/interactionManagerRegistry.js +0 -10
  729. package/dist/esm/input/internal/interactionManagerRegistry.js.map +0 -1
  730. package/dist/esm/rendering/index.d.ts.map +0 -1
  731. package/dist/esm/rendering/plan/RenderInstruction.js +0 -45
  732. package/dist/esm/rendering/plan/RenderInstruction.js.map +0 -1
  733. package/dist/esm/rendering.d.ts +0 -29
  734. package/dist/esm/rendering.d.ts.map +0 -1
  735. package/dist/esm/rendering.js.map +0 -1
  736. package/dist/esm/resources/JsonStore.d.ts +0 -19
  737. package/dist/esm/resources/JsonStore.d.ts.map +0 -1
  738. package/dist/esm/resources/JsonStore.js +0 -62
  739. package/dist/esm/resources/JsonStore.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ /** Options for {@link AudioInput.open} — forwarded to `getUserMedia` audio constraints. */
2
+ export interface AudioInputOptions {
3
+ /** Specific input device id (from `enumerateDevices`). */
4
+ deviceId?: string;
5
+ /** Enable browser echo cancellation. Default: browser default. */
6
+ echoCancellation?: boolean;
7
+ /** Enable browser noise suppression. */
8
+ noiseSuppression?: boolean;
9
+ /** Enable browser automatic gain control. */
10
+ autoGainControl?: boolean;
11
+ }
12
+ /**
13
+ * A live audio capture source — a microphone or WebRTC `MediaStream` obtained
14
+ * via `getUserMedia`. **Not a {@link Playable}**: you don't "play" a mic, you
15
+ * *open* it. Pass it to {@link AudioManager.open} to get an
16
+ * {@link InputVoice} for monitoring, analysis, or recording.
17
+ *
18
+ * ```ts
19
+ * const mic = await AudioInput.open({ echoCancellation: true });
20
+ * const input = app.audio.open(mic);
21
+ * new AudioAnalyser({ source: input }); // visualise / beat-detect (no feedback)
22
+ * const clip = await input.record(2000); // capture 2s -> Sound
23
+ * mic.close(); // release the device
24
+ * ```
25
+ */
26
+ export declare class AudioInput {
27
+ private readonly _stream;
28
+ private constructor();
29
+ /** The underlying `MediaStream`. */
30
+ get stream(): MediaStream;
31
+ /**
32
+ * Request microphone access and resolve with an `AudioInput`. Throws / rejects
33
+ * if the user denies permission or no input device is available.
34
+ */
35
+ static open(options?: AudioInputOptions): Promise<AudioInput>;
36
+ /** Stop every track in the stream, releasing the input device. */
37
+ close(): void;
38
+ }
39
+ //# sourceMappingURL=AudioInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioInput.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioInput.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IAEtC,OAAO;IAIP,oCAAoC;IACpC,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED;;;OAGG;WACiB,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAe9E,kEAAkE;IAC3D,KAAK,IAAI,IAAI;CAKrB"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A live audio capture source — a microphone or WebRTC `MediaStream` obtained
3
+ * via `getUserMedia`. **Not a {@link Playable}**: you don't "play" a mic, you
4
+ * *open* it. Pass it to {@link AudioManager.open} to get an
5
+ * {@link InputVoice} for monitoring, analysis, or recording.
6
+ *
7
+ * ```ts
8
+ * const mic = await AudioInput.open({ echoCancellation: true });
9
+ * const input = app.audio.open(mic);
10
+ * new AudioAnalyser({ source: input }); // visualise / beat-detect (no feedback)
11
+ * const clip = await input.record(2000); // capture 2s -> Sound
12
+ * mic.close(); // release the device
13
+ * ```
14
+ */
15
+ class AudioInput {
16
+ _stream;
17
+ constructor(stream) {
18
+ this._stream = stream;
19
+ }
20
+ /** The underlying `MediaStream`. */
21
+ get stream() {
22
+ return this._stream;
23
+ }
24
+ /**
25
+ * Request microphone access and resolve with an `AudioInput`. Throws / rejects
26
+ * if the user denies permission or no input device is available.
27
+ */
28
+ static async open(options = {}) {
29
+ if (typeof navigator === 'undefined' || !navigator.mediaDevices?.getUserMedia) {
30
+ throw new Error('AudioInput.open: getUserMedia is not available in this environment.');
31
+ }
32
+ const constraints = {};
33
+ if (options.deviceId !== undefined)
34
+ constraints.deviceId = options.deviceId;
35
+ if (options.echoCancellation !== undefined)
36
+ constraints.echoCancellation = options.echoCancellation;
37
+ if (options.noiseSuppression !== undefined)
38
+ constraints.noiseSuppression = options.noiseSuppression;
39
+ if (options.autoGainControl !== undefined)
40
+ constraints.autoGainControl = options.autoGainControl;
41
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: Object.keys(constraints).length > 0 ? constraints : true });
42
+ return new AudioInput(stream);
43
+ }
44
+ /** Stop every track in the stream, releasing the input device. */
45
+ close() {
46
+ for (const track of this._stream.getTracks()) {
47
+ track.stop();
48
+ }
49
+ }
50
+ }
51
+
52
+ export { AudioInput };
53
+ //# sourceMappingURL=AudioInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioInput.js","sources":["../../../../src/audio/AudioInput.ts"],"sourcesContent":[null],"names":[],"mappings":"AAYA;;;;;;;;;;;;;AAaG;MACU,UAAU,CAAA;AACJ,IAAA,OAAO;AAExB,IAAA,WAAA,CAAoB,MAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACvB;;AAGA,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA;;;AAGG;AACI,IAAA,aAAa,IAAI,CAAC,UAA6B,EAAE,EAAA;AACtD,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE;AAC7E,YAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;QACxF;QAEA,MAAM,WAAW,GAA0B,EAAE;AAC7C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAC3E,QAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB;AACnG,QAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB;AACnG,QAAA,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;AAAE,YAAA,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe;AAEhG,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,EAAE,CAAC;AAC7H,QAAA,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC;IAC/B;;IAGO,KAAK,GAAA;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE;YAC5C,KAAK,CAAC,IAAI,EAAE;QACd;IACF;AACD;;;;"}
@@ -1,27 +1,40 @@
1
+ import { Signal } from '#core/Signal';
2
+ import type { System } from '#core/System';
3
+ import type { Time } from '#core/Time';
1
4
  import { AudioBus } from './AudioBus';
5
+ import type { AudioInput } from './AudioInput';
2
6
  import { AudioListener } from './AudioListener';
3
- import type { Sound } from './Sound';
7
+ import type { SpatialVoice } from './BaseVoice';
8
+ import { InputVoice } from './InputVoice';
9
+ import type { Playable, PlayOptions, Voice } from './Playable';
4
10
  /**
5
- * Module-level singleton that owns the engine-wide audio mix: three
6
- * pre-configured {@link AudioBus} instances (`master` ← `music` + `sound`),
7
- * a single shared {@link AudioListener} for spatial audio, and a registry
8
- * of any extra busses the user constructs.
11
+ * Per-{@link Application} owner of the audio mix: three pre-configured
12
+ * {@link AudioBus} instances (`master` ← `music` + `sound`), a single
13
+ * {@link AudioListener} for spatial audio, and a registry of any extra busses
14
+ * the user constructs.
9
15
  *
10
- * Access the singleton via {@link getAudioManager} (or `app.audio`). The
11
- * instance is constructed lazily on first access so client code that does
12
- * not need audio pays no startup cost.
13
- *
14
- * Drives the per-frame `_tick()` on the listener and every spatial sound;
15
- * propagates visibility-driven mute when {@link AudioManager.muteOnHidden}
16
- * is enabled.
16
+ * The `AudioContext` is shared process-wide, but each Application owns its own
17
+ * bus subtree, so multiple Applications mix independently. Access it via
18
+ * `app.audio`. Drives the per-frame `_tick()` on the listener and every spatial
19
+ * voice, and propagates visibility-driven mute when
20
+ * {@link AudioManager.muteOnHidden} is enabled.
17
21
  */
18
- export declare class AudioManager {
22
+ export declare class AudioManager implements System {
23
+ /** App-systems tick band — audio after interaction. @internal */
24
+ readonly order = 300;
19
25
  readonly master: AudioBus;
20
26
  readonly music: AudioBus;
21
27
  readonly sound: AudioBus;
22
28
  readonly listener: AudioListener;
29
+ /**
30
+ * Fires once when the AudioContext transitions to "running" — i.e. the first
31
+ * user gesture unlocks audio under the browser's autoplay policy. Check
32
+ * {@link AudioManager.locked} for the current state; sounds played while
33
+ * locked are deferred and start automatically on that gesture.
34
+ */
35
+ readonly onUnlock: Signal<[]>;
23
36
  private readonly _registered;
24
- private readonly _spatialSounds;
37
+ private readonly _spatial;
25
38
  private _muteOnHidden;
26
39
  constructor();
27
40
  /**
@@ -32,12 +45,51 @@ export declare class AudioManager {
32
45
  */
33
46
  get muteOnHidden(): boolean;
34
47
  set muteOnHidden(value: boolean);
35
- /** Called once per frame from Application.update(). */
36
- update(): void;
37
- /** Internal: called by Sound when it becomes spatial. */
38
- _registerSpatialSound(sound: Sound): void;
39
- /** Internal: called by Sound when it stops being spatial. */
40
- _unregisterSpatialSound(sound: Sound): void;
48
+ /**
49
+ * `true` while audio is blocked by the browser's autoplay policy — no user
50
+ * gesture has resumed the AudioContext yet. Voices played while locked are
51
+ * deferred (streams) or skipped (generators) until that gesture.
52
+ */
53
+ get locked(): boolean;
54
+ /**
55
+ * Play a {@link Playable} asset and return a {@link Voice} handle.
56
+ *
57
+ * Each call creates an independent playback instance. Call `play()` again
58
+ * to start another concurrent voice. The returned Voice lets you control
59
+ * this specific instance (`stop()`, `volume`, `fade()`, capabilities).
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const voice = app.audio.play(shootSfx);
64
+ * // Later:
65
+ * voice.stop();
66
+ * ```
67
+ *
68
+ * @param source - Any {@link Playable} asset (Sound, AudioStream, AudioGenerator).
69
+ * @param options - Per-play overrides (bus, volume, loop, playbackRate, detune, time, muted).
70
+ * @returns A {@link Voice} handle for the new instance.
71
+ */
72
+ play(source: Playable, options?: PlayOptions): Voice;
73
+ /**
74
+ * Open a live {@link AudioInput} (microphone / WebRTC stream) and return an
75
+ * {@link InputVoice}. The input is analysis-only by default (not audible) —
76
+ * tap it with an analyser, route it to a bus to monitor, or record it.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * const mic = await AudioInput.open();
81
+ * const input = app.audio.open(mic);
82
+ * input.analyse(analyser);
83
+ * ```
84
+ */
85
+ open(input: AudioInput): InputVoice;
86
+ /** Called once per frame from Application.update(). The frame delta is unused here (hence `_delta`); present for {@link System} contract compliance. */
87
+ update(_delta: Time): void;
88
+ /**
89
+ * Internal: register a spatial voice for per-frame position updates. Called by
90
+ * a {@link Voice} the first time it is spatialized (position set or follow).
91
+ */
92
+ _registerSpatial(voice: SpatialVoice): void;
41
93
  /** Internal: called by Application when visibility changes. */
42
94
  _applyVisibility(visible: boolean): void;
43
95
  /**
@@ -58,18 +110,4 @@ export declare class AudioManager {
58
110
  hasBus(name: string): boolean;
59
111
  destroy(): void;
60
112
  }
61
- /**
62
- * Lazy accessor for the singleton {@link AudioManager}. Constructs the
63
- * instance on first call, returns the same instance for every subsequent
64
- * call. Equivalent to `app.audio`.
65
- */
66
- export declare function getAudioManager(): AudioManager;
67
- /**
68
- * Dispose and clear the module-level audio singleton.
69
- *
70
- * Useful for deterministic teardown between independent engine lifecycles
71
- * (for example hot-reload flows, embedded runtimes, or test harnesses that
72
- * spin up multiple isolated apps in one process).
73
- */
74
- export declare function disposeAudioManager(): void;
75
113
  //# sourceMappingURL=AudioManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,SAAgB,MAAM,EAAE,QAAQ,CAAC;IACjC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,QAAQ,EAAE,aAAa,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;IACnD,OAAO,CAAC,aAAa,CAAS;;IAc9B;;;;;OAKG;IACH,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,OAAO,EAKrC;IAED,uDAAuD;IAChD,MAAM,IAAI,IAAI;IAOrB,yDAAyD;IAClD,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIhD,6DAA6D;IACtD,uBAAuB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlD,+DAA+D;IACxD,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/C;;;;OAIG;IACI,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQvC;;;;OAIG;IACI,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAczC,mEAAmE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQrC,yDAAyD;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,OAAO,IAAI,IAAI;CASvB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
1
+ {"version":3,"file":"AudioManager.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,MAAM;IACzC,iEAAiE;IACjE,SAAgB,KAAK,OAAO;IAC5B,SAAgB,MAAM,EAAE,QAAQ,CAAC;IACjC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,QAAQ,EAAE,aAAa,CAAC;IACxC;;;;;OAKG;IACH,SAAgB,QAAQ,aAAgB;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,aAAa,CAAS;;IAkB9B;;;;;OAKG;IACH,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,OAAO,EAKrC;IAED;;;;OAIG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,KAAK;IAI3D;;;;;;;;;;;OAWG;IACI,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAgB1C,wJAAwJ;IACjJ,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAYjC;;;OAGG;IACI,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIlD,+DAA+D;IACxD,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/C;;;;OAIG;IACI,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAQvC;;;;OAIG;IACI,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAczC,mEAAmE;IAC5D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQrC,yDAAyD;IAClD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,OAAO,IAAI,IAAI;CASvB"}
@@ -1,27 +1,37 @@
1
+ import { Signal } from '../core/Signal.js';
2
+ import { onAudioContextReady, isAudioContextReady, getAudioContext } from './audio-context.js';
1
3
  import { AudioBus } from './AudioBus.js';
2
4
  import { AudioListener } from './AudioListener.js';
5
+ import { InputVoice } from './InputVoice.js';
3
6
 
4
7
  /**
5
- * Module-level singleton that owns the engine-wide audio mix: three
6
- * pre-configured {@link AudioBus} instances (`master` ← `music` + `sound`),
7
- * a single shared {@link AudioListener} for spatial audio, and a registry
8
- * of any extra busses the user constructs.
8
+ * Per-{@link Application} owner of the audio mix: three pre-configured
9
+ * {@link AudioBus} instances (`master` ← `music` + `sound`), a single
10
+ * {@link AudioListener} for spatial audio, and a registry of any extra busses
11
+ * the user constructs.
9
12
  *
10
- * Access the singleton via {@link getAudioManager} (or `app.audio`). The
11
- * instance is constructed lazily on first access so client code that does
12
- * not need audio pays no startup cost.
13
- *
14
- * Drives the per-frame `_tick()` on the listener and every spatial sound;
15
- * propagates visibility-driven mute when {@link AudioManager.muteOnHidden}
16
- * is enabled.
13
+ * The `AudioContext` is shared process-wide, but each Application owns its own
14
+ * bus subtree, so multiple Applications mix independently. Access it via
15
+ * `app.audio`. Drives the per-frame `_tick()` on the listener and every spatial
16
+ * voice, and propagates visibility-driven mute when
17
+ * {@link AudioManager.muteOnHidden} is enabled.
17
18
  */
18
19
  class AudioManager {
20
+ /** App-systems tick band — audio after interaction. @internal */
21
+ order = 300;
19
22
  master;
20
23
  music;
21
24
  sound;
22
25
  listener;
26
+ /**
27
+ * Fires once when the AudioContext transitions to "running" — i.e. the first
28
+ * user gesture unlocks audio under the browser's autoplay policy. Check
29
+ * {@link AudioManager.locked} for the current state; sounds played while
30
+ * locked are deferred and start automatically on that gesture.
31
+ */
32
+ onUnlock = new Signal();
23
33
  _registered = new Map();
24
- _spatialSounds = new Set();
34
+ _spatial = new Set();
25
35
  _muteOnHidden = false;
26
36
  constructor() {
27
37
  this.master = new AudioBus('master', { parent: null });
@@ -32,6 +42,9 @@ class AudioManager {
32
42
  this._registered.set('master', this.master);
33
43
  this._registered.set('music', this.music);
34
44
  this._registered.set('sound', this.sound);
45
+ onAudioContextReady.add(() => {
46
+ this.onUnlock.dispatch();
47
+ });
35
48
  }
36
49
  /**
37
50
  * When `true`, the master bus is muted while `document.hidden` is true.
@@ -48,20 +61,79 @@ class AudioManager {
48
61
  // Application is responsible for calling _applyVisibility() when
49
62
  // visibility changes.
50
63
  }
51
- /** Called once per frame from Application.update(). */
52
- update() {
64
+ /**
65
+ * `true` while audio is blocked by the browser's autoplay policy — no user
66
+ * gesture has resumed the AudioContext yet. Voices played while locked are
67
+ * deferred (streams) or skipped (generators) until that gesture.
68
+ */
69
+ get locked() {
70
+ return !isAudioContextReady();
71
+ }
72
+ /**
73
+ * Play a {@link Playable} asset and return a {@link Voice} handle.
74
+ *
75
+ * Each call creates an independent playback instance. Call `play()` again
76
+ * to start another concurrent voice. The returned Voice lets you control
77
+ * this specific instance (`stop()`, `volume`, `fade()`, capabilities).
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const voice = app.audio.play(shootSfx);
82
+ * // Later:
83
+ * voice.stop();
84
+ * ```
85
+ *
86
+ * @param source - Any {@link Playable} asset (Sound, AudioStream, AudioGenerator).
87
+ * @param options - Per-play overrides (bus, volume, loop, playbackRate, detune, time, muted).
88
+ * @returns A {@link Voice} handle for the new instance.
89
+ */
90
+ play(source, options) {
91
+ return source._createVoice(this, options ?? {});
92
+ }
93
+ /**
94
+ * Open a live {@link AudioInput} (microphone / WebRTC stream) and return an
95
+ * {@link InputVoice}. The input is analysis-only by default (not audible) —
96
+ * tap it with an analyser, route it to a bus to monitor, or record it.
97
+ *
98
+ * @example
99
+ * ```ts
100
+ * const mic = await AudioInput.open();
101
+ * const input = app.audio.open(mic);
102
+ * input.analyse(analyser);
103
+ * ```
104
+ */
105
+ open(input) {
106
+ const audioContext = getAudioContext();
107
+ const sourceNode = audioContext.createMediaStreamSource(input.stream);
108
+ const output = audioContext.createGain();
109
+ return new InputVoice({
110
+ audioContext,
111
+ output,
112
+ bus: this.sound,
113
+ manager: this,
114
+ volume: 1,
115
+ sourceNode,
116
+ stream: input.stream,
117
+ });
118
+ }
119
+ /** Called once per frame from Application.update(). The frame delta is unused here (hence `_delta`); present for {@link System} contract compliance. */
120
+ update(_delta) {
53
121
  this.listener._tick();
54
- for (const sound of this._spatialSounds) {
55
- sound._tickSpatial();
122
+ // Tick spatial voices and prune ended ones.
123
+ for (const voice of this._spatial) {
124
+ if (voice.ended) {
125
+ this._spatial.delete(voice);
126
+ continue;
127
+ }
128
+ voice._tickSpatial();
56
129
  }
57
130
  }
58
- /** Internal: called by Sound when it becomes spatial. */
59
- _registerSpatialSound(sound) {
60
- this._spatialSounds.add(sound);
61
- }
62
- /** Internal: called by Sound when it stops being spatial. */
63
- _unregisterSpatialSound(sound) {
64
- this._spatialSounds.delete(sound);
131
+ /**
132
+ * Internal: register a spatial voice for per-frame position updates. Called by
133
+ * a {@link Voice} the first time it is spatialized (position set or follow).
134
+ */
135
+ _registerSpatial(voice) {
136
+ this._spatial.add(voice);
65
137
  }
66
138
  /** Internal: called by Application when visibility changes. */
67
139
  _applyVisibility(visible) {
@@ -113,7 +185,7 @@ class AudioManager {
113
185
  }
114
186
  destroy() {
115
187
  this.listener.destroy();
116
- this._spatialSounds.clear();
188
+ this._spatial.clear();
117
189
  for (const bus of this._registered.values()) {
118
190
  // Note: destroying built-ins too — AudioManager is destroyed only when app shuts down.
119
191
  bus.destroy();
@@ -121,32 +193,6 @@ class AudioManager {
121
193
  this._registered.clear();
122
194
  }
123
195
  }
124
- // Module-level singleton (lazy)
125
- let _manager = null;
126
- /**
127
- * Lazy accessor for the singleton {@link AudioManager}. Constructs the
128
- * instance on first call, returns the same instance for every subsequent
129
- * call. Equivalent to `app.audio`.
130
- */
131
- function getAudioManager() {
132
- if (_manager === null) {
133
- _manager = new AudioManager();
134
- }
135
- return _manager;
136
- }
137
- /**
138
- * Dispose and clear the module-level audio singleton.
139
- *
140
- * Useful for deterministic teardown between independent engine lifecycles
141
- * (for example hot-reload flows, embedded runtimes, or test harnesses that
142
- * spin up multiple isolated apps in one process).
143
- */
144
- function disposeAudioManager() {
145
- if (_manager) {
146
- _manager.destroy();
147
- _manager = null;
148
- }
149
- }
150
196
 
151
- export { AudioManager, disposeAudioManager, getAudioManager };
197
+ export { AudioManager };
152
198
  //# sourceMappingURL=AudioManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioManager.js","sources":["../../../../src/audio/AudioManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AudioManager.js","sources":["../../../../src/audio/AudioManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { PlaybackOptions } from '#core/types';
2
+ import type { AudioManager } from './AudioManager';
3
+ import type { Playable, PlayOptions, Voice } from './Playable';
4
+ /**
5
+ * Streaming long-form audio backed by an `HTMLAudioElement` — background
6
+ * tracks, voice-over, **and internet radio** (same mechanism, low CPU/RAM).
7
+ * Decoded lazily via the browser's media pipeline, so memory cost scales with
8
+ * the decode buffer rather than total duration.
9
+ *
10
+ * `AudioStream` is a **data descriptor**: it holds the media element and default
11
+ * playback parameters but does not play itself. Playback is driven by
12
+ * `AudioManager.play(stream, options)`, which returns an {@link AudioStreamVoice}
13
+ * for fine-grained control (pause/resume, seek, loop, rate, volume, spatial).
14
+ *
15
+ * Because an `HTMLAudioElement` has a single playhead, a stream has **one active
16
+ * voice at a time** — playing again stops the previous voice. Routes through the
17
+ * manager's `music` bus by default (override via {@link PlayOptions.bus}).
18
+ *
19
+ * Use {@link Sound} for short, frequently-triggered clips that benefit from
20
+ * pre-decoded `AudioBuffer` storage and pooled overlapping playback.
21
+ */
22
+ export declare class AudioStream implements Playable {
23
+ private readonly _audioElement;
24
+ /** Default volume applied to new voices. Range [0, 1]. */
25
+ volume: number;
26
+ /** Default loop flag applied to new voices. */
27
+ loop: boolean;
28
+ /** Default playback rate applied to new voices. */
29
+ playbackRate: number;
30
+ /** Default muted flag (starts a voice at volume 0). */
31
+ muted: boolean;
32
+ private _sourceNode;
33
+ private _activeVoice;
34
+ constructor(audioElement: HTMLAudioElement, options?: Partial<PlaybackOptions>);
35
+ /** The backing `HTMLAudioElement`. */
36
+ get audioElement(): HTMLMediaElement;
37
+ /** Total media duration in seconds (`NaN` until metadata has loaded). */
38
+ get duration(): number;
39
+ /**
40
+ * Implements {@link Playable}. Called by {@link AudioManager.play}.
41
+ *
42
+ * Stops any previously active voice (a stream has a single playhead), then
43
+ * starts a fresh {@link AudioStreamVoice}.
44
+ */
45
+ _createVoice(manager: AudioManager, options: PlayOptions): Voice;
46
+ /** Stop the active voice and release the media graph. */
47
+ destroy(): void;
48
+ }
49
+ //# sourceMappingURL=AudioStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStream.d.ts","sourceRoot":"","sources":["../../../src/audio/AudioStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IAEjD,0DAA0D;IACnD,MAAM,EAAE,MAAM,CAAC;IACtB,+CAA+C;IACxC,IAAI,EAAE,OAAO,CAAC;IACrB,mDAAmD;IAC5C,YAAY,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IAChD,KAAK,EAAE,OAAO,CAAC;IAEtB,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,YAAY,CAAiC;gBAElC,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAYrF,sCAAsC;IACtC,IAAW,YAAY,IAAI,gBAAgB,CAE1C;IAED,yEAAyE;IACzE,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;;;OAKG;IACI,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK;IAyCvE,yDAAyD;IAClD,OAAO,IAAI,IAAI;CAUvB"}
@@ -0,0 +1,109 @@
1
+ import { clamp } from '../math/utils.js';
2
+ import { getAudioContext } from './audio-context.js';
3
+ import { AudioStreamVoice } from './AudioStreamVoice.js';
4
+
5
+ /**
6
+ * Streaming long-form audio backed by an `HTMLAudioElement` — background
7
+ * tracks, voice-over, **and internet radio** (same mechanism, low CPU/RAM).
8
+ * Decoded lazily via the browser's media pipeline, so memory cost scales with
9
+ * the decode buffer rather than total duration.
10
+ *
11
+ * `AudioStream` is a **data descriptor**: it holds the media element and default
12
+ * playback parameters but does not play itself. Playback is driven by
13
+ * `AudioManager.play(stream, options)`, which returns an {@link AudioStreamVoice}
14
+ * for fine-grained control (pause/resume, seek, loop, rate, volume, spatial).
15
+ *
16
+ * Because an `HTMLAudioElement` has a single playhead, a stream has **one active
17
+ * voice at a time** — playing again stops the previous voice. Routes through the
18
+ * manager's `music` bus by default (override via {@link PlayOptions.bus}).
19
+ *
20
+ * Use {@link Sound} for short, frequently-triggered clips that benefit from
21
+ * pre-decoded `AudioBuffer` storage and pooled overlapping playback.
22
+ */
23
+ class AudioStream {
24
+ _audioElement;
25
+ /** Default volume applied to new voices. Range [0, 1]. */
26
+ volume;
27
+ /** Default loop flag applied to new voices. */
28
+ loop;
29
+ /** Default playback rate applied to new voices. */
30
+ playbackRate;
31
+ /** Default muted flag (starts a voice at volume 0). */
32
+ muted;
33
+ _sourceNode = null;
34
+ _activeVoice = null;
35
+ constructor(audioElement, options) {
36
+ this._audioElement = audioElement;
37
+ this.volume = clamp(options?.volume ?? 1, 0, 1);
38
+ this.loop = options?.loop ?? false;
39
+ this.playbackRate = clamp(options?.playbackRate ?? 1, 0.1, 20);
40
+ this.muted = options?.muted ?? false;
41
+ if (options?.time !== undefined) {
42
+ this._audioElement.currentTime = Math.max(0, options.time);
43
+ }
44
+ }
45
+ /** The backing `HTMLAudioElement`. */
46
+ get audioElement() {
47
+ return this._audioElement;
48
+ }
49
+ /** Total media duration in seconds (`NaN` until metadata has loaded). */
50
+ get duration() {
51
+ return this._audioElement.duration;
52
+ }
53
+ /**
54
+ * Implements {@link Playable}. Called by {@link AudioManager.play}.
55
+ *
56
+ * Stops any previously active voice (a stream has a single playhead), then
57
+ * starts a fresh {@link AudioStreamVoice}.
58
+ */
59
+ _createVoice(manager, options) {
60
+ const bus = options.bus ?? manager.music;
61
+ const audioContext = getAudioContext();
62
+ if (this._activeVoice !== null && !this._activeVoice.ended) {
63
+ this._activeVoice.stop();
64
+ }
65
+ // The MediaElementAudioSourceNode is 1:1 with the element — create it once.
66
+ if (this._sourceNode === null) {
67
+ this._sourceNode = audioContext.createMediaElementSource(this._audioElement);
68
+ }
69
+ else {
70
+ this._sourceNode.disconnect();
71
+ }
72
+ const output = audioContext.createGain();
73
+ const loop = options.loop ?? this.loop;
74
+ const playbackRate = clamp(options.playbackRate ?? this.playbackRate, 0.1, 20);
75
+ const volume = clamp(options.muted ? 0 : (options.volume ?? (this.muted ? 0 : this.volume)), 0, 1);
76
+ const voice = new AudioStreamVoice({
77
+ audioContext,
78
+ output,
79
+ bus,
80
+ manager,
81
+ volume,
82
+ element: this._audioElement,
83
+ sourceNode: this._sourceNode,
84
+ loop,
85
+ playbackRate,
86
+ ...(options.time !== undefined && { startTime: options.time }),
87
+ });
88
+ this._activeVoice = voice;
89
+ voice.onEnd.add(() => {
90
+ if (this._activeVoice === voice)
91
+ this._activeVoice = null;
92
+ });
93
+ return voice;
94
+ }
95
+ /** Stop the active voice and release the media graph. */
96
+ destroy() {
97
+ if (this._activeVoice !== null) {
98
+ this._activeVoice.stop();
99
+ this._activeVoice = null;
100
+ }
101
+ if (this._sourceNode !== null) {
102
+ this._sourceNode.disconnect();
103
+ this._sourceNode = null;
104
+ }
105
+ }
106
+ }
107
+
108
+ export { AudioStream };
109
+ //# sourceMappingURL=AudioStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStream.js","sources":["../../../../src/audio/AudioStream.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}