@needle-tools/engine 5.1.0-canary.e9062c0 → 5.1.0-canary.f57972c

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 (322) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/SKILL.md +4 -1
  3. package/components.needle.json +1 -1
  4. package/dist/{needle-engine.bundle-CDKcuALa.js → needle-engine.bundle-CAIG39cL.js} +13605 -12680
  5. package/dist/needle-engine.bundle-CFh_isu6.umd.cjs +1734 -0
  6. package/dist/needle-engine.bundle-CtadUKoi.min.js +1734 -0
  7. package/dist/needle-engine.d.ts +1579 -394
  8. package/dist/needle-engine.js +542 -538
  9. package/dist/needle-engine.min.js +1 -1
  10. package/dist/needle-engine.umd.cjs +1 -1
  11. package/dist/three.js +1 -0
  12. package/dist/three.min.js +21 -21
  13. package/dist/three.umd.cjs +16 -16
  14. package/lib/engine/api.d.ts +8 -1
  15. package/lib/engine/api.js +7 -1
  16. package/lib/engine/api.js.map +1 -1
  17. package/lib/engine/codegen/register_types.js +10 -18
  18. package/lib/engine/codegen/register_types.js.map +1 -1
  19. package/lib/engine/debug/debug_spatial_console.d.ts +2 -0
  20. package/lib/engine/debug/debug_spatial_console.js +10 -7
  21. package/lib/engine/debug/debug_spatial_console.js.map +1 -1
  22. package/lib/engine/engine_addressables.d.ts +2 -0
  23. package/lib/engine/engine_addressables.js +6 -3
  24. package/lib/engine/engine_addressables.js.map +1 -1
  25. package/lib/engine/engine_audio.d.ts +68 -0
  26. package/lib/engine/engine_audio.js +172 -0
  27. package/lib/engine/engine_audio.js.map +1 -1
  28. package/lib/engine/engine_camera.fit.js +16 -4
  29. package/lib/engine/engine_camera.fit.js.map +1 -1
  30. package/lib/engine/engine_components.js +1 -1
  31. package/lib/engine/engine_components.js.map +1 -1
  32. package/lib/engine/engine_context.d.ts +37 -27
  33. package/lib/engine/engine_context.js +51 -31
  34. package/lib/engine/engine_context.js.map +1 -1
  35. package/lib/engine/engine_context_eventbus.d.ts +47 -0
  36. package/lib/engine/engine_context_eventbus.js +47 -0
  37. package/lib/engine/engine_context_eventbus.js.map +1 -0
  38. package/lib/engine/engine_disposable.d.ts +172 -0
  39. package/lib/engine/engine_disposable.js +136 -0
  40. package/lib/engine/engine_disposable.js.map +1 -0
  41. package/lib/engine/engine_gameobject.d.ts +1 -10
  42. package/lib/engine/engine_gameobject.js +22 -120
  43. package/lib/engine/engine_gameobject.js.map +1 -1
  44. package/lib/engine/engine_gltf_builtin_components.js +7 -69
  45. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  46. package/lib/engine/engine_init.js +14 -4
  47. package/lib/engine/engine_init.js.map +1 -1
  48. package/lib/engine/engine_input.d.ts +24 -5
  49. package/lib/engine/engine_input.js +3 -2
  50. package/lib/engine/engine_input.js.map +1 -1
  51. package/lib/engine/engine_instantiate_resolve.d.ts +42 -0
  52. package/lib/engine/engine_instantiate_resolve.js +372 -0
  53. package/lib/engine/engine_instantiate_resolve.js.map +1 -0
  54. package/lib/engine/engine_license.d.ts +7 -7
  55. package/lib/engine/engine_license.js +186 -58
  56. package/lib/engine/engine_license.js.map +1 -1
  57. package/lib/engine/engine_mainloop_utils.js +7 -4
  58. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  59. package/lib/engine/engine_networking.d.ts +51 -37
  60. package/lib/engine/engine_networking.js +132 -82
  61. package/lib/engine/engine_networking.js.map +1 -1
  62. package/lib/engine/engine_networking.transport.websocket.d.ts +15 -0
  63. package/lib/engine/engine_networking.transport.websocket.js +38 -0
  64. package/lib/engine/engine_networking.transport.websocket.js.map +1 -0
  65. package/lib/engine/engine_networking_blob.js +4 -4
  66. package/lib/engine/engine_networking_blob.js.map +1 -1
  67. package/lib/engine/engine_networking_instantiate.js +2 -2
  68. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  69. package/lib/engine/engine_networking_types.d.ts +39 -1
  70. package/lib/engine/engine_networking_types.js +7 -0
  71. package/lib/engine/engine_networking_types.js.map +1 -1
  72. package/lib/engine/engine_physics_rapier.d.ts +21 -3
  73. package/lib/engine/engine_physics_rapier.js +94 -25
  74. package/lib/engine/engine_physics_rapier.js.map +1 -1
  75. package/lib/engine/engine_scenedata.d.ts +5 -7
  76. package/lib/engine/engine_scenedata.js +16 -13
  77. package/lib/engine/engine_scenedata.js.map +1 -1
  78. package/lib/engine/engine_serialization_builtin_serializer.d.ts +10 -16
  79. package/lib/engine/engine_serialization_builtin_serializer.js +56 -46
  80. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  81. package/lib/engine/engine_serialization_core.d.ts +1 -0
  82. package/lib/engine/engine_serialization_core.js +7 -0
  83. package/lib/engine/engine_serialization_core.js.map +1 -1
  84. package/lib/engine/engine_types.d.ts +29 -11
  85. package/lib/engine/engine_types.js +1 -1
  86. package/lib/engine/engine_types.js.map +1 -1
  87. package/lib/engine/engine_util_decorator.js +7 -2
  88. package/lib/engine/engine_util_decorator.js.map +1 -1
  89. package/lib/engine/engine_utils.d.ts +1 -1
  90. package/lib/engine/engine_utils.js +19 -5
  91. package/lib/engine/engine_utils.js.map +1 -1
  92. package/lib/engine/engine_utils_qrcode.js +2 -2
  93. package/lib/engine/engine_utils_qrcode.js.map +1 -1
  94. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
  95. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js.map +1 -1
  96. package/lib/engine/webcomponents/jsx.d.ts +9 -2
  97. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -2
  98. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  99. package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +1 -1
  100. package/lib/engine/webcomponents/needle menu/needle-menu.js +6 -6
  101. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  102. package/lib/engine/webcomponents/needle-engine.d.ts +10 -4
  103. package/lib/engine/webcomponents/needle-engine.js +3 -3
  104. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  105. package/lib/engine/webcomponents/needle-engine.loading.js +2 -2
  106. package/lib/engine/webcomponents/needle-engine.loading.js.map +1 -1
  107. package/lib/engine/xr/NeedleXRSession.d.ts +3 -2
  108. package/lib/engine/xr/NeedleXRSession.js +50 -14
  109. package/lib/engine/xr/NeedleXRSession.js.map +1 -1
  110. package/lib/engine/xr/TempXRContext.js +2 -2
  111. package/lib/engine/xr/TempXRContext.js.map +1 -1
  112. package/lib/engine/xr/events.d.ts +1 -1
  113. package/lib/engine/xr/events.js.map +1 -1
  114. package/lib/engine-components/Animation.js +17 -16
  115. package/lib/engine-components/Animation.js.map +1 -1
  116. package/lib/engine-components/AnimationBuilder.d.ts +158 -0
  117. package/lib/engine-components/AnimationBuilder.js +305 -0
  118. package/lib/engine-components/AnimationBuilder.js.map +1 -0
  119. package/lib/engine-components/Animator.d.ts +6 -0
  120. package/lib/engine-components/Animator.js +23 -13
  121. package/lib/engine-components/Animator.js.map +1 -1
  122. package/lib/engine-components/AnimatorController.builder.d.ts +191 -0
  123. package/lib/engine-components/AnimatorController.builder.js +263 -0
  124. package/lib/engine-components/AnimatorController.builder.js.map +1 -0
  125. package/lib/engine-components/AnimatorController.d.ts +4 -119
  126. package/lib/engine-components/AnimatorController.js +37 -233
  127. package/lib/engine-components/AnimatorController.js.map +1 -1
  128. package/lib/engine-components/AudioSource.d.ts +19 -3
  129. package/lib/engine-components/AudioSource.js +121 -68
  130. package/lib/engine-components/AudioSource.js.map +1 -1
  131. package/lib/engine-components/Collider.d.ts +18 -9
  132. package/lib/engine-components/Collider.js +61 -14
  133. package/lib/engine-components/Collider.js.map +1 -1
  134. package/lib/engine-components/Component.d.ts +72 -9
  135. package/lib/engine-components/Component.js +114 -10
  136. package/lib/engine-components/Component.js.map +1 -1
  137. package/lib/engine-components/ContactShadows.d.ts +1 -0
  138. package/lib/engine-components/ContactShadows.js +14 -1
  139. package/lib/engine-components/ContactShadows.js.map +1 -1
  140. package/lib/engine-components/DragControls.d.ts +7 -0
  141. package/lib/engine-components/DragControls.js +19 -7
  142. package/lib/engine-components/DragControls.js.map +1 -1
  143. package/lib/engine-components/DropListener.js +3 -0
  144. package/lib/engine-components/DropListener.js.map +1 -1
  145. package/lib/engine-components/EventList.d.ts +31 -9
  146. package/lib/engine-components/EventList.js +37 -76
  147. package/lib/engine-components/EventList.js.map +1 -1
  148. package/lib/engine-components/Joints.d.ts +4 -2
  149. package/lib/engine-components/Joints.js +19 -3
  150. package/lib/engine-components/Joints.js.map +1 -1
  151. package/lib/engine-components/Light.js +13 -3
  152. package/lib/engine-components/Light.js.map +1 -1
  153. package/lib/engine-components/Networking.d.ts +1 -1
  154. package/lib/engine-components/Networking.js +1 -1
  155. package/lib/engine-components/OrbitControls.d.ts +0 -2
  156. package/lib/engine-components/OrbitControls.js +30 -12
  157. package/lib/engine-components/OrbitControls.js.map +1 -1
  158. package/lib/engine-components/ReflectionProbe.js +2 -0
  159. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  160. package/lib/engine-components/RigidBody.d.ts +12 -4
  161. package/lib/engine-components/RigidBody.js +18 -4
  162. package/lib/engine-components/RigidBody.js.map +1 -1
  163. package/lib/engine-components/SceneSwitcher.js +3 -0
  164. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  165. package/lib/engine-components/SeeThrough.js +2 -2
  166. package/lib/engine-components/SeeThrough.js.map +1 -1
  167. package/lib/engine-components/api.d.ts +2 -1
  168. package/lib/engine-components/api.js +2 -1
  169. package/lib/engine-components/api.js.map +1 -1
  170. package/lib/engine-components/codegen/components.d.ts +7 -13
  171. package/lib/engine-components/codegen/components.js +7 -13
  172. package/lib/engine-components/codegen/components.js.map +1 -1
  173. package/lib/engine-components/export/usdz/USDZExporter.js +4 -4
  174. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  175. package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
  176. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +2 -0
  177. package/lib/engine-components/postprocessing/VolumeParameter.js +4 -1
  178. package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -1
  179. package/lib/engine-components/timeline/PlayableDirector.d.ts +21 -11
  180. package/lib/engine-components/timeline/PlayableDirector.js +75 -67
  181. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  182. package/lib/engine-components/timeline/SignalAsset.d.ts +3 -1
  183. package/lib/engine-components/timeline/SignalAsset.js +1 -0
  184. package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
  185. package/lib/engine-components/timeline/TimelineBuilder.d.ts +413 -0
  186. package/lib/engine-components/timeline/TimelineBuilder.js +506 -0
  187. package/lib/engine-components/timeline/TimelineBuilder.js.map +1 -0
  188. package/lib/engine-components/timeline/TimelineModels.d.ts +2 -1
  189. package/lib/engine-components/timeline/TimelineModels.js +3 -0
  190. package/lib/engine-components/timeline/TimelineModels.js.map +1 -1
  191. package/lib/engine-components/timeline/TimelineTracks.d.ts +37 -6
  192. package/lib/engine-components/timeline/TimelineTracks.js +92 -26
  193. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  194. package/lib/engine-components/timeline/index.d.ts +2 -1
  195. package/lib/engine-components/timeline/index.js +2 -0
  196. package/lib/engine-components/timeline/index.js.map +1 -1
  197. package/lib/engine-components/ui/Canvas.d.ts +1 -1
  198. package/lib/engine-components/ui/Canvas.js +2 -8
  199. package/lib/engine-components/ui/Canvas.js.map +1 -1
  200. package/lib/engine-components/ui/Text.d.ts +1 -0
  201. package/lib/engine-components/ui/Text.js +10 -7
  202. package/lib/engine-components/ui/Text.js.map +1 -1
  203. package/lib/engine-components/web/CursorFollow.d.ts +0 -1
  204. package/lib/engine-components/web/CursorFollow.js +21 -13
  205. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  206. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +62 -1
  207. package/lib/engine-components/webxr/WebXRImageTracking.js +59 -2
  208. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  209. package/package.json +2 -83
  210. package/plugins/common/cloud.js +6 -1
  211. package/plugins/common/license.js +31 -10
  212. package/plugins/common/worker.js +9 -4
  213. package/plugins/vite/asap.js +17 -8
  214. package/plugins/vite/dependencies.js +29 -10
  215. package/plugins/vite/dependency-watcher.js +2 -2
  216. package/plugins/vite/editor-connection.js +3 -3
  217. package/plugins/vite/license.js +42 -7
  218. package/plugins/vite/local-files-core.js +3 -3
  219. package/plugins/vite/local-files-utils.d.ts +3 -1
  220. package/plugins/vite/local-files-utils.js +29 -5
  221. package/plugins/vite/reload.js +19 -18
  222. package/plugins/vite/server.js +2 -1
  223. package/src/engine/api.ts +11 -1
  224. package/src/engine/codegen/register_types.ts +10 -18
  225. package/src/engine/debug/debug_spatial_console.ts +10 -7
  226. package/src/engine/engine_addressables.ts +6 -3
  227. package/src/engine/engine_audio.ts +184 -0
  228. package/src/engine/engine_camera.fit.ts +15 -4
  229. package/src/engine/engine_components.ts +1 -1
  230. package/src/engine/engine_context.ts +63 -39
  231. package/src/engine/engine_context_eventbus.ts +73 -0
  232. package/src/engine/engine_disposable.ts +214 -0
  233. package/src/engine/engine_gameobject.ts +54 -159
  234. package/src/engine/engine_gltf_builtin_components.ts +7 -76
  235. package/src/engine/engine_init.ts +14 -4
  236. package/src/engine/engine_input.ts +28 -7
  237. package/src/engine/engine_instantiate_resolve.ts +407 -0
  238. package/src/engine/engine_license.ts +202 -56
  239. package/src/engine/engine_mainloop_utils.ts +7 -4
  240. package/src/engine/engine_networking.transport.websocket.ts +45 -0
  241. package/src/engine/engine_networking.ts +161 -137
  242. package/src/engine/engine_networking_blob.ts +4 -4
  243. package/src/engine/engine_networking_instantiate.ts +2 -2
  244. package/src/engine/engine_networking_types.ts +41 -1
  245. package/src/engine/engine_physics_rapier.ts +102 -33
  246. package/src/engine/engine_scenedata.ts +16 -13
  247. package/src/engine/engine_serialization_builtin_serializer.ts +64 -52
  248. package/src/engine/engine_serialization_core.ts +9 -0
  249. package/src/engine/engine_types.ts +46 -27
  250. package/src/engine/engine_util_decorator.ts +7 -2
  251. package/src/engine/engine_utils.ts +16 -5
  252. package/src/engine/engine_utils_qrcode.ts +2 -2
  253. package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +1 -1
  254. package/src/engine/webcomponents/jsx.d.ts +9 -2
  255. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -2
  256. package/src/engine/webcomponents/needle menu/needle-menu.ts +6 -6
  257. package/src/engine/webcomponents/needle-engine.loading.ts +6 -6
  258. package/src/engine/webcomponents/needle-engine.ts +12 -6
  259. package/src/engine/xr/NeedleXRSession.ts +48 -13
  260. package/src/engine/xr/TempXRContext.ts +2 -2
  261. package/src/engine/xr/events.ts +1 -1
  262. package/src/engine-components/Animation.ts +19 -16
  263. package/src/engine-components/AnimationBuilder.ts +472 -0
  264. package/src/engine-components/Animator.ts +24 -12
  265. package/src/engine-components/AnimatorController.builder.ts +387 -0
  266. package/src/engine-components/AnimatorController.ts +24 -292
  267. package/src/engine-components/AudioSource.ts +130 -79
  268. package/src/engine-components/Collider.ts +66 -18
  269. package/src/engine-components/Component.ts +118 -20
  270. package/src/engine-components/ContactShadows.ts +15 -1
  271. package/src/engine-components/DragControls.ts +18 -11
  272. package/src/engine-components/DropListener.ts +3 -0
  273. package/src/engine-components/EventList.ts +45 -83
  274. package/src/engine-components/Joints.ts +20 -4
  275. package/src/engine-components/Light.ts +13 -4
  276. package/src/engine-components/Networking.ts +1 -1
  277. package/src/engine-components/OrbitControls.ts +34 -14
  278. package/src/engine-components/ReflectionProbe.ts +2 -0
  279. package/src/engine-components/RigidBody.ts +18 -4
  280. package/src/engine-components/SceneSwitcher.ts +3 -0
  281. package/src/engine-components/SeeThrough.ts +2 -2
  282. package/src/engine-components/api.ts +2 -1
  283. package/src/engine-components/codegen/components.ts +7 -13
  284. package/src/engine-components/export/usdz/USDZExporter.ts +4 -4
  285. package/src/engine-components/postprocessing/VolumeParameter.ts +4 -1
  286. package/src/engine-components/timeline/PlayableDirector.ts +83 -81
  287. package/src/engine-components/timeline/SignalAsset.ts +4 -1
  288. package/src/engine-components/timeline/TimelineBuilder.ts +824 -0
  289. package/src/engine-components/timeline/TimelineModels.ts +5 -1
  290. package/src/engine-components/timeline/TimelineTracks.ts +96 -27
  291. package/src/engine-components/timeline/index.ts +2 -1
  292. package/src/engine-components/ui/Canvas.ts +2 -8
  293. package/src/engine-components/ui/Text.ts +12 -8
  294. package/src/engine-components/web/CursorFollow.ts +21 -14
  295. package/src/engine-components/webxr/WebXRImageTracking.ts +79 -7
  296. package/dist/needle-engine.bundle--q_w7iXI.umd.cjs +0 -1732
  297. package/dist/needle-engine.bundle-w22UkaT_.min.js +0 -1732
  298. package/lib/engine-components/AvatarLoader.d.ts +0 -80
  299. package/lib/engine-components/AvatarLoader.js +0 -232
  300. package/lib/engine-components/AvatarLoader.js.map +0 -1
  301. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +0 -11
  302. package/lib/engine-components/avatar/AvatarBlink_Simple.js +0 -77
  303. package/lib/engine-components/avatar/AvatarBlink_Simple.js.map +0 -1
  304. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +0 -14
  305. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +0 -69
  306. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js.map +0 -1
  307. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +0 -29
  308. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +0 -122
  309. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +0 -1
  310. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +0 -15
  311. package/lib/engine-components/avatar/Avatar_MouthShapes.js +0 -80
  312. package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +0 -1
  313. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +0 -9
  314. package/lib/engine-components/avatar/Avatar_MustacheShake.js +0 -30
  315. package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +0 -1
  316. package/src/engine-components/AvatarLoader.ts +0 -264
  317. package/src/engine-components/avatar/AvatarBlink_Simple.ts +0 -70
  318. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +0 -64
  319. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +0 -140
  320. package/src/engine-components/avatar/Avatar_MouthShapes.ts +0 -84
  321. package/src/engine-components/avatar/Avatar_MustacheShake.ts +0 -32
  322. package/src/vite-env.d.ts +0 -16
