@vincentt-xr/sdk 2.0.0-alpha.7 → 2.0.0-alpha.9

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 (639) hide show
  1. package/GROUNDING.md +5651 -82
  2. package/README.md +1 -0
  3. package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
  4. package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
  5. package/dist/DebuggerUI-7ngnJsBe.js +275 -0
  6. package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
  7. package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
  8. package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
  9. package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
  10. package/dist/FaceSurface-DmP9AEeC.js +27 -0
  11. package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
  12. package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
  13. package/dist/SkeletonUtils-C2r90MtN.js +21 -0
  14. package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
  15. package/dist/TextLabel-XE0rQSDn.cjs +2 -0
  16. package/dist/TextLabel-c9BCucOI.js +961 -0
  17. package/dist/assets/cache.d.ts +99 -0
  18. package/dist/assets/estimate.d.ts +11 -0
  19. package/dist/assets/gltfLoader.d.ts +16 -0
  20. package/dist/assets/index.d.ts +7 -0
  21. package/dist/assets/loaders.d.ts +43 -0
  22. package/dist/assets/react.d.ts +33 -0
  23. package/dist/body-pose/index.d.ts +521 -0
  24. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  25. package/dist/body-trigger/frame.d.ts +88 -0
  26. package/dist/body-trigger/index.d.ts +6 -0
  27. package/dist/body-trigger/moves.d.ts +235 -0
  28. package/dist/body-trigger/trigger.d.ts +75 -0
  29. package/dist/calibration/calibration.d.ts +75 -0
  30. package/dist/calibration/index.d.ts +6 -0
  31. package/dist/calibration/storage.d.ts +13 -0
  32. package/dist/calibration/types.d.ts +53 -0
  33. package/dist/calibration/useXRCalibration.d.ts +46 -0
  34. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  35. package/dist/camera/devices.d.ts +26 -0
  36. package/dist/camera/index.d.ts +8 -0
  37. package/dist/camera/permission.d.ts +86 -0
  38. package/dist/camera/useCameraPermission.d.ts +35 -0
  39. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  40. package/dist/canonicalFace-C83I225R.cjs +1 -0
  41. package/dist/capabilities/detect.d.ts +45 -0
  42. package/dist/capabilities/index.d.ts +5 -0
  43. package/dist/capabilities/types.d.ts +120 -0
  44. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  45. package/dist/compat/environment.d.ts +5 -0
  46. package/dist/compat/index.d.ts +4 -0
  47. package/dist/compat/run.d.ts +18 -0
  48. package/dist/compat/scenarios.d.ts +10 -0
  49. package/dist/compat/types.d.ts +101 -0
  50. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  51. package/dist/components/BodyInstruction/index.d.ts +69 -0
  52. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  53. package/dist/components/BodyTracker/index.d.ts +17 -0
  54. package/dist/components/BodyTrigger/index.d.ts +49 -0
  55. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  56. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  57. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  58. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  59. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  60. package/dist/components/FaceAtlas/index.d.ts +7 -0
  61. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  62. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  63. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  64. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  65. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  66. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  67. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  68. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  69. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  70. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  71. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  72. package/dist/components/FaceCharacter/index.d.ts +18 -0
  73. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  74. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  75. package/dist/components/FaceInset/frame.d.ts +94 -0
  76. package/dist/components/FaceInset/index.d.ts +6 -0
  77. package/dist/components/FaceInset/material.d.ts +40 -0
  78. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  79. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  80. package/dist/components/FaceInstruction/index.d.ts +56 -0
  81. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  82. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  83. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  84. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  85. package/dist/components/FaceLiquify/index.d.ts +10 -0
  86. package/dist/components/FaceLiquify/material.d.ts +39 -0
  87. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  88. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  89. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  90. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  91. package/dist/components/FaceLiquify/target.d.ts +85 -0
  92. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  93. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +37 -5
  94. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  95. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +21 -0
  96. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  97. package/dist/components/FaceMesh/index.d.ts +2 -2
  98. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  99. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  100. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  101. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  102. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  103. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  104. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  105. package/dist/components/FaceSwap/index.d.ts +13 -0
  106. package/dist/components/FaceSwap/settings.d.ts +300 -0
  107. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  108. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  109. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  110. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  111. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  112. package/dist/components/Faceless/Faceless.d.ts +51 -0
  113. package/dist/components/Faceless/index.d.ts +2 -0
  114. package/dist/components/GestureListener/index.d.ts +11 -0
  115. package/dist/components/HairLock/HairLock.d.ts +39 -0
  116. package/dist/components/HairLock/index.d.ts +2 -0
  117. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  118. package/dist/components/HandCutout/index.d.ts +35 -0
  119. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  120. package/dist/components/HandInstruction/index.d.ts +74 -0
  121. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  122. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  123. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  124. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  125. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  126. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  127. package/dist/components/HandRig/index.d.ts +101 -0
  128. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  129. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  130. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  131. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  132. package/dist/components/HandTouch/index.d.ts +2 -0
  133. package/dist/components/HandTracker/index.d.ts +10 -0
  134. package/dist/components/HeadBinding/index.d.ts +14 -0
  135. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  136. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  137. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  138. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  139. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  140. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  141. package/dist/components/HeadOccluder/index.d.ts +57 -3
  142. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  143. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  144. package/dist/components/HolisticTracker/index.d.ts +69 -0
  145. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  146. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  147. package/dist/components/Instruction/HintStage.d.ts +29 -0
  148. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  149. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  150. package/dist/components/Instruction/ghost.d.ts +129 -0
  151. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  152. package/dist/components/Instruction/hintLook.d.ts +81 -0
  153. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  154. package/dist/components/Instruction/index.d.ts +41 -0
  155. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  156. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  157. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  158. package/dist/components/IrisEffect/index.d.ts +51 -0
  159. package/dist/components/IrisEffect/settings.d.ts +117 -0
  160. package/dist/components/LipEffect/LipEffect.d.ts +27 -1
  161. package/dist/components/LipEffect/LipEffectMaterial.d.ts +95 -7
  162. package/dist/components/LipEffect/LipEffects.d.ts +12 -0
  163. package/dist/components/LipEffect/defaults.d.ts +46 -4
  164. package/dist/components/LipEffect/index.d.ts +11 -3
  165. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  166. package/dist/components/LipEffect/settings.d.ts +375 -0
  167. package/dist/components/LipEffect/shader.d.ts +39 -0
  168. package/dist/components/LipEffect/types.d.ts +128 -9
  169. package/dist/components/LipEffect/useLipDesignTextures.d.ts +17 -0
  170. package/dist/components/LipEffect/uvGuide.d.ts +74 -0
  171. package/dist/components/Makeup/Blush.d.ts +18 -0
  172. package/dist/components/Makeup/Brows.d.ts +20 -0
  173. package/dist/components/Makeup/Contour.d.ts +17 -0
  174. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  175. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  176. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  177. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  178. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  179. package/dist/components/Makeup/constants.d.ts +44 -0
  180. package/dist/components/Makeup/design.d.ts +106 -0
  181. package/dist/components/Makeup/designSamples.d.ts +42 -0
  182. package/dist/components/Makeup/eyes.d.ts +114 -0
  183. package/dist/components/Makeup/fields.d.ts +10 -0
  184. package/dist/components/Makeup/geometry.d.ts +106 -0
  185. package/dist/components/Makeup/index.d.ts +26 -0
  186. package/dist/components/Makeup/looks.d.ts +28 -0
  187. package/dist/components/Makeup/material.d.ts +239 -0
  188. package/dist/components/Makeup/settings.d.ts +54 -0
  189. package/dist/components/Makeup/shades.d.ts +143 -0
  190. package/dist/components/Makeup/shapes.d.ts +27 -0
  191. package/dist/components/Makeup/skinTone.d.ts +135 -0
  192. package/dist/components/Makeup/types.d.ts +110 -0
  193. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  194. package/dist/components/Necklace/Necklace.d.ts +44 -0
  195. package/dist/components/Necklace/index.d.ts +1 -0
  196. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  197. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  198. package/dist/components/PersonCutout/index.d.ts +50 -0
  199. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  200. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  201. package/dist/components/ScreenImage/index.d.ts +3 -1
  202. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  203. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  204. package/dist/components/ScreenImage/source.d.ts +6 -0
  205. package/dist/components/ScreenImage/types.d.ts +18 -0
  206. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  207. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  208. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  209. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  210. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  211. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  212. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  213. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  214. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  215. package/dist/components/SpringSwing/index.d.ts +1 -0
  216. package/dist/components/XRProvider/index.d.ts +16 -2
  217. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  218. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  219. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  220. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  221. package/dist/components/index.d.ts +11 -0
  222. package/dist/config/index.d.ts +0 -1
  223. package/dist/constants/index.d.ts +4 -1
  224. package/dist/context-DTxSQvp4.js +13 -0
  225. package/dist/context-hA0Rb2Xa.cjs +1 -0
  226. package/dist/contexts-BH7PdKFS.cjs +1 -0
  227. package/dist/contexts-jak8-tND.js +667 -0
  228. package/dist/coordinates/feed.d.ts +52 -0
  229. package/dist/coordinates/index.d.ts +7 -0
  230. package/dist/coordinates/side.d.ts +40 -0
  231. package/dist/coordinates/spaces.d.ts +49 -0
  232. package/dist/coordinates/viewport.d.ts +22 -0
  233. package/dist/coordinates/world.d.ts +15 -0
  234. package/dist/debug-ui/default-setting.cjs +2 -2
  235. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  236. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  237. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  238. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  239. package/dist/debug-ui/index.d.ts +18 -3
  240. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  241. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  242. package/dist/debug-ui/media-source/index.d.ts +1 -1
  243. package/dist/debug-ui/media-source/session.d.ts +30 -2
  244. package/dist/debug-ui/media-source.cjs +1 -1
  245. package/dist/debug-ui/media-source.js +1 -1
  246. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  247. package/dist/debug-ui/product-hotspots/index.d.ts +25 -0
  248. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  249. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  250. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  251. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  252. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  253. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  254. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  255. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  256. package/dist/debug-ui/xr-diagnostics/index.d.ts +26 -0
  257. package/dist/debug-ui.cjs +3 -3
  258. package/dist/debug-ui.js +2695 -2547
  259. package/dist/detector-K8aej4MB.js +59 -0
  260. package/dist/detector-ijypGtse.cjs +1 -0
  261. package/dist/entries/all.d.ts +3 -1
  262. package/dist/entries/core.d.ts +20 -2
  263. package/dist/entries/face-effects.d.ts +123 -9
  264. package/dist/entries/instructions.d.ts +48 -0
  265. package/dist/entries/internal.d.ts +2 -1
  266. package/dist/entries/low-level.d.ts +49 -3
  267. package/dist/entries/particles.d.ts +11 -0
  268. package/dist/entries/product.d.ts +11 -0
  269. package/dist/entries/tracking.d.ts +60 -2
  270. package/dist/face-atlas/attributes.d.ts +30 -0
  271. package/dist/face-atlas/eyes.d.ts +272 -0
  272. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  273. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  274. package/dist/face-atlas/glsl/common.d.ts +55 -0
  275. package/dist/face-atlas/glsl/design.d.ts +49 -0
  276. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  277. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  278. package/dist/face-atlas/glsl/format.d.ts +4 -0
  279. package/dist/face-atlas/glsl/index.d.ts +59 -0
  280. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  281. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  282. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  283. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  284. package/dist/face-atlas/guide.d.ts +51 -0
  285. package/dist/face-atlas/index.d.ts +25 -0
  286. package/dist/face-atlas/lead.d.ts +117 -0
  287. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  288. package/dist/face-atlas/masks.d.ts +53 -0
  289. package/dist/face-atlas/obj.d.ts +69 -0
  290. package/dist/face-atlas/polylines.d.ts +63 -0
  291. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  292. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  293. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  294. package/dist/face-atlas/probe/constants.d.ts +137 -0
  295. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  296. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  297. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  298. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  299. package/dist/face-atlas/probe/stats.d.ts +143 -0
  300. package/dist/face-atlas/probe/targets.d.ts +70 -0
  301. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  302. package/dist/face-atlas/quality.d.ts +28 -0
  303. package/dist/face-atlas/regions.d.ts +31 -0
  304. package/dist/face-atlas/registry.d.ts +252 -0
  305. package/dist/face-atlas/renderState.d.ts +86 -0
  306. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  307. package/dist/face-atlas/shading.d.ts +406 -0
  308. package/dist/face-atlas/shapes.d.ts +86 -0
  309. package/dist/face-atlas/sides.d.ts +41 -0
  310. package/dist/face-atlas/skinMask.d.ts +35 -0
  311. package/dist/face-atlas/surface.d.ts +155 -0
  312. package/dist/face-atlas/topology.d.ts +44 -0
  313. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  314. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  315. package/dist/face-character/bindFaceModel.d.ts +106 -0
  316. package/dist/face-character/canonicalFace.d.ts +17 -0
  317. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  318. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  319. package/dist/face-character/driveFaceModel.d.ts +57 -0
  320. package/dist/face-character/expressionOutputs.d.ts +45 -0
  321. package/dist/face-character/faceExpressions.d.ts +104 -0
  322. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  323. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  324. package/dist/face-character/faceMorph.d.ts +77 -0
  325. package/dist/face-character/faceMorphs.d.ts +46 -0
  326. package/dist/face-character/facePhoto.d.ts +138 -0
  327. package/dist/face-character/facePiercings.d.ts +116 -0
  328. package/dist/face-character/facePin.d.ts +131 -0
  329. package/dist/face-character/faceReprojection.d.ts +273 -0
  330. package/dist/face-character/faceReprojector.d.ts +171 -0
  331. package/dist/face-character/faceRig.d.ts +176 -0
  332. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  333. package/dist/face-character/faceTexture.d.ts +169 -0
  334. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  335. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  336. package/dist/face-character/faceTextureStats.d.ts +298 -0
  337. package/dist/face-character/faceTransfer.d.ts +396 -0
  338. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  339. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  340. package/dist/face-character/faceWarp3D.d.ts +101 -0
  341. package/dist/face-character/faceless.d.ts +79 -0
  342. package/dist/face-character/featureWarp.d.ts +28 -0
  343. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  344. package/dist/face-character/liveValue.d.ts +12 -0
  345. package/dist/face-character/memo.d.ts +15 -0
  346. package/dist/face-effects.cjs +2324 -1
  347. package/dist/face-effects.js +14208 -2268
  348. package/dist/face-expression/index.d.ts +182 -0
  349. package/dist/face-info/landmarks.d.ts +17 -3
  350. package/dist/face-info/types.d.ts +20 -3
  351. package/dist/gestures/definitions.d.ts +98 -0
  352. package/dist/gestures/detector.d.ts +87 -0
  353. package/dist/gestures/index.d.ts +8 -0
  354. package/dist/gestures/measures.d.ts +114 -0
  355. package/dist/gestures/settings.d.ts +49 -0
  356. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  357. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  358. package/dist/hand/armFit.d.ts +46 -0
  359. package/dist/hand/armMask.d.ts +178 -0
  360. package/dist/hand/handCutout.d.ts +23 -0
  361. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  362. package/dist/hand/handGestures.d.ts +524 -0
  363. package/dist/hand/handPose.d.ts +98 -0
  364. package/dist/hand/handRigSolver.d.ts +159 -0
  365. package/dist/hand/handTattoo.d.ts +81 -0
  366. package/dist/hand/handTouch.d.ts +240 -0
  367. package/dist/hand/wrist.d.ts +44 -0
  368. package/dist/hand/wristFilter.d.ts +44 -0
  369. package/dist/hooks/selectors.d.ts +76 -1
  370. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  371. package/dist/hooks/useFaceInfo.d.ts +13 -1
  372. package/dist/hooks/useFaceInfos.d.ts +1 -1
  373. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  374. package/dist/hooks/useGesture.d.ts +32 -0
  375. package/dist/hooks/useIrisTracking.d.ts +45 -0
  376. package/dist/hooks/useTrackerContext.d.ts +6 -0
  377. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  378. package/dist/hooks/useXRModel.d.ts +7 -0
  379. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  380. package/dist/hooks/useXRSession/index.d.ts +2 -2
  381. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  382. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  383. package/dist/hooks/useXRSession/store.d.ts +52 -3
  384. package/dist/index-B1_TzJaI.js +1104 -0
  385. package/dist/index-BavF06C6.js +190 -0
  386. package/dist/index-BfFmpddl.cjs +21 -0
  387. package/dist/index-BuBzneeW.cjs +46 -0
  388. package/dist/index-CGsQWodV.cjs +1 -0
  389. package/dist/index-CIe7eCMH.js +3200 -0
  390. package/dist/index-CfSF8LXa.cjs +1 -0
  391. package/dist/index-D5GTzOzD.cjs +1 -0
  392. package/dist/index-DBhQzvVa.js +314 -0
  393. package/dist/index-DE17y0ZI.cjs +1 -0
  394. package/dist/index-JII7huPk.js +442 -0
  395. package/dist/index-tpCr9CLj.cjs +1 -0
  396. package/dist/index-w1S7fI2B.js +1432 -0
  397. package/dist/index-zGaqrz_K.js +188 -0
  398. package/dist/instructions.cjs +30 -0
  399. package/dist/instructions.js +1507 -0
  400. package/dist/{internal-Dmk1cTXq.js → internal-B90P-clC.js} +138 -119
  401. package/dist/internal-Cjinca64.cjs +1 -0
  402. package/dist/internal.cjs +1 -1
  403. package/dist/internal.js +15 -10
  404. package/dist/iris/compute.d.ts +27 -0
  405. package/dist/iris/index.d.ts +4 -0
  406. package/dist/iris/lead.d.ts +19 -0
  407. package/dist/iris/types.d.ts +89 -0
  408. package/dist/landmarkMask-BFDyBnKM.js +224 -0
  409. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  410. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  411. package/dist/landmarks-bftdwq6Z.js +76 -0
  412. package/dist/loaders-BGAUACsd.js +363 -0
  413. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  414. package/dist/low-level.cjs +1 -1
  415. package/dist/low-level.js +1190 -675
  416. package/dist/main.cjs +1 -1
  417. package/dist/main.js +1190 -452
  418. package/dist/models/Base/index.d.ts +49 -0
  419. package/dist/models/Body/index.d.ts +3 -1
  420. package/dist/models/Face/constants.d.ts +8 -0
  421. package/dist/models/Face/index.d.ts +4 -12
  422. package/dist/models/Face/rotation.d.ts +18 -3
  423. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  424. package/dist/models/Hand/HandTracking.d.ts +17 -1
  425. package/dist/models/Holistic/index.d.ts +49 -0
  426. package/dist/models/Holistic/result.d.ts +68 -0
  427. package/dist/models/Segmentation/index.d.ts +2 -0
  428. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  429. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  430. package/dist/models/index.d.ts +2 -0
  431. package/dist/models/nodeSource.d.ts +9 -0
  432. package/dist/particles/emission.d.ts +24 -0
  433. package/dist/particles/eyes.d.ts +24 -0
  434. package/dist/particles/glsl.d.ts +14 -0
  435. package/dist/particles/index.d.ts +10 -0
  436. package/dist/particles/motion.d.ts +42 -0
  437. package/dist/particles/presets.d.ts +12 -0
  438. package/dist/particles/ring.d.ts +58 -0
  439. package/dist/particles/selfTest.d.ts +53 -0
  440. package/dist/particles/settings.d.ts +127 -0
  441. package/dist/particles/shapes.d.ts +29 -0
  442. package/dist/particles/spawner.d.ts +60 -0
  443. package/dist/particles/system.d.ts +64 -0
  444. package/dist/particles.cjs +122 -0
  445. package/dist/particles.js +774 -0
  446. package/dist/product/ProductDimensions.d.ts +16 -0
  447. package/dist/product/ProductHotspot.d.ts +16 -0
  448. package/dist/product/ProductViewer.d.ts +9 -0
  449. package/dist/product/details.d.ts +53 -0
  450. package/dist/product/index.d.ts +14 -0
  451. package/dist/product/loadModelViewer.d.ts +4 -0
  452. package/dist/product/types.d.ts +71 -0
  453. package/dist/product/useProductAr.d.ts +37 -0
  454. package/dist/product/useProductDetails.d.ts +60 -0
  455. package/dist/product.cjs +1 -0
  456. package/dist/product.js +414 -0
  457. package/dist/providers-C8rE26Uf.js +366 -0
  458. package/dist/providers-DHsrhDI2.cjs +62 -0
  459. package/dist/quality/XRQualityController.d.ts +25 -0
  460. package/dist/quality/controller.d.ts +33 -0
  461. package/dist/quality/index.d.ts +6 -0
  462. package/dist/quality/types.d.ts +100 -0
  463. package/dist/quality/useXRQuality.d.ts +28 -0
  464. package/dist/render/renderPasses.d.ts +8 -0
  465. package/dist/render/sceneBeforeRender.d.ts +12 -0
  466. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-B38pUaX2.js} +1 -1
  467. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  468. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  469. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  470. package/dist/renderState-CJNmj5jz.js +39 -0
  471. package/dist/renderState-apSfg4eR.cjs +1 -0
  472. package/dist/scene-object.cjs +1 -1
  473. package/dist/scene-object.js +2 -2
  474. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  475. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  476. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  477. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  478. package/dist/segmentation2d/index.d.ts +9 -0
  479. package/dist/segmentation2d/maskUv.d.ts +23 -0
  480. package/dist/segmentation2d/rasterize.d.ts +14 -0
  481. package/dist/segmentation2d/types.d.ts +52 -0
  482. package/dist/select-Ck5LGz-J.cjs +1 -0
  483. package/dist/select-pYRo_win.js +233 -0
  484. package/dist/selectors-C4X71aoD.cjs +1 -0
  485. package/dist/selectors-DmNaKIwE.js +196 -0
  486. package/dist/session-BrH8G7iJ.cjs +31 -0
  487. package/dist/session-DgA_z6O1.js +418 -0
  488. package/dist/settings-BJ7FMBsO.js +111 -0
  489. package/dist/settings-C63FMBlF.cjs +1 -0
  490. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  491. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  492. package/dist/spring/index.d.ts +2 -0
  493. package/dist/spring/spring.d.ts +69 -0
  494. package/dist/spring/swing.d.ts +54 -0
  495. package/dist/subjects/index.d.ts +2 -0
  496. package/dist/subjects/select.d.ts +62 -0
  497. package/dist/subjects/types.d.ts +55 -0
  498. package/dist/tracking-config/apply.d.ts +57 -0
  499. package/dist/tracking-config/index.d.ts +7 -0
  500. package/dist/tracking-config/resolve.d.ts +25 -0
  501. package/dist/tracking-config/storage.d.ts +8 -0
  502. package/dist/tracking-config/types.d.ts +106 -0
  503. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  504. package/dist/tracking.cjs +10 -1
  505. package/dist/tracking.js +1326 -506
  506. package/dist/trigger-D0Pm9noT.cjs +49 -0
  507. package/dist/trigger-IQeys0oS.js +2128 -0
  508. package/dist/types/compositor.d.ts +21 -0
  509. package/dist/types/face.d.ts +20 -1
  510. package/dist/types/hand-tracking.d.ts +9 -0
  511. package/dist/types/holistic.d.ts +121 -0
  512. package/dist/types/index.d.ts +1 -0
  513. package/dist/types/model.d.ts +22 -2
  514. package/dist/types/nodes.d.ts +47 -3
  515. package/dist/types/segmentation.d.ts +24 -0
  516. package/dist/types/session.d.ts +41 -3
  517. package/dist/updateThrottle-BseecYag.js +4 -0
  518. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  519. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  520. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  521. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  522. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  523. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  524. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  525. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  526. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  527. package/dist/useXRCapabilities-Cr3RzuAW.cjs +1 -0
  528. package/dist/useXRCapabilities-Cxmlmpbd.js +30 -0
  529. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  530. package/dist/utils/fns.d.ts +6 -3
  531. package/dist/utils/headOccluderFit.d.ts +42 -0
  532. package/dist/utils/integrity.d.ts +21 -1
  533. package/dist/utils/resolveNumFaces.d.ts +13 -0
  534. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  535. package/dist/utils/similarityFit.d.ts +23 -0
  536. package/dist/utils/updateThrottle.d.ts +2 -0
  537. package/dist/utils/useStableUniforms.d.ts +18 -0
  538. package/dist/uv-BMFt19bg.cjs +1 -0
  539. package/dist/{index-ByoNj0QP.js → uv-DJU_XfmN.js} +15 -247
  540. package/docs/SDK_DOCUMENTATION.md +1 -2
  541. package/docs/api/adaptive-quality.mdx +104 -0
  542. package/docs/api/asset-lifecycle.mdx +78 -0
  543. package/docs/api/body-instructions.mdx +285 -0
  544. package/docs/api/body-triggers.mdx +234 -0
  545. package/docs/api/camera-permission.mdx +142 -0
  546. package/docs/api/coordinate-spaces.mdx +168 -0
  547. package/docs/api/cross-camera.mdx +89 -0
  548. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  549. package/docs/api/diagnostics-calibration.mdx +97 -0
  550. package/docs/api/external-face-mesh.mdx +231 -0
  551. package/docs/api/face-actions.mdx +20 -16
  552. package/docs/api/face-attribute-expression.mdx +1 -1
  553. package/docs/api/face-binding-anchors.mdx +4 -2
  554. package/docs/api/face-character.mdx +157 -0
  555. package/docs/api/face-effects.mdx +9 -0
  556. package/docs/api/face-expression-controller.mdx +153 -0
  557. package/docs/api/face-info.mdx +17 -11
  558. package/docs/api/face-inset.mdx +204 -0
  559. package/docs/api/face-instructions.mdx +183 -0
  560. package/docs/api/face-liquify.mdx +196 -0
  561. package/docs/api/face-mesh.mdx +8 -9
  562. package/docs/api/face-morph.mdx +117 -0
  563. package/docs/api/face-painting.mdx +7 -0
  564. package/docs/api/face-reprojection.mdx +154 -0
  565. package/docs/api/face-retouching.mdx +18 -10
  566. package/docs/api/face-swap.mdx +350 -0
  567. package/docs/api/face-warp-3d.mdx +166 -0
  568. package/docs/api/faceless.mdx +143 -0
  569. package/docs/api/gestures.mdx +209 -0
  570. package/docs/api/hair.mdx +97 -0
  571. package/docs/api/hand-instructions.mdx +222 -0
  572. package/docs/api/hand-rig.mdx +535 -0
  573. package/docs/api/hand-touch.mdx +162 -0
  574. package/docs/api/head-occluder.mdx +563 -0
  575. package/docs/api/holistic-tracker.mdx +164 -0
  576. package/docs/api/instructions.mdx +323 -0
  577. package/docs/api/iris-tracking.mdx +247 -0
  578. package/docs/api/made-up-camera.mdx +131 -0
  579. package/docs/api/makeup-skin-tone.mdx +135 -0
  580. package/docs/api/makeup.mdx +353 -0
  581. package/docs/api/multi-subject.mdx +98 -0
  582. package/docs/api/particles.mdx +155 -0
  583. package/docs/api/person-cutout.mdx +136 -0
  584. package/docs/api/pin-to-face-mesh.mdx +274 -0
  585. package/docs/api/product-ar.mdx +114 -0
  586. package/docs/api/product-details.mdx +78 -0
  587. package/docs/api/screen-space-coordinates.mdx +4 -1
  588. package/docs/api/segmentation-overlay.mdx +301 -0
  589. package/docs/api/session-lifecycle.mdx +136 -0
  590. package/docs/api/trackers.mdx +5 -0
  591. package/docs/api/tracking-config.mdx +108 -0
  592. package/docs/docs.json +51 -1
  593. package/docs/examples/lip-shaders.mdx +273 -0
  594. package/docs/guides/face-atlas-template.svg +1 -0
  595. package/docs/guides/face-atlas-textures.mdx +186 -0
  596. package/docs/guides/face-texture-template.svg +1 -0
  597. package/docs/guides/harness-debug-ui.mdx +4 -4
  598. package/docs/guides/lip-effect-textures.mdx +368 -0
  599. package/docs/guides/lip-uv-template.png +0 -0
  600. package/docs/guides/lip-uv-template.svg +1 -0
  601. package/docs/guides/makeup-design-textures.mdx +109 -0
  602. package/docs/introduction.mdx +1 -2
  603. package/package.json +23 -1
  604. package/dist/DebuggerUI-B6bP6P9r.cjs +0 -1
  605. package/dist/DebuggerUI-BjOMr8q_.js +0 -269
  606. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  607. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  608. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  609. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  610. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  611. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  612. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  613. package/dist/contexts-ByhzppYl.js +0 -663
  614. package/dist/contexts-Dr62It_K.cjs +0 -1
  615. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  616. package/dist/getFaceInfo-C4QpCQIY.js +0 -118
  617. package/dist/getFaceInfo-fA1bFBub.cjs +0 -1
  618. package/dist/index-9dlAQAhy.js +0 -1462
  619. package/dist/index-BjmTe9eM.cjs +0 -1
  620. package/dist/index-BpEf2BBb.cjs +0 -1
  621. package/dist/index-CyUUurQT.cjs +0 -1
  622. package/dist/index-DCiMbxC3.cjs +0 -1
  623. package/dist/index-DXT3WccE.js +0 -2089
  624. package/dist/index-DpI-qo5X.cjs +0 -17
  625. package/dist/index-DyVF4vEW.js +0 -111
  626. package/dist/index-VJ0SJwmG.js +0 -214
  627. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  628. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  629. package/dist/renderLayers-zrK2pv5O.js +0 -13
  630. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  631. package/dist/renderPasses-BcquyVtu.js +0 -1500
  632. package/dist/selectors-B8H97CKA.js +0 -59
  633. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  634. package/dist/session-CpkiK5YA.cjs +0 -31
  635. package/dist/session-DLFN_VII.js +0 -363
  636. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  637. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  638. package/dist/useFaceResults-CtetsO9M.js +0 -19
  639. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -0,0 +1,188 @@
