@relu-interactives/spatial-ecs 0.11.0 → 0.11.1

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 (503) hide show
  1. package/dist/{System-BldSHxZV.d.cts → System-D8vm-Jvv.d.cts} +110 -3
  2. package/dist/{System-CADhPyQs.d.ts → System-ttkDQCrj.d.ts} +110 -3
  3. package/dist/{XRHandPose-D3Ab1Dfs.d.cts → XRHandPose-C97XVW2R.d.cts} +2 -41
  4. package/dist/{XRHandPose-BNSwd1y9.d.ts → XRHandPose-CxXtWF1y.d.ts} +2 -41
  5. package/dist/animation/index.cjs +33 -1
  6. package/dist/animation/index.cjs.map +1 -1
  7. package/dist/animation/index.js +1 -1
  8. package/dist/{chunk-TY3XCHOR.js → chunk-2DJBNWBB.js} +56 -15
  9. package/dist/chunk-2DJBNWBB.js.map +1 -0
  10. package/dist/{chunk-WWP46AEF.js → chunk-4FHJA6U4.js} +8 -4
  11. package/dist/chunk-4FHJA6U4.js.map +1 -0
  12. package/dist/{chunk-GSWC6LLD.js → chunk-GMSFEXUZ.js} +35 -3
  13. package/dist/chunk-GMSFEXUZ.js.map +1 -0
  14. package/dist/{chunk-JEPUCLZX.js → chunk-QAZCVCMP.js} +88 -27
  15. package/dist/chunk-QAZCVCMP.js.map +1 -0
  16. package/dist/{chunk-NXASMBDS.js → chunk-SM5KGNYX.js} +4 -4
  17. package/dist/{chunk-NXASMBDS.js.map → chunk-SM5KGNYX.js.map} +1 -1
  18. package/dist/{chunk-JNYPJB55.js → chunk-T7SRBLPJ.js} +24 -4
  19. package/dist/chunk-T7SRBLPJ.js.map +1 -0
  20. package/dist/components/index.cjs +21 -1
  21. package/dist/components/index.cjs.map +1 -1
  22. package/dist/components/index.d.cts +3 -3
  23. package/dist/components/index.d.ts +3 -3
  24. package/dist/components/index.js +1 -1
  25. package/dist/docs/api/Behaviour/classes/Behaviour.md +187 -46
  26. package/dist/docs/api/Behaviour/type-aliases/UiInteractionEvent.md +5 -5
  27. package/dist/docs/api/Component/classes/Component.md +7 -1
  28. package/dist/docs/api/components/classes/AnimationComponent.md +26 -26
  29. package/dist/docs/api/components/classes/AudioComponent.md +20 -19
  30. package/dist/docs/api/components/classes/BoneAttachmentComponent.md +65 -0
  31. package/dist/docs/api/components/classes/CameraComponent.md +14 -14
  32. package/dist/docs/api/components/classes/EntityType.md +3 -3
  33. package/dist/docs/api/components/classes/Environment.md +3 -3
  34. package/dist/docs/api/components/classes/IKComponent.md +59 -0
  35. package/dist/docs/api/components/classes/ImageComponent.md +7 -7
  36. package/dist/docs/api/components/classes/ImageTarget.md +7 -7
  37. package/dist/docs/api/components/classes/ImageTargetAnchor.md +4 -4
  38. package/dist/docs/api/components/classes/InstanceSlotComponent.md +4 -4
  39. package/dist/docs/api/components/classes/InstancedMeshComponent.md +10 -10
  40. package/dist/docs/api/components/classes/LightComponent.md +6 -6
  41. package/dist/docs/api/components/classes/MaterialComponent.md +14 -14
  42. package/dist/docs/api/components/classes/MeshComponent.md +3 -3
  43. package/dist/docs/api/components/classes/MeshGeometryComponent.md +9 -9
  44. package/dist/docs/api/components/classes/ModelComponent.md +6 -6
  45. package/dist/docs/api/components/classes/Name.md +3 -3
  46. package/dist/docs/api/components/classes/NetworkIdentityComponent.md +42 -0
  47. package/dist/docs/api/components/classes/NetworkSpawnerComponent.md +48 -0
  48. package/dist/docs/api/components/classes/NetworkTransformComponent.md +51 -0
  49. package/dist/docs/api/components/classes/NetworkedPropsComponent.md +47 -0
  50. package/dist/docs/api/components/classes/Object3DRef.md +4 -4
  51. package/dist/docs/api/components/classes/ParentId.md +3 -3
  52. package/dist/docs/api/components/classes/PhysicsComponent.md +7 -7
  53. package/dist/docs/api/components/classes/Postprocessing.md +3 -3
  54. package/dist/docs/api/components/classes/PrefabInstance.md +5 -5
  55. package/dist/docs/api/components/classes/PrefabNode.md +3 -3
  56. package/dist/docs/api/components/classes/ScriptComponent.md +5 -5
  57. package/dist/docs/api/components/classes/ScriptObjectComponent.md +9 -9
  58. package/dist/docs/api/components/classes/Selectable.md +3 -3
  59. package/dist/docs/api/components/classes/SelectionTransformState.md +5 -5
  60. package/dist/docs/api/components/classes/SpriteComponent.md +7 -7
  61. package/dist/docs/api/components/classes/TransformComponent.md +12 -12
  62. package/dist/docs/api/components/classes/UIButtonComponent.md +18 -14
  63. package/dist/docs/api/components/classes/UIPanelComponent.md +13 -11
  64. package/dist/docs/api/components/classes/UISliderComponent.md +16 -11
  65. package/dist/docs/api/components/classes/UITextComponent.md +14 -12
  66. package/dist/docs/api/components/classes/UIToggleComponent.md +12 -9
  67. package/dist/docs/api/components/classes/VRTeleportAreaComponent.md +6 -6
  68. package/dist/docs/api/components/classes/VideoComponent.md +28 -28
  69. package/dist/docs/api/components/classes/XRAnchorComponent.md +3 -3
  70. package/dist/docs/api/components/classes/XREnvironmentComponent.md +5 -5
  71. package/dist/docs/api/components/classes/XRHandPoseComponent.md +4 -4
  72. package/dist/docs/api/components/classes/XRInteractableComponent.md +28 -28
  73. package/dist/docs/api/components/classes/XRInteractorComponent.md +10 -10
  74. package/dist/docs/api/components/classes/XRInteractorSideComponent.md +3 -3
  75. package/dist/docs/api/components/classes/XRRigComponent.md +17 -17
  76. package/dist/docs/api/components/functions/createAttachPoint.md +1 -1
  77. package/dist/docs/api/components/functions/createHandPoseEntry.md +1 -1
  78. package/dist/docs/api/components/functions/defaultMaterialValue.md +1 -1
  79. package/dist/docs/api/components/functions/handPoseDefinitionFor.md +1 -1
  80. package/dist/docs/api/components/functions/normalizeBoneHold.md +25 -0
  81. package/dist/docs/api/components/functions/normalizeEnvironmentLighting.md +1 -1
  82. package/dist/docs/api/components/functions/normalizeIKChain.md +25 -0
  83. package/dist/docs/api/components/functions/normalizePhysicsState.md +1 -1
  84. package/dist/docs/api/components/functions/setModelLoadState.md +1 -1
  85. package/dist/docs/api/components/functions/setPhysicsLiveRef.md +1 -1
  86. package/dist/docs/api/components/index.md +18 -0
  87. package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +9 -9
  88. package/dist/docs/api/components/type-aliases/BoneAttachmentOptions.md +35 -0
  89. package/dist/docs/api/components/type-aliases/BoneHold.md +34 -0
  90. package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +13 -13
  91. package/dist/docs/api/components/type-aliases/CameraProjection.md +1 -1
  92. package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +1 -1
  93. package/dist/docs/api/components/type-aliases/ColliderShape.md +1 -1
  94. package/dist/docs/api/components/type-aliases/ColliderState.md +20 -20
  95. package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +4 -4
  96. package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +1 -1
  97. package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +8 -8
  98. package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +1 -1
  99. package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +1 -1
  100. package/dist/docs/api/components/type-aliases/EnvironmentLightingState.md +9 -9
  101. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxImageProjection.md +1 -1
  102. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +8 -8
  103. package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +1 -1
  104. package/dist/docs/api/components/type-aliases/EnvironmentState.md +6 -6
  105. package/dist/docs/api/components/type-aliases/EnvironmentToneMapping.md +1 -1
  106. package/dist/docs/api/components/type-aliases/IKChain.md +37 -0
  107. package/dist/docs/api/components/type-aliases/IKLimb.md +15 -0
  108. package/dist/docs/api/components/type-aliases/IKOptions.md +27 -0
  109. package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +3 -3
  110. package/dist/docs/api/components/type-aliases/ImageTargetReference.md +7 -7
  111. package/dist/docs/api/components/type-aliases/InstanceTransform.md +13 -13
  112. package/dist/docs/api/components/type-aliases/InstancedMeshKind.md +1 -1
  113. package/dist/docs/api/components/type-aliases/LightShadowState.md +8 -8
  114. package/dist/docs/api/components/type-aliases/LightValueState.md +12 -12
  115. package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +1 -1
  116. package/dist/docs/api/components/type-aliases/MaterialValueState.md +28 -28
  117. package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +1 -1
  118. package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +7 -7
  119. package/dist/docs/api/components/type-aliases/ModelLoadState.md +1 -1
  120. package/dist/docs/api/components/type-aliases/NetValue.md +23 -0
  121. package/dist/docs/api/components/type-aliases/NetworkTransformOptions.md +18 -0
  122. package/dist/docs/api/components/type-aliases/PhysicsState.md +3 -3
  123. package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +3 -3
  124. package/dist/docs/api/components/type-aliases/PostprocessingState.md +62 -62
  125. package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +3 -3
  126. package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +2 -2
  127. package/dist/docs/api/components/type-aliases/RigidbodyState.md +17 -17
  128. package/dist/docs/api/components/type-aliases/RigidbodyType.md +1 -1
  129. package/dist/docs/api/components/type-aliases/ScriptEntry.md +8 -8
  130. package/dist/docs/api/components/type-aliases/ScriptObjectComponentInput.md +1 -1
  131. package/dist/docs/api/components/type-aliases/ScriptObjectRuntimeState.md +1 -1
  132. package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +1 -1
  133. package/dist/docs/api/components/type-aliases/TransformData.md +4 -4
  134. package/dist/docs/api/components/type-aliases/TransformModeValue.md +1 -1
  135. package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +1 -1
  136. package/dist/docs/api/components/type-aliases/UIButtonOptions.md +21 -13
  137. package/dist/docs/api/components/type-aliases/UIPanelOptions.md +14 -10
  138. package/dist/docs/api/components/type-aliases/UISliderOptions.md +20 -10
  139. package/dist/docs/api/components/type-aliases/UITextOptions.md +15 -11
  140. package/dist/docs/api/components/type-aliases/UIToggleOptions.md +14 -8
  141. package/dist/docs/api/components/type-aliases/UiFollowMode.md +1 -1
  142. package/dist/docs/api/components/type-aliases/UiIconPosition.md +13 -0
  143. package/dist/docs/api/components/type-aliases/UiSliderVariant.md +13 -0
  144. package/dist/docs/api/components/type-aliases/UiTextAlign.md +1 -1
  145. package/dist/docs/api/components/type-aliases/UiTextVAlign.md +1 -1
  146. package/dist/docs/api/components/type-aliases/UiToggleVariant.md +13 -0
  147. package/dist/docs/api/components/type-aliases/VRTeleportAreaOptions.md +5 -5
  148. package/dist/docs/api/components/type-aliases/Vec3.md +4 -4
  149. package/dist/docs/api/components/type-aliases/VrTeleportShape.md +1 -1
  150. package/dist/docs/api/components/type-aliases/XRAnchorOptions.md +2 -2
  151. package/dist/docs/api/components/type-aliases/XRHandPoseOptions.md +3 -3
  152. package/dist/docs/api/components/type-aliases/XRInteractableOptions.md +27 -27
  153. package/dist/docs/api/components/type-aliases/XRInteractorOptions.md +9 -9
  154. package/dist/docs/api/components/type-aliases/XRRigOptions.md +16 -16
  155. package/dist/docs/api/components/type-aliases/XrAttachPoint.md +13 -13
  156. package/dist/docs/api/components/type-aliases/XrDistanceGrabBehavior.md +1 -1
  157. package/dist/docs/api/components/type-aliases/XrEnvironmentKind.md +1 -1
  158. package/dist/docs/api/components/type-aliases/XrEnvironmentOrientation.md +1 -1
  159. package/dist/docs/api/components/type-aliases/XrEnvironmentPhysics.md +1 -1
  160. package/dist/docs/api/components/type-aliases/XrGrabGesture.md +1 -1
  161. package/dist/docs/api/components/type-aliases/XrGrabHands.md +1 -1
  162. package/dist/docs/api/components/type-aliases/XrGrabReach.md +1 -1
  163. package/dist/docs/api/components/type-aliases/XrHandPoseEntry.md +12 -12
  164. package/dist/docs/api/components/type-aliases/XrHandPreset.md +1 -1
  165. package/dist/docs/api/components/type-aliases/XrInteractorSide.md +1 -1
  166. package/dist/docs/api/components/type-aliases/XrInteractorType.md +1 -1
  167. package/dist/docs/api/components/type-aliases/XrLocomotionMode.md +1 -1
  168. package/dist/docs/api/components/type-aliases/XrTrackingOrigin.md +1 -1
  169. package/dist/docs/api/components/type-aliases/XrTwoHandRotation.md +1 -1
  170. package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +1 -1
  171. package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_LIGHTING.md +1 -1
  172. package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +1 -1
  173. package/dist/docs/api/components/variables/DEFAULT_INSTANCED_MESH_PARAMETERS.md +1 -1
  174. package/dist/docs/api/components/variables/DEFAULT_INSTANCE_TRANSFORM.md +1 -1
  175. package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +1 -1
  176. package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +1 -1
  177. package/dist/docs/api/components/variables/DEFAULT_POSE_CURLS.md +1 -1
  178. package/dist/docs/api/components/variables/DEFAULT_POSE_DIRECTIONS.md +1 -1
  179. package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +1 -1
  180. package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +1 -1
  181. package/dist/docs/api/components/variables/MODEL_NO_PATH_MESSAGE.md +1 -1
  182. package/dist/docs/api/index/classes/AnimationStateMachine.md +16 -16
  183. package/dist/docs/api/index/classes/AnimationStateManager.md +13 -13
  184. package/dist/docs/api/index/classes/AnimationSystem.md +3 -3
  185. package/dist/docs/api/index/classes/AudioMixer.md +161 -0
  186. package/dist/docs/api/index/classes/AudioSystem.md +138 -4
  187. package/dist/docs/api/index/classes/BoneHoldSystem.md +54 -0
  188. package/dist/docs/api/index/classes/CameraSyncSystem.md +2 -2
  189. package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +4 -4
  190. package/dist/docs/api/index/classes/HandPoseTracker.md +6 -6
  191. package/dist/docs/api/index/classes/IKSystem.md +98 -0
  192. package/dist/docs/api/index/classes/InputSystem.md +33 -33
  193. package/dist/docs/api/index/classes/InstancedMeshSystem.md +2 -2
  194. package/dist/docs/api/index/classes/LightSyncSystem.md +2 -2
  195. package/dist/docs/api/index/classes/MaterialSyncSystem.md +3 -3
  196. package/dist/docs/api/index/classes/MeshGeometrySystem.md +2 -2
  197. package/dist/docs/api/index/classes/ObjectManagementSystem.md +269 -14
  198. package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +2 -2
  199. package/dist/docs/api/index/classes/PhysicsSyncSystem.md +4 -4
  200. package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +4 -4
  201. package/dist/docs/api/index/classes/RenderSystem.md +3 -3
  202. package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +4 -4
  203. package/dist/docs/api/index/classes/ScriptObject.md +10 -10
  204. package/dist/docs/api/index/classes/ScriptObjectSystem.md +6 -6
  205. package/dist/docs/api/index/classes/SlotChooser.md +59 -0
  206. package/dist/docs/api/index/classes/TeleportAimGate.md +4 -4
  207. package/dist/docs/api/index/classes/ThrowVelocityTracker.md +4 -4
  208. package/dist/docs/api/index/classes/TransformSyncSystem.md +2 -2
  209. package/dist/docs/api/index/classes/UIInteractionSystem.md +3 -3
  210. package/dist/docs/api/index/classes/UIPanelSystem.md +4 -4
  211. package/dist/docs/api/index/classes/VRTeleportAreaSystem.md +2 -2
  212. package/dist/docs/api/index/classes/VideoSystem.md +4 -4
  213. package/dist/docs/api/index/classes/World.md +168 -98
  214. package/dist/docs/api/index/classes/XRAnchorSystem.md +4 -4
  215. package/dist/docs/api/index/classes/XRControllerVisualSystem.md +4 -4
  216. package/dist/docs/api/index/classes/XREnvironmentSystem.md +7 -7
  217. package/dist/docs/api/index/classes/XRHandPoseSystem.md +5 -5
  218. package/dist/docs/api/index/classes/XRHitTestSystem.md +4 -4
  219. package/dist/docs/api/index/classes/XRHoverVisualSystem.md +4 -4
  220. package/dist/docs/api/index/classes/XRInputSystem.md +9 -9
  221. package/dist/docs/api/index/classes/XRInteractionSystem.md +18 -18
  222. package/dist/docs/api/index/classes/XRLocomotionSystem.md +7 -7
  223. package/dist/docs/api/index/classes/XRSessionSystem.md +6 -6
  224. package/dist/docs/api/index/classes/XRTeleportVisualSystem.md +4 -4
  225. package/dist/docs/api/index/functions/angularVelocityFrom.md +1 -1
  226. package/dist/docs/api/index/functions/applyHandMaterial.md +1 -1
  227. package/dist/docs/api/index/functions/applyPrefabToSnapshotInstances.md +1 -1
  228. package/dist/docs/api/index/functions/arcGroundCrossing.md +1 -1
  229. package/dist/docs/api/index/functions/buildComponentValueMaps.md +1 -1
  230. package/dist/docs/api/index/functions/buildNodeKeyMapsFromSnapshot.md +1 -1
  231. package/dist/docs/api/index/functions/buildNodeMapsFromSnapshot.md +1 -1
  232. package/dist/docs/api/index/functions/canonicalizeComponentValue.md +1 -1
  233. package/dist/docs/api/index/functions/clearModelCache.md +1 -1
  234. package/dist/docs/api/index/functions/clearPrefabCache.md +1 -1
  235. package/dist/docs/api/index/functions/cloneHandPose.md +1 -1
  236. package/dist/docs/api/index/functions/collectDiffPaths.md +1 -1
  237. package/dist/docs/api/index/functions/collectDirectPrefabDependencies.md +1 -1
  238. package/dist/docs/api/index/functions/collectEntitySubtree.md +1 -1
  239. package/dist/docs/api/index/functions/collectSnapshotSubtreeIds.md +1 -1
  240. package/dist/docs/api/index/functions/computeFingerCurl.md +1 -1
  241. package/dist/docs/api/index/functions/computeHandShape.md +1 -1
  242. package/dist/docs/api/index/functions/computeInstanceOverrides.md +1 -1
  243. package/dist/docs/api/index/functions/computePalmPose.md +1 -1
  244. package/dist/docs/api/index/functions/computePalmWidth.md +1 -1
  245. package/dist/docs/api/index/functions/computePinch.md +1 -1
  246. package/dist/docs/api/index/functions/computeSpread.md +1 -1
  247. package/dist/docs/api/index/functions/createAnimationComponent.md +1 -1
  248. package/dist/docs/api/index/functions/createAudioComponent.md +1 -1
  249. package/dist/docs/api/index/functions/createBoneAttachmentComponent.md +28 -0
  250. package/dist/docs/api/index/functions/createCameraComponent.md +1 -1
  251. package/dist/docs/api/index/functions/createEntityTypeComponent.md +1 -1
  252. package/dist/docs/api/index/functions/createEnvironmentComponent.md +1 -1
  253. package/dist/docs/api/index/functions/createGLTFLoader.md +30 -0
  254. package/dist/docs/api/index/functions/createHandMaterial.md +1 -1
  255. package/dist/docs/api/index/functions/createIKComponent.md +28 -0
  256. package/dist/docs/api/index/functions/createImageComponent.md +1 -1
  257. package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +1 -1
  258. package/dist/docs/api/index/functions/createImageTargetComponent.md +1 -1
  259. package/dist/docs/api/index/functions/createInstanceSlotComponent.md +1 -1
  260. package/dist/docs/api/index/functions/createInstancedMeshComponent.md +1 -1
  261. package/dist/docs/api/index/functions/createLightComponent.md +1 -1
  262. package/dist/docs/api/index/functions/createMaterialComponent.md +1 -1
  263. package/dist/docs/api/index/functions/createMeshComponent.md +1 -1
  264. package/dist/docs/api/index/functions/createMeshGeometryComponent.md +1 -1
  265. package/dist/docs/api/index/functions/createModelComponent.md +1 -1
  266. package/dist/docs/api/index/functions/createNameComponent.md +1 -1
  267. package/dist/docs/api/index/functions/createNetworkIdentityComponent.md +24 -0
  268. package/dist/docs/api/index/functions/createNetworkSpawnerComponent.md +28 -0
  269. package/dist/docs/api/index/functions/createNetworkTransformComponent.md +28 -0
  270. package/dist/docs/api/index/functions/createNetworkedPropsComponent.md +28 -0
  271. package/dist/docs/api/index/functions/createObject3DRefComponent.md +1 -1
  272. package/dist/docs/api/index/functions/createParentIdComponent.md +1 -1
  273. package/dist/docs/api/index/functions/createPhysicsComponent.md +1 -1
  274. package/dist/docs/api/index/functions/createPostprocessingComponent.md +1 -1
  275. package/dist/docs/api/index/functions/createScriptComponent.md +1 -1
  276. package/dist/docs/api/index/functions/createScriptObjectComponent.md +1 -1
  277. package/dist/docs/api/index/functions/createSelectableComponent.md +1 -1
  278. package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +1 -1
  279. package/dist/docs/api/index/functions/createSpriteComponent.md +1 -1
  280. package/dist/docs/api/index/functions/createTransformComponent.md +1 -1
  281. package/dist/docs/api/index/functions/createUIButtonComponent.md +1 -1
  282. package/dist/docs/api/index/functions/createUIPanelComponent.md +1 -1
  283. package/dist/docs/api/index/functions/createUISliderComponent.md +1 -1
  284. package/dist/docs/api/index/functions/createUITextComponent.md +1 -1
  285. package/dist/docs/api/index/functions/createUIToggleComponent.md +1 -1
  286. package/dist/docs/api/index/functions/createVRTeleportAreaComponent.md +1 -1
  287. package/dist/docs/api/index/functions/createVideoComponent.md +1 -1
  288. package/dist/docs/api/index/functions/createXRAnchorComponent.md +1 -1
  289. package/dist/docs/api/index/functions/createXRHandPoseComponent.md +1 -1
  290. package/dist/docs/api/index/functions/createXRInteractableComponent.md +1 -1
  291. package/dist/docs/api/index/functions/createXRInteractorComponent.md +1 -1
  292. package/dist/docs/api/index/functions/createXRInteractorSideComponent.md +1 -1
  293. package/dist/docs/api/index/functions/createXRRigComponent.md +1 -1
  294. package/dist/docs/api/index/functions/decanonicalizeComponentValue.md +1 -1
  295. package/dist/docs/api/index/functions/despawnPrefab.md +1 -1
  296. package/dist/docs/api/index/functions/encodeOverride.md +1 -1
  297. package/dist/docs/api/index/functions/estimateHandScale.md +1 -1
  298. package/dist/docs/api/index/functions/findModelBone.md +30 -0
  299. package/dist/docs/api/index/functions/findSnapshotRootEntityIds.md +1 -1
  300. package/dist/docs/api/index/functions/findTopLevelNestedRegions.md +1 -1
  301. package/dist/docs/api/index/functions/getHandPosePreset.md +1 -1
  302. package/dist/docs/api/index/functions/gripQuaternion.md +36 -0
  303. package/dist/docs/api/index/functions/groupOverridePaths.md +1 -1
  304. package/dist/docs/api/index/functions/handPoseFromCurls.md +1 -1
  305. package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +1 -1
  306. package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +1 -1
  307. package/dist/docs/api/index/functions/indexSnapshotByEntity.md +1 -1
  308. package/dist/docs/api/index/functions/instantiateSubtree.md +1 -1
  309. package/dist/docs/api/index/functions/listModelBones.md +25 -0
  310. package/dist/docs/api/index/functions/loadPrefab.md +1 -1
  311. package/dist/docs/api/index/functions/loadSharedGltf.md +1 -1
  312. package/dist/docs/api/index/functions/matchHandPose.md +1 -1
  313. package/dist/docs/api/index/functions/mergeComponentValue.md +1 -1
  314. package/dist/docs/api/index/functions/parseOverride.md +1 -1
  315. package/dist/docs/api/index/functions/parsePrefabAsset.md +1 -1
  316. package/dist/docs/api/index/functions/prefabFileVersionFor.md +1 -1
  317. package/dist/docs/api/index/functions/readXrCapabilities.md +1 -1
  318. package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +1 -1
  319. package/dist/docs/api/index/functions/registerDefaultFactories.md +1 -1
  320. package/dist/docs/api/index/functions/remapSnapshotEntityIds.md +3 -3
  321. package/dist/docs/api/index/functions/resolveDracoDecoderPath.md +1 -1
  322. package/dist/docs/api/index/functions/restoreComponentState.md +1 -1
  323. package/dist/docs/api/index/functions/restorePostCreateComponents.md +1 -1
  324. package/dist/docs/api/index/functions/sampleTeleportArc.md +1 -1
  325. package/dist/docs/api/index/functions/serializeEntitySubtree.md +1 -1
  326. package/dist/docs/api/index/functions/setDracoDecoderPath.md +1 -1
  327. package/dist/docs/api/index/functions/setPrefabAssetUrlResolver.md +1 -1
  328. package/dist/docs/api/index/functions/setWorldQuaternion.md +26 -0
  329. package/dist/docs/api/index/functions/soundBankFiles.md +25 -0
  330. package/dist/docs/api/index/functions/spawnPrefab.md +1 -1
  331. package/dist/docs/api/index/functions/twoBoneIK.md +41 -0
  332. package/dist/docs/api/index/index.md +31 -0
  333. package/dist/docs/api/index/interfaces/ChromaKeyOptions.md +5 -5
  334. package/dist/docs/api/index/interfaces/EcsSystem.md +3 -3
  335. package/dist/docs/api/index/interfaces/NetworkHandle.md +180 -0
  336. package/dist/docs/api/index/interfaces/PostprocessingBuildContext.md +6 -6
  337. package/dist/docs/api/index/interfaces/PostprocessingPipeline.md +5 -5
  338. package/dist/docs/api/index/interfaces/RenderBackend.md +8 -8
  339. package/dist/docs/api/index/interfaces/SoundBankAsset.md +18 -0
  340. package/dist/docs/api/index/interfaces/SoundSlot.md +31 -0
  341. package/dist/docs/api/index/interfaces/SoundTake.md +18 -0
  342. package/dist/docs/api/index/interfaces/StateMachine.md +13 -13
  343. package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +4 -4
  344. package/dist/docs/api/index/type-aliases/ApplyPrefabToSnapshotResult.md +3 -3
  345. package/dist/docs/api/index/type-aliases/AudioBus.md +15 -0
  346. package/dist/docs/api/index/type-aliases/ComponentFactory.md +1 -1
  347. package/dist/docs/api/index/type-aliases/ComponentValueMaps.md +50 -38
  348. package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +7 -1
  349. package/dist/docs/api/index/type-aliases/EcsRenderer.md +1 -1
  350. package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +3 -3
  351. package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +4 -4
  352. package/dist/docs/api/index/type-aliases/ExternalRefWarning.md +5 -5
  353. package/dist/docs/api/index/type-aliases/HandMaterialOptions.md +4 -4
  354. package/dist/docs/api/index/type-aliases/HandPoseTrackerOptions.md +5 -5
  355. package/dist/docs/api/index/type-aliases/HydrateOptions.md +3 -3
  356. package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +4 -4
  357. package/dist/docs/api/index/type-aliases/InstantiateSubtreeResult.md +3 -3
  358. package/dist/docs/api/index/type-aliases/KeyboardKey.md +1 -1
  359. package/dist/docs/api/index/type-aliases/ModelBoneInfo.md +29 -0
  360. package/dist/docs/api/index/type-aliases/ModuleLoader.md +1 -1
  361. package/dist/docs/api/index/type-aliases/MouseButton.md +1 -1
  362. package/dist/docs/api/index/type-aliases/NestedRegion.md +5 -5
  363. package/dist/docs/api/index/type-aliases/NetSpawnOptions.md +41 -0
  364. package/dist/docs/api/index/type-aliases/NodeKeyMaps.md +5 -5
  365. package/dist/docs/api/index/type-aliases/NodeMaps.md +4 -4
  366. package/dist/docs/api/index/type-aliases/PlaySlotOptions.md +32 -0
  367. package/dist/docs/api/index/type-aliases/PrefabAsset.md +5 -5
  368. package/dist/docs/api/index/type-aliases/RemapSnapshotOptions.md +2 -2
  369. package/dist/docs/api/index/type-aliases/RendererKind.md +1 -1
  370. package/dist/docs/api/index/type-aliases/ScriptBehaviourSystemOptions.md +2 -2
  371. package/dist/docs/api/index/type-aliases/ScriptErrorEvent.md +9 -9
  372. package/dist/docs/api/index/type-aliases/ScriptErrorListener.md +1 -1
  373. package/dist/docs/api/index/type-aliases/ScriptErrorPhase.md +1 -1
  374. package/dist/docs/api/index/type-aliases/ScriptErrorReport.md +6 -6
  375. package/dist/docs/api/index/type-aliases/ScriptErrorSource.md +1 -1
  376. package/dist/docs/api/index/type-aliases/SelectionContext.md +4 -4
  377. package/dist/docs/api/index/type-aliases/SerializeEntitySubtreeResult.md +4 -4
  378. package/dist/docs/api/index/type-aliases/SpawnPrefabOptions.md +5 -5
  379. package/dist/docs/api/index/type-aliases/SpawnPrefabSource.md +1 -1
  380. package/dist/docs/api/index/type-aliases/SubtreeSnapshot.md +4 -3
  381. package/dist/docs/api/index/type-aliases/UiCanvasLike.md +4 -4
  382. package/dist/docs/api/index/type-aliases/UiColorStop.md +37 -0
  383. package/dist/docs/api/index/type-aliases/UiPaint.md +81 -0
  384. package/dist/docs/api/index/type-aliases/UiShadow.md +27 -0
  385. package/dist/docs/api/index/type-aliases/UiStyle.md +43 -0
  386. package/dist/docs/api/index/type-aliases/UiTextStyle.md +33 -0
  387. package/dist/docs/api/index/type-aliases/UiTokens.md +13 -0
  388. package/dist/docs/api/index/type-aliases/VelocitySample.md +3 -3
  389. package/dist/docs/api/index/type-aliases/XrCapabilities.md +9 -9
  390. package/dist/docs/api/index/type-aliases/XrFinger.md +1 -1
  391. package/dist/docs/api/index/type-aliases/XrFingerCurl.md +4 -4
  392. package/dist/docs/api/index/type-aliases/XrFingerTarget.md +6 -6
  393. package/dist/docs/api/index/type-aliases/XrHandJointName.md +1 -1
  394. package/dist/docs/api/index/type-aliases/XrHandJoints.md +1 -1
  395. package/dist/docs/api/index/type-aliases/XrHandPoseAxis.md +1 -1
  396. package/dist/docs/api/index/type-aliases/XrHandPoseContext.md +2 -2
  397. package/dist/docs/api/index/type-aliases/XrHandPoseDefinition.md +11 -11
  398. package/dist/docs/api/index/type-aliases/XrHandPoseDirection.md +1 -1
  399. package/dist/docs/api/index/type-aliases/XrHandPoseEvent.md +1 -1
  400. package/dist/docs/api/index/type-aliases/XrHandPoseEventDetail.md +5 -5
  401. package/dist/docs/api/index/type-aliases/XrHandPoseMatch.md +4 -4
  402. package/dist/docs/api/index/type-aliases/XrHandPoseOrientation.md +4 -4
  403. package/dist/docs/api/index/type-aliases/XrHandShape.md +13 -13
  404. package/dist/docs/api/index/type-aliases/XrHandedness.md +1 -1
  405. package/dist/docs/api/index/type-aliases/XrHitResult.md +3 -3
  406. package/dist/docs/api/index/type-aliases/XrInputKind.md +1 -1
  407. package/dist/docs/api/index/type-aliases/XrInputState.md +18 -18
  408. package/dist/docs/api/index/type-aliases/XrPalmPose.md +6 -6
  409. package/dist/docs/api/index/variables/ADDED_NODE_MARKER_COMPONENT.md +1 -1
  410. package/dist/docs/api/index/variables/ARC_GRAVITY.md +1 -1
  411. package/dist/docs/api/index/variables/ARC_MAX_TIME.md +1 -1
  412. package/dist/docs/api/index/variables/ARC_SPEED.md +1 -1
  413. package/dist/docs/api/index/variables/ARC_STEPS.md +1 -1
  414. package/dist/docs/api/index/variables/CURLED_COS.md +1 -1
  415. package/dist/docs/api/index/variables/DEFAULT_DIRECTION_TOLERANCE.md +1 -1
  416. package/dist/docs/api/index/variables/DEFAULT_ENTER_CONFIDENCE.md +1 -1
  417. package/dist/docs/api/index/variables/DEFAULT_EXIT_CONFIDENCE.md +1 -1
  418. package/dist/docs/api/index/variables/DEFAULT_LOST_GRACE_SECONDS.md +1 -1
  419. package/dist/docs/api/index/variables/DEFAULT_MIN_HOLD_SECONDS.md +1 -1
  420. package/dist/docs/api/index/variables/DEFAULT_SCRIPT_ERROR_RETRY_DELAY.md +1 -1
  421. package/dist/docs/api/index/variables/FALLBACK_HAND_SCALE.md +1 -1
  422. package/dist/docs/api/index/variables/HAND_POSE_PRESETS.md +1 -1
  423. package/dist/docs/api/index/variables/HAND_POSE_PRESET_IDS.md +1 -1
  424. package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +1 -1
  425. package/dist/docs/api/index/variables/KeyboardKeys.md +89 -89
  426. package/dist/docs/api/index/variables/MATCH_FALLOFF.md +1 -1
  427. package/dist/docs/api/index/variables/MAX_PLAUSIBLE_SPEED.md +1 -1
  428. package/dist/docs/api/index/variables/MAX_SAMPLE_AGE_SECONDS.md +1 -1
  429. package/dist/docs/api/index/variables/NODE_KEY_SEPARATOR.md +1 -1
  430. package/dist/docs/api/index/variables/NO_XR_CAPABILITIES.md +1 -1
  431. package/dist/docs/api/index/variables/OVERRIDE_DIFF_EXCLUDED_COMPONENTS.md +1 -1
  432. package/dist/docs/api/index/variables/OVERRIDE_ROOT_EXCLUDED_COMPONENTS.md +1 -1
  433. package/dist/docs/api/index/variables/PINCH_FINGERS.md +1 -1
  434. package/dist/docs/api/index/variables/PREFAB_FILE_VERSION.md +1 -1
  435. package/dist/docs/api/index/variables/PREFAB_FILE_VERSION_NESTED.md +1 -1
  436. package/dist/docs/api/index/variables/SCRIPT_OBJECT_ROOT_FLAG.md +1 -1
  437. package/dist/docs/api/index/variables/SHARED_MODEL_RESOURCE_FLAG.md +1 -1
  438. package/dist/docs/api/index/variables/STRAIGHT_COS.md +1 -1
  439. package/dist/docs/api/index/variables/VELOCITY_SAMPLES.md +1 -1
  440. package/dist/docs/api/index/variables/XR_FINGERS.md +1 -1
  441. package/dist/docs/api/index/variables/XR_HOVER_SHELL_FLAG.md +1 -1
  442. package/dist/docs/api/index/variables/webglBackend.md +1 -1
  443. package/dist/docs/api/typedoc-sidebar.json +1 -1
  444. package/dist/docs/api/types/type-aliases/AssetInput.md +3 -3
  445. package/dist/docs/api/types/type-aliases/CheckboxInput.md +3 -3
  446. package/dist/docs/api/types/type-aliases/ColorInput.md +1 -1
  447. package/dist/docs/api/types/type-aliases/ComponentInput.md +4 -4
  448. package/dist/docs/api/types/type-aliases/ComponentKind.md +1 -1
  449. package/dist/docs/api/types/type-aliases/DropdownInput.md +3 -3
  450. package/dist/docs/api/types/type-aliases/DropdownOption.md +3 -3
  451. package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +1 -1
  452. package/dist/docs/api/types/type-aliases/EcsEntityKind.md +1 -1
  453. package/dist/docs/api/types/type-aliases/EntityId.md +1 -1
  454. package/dist/docs/api/types/type-aliases/EntityInput.md +3 -3
  455. package/dist/docs/api/types/type-aliases/FloatInput.md +1 -1
  456. package/dist/docs/api/types/type-aliases/IntersectionResult.md +3 -3
  457. package/dist/docs/api/types/type-aliases/ParentLookup.md +3 -3
  458. package/dist/docs/api/types/type-aliases/SelectionListener.md +1 -1
  459. package/dist/docs/api/types/type-aliases/SliderInput.md +5 -5
  460. package/dist/docs/api/types/type-aliases/TextInput.md +1 -1
  461. package/dist/docs/api/types/type-aliases/ToggleInput.md +1 -1
  462. package/dist/docs/api/types/type-aliases/Vec3.md +1 -1
  463. package/dist/docs/api/types/type-aliases/Vector2Input.md +3 -3
  464. package/dist/docs/api/types/type-aliases/Vector3Input.md +4 -4
  465. package/dist/docs/api/types/type-aliases/WorldEntityView.md +1 -1
  466. package/dist/docs/guide/bone-attachments-and-ik.md +51 -0
  467. package/dist/docs/guide/components/audio.md +1 -1
  468. package/dist/factories/index.cjs +29 -1
  469. package/dist/factories/index.cjs.map +1 -1
  470. package/dist/factories/index.d.cts +2 -2
  471. package/dist/factories/index.d.ts +2 -2
  472. package/dist/factories/index.js +4 -4
  473. package/dist/{index-BXjwEdNq.d.cts → index-BbrnjNXy.d.ts} +5 -3
  474. package/dist/{index-CVG-hREM.d.ts → index-DD7aHv0p.d.cts} +5 -3
  475. package/dist/{index-6pZO_gV7.d.ts → index-OgOoIpEI.d.ts} +14 -2
  476. package/dist/{index-BdghvXKE.d.cts → index-xyqzT0PQ.d.cts} +14 -2
  477. package/dist/index.cjs +174 -13
  478. package/dist/index.cjs.map +1 -1
  479. package/dist/index.d.cts +10 -9
  480. package/dist/index.d.ts +10 -9
  481. package/dist/index.js +13 -11
  482. package/dist/index.js.map +1 -1
  483. package/dist/network/index.cjs +70 -38
  484. package/dist/network/index.cjs.map +1 -1
  485. package/dist/network/index.d.cts +2 -2
  486. package/dist/network/index.d.ts +2 -2
  487. package/dist/network/index.js +4 -4
  488. package/dist/systems/index.cjs +171 -13
  489. package/dist/systems/index.cjs.map +1 -1
  490. package/dist/systems/index.d.cts +2 -2
  491. package/dist/systems/index.d.ts +2 -2
  492. package/dist/systems/index.js +5 -5
  493. package/dist/types.d.cts +1 -1
  494. package/dist/types.d.ts +1 -1
  495. package/dist/webgpu/index.d.ts +2 -2
  496. package/dist/worldSnapshotUtils.d.cts +1 -1
  497. package/dist/worldSnapshotUtils.d.ts +1 -1
  498. package/package.json +2 -1
  499. package/dist/chunk-GSWC6LLD.js.map +0 -1
  500. package/dist/chunk-JEPUCLZX.js.map +0 -1
  501. package/dist/chunk-JNYPJB55.js.map +0 -1
  502. package/dist/chunk-TY3XCHOR.js.map +0 -1
  503. package/dist/chunk-WWP46AEF.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../core/animation/humanoid.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * One vocabulary for humanoid skeletons.\n *\n * Every source names its bones differently: Mixamo `mixamorig:LeftForeArm`,\n * Meshy `LeftForeArm` with its spine numbered top-down (`Spine02` is the\n * LOWEST), Unreal / Quaternius UAL `lowerarm_l` with `spine_01` lowest,\n * Blender rigify `forearm.L`, VRM `leftLowerArm`. Retargeting, the animation\n * editor and bone sockets all need \"the left forearm\" regardless, so a\n * skeleton is mapped once onto VRM's humanoid bone names (the closest thing\n * to a standard) and everything downstream speaks those.\n *\n * Pure data + math, no three.js: the editor's Node tools (gltf-transform\n * documents) and the runtime (THREE.Bone trees) both build a `SkeletonNode`\n * tree and call `detectRig`.\n */\n\nexport type HumanoidBone =\n | \"hips\"\n | \"spine\"\n | \"chest\"\n | \"upperChest\"\n | \"neck\"\n | \"head\"\n | \"leftShoulder\"\n | \"leftUpperArm\"\n | \"leftLowerArm\"\n | \"leftHand\"\n | \"rightShoulder\"\n | \"rightUpperArm\"\n | \"rightLowerArm\"\n | \"rightHand\"\n | \"leftUpperLeg\"\n | \"leftLowerLeg\"\n | \"leftFoot\"\n | \"leftToes\"\n | \"rightUpperLeg\"\n | \"rightLowerLeg\"\n | \"rightFoot\"\n | \"rightToes\"\n | `${\"left\" | \"right\"}${Finger}${FingerJoint}`;\n\ntype Finger = \"Thumb\" | \"Index\" | \"Middle\" | \"Ring\" | \"Little\";\ntype FingerJoint = \"Metacarpal\" | \"Proximal\" | \"Intermediate\" | \"Distal\";\n\n/** The bones a humanoid must have to retarget a full-body clip. */\nexport const REQUIRED_HUMANOID_BONES: readonly HumanoidBone[] = [\n \"hips\",\n \"spine\",\n \"head\",\n \"leftUpperArm\",\n \"leftLowerArm\",\n \"leftHand\",\n \"rightUpperArm\",\n \"rightLowerArm\",\n \"rightHand\",\n \"leftUpperLeg\",\n \"leftLowerLeg\",\n \"leftFoot\",\n \"rightUpperLeg\",\n \"rightLowerLeg\",\n \"rightFoot\",\n];\n\n/** Vector [x, y, z] and quaternion [x, y, z, w]. */\nexport type Vec3 = [number, number, number];\nexport type Quat = [number, number, number, number];\n\n/** A bone (or any node) with its LOCAL rest transform. */\nexport interface SkeletonNode {\n name: string;\n translation: Vec3;\n rotation: Quat;\n scale?: Vec3;\n children: SkeletonNode[];\n}\n\nexport type RigProfile =\n | \"mixamo\"\n | \"meshy\"\n | \"unreal\"\n | \"rigify\"\n | \"vrm\"\n | \"generic\";\n\nexport interface RigDetection {\n profile: RigProfile;\n /** Humanoid bone → the rig's own bone name. */\n bones: Partial<Record<HumanoidBone, string>>;\n /** Rig bone name → humanoid bone. */\n byName: Map<string, HumanoidBone>;\n /** Arms level (T), angled down (A), or neither. */\n restPose: \"T\" | \"A\" | \"unknown\";\n /** Degrees the left upper arm points below horizontal at rest. */\n armDrop: number | null;\n /** Required bones the rig lacks (empty = can retarget). */\n missing: HumanoidBone[];\n}\n\n// ── quaternion helpers ───────────────────────────────────────────────────────\n\nexport const qmul = (a: Quat, b: Quat): Quat => [\n a[3] * b[0] + a[0] * b[3] + a[1] * b[2] - a[2] * b[1],\n a[3] * b[1] - a[0] * b[2] + a[1] * b[3] + a[2] * b[0],\n a[3] * b[2] + a[0] * b[1] - a[1] * b[0] + a[2] * b[3],\n a[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2],\n];\nexport const qinv = (q: Quat): Quat => [-q[0], -q[1], -q[2], q[3]];\nexport const qrot = (q: Quat, v: Vec3): Vec3 => {\n const r = qmul(qmul(q, [v[0], v[1], v[2], 0]), qinv(q));\n return [r[0], r[1], r[2]];\n};\n\n/** World (rig-space) rest position of every node, by name. */\nexport function restPositions(root: SkeletonNode): Map<string, Vec3> {\n const out = new Map<string, Vec3>();\n const walk = (n: SkeletonNode, pq: Quat, pp: Vec3, ps: number) => {\n const t = qrot(pq, [n.translation[0] * ps, n.translation[1] * ps, n.translation[2] * ps]);\n const p: Vec3 = [pp[0] + t[0], pp[1] + t[1], pp[2] + t[2]];\n out.set(n.name, p);\n const q = qmul(pq, n.rotation);\n const s = ps * (n.scale?.[0] ?? 1);\n for (const c of n.children) walk(c, q, p, s);\n };\n walk(root, [0, 0, 0, 1], [0, 0, 0], 1);\n return out;\n}\n\n// ── names ────────────────────────────────────────────────────────────────────\n\n/**\n * `mixamorig1:LeftForeArm` → { side: \"left\", base: \"forearm\" };\n * `upperarm_l` → { side: \"left\", base: \"upperarm\" }; `forearm.L` → left.\n */\nexport function splitBoneName(raw: string): { side: \"left\" | \"right\" | null; base: string } {\n let n = raw\n .replace(/^.*[:|]/, \"\") // mixamorig:, Armature|, rig:\n .replace(/^(mixamorig\\d*|def[-_]|org[-_]|mch[-_]|bip\\d*[ _]|b[-_])/i, \"\")\n .trim();\n let side: \"left\" | \"right\" | null = null;\n const sided = [\n [/^left[\\s_.-]*/i, \"left\"],\n [/^right[\\s_.-]*/i, \"right\"],\n [/^l[\\s_.-]+/i, \"left\"],\n [/^r[\\s_.-]+/i, \"right\"],\n [/[\\s_.-]+l$/i, \"left\"],\n [/[\\s_.-]+r$/i, \"right\"],\n [/[\\s_.-]*left$/i, \"left\"],\n [/[\\s_.-]*right$/i, \"right\"],\n ] as const;\n for (const [re, s] of sided) {\n if (re.test(n)) {\n side = s;\n n = n.replace(re, \"\");\n break;\n }\n }\n return { side, base: n.toLowerCase().replace(/[^a-z0-9]/g, \"\") };\n}\n\n/** Bases for sided limb bones. Order matters: first match wins. */\nconst LIMB_BASES: Array<[RegExp, string]> = [\n [/^(shoulder|clavicle|collar(bone)?)$/, \"Shoulder\"],\n [/^(upperarm|uparm|arm)$/, \"UpperArm\"],\n [/^(forearm|lowerarm|elbow|loarm)$/, \"LowerArm\"],\n [/^(hand|wrist)$/, \"Hand\"],\n [/^(upleg|upperleg|thigh|hipjoint)$/, \"UpperLeg\"],\n [/^(leg|lowerleg|calf|shin|knee)$/, \"LowerLeg\"],\n [/^(foot|ankle)$/, \"Foot\"],\n [/^(toebase|toe|toes|ball)$/, \"Toes\"],\n];\n\nconst FINGERS: Array<[RegExp, Finger]> = [\n [/^thumb/, \"Thumb\"],\n [/^(index|pointer)/, \"Index\"],\n [/^(middle|fingers)/, \"Middle\"],\n [/^ring/, \"Ring\"],\n [/^(pinky|little|small)/, \"Little\"],\n];\n\nfunction fingerJoint(finger: Finger, digits: string): FingerJoint | null {\n // Mixamo/UE number 1-3 (4 = tip); a bare \"Thumb\"/\"Fingers\" (Meshy after\n // fix-rig) is the first joint.\n const n = digits === \"\" ? 1 : Number(digits);\n const joints: FingerJoint[] =\n finger === \"Thumb\"\n ? [\"Metacarpal\", \"Proximal\", \"Distal\"]\n : [\"Proximal\", \"Intermediate\", \"Distal\"];\n return joints[n - 1] ?? null;\n}\n\n/** A sided bone from its name alone, or null. */\nfunction sidedBone(base: string, side: \"left\" | \"right\"): HumanoidBone | null {\n for (const [re, part] of LIMB_BASES) {\n if (re.test(base)) return `${side}${part}` as HumanoidBone;\n }\n // Mixamo writes fingers as LeftHandIndex1.\n const f = base.replace(/^hand(?=(thumb|index|middle|ring|pinky|little))/, \"\");\n for (const [re, finger] of FINGERS) {\n if (!re.test(f)) continue;\n const digits = /(\\d+)$/.exec(f)?.[1] ?? \"\";\n const joint = fingerJoint(finger, digits.replace(/^0+/, \"\"));\n return joint ? (`${side}${finger}${joint}` as HumanoidBone) : null;\n }\n return null;\n}\n\n// VRM names, recognised directly (leftUpperArm → lowercase \"leftupperarm\").\nconst VRM_LOWER = new Map<string, HumanoidBone>();\n\nconst VRM_FINGER = /^(left|right)(Thumb|Index|Middle|Ring|Little)(Metacarpal|Proximal|Intermediate|Distal)$/;\n\nfunction vrmBone(raw: string): HumanoidBone | null {\n const name = raw.replace(/^.*[:|]/, \"\");\n if (VRM_FINGER.test(name)) return name as HumanoidBone;\n if (VRM_LOWER.size === 0) {\n const sides = [\"left\", \"right\"] as const;\n const parts = [\"Shoulder\", \"UpperArm\", \"LowerArm\", \"Hand\", \"UpperLeg\", \"LowerLeg\", \"Foot\", \"Toes\"];\n for (const s of sides) for (const p of parts) VRM_LOWER.set(`${s}${p}`.toLowerCase(), `${s}${p}` as HumanoidBone);\n for (const b of [\"hips\", \"spine\", \"chest\", \"upperChest\", \"neck\", \"head\"] as const)\n VRM_LOWER.set(b.toLowerCase(), b);\n }\n return VRM_LOWER.get(name.toLowerCase()) ?? null;\n}\n\nfunction profileOf(names: string[]): RigProfile {\n if (names.some((n) => /^mixamorig/i.test(n))) return \"mixamo\";\n if (names.some((n) => /^(upperarm|lowerarm|thigh|calf)_[lr]$/i.test(n))) return \"unreal\";\n if (names.some((n) => /\\.[LR]$/.test(n))) return \"rigify\";\n if (names.some((n) => /^leftUpperArm$/.test(n))) return \"vrm\";\n if (names.some((n) => /^Spine0[12]$/.test(n))) return \"meshy\";\n return \"generic\";\n}\n\nfunction findHips(root: SkeletonNode): SkeletonNode | null {\n let found: SkeletonNode | null = null;\n const walk = (n: SkeletonNode) => {\n if (found) return;\n const { base } = splitBoneName(n.name);\n if (/^(hips|hip|pelvis)$/.test(base)) {\n found = n;\n return;\n }\n for (const c of n.children) walk(c);\n };\n walk(root);\n return found;\n}\n\nconst isSpineLike = (base: string) => /^(spine|chest|upperchest|torso|back)\\d*$/.test(base);\n\n/**\n * Map a skeleton onto humanoid bones. Pass the scene root (the armature's\n * own transform included): the rest-pose check measures \"down\" in that space,\n * and a Mixamo armature is Z-up under a 90° turn.\n *\n * Limbs and fingers come from their names (any of the conventions above, side\n * from prefixes/suffixes, or from which side of the body they sit when the\n * name has none). The spine comes from the CHAIN between the hips and the\n * neck, not from names, because conventions number it in opposite\n * directions: its first bone is `spine`, the second `chest`, a third\n * `upperChest`.\n */\nexport function detectRig(root: SkeletonNode): RigDetection {\n const all: SkeletonNode[] = [];\n const collect = (n: SkeletonNode) => {\n all.push(n);\n for (const c of n.children) collect(c);\n };\n collect(root);\n const profile = profileOf(all.map((n) => n.name));\n const bones: Partial<Record<HumanoidBone, string>> = {};\n const set = (b: HumanoidBone, name: string) => {\n if (!bones[b]) bones[b] = name;\n };\n\n const hips = findHips(root);\n const positions = restPositions(root);\n if (hips) {\n set(\"hips\", hips.name);\n // The spine chain: follow spine-like children upward from the hips.\n const chain: SkeletonNode[] = [];\n let cur: SkeletonNode | undefined = hips;\n while (cur) {\n const next: SkeletonNode | undefined = cur.children.find((c) => isSpineLike(splitBoneName(c.name).base));\n if (!next) break;\n chain.push(next);\n cur = next;\n }\n if (chain[0]) set(\"spine\", chain[0].name);\n if (chain[1]) set(\"chest\", chain[1].name);\n if (chain[2]) set(\"upperChest\", chain[chain.length - 1].name);\n }\n\n for (const n of all) {\n const vrm = vrmBone(n.name);\n if (vrm) {\n set(vrm, n.name);\n continue;\n }\n const { side, base } = splitBoneName(n.name);\n if (/^neck\\d*$/.test(base)) {\n set(\"neck\", n.name);\n continue;\n }\n if (/^head$/.test(base)) {\n set(\"head\", n.name);\n continue;\n }\n if (base === \"hips\" || base === \"pelvis\" || isSpineLike(base)) continue;\n // No side in the name: decide by which side of the hips it sits (glTF\n // humanoids face +Z, so their left is +X).\n const s =\n side ??\n (() => {\n const p = positions.get(n.name);\n const h = hips ? positions.get(hips.name) : undefined;\n if (!p || !h || Math.abs(p[0] - h[0]) < 1e-4) return null;\n return p[0] > h[0] ? \"left\" : \"right\";\n })();\n if (!s) continue;\n const b = sidedBone(base, s);\n if (b) set(b, n.name);\n }\n\n const byName = new Map<string, HumanoidBone>();\n for (const [b, name] of Object.entries(bones)) byName.set(name as string, b as HumanoidBone);\n\n // Rest pose from the left upper arm's direction.\n let armDrop: number | null = null;\n const ua = bones.leftUpperArm && positions.get(bones.leftUpperArm);\n const la = bones.leftLowerArm && positions.get(bones.leftLowerArm);\n if (ua && la) {\n const d: Vec3 = [la[0] - ua[0], la[1] - ua[1], la[2] - ua[2]];\n const len = Math.hypot(d[0], d[1], d[2]) || 1;\n armDrop = (Math.asin(Math.max(-1, Math.min(1, -d[1] / len))) * 180) / Math.PI;\n }\n const restPose = armDrop === null ? \"unknown\" : armDrop < 15 ? \"T\" : armDrop <= 65 ? \"A\" : \"unknown\";\n\n return {\n profile,\n bones,\n byName,\n restPose,\n armDrop,\n missing: REQUIRED_HUMANOID_BONES.filter((b) => !bones[b]),\n };\n}\n\n/** The same bone on the other side (`leftHand` ↔ `rightHand`). */\nexport function mirrorHumanoidBone(b: HumanoidBone): HumanoidBone {\n if (b.startsWith(\"left\")) return `right${b.slice(4)}` as HumanoidBone;\n if (b.startsWith(\"right\")) return `left${b.slice(5)}` as HumanoidBone;\n return b;\n}\n\n/**\n * Duck-typed adapter for a three.js Object3D/Bone tree (position: Vector3,\n * quaternion: Quaternion), so the runtime can call `detectRig` without this\n * module importing three.\n */\nexport function skeletonFromObject3D(object: {\n name: string;\n position: { x: number; y: number; z: number };\n quaternion: { x: number; y: number; z: number; w: number };\n scale?: { x: number; y: number; z: number };\n children: unknown[];\n}): SkeletonNode {\n const o = object;\n return {\n name: o.name,\n translation: [o.position.x, o.position.y, o.position.z],\n rotation: [o.quaternion.x, o.quaternion.y, o.quaternion.z, o.quaternion.w],\n scale: o.scale ? [o.scale.x, o.scale.y, o.scale.z] : undefined,\n children: (o.children as (typeof object)[]).map(skeletonFromObject3D),\n };\n}\n"]}