package/CHANGELOG.md CHANGED
@@ -4,6 +4,117 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [5.1.0-alpha.5] - 2026-05-08
8
+ **Added**
9
+ - `Context.events` — typed event bus for decoupled component communication. Known events get autocomplete; custom events can be typed at the call site:
10
+ ```ts
11
+ context.events.on("scene-content-changed", e => console.log(e.object));
12
+ context.events.emit<{ pts: number }>("scored", { pts: 10 });
13
+ ```
14
+ - `ContactShadows` auto-refit — when `autoFit` is enabled, shadows automatically refit when scene content changes (e.g. SceneSwitcher load, DropListener asset loading)
15
+ - `Input.addEventListener` now returns an unsubscribe function (works with `autoCleanup`):
16
+ ```ts
17
+ this.autoCleanup(this.context.input.addEventListener("pointerdown", (evt) => { ... }));
18
+ ```
19
+ - `AnimationBuilder` — low-level API for defining animation tracks with typed keyframes and tween shorthands. Used by `AnimatorControllerBuilder` and `TimelineBuilder` for inline `.track()` calls
20
+ - `TimelineBuilder` typed track builder interfaces per track type (`AnimationTrackBuilder`, `AudioTrackBuilder`, etc.) with inline `.track()` support for keyframe animation
21
+ - `AnimatorControllerBuilder`: inline `.track()` for defining animation directly on states, support for `TrackDescriptor` arrays as clip sources, simplified `exitTime` (replaces separate `hasExitTime` flag)
22
+ - Physics raycast `includeTriggers` option — opt-in to hitting trigger/sensor colliders (skipped by default)
23
+
24
+ **Changed**
25
+ - Timeline track classes renamed for consistency: `AnimationTrackHandler` → `TimelineAnimationTrack`, `AudioTrackHandler` → `TimelineAudioTrack`, `ActivationTrackHandler` → `TimelineActivationTrack`, `ControlTrackHandler` → `TimelineControlTrack`, `MarkerTrackHandler` → `TimelineMarkerTrack`, `TrackHandler` → `TimelineTrackHandler`
26
+ - `OrbitControls.fitCamera` deprecated overload removed from type declarations (runtime still accepts `Object3D` for backwards compat — use `fitCamera({ objects: [...] })` instead)
27
+
28
+ **Fixed**
29
+ - `OrbitControls`: programmatic camera transitions (e.g. `fitCamera`) no longer interrupted continuously during an ongoing drag — only at interaction start
30
+ - `fitCamera` with `centerCamera: "y"` producing incorrect camera elevation when camera was above the scene center
31
+ - `Animator`: switching `runtimeAnimatorController` now properly disposes the previous controller
32
+ - `AnimatorController.dispose()` guard against missing mixer
33
+ - `CursorFollow.snapToSurface` incorrect property description removed
34
+ - Vite 8 compatibility fixes
35
+
36
+ ## [5.1.0-alpha.4] - 2026-05-06
37
+ #### Added
38
+ - `autoCleanup` on `Behaviour` — register disposables or cleanup functions tied to the component lifecycle. Automatically cleaned up on disable or destroy depending on when registered:
39
+ ```ts
40
+ onEnable() {
41
+ this.autoCleanup(on(window, "resize", () => { ... }));
42
+ this.autoCleanup(this.context.connection.beginListen("my-event", () => { ... }));
43
+ }
44
+ ```
45
+ - `TimelineBuilder` API for building timeline assets from code:
46
+ ```ts
47
+ const timeline = TimelineBuilder.create("MyTimeline")
48
+ .animationTrack("Walk", animator).clip(walkClip, { duration: 2 })
49
+ .activationTrack("FX", vfxObject).activate({ start: 1, duration: 0.5 })
50
+ .build();
51
+ director.playableAsset = timeline;
52
+ ```
53
+ - `PlayableDirector`: expose `tracks` and `activationTracks` getters, support runtime `playableAsset` assignment with automatic graph rebuild
54
+ - `PhysicsCollider`: expose `density` property, add `@validate` decorator for automatic property updates at runtime
55
+ - Timeline `AudioTrack` volume getter/setter
56
+ - `Networking`: `beginListen` now returns an unsubscribe function (backwards compatible — `stopListen` still works):
57
+ ```ts
58
+ const unsub = this.context.connection.beginListen("my-event", (data) => { ... });
59
+ unsub(); // or use this.autoCleanup(unsub)
60
+ ```
61
+
62
+ #### Changed
63
+ - Serialization: consolidated instantiate reference resolution into a unified system — fixes cloned timelines, EventLists, SignalReceivers, and deep component references not resolving correctly after `instantiate()`
64
+ - Removed legacy `AvatarLoader`, `AvatarBlink_Simple`, `AvatarEyeLook_Rotation`, `Avatar_Brain_LookAt`, `Avatar_MouthShapes`, `Avatar_MustacheShake` components
65
+
66
+ #### Fixed
67
+ - `@validate` decorator wrapping `__internalAwake` multiple times when components were re-activated
68
+ - Instantiated scenes with timeline `SignalReceiver` not resolving EventList object references
69
+ - `instantiate()` not including cloned Object3D GUIDs in the guids map
70
+ - `Light` component throwing on unsupported light types (now logs error without breaking deserialization)
71
+ - Worker URLs producing incorrect paths for SPA deployments
72
+ - Vite license and project identifier error handling for non-500 status codes
73
+ - Rapier physics `dispose()` not clearing internal state (freed world could cause crashes)
74
+
75
+ ## [5.1.0-alpha.3] - 2026-04-29
76
+ #### Added
77
+ - `AudioClip` type with standalone playback control — use with `@serializable(AudioClip)` for direct audio clip references
78
+ - `AudioSource` spatial blend support via dual-path audio graph for smooth 2D/3D crossfade
79
+ - UI Text default static font from Needle CDN with absolute font URL support
80
+ - `DragControls` EventList support
81
+
82
+ #### Fixed
83
+ - UI Text font URL resolution when loading GLBs from external hosts (e.g. CDN)
84
+ - `AudioSource` spatial rolloff factor and `play()` reliability
85
+ - `Animation` `play()` with `{ exclusive: false }` not stopping already-running clips
86
+ - XR lifecycle — spurious `onLeaveXR` calls for scripts that never entered XR
87
+ - `OrbitControls` lookBounds lerp and distance-relative gizmo sizes
88
+ - `CursorFollow` self-intersection and snapToSurface raycast direction
89
+ - Vite `makeFilesLocal` and alias plugins now respect `vite.config` `base`
90
+ - `three-mesh-bvh` worker failing to load in local dev server
91
+ - `VideoPlayer` URL serializer tree-shaken out in code-only projects
92
+ - `ReflectionProbe` not cleaning up overrides when removed
93
+ ## [5.1.0-alpha.2] - 2026-04-13
94
+ - **NEW**: Scene Bindings (experimental) — auto-generated TypeScript types from your glTF scenes, providing typed access to nodes, components, and properties via `ctx.sceneData` or `needle.sceneData`. Types are generated automatically by a Vite plugin whenever your scene files change — no configuration needed. Works with any glTF/GLB assigned as `src` on `<needle-engine>`, including remote URLs and Needle Cloud assets. The API shape (particularly `$components` and `$object` accessors) may evolve based on feedback. Can be disabled with `dts: { enabled: false }` in your Vite plugin config.
95
+ ```ts
96
+ // fully typed, with autocomplete for every node and component
97
+ const cam = ctx.sceneData.MyScene.MainCamera.$object; // THREE.PerspectiveCamera
98
+ const orbit = ctx.sceneData.MyScene.MainCamera.$components.OrbitControls; // typed!
99
+ ```
100
+ - **NEW**: SSR support (experimental) — import Needle Engine in Node.js/SSR frameworks (SvelteKit, Next.js, Nuxt) without `ReferenceError` crashes. The engine now provides SSR-safe base classes and skips browser-dependent initialization on the server. Core rendering still happens client-side — SSR support means your app can import and reference engine code server-side without errors.
101
+ - **NEW**: JSX type declarations for `<needle-engine>` and other web components — first-class support for React, Preact, SolidJS, and other JSX-based frameworks with full autocomplete and type checking
102
+ - **NEW**: `needle` shorthand (experimental) — quick access to the current engine context from anywhere without passing `ctx` around. Works in React/Svelte/Vue components, button handlers, or plain JavaScript. SSR-safe.
103
+ ```ts
104
+ import { needle } from "@needle-tools/engine";
105
+ needle.scene.traverse(obj => { ... }); // access the three.js scene
106
+ needle.renderer; // access the WebGLRenderer
107
+ needle.sceneData.MyScene.Camera.$components.OrbitControls.autoRotate = true;
108
+ ```
109
+ - **NEW**: `context.lights` array and `context.mainLight` getter for easy access to all scene lights and the primary directional light
110
+ - Add: `needlePlugins()` can now be called without arguments — the Vite command is resolved automatically. This simplifies setup in frameworks like SvelteKit where `defineConfig` doesn't expose the command:
111
+ ```js
112
+ export default defineConfig({ plugins: [sveltekit(), needlePlugins()] });
113
+ ```
114
+ - Fix: BloomEffect and Sharpening were pulling in the entire `postprocessing` library even in projects that don't use postprocessing, increasing bundle size unnecessarily
115
+ - Fix: SceneSwitcher now shows the object name in the URL when referencing scene objects (instead of just an index)
116
+ - Improved: Vite plugin reliability (fewer unnecessary reloads, cleaner log output)
117
+
7
118
  ## [5.1.0-alpha.1] - 2026-04-10
