@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
@@ -599,6 +599,85 @@ declare class TransformComponent extends Component {
599
599
  setRotation(input: TransformInput, order?: EulerOrder): this;
600
600
  }
601
601
 
602
+ /** Three numbers, as {@link TransformComponent} keeps them. */
603
+ type Xyz = {
604
+ x: number;
605
+ y: number;
606
+ z: number;
607
+ };
608
+ /**
609
+ * Where an attached entity goes while certain clips play: a rifle slung on the
610
+ * back in Idle, a sword hidden in Swim.
611
+ */
612
+ type BoneHold = {
613
+ /** The clips this hold is for. */
614
+ clips: string[];
615
+ /** Another bone, by node name, for these clips. Unset: the attachment's own. */
616
+ bone: string | null;
617
+ /** Another bone by humanoid name, used when the node name isn't found (another rig). */
618
+ humanoid: string | null;
619
+ /** Hide the entity in these clips. */
620
+ hidden: boolean;
621
+ /** Offset from the bone in these clips, instead of the entity's Transform position. */
622
+ position: Xyz | null;
623
+ /** Rotation from the bone in radians, instead of the entity's Transform rotation. */
624
+ rotation: Xyz | null;
625
+ };
626
+ /** A hold with every field filled in. */
627
+ declare function normalizeBoneHold(hold: Partial<BoneHold>): BoneHold;
628
+ /** Optional initializer for {@link BoneAttachmentComponent}. */
629
+ type BoneAttachmentOptions = {
630
+ /** The bone's node name in the parent's model (as three.js names it). */
631
+ bone?: string;
632
+ /** The bone's humanoid name (`rightHand`, `head` …), used when the node name isn't found (another rig). */
633
+ humanoid?: string | null;
634
+ /** Cancel the bone's world scale so offsets are in metres on any rig. Defaults to `true`. */
635
+ compensateScale?: boolean;
636
+ /** Turn the attachment off without removing it. Defaults to `true`. */
637
+ enabled?: boolean;
638
+ /** Where it goes in particular clips. Defaults to none. */
639
+ holds?: Array<Partial<BoneHold> & {
640
+ clips: string[];
641
+ }>;
642
+ /** Hide it while a clip no hold names is playing. Defaults to `false`. */
643
+ hideInOtherClips?: boolean;
644
+ };
645
+ /**
646
+ * Fixes an entity to a bone of its PARENT's model — a sword in a hand, a hat
647
+ * on a head, a backpack on the chest — so it moves with every animation.
648
+ *
649
+ * The entity's `ParentId` stays the character; this names the bone. The
650
+ * `ObjectManagementSystem` then parents the entity's object under that bone
651
+ * (through a small socket that cancels the rig's scale), and the entity's
652
+ * Transform becomes its offset FROM the bone: position in metres, rotation
653
+ * relative to the bone. Until the model has loaded, or when the bone isn't
654
+ * found, the entity sits under the character as an ordinary child.
655
+ *
656
+ * `holds` change that per clip of the character's Animation component, so a
657
+ * rifle can be in the hands in the rifle clips, on the back in Idle and hidden
658
+ * in the rest. With no clip playing the attachment is as its own fields say.
659
+ *
660
+ * Attach and detach with `ObjectManagementSystem.attachToBone` /
661
+ * `detachFromBone`, which can keep the entity where it is in the world.
662
+ *
663
+ * @category Components
664
+ */
665
+ declare class BoneAttachmentComponent extends Component {
666
+ /** The bone's node name in the parent's model. */
667
+ bone: string;
668
+ /** The bone's humanoid name, the fallback when the node name isn't found. */
669
+ humanoid: string | null;
670
+ /** Cancel the bone's world scale (offsets in metres on a centimetre rig). */
671
+ compensateScale: boolean;
672
+ /** Whether the entity follows the bone. Off: an ordinary child of the character. */
673
+ enabled: boolean;
674
+ /** Where the entity goes in particular clips; the first hold naming the clip wins. */
675
+ holds: BoneHold[];
676
+ /** Hide the entity while a clip no hold names is playing. */
677
+ hideInOtherClips: boolean;
678
+ constructor(options?: BoneAttachmentOptions);
679
+ }
680
+
602
681
  /** The limb a chain moves: its end bone, by humanoid name. */
603
682
  type IKLimb = "leftHand" | "rightHand" | "leftFoot" | "rightFoot";
604
683
  /** One limb reaching for an entity. */
@@ -615,6 +694,14 @@ type IKChain = {
615
694
  matchRotation: boolean;
616
695
  /** Whether this chain runs. */
617
696
  enabled: boolean;
697
+ /** Only while one of these clips plays (`null` = whatever plays). */
698
+ clips: string[] | null;
699
+ /**
700
+ * Seconds a chain with `clips` takes to fade in or out when the clip changes;
701
+ * `null` follows the Animation component's cross-fade, so the IK and the clip
702
+ * change together.
703
+ */
704
+ fade: number | null;
618
705
  };
619
706
  /** Optional initializer for {@link IKComponent}. */