1
+ {"version":3,"sources":["../../core/animation/humanoid.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * One vocabulary for humanoid skeletons.\n *\n * Every source names its bones differently: Mixamo `mixamorig:LeftForeArm`,\n * Meshy `LeftForeArm` with its spine numbered top-down (`Spine02` is the\n * LOWEST), Unreal / Quaternius UAL `lowerarm_l` with `spine_01` lowest,\n * Blender rigify `forearm.L`, VRM `leftLowerArm`. Retargeting, the animation\n * editor and bone sockets all need \"the left forearm\" regardless, so a\n * skeleton is mapped once onto VRM's humanoid bone names (the closest thing\n * to a standard) and everything downstream speaks those.\n *\n * Pure data + math, no three.js: the editor's Node tools (gltf-transform\n * documents) and the runtime (THREE.Bone trees) both build a `SkeletonNode`\n * tree and call `detectRig`.\n */\n\nexport type HumanoidBone =\n | \"hips\"\n | \"spine\"\n | \"chest\"\n | \"upperChest\"\n | \"neck\"\n | \"head\"\n | \"leftShoulder\"\n | \"leftUpperArm\"\n | \"leftLowerArm\"\n | \"leftHand\"\n | \"rightShoulder\"\n | \"rightUpperArm\"\n | \"rightLowerArm\"\n | \"rightHand\"\n | \"leftUpperLeg\"\n | \"leftLowerLeg\"\n | \"leftFoot\"\n | \"leftToes\"\n | \"rightUpperLeg\"\n | \"rightLowerLeg\"\n | \"rightFoot\"\n | \"rightToes\"\n | `${\"left\" | \"right\"}${Finger}${FingerJoint}`;\n\ntype Finger = \"Thumb\" | \"Index\" | \"Middle\" | \"Ring\" | \"Little\";\ntype FingerJoint = \"Metacarpal\" | \"Proximal\" | \"Intermediate\" | \"Distal\";\n\n/** The bones a humanoid must have to retarget a full-body clip. */\nexport const REQUIRED_HUMANOID_BONES: readonly HumanoidBone[] = [\n \"hips\",\n \"spine\",\n \"head\",\n \"leftUpperArm\",\n \"leftLowerArm\",\n \"leftHand\",\n \"rightUpperArm\",\n \"rightLowerArm\",\n \"rightHand\",\n \"leftUpperLeg\",\n \"leftLowerLeg\",\n \"leftFoot\",\n \"rightUpperLeg\",\n \"rightLowerLeg\",\n \"rightFoot\",\n];\n\n/** Vector [x, y, z] and quaternion [x, y, z, w]. */\nexport type Vec3 = [number, number, number];\nexport type Quat = [number, number, number, number];\n\n/** A bone (or any node) with its LOCAL rest transform. */\nexport interface SkeletonNode {\n name: string;\n translation: Vec3;\n rotation: Quat;\n scale?: Vec3;\n children: SkeletonNode[];\n}\n\nexport type RigProfile =\n | \"mixamo\"\n | \"meshy\"\n | \"unreal\"\n | \"rigify\"\n | \"vrm\"\n | \"generic\";\n\nexport interface RigDetection {\n profile: RigProfile;\n /** Humanoid bone → the rig's own bone name. */\n bones: Partial<Record<HumanoidBone, string>>;\n /** Rig bone name → humanoid bone. */\n byName: Map<string, HumanoidBone>;\n /** Arms level (T), angled down (A), or neither. */\n restPose: \"T\" | \"A\" | \"unknown\";\n /** Degrees the left upper arm points below horizontal at rest. */\n armDrop: number | null;\n /** Required bones the rig lacks (empty = can retarget). */\n missing: HumanoidBone[];\n}\n\n// ── quaternion helpers ───────────────────────────────────────────────────────\n\nexport const qmul = (a: Quat, b: Quat): Quat => [\n a[3] * b[0] + a[0] * b[3] + a[1] * b[2] - a[2] * b[1],\n a[3] * b[1] - a[0] * b[2] + a[1] * b[3] + a[2] * b[0],\n a[3] * b[2] + a[0] * b[1] - a[1] * b[0] + a[2] * b[3],\n a[3] * b[3] - a[0] * b[0] - a[1] * b[1] - a[2] * b[2],\n];\nexport const qinv = (q: Quat): Quat => [-q[0], -q[1], -q[2], q[3]];\nexport const qrot = (q: Quat, v: Vec3): Vec3 => {\n const r = qmul(qmul(q, [v[0], v[1], v[2], 0]), qinv(q));\n return [r[0], r[1], r[2]];\n};\n\n/** World (rig-space) rest position of every node, by name. */\nexport function restPositions(root: SkeletonNode): Map<string, Vec3> {\n const out = new Map<string, Vec3>();\n const walk = (n: SkeletonNode, pq: Quat, pp: Vec3, ps: number) => {\n const t = qrot(pq, [n.translation[0] * ps, n.translation[1] * ps, n.translation[2] * ps]);\n const p: Vec3 = [pp[0] + t[0], pp[1] + t[1], pp[2] + t[2]];\n out.set(n.name, p);\n const q = qmul(pq, n.rotation);\n const s = ps * (n.scale?.[0] ?? 1);\n for (const c of n.children) walk(c, q, p, s);\n };\n walk(root, [0, 0, 0, 1], [0, 0, 0], 1);\n return out;\n}\n\n// ── names ────────────────────────────────────────────────────────────────────\n\n/** The number an exporter puts on the end of a name. */\nconst NUMBERED_NAME = /_\\d+$/;\n\n/**\n * `mixamorig1:LeftForeArm` → { side: \"left\", base: \"forearm\" };\n * `upperarm_l` → { side: \"left\", base: \"upperarm\" }; `forearm.L` → left.\n */\nexport function splitBoneName(raw: string): { side: \"left\" | \"right\" | null; base: string } {\n let n = raw\n .replace(/^.*[:|]/, \"\") // mixamorig:, Armature|, rig:\n .replace(/^(mixamorig\\d*|def[-_]|org[-_]|mch[-_]|bip\\d*[ _]|b[-_])/i, \"\")\n .trim();\n let side: \"left\" | \"right\" | null = null;\n const sided = [\n [/^left[\\s_.-]*/i, \"left\"],\n [/^right[\\s_.-]*/i, \"right\"],\n [/^l[\\s_.-]+/i, \"left\"],\n [/^r[\\s_.-]+/i, \"right\"],\n [/[\\s_.-]+l$/i, \"left\"],\n [/[\\s_.-]+r$/i, \"right\"],\n [/[\\s_.-]*left$/i, \"left\"],\n [/[\\s_.-]*right$/i, \"right\"],\n ] as const;\n for (const [re, s] of sided) {\n if (re.test(n)) {\n side = s;\n n = n.replace(re, \"\");\n break;\n }\n }\n return { side, base: n.toLowerCase().replace(/[^a-z0-9]/g, \"\") };\n}\n\n/** Bases for sided limb bones. Order matters: first match wins. */\nconst LIMB_BASES: Array<[RegExp, string]> = [\n [/^(shoulder|clavicle|collar(bone)?)$/, \"Shoulder\"],\n [/^(upperarm|uparm|arm)$/, \"UpperArm\"],\n [/^(forearm|lowerarm|elbow|loarm)$/, \"LowerArm\"],\n [/^(hand|wrist)$/, \"Hand\"],\n [/^(upleg|upperleg|thigh|hipjoint)$/, \"UpperLeg\"],\n [/^(leg|lowerleg|calf|shin|knee)$/, \"LowerLeg\"],\n [/^(foot|ankle)$/, \"Foot\"],\n [/^(toebase|toe|toes|ball)$/, \"Toes\"],\n];\n\nconst FINGERS: Array<[RegExp, Finger]> = [\n [/^thumb/, \"Thumb\"],\n [/^(index|pointer)/, \"Index\"],\n [/^(middle|fingers)/, \"Middle\"],\n [/^ring/, \"Ring\"],\n [/^(pinky|little|small)/, \"Little\"],\n];\n\nfunction fingerJoint(finger: Finger, digits: string): FingerJoint | null {\n // Mixamo/UE number 1-3 (4 = tip); a bare \"Thumb\"/\"Fingers\" (Meshy after\n // fix-rig) is the first joint.\n const n = digits === \"\" ? 1 : Number(digits);\n const joints: FingerJoint[] =\n finger === \"Thumb\"\n ? [\"Metacarpal\", \"Proximal\", \"Distal\"]\n : [\"Proximal\", \"Intermediate\", \"Distal\"];\n return joints[n - 1] ?? null;\n}\n\n/** A sided bone from its name alone, or null. */\nfunction sidedBone(base: string, side: \"left\" | \"right\"): HumanoidBone | null {\n for (const [re, part] of LIMB_BASES) {\n if (re.test(base)) return `${side}${part}` as HumanoidBone;\n }\n // Mixamo writes fingers as LeftHandIndex1.\n const f = base.replace(/^hand(?=(thumb|index|middle|ring|pinky|little))/, \"\");\n for (const [re, finger] of FINGERS) {\n if (!re.test(f)) continue;\n const digits = /(\\d+)$/.exec(f)?.[1] ?? \"\";\n const joint = fingerJoint(finger, digits.replace(/^0+/, \"\"));\n return joint ? (`${side}${finger}${joint}` as HumanoidBone) : null;\n }\n return null;\n}\n\n// VRM names, recognised directly (leftUpperArm → lowercase \"leftupperarm\").\nconst VRM_LOWER = new Map<string, HumanoidBone>();\n\nconst VRM_FINGER = /^(left|right)(Thumb|Index|Middle|Ring|Little)(Metacarpal|Proximal|Intermediate|Distal)$/;\n\nfunction vrmBone(raw: string): HumanoidBone | null {\n const name = raw.replace(/^.*[:|]/, \"\");\n if (VRM_FINGER.test(name)) return name as HumanoidBone;\n if (VRM_LOWER.size === 0) {\n const sides = [\"left\", \"right\"] as const;\n const parts = [\"Shoulder\", \"UpperArm\", \"LowerArm\", \"Hand\", \"UpperLeg\", \"LowerLeg\", \"Foot\", \"Toes\"];\n for (const s of sides) for (const p of parts) VRM_LOWER.set(`${s}${p}`.toLowerCase(), `${s}${p}` as HumanoidBone);\n for (const b of [\"hips\", \"spine\", \"chest\", \"upperChest\", \"neck\", \"head\"] as const)\n VRM_LOWER.set(b.toLowerCase(), b);\n }\n return VRM_LOWER.get(name.toLowerCase()) ?? null;\n}\n\nfunction profileOf(names: string[]): RigProfile {\n if (names.some((n) => /^mixamorig/i.test(n))) return \"mixamo\";\n if (names.some((n) => /^(upperarm|lowerarm|thigh|calf)_[lr]$/i.test(n))) return \"unreal\";\n if (names.some((n) => /\\.[LR]$/.test(n))) return \"rigify\";\n if (names.some((n) => /^leftUpperArm$/.test(n))) return \"vrm\";\n if (names.some((n) => /^Spine0[12]$/.test(n))) return \"meshy\";\n return \"generic\";\n}\n\nfunction findHips(root: SkeletonNode): SkeletonNode | null {\n let found: SkeletonNode | null = null;\n const walk = (n: SkeletonNode) => {\n if (found) return;\n const { base } = splitBoneName(n.name);\n if (/^(hips|hip|pelvis)$/.test(base)) {\n found = n;\n return;\n }\n for (const c of n.children) walk(c);\n };\n walk(root);\n return found;\n}\n\nconst isSpineLike = (base: string) => /^(spine|chest|upperchest|torso|back)\\d*$/.test(base);\n\n/**\n * Map a skeleton onto humanoid bones. Pass the scene root (the armature's\n * own transform included): the rest-pose check measures \"down\" in that space,\n * and a Mixamo armature is Z-up under a 90° turn.\n *\n * Limbs and fingers come from their names (any of the conventions above, side\n * from prefixes/suffixes, or from which side of the body they sit when the\n * name has none). The spine comes from the CHAIN between the hips and the\n * neck, not from names, because conventions number it in opposite\n * directions: its first bone is `spine`, the second `chest`, a third\n * `upperChest`.\n */\nexport function detectRig(root: SkeletonNode): RigDetection {\n const plain = readRig(root);\n if (plain.missing.length === 0) return plain;\n // Sketchfab's exporter numbers every bone (`mixamorigLeftArm_9`), which hides\n // the rig. Meshes get numbers too (`Object_2`, `Object_3`), so a number only\n // comes off where the name stays unique.\n const stems = new Map<string, number>();\n const count = (n: SkeletonNode) => {\n const stem = n.name.replace(NUMBERED_NAME, \"\");\n stems.set(stem, (stems.get(stem) ?? 0) + 1);\n n.children.forEach(count);\n };\n count(root);\n const real = new Map<string, string>();\n const strip = (n: SkeletonNode): SkeletonNode => {\n const stem = n.name.replace(NUMBERED_NAME, \"\");\n const name = stems.get(stem) === 1 ? stem : n.name;\n real.set(name, n.name);\n return { ...n, name, children: n.children.map(strip) };\n };\n const found = readRig(strip(root));\n if (found.missing.length >= plain.missing.length) return plain;\n const realName = (name: string) => real.get(name) ?? name;\n const bones: RigDetection[\"bones\"] = {};\n for (const [bone, name] of Object.entries(found.bones) as [HumanoidBone, string][]) {\n bones[bone] = realName(name);\n }\n return {\n ...found,\n bones,\n byName: new Map([...found.byName].map(([name, bone]) => [realName(name), bone])),\n };\n}\n\nfunction readRig(root: SkeletonNode): RigDetection {\n const all: SkeletonNode[] = [];\n const collect = (n: SkeletonNode) => {\n all.push(n);\n for (const c of n.children) collect(c);\n };\n collect(root);\n const profile = profileOf(all.map((n) => n.name));\n const bones: Partial<Record<HumanoidBone, string>> = {};\n const set = (b: HumanoidBone, name: string) => {\n if (!bones[b]) bones[b] = name;\n };\n\n const hips = findHips(root);\n const positions = restPositions(root);\n if (hips) {\n set(\"hips\", hips.name);\n // The spine chain: follow spine-like children upward from the hips.\n const chain: SkeletonNode[] = [];\n let cur: SkeletonNode | undefined = hips;\n while (cur) {\n const next: SkeletonNode | undefined = cur.children.find((c) => isSpineLike(splitBoneName(c.name).base));\n if (!next) break;\n chain.push(next);\n cur = next;\n }\n if (chain[0]) set(\"spine\", chain[0].name);\n if (chain[1]) set(\"chest\", chain[1].name);\n if (chain[2]) set(\"upperChest\", chain[chain.length - 1].name);\n }\n\n for (const n of all) {\n const vrm = vrmBone(n.name);\n if (vrm) {\n set(vrm, n.name);\n continue;\n }\n const { side, base } = splitBoneName(n.name);\n if (/^neck\\d*$/.test(base)) {\n set(\"neck\", n.name);\n continue;\n }\n if (/^head$/.test(base)) {\n set(\"head\", n.name);\n continue;\n }\n if (base === \"hips\" || base === \"pelvis\" || isSpineLike(base)) continue;\n // No side in the name: decide by which side of the hips it sits (glTF\n // humanoids face +Z, so their left is +X).\n const s =\n side ??\n (() => {\n const p = positions.get(n.name);\n const h = hips ? positions.get(hips.name) : undefined;\n if (!p || !h || Math.abs(p[0] - h[0]) < 1e-4) return null;\n return p[0] > h[0] ? \"left\" : \"right\";\n })();\n if (!s) continue;\n const b = sidedBone(base, s);\n if (b) set(b, n.name);\n }\n\n const byName = new Map<string, HumanoidBone>();\n for (const [b, name] of Object.entries(bones)) byName.set(name as string, b as HumanoidBone);\n\n // Rest pose from the left upper arm's direction.\n let armDrop: number | null = null;\n const ua = bones.leftUpperArm && positions.get(bones.leftUpperArm);\n const la = bones.leftLowerArm && positions.get(bones.leftLowerArm);\n if (ua && la) {\n const d: Vec3 = [la[0] - ua[0], la[1] - ua[1], la[2] - ua[2]];\n const len = Math.hypot(d[0], d[1], d[2]) || 1;\n armDrop = (Math.asin(Math.max(-1, Math.min(1, -d[1] / len))) * 180) / Math.PI;\n }\n const restPose = armDrop === null ? \"unknown\" : armDrop < 15 ? \"T\" : armDrop <= 65 ? \"A\" : \"unknown\";\n\n return {\n profile,\n bones,\n byName,\n restPose,\n armDrop,\n missing: REQUIRED_HUMANOID_BONES.filter((b) => !bones[b]),\n };\n}\n\n/** The same bone on the other side (`leftHand` ↔ `rightHand`). */\nexport function mirrorHumanoidBone(b: HumanoidBone): HumanoidBone {\n if (b.startsWith(\"left\")) return `right${b.slice(4)}` as HumanoidBone;\n if (b.startsWith(\"right\")) return `left${b.slice(5)}` as HumanoidBone;\n return b;\n}\n\n/**\n * Duck-typed adapter for a three.js Object3D/Bone tree (position: Vector3,\n * quaternion: Quaternion), so the runtime can call `detectRig` without this\n * module importing three.\n */\nexport function skeletonFromObject3D(object: {\n name: string;\n position: { x: number; y: number; z: number };\n quaternion: { x: number; y: number; z: number; w: number };\n scale?: { x: number; y: number; z: number };\n children: unknown[];\n}): SkeletonNode {\n const o = object;\n return {\n name: o.name,\n translation: [o.position.x, o.position.y, o.position.z],\n rotation: [o.quaternion.x, o.quaternion.y, o.quaternion.z, o.quaternion.w],\n scale: o.scale ? [o.scale.x, o.scale.y, o.scale.z] : undefined,\n children: (o.children as (typeof object)[]).map(skeletonFromObject3D),\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { REQUIRED_HUMANOID_BONES, detectRig, mirrorHumanoidBone, qinv, qmul, qrot, restPositions, skeletonFromObject3D, splitBoneName } from '../chunk-GSWC6LLD.js';
1
+ export { REQUIRED_HUMANOID_BONES, detectRig, mirrorHumanoidBone, qinv, qmul, qrot, restPositions, skeletonFromObject3D, splitBoneName } from '../chunk-GMSFEXUZ.js';
2
2
  import '../chunk-XE4OXN2W.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  import { getRendererKindOf, readWorldRenderBackend, readWorldRendererKind } from './chunk-OHCNPPMX.js';
2
- import { resolveScriptCtor, Behaviour, normalizeScriptData, defaultModuleLoader, reportScriptError, serializeDataForStorage, toErrorMessage, readScriptPhase, withScriptPhase, mergeDataByCurrentDefaults, resolveInputData, resolvePrefabAssetUrl, reportBehaviourHookError } from './chunk-WWP46AEF.js';
3
- import { createGLTFLoader, SHARED_MODEL_RESOURCE_FLAG, applyTransform, findModelBone } from './chunk-JEPUCLZX.js';
4
- import { AnimationComponent, ModelComponent, CameraComponent, Object3DRef, normalizeEnvironmentLighting, Environment, Postprocessing, TransformComponent, PhysicsComponent, setPhysicsLiveRef, LightComponent, MaterialComponent, DEFAULT_MESH_GEOMETRY_PARAMETERS, MeshGeometryComponent, InstancedMeshComponent, ScriptComponent, ScriptObjectComponent, AudioComponent, VideoComponent, UIPanelComponent, UITextComponent, UIButtonComponent, UIToggleComponent, UISliderComponent, ParentId, XRInteractableComponent, XRRigComponent, VRTeleportAreaComponent, XREnvironmentComponent, Name, resolveChrome, chromeBleed, resolveText, resolveToken, styleAssets, XRAnchorComponent, IKComponent, XRInteractorComponent, XRInteractorSideComponent, handPoseDefinitionFor, getHandPosePreset, XRHandPoseComponent } from './chunk-JNYPJB55.js';
2
+ import { resolveScriptCtor, Behaviour, normalizeScriptData, defaultModuleLoader, reportScriptError, serializeDataForStorage, toErrorMessage, readScriptPhase, withScriptPhase, mergeDataByCurrentDefaults, resolveInputData, resolvePrefabAssetUrl, reportBehaviourHookError } from './chunk-4FHJA6U4.js';
3
+ import { createGLTFLoader, SHARED_MODEL_RESOURCE_FLAG, applyTransform, findModelBone } from './chunk-QAZCVCMP.js';
4
+ import { AnimationComponent, ModelComponent, CameraComponent, Object3DRef, normalizeEnvironmentLighting, Environment, Postprocessing, TransformComponent, PhysicsComponent, setPhysicsLiveRef, LightComponent, MaterialComponent, DEFAULT_MESH_GEOMETRY_PARAMETERS, MeshGeometryComponent, InstancedMeshComponent, ScriptComponent, ScriptObjectComponent, AudioComponent, VideoComponent, UIPanelComponent, UITextComponent, UIButtonComponent, UIToggleComponent, UISliderComponent, ParentId, XRInteractableComponent, XRRigComponent, VRTeleportAreaComponent, XREnvironmentComponent, Name, resolveChrome, chromeBleed, resolveText, resolveToken, styleAssets, XRAnchorComponent, BoneAttachmentComponent, IKComponent, XRInteractorComponent, XRInteractorSideComponent, handPoseDefinitionFor, getHandPosePreset, XRHandPoseComponent } from './chunk-T7SRBLPJ.js';
5
5
  import { __name } from './chunk-XE4OXN2W.js';
6
6
  import * as THREE26 from 'three';
7
7
  import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js';
@@ -8847,6 +8847,29 @@ var _XRAnchorSystem = class _XRAnchorSystem {
8847
8847
  };
8848
8848
  __name(_XRAnchorSystem, "XRAnchorSystem");
8849
8849
  var XRAnchorSystem = _XRAnchorSystem;
8850
+
8851
+ // core/systems/BoneHoldSystem.ts
8852
+ var _BoneHoldSystem = class _BoneHoldSystem {
8853
+ update(world) {
8854
+ const oms = world.getObjectManagementSystem();
8855
+ if (!oms) return;
8856
+ for (const id of world.query(BoneAttachmentComponent)) {
8857
+ const attachment = world.getComponent(id, BoneAttachmentComponent);
8858
+ if (!attachment) continue;
8859
+ if (attachment.holds.length === 0 && !attachment.hideInOtherClips) {
8860
+ if (oms.hasBoneHold(id)) oms.releaseBoneHold(world, id);
8861
+ continue;
8862
+ }
8863
+ const character = world.getComponent(id, ParentId)?.value;
8864
+ const clip = typeof character === "number" ? world.getComponent(character, AnimationComponent)?.active?.clip.name : void 0;
8865
+ const hold = clip === void 0 ? void 0 : attachment.holds.find((h) => h.clips.includes(clip));
8866
+ const hidden = hold ? hold.hidden : clip !== void 0 && attachment.hideInOtherClips;
8867
+ oms.applyBoneHold(world, id, hold ?? null, hidden);
8868
+ }
8869
+ }
8870
+ };
8871
+ __name(_BoneHoldSystem, "BoneHoldSystem");
8872
+ var BoneHoldSystem = _BoneHoldSystem;
8850
8873
  var _q = new THREE26.Quaternion();
8851
8874
  var _q2 = new THREE26.Quaternion();
8852
8875
  var _s = new THREE26.Vector3();
@@ -8854,6 +8877,7 @@ var _e = new THREE26.Vector3();
8854
8877
  var _w = new THREE26.Vector3();
8855
8878
  var _v = new THREE26.Vector3();
8856
8879
  var _p = new THREE26.Vector3();
8880
+ var FORWARD = new THREE26.Vector3(0, 0, 1);
8857
8881
  function setWorldQuaternion(o, q) {
8858
8882
  if (o.parent) {
8859
8883
  o.parent.getWorldQuaternion(_q2).invert();
@@ -8869,7 +8893,7 @@ function turn(o, q) {
8869
8893
  setWorldQuaternion(o, q.clone().multiply(_q));
8870
8894
  }
8871
8895
  __name(turn, "turn");
8872
- function twoBoneIK(upper, lower, end, target, pole) {
8896
+ function twoBoneIK(upper, lower, end, target, pole, forward = FORWARD) {
8873
8897
  upper.getWorldPosition(_s);
8874
8898
  lower.getWorldPosition(_e);
8875
8899
  end.getWorldPosition(_w);
@@ -8882,7 +8906,10 @@ function twoBoneIK(upper, lower, end, target, pole) {
8882
8906
  const dir = toT.divideScalar(want || 1).clone();
8883
8907
  const pv = _p.subVectors(pole, _s);
8884
8908
  pv.addScaledVector(dir, -pv.dot(dir));
8885
- if (pv.lengthSq() < 1e-8) pv.set(0, -1, 0).addScaledVector(dir, dir.y);
8909
+ if (pv.lengthSq() < 1e-8) {
8910
+ if (Math.abs(dir.y) > 0.9) pv.copy(forward).addScaledVector(dir, -dir.dot(forward));
8911
+ else pv.set(0, -1, 0).addScaledVector(dir, dir.y);
8912
+ }
8886
8913
  pv.normalize();
8887
8914
  const cosA = THREE26.MathUtils.clamp((a * a + c * c - b * b) / (2 * a * c), -1, 1);
8888
8915
  const joint = _s.clone().addScaledVector(dir, a * cosA).addScaledVector(pv, a * Math.sqrt(1 - cosA * cosA));
@@ -8917,6 +8944,7 @@ var _t = new THREE26.Vector3();
8917
8944
  var _p2 = new THREE26.Vector3();
8918
8945
  var _q3 = new THREE26.Quaternion();
8919
8946
  var _pq = new THREE26.Quaternion();
8947
+ var _forward = new THREE26.Vector3();
8920
8948
  var _IKSystem = class _IKSystem {
8921
8949
  constructor() {
8922
8950
  this.runtimes = /* @__PURE__ */ new Map();
@@ -8934,7 +8962,18 @@ var _IKSystem = class _IKSystem {
8934
8962
  }
8935
8963
  runtime.written.clear();
8936
8964
  }
8937
- update(world) {
8965
+ /** How strongly a chain applies now, moving its fade on by `deltaTime`. */
8966
+ fadeOf(runtime, chain, animation, deltaTime) {
8967
+ if (!chain.clips) return 1;
8968
+ const clip = animation?.active?.clip.name;
8969
+ const wanted = clip !== void 0 && chain.clips.includes(clip) ? 1 : 0;
8970
+ const was = runtime.fades.get(chain);
8971
+ const seconds = chain.fade ?? animation?.crossFadeDuration ?? 0;
8972
+ const next = was === void 0 || seconds <= 0 ? wanted : was + Math.sign(wanted - was) * Math.min(Math.abs(wanted - was), deltaTime / seconds);
8973
+ runtime.fades.set(chain, next);
8974
+ return THREE26.MathUtils.smoothstep(next, 0, 1);
8975
+ }
8976
+ update(world, deltaTime = 0) {
8938
8977
  const ids = world.query(IKComponent, ModelComponent);
8939
8978
  const alive = new Set(ids);
8940
8979
  for (const [id, runtime] of this.runtimes) {
@@ -8952,7 +8991,7 @@ var _IKSystem = class _IKSystem {
8952
8991
  let runtime = this.runtimes.get(id);
8953
8992
  if (!runtime || runtime.rootUuid !== root.uuid) {
8954
8993
  if (runtime) this.restore(runtime);
8955
- runtime = { rootUuid: root.uuid, limbs: /* @__PURE__ */ new Map(), written: /* @__PURE__ */ new Map(), reach: /* @__PURE__ */ new Map() };
8994
+ runtime = { rootUuid: root.uuid, limbs: /* @__PURE__ */ new Map(), written: /* @__PURE__ */ new Map(), reach: /* @__PURE__ */ new Map(), fades: /* @__PURE__ */ new WeakMap() };
8956
8995
  this.runtimes.set(id, runtime);
8957
8996
  }
8958
8997
  for (const [bone, w] of runtime.written) {
@@ -8961,13 +9000,15 @@ var _IKSystem = class _IKSystem {
8961
9000
  runtime.written.clear();
8962
9001
  runtime.reach.clear();
8963
9002
  if (!ik.enabled) continue;
8964
- const active = ik.chains.filter((c) => c.enabled && c.weight > 0 && typeof c.target === "number");
9003
+ const animation = world.getComponent(id, AnimationComponent);
9004
+ const active = ik.chains.map((chain) => ({ chain, weight: chain.weight * this.fadeOf(runtime, chain, animation, deltaTime) })).filter(({ chain, weight }) => chain.enabled && weight > 0 && typeof chain.target === "number");
8965
9005
  if (active.length === 0) continue;
8966
9006
  if (!matricesFresh) {
8967
9007
  world.getScene().updateMatrixWorld(true);
8968
9008
  matricesFresh = true;
8969
9009
  }
8970
- for (const chain of active) {
9010
+ root.getWorldDirection(_forward);
9011
+ for (const { chain, weight } of active) {
8971
9012
  let limb = runtime.limbs.get(chain.limb);
8972
9013
  if (!limb) {
8973
9014
  const names = LIMB_BONES[chain.limb];
@@ -8988,16 +9029,16 @@ var _IKSystem = class _IKSystem {
8988
9029
  const poleObject = typeof chain.pole === "number" ? world.getComponent(chain.pole, Object3DRef)?.object : null;
8989
9030
  if (poleObject) poleObject.getWorldPosition(_p2);
8990
9031
  else lower.getWorldPosition(_p2);
8991
- const miss = twoBoneIK(upper, lower, end, _t, _p2);
9032
+ const miss = twoBoneIK(upper, lower, end, _t, _p2, _forward);
8992
9033
  runtime.reach.set(chain.limb, Math.max(0, miss));
8993
9034
  if (chain.matchRotation) {
8994
9035
  target.getWorldQuaternion(_q3);
8995
9036
  end.parent?.getWorldQuaternion(_pq);
8996
9037
  end.quaternion.copy(_pq.invert().multiply(_q3));
8997
9038
  }
8998
- if (chain.weight < 1) {
9039
+ if (weight < 1) {
8999
9040
  [upper, lower, end].forEach((bone, i) => {
9000
- bone.quaternion.copy(animated[i].slerp(bone.quaternion, chain.weight));
9041
+ bone.quaternion.copy(animated[i].slerp(bone.quaternion, weight));
9001
9042
  });
9002
9043
  }
9003
9044
  for (const bone of [upper, lower, end]) {
@@ -10256,6 +10297,6 @@ var _XRHoverVisualSystem = class _XRHoverVisualSystem {
10256
10297
  __name(_XRHoverVisualSystem, "XRHoverVisualSystem");
10257
10298
  var XRHoverVisualSystem = _XRHoverVisualSystem;
10258
10299
 
10259
- export { ARC_GRAVITY, ARC_MAX_TIME, ARC_SPEED, ARC_STEPS, AnimationSystem, AudioMixer, AudioSystem, CURLED_COS, CameraSyncSystem, DEFAULT_DIRECTION_TOLERANCE, DEFAULT_ENTER_CONFIDENCE, DEFAULT_EXIT_CONFIDENCE, DEFAULT_LOST_GRACE_SECONDS, DEFAULT_MIN_HOLD_SECONDS, DEFAULT_SCRIPT_ERROR_RETRY_DELAY, EnvironmentSyncSystem, FALLBACK_HAND_SCALE, HandPoseTracker, IKSystem, InputSystem, InstancedMeshSystem, KeyboardKeys, LightSyncSystem, MATCH_FALLOFF, MAX_PLAUSIBLE_SPEED, MAX_SAMPLE_AGE_SECONDS, MaterialSyncSystem, MeshGeometrySystem, NO_XR_CAPABILITIES, ObjectVisibilitySystem, PINCH_FINGERS, PhysicsSyncSystem, PostprocessingSyncSystem, RenderSystem, SCRIPT_OBJECT_ROOT_FLAG, STRAIGHT_COS, ScriptBehaviourSystem, ScriptObject, ScriptObjectSystem, SlotChooser, TeleportAimGate, ThrowVelocityTracker, TransformSyncSystem, UIInteractionSystem, UIPanelSystem, VELOCITY_SAMPLES, VRTeleportAreaSystem, VideoSystem, XRAnchorSystem, XRControllerVisualSystem, XREnvironmentSystem, XRHandPoseSystem, XRHitTestSystem, XRHoverVisualSystem, XRInputSystem, XRInteractionSystem, XRLocomotionSystem, XRSessionSystem, XRTeleportVisualSystem, XR_FINGERS, XR_HOVER_SHELL_FLAG, angularVelocityFrom, applyHandMaterial, arcGroundCrossing, computeFingerCurl, computeHandShape, computePalmPose, computePalmWidth, computePinch, computeSpread, createHandMaterial, estimateHandScale, gripQuaternion, matchHandPose, readXrCapabilities, sampleTeleportArc, setWorldQuaternion, soundBankFiles, twoBoneIK };
10260
- //# sourceMappingURL=chunk-TY3XCHOR.js.map
10261
- //# sourceMappingURL=chunk-TY3XCHOR.js.map
10300
+ export { ARC_GRAVITY, ARC_MAX_TIME, ARC_SPEED, ARC_STEPS, AnimationSystem, AudioMixer, AudioSystem, BoneHoldSystem, CURLED_COS, CameraSyncSystem, DEFAULT_DIRECTION_TOLERANCE, DEFAULT_ENTER_CONFIDENCE, DEFAULT_EXIT_CONFIDENCE, DEFAULT_LOST_GRACE_SECONDS, DEFAULT_MIN_HOLD_SECONDS, DEFAULT_SCRIPT_ERROR_RETRY_DELAY, EnvironmentSyncSystem, FALLBACK_HAND_SCALE, HandPoseTracker, IKSystem, InputSystem, InstancedMeshSystem, KeyboardKeys, LightSyncSystem, MATCH_FALLOFF, MAX_PLAUSIBLE_SPEED, MAX_SAMPLE_AGE_SECONDS, MaterialSyncSystem, MeshGeometrySystem, NO_XR_CAPABILITIES, ObjectVisibilitySystem, PINCH_FINGERS, PhysicsSyncSystem, PostprocessingSyncSystem, RenderSystem, SCRIPT_OBJECT_ROOT_FLAG, STRAIGHT_COS, ScriptBehaviourSystem, ScriptObject, ScriptObjectSystem, SlotChooser, TeleportAimGate, ThrowVelocityTracker, TransformSyncSystem, UIInteractionSystem, UIPanelSystem, VELOCITY_SAMPLES, VRTeleportAreaSystem, VideoSystem, XRAnchorSystem, XRControllerVisualSystem, XREnvironmentSystem, XRHandPoseSystem, XRHitTestSystem, XRHoverVisualSystem, XRInputSystem, XRInteractionSystem, XRLocomotionSystem, XRSessionSystem, XRTeleportVisualSystem, XR_FINGERS, XR_HOVER_SHELL_FLAG, angularVelocityFrom, applyHandMaterial, arcGroundCrossing, computeFingerCurl, computeHandShape, computePalmPose, computePalmWidth, computePinch, computeSpread, createHandMaterial, estimateHandScale, gripQuaternion, matchHandPose, readXrCapabilities, sampleTeleportArc, setWorldQuaternion, soundBankFiles, twoBoneIK };
10301
+ //# sourceMappingURL=chunk-2DJBNWBB.js.map
10302
+ //# sourceMappingURL=chunk-2DJBNWBB.js.map