1
+ import { jsx as m, jsxs as C } from "react/jsx-runtime";
2
+ import { useGLTF as S } from "@react-three/drei";
3
+ import { Suspense as b, useRef as T, useMemo as x, useEffect as R } from "react";
4
+ import { useFrame as v } from "@react-three/fiber";
5
+ import { c as L } from "./SkeletonUtils-C2r90MtN.js";
6
+ import { AdditiveBlending as N, SubtractiveBlending as P, MultiplyBlending as W, NoBlending as q, NormalBlending as K, NeverDepth as U, LessDepth as G, EqualDepth as F, GreaterDepth as I, NotEqualDepth as z, GreaterEqualDepth as H, AlwaysDepth as Y, LessEqualDepth as V, BackSide as $, DoubleSide as J, FrontSide as Q, AnimationMixer as X, LoopRepeat as Z } from "three";
7
+ import { M as j } from "./index-BavF06C6.js";
8
+ const Me = {
9
+ enabled: !0,
10
+ mesh: "cube",
11
+ material: {
12
+ type: "standard",
13
+ color: "#ffffff",
14
+ opacity: 1,
15
+ wireframe: !1,
16
+ roughness: 0.42,
17
+ metalness: 0.08
18
+ },
19
+ shadowMode: "off",
20
+ visible: !0
21
+ }, y = {
22
+ depthTest: !0,
23
+ depthWrite: !0,
24
+ depthFunc: "lessEqual",
25
+ colorWrite: !0,
26
+ colorMask: {
27
+ r: !0,
28
+ g: !0,
29
+ b: !0,
30
+ a: !0
31
+ },
32
+ cullMode: "back",
33
+ blendMode: "normal",
34
+ polygonOffset: {
35
+ enabled: !1,
36
+ factor: 0,
37
+ units: 0
38
+ }
39
+ }, h = (e) => ({
40
+ ...y,
41
+ ...e,
42
+ colorMask: {
43
+ ...y.colorMask,
44
+ ...e == null ? void 0 : e.colorMask
45
+ },
46
+ polygonOffset: {
47
+ ...y.polygonOffset,
48
+ ...e == null ? void 0 : e.polygonOffset
49
+ }
50
+ }), ee = (e) => e === "never" ? U : e === "less" ? G : e === "equal" ? F : e === "greater" ? I : e === "notEqual" ? z : e === "greaterEqual" ? H : e === "always" ? Y : V, re = (e) => e === "front" ? $ : e === "off" ? J : Q, te = (e) => e === "additive" ? N : e === "subtractive" ? P : e === "multiply" ? W : e === "none" ? q : K, A = (e) => {
51
+ const r = h(e), t = r.colorWrite && (r.colorMask.r || r.colorMask.g || r.colorMask.b || r.colorMask.a);
52
+ return {
53
+ depthTest: r.depthTest,
54
+ depthWrite: r.depthWrite,
55
+ depthFunc: ee(r.depthFunc),
56
+ colorWrite: t,
57
+ side: re(r.cullMode),
58
+ blending: te(r.blendMode),
59
+ polygonOffset: r.polygonOffset.enabled,
60
+ polygonOffsetFactor: r.polygonOffset.factor,
61
+ polygonOffsetUnits: r.polygonOffset.units
62
+ };
63
+ }, _ = (e, r) => {
64
+ const t = h(r);
65
+ return e < 1 || t.blendMode !== "normal" && t.blendMode !== "none";
66
+ }, O = (e) => e.colorWrite && (!e.colorMask.r || !e.colorMask.g || !e.colorMask.b || !e.colorMask.a), d = "__vincenttPreviousColorMask", k = "__vincenttColorMaskBaseBefore", E = "__vincenttColorMaskBaseAfter", oe = (e, r) => {
67
+ const t = e.userData, p = t[k] ?? e.onBeforeRender.bind(e), l = t[E] ?? e.onAfterRender.bind(e);
68
+ if (t[k] = p, t[E] = l, !O(r)) {
69
+ e.onBeforeRender = p, e.onAfterRender = l;
70
+ return;
71
+ }
72
+ e.onBeforeRender = (i, f, n, c, o, s) => {
73
+ p(i, f, n, c, o, s);
74
+ const a = i.getContext();
75
+ e.userData[d] = a.getParameter(a.COLOR_WRITEMASK), a.colorMask(
76
+ r.colorMask.r,
77
+ r.colorMask.g,
78
+ r.colorMask.b,
79
+ r.colorMask.a
80
+ );
81
+ }, e.onAfterRender = (i, f, n, c, o, s) => {
82
+ const a = e.userData[d];
83
+ a && (i.getContext().colorMask(...a), delete e.userData[d]), l(i, f, n, c, o, s);
84
+ };
85
+ }, D = (e) => ({
86
+ castShadow: e === "cast" || e === "castReceive",
87
+ receiveShadow: e === "receive" || e === "castReceive"
88
+ }), ae = ({ mesh: e }) => e === "sphere" ? /* @__PURE__ */ m("sphereGeometry", { args: [0.85, 48, 32] }) : e === "plane" ? /* @__PURE__ */ m("planeGeometry", { args: [1.6, 1.6] }) : /* @__PURE__ */ m("boxGeometry", { args: [1.4, 1.4, 1.4] }), se = ({
89
+ url: e,
90
+ nodeName: r,
91
+ settings: t,
92
+ renderOrder: p
93
+ }) => {
94
+ const { scene: l, animations: i } = S(e, !1, !0), f = T(null), n = x(() => {
95
+ const o = i.length ? L(l) : l.clone(!0);
96
+ return o.traverse((s) => {
97
+ const a = s;
98
+ !a.isMesh || !a.material || (a.material = Array.isArray(a.material) ? a.material.map((g) => g.clone()) : a.material.clone());
99
+ }), o;
100
+ }, [l, i.length]);
101
+ R(() => {
102
+ const o = D(t.shadowMode), s = Math.min(1, Math.max(0, t.material.opacity)), a = A(t.material.renderState), g = _(s, t.material.renderState);
103
+ n.traverse((w) => {
104
+ const u = w;
105
+ if (!u.isMesh || !u.material) return;
106
+ u.castShadow = o.castShadow, u.receiveShadow = o.receiveShadow, (Array.isArray(u.material) ? u.material : [u.material]).forEach((M) => {
107
+ if (!M) return;
108
+ const B = M;
109
+ B.wireframe = t.material.wireframe, M.opacity = s, M.transparent = g, Object.assign(M, a), M.needsUpdate = !0;
110
+ }), oe(u, h(t.material.renderState));
111
+ });
112
+ }, [
113
+ n,
114
+ t.material.opacity,
115
+ t.material.renderState,
116
+ t.material.wireframe,
117
+ t.shadowMode
118
+ ]);
119
+ const c = r ? n.getObjectByName(r) : n;
120
+ return R(() => {
121
+ if (!i.length) return;
122
+ const o = new X(n);
123
+ return i.filter(
124
+ (a) => t.assetAnimation === "all" || a.name === t.assetAnimation
125
+ ).forEach((a) => o.clipAction(a).setLoop(Z, 1 / 0).play()), f.current = o, () => {
126
+ o.stopAllAction(), o.uncacheRoot(n), f.current = null;
127
+ };
128
+ }, [i, n, t.assetAnimation]), v((o, s) => {
129
+ var a;
130
+ return (a = f.current) == null ? void 0 : a.update(s);
131
+ }), /* @__PURE__ */ m("group", { renderOrder: p, children: /* @__PURE__ */ m("primitive", { object: c ?? n }) });
132
+ }, de = ({ renderOrder: e, value: r }) => {
133
+ if (!r.enabled || !r.visible) return null;
134
+ if (r.assetUrl)
135
+ return /* @__PURE__ */ m(b, { fallback: null, children: /* @__PURE__ */ m(
136
+ se,
137
+ {
138
+ url: r.assetUrl,
139
+ nodeName: r.assetNodeName,
140
+ settings: r,
141
+ renderOrder: e
142
+ }
143
+ ) });
144
+ const t = Math.min(1, Math.max(0, r.material.opacity)), p = {
145
+ color: r.material.color,
146
+ transparent: _(t, r.material.renderState),
147
+ opacity: t,
148
+ wireframe: r.material.wireframe,
149
+ ...A(r.material.renderState)
150
+ };
151
+ return /* @__PURE__ */ C(
152
+ "mesh",
153
+ {
154
+ ...D(r.shadowMode),
155
+ onBeforeRender: (l, i, f, n, c) => {
156
+ const o = h(r.material.renderState);
157
+ if (!O(o)) return;
158
+ const s = l.getContext();
159
+ c.userData[d] = s.getParameter(
160
+ s.COLOR_WRITEMASK
161
+ ), s.colorMask(
162
+ o.colorMask.r,
163
+ o.colorMask.g,
164
+ o.colorMask.b,
165
+ o.colorMask.a
166
+ );
167
+ },
168
+ onAfterRender: (l, i, f, n, c) => {
169
+ const o = c.userData[d];
170
+ o && (l.getContext().colorMask(...o), delete c.userData[d]);
171
+ },
172
+ renderOrder: e,
173
+ children: [
174
+ /* @__PURE__ */ m(ae, { mesh: r.mesh }),
175
+ /* @__PURE__ */ m(j, { settings: r.material, materialProps: p })
176
+ ]
177
+ }
178
+ );
179
+ };
180
+ export {
181
+ Me as D,
182
+ de as M,
183
+ y as a,
184
+ ee as b,
185
+ re as c,
186
+ te as g,
187
+ h as n
188
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("react/jsx-runtime"),ye=require("./TextLabel-XE0rQSDn.cjs"),K=require("@react-three/fiber"),m=require("react"),cn=require("three"),ln=require("./context-hA0Rb2Xa.cjs"),F=require("./useInstructionHold-DwJY1Alr.cjs"),_=require("./index-CfSF8LXa.cjs"),x=require("./index-CGsQWodV.cjs"),Se=require("./selectors-C4X71aoD.cjs"),un=require("./SkeletonUtils-CddIup1F.cjs"),Ke=require("./landmarks-BlUqf5MZ.cjs"),ht=require("./getFaceInfo-B1otSDMX.cjs");function mn(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const r=mn(cn),wt=()=>{const n=document.createElement("canvas");n.width=n.height=128;const t=n.getContext("2d"),o=t.createRadialGradient(128*.38,128*.32,128*.05,128/2,128/2,128*.55);o.addColorStop(0,"#ffffff"),o.addColorStop(.5,"#eef2f7"),o.addColorStop(.85,"#c9d3df"),o.addColorStop(1,"#9aa8b8"),t.fillStyle=o,t.fillRect(0,0,128,128);const i=new r.CanvasTexture(n);return i.colorSpace=r.SRGBColorSpace,i},xe=96,It=(e,n={})=>{const t={uHighlight:{value:new Float32Array(xe)},uHighlightGain:{value:0},uCore:{value:n.core??.5},uRim:{value:n.rim??.95},uWhiten:{value:n.whiten??.6},uHighlightOpacity:{value:n.highlightOpacity??.9},uHighlightWhiten:{value:n.highlightWhiten??.55}},o=new r.MeshMatcapMaterial({matcap:e,color:n.color??"#ffffff",transparent:!0,depthWrite:!1,vertexColors:n.vertexColors??!0});return o.userData.ghost=t,o.onBeforeCompile=i=>{Object.assign(i.uniforms,t),i.vertexShader=i.vertexShader.replace("#include <common>",`#include <common>
2
+ uniform float uHighlight[ ${xe} ];
3
+ varying float vHighlight;`).replace("#include <skinning_vertex>",`#include <skinning_vertex>
4
+ vHighlight = 0.0;
5
+ #ifdef USE_SKINNING
6
+ vHighlight = uHighlight[ int( skinIndex.x ) ] * skinWeight.x
7
+ + uHighlight[ int( skinIndex.y ) ] * skinWeight.y
8
+ + uHighlight[ int( skinIndex.z ) ] * skinWeight.z
9
+ + uHighlight[ int( skinIndex.w ) ] * skinWeight.w;
10
+ #endif`),i.fragmentShader=i.fragmentShader.replace("#include <common>",`#include <common>
11
+ uniform float uHighlightGain;
12
+ uniform float uCore;
13
+ uniform float uRim;
14
+ uniform float uWhiten;
15
+ uniform float uHighlightOpacity;
16
+ uniform float uHighlightWhiten;
17
+ varying float vHighlight;`).replace("#include <opaque_fragment>",`float ghostRim = 1.0 - abs( dot( normal, normalize( vViewPosition ) ) );
18
+ ghostRim = pow( ghostRim, 1.6 );
19
+ float lit = clamp( vHighlight, 0.0, 1.0 ) * uHighlightGain;
20
+ outgoingLight = mix( outgoingLight, vec3( 1.0 ), max( ghostRim * uWhiten, lit * uHighlightWhiten ) );
21
+ float ghostAlpha = mix( uCore, uRim, ghostRim );
22
+ diffuseColor.a *= mix( ghostAlpha, max( ghostAlpha, uHighlightOpacity ), lit );
23
+ #include <opaque_fragment>`)},o.customProgramCacheKey=()=>"instruction-hint-ghost",o},Ot=({width:e,color:n="#0f172a",opacity:t=.3,vertexColors:o=!0})=>{const i={uHaloWidth:{value:e},uHaloColor:{value:new r.Color(n)},uHaloOpacity:{value:t}},s=new r.MeshMatcapMaterial({transparent:!0,depthWrite:!1,side:r.BackSide,vertexColors:o});return s.userData.halo=i,s.onBeforeCompile=a=>{Object.assign(a.uniforms,i),a.vertexShader=a.vertexShader.replace("#include <common>",`#include <common>
24
+ uniform float uHaloWidth;`).replace("#include <skinning_vertex>",`#include <skinning_vertex>
25
+ transformed += normalize( objectNormal ) * uHaloWidth;`),a.fragmentShader=a.fragmentShader.replace("#include <common>",`#include <common>
26
+ uniform vec3 uHaloColor;
27
+ uniform float uHaloOpacity;`).replace("#include <opaque_fragment>",`float haloFacing = abs( dot( normal, normalize( vViewPosition ) ) );
28
+ outgoingLight = uHaloColor;
29
+ diffuseColor.a *= uHaloOpacity * smoothstep( 0.0, 0.7, haloFacing );
30
+ #include <opaque_fragment>`)},s.customProgramCacheKey=()=>`instruction-hint-halo-${o}`,s},St=()=>new r.MeshBasicMaterial({colorWrite:!1,depthWrite:!0,transparent:!0}),De="instructionHintTwin",xt=e=>{const n=[];return e.traverse(t=>{t.frustumCulled=!1,t instanceof r.Mesh&&!t.userData[De]&&n.push(t)}),n.map(t=>({mesh:t,twins:["prepass","halo"].map(o=>{var s;const i=t.clone();return i.userData[De]=o,i.frustumCulled=!1,(s=t.parent)==null||s.add(i),i})}))},Dt=(e,{main:n,prepass:t,halo:o,showHalo:i,renderOrder:s=0})=>{e.traverse(a=>{if(!(a instanceof r.Mesh))return;const c=a.userData[De];c==="prepass"?(a.material=t,a.renderOrder=s-.5):c==="halo"?(a.material=o,a.renderOrder=s-.25,a.visible=i):(a.material=n(a),a.renderOrder=s)})},hn=[-1,-.5,0,.5,1],Ee=(e,n,t)=>{let o=1e-6,i=1e-6;const s=new r.Vector3;for(const a of hn){const c=new r.Matrix4().makeRotationY(t*a);for(const d of e)s.copy(d).sub(n).applyMatrix4(c),o=Math.max(o,Math.abs(s.x)),i=Math.max(i,Math.abs(s.y))}return 2*Math.max(o,i)},ne=e=>e*e*(3-2*e),Et=(e="#ffffff",n=.75)=>{const o=document.createElement("canvas");o.width=o.height=128;const i=o.getContext("2d"),s=new r.Color(e),a=`${Math.round(s.r*255)},${Math.round(s.g*255)},${Math.round(s.b*255)}`,c=i.createRadialGradient(128/2,128/2,0,128/2,128/2,128/2);c.addColorStop(0,`rgba(${a},1)`),c.addColorStop(.5,`rgba(${a},0.75)`),c.addColorStop(.68,`rgba(${a},0.32)`),c.addColorStop(.84,`rgba(${a},0.1)`),c.addColorStop(1,`rgba(${a},0)`),i.fillStyle=c,i.fillRect(0,0,128,128);const d=new r.CanvasTexture(o);d.colorSpace=r.SRGBColorSpace;const h=new r.MeshBasicMaterial({map:d,transparent:!0,opacity:n,depthWrite:!1,depthTest:!1,side:r.DoubleSide});return h.userData.glowTexture=d,h},Ht=e=>{var n;(n=e.userData.glowTexture)==null||n.dispose(),e.dispose()},Rt=e=>{let n=!0;return e.traverse(t=>{t instanceof r.Mesh&&!t.geometry.getAttribute("color")&&(n=!1)}),n},dt=new WeakMap,Ve=e=>{const n=dt.get(e);if(n)return n;const t=new Map;for(const o of e.tracks){const{nodeName:i,propertyName:s}=r.PropertyBinding.parseTrackName(o.name);if(s!=="quaternion")continue;const[a,c,d,h]=o.values;t.set(i,new r.Quaternion(a,c,d,h).normalize())}return dt.set(e,t),t},ft=new WeakMap,pt=e=>{const n=ft.get(e);if(n)return n;const t=new Map;for(const o of e.tracks){const{nodeName:i,propertyName:s}=r.PropertyBinding.parseTrackName(o.name);if(s!=="position")continue;const[a,c,d]=o.values;t.set(i,new r.Vector3(a,c,d))}return ft.set(e,t),t},Ne=2e3,dn={sm:.1,md:.14,lg:.19},Ge=160,fn=.66,At={color:"#ffffff",fontWeight:"bold",textAlign:"center",bgColor:"transparent",padding:4,resolution:Ge,fontSize:Ge*fn,resizeToFit:!0,minFontSize:Ge*.3,shadowEnabled:!0,shadowColor:"#000000",shadowBlur:10,shadowOffsetY:2,shadowOpacity:.55},Fe=(e,n)=>{e.traverse(t=>{var i;if(!(t instanceof r.Mesh))return;const o=Array.isArray(t.material)?t.material:[t.material];for(const s of o)(i=s.userData).baseOpacity??(i.baseOpacity=s.opacity),s.opacity=s.userData.baseOpacity*n})},He=({text:e,doneText:n,nudgeText:t=null,nudgeAfterMs:o=3e3,size:i="md",placement:s="center",offset:a=[0,0],color:c,textStyle:d,nudgeTextStyle:h,renderText:p,motion:u={},layout:N={},hideOnComplete:b=!0,onStatusChange:g,detector:y,symbol:l,symbolAspect:T=1})=>{const{width:f,height:M}=ln.useScreenSpace(),I=y.status,{fadeIn:C=.35,fadeOut:H=.5,rise:V=.15,bob:$=.02,pop:D=.1,popSeconds:R=.3,nudgePulse:J=.06,ring:O={}}=u,L=O?O.seconds??.6:0,k=O?O.from??.45:0,A=O?O.to??.95:0,j=O?O.opacity??.7:0,P=typeof i=="number"?i:dn[i],z=Math.min(M*P,f*.42),X=Math.min(z*T,M*.62),oe=z*(N.textHeight??.3),ae=z*(N.nudgeHeight??.2),ce=Math.min(f*.9,z*(N.textWidth??6)),le=M*(N.edgeMargin??.06),ee=X+z*(N.gap??.1)+oe,ue=(s==="top"?M/2-le-ee/2:s==="bottom"?-M/2+le+ee/2+(t!==null?ae:0):0)+a[1]*M/2,_e=ee/2-X/2,me=-ee/2+oe/2,he=me-oe/2-ae/2,[Be,nt]=m.useState("waiting"),[U,v]=m.useState(!1),Q=m.useRef("waiting"),de=m.useRef(performance.now()),B=m.useRef(g);B.current=g;const Y=m.useRef(y.isInView);Y.current=y.isInView;const fe=m.useRef(!1);m.useEffect(()=>{var G;fe.current||(fe.current=!0,(G=B.current)==null||G.call(B,Q.current))},[]);const se=m.useRef(null),te=m.useRef(null),pe=m.useRef(null),Ce=m.useRef(null),be=m.useRef(null),Le=m.useMemo(()=>new r.RingGeometry(.94,1,72),[]),ot=O?O.color??"#ffffff":"#ffffff",Me=m.useMemo(()=>new r.MeshBasicMaterial({color:ot,transparent:!0,opacity:0,depthTest:!1,depthWrite:!1}),[ot]);m.useEffect(()=>()=>Le.dispose(),[Le]),m.useEffect(()=>()=>Me.dispose(),[Me]);const W=m.useMemo(()=>({age:0,doneAge:0,nudge:0}),[]),[st,rn]=m.useState(!1);if(K.useFrame((G,Ue)=>{var mt;const at=performance.now(),ct=Y.current();ct&&(de.current=at);const Z=I==="done"?"done":I==="holding"?"holding":ct?"detected":"waiting";Z!==Q.current&&(Q.current=Z,nt(Z),fe.current=!0,(mt=B.current)==null||mt.call(B,Z));const je=t!==null&&Z==="waiting"&&at-de.current>o;je!==U&&v(je),W.age+=Ue,W.nudge=r.MathUtils.damp(W.nudge,je?1:0,6,Ue);const lt=C>0?ne(Math.min(W.age/C,1)):1;let we=lt,ut=1;if(Z==="done"&&(W.doneAge+=Ue,R>0&&(ut=1+D*Math.sin(Math.min(W.doneAge/R,1)*Math.PI)),b&&(we*=H>0?1-ne(Math.min(W.doneAge/H,1)):0,W.doneAge>=H&&!st&&rn(!0))),se.current&&(se.current.position.y=ue-(1-lt)*X*V,se.current.scale.setScalar(ut)),te.current){const re=W.age;te.current.position.y=_e+Math.sin(re*2.2)*X*$,te.current.scale.setScalar(1+W.nudge*J*(.5+.5*Math.sin(re*4))),Fe(te.current,we)}if(be.current){const re=Z==="done"&&L>0?Math.min(W.doneAge/L,1):1;be.current.visible=Z==="done"&&re<1,be.current.scale.setScalar(X*(k+(A-k)*ne(re))),Me.opacity=j*(1-re)}pe.current&&Fe(pe.current,we),Ce.current&&Fe(Ce.current,we*W.nudge*.85)}),st)return null;const ge=Ne,rt={...At,...c!==void 0?{color:c}:{},...d},an={...rt,fontWeight:"normal",...h},it=G=>p?p(G):w.jsx(ye.TextLabel,{text:G.text,...G.style,aspect:G.width/G.height,scale:[G.width,G.height,1],renderOrder:G.renderOrder});return w.jsxs("group",{ref:se,position:[a[0]*f/2,ue,0],children:[w.jsxs("mesh",{renderOrder:ge,scale:[1e-4,1e-4,1],onBeforeRender:G=>G.clearDepth(),children:[w.jsx("planeGeometry",{args:[1,1]}),w.jsx("meshBasicMaterial",{colorWrite:!1,depthWrite:!1,transparent:!0})]}),w.jsx("group",{ref:te,position:[0,_e,X*.5],children:l(X,ge+1)}),O&&w.jsx("mesh",{ref:be,geometry:Le,material:Me,position:[0,_e,0],renderOrder:ge+3,visible:!1}),w.jsx("group",{ref:pe,position:[0,me,0],children:it({text:Be==="done"&&n!==void 0?n:e,role:"text",width:ce,height:oe,renderOrder:ge+2,style:rt})}),t!==null&&w.jsx("group",{ref:Ce,position:[0,he,0],visible:U||W.nudge>.01,children:it({text:t,role:"nudge",width:ce,height:ae,renderOrder:ge+2,style:an})})]})},pn=({active:e=!0,...n})=>e?w.jsx(ye.ScreenSpaceUI,{children:w.jsx(He,{...n})}):null,ie=["thumb","index","middle","ring","pinky"],gn=e=>new r.Vector3(e.x,e.y,e.z),Te=(e,n,t)=>{const o=n.clone().sub(e),i=t.clone().sub(n);return o.lengthSq()<1e-12||i.lengthSq()<1e-12?0:o.angleTo(i)},Je=Object.freeze({fingerStraight:r.MathUtils.degToRad(55),fingerKnuckle:r.MathUtils.degToRad(70),thumbStraight:r.MathUtils.degToRad(60),thumbReach:.75,thumbVertical:Math.cos(r.MathUtils.degToRad(45)),touch:.2,fullCurl:r.MathUtils.degToRad(255)}),$e=(e,{limits:n}={})=>{if(e.length<21)throw new Error("analyzeHandShape needs 21 joints");const t=e.map(gn),o=n?{...Je,...n}:Je,i=t[_.HAND_JOINT_INDEX.middleMcp].distanceTo(t[_.HAND_JOINT_INDEX.wrist]),s=t[_.HAND_JOINT_INDEX.indexMcp].distanceTo(t[_.HAND_JOINT_INDEX.pinkyMcp]),a={},c={};for(const u of["index","middle","ring","pinky"]){const N=t[_.HAND_JOINT_INDEX[`${u}Mcp`]],b=t[_.HAND_JOINT_INDEX[`${u}Pip`]],g=t[_.HAND_JOINT_INDEX[`${u}Dip`]],y=t[_.HAND_JOINT_INDEX[`${u}Tip`]],l=Te(t[_.HAND_JOINT_INDEX.wrist],N,b),T=Te(N,b,g)+Te(b,g,y);c[u]=r.MathUtils.clamp((l+T)/o.fullCurl,0,1),a[u]=T<o.fingerStraight&&l<o.fingerKnuckle&&y.distanceTo(t[_.HAND_JOINT_INDEX.wrist])>b.distanceTo(t[_.HAND_JOINT_INDEX.wrist])}const d=Te(t[_.HAND_JOINT_INDEX.thumbCmc],t[_.HAND_JOINT_INDEX.thumbMcp],t[_.HAND_JOINT_INDEX.thumbIp])+Te(t[_.HAND_JOINT_INDEX.thumbMcp],t[_.HAND_JOINT_INDEX.thumbIp],t[_.HAND_JOINT_INDEX.thumbTip]);c.thumb=r.MathUtils.clamp(d/r.MathUtils.degToRad(150),0,1),a.thumb=d<o.thumbStraight&&t[_.HAND_JOINT_INDEX.thumbTip].distanceTo(t[_.HAND_JOINT_INDEX.indexMcp])>o.thumbReach*s&&t[_.HAND_JOINT_INDEX.thumbTip].distanceTo(t[_.HAND_JOINT_INDEX.pinkyMcp])>t[_.HAND_JOINT_INDEX.thumbIp].distanceTo(t[_.HAND_JOINT_INDEX.pinkyMcp]);const h=t[_.HAND_JOINT_INDEX.thumbTip].clone().sub(t[_.HAND_JOINT_INDEX.thumbMcp]).normalize(),p=a.thumb?h.y>=o.thumbVertical?"up":h.y<=-o.thumbVertical?"down":"side":"side";return{extended:a,curl:c,count:ie.filter(u=>a[u]).length,thumbDirection:p,thumbIndexTouch:t[_.HAND_JOINT_INDEX.thumbTip].distanceTo(t[_.HAND_JOINT_INDEX.indexTip])<o.touch*i}},Tn=e=>{if(!e.rule&&!e.match)throw new Error("defineHandGesture needs a rule or a match function");return e},ze={index:!1,middle:!1,ring:!1,pinky:!1},q=(e={})=>({thumb:1,index:1,middle:1,ring:1,pinky:1,...e}),Qe={palm:{label:"Show your palm",rule:{count:5},hint:{clip:"palm",spread:.8,thumbTuck:0}},fist:{label:"Make a fist",rule:{digits:{thumb:!1,...ze}},hint:{clip:"fist",curl:q(),thumbTuck:1,thumbTo:{joint:"indexPip",offset:[-.15,-.1,.13]}}},peace:{label:"Show a peace sign",rule:{digits:{index:!0,middle:!0,ring:!1,pinky:!1}},hint:{clip:"peace",curl:q({index:0,middle:0}),spread:1,thumbTuck:1,thumbTo:{joint:"ringPip",offset:[0,-.08,.12]}}},thumbUp:{label:"Give a thumbs up",rule:{digits:{thumb:!0,...ze},thumbDirection:"up"},hint:{clip:"thumbUp",curl:q({thumb:0}),thumbTuck:0,aimThumb:"up"}},thumbDown:{label:"Give a thumbs down",rule:{digits:{thumb:!0,...ze},thumbDirection:"down"},hint:{clip:"thumbUp",curl:q({thumb:0}),thumbTuck:0,aimThumb:"down"}},point:{label:"Point your index finger",rule:{digits:{index:!0,middle:!1,ring:!1,pinky:!1}},hint:{clip:"one",curl:q({index:0}),thumbTuck:.6,thumbTo:{joint:"middlePip",offset:[.1,-.1,.1]}}},one:{label:"Show 1 finger",rule:{count:1},hint:{clip:"one",curl:q({index:0}),thumbTuck:1,thumbTo:{joint:"middlePip",offset:[0,-.08,.12]}}},two:{label:"Show 2 fingers",rule:{count:2},hint:{clip:"peace",curl:q({index:0,middle:0}),spread:.6,thumbTuck:1,thumbTo:{joint:"ringPip",offset:[0,-.08,.12]}}},three:{label:"Show 3 fingers",rule:{count:3},hint:{clip:"three",curl:q({index:0,middle:0,ring:0}),spread:.6,thumbTuck:1,thumbTo:{joint:"pinkyPip",offset:[0,-.08,.12]}}},four:{label:"Show 4 fingers",rule:{count:4},hint:{clip:"four",curl:{thumb:1},spread:.6,thumbTuck:1,thumbTo:{joint:"ringMcp",offset:[0,-.2,.1]}}},five:{label:"Show 5 fingers",rule:{count:5},hint:{clip:"palm",spread:.8,thumbTuck:0}},rock:{label:"Rock on",rule:{digits:{index:!0,middle:!1,ring:!1,pinky:!0}},hint:{clip:"rock",yaw:180,curl:q({index:0,pinky:0}),spread:.8,thumbTuck:1,thumbTo:{joint:"middlePip",offset:[-.05,-.08,.12]}}},loveYou:{label:"Sign I love you",rule:{digits:{thumb:!0,index:!0,middle:!1,ring:!1,pinky:!0}},hint:{clip:"loveYou",curl:q({thumb:0,index:0,pinky:0}),spread:.8,thumbTuck:0}},callMe:{label:"Call me",rule:{digits:{thumb:!0,index:!1,middle:!1,ring:!1,pinky:!0}},hint:{clip:"callMe",roll:103,curl:q({thumb:0,pinky:0}),spread:.8,thumbTuck:0}},ok:{label:"Make an OK sign",rule:{thumbIndexTouch:!0,digits:{middle:!0,ring:!0,pinky:!0}},hint:{clip:"ok",yaw:124,curl:{thumb:.3,index:.5},spread:.6,thumbTuck:.4}}},kt=Object.keys(Qe),Re=e=>typeof e=="string"?Qe[e]:typeof e=="object"&&"hint"in e?e:void 0,gt=(e,n)=>{var t;if(n.count!==void 0&&e.count!==n.count||n.thumbDirection&&e.thumbDirection!==n.thumbDirection||n.thumbIndexTouch!==void 0&&e.thumbIndexTouch!==n.thumbIndexTouch)return!1;for(const o of ie){const i=(t=n.digits)==null?void 0:t[o];if(i!==void 0&&e.extended[o]!==i)return!1}return!0},Ze=(e,n,t)=>{if(typeof n=="function")return n(e,t);const o=Re(n);return o?o.rule&&!gt(e,o.rule)?!1:o.match?o.match(e,t):!!o.rule:gt(e,n)},yn=e=>kt.filter(n=>Ze(e,n)),Tt={finger:[85,100,70].map(r.MathUtils.degToRad),thumb:[10,45,35].map(r.MathUtils.degToRad)},Nn={index:12,middle:3,ring:-8,pinky:-16},_n=r.MathUtils.degToRad(70),bn=.65,Mn={1:[1,.35],2:[.6,1]},wn=Object.fromEntries(x.HAND_RIG_BONES.map(({name:e})=>[e,e.endsWith("Cmc")||e.endsWith("Mcp")&&!e.startsWith("thumb")?0:e==="thumbMcp"||e.endsWith("Pip")?1:2])),yt=e=>ie.find(n=>e.startsWith(n))??"index",E={thumbAxis:new r.Vector3,thumbSide:new r.Vector3,cross:new r.Vector3,delta:new r.Quaternion,restInv:new r.Quaternion,q:new r.Quaternion,D:new r.Quaternion,axis:new r.Vector3,dir:new r.Vector3,live:Object.fromEntries(["wrist",...x.HAND_RIG_BONES.map(e=>e.name)].map(e=>[e,new r.Quaternion]))},Xe=(e,n)=>r.MathUtils.clamp(typeof e=="number"?e:e(n),0,1.1),In=(e,n)=>{if(!(!e||!n)){for(const t of e)if(t.name===n)return t}},Nt=new WeakMap,vt=e=>{const n=Nt.get(e);if(n)return n;const t={};for(const o of e.tracks){const{nodeName:i,propertyName:s}=r.PropertyBinding.parseTrackName(o.name);if(s!=="quaternion"||!(i in _.HAND_JOINT_INDEX))continue;const[a,c,d,h]=o.values;t[i]=new r.Quaternion(a,c,d,h).normalize()}return Nt.set(e,t),t},Oe=(e,n,t=1,o)=>{var p;const i=In(o,n.clip);if(i){const u=vt(i);for(const{name:N}of x.HAND_RIG_BONES){const b=e.bones[N],g=e.restLocal[N];!b||!g||b.quaternion.copy(g).slerp(u[N]??g,Xe(t,yt(N)))}return}const s=e.restPalmNormal,a=e.restPositions,c=E.thumbSide.subVectors(a[_.HAND_JOINT_INDEX.indexMcp],a[_.HAND_JOINT_INDEX.pinkyMcp]).normalize(),d=E.live;d.wrist.copy(e.restQuaternions.wrist);for(const{name:u,parent:N,child:b}of x.HAND_RIG_BONES){const g=yt(u),y=Xe(t,g),l=wn[u]??0,T=(((p=n.curl)==null?void 0:p[g])??0)*y,f=(g==="thumb"?Tt.thumb:Tt.finger)[l]*T;E.restInv.copy(e.restQuaternions[N]).invert(),E.delta.copy(d[N]).multiply(E.restInv),E.dir.subVectors(a[_.HAND_JOINT_INDEX[b]],a[_.HAND_JOINT_INDEX[u]]).normalize(),E.axis.crossVectors(E.dir,s).normalize();const M=Math.sign(E.cross.crossVectors(s,E.dir).dot(c)),I=E.D.identity();if(g==="thumb"){const H=-M||-1,[V,$]=Mn[l]??[0,1];E.q.setFromAxisAngle(E.thumbAxis.copy(s).multiplyScalar(H*V).addScaledVector(E.axis,$).normalize(),f),I.copy(E.q)}else I.setFromAxisAngle(E.axis,f);if(l===0&&g!=="thumb"){const H=r.MathUtils.degToRad(Nn[g])*(n.spread??0)*y;I.premultiply(E.q.setFromAxisAngle(s,H*(M||1)))}if(g==="thumb"&&l===0){const H=_n*(n.thumbTuck??0)*y;I.premultiply(E.q.setFromAxisAngle(s,-H*(M||1))),I.premultiply(E.q.setFromAxisAngle(E.axis,H*bn))}d[u].copy(E.delta).multiply(I).multiply(e.restQuaternions[u]);const C=e.bones[u];C&&C.quaternion.copy(E.q.copy(d[N]).invert().multiply(d[u]))}const h=Math.min(Xe(t,"thumb"),1);n.thumbTo&&h>0&&Dn(e,n.thumbTo,h)},On={thumbCmc:r.MathUtils.degToRad(75),thumbMcp:r.MathUtils.degToRad(65),thumbIp:r.MathUtils.degToRad(85)},Sn=["thumbIp","thumbMcp","thumbCmc"],S={inv:new r.Matrix4,head:new r.Vector3,eff:new r.Vector3,target:new r.Vector3,start:new r.Vector3,a:new r.Vector3,b:new r.Vector3,q:new r.Quaternion,pq:new r.Quaternion,pqInv:new r.Quaternion,rq:new r.Quaternion,limited:new r.Quaternion,up:new r.Vector3,side:new r.Vector3},xn=[0,0,0],Ie=(e,n)=>e.getWorldPosition(n).applyMatrix4(S.inv),Dn=(e,n,t)=>{const o=e.root,i=e.restPositions,s=i[_.HAND_JOINT_INDEX.middleMcp].distanceTo(i[_.HAND_JOINT_INDEX.wrist]),a=S.up.subVectors(i[_.HAND_JOINT_INDEX.middleMcp],i[_.HAND_JOINT_INDEX.wrist]).normalize(),c=S.side.subVectors(i[_.HAND_JOINT_INDEX.indexMcp],i[_.HAND_JOINT_INDEX.pinkyMcp]);c.addScaledVector(a,-c.dot(a)).normalize();const[d,h,p]=n.offset??xn,u=e.bones.thumbTip??e.bones.thumbIp,N=e.bones[n.joint];if(!N)return;o.updateMatrixWorld(!0),S.inv.copy(o.matrixWorld).invert(),Ie(N,S.target).addScaledVector(c,d*s).addScaledVector(a,h*s).addScaledVector(e.restPalmNormal,p*s),Ie(u,S.start),S.target.lerp(S.start,1-t);const b=o.getWorldQuaternion(S.rq).invert();for(let g=0;g<10;g+=1)for(const y of Sn){const l=e.bones[y];if(!(l!=null&&l.parent)||(o.updateMatrixWorld(!0),Ie(l,S.head),Ie(u,S.eff),S.a.subVectors(S.eff,S.head),S.b.subVectors(S.target,S.head),S.a.lengthSq()<1e-10||S.b.lengthSq()<1e-10))continue;S.q.setFromUnitVectors(S.a.normalize(),S.b.normalize()),l.parent.getWorldQuaternion(S.pq).premultiply(b),l.quaternion.premultiply(S.pqInv.copy(S.pq).invert().multiply(S.q).multiply(S.pq));const T=e.restLocal[y],f=On[y]??Math.PI,M=l.quaternion.angleTo(T);M>f&&l.quaternion.copy(S.limited.copy(T).slerp(l.quaternion,f/M))}},Pt=2*Math.acos(2/3)/Math.PI,Ae=(e,{seconds:n=2.4,hold:t=Pt,from:o=0,easing:i=ne}={})=>{if(n<=0)return{phase:.5,drive:1,closing:!1,amount:1};const s=e%n/n,a=1/Math.max(Math.cos(Math.PI*r.MathUtils.clamp(t,0,.95)/2),.001),c=r.MathUtils.clamp(Math.sin(s*Math.PI)*a,0,1);return{phase:s,drive:c,closing:s<.5,amount:o+(1-o)*i(c)}},Bt=(e,n,t)=>t>0?Math.sin(e/t*Math.PI*2)*r.MathUtils.degToRad(n):0,ke=({height:e,span:n,mirrored:t=!1,orbit:o=0,orbitSeconds:i=6,glow:s=null,glowSize:a=1.75,renderOrder:c=0,children:d})=>{const h=m.useRef(null);K.useFrame(({clock:u})=>{h.current&&(h.current.rotation.y=Bt(u.elapsedTime,o,i))});const p=e/n;return w.jsxs("group",{scale:[p*(t?-1:1),p,p],children:[s&&w.jsx("mesh",{material:s,position:[0,0,-n*.6],scale:n*a,renderOrder:c-.75,children:w.jsx("planeGeometry",{args:[1,1]})}),w.jsx("group",{ref:h,children:d})]})},En={width:.3,color:"#0f172a",opacity:.3},Hn={color:"#ffffff",size:1.75,idle:.5,full:.85},Rn={opacity:.9,whiten:.55,idle:.25},We=(e,n,t)=>t===!1||n===!1&&t===void 0?!1:{...e,...n||{},...t||{}},Ct=(e,n={})=>{var o;const t={};for(const[i,s]of Object.entries({...e.parts,...n.parts}))s&&(t[i]={...((o=e.parts)==null?void 0:o[i])??{},...s});return{ghost:{...e.ghost,...n.ghost},parts:t,halo:We(En,e.halo,n.halo),glow:We(Hn,e.glow,n.glow),highlight:We(Rn,e.highlight,n.highlight),matcap:n.matcap??e.matcap,material:n.material??e.material}},_t=e=>JSON.stringify(e??{},(n,t)=>n==="matcap"||n==="material"?void 0:t),ve=(e,n,{base:t={},renderOrder:o}={})=>{const i=_t(n)+_t(t),s=m.useMemo(()=>Ct(t,n),[i,n==null?void 0:n.matcap,n==null?void 0:n.material,t.matcap,t.material]),{object:a,meshes:c}=m.useMemo(()=>{const l=un.clone(e);return{object:l,meshes:xt(l)}},[e]),d=m.useMemo(()=>Rt(a),[a]),h=m.useMemo(()=>s.matcap?null:wt(),[s.matcap]);m.useEffect(()=>()=>h==null?void 0:h.dispose(),[h]);const p=s.matcap??h,u=m.useMemo(()=>{const l=new Map;if(s.material)return l;const{highlight:T}=s;for(const{mesh:f}of c){const M=f.material.name;l.has(M)||l.set(M,It(p,{vertexColors:d,...T?{highlightOpacity:T.opacity,highlightWhiten:T.whiten}:{},...s.ghost,...s.parts[M]??{}}))}return l},[c,p,d,s]);m.useEffect(()=>()=>u.forEach(l=>l.dispose()),[u]);const N=m.useMemo(()=>new Map(c.map(({mesh:l})=>[l,s.material??u.get(l.material.name)])),[c,u,s.material]),b=m.useMemo(()=>St(),[]);m.useEffect(()=>()=>b.dispose(),[b]);const g=m.useMemo(()=>{var f;a.updateMatrixWorld(!0);const l=((f=c[0])==null?void 0:f.mesh.getWorldScale(new r.Vector3).x)||1,T=s.halo||{width:0,color:"#000000",opacity:0};return Ot({...T,width:T.width/l,vertexColors:d})},[a,c,d,s.halo]);m.useEffect(()=>()=>g.dispose(),[g]);const y=m.useMemo(()=>s.glow?Et(s.glow.color,s.glow.idle):null,[s.glow]);return m.useEffect(()=>()=>{y&&Ht(y)},[y]),m.useEffect(()=>{Dt(a,{main:l=>N.get(l)??s.material??u.values().next().value,prepass:b,halo:g,showHalo:s.halo!==!1,renderOrder:o})},[a,N,u,b,g,s,o]),m.useMemo(()=>{const l=()=>[...u.values()].map(T=>T.userData.ghost).filter(T=>!!T);return{object:a,meshes:c,materials:u,glowMaterial:y,look:s,setHighlight:T=>{var f,M;for(const I of l())I.uHighlight.value.fill(0);if(s.highlight)for(const{mesh:I}of c){if(!(I instanceof r.SkinnedMesh))continue;const C=(M=(f=N.get(I))==null?void 0:f.userData.ghost)==null?void 0:M.uHighlight;C&&I.skeleton.bones.forEach((H,V)=>{V<xe&&(C.value[V]=Math.max(C.value[V],T(H)))})}},setStrength:T=>{if(s.highlight){const{idle:f}=s.highlight;for(const M of l())M.uHighlightGain.value=f+(1-f)*T}if(y&&s.glow){const f=s.glow.idle+(s.glow.full-s.glow.idle)*T;y.userData.baseOpacity=f,y.opacity=f}}}},[a,c,u,N,y,s])},Lt={halo:{width:.35},glow:{size:1.75}},qe={seconds:2.2,from:.35,stagger:.21},An={thumb:["thumbMcp","thumbIp","thumbTip"],index:["indexMcp","indexPip","indexDip","indexTip"],middle:["middleMcp","middlePip","middleDip","middleTip"],ring:["ringMcp","ringPip","ringDip","ringTip"],pinky:["pinkyMcp","pinkyPip","pinkyDip","pinkyTip"]},kn=(e,n)=>{const t=e==null?void 0:e.rule;if(t!=null&&t.thumbIndexTouch)return["thumb","index"];if(t!=null&&t.thumbDirection)return["thumb"];const o=ie.filter(i=>n[i]);return o.length>0&&o.length<ie.length?o:[]},vn=e=>{const t=e-1;return 1+(.9+1)*t*t*t+.9*t*t},bt={pinky:0,ring:1/3,middle:2/3,thumb:.81,index:1},Ut=({gesture:e,model:n,poses:t,modelHand:o="right",showHand:i="right",height:s=1,loop:a,look:c,highlight:d,orbit:h=35,orbitSeconds:p=6,renderOrder:u})=>{const N=typeof e=="string"||"label"in e?Re(e):void 0,b=JSON.stringify(N?N.hint:e),g=m.useMemo(()=>N?N.hint:e,[b]),y=JSON.stringify((N==null?void 0:N.rule)??null),l=ve(n,c,{base:Lt,renderOrder:u}),T=l.object,f=m.useMemo(()=>x.bindHandRig(T,o),[T,o]),M=(a==null?void 0:a.from)??qe.from,I=m.useMemo(()=>{const O=U=>f.restPositions[U],L=O(_.HAND_JOINT_INDEX.middleMcp).clone().sub(O(_.HAND_JOINT_INDEX.wrist)).normalize(),k=f.restPalmNormal.clone(),A=new r.Vector3().crossVectors(L,k).normalize(),j=new r.Vector3().crossVectors(k,A),P=new r.Matrix4().makeBasis(A,j,k).invert();g.yaw&&P.premultiply(new r.Matrix4().makeRotationY(-r.MathUtils.degToRad(g.yaw))),g.roll&&P.premultiply(new r.Matrix4().makeRotationZ(r.MathUtils.degToRad(g.roll)));const z=U=>{Oe(f,g,U,t),T.updateMatrixWorld(!0);const v=T.matrixWorld.clone().invert(),Q=Object.values(f.bones).filter(B=>!!B).map(B=>B.getWorldPosition(new r.Vector3).applyMatrix4(v).applyMatrix4(P)),de=[];return T.traverse(B=>{if(!(B instanceof r.SkinnedMesh)||B.userData[De])return;B.skeleton.update(),B.computeBoundingBox();const Y=B.boundingBox,fe=v.clone().multiply(B.matrixWorld);for(const se of[Y.min.x,Y.max.x])for(const te of[Y.min.y,Y.max.y])for(const pe of[Y.min.z,Y.max.z])de.push(new r.Vector3(se,te,pe).applyMatrix4(fe).applyMatrix4(P))}),[...Q,...de]},X=z(1),oe=T.matrixWorld.clone().invert(),ae=$e(_.HAND_JOINT_NAMES.map(U=>{var Q;const v=(Q=f.bones[U])==null?void 0:Q.getWorldPosition(new r.Vector3).applyMatrix4(oe);return{x:(v==null?void 0:v.x)??0,y:(v==null?void 0:v.y)??0,z:(v==null?void 0:v.z)??0}})),ce=U=>X[Object.keys(f.bones).filter(v=>f.bones[v]).indexOf(U)];let le=0;if(g.aimThumb){const U=ce("thumbCmc"),v=ce(f.bones.thumbTip?"thumbTip":"thumbIp");le=(g.aimThumb==="up"?Math.PI/2:-Math.PI/2)-Math.atan2(v.y-U.y,v.x-U.x)}const ee=new r.Matrix4().makeRotationZ(le),ue=[...z(M),...z(.7),...X].map(U=>U.applyMatrix4(ee));Oe(f,g,0,t);const me=new r.Box3().setFromPoints(ue).getCenter(new r.Vector3),he=me.clone().applyMatrix4(ee.clone().invert()),Be=Ee(ue,me,r.MathUtils.degToRad(h))*1.06;return{matrix:new r.Matrix4().makeTranslation(-he.x,-he.y,-he.z).multiply(P),span:Be,extended:ae.extended}},[f,T,g,t,h,M]),C=d===!1?"off":(d??[]).join();m.useEffect(()=>{const O=y==="null"?void 0:JSON.parse(y),L=d===!1?[]:d??g.highlight??kn(O?{rule:O}:void 0,I.extended),k=new Set(L.flatMap(A=>An[A]));l.setHighlight(A=>k.has(A.name)?1:0)},[l,g,y,C,I]);const H=m.useRef(null),V=m.useMemo(()=>({a:new r.Vector3,b:new r.Vector3}),[]),$=JSON.stringify(a??{}),D=m.useMemo(()=>({...qe,...a}),[$,a==null?void 0:a.easing]),R=m.useMemo(()=>{const O={drive:0,closing:!0};return{state:O,amount:k=>{const A=r.MathUtils.clamp(D.stagger??0,0,.9),j=O.closing?bt[k]:1-bt[k],P=r.MathUtils.clamp((O.drive-j*A)/(1-A),0,1),z=D.easing?D.easing(P):O.closing?vn(P):ne(P),X=D.from??0;return X+(1-X)*z}}},[D]);K.useFrame(({clock:O})=>{const{drive:L,closing:k}=Ae(O.elapsedTime,D);R.state.drive=L,R.state.closing=k,Oe(f,g,R.amount,t),l.setStrength(ne(L));const A=H.current;if(A&&(A.rotation.z=0,g.aimThumb)){A.updateMatrixWorld(!0);const j=f.bones.thumbCmc.getWorldPosition(V.a),P=(f.bones.thumbTip??f.bones.thumbIp).getWorldPosition(V.b);A.worldToLocal(j),A.worldToLocal(P);const z=Math.atan2(P.y-j.y,P.x-j.x);A.rotation.z=(g.aimThumb==="up"?Math.PI/2:-Math.PI/2)-z}});const J=l.look.glow;return w.jsx(ke,{height:s,span:I.span,mirrored:i!==o,orbit:h,orbitSeconds:p,glow:l.glowMaterial,glowSize:J?J.size:void 0,renderOrder:u,children:w.jsx("group",{ref:H,children:w.jsx("group",{matrixAutoUpdate:!1,matrix:I.matrix,children:w.jsx("primitive",{object:T})})})})},jt=(e,{hand:n="any",limits:t,active:o=!0,...i}={})=>{const{node:s}=Ke.useXRModel(_.XRModel.HAND_TRACKER,void 0,o),a=F.specKey(e),c=F.useHoldTracker(a,i),d=m.useRef({}),h=m.useRef(e);h.current=e;const p=JSON.stringify(t??null),u=m.useMemo(()=>({limits:t}),[p]),N=m.useRef(n);N.current=n;const b=m.useCallback(()=>{const g=d.current,y=N.current;return y==="any"?!!(g.left||g.right):!!g[y]},[]);return K.useFrame(()=>{var y;if(!o)return;let g=!1;for(const l of["left","right"]){const T=(y=s==null?void 0:s.poses)==null?void 0:y[l];if(!T||T.held||T.world.length<21){delete d.current[l];continue}const f=$e(T.world,u);d.current[l]=f,(n==="any"||n===l)&&Ze(f,h.current,l)&&(g=!0)}c.step(g)}),{status:c.status,holdRef:c.holdRef,matchedRef:c.matchedRef,isInView:b,reset:c.reset,shapesRef:d}},Pn=Ne,Gt="Show your hand to the camera",Bn=({gesture:e,model:n,poses:t,modelHand:o="right",hand:i="any",holdMs:s,graceMs:a,limits:c,orbit:d,look:h,loop:p,highlight:u,onComplete:N,nudgeText:b=Gt,...g})=>{const y=Se.useXRMirrored(),l=jt(e,{hand:i,holdMs:s,graceMs:a,limits:c,onComplete:N}),T=x.screenChirality(i==="any"?"right":i,y);return w.jsx(He,{...g,nudgeText:b,detector:l,symbol:(f,M)=>w.jsx(Ut,{gesture:e,model:n,poses:t,modelHand:o,showHand:T,height:f,loop:p,look:h,highlight:u,orbit:d,renderOrder:M})})},Cn=({active:e=!0,text:n,...t})=>e?w.jsx(ye.ScreenSpaceUI,{children:w.jsx(Bn,{...t,text:n??Re(t.gesture).label},F.specKey(t.gesture))}):null,Ln=e=>{if(!e.rule&&!e.match)throw new Error("defineFaceExpression needs a rule or a match function");return e},et={smile:{label:"Give a big smile",rule:{atLeast:{mouthSmileLeft:.45,mouthSmileRight:.45}},hint:{target:"smile"}},wink:{label:"Wink at the camera",rule:{anyOf:[{atLeast:{eyeBlinkLeft:.55},atMost:{eyeBlinkRight:.3}},{atLeast:{eyeBlinkRight:.55},atMost:{eyeBlinkLeft:.3}}]},hint:{target:"wink"}},surprised:{label:"Look surprised",rule:{atLeast:{jawOpen:.35,browInnerUp:.4}},hint:{target:"surprised"}},kiss:{label:"Blow a kiss",rule:{atLeast:{mouthPucker:.5},atMost:{jawOpen:.3}},hint:{target:"kiss"}},puffCheeks:{label:"Puff your cheeks",rule:{atLeast:{cheekPuff:.3}},hint:{target:"puffCheeks"}},frown:{label:"Frown",rule:{atLeast:{browDownLeft:.4,browDownRight:.4}},hint:{target:"frown"}},scrunch:{label:"Scrunch your face",rule:{anyOf:[{atLeast:{noseSneerLeft:.3,noseSneerRight:.3}},{atLeast:{eyeSquintLeft:.45,eyeSquintRight:.45,browDownLeft:.3,browDownRight:.3}}]},hint:{target:"scrunch"}}},Ft=Object.keys(et),Ye=(e,n)=>{for(const[t,o]of Object.entries(n.atLeast??{}))if((e[t]??0)<(o??0))return!1;for(const[t,o]of Object.entries(n.atMost??{}))if((e[t]??0)>(o??1))return!1;return!(n.anyOf&&n.anyOf.length>0&&!n.anyOf.some(t=>Ye(e,t)))},Pe=e=>typeof e=="string"?et[e]:typeof e=="object"&&"hint"in e?e:void 0,tt=(e,n,t)=>{if(typeof n=="function")return n(e,t);const o=Pe(n);return o?o.rule&&!Ye(e,o.rule)?!1:o.match?o.match(e,t):!!o.rule:Ye(e,n)},Un=e=>Ft.filter(n=>tt(e,n)),zt=(e,n,t)=>{const o=n?Ve(n):new Map,i=t?Ve(t):new Map,s=[];for(const h of new Set([...o.keys(),...i.keys()])){const p=e.getObjectByName(h);if(!p)continue;const u=p.quaternion.clone();s.push({node:p,from:o.get(h)??u,to:i.get(h)??u})}const a=n?pt(n):new Map,c=t?pt(t):new Map,d=[];for(const h of new Set([...a.keys(),...c.keys()])){const p=e.getObjectByName(h);if(!p)continue;const u=p.position.clone();d.push({node:p,from:a.get(h)??u,to:c.get(h)??u})}return{apply:h=>{for(const p of s)p.node.quaternion.copy(p.from).slerp(p.to,h);for(const p of d)p.node.position.lerpVectors(p.from,p.to,h)}}},Xt=(e,n)=>{const t=e.filter(o=>o.morphTargetInfluences&&o.morphTargetDictionary).map(o=>({influences:o.morphTargetInfluences,weights:Object.entries(n).map(([i,s])=>[o.morphTargetDictionary[i]??-1,s]).filter(([i])=>i>=0)}));return{apply:o=>{for(const{influences:i,weights:s}of t){i.fill(0);for(const[a,c]of s)i[a]=c*o}}}},Wt={parts:{eye_white:{core:.62},iris:{color:"#2a2732",core:.9,rim:.95,whiten:.12},sparkle:{core:.95,rim:.95},lash:{color:"#3b302c",core:.88,rim:.92,whiten:.12},brow:{color:"#4a3a33",core:.85,rim:.92,whiten:.15},lip:{color:"#c47878",core:.8,rim:.9,whiten:.2},mouth_inside:{color:"#2b1517",core:.9,rim:.92,whiten:.08},tongue:{color:"#e88a8a",core:.85,rim:.9,whiten:.15}},halo:{width:.3},glow:{size:1.75}},Vt={seconds:2.4},Jt=({expression:e,model:n,height:t=1,loop:o,look:i,orbit:s=30,orbitSeconds:a=6,renderOrder:c})=>{const d=typeof e=="string"||"label"in e?Pe(e).hint:e,h=JSON.stringify("targets"in d?d.targets:{[d.target]:1}),p=ve(n,i,{base:Wt,renderOrder:c}),u=p.object,N=m.useMemo(()=>Xt(p.meshes.flatMap(({mesh:T,twins:f})=>[T,...f]),JSON.parse(h)),[p.meshes,h]),b=m.useMemo(()=>{u.updateMatrixWorld(!0);const T=[];for(const{mesh:I}of p.meshes){const C=I.geometry.getAttribute("position");for(let H=0;H<C.count;H+=3)T.push(new r.Vector3().fromBufferAttribute(C,H).applyMatrix4(I.matrixWorld))}const f=new r.Box3().setFromPoints(T).getCenter(new r.Vector3),M=Ee(T,f,r.MathUtils.degToRad(s))*1.08;return{offset:f.clone().negate(),span:M}},[u,p.meshes,s]),g=JSON.stringify(o??{}),y=m.useMemo(()=>({...Vt,...o}),[g,o==null?void 0:o.easing]);K.useFrame(({clock:T})=>{const{amount:f}=Ae(T.elapsedTime,y);N.apply(f),p.setStrength(f)});const l=p.look.glow;return w.jsx(ke,{height:t,span:b.span,orbit:s,orbitSeconds:a,glow:p.glowMaterial,glowSize:l?l.size:void 0,renderOrder:c,children:w.jsx("group",{position:b.offset,children:w.jsx("primitive",{object:u})})})},qt=(e,{faceIndex:n=0,active:t=!0,...o}={})=>{const i=m.useMemo(()=>({numFaces:n+1}),[n]),{node:s,ready:a}=Ke.useXRModel(_.XRModel.FACE_TRACKER,i,t),{camera:c}=K.useThree();m.useEffect(()=>{s==null||s.setCamera(c,n)},[c,n,s]);const d=F.useHoldTracker(F.specKey(e),o),h=m.useRef(null),p=m.useRef(ht.createFaceInfoTarget()),u=m.useRef(e);u.current=e;const N=m.useCallback(()=>h.current!==null,[]);return K.useFrame(()=>{if(!t)return;const b=a&&s?ht.getFaceInfo(s,n,p.current):null;h.current=b,d.step(!!b&&tt(b.blendshapes,u.current,b))}),{status:d.status,holdRef:d.holdRef,matchedRef:d.matchedRef,isInView:N,reset:d.reset,faceRef:h}},jn=Ne,Yt="Show your face to the camera",Gn=({expression:e,model:n,faceIndex:t,holdMs:o,graceMs:i,orbit:s,look:a,loop:c,onComplete:d,nudgeText:h=Yt,...p})=>{const u=qt(e,{faceIndex:t,holdMs:o,graceMs:i,onComplete:d});return w.jsx(He,{...p,nudgeText:h,detector:u,symbol:(N,b)=>w.jsx(Jt,{expression:e,model:n,height:N,orbit:s,look:a,loop:c,renderOrder:b})})},Fn=({active:e=!0,text:n,...t})=>e?w.jsx(ye.ScreenSpaceUI,{children:w.jsx(Gn,{...t,text:n??Pe(t.expression).label},F.specKey(t.expression))}):null,Kt={parts:{joints:{color:"#7c8aa0",core:.7,rim:.9,whiten:.35}},halo:{width:1.2},glow:{size:1.3}},Mt=new Set,$t={seconds:2.6},Qt=e=>{for(const[n,t]of[["left","Left"],["right","Right"]])if(e===`${t}Arm`||e===`${t}ForeArm`||e.startsWith(`${t}Hand`))return n;return null},Zt=e=>{for(const[n,t]of[["left","Left"],["right","Right"]])if(e===`${t}UpLeg`||e===`${t}Leg`||e===`${t}Foot`||e.startsWith(`${t}Toe`))return n;return null},en=({pose:e,model:n,poses:t,idleClip:o="idle",height:i=1,mirrored:s=!1,loop:a,look:c,highlight:d=!0,boneSide:h=Qt,legBoneSide:p=Zt,orbit:u=25,orbitSeconds:N=7,renderOrder:b})=>{const g=typeof e=="string"||"label"in e?x.resolveBodyPose(e).hint:e,y=g.clip,l=(g.arms??[]).join(),T=(g.legs??[]).join(),f=ve(n,c,{base:Kt,renderOrder:b}),M=f.object,I=m.useMemo(()=>zt(M,t.find(D=>D.name===o),t.find(D=>D.name===y)),[M,t,o,y]);m.useEffect(()=>{const D=t.map(R=>R.name);for(const[R,J]of[[o,"rest"],[y,"pose"]])D.includes(R)||Mt.has(R)||(Mt.add(R),console.warn(`[BodyPoseHint] the model has no "${R}" clip (the ${J==="rest"?"rest pose the hint loops from":"pose to show"}); the figure uses its bind pose there instead. Clips found: ${D.join(", ")||"none"}.`))},[t,o,y]),m.useEffect(()=>{const D=l?l.split(","):[],R=T?T.split(","):[];f.setHighlight(J=>{if(!d)return 0;const O=h(J.name);if(O&&D.includes(O))return 1;const L=p(J.name);return L&&R.includes(L)?1:0})},[f,l,T,d,h,p]);const C=m.useMemo(()=>{const D=[],R=new r.Matrix4;for(const L of[0,.6,1]){I.apply(L),M.updateMatrixWorld(!0),R.copy(M.matrixWorld).invert();for(const{mesh:k}of f.meshes){if(!(k instanceof r.SkinnedMesh))continue;k.skeleton.update();const A=k.geometry.getAttribute("position");for(let j=0;j<A.count;j+=12){const P=new r.Vector3().fromBufferAttribute(A,j);k.applyBoneTransform(j,P),D.push(P.applyMatrix4(k.matrixWorld).applyMatrix4(R))}}}I.apply(0);const J=new r.Box3().setFromPoints(D).getCenter(new r.Vector3),O=Ee(D,J,r.MathUtils.degToRad(u))*1.06;return{offset:J.clone().negate(),span:O}},[M,f.meshes,I,u]),H=JSON.stringify(a??{}),V=m.useMemo(()=>({...$t,...a}),[H,a==null?void 0:a.easing]);K.useFrame(({clock:D})=>{const{amount:R}=Ae(D.elapsedTime,V);I.apply(R),f.setStrength(R)});const $=f.look.glow;return w.jsx(ke,{height:i,span:C.span,mirrored:s,orbit:u,orbitSeconds:N,glow:f.glowMaterial,glowSize:$?$.size:void 0,renderOrder:b,children:w.jsx("group",{position:C.offset,children:w.jsx("primitive",{object:M})})})},tn=(e,{bodyIndex:n=0,limits:t,active:o=!0,...i}={})=>{const{node:s,ready:a}=Ke.useXRModel(_.XRModel.BODY_TRACKER,void 0,o),c=Se.useXRMirrored(),d=Se.useXRFeedAspect(),h=F.useHoldTracker(F.specKey(e),i),p=m.useRef(null),u=m.useRef(e);u.current=e;const N=JSON.stringify(t??null),b=m.useMemo(()=>t,[N]),g=m.useCallback(()=>{var l;const y=p.current;return y!=null&&y.upperBodyVisible?((l=x.resolveBodyPose(u.current))==null?void 0:l.view)!=="full"||y.lowerBodyVisible:!1},[]);return K.useFrame(()=>{var T;if(!o)return;const y=a&&s?s.getLandmarks2D(n):void 0,l=y&&y.length>=x.BODY_LANDMARK_COUNT?x.analyzeBodyShape(y,{mirrored:c,visibility:(T=s==null?void 0:s.getVisibility)==null?void 0:T.call(s,n),limits:b,aspect:d}):null;p.current=l,h.step(!!l&&l.upperBodyVisible&&x.matchBodyPose(l,u.current))}),{status:h.status,holdRef:h.holdRef,matchedRef:h.matchedRef,isInView:g,reset:h.reset,shapeRef:p}},zn=Ne,Xn=e=>{var n;return((n=x.resolveBodyPose(e))==null?void 0:n.view)==="full"},nn=2.1,on="Step back so your upper body is in view",sn="Step back so your whole body is in view",Wn=({pose:e,model:n,poses:t,idleClip:o,bodyIndex:i,holdMs:s,graceMs:a,limits:c,symbolAspect:d=nn,orbit:h,look:p,loop:u,boneSide:N,legBoneSide:b,onComplete:g,nudgeText:y,...l})=>{const T=Se.useXRMirrored(),f=tn(e,{bodyIndex:i,holdMs:s,graceMs:a,limits:c,onComplete:g});return w.jsx(He,{...l,nudgeText:y!==void 0?y:Xn(e)?sn:on,detector:f,symbolAspect:d,symbol:(M,I)=>w.jsx(en,{pose:e,model:n,poses:t,idleClip:o,height:M,mirrored:T,orbit:h,look:p,loop:u,boneSide:N,legBoneSide:b,renderOrder:I})})},Vn=({active:e=!0,text:n,...t})=>e?w.jsx(ye.ScreenSpaceUI,{children:w.jsx(Wn,{...t,text:n??x.resolveBodyPose(t.pose).label},F.specKey(t.pose))}):null;exports.GESTURE_HOLD_DEFAULT_MS=F.GESTURE_HOLD_DEFAULT_MS;exports.GESTURE_HOLD_GRACE_MS=F.GESTURE_HOLD_GRACE_MS;exports.createGestureHoldState=F.createGestureHoldState;exports.stepGestureHold=F.stepGestureHold;exports.useInstructionHold=F.useInstructionHold;exports.BODY_LANDMARK_COUNT=x.BODY_LANDMARK_COUNT;exports.BODY_LOWER_JOINTS=x.BODY_LOWER_JOINTS;exports.BODY_POSES=x.BODY_POSES;exports.BODY_POSE_JOINTS=x.BODY_POSE_JOINTS;exports.BODY_POSE_NAMES=x.BODY_POSE_NAMES;exports.BODY_SHAPE_LIMITS=x.BODY_SHAPE_LIMITS;exports.BODY_UPPER_JOINTS=x.BODY_UPPER_JOINTS;exports.analyzeBodyShape=x.analyzeBodyShape;exports.defineBodyPose=x.defineBodyPose;exports.matchBodyPose=x.matchBodyPose;exports.matchingBodyPoses=x.matchingBodyPoses;exports.resolveBodyPose=x.resolveBodyPose;exports.squareLandmarks=x.squareLandmarks;exports.BODY_HINT_LOOK=Kt;exports.BODY_HINT_LOOP=$t;exports.BODY_INSTRUCTION_FULL_NUDGE_TEXT=sn;exports.BODY_INSTRUCTION_NUDGE_TEXT=on;exports.BODY_INSTRUCTION_RENDER_ORDER=zn;exports.BODY_SYMBOL_ASPECT=nn;exports.BodyInstruction=Vn;exports.BodyPoseHint=en;exports.FACE_EXPRESSIONS=et;exports.FACE_EXPRESSION_NAMES=Ft;exports.FACE_HINT_LOOK=Wt;exports.FACE_HINT_LOOP=Vt;exports.FACE_INSTRUCTION_NUDGE_TEXT=Yt;exports.FACE_INSTRUCTION_RENDER_ORDER=jn;exports.FaceExpressionHint=Jt;exports.FaceInstruction=Fn;exports.GHOST_MAX_BONES=xe;exports.HAND_DIGITS=ie;exports.HAND_GESTURES=Qe;exports.HAND_GESTURE_NAMES=kt;exports.HAND_HINT_LOOK=Lt;exports.HAND_HINT_LOOP=qe;exports.HAND_INSTRUCTION_NUDGE_TEXT=Gt;exports.HAND_INSTRUCTION_RENDER_ORDER=Pn;exports.HAND_SHAPE_LIMITS=Je;exports.HINT_LOOP_HOLD=Pt;exports.HandGestureHint=Ut;exports.HandInstruction=Cn;exports.HintStage=ke;exports.INSTRUCTION_RENDER_ORDER=Ne;exports.INSTRUCTION_TEXT_STYLE=At;exports.Instruction=pn;exports.addHintTwins=xt;exports.analyzeHandShape=$e;exports.applyHandHintPose=Oe;exports.assignHintMaterials=Dt;exports.createClipBlend=zt;exports.createDepthPrepassMaterial=St;exports.createGhostMaterial=It;exports.createGlowMaterial=Et;exports.createHaloMaterial=Ot;exports.createHintMatcap=wt;exports.createMorphBlend=Xt;exports.defineFaceExpression=Ln;exports.defineHandGesture=Tn;exports.disposeGlowMaterial=Ht;exports.ease=ne;exports.hasVertexColors=Rt;exports.matchFaceExpression=tt;exports.matchHandGesture=Ze;exports.matchingFaceExpressions=Un;exports.matchingHandGestures=yn;exports.mergeHintLook=Ct;exports.mixamoBoneSide=Qt;exports.mixamoLegBoneSide=Zt;exports.orbitSpan=Ee;exports.readClipQuaternions=Ve;exports.readHandClipPose=vt;exports.resolveFaceExpression=Pe;exports.resolveHandGesture=Re;exports.sampleHintLoop=Ae;exports.sampleHintOrbit=Bt;exports.useBodyPose=tn;exports.useFaceExpression=qt;exports.useGhostModel=ve;exports.useHandGesture=jt;