8
119
  - Add: `AnimatorControllerBuilder` for building animator controllers from code (experimental)
9
120
  - Add: XR global events now return an unsubscribe function + `onBeforeXRSessionRequest` event
@@ -36,6 +147,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
36
147
  - Fix: HTML mobile icon not rendering
37
148
  - Fix: UI `Text` component absolute font URL handling
38
149
 
150
+ ## [5.0.4] - 2026-04-20
151
+ - Fix: VideoPlayer not working when tree-shaking is enabled due to URL serializer being removed
152
+ - Fix: ReflectionProbe not cleaning up `envMapRotation` and `envMapIntensity` overrides when removing envMap
153
+
154
+ ## [5.0.3] - 2026-04-08
155
+ - Add: PMREM / FastHDR support for GroundProjection with shader-based blurriness, blending, and alpha controls
156
+ - Fix: MaterialPropertyBlock multi-material change from opaque to transparent
157
+ - Improved: OrbitControls JSDoc for `targetBounds`
158
+
39
159
  ## [5.0.2] - 2026-04-03
40
160
  - Updated `@needle-tools/materialx` to 1.6.0:
41
161
  - UV coordinate convention handling (glTF ↔ OpenGL) — fixes UV-dependent effects like displacement and procedural noise in the browser
package/SKILL.md CHANGED
@@ -58,6 +58,9 @@ export class HelloWorld extends Behaviour {
58
58
  **Code-only (no Unity/Blender):**
59
59
  Scaffold a project with `npm create needle`, write TypeScript components, and build scenes entirely from code. Use `onStart`, `onUpdate`, and other lifecycle hooks to set up scenes, or create components extending `Behaviour`. This is a fully supported first-class workflow.
60
60
 
61
+ **CDN with import maps (no bundler):**
62
+ For quick prototypes, embedding in existing sites, or projects without a build pipeline. Use `<script type="importmap">` to map bare specifiers to CDN URLs, then write standard ES module code with `import` statements — no Vite, no npm, no `node_modules` required. **Important:** three.js must come from `@needle-tools/engine/dist/three.min.js`, not a standalone three.js CDN. See [CDN & Import Maps](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/integration.md) for full examples and rules.
63
+
61
64
  **Unity or Blender as visual editors:**
62
65
  Unity/Blender export scenes as GLB files into `assets/`, with component data serialized in glTF extensions. At runtime, the engine deserializes this into TypeScript components. A component compiler auto-generates C# stubs (Unity) or JSON (Blender) so custom TS components appear in the editor inspector. The editors are tools for visual scene setup; the runtime is pure web/TypeScript. Note: the editor controls the engine version in `package.json` — to force a version, use `"@needle-tools/engine": "npm:@needle-tools/engine@5.0.1"`.
63
66
 
@@ -417,7 +420,7 @@ Read these **only when needed** — don't load them all upfront:
417
420
  - 🌐 [Networking](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/networking.md) — connection API, SyncedRoom, PlayerSync, @syncField, SyncedTransform, Voip, ScreenCapture, guid persistence
418
421
  - 🥽 [WebXR](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/xr.md) — VR/AR sessions, XRRig, controllers, pointer events in XR, image tracking, depth sensing, camera access, mesh detection, DOM overlay, iOS AR, multiplayer avatars
419
422
  - 🚀 [Deployment](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/deployment.md) — Needle Cloud (GitHub Actions, CLI), Vercel, Netlify, other platforms
420
- - 🔗 [Framework Integration](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/integration.md) — React, Svelte, Vue, Next.js, SvelteKit patterns
423
+ - 🔗 [Framework Integration](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/integration.md) — React, Svelte, Vue, Next.js, SvelteKit patterns, CDN with import maps
421
424
  - 💡 [Component Examples](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/examples.md) — practical examples: click handling, runtime loading, networking, materials, code-only scenes, input, coroutines
422
425
  - 🐛 [Troubleshooting](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/references/troubleshooting.md) — error messages, unexpected behavior, build failures, **runtime logs at `node_modules/.needle/logs/`**, build info
423
426
  - 🧩 [Component Template](https://raw.githubusercontent.com/needle-tools/ai/refs/heads/main/providers/claude/plugin/skills/needle-engine/templates/my-component.ts) — annotated starting point for new components