@needle-tools/engine 4.11.5-next.57306ec → 4.11.5-next.6ab130e

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 (334) hide show
  1. package/components.needle.json +1 -1
  2. package/dist/{needle-engine.bundle-D70EAuFo.js → needle-engine.bundle-Byl9O-do.js} +2 -2
  3. package/dist/{needle-engine.bundle-BJTol1Wh.umd.cjs → needle-engine.bundle-DRD8Wkvh.umd.cjs} +3 -3
  4. package/dist/{needle-engine.bundle-CcBhVcYC.min.js → needle-engine.bundle-DhkMkFjF.min.js} +1 -1
  5. package/dist/needle-engine.d.ts +188 -3
  6. package/dist/needle-engine.js +2 -2
  7. package/dist/needle-engine.min.js +1 -1
  8. package/dist/needle-engine.umd.cjs +1 -1
  9. package/lib/engine-components/AlignmentConstraint.d.ts +9 -0
  10. package/lib/engine-components/AlignmentConstraint.js +9 -0
  11. package/lib/engine-components/AlignmentConstraint.js.map +1 -1
  12. package/lib/engine-components/Animator.d.ts +1 -0
  13. package/lib/engine-components/Animator.js.map +1 -1
  14. package/lib/engine-components/AudioListener.d.ts +2 -0
  15. package/lib/engine-components/AudioListener.js +2 -0
  16. package/lib/engine-components/AudioListener.js.map +1 -1
  17. package/lib/engine-components/AudioSource.d.ts +1 -0
  18. package/lib/engine-components/AudioSource.js +1 -0
  19. package/lib/engine-components/AudioSource.js.map +1 -1
  20. package/lib/engine-components/AxesHelper.d.ts +2 -0
  21. package/lib/engine-components/AxesHelper.js +2 -0
  22. package/lib/engine-components/AxesHelper.js.map +1 -1
  23. package/lib/engine-components/Camera.d.ts +1 -0
  24. package/lib/engine-components/Camera.js +1 -0
  25. package/lib/engine-components/Camera.js.map +1 -1
  26. package/lib/engine-components/CharacterController.d.ts +4 -1
  27. package/lib/engine-components/CharacterController.js +4 -1
  28. package/lib/engine-components/CharacterController.js.map +1 -1
  29. package/lib/engine-components/DeleteBox.d.ts +2 -0
  30. package/lib/engine-components/DeleteBox.js +2 -0
  31. package/lib/engine-components/DeleteBox.js.map +1 -1
  32. package/lib/engine-components/DeviceFlag.d.ts +4 -0
  33. package/lib/engine-components/DeviceFlag.js +4 -0
  34. package/lib/engine-components/DeviceFlag.js.map +1 -1
  35. package/lib/engine-components/DragControls.d.ts +1 -0
  36. package/lib/engine-components/DragControls.js +1 -0
  37. package/lib/engine-components/DragControls.js.map +1 -1
  38. package/lib/engine-components/DropListener.d.ts +1 -0
  39. package/lib/engine-components/DropListener.js +1 -0
  40. package/lib/engine-components/DropListener.js.map +1 -1
  41. package/lib/engine-components/Duplicatable.d.ts +1 -0
  42. package/lib/engine-components/Duplicatable.js +1 -0
  43. package/lib/engine-components/Duplicatable.js.map +1 -1
  44. package/lib/engine-components/EventTrigger.d.ts +2 -0
  45. package/lib/engine-components/EventTrigger.js +2 -0
  46. package/lib/engine-components/EventTrigger.js.map +1 -1
  47. package/lib/engine-components/GridHelper.d.ts +2 -0
  48. package/lib/engine-components/GridHelper.js +2 -0
  49. package/lib/engine-components/GridHelper.js.map +1 -1
  50. package/lib/engine-components/GroundProjection.d.ts +1 -0
  51. package/lib/engine-components/GroundProjection.js +1 -0
  52. package/lib/engine-components/GroundProjection.js.map +1 -1
  53. package/lib/engine-components/LODGroup.d.ts +2 -0
  54. package/lib/engine-components/LODGroup.js +2 -0
  55. package/lib/engine-components/LODGroup.js.map +1 -1
  56. package/lib/engine-components/Light.d.ts +1 -0
  57. package/lib/engine-components/Light.js +1 -0
  58. package/lib/engine-components/Light.js.map +1 -1
  59. package/lib/engine-components/LookAtConstraint.d.ts +1 -0
  60. package/lib/engine-components/LookAtConstraint.js +1 -0
  61. package/lib/engine-components/LookAtConstraint.js.map +1 -1
  62. package/lib/engine-components/NeedleMenu.d.ts +1 -0
  63. package/lib/engine-components/NeedleMenu.js +1 -0
  64. package/lib/engine-components/NeedleMenu.js.map +1 -1
  65. package/lib/engine-components/NestedGltf.d.ts +1 -0
  66. package/lib/engine-components/NestedGltf.js +1 -0
  67. package/lib/engine-components/NestedGltf.js.map +1 -1
  68. package/lib/engine-components/Networking.d.ts +1 -0
  69. package/lib/engine-components/Networking.js +1 -0
  70. package/lib/engine-components/Networking.js.map +1 -1
  71. package/lib/engine-components/OffsetConstraint.d.ts +7 -0
  72. package/lib/engine-components/OffsetConstraint.js +7 -0
  73. package/lib/engine-components/OffsetConstraint.js.map +1 -1
  74. package/lib/engine-components/OrbitControls.d.ts +1 -0
  75. package/lib/engine-components/OrbitControls.js +1 -0
  76. package/lib/engine-components/OrbitControls.js.map +1 -1
  77. package/lib/engine-components/PlayerColor.d.ts +2 -0
  78. package/lib/engine-components/PlayerColor.js +2 -0
  79. package/lib/engine-components/PlayerColor.js.map +1 -1
  80. package/lib/engine-components/ReflectionProbe.d.ts +1 -0
  81. package/lib/engine-components/ReflectionProbe.js +1 -0
  82. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  83. package/lib/engine-components/RigidBody.d.ts +1 -0
  84. package/lib/engine-components/RigidBody.js +1 -0
  85. package/lib/engine-components/RigidBody.js.map +1 -1
  86. package/lib/engine-components/SceneSwitcher.d.ts +1 -0
  87. package/lib/engine-components/SceneSwitcher.js +1 -0
  88. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  89. package/lib/engine-components/ScreenCapture.d.ts +1 -0
  90. package/lib/engine-components/ScreenCapture.js +1 -0
  91. package/lib/engine-components/ScreenCapture.js.map +1 -1
  92. package/lib/engine-components/SeeThrough.d.ts +1 -0
  93. package/lib/engine-components/SeeThrough.js +1 -0
  94. package/lib/engine-components/SeeThrough.js.map +1 -1
  95. package/lib/engine-components/ShadowCatcher.d.ts +2 -0
  96. package/lib/engine-components/ShadowCatcher.js +2 -0
  97. package/lib/engine-components/ShadowCatcher.js.map +1 -1
  98. package/lib/engine-components/Skybox.d.ts +1 -0
  99. package/lib/engine-components/Skybox.js +1 -0
  100. package/lib/engine-components/Skybox.js.map +1 -1
  101. package/lib/engine-components/SmoothFollow.d.ts +1 -0
  102. package/lib/engine-components/SmoothFollow.js +1 -0
  103. package/lib/engine-components/SmoothFollow.js.map +1 -1
  104. package/lib/engine-components/SpatialTrigger.d.ts +1 -0
  105. package/lib/engine-components/SpatialTrigger.js +1 -0
  106. package/lib/engine-components/SpatialTrigger.js.map +1 -1
  107. package/lib/engine-components/SpectatorCamera.d.ts +1 -0
  108. package/lib/engine-components/SpectatorCamera.js +1 -0
  109. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  110. package/lib/engine-components/SpriteRenderer.d.ts +1 -0
  111. package/lib/engine-components/SpriteRenderer.js +1 -0
  112. package/lib/engine-components/SpriteRenderer.js.map +1 -1
  113. package/lib/engine-components/SyncedCamera.d.ts +2 -0
  114. package/lib/engine-components/SyncedCamera.js +2 -0
  115. package/lib/engine-components/SyncedCamera.js.map +1 -1
  116. package/lib/engine-components/SyncedRoom.d.ts +1 -0
  117. package/lib/engine-components/SyncedRoom.js +1 -0
  118. package/lib/engine-components/SyncedRoom.js.map +1 -1
  119. package/lib/engine-components/SyncedTransform.d.ts +2 -0
  120. package/lib/engine-components/SyncedTransform.js +2 -0
  121. package/lib/engine-components/SyncedTransform.js.map +1 -1
  122. package/lib/engine-components/TransformGizmo.d.ts +2 -0
  123. package/lib/engine-components/TransformGizmo.js +2 -0
  124. package/lib/engine-components/TransformGizmo.js.map +1 -1
  125. package/lib/engine-components/VideoPlayer.d.ts +1 -0
  126. package/lib/engine-components/VideoPlayer.js +1 -0
  127. package/lib/engine-components/VideoPlayer.js.map +1 -1
  128. package/lib/engine-components/Voip.d.ts +1 -0
  129. package/lib/engine-components/Voip.js +1 -0
  130. package/lib/engine-components/Voip.js.map +1 -1
  131. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +18 -0
  132. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +18 -0
  133. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
  134. package/lib/engine-components/particlesystem/ParticleSystem.d.ts +1 -0
  135. package/lib/engine-components/particlesystem/ParticleSystem.js +1 -0
  136. package/lib/engine-components/particlesystem/ParticleSystem.js.map +1 -1
  137. package/lib/engine-components/physics/Attractor.d.ts +3 -0
  138. package/lib/engine-components/physics/Attractor.js +3 -0
  139. package/lib/engine-components/physics/Attractor.js.map +1 -1
  140. package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -0
  141. package/lib/engine-components/postprocessing/Effects/BloomEffect.js +1 -0
  142. package/lib/engine-components/postprocessing/Effects/BloomEffect.js.map +1 -1
  143. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +4 -0
  144. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +4 -0
  145. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -1
  146. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +3 -0
  147. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +3 -0
  148. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -1
  149. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +4 -0
  150. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +4 -0
  151. package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -1
  152. package/lib/engine-components/postprocessing/Effects/EffectWrapper.d.ts +1 -0
  153. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js +1 -0
  154. package/lib/engine-components/postprocessing/Effects/EffectWrapper.js.map +1 -1
  155. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +3 -0
  156. package/lib/engine-components/postprocessing/Effects/Pixelation.js +3 -0
  157. package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -1
  158. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +4 -0
  159. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +4 -0
  160. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js.map +1 -1
  161. package/lib/engine-components/postprocessing/Effects/Sharpening.d.ts +4 -0
  162. package/lib/engine-components/postprocessing/Effects/Sharpening.js +4 -0
  163. package/lib/engine-components/postprocessing/Effects/Sharpening.js.map +1 -1
  164. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +4 -0
  165. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +4 -0
  166. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js.map +1 -1
  167. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +4 -0
  168. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +4 -0
  169. package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -1
  170. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +4 -0
  171. package/lib/engine-components/postprocessing/Effects/Vignette.js +4 -0
  172. package/lib/engine-components/postprocessing/Effects/Vignette.js.map +1 -1
  173. package/lib/engine-components/postprocessing/Volume.d.ts +1 -0
  174. package/lib/engine-components/postprocessing/Volume.js +1 -0
  175. package/lib/engine-components/postprocessing/Volume.js.map +1 -1
  176. package/lib/engine-components/splines/Spline.d.ts +1 -0
  177. package/lib/engine-components/splines/Spline.js +1 -0
  178. package/lib/engine-components/splines/Spline.js.map +1 -1
  179. package/lib/engine-components/splines/SplineWalker.d.ts +1 -0
  180. package/lib/engine-components/splines/SplineWalker.js +1 -0
  181. package/lib/engine-components/splines/SplineWalker.js.map +1 -1
  182. package/lib/engine-components/timeline/PlayableDirector.d.ts +1 -0
  183. package/lib/engine-components/timeline/PlayableDirector.js +1 -0
  184. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  185. package/lib/engine-components/timeline/SignalAsset.d.ts +1 -0
  186. package/lib/engine-components/timeline/SignalAsset.js +1 -0
  187. package/lib/engine-components/timeline/SignalAsset.js.map +1 -1
  188. package/lib/engine-components/ui/Button.d.ts +4 -0
  189. package/lib/engine-components/ui/Button.js +4 -0
  190. package/lib/engine-components/ui/Button.js.map +1 -1
  191. package/lib/engine-components/ui/Canvas.d.ts +5 -0
  192. package/lib/engine-components/ui/Canvas.js +5 -0
  193. package/lib/engine-components/ui/Canvas.js.map +1 -1
  194. package/lib/engine-components/ui/CanvasGroup.d.ts +4 -0
  195. package/lib/engine-components/ui/CanvasGroup.js +4 -0
  196. package/lib/engine-components/ui/CanvasGroup.js.map +1 -1
  197. package/lib/engine-components/ui/EventSystem.d.ts +2 -0
  198. package/lib/engine-components/ui/EventSystem.js +2 -0
  199. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  200. package/lib/engine-components/ui/Image.d.ts +4 -0
  201. package/lib/engine-components/ui/Image.js +4 -0
  202. package/lib/engine-components/ui/Image.js.map +1 -1
  203. package/lib/engine-components/ui/InputField.d.ts +4 -0
  204. package/lib/engine-components/ui/InputField.js +4 -0
  205. package/lib/engine-components/ui/InputField.js.map +1 -1
  206. package/lib/engine-components/ui/Outline.d.ts +7 -0
  207. package/lib/engine-components/ui/Outline.js +7 -0
  208. package/lib/engine-components/ui/Outline.js.map +1 -1
  209. package/lib/engine-components/ui/Text.d.ts +1 -0
  210. package/lib/engine-components/ui/Text.js +1 -0
  211. package/lib/engine-components/ui/Text.js.map +1 -1
  212. package/lib/engine-components/utils/LookAt.d.ts +1 -0
  213. package/lib/engine-components/utils/LookAt.js +1 -0
  214. package/lib/engine-components/utils/LookAt.js.map +1 -1
  215. package/lib/engine-components/web/Clickthrough.d.ts +1 -1
  216. package/lib/engine-components/web/Clickthrough.js +1 -1
  217. package/lib/engine-components/web/CursorFollow.d.ts +1 -0
  218. package/lib/engine-components/web/CursorFollow.js +1 -0
  219. package/lib/engine-components/web/CursorFollow.js.map +1 -1
  220. package/lib/engine-components/web/HoverAnimation.d.ts +1 -0
  221. package/lib/engine-components/web/HoverAnimation.js +1 -0
  222. package/lib/engine-components/web/HoverAnimation.js.map +1 -1
  223. package/lib/engine-components/web/ScrollFollow.d.ts +2 -0
  224. package/lib/engine-components/web/ScrollFollow.js +2 -0
  225. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  226. package/lib/engine-components/web/ViewBox.d.ts +1 -0
  227. package/lib/engine-components/web/ViewBox.js +1 -0
  228. package/lib/engine-components/web/ViewBox.js.map +1 -1
  229. package/lib/engine-components/webxr/Avatar.d.ts +5 -0
  230. package/lib/engine-components/webxr/Avatar.js +5 -0
  231. package/lib/engine-components/webxr/Avatar.js.map +1 -1
  232. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +1 -0
  233. package/lib/engine-components/webxr/WebARCameraBackground.js +1 -0
  234. package/lib/engine-components/webxr/WebARCameraBackground.js.map +1 -1
  235. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +1 -0
  236. package/lib/engine-components/webxr/WebARSessionRoot.js +1 -0
  237. package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
  238. package/lib/engine-components/webxr/WebXR.d.ts +1 -1
  239. package/lib/engine-components/webxr/WebXR.js +1 -1
  240. package/lib/engine-components/webxr/controllers/XRControllerFollow.d.ts +1 -0
  241. package/lib/engine-components/webxr/controllers/XRControllerFollow.js +1 -0
  242. package/lib/engine-components/webxr/controllers/XRControllerFollow.js.map +1 -1
  243. package/lib/engine-components/webxr/controllers/XRControllerModel.d.ts +4 -0
  244. package/lib/engine-components/webxr/controllers/XRControllerModel.js +4 -0
  245. package/lib/engine-components/webxr/controllers/XRControllerModel.js.map +1 -1
  246. package/lib/engine-components/webxr/controllers/XRControllerMovement.d.ts +1 -0
  247. package/lib/engine-components/webxr/controllers/XRControllerMovement.js +1 -0
  248. package/lib/engine-components/webxr/controllers/XRControllerMovement.js.map +1 -1
  249. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +2 -0
  250. package/lib/engine-components-experimental/networking/PlayerSync.js +2 -0
  251. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
  252. package/package.json +1 -1
  253. package/src/engine-components/AlignmentConstraint.ts +9 -0
  254. package/src/engine-components/Animator.ts +1 -0
  255. package/src/engine-components/AudioListener.ts +2 -0
  256. package/src/engine-components/AudioSource.ts +1 -0
  257. package/src/engine-components/AxesHelper.ts +2 -0
  258. package/src/engine-components/Camera.ts +1 -0
  259. package/src/engine-components/CharacterController.ts +4 -1
  260. package/src/engine-components/DeleteBox.ts +2 -0
  261. package/src/engine-components/DeviceFlag.ts +4 -0
  262. package/src/engine-components/DragControls.ts +1 -0
  263. package/src/engine-components/DropListener.ts +1 -0
  264. package/src/engine-components/Duplicatable.ts +1 -0
  265. package/src/engine-components/EventTrigger.ts +2 -0
  266. package/src/engine-components/GridHelper.ts +2 -0
  267. package/src/engine-components/GroundProjection.ts +1 -0
  268. package/src/engine-components/LODGroup.ts +2 -0
  269. package/src/engine-components/Light.ts +1 -0
  270. package/src/engine-components/LookAtConstraint.ts +1 -0
  271. package/src/engine-components/NeedleMenu.ts +1 -0
  272. package/src/engine-components/NestedGltf.ts +1 -0
  273. package/src/engine-components/Networking.ts +1 -0
  274. package/src/engine-components/OffsetConstraint.ts +7 -0
  275. package/src/engine-components/OrbitControls.ts +1 -0
  276. package/src/engine-components/PlayerColor.ts +2 -0
  277. package/src/engine-components/ReflectionProbe.ts +1 -0
  278. package/src/engine-components/RigidBody.ts +1 -0
  279. package/src/engine-components/SceneSwitcher.ts +1 -0
  280. package/src/engine-components/ScreenCapture.ts +1 -0
  281. package/src/engine-components/SeeThrough.ts +1 -0
  282. package/src/engine-components/ShadowCatcher.ts +2 -0
  283. package/src/engine-components/Skybox.ts +1 -0
  284. package/src/engine-components/SmoothFollow.ts +1 -0
  285. package/src/engine-components/SpatialTrigger.ts +1 -0
  286. package/src/engine-components/SpectatorCamera.ts +1 -0
  287. package/src/engine-components/SpriteRenderer.ts +1 -0
  288. package/src/engine-components/SyncedCamera.ts +2 -0
  289. package/src/engine-components/SyncedRoom.ts +1 -0
  290. package/src/engine-components/SyncedTransform.ts +2 -0
  291. package/src/engine-components/TransformGizmo.ts +2 -0
  292. package/src/engine-components/VideoPlayer.ts +1 -0
  293. package/src/engine-components/Voip.ts +1 -0
  294. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +18 -0
  295. package/src/engine-components/particlesystem/ParticleSystem.ts +1 -0
  296. package/src/engine-components/physics/Attractor.ts +3 -0
  297. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +1 -0
  298. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +4 -0
  299. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +3 -0
  300. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +4 -0
  301. package/src/engine-components/postprocessing/Effects/EffectWrapper.ts +1 -0
  302. package/src/engine-components/postprocessing/Effects/Pixelation.ts +3 -0
  303. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +4 -0
  304. package/src/engine-components/postprocessing/Effects/Sharpening.ts +4 -0
  305. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +4 -0
  306. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +4 -0
  307. package/src/engine-components/postprocessing/Effects/Vignette.ts +4 -0
  308. package/src/engine-components/postprocessing/Volume.ts +1 -0
  309. package/src/engine-components/splines/Spline.ts +1 -0
  310. package/src/engine-components/splines/SplineWalker.ts +1 -0
  311. package/src/engine-components/timeline/PlayableDirector.ts +1 -0
  312. package/src/engine-components/timeline/SignalAsset.ts +1 -0
  313. package/src/engine-components/ui/Button.ts +4 -0
  314. package/src/engine-components/ui/Canvas.ts +5 -0
  315. package/src/engine-components/ui/CanvasGroup.ts +4 -0
  316. package/src/engine-components/ui/EventSystem.ts +2 -0
  317. package/src/engine-components/ui/Image.ts +4 -0
  318. package/src/engine-components/ui/InputField.ts +4 -0
  319. package/src/engine-components/ui/Outline.ts +7 -0
  320. package/src/engine-components/ui/Text.ts +1 -0
  321. package/src/engine-components/utils/LookAt.ts +1 -0
  322. package/src/engine-components/web/Clickthrough.ts +1 -1
  323. package/src/engine-components/web/CursorFollow.ts +1 -0
  324. package/src/engine-components/web/HoverAnimation.ts +1 -0
  325. package/src/engine-components/web/ScrollFollow.ts +2 -0
  326. package/src/engine-components/web/ViewBox.ts +1 -0
  327. package/src/engine-components/webxr/Avatar.ts +5 -0
  328. package/src/engine-components/webxr/WebARCameraBackground.ts +1 -0
  329. package/src/engine-components/webxr/WebARSessionRoot.ts +1 -0
  330. package/src/engine-components/webxr/WebXR.ts +1 -1
  331. package/src/engine-components/webxr/controllers/XRControllerFollow.ts +1 -0
  332. package/src/engine-components/webxr/controllers/XRControllerModel.ts +4 -0
  333. package/src/engine-components/webxr/controllers/XRControllerMovement.ts +1 -0
  334. package/src/engine-components-experimental/networking/PlayerSync.ts +2 -0