620
707
  type IKOptions = {
@@ -635,6 +722,11 @@ declare function normalizeIKChain(chain: Partial<IKChain> & {
635
722
  * otherwise. Bones are found by humanoid name, so any rig the editor
636
723
  * recognises works (Mixamo, auto-rigs, Unreal, VRM).
637
724
  *
725
+ * A chain with `clips` runs only while one of those clips plays, fading in and
726
+ * out as the clip changes: a left hand on a rifle's grip in the rifle clips,
727
+ * free in the rest. Without an Animation component no clip is playing, so such
728
+ * a chain stays off.
729
+ *
638
730
  * The `IKSystem` runs it right after the `AnimationSystem`; objects attached
639
731
  * to the moved bones follow.
640
732
  *
@@ -1229,6 +1321,8 @@ declare class ObjectManagementSystem implements EcsSystem {
1229
1321
  private readonly boneSockets;
1230
1322
  /** Attachments whose bone wasn't found in a given model (skip re-searching every frame). */
1231
1323
  private readonly boneMisses;
1324
+ /** Attachments with holds, and which one the current clip calls for (`null`: none). */
1325
+ private readonly boneHolds;
1232
1326
  constructor(scene: THREE.Scene, camera: THREE.PerspectiveCamera, isEditor?: boolean);
1233
1327
  register(kind: EcsEntityKind, factory: EntityFactory): void;
1234
1328
  registerComponentFactory(kind: EcsComponentFactoryKind, factory: ComponentFactory): void;
@@ -1280,6 +1374,16 @@ declare class ObjectManagementSystem implements EcsSystem {
1280
1374
  * still applies, as it does to any child.
1281
1375
  */
1282
1376
  private fitSocketScale;
1377
+ /** Whether {@link applyBoneHold} is managing this attachment. */
1378
+ hasBoneHold(entityId: EntityId): boolean;
1379
+ /**
1380
+ * Put an attachment in a hold for the clip now playing (`hold` null: the
1381
+ * attachment's own bone and Transform), moving it to the hold's bone if that
1382
+ * changed. Called each frame, since a socket can be rebuilt under it.
1383
+ */
1384
+ applyBoneHold(world: World, entityId: EntityId, hold: BoneHold | null, hidden: boolean): void;
1385
+ /** Stop managing an attachment that no longer has holds, and put it back. */
1386
+ releaseBoneHold(world: World, entityId: EntityId): void;
1283
1387
  /**
1284
1388
  * Load a model entity's file again and swap it in (the file was rewritten);
1285
1389
  * the entity, its components and children stay, attachments re-home.
@@ -1615,7 +1719,8 @@ declare class TransformSyncSystem implements EcsSystem {
1615
1719
  * Runs each {@link IKComponent}'s chains after the animation: hands and feet
1616
1720
  * reach their target entities. Bones the animation doesn't drive would keep
1617
1721
  * last frame's IK pose and drift, so every bone IK touched is put back to its
1618
- * pre-IK rotation first unless the animation already overwrote it.
1722
+ * pre-IK rotation first unless the animation already overwrote it. A chain
1723
+ * with `clips` fades with the clip that's playing.
1619
1724
  *
1620
1725
  * @category Systems
1621
1726
  */
@@ -1627,7 +1732,9 @@ declare class IKSystem implements EcsSystem {
1627
1732
  */
1628
1733
  getReachError(entityId: EntityId, limb: IKLimb): number | null;
1629
1734
  private restore;
1630
- update(world: World): void;
1735
+ /** How strongly a chain applies now, moving its fade on by `deltaTime`. */
1736
+ private fadeOf;
1737
+ update(world: World, deltaTime?: number): void;
1631
1738
  dispose(): void;
1632
1739
  }
1633
1740
 
@@ -2013,4 +2120,4 @@ interface EcsSystem {
2013
2120
  dispose?(world: World): void;
2014
2121
  }
2015
2122
 
2016
- export { type RenderBackend as $, type NetPose as A, type NetSound as B, Component as C, DEFAULT_ENVIRONMENT_LIGHTING as D, Environment as E, type VoiceFromRoom as F, type VoiceToRoom as G, type VoiceHandle as H, type IKChain as I, type VoicePeer as J, type EcsSystem as K, type NetworkService as L, type EntityId as M, type NetValue as N, type NetworkHandle as O, ParentId as P, type NetSpawnOptions as Q, type VoiceSignal as R, type WorldEntityView$1 as S, TransformComponent as T, type SpawnPrefabSource as U, type Vec3$1 as V, World as W, type SpawnPrefabOptions as X, type PlaySlotOptions as Y, type ComponentClass as Z, type ParentLookup as _, DEFAULT_ENVIRONMENT_STATE as a, spawnPrefab as a$, type EcsEntityKind as a0, ObjectManagementSystem as a1, type SubtreeSnapshot as a2, type ExternalRefWarning as a3, type AssetInput as a4, type AudioBus as a5, AudioMixer as a6, AudioSystem as a7, type CheckboxInput as a8, type ChromaKeyOptions as a9, type ScriptErrorEvent as aA, type ScriptErrorListener as aB, type ScriptErrorPhase as aC, type ScriptErrorReport as aD, type ScriptErrorSource as aE, type SelectionListener as aF, type SliderInput as aG, SlotChooser as aH, type SoundBankAsset as aI, type SoundSlot as aJ, type SoundTake as aK, type TextInput as aL, type ToggleInput as aM, TransformSyncSystem as aN, type Vec3 as aO, type Vector2Input as aP, type Vector3Input as aQ, clearPrefabCache as aR, despawnPrefab as aS, findModelBone as aT, listModelBones as aU, loadPrefab as aV, parsePrefabAsset as aW, prefabFileVersionFor as aX, remapSnapshotEntityIds as aY, setPrefabAssetUrlResolver as aZ, soundBankFiles as a_, type ColorInput as aa, type ComponentFactory as ab, type ComponentInput as ac, type ComponentKind as ad, type DropdownInput as ae, type DropdownOption as af, type EcsComponentFactoryKind as ag, type EcsEntityEditorKind as ah, type EcsRenderer as ai, type EntityInput as aj, type FloatInput as ak, IKSystem as al, InputSystem as am, type IntersectionResult as an, type KeyboardKey as ao, KeyboardKeys as ap, type ModelBoneInfo as aq, type MouseButton as ar, PREFAB_FILE_VERSION as as, PREFAB_FILE_VERSION_NESTED as at, type PostprocessingBuildContext as au, type PostprocessingPipeline as av, type PrefabAsset as aw, type RemapSnapshotOptions as ax, RenderSystem as ay, type RendererKind as az, DEFAULT_POSTPROCESSING_STATE as b, type AnyComponent as b0, DEBUG_CHANGE_IGNORED_SYSTEMS as b1, type WorldHistorySnapshot as b2, cloneHistoryValue as b3, normalizeDebugValue as b4, type EnvironmentFogState as c, type EnvironmentFogType as d, type EnvironmentGradientEffect as e, type EnvironmentLightingState as f, type EnvironmentSkyboxImageProjection as g, type EnvironmentSkyboxState as h, type EnvironmentSkyboxType as i, type EnvironmentState as j, type EnvironmentToneMapping as k, IKComponent as l, type IKLimb as m, type IKOptions as n, NetworkIdentityComponent as o, NetworkSpawnerComponent as p, NetworkTransformComponent as q, type NetworkTransformOptions as r, NetworkedPropsComponent as s, Postprocessing as t, type PostprocessingState as u, type TransformData as v, normalizeEnvironmentLighting as w, normalizeIKChain as x, type NetworkTransport as y, type NetEntityView as z };
2123
+ export { type SpawnPrefabOptions as $, normalizeIKChain as A, BoneAttachmentComponent as B, Component as C, DEFAULT_ENVIRONMENT_LIGHTING as D, Environment as E, type NetworkTransport as F, type NetEntityView as G, type NetPose as H, type IKChain as I, type NetSound as J, type VoiceFromRoom as K, type VoiceToRoom as L, type VoiceHandle as M, type NetValue as N, type VoicePeer as O, ParentId as P, type EcsSystem as Q, type NetworkService as R, type EntityId as S, TransformComponent as T, type NetworkHandle as U, type Vec3$1 as V, World as W, type NetSpawnOptions as X, type VoiceSignal as Y, type WorldEntityView$1 as Z, type SpawnPrefabSource as _, type BoneAttachmentOptions as a, prefabFileVersionFor as a$, type PlaySlotOptions as a0, type ComponentClass as a1, type ParentLookup as a2, type RenderBackend as a3, type EcsEntityKind as a4, ObjectManagementSystem as a5, type SubtreeSnapshot as a6, type ExternalRefWarning as a7, type AssetInput as a8, type AudioBus as a9, type PrefabAsset as aA, type RemapSnapshotOptions as aB, RenderSystem as aC, type RendererKind as aD, type ScriptErrorEvent as aE, type ScriptErrorListener as aF, type ScriptErrorPhase as aG, type ScriptErrorReport as aH, type ScriptErrorSource as aI, type SelectionListener as aJ, type SliderInput as aK, SlotChooser as aL, type SoundBankAsset as aM, type SoundSlot as aN, type SoundTake as aO, type TextInput as aP, type ToggleInput as aQ, TransformSyncSystem as aR, type Vec3 as aS, type Vector2Input as aT, type Vector3Input as aU, clearPrefabCache as aV, despawnPrefab as aW, findModelBone as aX, listModelBones as aY, loadPrefab as aZ, parsePrefabAsset as a_, AudioMixer as aa, AudioSystem as ab, type CheckboxInput as ac, type ChromaKeyOptions as ad, type ColorInput as ae, type ComponentFactory as af, type ComponentInput as ag, type ComponentKind as ah, type DropdownInput as ai, type DropdownOption as aj, type EcsComponentFactoryKind as ak, type EcsEntityEditorKind as al, type EcsRenderer as am, type EntityInput as an, type FloatInput as ao, IKSystem as ap, InputSystem as aq, type IntersectionResult as ar, type KeyboardKey as as, KeyboardKeys as at, type ModelBoneInfo as au, type MouseButton as av, PREFAB_FILE_VERSION as aw, PREFAB_FILE_VERSION_NESTED as ax, type PostprocessingBuildContext as ay, type PostprocessingPipeline as az, type BoneHold as b, remapSnapshotEntityIds as b0, setPrefabAssetUrlResolver as b1, soundBankFiles as b2, spawnPrefab as b3, type AnyComponent as b4, DEBUG_CHANGE_IGNORED_SYSTEMS as b5, type WorldHistorySnapshot as b6, cloneHistoryValue as b7, normalizeDebugValue as b8, DEFAULT_ENVIRONMENT_STATE as c, DEFAULT_POSTPROCESSING_STATE as d, type EnvironmentFogState as e, type EnvironmentFogType as f, type EnvironmentGradientEffect as g, type EnvironmentLightingState as h, type EnvironmentSkyboxImageProjection as i, type EnvironmentSkyboxState as j, type EnvironmentSkyboxType as k, type EnvironmentState as l, type EnvironmentToneMapping as m, IKComponent as n, type IKLimb as o, type IKOptions as p, NetworkIdentityComponent as q, NetworkSpawnerComponent as r, NetworkTransformComponent as s, type NetworkTransformOptions as t, NetworkedPropsComponent as u, Postprocessing as v, type PostprocessingState as w, type TransformData as x, normalizeBoneHold as y, normalizeEnvironmentLighting as z };
@@ -599,6 +599,85 @@ declare class TransformComponent extends Component {
599
599
  setRotation(input: TransformInput, order?: EulerOrder): this;
600
600
  }
601
601
 
602
+ /** Three numbers, as {@link TransformComponent} keeps them. */
603
+ type Xyz = {
604
+ x: number;
605
+ y: number;
606
+ z: number;
607
+ };
608
+ /**
609
+ * Where an attached entity goes while certain clips play: a rifle slung on the
610
+ * back in Idle, a sword hidden in Swim.
611
+ */
612
+ type BoneHold = {
613
+ /** The clips this hold is for. */
614
+ clips: string[];
615
+ /** Another bone, by node name, for these clips. Unset: the attachment's own. */
616
+ bone: string | null;
617
+ /** Another bone by humanoid name, used when the node name isn't found (another rig). */
618
+ humanoid: string | null;
619
+ /** Hide the entity in these clips. */
620
+ hidden: boolean;
621
+ /** Offset from the bone in these clips, instead of the entity's Transform position. */
622
+ position: Xyz | null;
623
+ /** Rotation from the bone in radians, instead of the entity's Transform rotation. */
624
+ rotation: Xyz | null;
625
+ };
626
+ /** A hold with every field filled in. */
627
+ declare function normalizeBoneHold(hold: Partial<BoneHold>): BoneHold;
628
+ /** Optional initializer for {@link BoneAttachmentComponent}. */
629
+ type BoneAttachmentOptions = {
630
+ /** The bone's node name in the parent's model (as three.js names it). */
631
+ bone?: string;
632
+ /** The bone's humanoid name (`rightHand`, `head` …), used when the node name isn't found (another rig). */
633
+ humanoid?: string | null;
634
+ /** Cancel the bone's world scale so offsets are in metres on any rig. Defaults to `true`. */
635
+ compensateScale?: boolean;
636
+ /** Turn the attachment off without removing it. Defaults to `true`. */
637
+ enabled?: boolean;
638
+ /** Where it goes in particular clips. Defaults to none. */
639
+ holds?: Array<Partial<BoneHold> & {
640
+ clips: string[];
641
+ }>;
642
+ /** Hide it while a clip no hold names is playing. Defaults to `false`. */
643
+ hideInOtherClips?: boolean;
644
+ };
645
+ /**
646
+ * Fixes an entity to a bone of its PARENT's model — a sword in a hand, a hat
647
+ * on a head, a backpack on the chest — so it moves with every animation.
648
+ *
649
+ * The entity's `ParentId` stays the character; this names the bone. The
650
+ * `ObjectManagementSystem` then parents the entity's object under that bone
651
+ * (through a small socket that cancels the rig's scale), and the entity's
652
+ * Transform becomes its offset FROM the bone: position in metres, rotation
653
+ * relative to the bone. Until the model has loaded, or when the bone isn't
654
+ * found, the entity sits under the character as an ordinary child.
655
+ *
656
+ * `holds` change that per clip of the character's Animation component, so a
657
+ * rifle can be in the hands in the rifle clips, on the back in Idle and hidden
658
+ * in the rest. With no clip playing the attachment is as its own fields say.
659
+ *
660
+ * Attach and detach with `ObjectManagementSystem.attachToBone` /
661
+ * `detachFromBone`, which can keep the entity where it is in the world.
662
+ *
663
+ * @category Components
664
+ */
665
+ declare class BoneAttachmentComponent extends Component {
666
+ /** The bone's node name in the parent's model. */
667
+ bone: string;
668
+ /** The bone's humanoid name, the fallback when the node name isn't found. */
669
+ humanoid: string | null;
670
+ /** Cancel the bone's world scale (offsets in metres on a centimetre rig). */
671
+ compensateScale: boolean;
672
+ /** Whether the entity follows the bone. Off: an ordinary child of the character. */
673
+ enabled: boolean;
674
+ /** Where the entity goes in particular clips; the first hold naming the clip wins. */
675
+ holds: BoneHold[];
676
+ /** Hide the entity while a clip no hold names is playing. */
677
+ hideInOtherClips: boolean;
678
+ constructor(options?: BoneAttachmentOptions);
679
+ }
680
+
602
681
  /** The limb a chain moves: its end bone, by humanoid name. */
603
682
  type IKLimb = "leftHand" | "rightHand" | "leftFoot" | "rightFoot";
604
683
  /** One limb reaching for an entity. */
@@ -615,6 +694,14 @@ type IKChain = {
615
694
  matchRotation: boolean;
616
695
  /** Whether this chain runs. */
617
696
  enabled: boolean;
697
+ /** Only while one of these clips plays (`null` = whatever plays). */
698
+ clips: string[] | null;
699
+ /**
700
+ * Seconds a chain with `clips` takes to fade in or out when the clip changes;
701
+ * `null` follows the Animation component's cross-fade, so the IK and the clip
702
+ * change together.
703
+ */
704
+ fade: number | null;
618
705
  };
619
706
  /** Optional initializer for {@link IKComponent}. */
620
707
  type IKOptions = {
@@ -635,6 +722,11 @@ declare function normalizeIKChain(chain: Partial<IKChain> & {
635
722
  * otherwise. Bones are found by humanoid name, so any rig the editor
636
723
  * recognises works (Mixamo, auto-rigs, Unreal, VRM).
637
724
  *
725
+ * A chain with `clips` runs only while one of those clips plays, fading in and
726
+ * out as the clip changes: a left hand on a rifle's grip in the rifle clips,
727
+ * free in the rest. Without an Animation component no clip is playing, so such
728
+ * a chain stays off.
729
+ *
638
730
  * The `IKSystem` runs it right after the `AnimationSystem`; objects attached
639
731
  * to the moved bones follow.
640
732
  *
@@ -1229,6 +1321,8 @@ declare class ObjectManagementSystem implements EcsSystem {
1229
1321
  private readonly boneSockets;
1230
1322
  /** Attachments whose bone wasn't found in a given model (skip re-searching every frame). */
1231
1323
  private readonly boneMisses;
1324
+ /** Attachments with holds, and which one the current clip calls for (`null`: none). */
1325
+ private readonly boneHolds;
1232
1326
  constructor(scene: THREE.Scene, camera: THREE.PerspectiveCamera, isEditor?: boolean);
1233
1327
  register(kind: EcsEntityKind, factory: EntityFactory): void;
1234
1328
  registerComponentFactory(kind: EcsComponentFactoryKind, factory: ComponentFactory): void;
@@ -1280,6 +1374,16 @@ declare class ObjectManagementSystem implements EcsSystem {
1280
1374
  * still applies, as it does to any child.
1281
1375
  */
1282
1376
  private fitSocketScale;
1377
+ /** Whether {@link applyBoneHold} is managing this attachment. */
1378
+ hasBoneHold(entityId: EntityId): boolean;
1379
+ /**
1380
+ * Put an attachment in a hold for the clip now playing (`hold` null: the
1381
+ * attachment's own bone and Transform), moving it to the hold's bone if that
1382
+ * changed. Called each frame, since a socket can be rebuilt under it.
1383
+ */
1384
+ applyBoneHold(world: World, entityId: EntityId, hold: BoneHold | null, hidden: boolean): void;
1385
+ /** Stop managing an attachment that no longer has holds, and put it back. */
1386
+ releaseBoneHold(world: World, entityId: EntityId): void;
1283
1387
  /**
1284
1388
  * Load a model entity's file again and swap it in (the file was rewritten);
1285
1389
  * the entity, its components and children stay, attachments re-home.
@@ -1615,7 +1719,8 @@ declare class TransformSyncSystem implements EcsSystem {
1615
1719
  * Runs each {@link IKComponent}'s chains after the animation: hands and feet
1616
1720
  * reach their target entities. Bones the animation doesn't drive would keep
1617
1721
  * last frame's IK pose and drift, so every bone IK touched is put back to its
1618
- * pre-IK rotation first unless the animation already overwrote it.
1722
+ * pre-IK rotation first unless the animation already overwrote it. A chain
1723
+ * with `clips` fades with the clip that's playing.
1619
1724
  *
1620
1725
  * @category Systems
1621
1726
  */
@@ -1627,7 +1732,9 @@ declare class IKSystem implements EcsSystem {
1627
1732
  */
1628
1733
  getReachError(entityId: EntityId, limb: IKLimb): number | null;
1629
1734
  private restore;
1630
- update(world: World): void;
1735
+ /** How strongly a chain applies now, moving its fade on by `deltaTime`. */
1736
+ private fadeOf;
1737
+ update(world: World, deltaTime?: number): void;
1631
1738
  dispose(): void;
1632
1739
  }
1633
1740
 
@@ -2013,4 +2120,4 @@ interface EcsSystem {
2013
2120
  dispose?(world: World): void;
2014
2121
  }
2015
2122
 
2016
- export { type WorldEntityView$1 as $, type TransformData as A, normalizeEnvironmentLighting as B, type ChromaKeyOptions as C, DEFAULT_ENVIRONMENT_LIGHTING as D, type EcsRenderer as E, normalizeIKChain as F, type NetworkTransport as G, type NetEntityView as H, type IKChain as I, type NetPose as J, type NetSound as K, type VoiceFromRoom as L, type VoiceToRoom as M, type NetValue as N, type VoiceHandle as O, type PostprocessingPipeline as P, type VoicePeer as Q, type RenderBackend as R, type EcsSystem as S, TransformComponent as T, type NetworkService as U, type Vec3$1 as V, World as W, type EntityId as X, type NetworkHandle as Y, type NetSpawnOptions as Z, type VoiceSignal as _, type PostprocessingBuildContext as a, spawnPrefab as a$, type SpawnPrefabSource as a0, type SpawnPrefabOptions as a1, type PlaySlotOptions as a2, type ComponentClass as a3, type ParentLookup as a4, type EcsEntityKind as a5, ObjectManagementSystem as a6, type SubtreeSnapshot as a7, type ExternalRefWarning as a8, type AssetInput as a9, type ScriptErrorEvent as aA, type ScriptErrorListener as aB, type ScriptErrorPhase as aC, type ScriptErrorReport as aD, type ScriptErrorSource as aE, type SelectionListener as aF, type SliderInput as aG, SlotChooser as aH, type SoundBankAsset as aI, type SoundSlot as aJ, type SoundTake as aK, type TextInput as aL, type ToggleInput as aM, TransformSyncSystem as aN, type Vec3 as aO, type Vector2Input as aP, type Vector3Input as aQ, clearPrefabCache as aR, despawnPrefab as aS, findModelBone as aT, listModelBones as aU, loadPrefab as aV, parsePrefabAsset as aW, prefabFileVersionFor as aX, remapSnapshotEntityIds as aY, setPrefabAssetUrlResolver as aZ, soundBankFiles as a_, type AudioBus as aa, AudioMixer as ab, AudioSystem as ac, type CheckboxInput as ad, type ColorInput as ae, type ComponentFactory as af, type ComponentInput as ag, type ComponentKind as ah, type DropdownInput as ai, type DropdownOption as aj, type EcsComponentFactoryKind as ak, type EcsEntityEditorKind as al, type EntityInput as am, type FloatInput as an, IKSystem as ao, InputSystem as ap, type IntersectionResult as aq, type KeyboardKey as ar, KeyboardKeys as as, type ModelBoneInfo as at, type MouseButton as au, PREFAB_FILE_VERSION as av, PREFAB_FILE_VERSION_NESTED as aw, type PrefabAsset as ax, type RemapSnapshotOptions as ay, RenderSystem as az, type PostprocessingState as b, type AnyComponent as b0, DEBUG_CHANGE_IGNORED_SYSTEMS as b1, type WorldHistorySnapshot as b2, cloneHistoryValue as b3, normalizeDebugValue as b4, type RendererKind as c, Component as d, DEFAULT_ENVIRONMENT_STATE as e, DEFAULT_POSTPROCESSING_STATE as f, Environment as g, type EnvironmentFogState as h, type EnvironmentFogType as i, type EnvironmentGradientEffect as j, type EnvironmentLightingState as k, type EnvironmentSkyboxImageProjection as l, type EnvironmentSkyboxState as m, type EnvironmentSkyboxType as n, type EnvironmentState as o, type EnvironmentToneMapping as p, IKComponent as q, type IKLimb as r, type IKOptions as s, NetworkIdentityComponent as t, NetworkSpawnerComponent as u, NetworkTransformComponent as v, type NetworkTransformOptions as w, NetworkedPropsComponent as x, ParentId as y, Postprocessing as z };
2123
+ export { type EntityId as $, ParentId as A, BoneAttachmentComponent as B, type ChromaKeyOptions as C, DEFAULT_ENVIRONMENT_LIGHTING as D, type EcsRenderer as E, Postprocessing as F, type TransformData as G, normalizeBoneHold as H, type IKChain as I, normalizeEnvironmentLighting as J, normalizeIKChain as K, type NetworkTransport as L, type NetEntityView as M, type NetValue as N, type NetPose as O, type PostprocessingPipeline as P, type NetSound as Q, type RenderBackend as R, type VoiceFromRoom as S, TransformComponent as T, type VoiceToRoom as U, type Vec3$1 as V, type VoiceHandle as W, type VoicePeer as X, type EcsSystem as Y, type NetworkService as Z, World as _, type PostprocessingBuildContext as a, prefabFileVersionFor as a$, type NetworkHandle as a0, type NetSpawnOptions as a1, type VoiceSignal as a2, type WorldEntityView$1 as a3, type SpawnPrefabSource as a4, type SpawnPrefabOptions as a5, type PlaySlotOptions as a6, type ComponentClass as a7, type ParentLookup as a8, type EcsEntityKind as a9, PREFAB_FILE_VERSION_NESTED as aA, type PrefabAsset as aB, type RemapSnapshotOptions as aC, RenderSystem as aD, type ScriptErrorEvent as aE, type ScriptErrorListener as aF, type ScriptErrorPhase as aG, type ScriptErrorReport as aH, type ScriptErrorSource as aI, type SelectionListener as aJ, type SliderInput as aK, SlotChooser as aL, type SoundBankAsset as aM, type SoundSlot as aN, type SoundTake as aO, type TextInput as aP, type ToggleInput as aQ, TransformSyncSystem as aR, type Vec3 as aS, type Vector2Input as aT, type Vector3Input as aU, clearPrefabCache as aV, despawnPrefab as aW, findModelBone as aX, listModelBones as aY, loadPrefab as aZ, parsePrefabAsset as a_, ObjectManagementSystem as aa, type SubtreeSnapshot as ab, type ExternalRefWarning as ac, type AssetInput as ad, type AudioBus as ae, AudioMixer as af, AudioSystem as ag, type CheckboxInput as ah, type ColorInput as ai, type ComponentFactory as aj, type ComponentInput as ak, type ComponentKind as al, type DropdownInput as am, type DropdownOption as an, type EcsComponentFactoryKind as ao, type EcsEntityEditorKind as ap, type EntityInput as aq, type FloatInput as ar, IKSystem as as, InputSystem as at, type IntersectionResult as au, type KeyboardKey as av, KeyboardKeys as aw, type ModelBoneInfo as ax, type MouseButton as ay, PREFAB_FILE_VERSION as az, type PostprocessingState as b, remapSnapshotEntityIds as b0, setPrefabAssetUrlResolver as b1, soundBankFiles as b2, spawnPrefab as b3, type AnyComponent as b4, DEBUG_CHANGE_IGNORED_SYSTEMS as b5, type WorldHistorySnapshot as b6, cloneHistoryValue as b7, normalizeDebugValue as b8, type RendererKind as c, Component as d, type BoneAttachmentOptions as e, type BoneHold as f, DEFAULT_ENVIRONMENT_STATE as g, DEFAULT_POSTPROCESSING_STATE as h, Environment as i, type EnvironmentFogState as j, type EnvironmentFogType as k, type EnvironmentGradientEffect as l, type EnvironmentLightingState as m, type EnvironmentSkyboxImageProjection as n, type EnvironmentSkyboxState as o, type EnvironmentSkyboxType as p, type EnvironmentState as q, type EnvironmentToneMapping as r, IKComponent as s, type IKLimb as t, type IKOptions as u, NetworkIdentityComponent as v, NetworkSpawnerComponent as w, NetworkTransformComponent as x, type NetworkTransformOptions as y, NetworkedPropsComponent as z };
@@ -1,5 +1,5 @@
1
1
  import * as THREE from 'three';
2
- import { C as Component, a5 as AudioBus, a0 as EcsEntityKind, ah as EcsEntityEditorKind, M as EntityId } from './System-BldSHxZV.cjs';
2
+ import { C as Component, a9 as AudioBus, a4 as EcsEntityKind, al as EcsEntityEditorKind, S as EntityId } from './System-D8vm-Jvv.cjs';
3
3
  import * as RAPIER from '@dimforge/rapier3d-compat';
4
4
  import { a as XrFinger, c as XrHandPoseDirection, b as XrHandPoseOrientation, X as XrHandPoseDefinition } from './handPose-DlcTtqgx.cjs';
5
5
 
@@ -1624,45 +1624,6 @@ declare class XRAnchorComponent extends Component {
1624
1624
  constructor(options?: XRAnchorOptions);
1625
1625
  }
1626
1626
 
1627
- /** Optional initializer for {@link BoneAttachmentComponent}. */
1628
- type BoneAttachmentOptions = {
1629
- /** The bone's node name in the parent's model (as three.js names it). */
1630
- bone?: string;
1631
- /** The bone's humanoid name (`rightHand`, `head` …), used when the node name isn't found (another rig). */
1632
- humanoid?: string | null;
1633
- /** Cancel the bone's world scale so offsets are in metres on any rig. Defaults to `true`. */
1634
- compensateScale?: boolean;
1635
- /** Turn the attachment off without removing it. Defaults to `true`. */
1636
- enabled?: boolean;
1637
- };
1638
- /**
1639
- * Fixes an entity to a bone of its PARENT's model — a sword in a hand, a hat
1640
- * on a head, a backpack on the chest — so it moves with every animation.
1641
- *
1642
- * The entity's `ParentId` stays the character; this names the bone. The
1643
- * `ObjectManagementSystem` then parents the entity's object under that bone
1644
- * (through a small socket that cancels the rig's scale), and the entity's
1645
- * Transform becomes its offset FROM the bone: position in metres, rotation
1646
- * relative to the bone. Until the model has loaded, or when the bone isn't
1647
- * found, the entity sits under the character as an ordinary child.
1648
- *
1649
- * Attach and detach with `ObjectManagementSystem.attachToBone` /
1650
- * `detachFromBone`, which can keep the entity where it is in the world.
1651
- *
1652
- * @category Components
1653
- */
1654
- declare class BoneAttachmentComponent extends Component {
1655
- /** The bone's node name in the parent's model. */
1656
- bone: string;
1657
- /** The bone's humanoid name, the fallback when the node name isn't found. */
1658
- humanoid: string | null;
1659
- /** Cancel the bone's world scale (offsets in metres on a centimetre rig). */
1660
- compensateScale: boolean;
1661
- /** Whether the entity follows the bone. Off: an ordinary child of the character. */
1662
- enabled: boolean;
1663
- constructor(options?: BoneAttachmentOptions);
1664
- }
1665
-
1666
1627
  /**
1667
1628
  * The style model for spatial UI.
1668
1629
  *
@@ -2186,4 +2147,4 @@ declare class XRHandPoseComponent extends Component {
2186
2147
  constructor(options?: XRHandPoseOptions);
2187
2148
  }
2188
2149
 
2189
- export { ScriptComponent as $, AnimationComponent as A, BoneAttachmentComponent as B, CameraComponent as C, DEFAULT_COLLIDER_STATE as D, type EditableMeshObjectKind as E, type LightValueState as F, MaterialComponent as G, type MaterialTypeValue as H, ImageComponent as I, type MaterialValueState as J, MeshComponent as K, LightComponent as L, MODEL_NO_PATH_MESSAGE as M, MeshGeometryComponent as N, type MeshGeometryParameters as O, type MeshGeometryParametersByKind as P, ModelComponent as Q, type ModelLoadState as R, Name as S, Object3DRef as T, PhysicsComponent as U, type PhysicsState as V, type PlaneMeshParameters as W, type RadiusHeightMeshParameters as X, type RadiusMeshParameters as Y, type RigidbodyState as Z, type RigidbodyType as _, type AnimationComponentOptions as a, AnimationStateManager as a$, type ScriptEntry as a0, ScriptObjectComponent as a1, type ScriptObjectComponentInput as a2, type ScriptObjectRuntimeState as a3, Selectable as a4, SelectionTransformState as a5, SpriteComponent as a6, type TextureFilteringValue as a7, type TransformModeValue as a8, type TransformSpaceValue as a9, XRInteractorComponent as aA, type XRInteractorOptions as aB, XRInteractorSideComponent as aC, XRRigComponent as aD, type XRRigOptions as aE, type XrAttachPoint as aF, type XrDistanceGrabBehavior as aG, type XrEnvironmentPhysics as aH, type XrGrabGesture as aI, type XrGrabHands as aJ, type XrGrabReach as aK, type XrHandPoseEntry as aL, type XrHandPreset as aM, type XrInteractorSide as aN, type XrInteractorType as aO, type XrLocomotionMode as aP, type XrTrackingOrigin as aQ, type XrTwoHandRotation as aR, createAttachPoint as aS, createHandPoseEntry as aT, defaultMaterialValue as aU, handPoseDefinitionFor as aV, normalizePhysicsState as aW, setModelLoadState as aX, setPhysicsLiveRef as aY, type AnimationStateCallbacks as aZ, AnimationStateMachine as a_, UIButtonComponent as aa, type UIButtonOptions as ab, UIPanelComponent as ac, type UIPanelOptions as ad, UISliderComponent as ae, type UISliderOptions as af, UITextComponent as ag, type UITextOptions as ah, UIToggleComponent as ai, type UIToggleOptions as aj, type UiFollowMode as ak, type UiIconPosition as al, type UiSliderVariant as am, type UiTextAlign as an, type UiTextVAlign as ao, type UiToggleVariant as ap, VRTeleportAreaComponent as aq, type VRTeleportAreaOptions as ar, VideoComponent as as, type VrTeleportShape as at, XRAnchorComponent as au, type XRAnchorOptions as av, XRHandPoseComponent as aw, type XRHandPoseOptions as ax, XRInteractableComponent as ay, type XRInteractableOptions as az, AudioComponent as b, type StateMachine as b0, type UiColorStop as b1, type UiPaint as b2, type UiShadow as b3, type UiStyle as b4, type UiTextStyle as b5, type UiTokens as b6, type BoneAttachmentOptions as c, type CameraComponentOptions as d, type CameraProjection as e, type CameraRuntimeType as f, type ColliderShape as g, type ColliderState as h, type CubeMeshParameters as i, DEFAULT_INSTANCED_MESH_PARAMETERS as j, DEFAULT_INSTANCE_TRANSFORM as k, DEFAULT_MESH_GEOMETRY_PARAMETERS as l, DEFAULT_PHYSICS_STATE as m, DEFAULT_POSE_CURLS as n, DEFAULT_POSE_DIRECTIONS as o, DEFAULT_RIGIDBODY_STATE as p, EntityType as q, ImageTarget as r, ImageTargetAnchor as s, type ImageTargetAnchorOptions as t, type ImageTargetReference as u, InstanceSlotComponent as v, type InstanceTransform as w, InstancedMeshComponent as x, type InstancedMeshKind as y, type LightShadowState as z };
2150
+ export { ScriptObjectComponent as $, AnimationComponent as A, MaterialComponent as B, CameraComponent as C, DEFAULT_COLLIDER_STATE as D, type EditableMeshObjectKind as E, type MaterialTypeValue as F, type MaterialValueState as G, MeshComponent as H, ImageComponent as I, MeshGeometryComponent as J, type MeshGeometryParameters as K, LightComponent as L, MODEL_NO_PATH_MESSAGE as M, type MeshGeometryParametersByKind as N, ModelComponent as O, type ModelLoadState as P, Name as Q, Object3DRef as R, PhysicsComponent as S, type PhysicsState as T, type PlaneMeshParameters as U, type RadiusHeightMeshParameters as V, type RadiusMeshParameters as W, type RigidbodyState as X, type RigidbodyType as Y, ScriptComponent as Z, type ScriptEntry as _, type AnimationComponentOptions as a, type UiColorStop as a$, type ScriptObjectComponentInput as a0, type ScriptObjectRuntimeState as a1, Selectable as a2, SelectionTransformState as a3, SpriteComponent as a4, type TextureFilteringValue as a5, type TransformModeValue as a6, type TransformSpaceValue as a7, UIButtonComponent as a8, type UIButtonOptions as a9, XRInteractorSideComponent as aA, XRRigComponent as aB, type XRRigOptions as aC, type XrAttachPoint as aD, type XrDistanceGrabBehavior as aE, type XrEnvironmentPhysics as aF, type XrGrabGesture as aG, type XrGrabHands as aH, type XrGrabReach as aI, type XrHandPoseEntry as aJ, type XrHandPreset as aK, type XrInteractorSide as aL, type XrInteractorType as aM, type XrLocomotionMode as aN, type XrTrackingOrigin as aO, type XrTwoHandRotation as aP, createAttachPoint as aQ, createHandPoseEntry as aR, defaultMaterialValue as aS, handPoseDefinitionFor as aT, normalizePhysicsState as aU, setModelLoadState as aV, setPhysicsLiveRef as aW, type AnimationStateCallbacks as aX, AnimationStateMachine as aY, AnimationStateManager as aZ, type StateMachine as a_, UIPanelComponent as aa, type UIPanelOptions as ab, UISliderComponent as ac, type UISliderOptions as ad, UITextComponent as ae, type UITextOptions as af, UIToggleComponent as ag, type UIToggleOptions as ah, type UiFollowMode as ai, type UiIconPosition as aj, type UiSliderVariant as ak, type UiTextAlign as al, type UiTextVAlign as am, type UiToggleVariant as an, VRTeleportAreaComponent as ao, type VRTeleportAreaOptions as ap, VideoComponent as aq, type VrTeleportShape as ar, XRAnchorComponent as as, type XRAnchorOptions as at, XRHandPoseComponent as au, type XRHandPoseOptions as av, XRInteractableComponent as aw, type XRInteractableOptions as ax, XRInteractorComponent as ay, type XRInteractorOptions as az, AudioComponent as b, type UiPaint as b0, type UiShadow as b1, type UiStyle as b2, type UiTextStyle as b3, type UiTokens as b4, type CameraComponentOptions as c, type CameraProjection as d, type CameraRuntimeType as e, type ColliderShape as f, type ColliderState as g, type CubeMeshParameters as h, DEFAULT_INSTANCED_MESH_PARAMETERS as i, DEFAULT_INSTANCE_TRANSFORM as j, DEFAULT_MESH_GEOMETRY_PARAMETERS as k, DEFAULT_PHYSICS_STATE as l, DEFAULT_POSE_CURLS as m, DEFAULT_POSE_DIRECTIONS as n, DEFAULT_RIGIDBODY_STATE as o, EntityType as p, ImageTarget as q, ImageTargetAnchor as r, type ImageTargetAnchorOptions as s, type ImageTargetReference as t, InstanceSlotComponent as u, type InstanceTransform as v, InstancedMeshComponent as w, type InstancedMeshKind as x, type LightShadowState as y, type LightValueState as z };
@@ -1,5 +1,5 @@
1
1
  import * as THREE from 'three';
2
- import { d as Component, aa as AudioBus, a5 as EcsEntityKind, al as EcsEntityEditorKind, X as EntityId } from './System-CADhPyQs.js';
2
+ import { d as Component, ae as AudioBus, a9 as EcsEntityKind, ap as EcsEntityEditorKind, $ as EntityId } from './System-ttkDQCrj.js';
3
3
  import * as RAPIER from '@dimforge/rapier3d-compat';
4
4
  import { a as XrFinger, c as XrHandPoseDirection, b as XrHandPoseOrientation, X as XrHandPoseDefinition } from './handPose-DlcTtqgx.js';
5
5
 
@@ -1624,45 +1624,6 @@ declare class XRAnchorComponent extends Component {
1624
1624
  constructor(options?: XRAnchorOptions);
1625
1625
  }
1626
1626
 
1627
- /** Optional initializer for {@link BoneAttachmentComponent}. */
1628
- type BoneAttachmentOptions = {
1629
- /** The bone's node name in the parent's model (as three.js names it). */
1630
- bone?: string;
1631
- /** The bone's humanoid name (`rightHand`, `head` …), used when the node name isn't found (another rig). */
1632
- humanoid?: string | null;
1633
- /** Cancel the bone's world scale so offsets are in metres on any rig. Defaults to `true`. */
1634
- compensateScale?: boolean;
1635
- /** Turn the attachment off without removing it. Defaults to `true`. */
1636
- enabled?: boolean;
1637
- };
1638
- /**
1639
- * Fixes an entity to a bone of its PARENT's model — a sword in a hand, a hat
1640
- * on a head, a backpack on the chest — so it moves with every animation.
1641
- *
1642
- * The entity's `ParentId` stays the character; this names the bone. The
1643
- * `ObjectManagementSystem` then parents the entity's object under that bone
1644
- * (through a small socket that cancels the rig's scale), and the entity's
1645
- * Transform becomes its offset FROM the bone: position in metres, rotation
1646
- * relative to the bone. Until the model has loaded, or when the bone isn't
1647
- * found, the entity sits under the character as an ordinary child.
1648
- *
1649
- * Attach and detach with `ObjectManagementSystem.attachToBone` /
1650
- * `detachFromBone`, which can keep the entity where it is in the world.
1651
- *
1652
- * @category Components
1653
- */
1654
- declare class BoneAttachmentComponent extends Component {
1655
- /** The bone's node name in the parent's model. */
1656
- bone: string;
1657
- /** The bone's humanoid name, the fallback when the node name isn't found. */
1658
- humanoid: string | null;
1659
- /** Cancel the bone's world scale (offsets in metres on a centimetre rig). */
1660
- compensateScale: boolean;
1661
- /** Whether the entity follows the bone. Off: an ordinary child of the character. */
1662
- enabled: boolean;
1663
- constructor(options?: BoneAttachmentOptions);
1664
- }
1665
-
1666
1627
  /**
1667
1628
  * The style model for spatial UI.
1668
1629
  *
@@ -2186,4 +2147,4 @@ declare class XRHandPoseComponent extends Component {
2186
2147
  constructor(options?: XRHandPoseOptions);
2187
2148
  }
2188
2149
 
2189
- export { ScriptComponent as $, AnimationComponent as A, BoneAttachmentComponent as B, CameraComponent as C, DEFAULT_COLLIDER_STATE as D, type EditableMeshObjectKind as E, type LightValueState as F, MaterialComponent as G, type MaterialTypeValue as H, ImageComponent as I, type MaterialValueState as J, MeshComponent as K, LightComponent as L, MODEL_NO_PATH_MESSAGE as M, MeshGeometryComponent as N, type MeshGeometryParameters as O, type MeshGeometryParametersByKind as P, ModelComponent as Q, type ModelLoadState as R, Name as S, Object3DRef as T, PhysicsComponent as U, type PhysicsState as V, type PlaneMeshParameters as W, type RadiusHeightMeshParameters as X, type RadiusMeshParameters as Y, type RigidbodyState as Z, type RigidbodyType as _, type AnimationComponentOptions as a, AnimationStateManager as a$, type ScriptEntry as a0, ScriptObjectComponent as a1, type ScriptObjectComponentInput as a2, type ScriptObjectRuntimeState as a3, Selectable as a4, SelectionTransformState as a5, SpriteComponent as a6, type TextureFilteringValue as a7, type TransformModeValue as a8, type TransformSpaceValue as a9, XRInteractorComponent as aA, type XRInteractorOptions as aB, XRInteractorSideComponent as aC, XRRigComponent as aD, type XRRigOptions as aE, type XrAttachPoint as aF, type XrDistanceGrabBehavior as aG, type XrEnvironmentPhysics as aH, type XrGrabGesture as aI, type XrGrabHands as aJ, type XrGrabReach as aK, type XrHandPoseEntry as aL, type XrHandPreset as aM, type XrInteractorSide as aN, type XrInteractorType as aO, type XrLocomotionMode as aP, type XrTrackingOrigin as aQ, type XrTwoHandRotation as aR, createAttachPoint as aS, createHandPoseEntry as aT, defaultMaterialValue as aU, handPoseDefinitionFor as aV, normalizePhysicsState as aW, setModelLoadState as aX, setPhysicsLiveRef as aY, type AnimationStateCallbacks as aZ, AnimationStateMachine as a_, UIButtonComponent as aa, type UIButtonOptions as ab, UIPanelComponent as ac, type UIPanelOptions as ad, UISliderComponent as ae, type UISliderOptions as af, UITextComponent as ag, type UITextOptions as ah, UIToggleComponent as ai, type UIToggleOptions as aj, type UiFollowMode as ak, type UiIconPosition as al, type UiSliderVariant as am, type UiTextAlign as an, type UiTextVAlign as ao, type UiToggleVariant as ap, VRTeleportAreaComponent as aq, type VRTeleportAreaOptions as ar, VideoComponent as as, type VrTeleportShape as at, XRAnchorComponent as au, type XRAnchorOptions as av, XRHandPoseComponent as aw, type XRHandPoseOptions as ax, XRInteractableComponent as ay, type XRInteractableOptions as az, AudioComponent as b, type StateMachine as b0, type UiColorStop as b1, type UiPaint as b2, type UiShadow as b3, type UiStyle as b4, type UiTextStyle as b5, type UiTokens as b6, type BoneAttachmentOptions as c, type CameraComponentOptions as d, type CameraProjection as e, type CameraRuntimeType as f, type ColliderShape as g, type ColliderState as h, type CubeMeshParameters as i, DEFAULT_INSTANCED_MESH_PARAMETERS as j, DEFAULT_INSTANCE_TRANSFORM as k, DEFAULT_MESH_GEOMETRY_PARAMETERS as l, DEFAULT_PHYSICS_STATE as m, DEFAULT_POSE_CURLS as n, DEFAULT_POSE_DIRECTIONS as o, DEFAULT_RIGIDBODY_STATE as p, EntityType as q, ImageTarget as r, ImageTargetAnchor as s, type ImageTargetAnchorOptions as t, type ImageTargetReference as u, InstanceSlotComponent as v, type InstanceTransform as w, InstancedMeshComponent as x, type InstancedMeshKind as y, type LightShadowState as z };
2150
+ export { ScriptObjectComponent as $, AnimationComponent as A, MaterialComponent as B, CameraComponent as C, DEFAULT_COLLIDER_STATE as D, type EditableMeshObjectKind as E, type MaterialTypeValue as F, type MaterialValueState as G, MeshComponent as H, ImageComponent as I, MeshGeometryComponent as J, type MeshGeometryParameters as K, LightComponent as L, MODEL_NO_PATH_MESSAGE as M, type MeshGeometryParametersByKind as N, ModelComponent as O, type ModelLoadState as P, Name as Q, Object3DRef as R, PhysicsComponent as S, type PhysicsState as T, type PlaneMeshParameters as U, type RadiusHeightMeshParameters as V, type RadiusMeshParameters as W, type RigidbodyState as X, type RigidbodyType as Y, ScriptComponent as Z, type ScriptEntry as _, type AnimationComponentOptions as a, type UiColorStop as a$, type ScriptObjectComponentInput as a0, type ScriptObjectRuntimeState as a1, Selectable as a2, SelectionTransformState as a3, SpriteComponent as a4, type TextureFilteringValue as a5, type TransformModeValue as a6, type TransformSpaceValue as a7, UIButtonComponent as a8, type UIButtonOptions as a9, XRInteractorSideComponent as aA, XRRigComponent as aB, type XRRigOptions as aC, type XrAttachPoint as aD, type XrDistanceGrabBehavior as aE, type XrEnvironmentPhysics as aF, type XrGrabGesture as aG, type XrGrabHands as aH, type XrGrabReach as aI, type XrHandPoseEntry as aJ, type XrHandPreset as aK, type XrInteractorSide as aL, type XrInteractorType as aM, type XrLocomotionMode as aN, type XrTrackingOrigin as aO, type XrTwoHandRotation as aP, createAttachPoint as aQ, createHandPoseEntry as aR, defaultMaterialValue as aS, handPoseDefinitionFor as aT, normalizePhysicsState as aU, setModelLoadState as aV, setPhysicsLiveRef as aW, type AnimationStateCallbacks as aX, AnimationStateMachine as aY, AnimationStateManager as aZ, type StateMachine as a_, UIPanelComponent as aa, type UIPanelOptions as ab, UISliderComponent as ac, type UISliderOptions as ad, UITextComponent as ae, type UITextOptions as af, UIToggleComponent as ag, type UIToggleOptions as ah, type UiFollowMode as ai, type UiIconPosition as aj, type UiSliderVariant as ak, type UiTextAlign as al, type UiTextVAlign as am, type UiToggleVariant as an, VRTeleportAreaComponent as ao, type VRTeleportAreaOptions as ap, VideoComponent as aq, type VrTeleportShape as ar, XRAnchorComponent as as, type XRAnchorOptions as at, XRHandPoseComponent as au, type XRHandPoseOptions as av, XRInteractableComponent as aw, type XRInteractableOptions as ax, XRInteractorComponent as ay, type XRInteractorOptions as az, AudioComponent as b, type UiPaint as b0, type UiShadow as b1, type UiStyle as b2, type UiTextStyle as b3, type UiTokens as b4, type CameraComponentOptions as c, type CameraProjection as d, type CameraRuntimeType as e, type ColliderShape as f, type ColliderState as g, type CubeMeshParameters as h, DEFAULT_INSTANCED_MESH_PARAMETERS as i, DEFAULT_INSTANCE_TRANSFORM as j, DEFAULT_MESH_GEOMETRY_PARAMETERS as k, DEFAULT_PHYSICS_STATE as l, DEFAULT_POSE_CURLS as m, DEFAULT_POSE_DIRECTIONS as n, DEFAULT_RIGIDBODY_STATE as o, EntityType as p, ImageTarget as q, ImageTargetAnchor as r, type ImageTargetAnchorOptions as s, type ImageTargetReference as t, InstanceSlotComponent as u, type InstanceTransform as v, InstancedMeshComponent as w, type InstancedMeshKind as x, type LightShadowState as y, type LightValueState as z };
@@ -46,6 +46,7 @@ function restPositions(root) {
46
46
  return out;
47
47
  }
48
48
  __name(restPositions, "restPositions");
49
+ var NUMBERED_NAME = /_\d+$/;
49
50
  function splitBoneName(raw) {
50
51
  let n = raw.replace(/^.*[:|]/, "").replace(/^(mixamorig\d*|def[-_]|org[-_]|mch[-_]|bip\d*[ _]|b[-_])/i, "").trim();
51
52
  let side = null;
@@ -147,6 +148,37 @@ function findHips(root) {
147
148
  __name(findHips, "findHips");
148
149
  var isSpineLike = /* @__PURE__ */ __name((base) => /^(spine|chest|upperchest|torso|back)\d*$/.test(base), "isSpineLike");
149
150
  function detectRig(root) {
151
+ const plain = readRig(root);
152
+ if (plain.missing.length === 0) return plain;
153
+ const stems = /* @__PURE__ */ new Map();
154
+ const count = /* @__PURE__ */ __name((n) => {
155
+ const stem = n.name.replace(NUMBERED_NAME, "");
156
+ stems.set(stem, (stems.get(stem) ?? 0) + 1);
157
+ n.children.forEach(count);
158
+ }, "count");
159
+ count(root);
160
+ const real = /* @__PURE__ */ new Map();
161
+ const strip = /* @__PURE__ */ __name((n) => {
162
+ const stem = n.name.replace(NUMBERED_NAME, "");
163
+ const name = stems.get(stem) === 1 ? stem : n.name;
164
+ real.set(name, n.name);
165
+ return { ...n, name, children: n.children.map(strip) };
166
+ }, "strip");
167
+ const found = readRig(strip(root));
168
+ if (found.missing.length >= plain.missing.length) return plain;
169
+ const realName = /* @__PURE__ */ __name((name) => real.get(name) ?? name, "realName");
170
+ const bones = {};
171
+ for (const [bone, name] of Object.entries(found.bones)) {
172
+ bones[bone] = realName(name);
173
+ }
174
+ return {
175
+ ...found,
176
+ bones,
177
+ byName: new Map([...found.byName].map(([name, bone]) => [realName(name), bone]))
178
+ };
179
+ }
180
+ __name(detectRig, "detectRig");
181
+ function readRig(root) {
150
182
  const all = [];
151
183
  const collect = /* @__PURE__ */ __name((n) => {
152
184
  all.push(n);
@@ -220,7 +252,7 @@ function detectRig(root) {
220
252
  missing: REQUIRED_HUMANOID_BONES.filter((b) => !bones[b])
221
253
  };
222
254
  }
223
- __name(detectRig, "detectRig");
255
+ __name(readRig, "readRig");
224
256
  function mirrorHumanoidBone(b) {
225
257
  if (b.startsWith("left")) return `right${b.slice(4)}`;
226
258
  if (b.startsWith("right")) return `left${b.slice(5)}`;