@@ -141,7 +141,7 @@ void main(){
141
141
  #__vconsole .vc-mask {
142
142
  overflow: hidden;
143
143
  }
144
- `,br?.prepend(i),o===!0&&Nb()<=0&&p_(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),cc=!1,Hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function TO(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),Hi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}function EO(){return document.querySelector("#__vconsole .vc-switch")||null}function AO(){return document.querySelector("#__vconsole")||null}const g_=v("debugdefines");fs('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),fs('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),fs('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),fs('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),fs('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.11.5";'),fs('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),fs('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Wed Dec 03 2025 11:00:30 GMT+0000 (Coordinated Universal Time)";'),fs('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const bn="4.11.5",Fd="undefined",sg="Wed Dec 03 2025 11:00:30 GMT+0000 (Coordinated Universal Time)";g_&&console.log(`Engine version: ${bn} (generator: ${Fd})
144
+ `,br?.prepend(i),o===!0&&Nb()<=0&&p_(),console.log("\u{1F335} Debug console has loaded")}},e.onerror=()=>{console.warn("\u{1F335} Debug console failed to load."+(window.crossOriginIsolated?"This page is using cross-origin isolation, so external scripts can't be loaded.":"")),cc=!1,Hi=null},e.src="https://cdn.jsdelivr.net/npm/vconsole@3.15.1/dist/vconsole.min.js",document.body.appendChild(e)}function TO(){if(!globalThis.VConsole)return;const o=new VConsole.VConsolePlugin("needle-console","\u{1F335} Inspect glTF"),e=()=>document.querySelector("#__vc_plug_"+o._id+" iframe");return o.on("renderTab",function(t){const i=globalThis["needle:codegen_files"];if(!i||i.length===0)return;let n=globalThis["needle:codegen_files"][0];const s=n.indexOf("?");s>-1&&(n=n.substring(0,s));const r=location.protocol+"//"+location.host+location.pathname+"/"+n,a=encodeURIComponent(r);o.fullUrl="https://viewer.needle.tools?inspect&file="+a;var l='<iframe src="" style="width: 100%; height: 99%; border: none;"></iframe>';t(l)}),o.on("show",function(){const t=e();t&&t.src!==o.fullUrl&&(t.src=o.fullUrl)}),o.on("hide",function(){const t=e();t&&(t.src="")}),o.on("addTopBar",function(t){var i=new Array;i.push({name:"Open in new window \u2197",onClick:function(n){window.open(o.fullUrl,"_blank"),Hi?.hide()}}),i.push({name:"Reload",onClick:function(n){const s=e();s&&(s.src=o.fullUrl)}}),i.push({name:"Fullscreen",onClick:function(n){const s=e();s.requestFullscreen?s.requestFullscreen():s.webkitRequestFullscreen instanceof Function&&s.webkitRequestFullscreen()}}),t(i)}),o}function EO(){return document.querySelector("#__vconsole .vc-switch")||null}function AO(){return document.querySelector("#__vconsole")||null}const g_=v("debugdefines");fs('if(!globalThis["NEEDLE_ENGINE_VERSION"]) globalThis["NEEDLE_ENGINE_VERSION"] = "0.0.0";'),fs('if(!globalThis["NEEDLE_ENGINE_GENERATOR"]) globalThis["NEEDLE_ENGINE_GENERATOR"] = "unknown";'),fs('if(!globalThis["NEEDLE_PROJECT_BUILD_TIME"]) globalThis["NEEDLE_PROJECT_BUILD_TIME"] = "unknown";'),fs('if(!globalThis["NEEDLE_PUBLIC_KEY"]) globalThis["NEEDLE_PUBLIC_KEY"] = "unknown";'),fs('globalThis["__NEEDLE_ENGINE_VERSION__"] = "4.11.5";'),fs('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),fs('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Wed Dec 03 2025 11:29:14 GMT+0000 (Coordinated Universal Time)";'),fs('globalThis["__NEEDLE_PUBLIC_KEY__"] = "'+NEEDLE_PUBLIC_KEY+'";');const bn="4.11.5",Fd="undefined",sg="Wed Dec 03 2025 11:29:14 GMT+0000 (Coordinated Universal Time)";g_&&console.log(`Engine version: ${bn} (generator: ${Fd})
145
145
  Project built at ${sg}`);const Ia=NEEDLE_PUBLIC_KEY,ko="needle_isActiveInHierarchy",_r="builtin_components",hc="needle_editor_guid";function fs(o){try{(0,eval)(o)}catch(e){g_&&console.error(e)}}let f_,y_=null;function _n(){return f_}function rg(o){if(o==null){console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup.");return}y_!==o&&(y_=o,f_=new o)}function IO(o,e){if(typeof window!==void 0&&window.SPECTOR){console.log(window.SPECTOR);const t=new URLSearchParams(window.location.search);if(t.has("spector")){let i=function(){if(n>o.time.frame)return window.requestAnimationFrame(()=>i());const r=s.captureCanvas(e);r&&r instanceof Promise?r.then(()=>s.displayUI()):s.displayUI()};const n=Number.parseInt(t.get("spector")||"0")||0;console.log("Scheduled Spector capture at frame #"+n);const s=new window.SPECTOR.Spector;s.spyCanvases=!0,i();return}else A()&&console.debug("Spector available: Add '?spector=<frame>' to the URL to enable it and capture a frame.")}}const Mi=Symbol("shadowDomOwner"),LO=v("debugpatch");function Ud(o,e,t,i){const n=LO===e;if(!t&&!i)return;const s=e+"___needle";DO(o,e,t,i);const r=Object.getOwnPropertyDescriptor(o,e),a=o[e];n&&console.log("Patch",o.constructor.name,e,r,a),r?(n&&console.log("Apply patch with existing descriptor",o.constructor.name,e,r),typeof r.value=="function"&&(o[e]=__(r.value,o,e))):(n&&console.log("Create patch with new property",o.constructor.name,e,r),Object.defineProperty(o,e,{set:function(l){if(typeof l=="function")this[s]=__(l,o,e);else{const c=this[s];v_(o,e,this,c,l),this[s]=l,w_(o,e,this,c,l)}},get:function(){const l=this[s];return typeof l=="function"&&l[s]?l[s]:l}}))}function jO(o,e,t){const i=lg(o,e);if(i)for(let n=i.length-1;n>=0;n--){const s=i[n];s.prefix===t&&(s.prefix=null),s.postfix===t&&(s.postfix=null),!s.prefix&&!s.postfix&&i.splice(n,1)}}const b_=Symbol("Needle:Patches:WrappedFunction");function __(o,e,t){if(o[b_])return o;const i=function(...n){v_(e,t,this,...n);const s=o.apply(this,n);return w_(e,t,this,s,...n),s};return i[b_]=!0,i}const zd="Needle:Patches";function ag(){return globalThis[zd]||(globalThis[zd]=new WeakMap),globalThis[zd]}function lg(o,e){const t=ag().get(o);return t?t.get(e):null}function DO(o,e,t,i){let n=ag().get(o);n||(n=new Map,ag().set(o,n));let s=n.get(e);s||(s=[],n.set(e,s)),s.push({prefix:t,postfix:i})}function v_(o,e,t,...i){if(!t)return;const n=lg(o,e);if(n)for(const s of n)s.prefix?.call(t,...i)}function w_(o,e,t,i,...n){if(!t)return;const s=lg(o,e);if(s)for(const r of s)r.postfix?.call(t,i,...n)}const La=[];function Nd(o){La.indexOf(o)===-1&&La.push(o)}function BO(o){const e=La.indexOf(o);e!==-1&&La.splice(e,1)}const ja=[];function cg(o){ja.indexOf(o)===-1&&ja.push(o)}function FO(o){const e=ja.indexOf(o);e!==-1&&ja.splice(e,1)}function x_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start",{detail:o}));for(let e=0;e<La.length;e++)La[e](o)}function S_(o){globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end",{detail:o}));for(let e=0;e<ja.length;e++)ja[e](o)}const st=v("debuginput");var Vd=(o=>(o.Mouse="mouse",o.Touch="touch",o.Controller="controller",o.Hand="hand",o))(Vd||{}),Ee=(o=>(o.PointerDown="pointerdown",o.PointerUp="pointerup",o.PointerMove="pointermove",o.KeyDown="keydown",o.KeyUp="keyup",o.KeyPressed="keypress",o))(Ee||{});class Mo extends PointerEvent{clientZ;deviceIndex;origin;source;mode;get isSpatial(){return this.mode!="screen"}get ray(){return this._ray||(this._ray=new vo(this.space.worldPosition.clone(),this.space.worldForward.clone())),this._ray}set ray(e){this._ray=e}get hasRay(){return this._ray!==void 0}_ray;space;isClick=!1;isDoubleClick=!1;get used(){return this._used}_used=!1;use(){this._used=!0}get pointerId(){return this._pointerid}_pointerid;get pointerType(){return this._pointerType}_pointerType;get type(){return this._type}_type;metadata={};intersections=new Array;constructor(e,t,i){super(e,i),this.clientZ=i.clientZ,this._pointerid=i.pointerId,this._pointerType=i.pointerType,this._type=e,this.deviceIndex=i.deviceIndex,this.origin=i.origin,this.source=t,this.mode=i.mode,this._ray=i.ray,this.space=i.device}_immediatePropagationStopped=!1;get immediatePropagationStopped(){return this._immediatePropagationStopped}_propagationStopped=!1;get propagationStopped(){return this._immediatePropagationStopped||this._propagationStopped}stopImmediatePropagation(){this._immediatePropagationStopped=!0,super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}stopPropagation(){this._propagationStopped=!0,super.stopPropagation(),this.source?.stopPropagation(),st&&console.warn("Stop propagation...",this.pointerId,this.pointerType)}}class dc extends KeyboardEvent{source;constructor(e,t,i){super(e,i),this.source=t}stopImmediatePropagation(){super.stopImmediatePropagation(),this.source?.stopImmediatePropagation()}}class UO{key;keyType;source;constructor(e){this.key=e.key,this.keyType=e.type,this.source=e}}var ai=(o=>(o[o.Early=-100]="Early",o[o.Default=0]="Default",o[o.Late=100]="Late",o))(ai||{});class C_{_eventListeners={};addEventListener(e,t,i){if(this._eventListeners[e]||(this._eventListeners[e]=[]),!t||typeof t!="function"){console.error("Invalid call to addEventListener: callback is required and must be a function!");return}i?i={...i}:i={};let n=0;i?.queue!=null&&(n=i.queue);const s=this._eventListeners[e],r=s.find(a=>a.priority===n);r?r.listeners.push({callback:t,options:i}):(s.push({priority:n,listeners:[{callback:t,options:i}]}),s.sort((a,l)=>a.priority-l.priority))}removeEventListener(e,t,i){if(!this._eventListeners[e]||!t)return;const n=this._eventListeners[e];if(i?.queue!=null){const s=n.find(a=>a.priority===i.queue);if(!s)return;const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}else for(const s of n){const r=s.listeners.findIndex(a=>a.callback===t);r>=0&&s.listeners.splice(r,1)}}dispatchEvent(e){let t=!1;if(e instanceof dc){const i=this._eventListeners[e.type];if(i)for(const n of i)for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}if(e instanceof Mo){const i=this._eventListeners[e.type];if(i)for(const n of i){if(t)break;for(let s=0;s<n.listeners.length;s++){const r=n.listeners[s];if(r.options?.signal?.aborted){n.listeners.splice(s,1),s--;continue}if(e.immediatePropagationStopped){t=!0,st&&console.log("immediatePropagationStopped",e.type);break}else e.propagationStopped&&(t=!0,st&&console.log("propagationStopped",e.type));r.options.once&&(n.listeners.splice(s,1),s--),r.callback(e)}}}}_doubleClickTimeThreshold=.2;_longPressTimeThreshold=1;get mousePosition(){return this._pointerPositions[0]}get mousePositionRC(){return this._pointerPositionsRC[0]}get mouseDown(){return this._pointerDown[0]}get mouseUp(){return this._pointerUp[0]}get mouseClick(){return this._pointerClick[0]}get mouseDoubleClick(){return this._pointerDoubleClick[0]}get mousePressed(){return this._pointerPressed[0]}get mouseWheelChanged(){return this.getMouseWheelChanged(0)}get click(){return this._pointerClick[0]}get doubleClick(){return this._pointerDoubleClick[0]}getGamepad(e=0){return typeof navigator<"u"&&"getGamepads"in navigator&&navigator.getGamepads()[e]||null}_setCursorTypes=[];setCursorPointer(){this.setCursor("pointer")}setCursorNormal(){this.unsetCursor("pointer")}setCursor(e){this._setCursorTypes.push(e),this._setCursorTypes.length>10&&this._setCursorTypes.shift(),this.updateCursor()}unsetCursor(e){for(let t=this._setCursorTypes.length-1;t>=0;t--)if(this._setCursorTypes[t]===e){this._setCursorTypes.splice(t,1),this.updateCursor();break}}updateCursor(){this._setCursorTypes?.length==0?this.context.domElement.style.cursor="default":this.context.domElement.style.cursor=this._setCursorTypes[this._setCursorTypes.length-1]}getIsPointerIdInUse(e){for(const t of this._pointerEventsPressed)if(t.pointerId===e&&t.used)return!0;return!1}getPointerPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&e++;return e}getPointerPosition(e){return e>=this._pointerPositions.length?null:this._pointerPositions[e]}getPointerPositionLastFrame(e){return e>=this._pointerPositionsLastFrame.length?null:this._pointerPositionsLastFrame[e]}getPointerPositionDelta(e){return e>=this._pointerPositionsDelta.length?null:this._pointerPositionsDelta[e]}getPointerPositionRC(e){return e>=this._pointerPositionsRC.length?null:this._pointerPositionsRC[e]}getPointerDown(e){return e>=this._pointerDown.length?!1:this._pointerDown[e]}getPointerUp(e){return e>=this._pointerUp.length?!1:this._pointerUp[e]}getPointerPressed(e){return e>=this._pointerPressed.length?!1:this._pointerPressed[e]}getPointerClicked(e){return e>=this._pointerClick.length?!1:this._pointerClick[e]}getPointerDoubleClicked(e){return e>=this._pointerDoubleClick.length?!1:this._pointerDoubleClick[e]}getPointerDownTime(e){return e>=this._pointerDownTime.length?-1:this._pointerDownTime[e]}getPointerUpTime(e){return e>=this._pointerUpTime.length?-1:this._pointerUpTime[e]}getPointerLongPress(e){return e>=this._pointerDownTime.length?!1:this.getPointerPressed(e)&&this.context.time.time-this._pointerDownTime[e]>this._longPressTimeThreshold}getIsMouse(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="mouse"}getIsTouch(e){return e<0||e>=this._pointerTypes.length?!1:this._pointerTypes[e]==="touch"}getTouchesPressedCount(){let e=0;for(let t=0;t<this._pointerPressed.length;t++)this._pointerPressed[t]&&this.getIsTouch(t)&&e++;return e}getMouseWheelChanged(e=0){return e>=this._mouseWheelChanged.length?!1:this._mouseWheelChanged[e]}getMouseWheelDeltaY(e=0){return e>=this._mouseWheelDeltaY.length?0:this._mouseWheelDeltaY[e]}getPointerEvent(e){if(!(e>=this._pointerEvent.length))return this._pointerEvent[e]??void 0}*foreachPointerId(e){for(let t=0;t<this._pointerTypes.length;t++)if(this._pointerIsActive(t)){if(e!==void 0){const i=this._pointerTypes[t];if(Array.isArray(e)){let n=!1;for(const s of e)if(i===s){n=!0;break}if(!n)continue}else if(e!==i)continue}yield t}}*foreachTouchId(){for(let e=0;e<this._pointerTypes.length;e++)this._pointerTypes[e]==="touch"&&this._pointerIsActive[e]&&(yield e)}_pointerIsActive(e){return e<0?!1:this._pointerPressed[e]||this._pointerDown[e]||this._pointerUp[e]}context;_pointerDown=[!1];_pointerUp=[!1];_pointerClick=[!1];_pointerDoubleClick=[!1];_pointerPressed=[!1];_pointerPositions=[new ee];_pointerPositionsLastFrame=[new ee];_pointerPositionsDelta=[new ee];_pointerPositionsRC=[new ee];_pointerPositionDown=[new b];_pointerDownTime=[];_pointerUpTime=[];_pointerUpTimestamp=[];_pointerIds=[];_pointerTypes=[""];_mouseWheelChanged=[!1];_mouseWheelDeltaY=[0];_pointerEvent=[];_pointerEventsPressed=[];_pointerSpace=[];_pressedStack=new Map;onDownButton(e,t){let i=this._pressedStack.get(e);i||(i=[],this._pressedStack.set(e,i)),i.push(t)}onReleaseButton(e,t){const i=this._pressedStack.get(e);if(!i)return;const n=i.indexOf(t);n>=0&&i.splice(n,1)}getFirstPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[0]}getLatestPressedButtonForPointer(e){const t=this._pressedStack.get(e);if(t)return t[t.length-1]}getKeyDown(e){if(e!==void 0)return this.isKeyDown(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.startFrame===this.context.time.frameCount)return i.key}return null}getKeyPressed(e){if(e!==void 0)return this.isKeyPressed(e);for(const t in this.keysPressed){const i=this.keysPressed[t];if(i.pressed)return i.key}return null}getKeyUp(e){if(e!==void 0)return this.isKeyUp(e);for(const t in this.keysPressed){const i=this.keysPressed[t];return i.pressed===!1&&i.frame===this.context.time.frameCount}return null}isKeyDown(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyDown(n))return!0;return!1}const i=this.keysPressed[e];return i?i.startFrame===this.context.time.frameCount&&i.pressed:!1}isKeyUp(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyUp(n))return!0;return!1}const i=this.keysPressed[e];return i?i.frame===this.context.time.frameCount&&i.pressed===!1:!1}isKeyPressed(e){if(!this.context.application.isVisible||!this.context.application.hasFocus)return!1;const t=this.getCodeForCommonKeyName(e);if(t!==null){for(const n of t)if(this.isKeyPressed(n))return!0;return!1}const i=this.keysPressed[e];return i&&i.pressed||!1}getCodeForCommonKeyName(e){if(e.length===1){if(e>="0"&&e<="9")return["Digit"+e];if(e>="a"&&e<="z")return["Key"+e.toUpperCase()];if(e==" ")return["Space"]}switch(e){case"shift":case"Shift":return["ShiftLeft","ShiftRight"];case"control":case"Control":return["ControlLeft","ControlRight"];case"alt":case"Alt":return["AltLeft","AltRight"]}return null}createInputEvent(e){switch(e.type){case"pointerdown":st&&Te("Create Pointer down"),this.onDownButton(e.deviceIndex,e.button),this.onDown(e);break;case"pointermove":st&&Te("Create Pointer move"),this.onMove(e);break;case"pointerup":st&&Te("Create Pointer up"),this.onUp(e),this.onReleaseButton(e.deviceIndex,e.button);break}}convertScreenspaceToRaycastSpace(e){return e.x=(e.x-this.context.domX)/this.context.domWidth*2-1,e.y=-((e.y-this.context.domY)/this.context.domHeight)*2+1,e}constructor(e){this.context=e,this.context.post_render_callbacks.push(this.onEndOfFrame)}_htmlEventSource;bindEvents(){this.unbindEvents(),this._htmlEventSource=this.context.renderer.domElement,window.addEventListener("contextmenu",this.onContextMenu),this._htmlEventSource.addEventListener("pointerdown",this.onPointerDown,{passive:!0}),window.addEventListener("pointermove",this.onPointerMove,{passive:!0,capture:!0}),window.addEventListener("pointerup",this.onPointerUp,{passive:!0}),window.addEventListener("pointercancel",this.onPointerCancel,{passive:!0}),window.addEventListener("touchstart",this.onTouchStart,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchEnd,{passive:!0}),this._htmlEventSource.addEventListener("wheel",this.onMouseWheel,{passive:!0}),window.addEventListener("wheel",this.onWheelWindow,{passive:!0}),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keypress",this.onKeyPressed,!1),window.addEventListener("keyup",this.onKeyUp,!1),window.addEventListener("blur",this.onLostFocus)}unbindEvents(){for(const e in this._eventListeners)this._eventListeners[e].length=0;window.removeEventListener("contextmenu",this.onContextMenu),this._htmlEventSource?.removeEventListener("pointerdown",this.onPointerDown),window.removeEventListener("pointermove",this.onPointerMove),window.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("pointercancel",this.onPointerCancel),window.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),this._htmlEventSource?.removeEventListener("wheel",this.onMouseWheel,!1),window.removeEventListener("wheel",this.onWheelWindow,!1),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keypress",this.onKeyPressed,!1),window.removeEventListener("keyup",this.onKeyUp,!1),window.removeEventListener("blur",this.onLostFocus)}dispose(){const e=this.context.post_render_callbacks.indexOf(this.onEndOfFrame);e>=0&&this.context.post_render_callbacks.splice(e,1),this.unbindEvents()}onLostFocus=()=>{for(const e in this.keysPressed)this.keysPressed[e].pressed=!1};_receivedPointerMoveEventsThisFrame=new Array;onEndOfFrame=()=>{this._receivedPointerMoveEventsThisFrame.length=0;for(let e=0;e<this._pointerUp.length;e++)this._pointerUp[e]=!1;for(let e=0;e<this._pointerDown.length;e++)this._pointerDown[e]=!1;for(let e=0;e<this._pointerClick.length;e++)this._pointerClick[e]=!1;for(let e=0;e<this._pointerDoubleClick.length;e++)this._pointerDoubleClick[e]=!1;for(const e of this._pointerPositionsDelta)e.set(0,0);for(let e=0;e<this._mouseWheelChanged.length;e++)this._mouseWheelChanged[e]=!1;for(let e=0;e<this._mouseWheelDeltaY.length;e++)this._mouseWheelDeltaY[e]=0};canReceiveInput(e){return e.target===this.context.renderer?.domElement||e.target===this.context.domElement||this.context.isInAR||this.context.isInAR&&e.target===document.body&&q.isMozillaXR()?!0:(st&&console.warn("CanReceiveInput:False for",e.target),!1)}onContextMenu=e=>{this.canReceiveInput(e)!==!1&&e instanceof PointerEvent&&e.pointerType};keysPressed={};onKeyDown=e=>{if(st&&console.log(`key down ${e.code}, ${this.context.application.hasFocus}`,e),!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(t&&t.pressed)return;this.keysPressed[e.code]={pressed:!0,frame:this.context.time.frameCount+1,startFrame:this.context.time.frameCount+1,key:e.key,code:e.code};const i=new dc("keydown",e,e);this.onDispatchEvent(i)};onKeyPressed=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!0,t.frame=this.context.time.frameCount+1;const i=new dc("keypress",e,e);this.onDispatchEvent(i)};onKeyUp=e=>{if(!this.context.application.hasFocus)return;const t=this.keysPressed[e.code];if(!t)return;t.pressed=!1,t.frame=this.context.time.frameCount+1;const i=new dc("keyup",e,e);this.onDispatchEvent(i)};onWheelWindow=e=>{document.pointerLockElement&&this.onMouseWheel(e)};onMouseWheel=e=>{if(this.canReceiveInput(e)===!1)return;this._mouseWheelDeltaY.length<=0&&this._mouseWheelDeltaY.push(0),this._mouseWheelChanged.length<=0&&this._mouseWheelChanged.push(!1),this._mouseWheelChanged[0]=!0;const t=this._mouseWheelDeltaY[0];this._mouseWheelDeltaY[0]=t+e.deltaY};onPointerDown=e=>{if(this.context.isInAR||this.canReceiveInput(e)===!1)return;e.target instanceof HTMLElement&&e.target.setPointerCapture(e.pointerId);const t=this.getPointerId(e);st&&Te(`pointer down #${t}, identifier:${e.pointerId}`);const i=this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),n=new Mo("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:i,pressure:e.pressure});this.onDown(n)};onPointerMove=e=>{if(this.context.isInAR||this._receivedPointerMoveEventsThisFrame.includes(e.pointerId))return;this._receivedPointerMoveEventsThisFrame.push(e.pointerId);let t=e.button;e.pointerType==="mouse"&&(t=this.getFirstPressedButtonForPointer(0)??0);const i=this.getPointerId(e,t);t===-1&&(t=i);const n=this.getAndUpdateSpatialObjectForScreenPosition(i,e.clientX,e.clientY),s=new Mo("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:i,button:t,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:n,pressure:e.pressure});this.onMove(s)};onPointerCancel=e=>{this.context.isInAR||(st&&console.log("Pointer cancel",e),this.onPointerUp(e))};onPointerUp=e=>{if(this.context.isInAR)return;e.target instanceof HTMLElement&&e.target.releasePointerCapture(e.pointerId);const t=this.getPointerId(e),i=new Mo("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:t,button:e.button,clientX:e.clientX,clientY:e.clientY,pointerType:e.pointerType,buttonName:this.getButtonName(e),device:this.getAndUpdateSpatialObjectForScreenPosition(t,e.clientX,e.clientY),pressure:e.pressure});this.onUp(i),this._pointerIds[t]=-1,st&&console.log("ID="+t,"PointerId="+e.pointerId,"ALL:",[...this._pointerIds])};getPointerId(e,t){return e.pointerType==="mouse"?0+(t??e.button):this.getPointerIndex(e.pointerId)}getButtonName(e){const t=e.button;if(e.pointerType==="mouse")switch(t){case 0:return"left";case 1:return"middle";case 2:return"right"}return"unknown"}onTouchStart=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Mo("pointerdown",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onDown(r)}};onTouchMove=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),r=new Mo("pointermove",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:s,pressure:i.force});this.onMove(r)}};onTouchEnd=e=>{if(this.context.isInAR)for(let t=0;t<e.changedTouches.length;t++){const i=e.changedTouches[t],n=this.getPointerIndex(i.identifier),s=new Mo("pointerup",e,{origin:this,mode:"screen",deviceIndex:0,pointerId:n,button:0,clientX:i.clientX,clientY:i.clientY,pointerType:"touch",buttonName:"unknown",device:this.getAndUpdateSpatialObjectForScreenPosition(n,i.clientX,i.clientY),pressure:i.force});this.onUp(s),this._pointerIds[n]=-1}};tempNearPlaneVector=new b;tempFarPlaneVector=new b;tempLookMatrix=new K;getAndUpdateSpatialObjectForScreenPosition(e,t,i){let n=this._pointerSpace[e];n||(n=new k,this._pointerSpace[e]=n),this._pointerSpace[e]=n;const s=this.context.mainCamera;if(s){const r=this.tempNearPlaneVector.set(t,i,-1);this.convertScreenspaceToRaycastSpace(r);const a=this.tempFarPlaneVector.set(r.x,r.y,1);r.unproject(s),a.unproject(s);const l=s.worldUp||D(0,1,0).applyQuaternion(be(s));this.tempLookMatrix.lookAt(a,r,l),n.position.set(r.x,r.y,r.z),n.quaternion.setFromRotationMatrix(this.tempLookMatrix)}return n}isInRect(e){if(this.context.isInXR)return!0;const t=this.context.domElement.getBoundingClientRect(),i=e.clientX,n=e.clientY,s=i>=t.x&&i<=t.right&&n>=t.y&&n<=t.bottom;return st&&!s&&console.log("Not in rect",t,i,n),s}onDown(e){const t=e.pointerId;if(this.getPointerPressed(t)&&console.warn(`Received pointerDown for pointerId that is already pressed: ${t}`,st?e:""),st&&console.log(e.pointerType,"DOWN",t),!!this.isInRect(e)){for(this.setPointerState(t,this._pointerPressed,!0),this.setPointerState(t,this._pointerDown,!0),this.setPointerStateT(t,this._pointerEvent,e.source);t>=this._pointerTypes.length;)this._pointerTypes.push(e.pointerType);for(this._pointerTypes[t]=e.pointerType;t>=this._pointerPositionDown.length;)this._pointerPositionDown.push(new b);for(this._pointerPositionDown[t].set(e.clientX,e.clientY,e.clientZ??0);t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);this._pointerPositions[t].set(e.clientX,e.clientY),t>=this._pointerDownTime.length&&this._pointerDownTime.push(0),this._pointerDownTime[t]=this.context.time.realtimeSinceStartup,this.updatePointerPosition(e),this._pointerEventsPressed.push(e),this.onDispatchEvent(e)}}onMove(e){const t=e.pointerId,i=this.getPointerPressed(t);i===!1&&!this.isInRect(e)||e.pointerType==="touch"&&!i||(this.updatePointerPosition(e),this.setPointerStateT(t,this._pointerEvent,e.source),this.onDispatchEvent(e))}onUp(e){const t=e.pointerId;if(!this.getPointerPressed(t)){st&&console.log(e.pointerType,"UP",t,"was not down");return}st&&console.log(e.pointerType,"UP",t),this.setPointerState(t,this._pointerPressed,!1),this.setPointerStateT(t,this._pointerEvent,e.source),this.setPointerState(t,this._pointerUp,!0),this.updatePointerPosition(e);for(let a=this._pointerEventsPressed.length-1;a>=0;a--)if(this._pointerEventsPressed[a].pointerId===t){this._pointerEventsPressed.splice(a,1);break}if(!this._pointerPositionDown[t]){st&&ye("Received pointer up event without matching down event for button: "+t),console.warn("Received pointer up event without matching down event for button: "+t);return}const i=this._pointerUpTime[t],n=this._pointerDownTime[t],s=this.context.time.realtimeSinceStartup,r=s-n;if(t>=this._pointerUpTime.length&&this._pointerUpTime.push(-99),this._pointerUpTime[t]=s,r<1){let a=e.clientX-this._pointerPositionDown[t].x,l=e.clientY-this._pointerPositionDown[t].y,c=0;if(e.isSpatial&&e.clientZ!=null&&(c=e.clientZ-this._pointerPositionDown[t].z,a*=200,l*=200,c*=200),Math.abs(a)<5&&Math.abs(l)<5&&Math.abs(c)<5){this.setPointerState(t,this._pointerClick,!0),e.isClick=!0;const h=s-i;st&&console.log("CLICK",t,a,l,c,h),h<this._doubleClickTimeThreshold&&h>0&&(this.setPointerState(t,this._pointerDoubleClick,!0),e.isDoubleClick=!0)}}this.onDispatchEvent(e)}updatePointerPosition(e){const t=e.pointerId;for(;t>=this._pointerPositions.length;)this._pointerPositions.push(new ee);for(;t>=this._pointerPositionsLastFrame.length;)this._pointerPositionsLastFrame.push(new ee);for(;t>=this._pointerPositionsDelta.length;)this._pointerPositionsDelta.push(new ee);const i=this._pointerPositionsLastFrame[t];i.copy(this._pointerPositions[t]);const n=this._pointerPositionsDelta[t];let s=e.clientX-i.x,r=e.clientY-i.y;if(e.source instanceof MouseEvent||e.source instanceof TouchEvent){const h=e.source;s===0&&h.movementX!==0&&(s=h.movementX||0),r===0&&h.movementY!==0&&(r=h.movementY||0)}n.x+=s,n.y+=r,this._pointerPositions[t].x=e.clientX,this._pointerPositions[t].y=e.clientY;const a=e.clientX,l=e.clientY;for(;t>=this._pointerPositionsRC.length;)this._pointerPositionsRC.push(new ee);const c=this._pointerPositionsRC[t];c.set(a,l),this.convertScreenspaceToRaycastSpace(c)}getPointerIndex(e){let t=-1;for(let i=0;i<this._pointerIds.length;i++){if(this._pointerIds[i]===e)return i;t===-1&&this._pointerIds[i]===-1&&(t=i)}return t!==-1?(this._pointerIds[t]=e,t):(st&&console.log("PUSH pointerId:",e),this._pointerIds.push(e),this._pointerIds.length-1)}setPointerState(e,t,i){t[e]=i}setPointerStateT(e,t,i){return t[e]=i,i}onDispatchEvent(e){const t=z.Current;try{z.Current=this.context,this.dispatchEvent(e)}finally{z.Current=t}}}const Da=new K().makeRotationY(Math.PI),Gi=new U().setFromAxisAngle(new b(0,1,0),Math.PI),zO=v("debugwebxr");class NO{priority=-1e5;gameObject;isXRRig(){return!0}get isActive(){return this.gameObject.visible}constructor(){if(this.gameObject=new k,this.gameObject.name="Implicit XR Rig",zO){const e=Cg(16733661);e.position.y+=.5,this.gameObject.add(e)}}}const Ro=v("debugwebxr"),Wd=v("debugcustomgesture"),VO="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",WO="generic-trigger",$O=new U().setFromEuler(new ot(wo.degToRad(0),wo.degToRad(-90),wo.degToRad(-90))),HO=new b(.04,-.04,0);class hg{xr;get context(){return this.xr.context}inputSource;index=0;emitEvents=!0;get connected(){return this._connected}_connected=!0;get isTracking(){return this._isTracking}_isTracking=!1;get gamepad(){return this.__gamepad??=this.inputSource.gamepad}__gamepad;get isHand(){return this.hand!=null}get hand(){return this.__hand??=this.inputSource.hand}__hand;get handObject(){return this.context.renderer.xr.getHand(this.index)}get profiles(){return this.inputSource.profiles}get layout(){return this._layout}get targetRayMode(){return this.inputSource.targetRayMode}get targetRaySpace(){return this.inputSource.targetRaySpace}get gripSpace(){return this.inputSource.gripSpace}get side(){return this.__side??=this.inputSource.handedness}__side=void 0;get isRight(){return this.side==="right"}get isLeft(){return this.side==="left"}get isStylus(){return this._isMxInk}getHitTestSource(){return this._hitTestSource||this._requestHitTestSource(),this._hitTestSource}get hasHitTestSource(){return this._hitTestSource}cancelHitTestSource(){this._hitTestSource&&(this._hitTestSource.cancel(),this._hitTestSource=void 0)}_hitTestSource=void 0;_hasSelectEvent=!1;get hasSelectEvent(){return this._hasSelectEvent}_isMxInk=!1;_isMetaQuestTouchController=!1;getHitTest(){return this.xr.getHitTest(this)}_handJointPoses=new Map;getHandJointPose(e,t){if(t=t||this.xr.frame,!this.hand||!t?.getJointPose||!this.xr.referenceSpace)return null;let i=this._handJointPoses?.get(e);return i||(i=t.getJointPose(e,this.xr.referenceSpace),i&&this._handJointPoses.set(e,i),i)}_gripMatrix=new K;_gripPosition=new b;_gripQuaternion=new U;_linearVelocity=new b;_rayPositionRaw=new b;_rayRotationRaw=new U;_rayMatrix=new K;_rayPosition=new b;_rayQuaternion=new U;get gripPosition(){return D(this._gripPosition)}get gripQuaternion(){return ri(this._gripQuaternion)}get gripMatrix(){return this._gripMatrix}get gripLinearVelocity(){return D(this._linearVelocity).applyQuaternion(Gi)}get rayPosition(){return D(this._rayPosition)}get rayQuaternion(){return ri(this._rayQuaternion)}get gripWorldPosition(){return D(this._gripWorldPosition)}_gripWorldPosition=new b;get gripWorldQuaternion(){return ri(this._gripWorldQuaternion)}_gripWorldQuaternion=new U;get rayWorldPosition(){return D(this._rayWorldPosition)}_rayWorldPosition=new b;updateRayWorldPosition(){const e=this.xr.context.mainCamera?.parent;this._rayWorldPosition.copy(this._rayPositionRaw),e&&this._rayWorldPosition.applyMatrix4(e.matrixWorld)}get rayWorldQuaternion(){return ri(this._rayWorldQuaternion)}_rayWorldQuaternion=new U;get pinchPosition(){return D(this._pinchPosition)}_pinchPosition=new b;updateRayWorldQuaternion(){const e=this.xr.context.mainCamera?.parent,t=e?be(e):void 0;this._rayWorldQuaternion.copy(this._rayRotationRaw).multiply(Gi),t&&this._rayWorldQuaternion.premultiply(t)}get ray(){return this._ray.origin.copy(this.rayWorldPosition),this._ray.direction.copy(D(0,0,1).applyQuaternion(this.rayWorldQuaternion)),this._ray}_ray;_hand_wristDotUp=void 0;get handWristDotUp(){if(this._hand_wristDotUp!==void 0)return this._hand_wristDotUp;const e=this.handObject?.joints.wrist;if(e){const t=D(0,1,0).applyQuaternion(e.quaternion),i=D(0,1,0).dot(t);return this._hand_wristDotUp=i}}get isHandUpsideDown(){return this.handWristDotUp!==void 0?this.handWristDotUp<-.7:!1}get isTeleportGesture(){return this.isHandUpsideDown&&this.getGesture("pinch")?.isDown}get object(){return this._object}_object;_gripSpaceObject;_raySpaceObject;model=null;_debugAxesHelper=new Si(.15);_debugGripAxesHelper=new Si(.07);_debugRayAxesHelper=new Si(.07);async getModelUrl(){return this.getMotionController?.then(e=>e?.assetUrl||null)}constructor(e,t,i){this.xr=e,this.inputSource=t,this.index=i,this._object=new k,this._object.name=`NeedleXRController_${i}`,Ro&&(this._object.add(this._debugAxesHelper),this._gripSpaceObject=new k,this._raySpaceObject=new k,this._gripSpaceObject.name=`NeedleXRController_${i}_gripSpace`,this._raySpaceObject.name=`NeedleXRController_${i}_raySpace`,this._gripSpaceObject.add(this._debugGripAxesHelper),this._raySpaceObject.add(this._debugRayAxesHelper),this.xr.context.scene.add(this._gripSpaceObject),this.xr.context.scene.add(this._raySpaceObject)),this.xr.context.scene.add(this._object),this._ray=new vo,this.pointerInit={origin:this,pointerType:this.hand?"hand":"controller",deviceIndex:this.index,pointerId:-1,mode:this.inputSource.targetRayMode,ray:this._ray,device:this._object,buttonName:"none"},this.initialize(),this.subscribeEvents()}_hitTestSourcePromise=null;_requestHitTestSource(){return this._hitTestSourcePromise?this._hitTestSourcePromise:this.xr.mode==="immersive-ar"&&this.inputSource.targetRayMode==="tracked-pointer"&&this.xr.session.requestHitTestSourceForTransientInput?this._hitTestSourcePromise=this.xr.session.requestHitTestSourceForTransientInput({profile:this.inputSource.profiles[0],offsetRay:new XRRay})?.then(e=>(this._hitTestSourcePromise=null,this.connected?this._hitTestSource=e:(e.cancel(),null)))??null:null}onPointerHits=e=>{};onUpdate(e){this.onUpdateFrame(e),this.updateInputEvents(),this.onUpdateMove()}onRenderDebug(){B.DrawSphere(this.rayWorldPosition,.003),B.DrawDirection(this.rayWorldPosition,D(0,0,10).applyQuaternion(this.rayWorldQuaternion));const e=(this.inputSource.gripSpace?this.gripWorldPosition:this.object.worldPosition).sub(this.object.worldForward.multiplyScalar(.1)),t=this.inputSource.profiles.join(`
146
146
  `);let i=`Controller[${this.index}] (${this.inputSource.targetRayMode}, ${this.side})
147
147
  C:${this.connected?"x":"-"} T:${this.isTracking?"x":"-"} Hand:${this.inputSource.hand?"x":"-"} Pen: ${this._isMxInk?"x":"-"}`;if(this.inputSource.hand&&(i+=`