@vincentt-xr/sdk 2.0.0-alpha.8 → 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.
- package/GROUNDING.md +4643 -170
- package/README.md +1 -0
- package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
- package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
- package/dist/DebuggerUI-7ngnJsBe.js +275 -0
- package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
- package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
- package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
- package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
- package/dist/FaceSurface-DmP9AEeC.js +27 -0
- package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
- package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
- package/dist/SkeletonUtils-C2r90MtN.js +21 -0
- package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
- package/dist/TextLabel-XE0rQSDn.cjs +2 -0
- package/dist/TextLabel-c9BCucOI.js +961 -0
- package/dist/assets/gltfLoader.d.ts +16 -0
- package/dist/assets/loaders.d.ts +16 -1
- package/dist/body-pose/index.d.ts +521 -0
- package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
- package/dist/body-trigger/frame.d.ts +88 -0
- package/dist/body-trigger/index.d.ts +6 -0
- package/dist/body-trigger/moves.d.ts +235 -0
- package/dist/body-trigger/trigger.d.ts +75 -0
- package/dist/calibration/calibration.d.ts +11 -6
- package/dist/canonicalFace-BHwyCx1c.js +9 -0
- package/dist/canonicalFace-C83I225R.cjs +1 -0
- package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
- package/dist/components/BodyInstruction/index.d.ts +69 -0
- package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
- package/dist/components/BodyTracker/index.d.ts +10 -2
- package/dist/components/BodyTrigger/index.d.ts +49 -0
- package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
- package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
- package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
- package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
- package/dist/components/FaceAtlas/constants.d.ts +8 -0
- package/dist/components/FaceAtlas/index.d.ts +7 -0
- package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
- package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
- package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
- package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
- package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
- package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
- package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
- package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
- package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
- package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
- package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
- package/dist/components/FaceCharacter/index.d.ts +18 -0
- package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
- package/dist/components/FaceInset/FaceInset.d.ts +68 -0
- package/dist/components/FaceInset/frame.d.ts +94 -0
- package/dist/components/FaceInset/index.d.ts +6 -0
- package/dist/components/FaceInset/material.d.ts +40 -0
- package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
- package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
- package/dist/components/FaceInstruction/index.d.ts +56 -0
- package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
- package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
- package/dist/components/FaceLiquify/debug.d.ts +37 -0
- package/dist/components/FaceLiquify/frame.d.ts +55 -0
- package/dist/components/FaceLiquify/index.d.ts +10 -0
- package/dist/components/FaceLiquify/material.d.ts +39 -0
- package/dist/components/FaceLiquify/pass.d.ts +49 -0
- package/dist/components/FaceLiquify/presence.d.ts +25 -0
- package/dist/components/FaceLiquify/presets.d.ts +82 -0
- package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
- package/dist/components/FaceLiquify/target.d.ts +85 -0
- package/dist/components/FaceLiquify/warp.d.ts +72 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
- package/dist/components/FaceMesh/index.d.ts +1 -1
- package/dist/components/FaceRetouch/Background.d.ts +3 -1
- package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
- package/dist/components/FaceRetouch/renderState.d.ts +19 -0
- package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
- package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
- package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
- package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
- package/dist/components/FaceSwap/index.d.ts +13 -0
- package/dist/components/FaceSwap/settings.d.ts +300 -0
- package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
- package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
- package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
- package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
- package/dist/components/FaceWarp3D/index.d.ts +2 -3
- package/dist/components/Faceless/Faceless.d.ts +51 -0
- package/dist/components/Faceless/index.d.ts +2 -0
- package/dist/components/HairLock/HairLock.d.ts +39 -0
- package/dist/components/HairLock/index.d.ts +2 -0
- package/dist/components/HairLock/lockGeometry.d.ts +15 -0
- package/dist/components/HandCutout/index.d.ts +35 -0
- package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
- package/dist/components/HandInstruction/index.d.ts +74 -0
- package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
- package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
- package/dist/components/HandRig/HandAttachment.d.ts +34 -0
- package/dist/components/HandRig/HandOccluder.d.ts +55 -0
- package/dist/components/HandRig/HandTattoo.d.ts +61 -0
- package/dist/components/HandRig/WristAttachment.d.ts +34 -0
- package/dist/components/HandRig/index.d.ts +101 -0
- package/dist/components/HandRig/useArmMask.d.ts +29 -0
- package/dist/components/HandRig/wristSolve.d.ts +69 -0
- package/dist/components/HandTouch/HandTouch.d.ts +62 -0
- package/dist/components/HandTouch/Touchable.d.ts +36 -0
- package/dist/components/HandTouch/index.d.ts +2 -0
- package/dist/components/HeadBinding/index.d.ts +14 -0
- package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
- package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
- package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
- package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
- package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
- package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
- package/dist/components/HeadOccluder/index.d.ts +57 -3
- package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
- package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
- package/dist/components/Instruction/HintStage.d.ts +29 -0
- package/dist/components/Instruction/InstructionCue.d.ts +126 -0
- package/dist/components/Instruction/gestureHold.d.ts +20 -0
- package/dist/components/Instruction/ghost.d.ts +129 -0
- package/dist/components/Instruction/hintBlend.d.ts +19 -0
- package/dist/components/Instruction/hintLook.d.ts +81 -0
- package/dist/components/Instruction/hintLoop.d.ts +36 -0
- package/dist/components/Instruction/index.d.ts +41 -0
- package/dist/components/Instruction/useGhostModel.d.ts +33 -0
- package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
- package/dist/components/LipEffect/LipEffect.d.ts +22 -2
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
- package/dist/components/LipEffect/LipEffects.d.ts +5 -2
- package/dist/components/LipEffect/defaults.d.ts +21 -2
- package/dist/components/LipEffect/index.d.ts +1 -1
- package/dist/components/LipEffect/lipShading.d.ts +73 -0
- package/dist/components/LipEffect/settings.d.ts +117 -13
- package/dist/components/LipEffect/shader.d.ts +39 -0
- package/dist/components/LipEffect/types.d.ts +82 -10
- package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
- package/dist/components/LipEffect/uvGuide.d.ts +31 -16
- package/dist/components/Makeup/Blush.d.ts +18 -0
- package/dist/components/Makeup/Brows.d.ts +20 -0
- package/dist/components/Makeup/Contour.d.ts +17 -0
- package/dist/components/Makeup/Eyeliner.d.ts +20 -0
- package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
- package/dist/components/Makeup/Highlighter.d.ts +18 -0
- package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
- package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
- package/dist/components/Makeup/constants.d.ts +44 -0
- package/dist/components/Makeup/design.d.ts +106 -0
- package/dist/components/Makeup/designSamples.d.ts +42 -0
- package/dist/components/Makeup/eyes.d.ts +114 -0
- package/dist/components/Makeup/fields.d.ts +10 -0
- package/dist/components/Makeup/geometry.d.ts +106 -0
- package/dist/components/Makeup/index.d.ts +26 -0
- package/dist/components/Makeup/looks.d.ts +28 -0
- package/dist/components/Makeup/material.d.ts +239 -0
- package/dist/components/Makeup/settings.d.ts +54 -0
- package/dist/components/Makeup/shades.d.ts +143 -0
- package/dist/components/Makeup/shapes.d.ts +27 -0
- package/dist/components/Makeup/skinTone.d.ts +135 -0
- package/dist/components/Makeup/types.d.ts +110 -0
- package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
- package/dist/components/Necklace/Necklace.d.ts +44 -0
- package/dist/components/Necklace/index.d.ts +1 -0
- package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
- package/dist/components/ParticleEmitter/index.d.ts +1 -0
- package/dist/components/ShoulderOccluder/index.d.ts +43 -0
- package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
- package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
- package/dist/components/SpringSwing/index.d.ts +1 -0
- package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/config/index.d.ts +0 -1
- package/dist/context-DTxSQvp4.js +13 -0
- package/dist/context-hA0Rb2Xa.cjs +1 -0
- package/dist/contexts-BH7PdKFS.cjs +1 -0
- package/dist/contexts-jak8-tND.js +667 -0
- package/dist/coordinates/index.d.ts +2 -0
- package/dist/coordinates/side.d.ts +40 -0
- package/dist/debug-ui/default-setting.cjs +2 -2
- package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
- package/dist/debug-ui/index.d.ts +4 -3
- package/dist/debug-ui/media-source/index.d.ts +1 -1
- package/dist/debug-ui/media-source/session.d.ts +30 -2
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
- package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
- package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
- package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
- package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
- package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
- package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
- package/dist/debug-ui/settings-panel/index.d.ts +6 -1
- package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
- package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +2250 -2472
- package/dist/entries/all.d.ts +3 -1
- package/dist/entries/core.d.ts +3 -2
- package/dist/entries/face-effects.d.ts +114 -8
- package/dist/entries/instructions.d.ts +48 -0
- package/dist/entries/internal.d.ts +2 -1
- package/dist/entries/low-level.d.ts +28 -1
- package/dist/entries/particles.d.ts +11 -0
- package/dist/entries/tracking.d.ts +37 -2
- package/dist/face-atlas/attributes.d.ts +30 -0
- package/dist/face-atlas/eyes.d.ts +272 -0
- package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
- package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
- package/dist/face-atlas/glsl/common.d.ts +55 -0
- package/dist/face-atlas/glsl/design.d.ts +49 -0
- package/dist/face-atlas/glsl/eyes.d.ts +73 -0
- package/dist/face-atlas/glsl/finish.d.ts +24 -0
- package/dist/face-atlas/glsl/format.d.ts +4 -0
- package/dist/face-atlas/glsl/index.d.ts +59 -0
- package/dist/face-atlas/glsl/shading.d.ts +15 -0
- package/dist/face-atlas/glsl/shapes.d.ts +66 -0
- package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
- package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
- package/dist/face-atlas/guide.d.ts +51 -0
- package/dist/face-atlas/index.d.ts +25 -0
- package/dist/face-atlas/lead.d.ts +117 -0
- package/dist/face-atlas/madeUpCamera.d.ts +125 -0
- package/dist/face-atlas/masks.d.ts +53 -0
- package/dist/face-atlas/obj.d.ts +69 -0
- package/dist/face-atlas/polylines.d.ts +63 -0
- package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
- package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
- package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
- package/dist/face-atlas/probe/constants.d.ts +137 -0
- package/dist/face-atlas/probe/glsl.d.ts +43 -0
- package/dist/face-atlas/probe/lightFit.d.ts +108 -0
- package/dist/face-atlas/probe/schedule.d.ts +44 -0
- package/dist/face-atlas/probe/selfTest.d.ts +87 -0
- package/dist/face-atlas/probe/stats.d.ts +143 -0
- package/dist/face-atlas/probe/targets.d.ts +70 -0
- package/dist/face-atlas/probe/unwrap.d.ts +76 -0
- package/dist/face-atlas/quality.d.ts +28 -0
- package/dist/face-atlas/regions.d.ts +31 -0
- package/dist/face-atlas/registry.d.ts +252 -0
- package/dist/face-atlas/renderState.d.ts +86 -0
- package/dist/face-atlas/selfOcclusion.d.ts +62 -0
- package/dist/face-atlas/shading.d.ts +406 -0
- package/dist/face-atlas/shapes.d.ts +86 -0
- package/dist/face-atlas/sides.d.ts +41 -0
- package/dist/face-atlas/skinMask.d.ts +35 -0
- package/dist/face-atlas/surface.d.ts +155 -0
- package/dist/face-atlas/topology.d.ts +44 -0
- package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
- package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
- package/dist/face-character/bindFaceModel.d.ts +106 -0
- package/dist/face-character/canonicalFace.d.ts +17 -0
- package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
- package/dist/face-character/canonicalFacePositions.d.ts +7 -0
- package/dist/face-character/driveFaceModel.d.ts +57 -0
- package/dist/face-character/expressionOutputs.d.ts +45 -0
- package/dist/face-character/faceExpressions.d.ts +104 -0
- package/dist/face-character/faceImageLandmarker.d.ts +93 -0
- package/dist/face-character/faceMeshBinding.d.ts +62 -0
- package/dist/face-character/faceMorph.d.ts +77 -0
- package/dist/face-character/faceMorphs.d.ts +46 -0
- package/dist/face-character/facePhoto.d.ts +138 -0
- package/dist/face-character/facePiercings.d.ts +116 -0
- package/dist/face-character/facePin.d.ts +131 -0
- package/dist/face-character/faceReprojection.d.ts +273 -0
- package/dist/face-character/faceReprojector.d.ts +171 -0
- package/dist/face-character/faceRig.d.ts +176 -0
- package/dist/face-character/faceSwapPresence.d.ts +85 -0
- package/dist/face-character/faceTexture.d.ts +169 -0
- package/dist/face-character/faceTextureBaker.d.ts +86 -0
- package/dist/face-character/faceTextureGuide.d.ts +106 -0
- package/dist/face-character/faceTextureStats.d.ts +298 -0
- package/dist/face-character/faceTransfer.d.ts +396 -0
- package/dist/face-character/faceTransferGeometry.d.ts +109 -0
- package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
- package/dist/face-character/faceWarp3D.d.ts +101 -0
- package/dist/face-character/faceless.d.ts +79 -0
- package/dist/face-character/featureWarp.d.ts +28 -0
- package/dist/face-character/liveFaceRegistry.d.ts +370 -0
- package/dist/face-character/liveValue.d.ts +12 -0
- package/dist/face-character/memo.d.ts +15 -0
- package/dist/face-effects.cjs +2252 -83
- package/dist/face-effects.js +14234 -1231
- package/dist/face-expression/index.d.ts +182 -0
- package/dist/face-info/landmarks.d.ts +17 -3
- package/dist/face-info/types.d.ts +20 -3
- package/dist/gestures/definitions.d.ts +15 -2
- package/dist/gestures/index.d.ts +1 -1
- package/dist/gestures/measures.d.ts +21 -8
- package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
- package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
- package/dist/hand/armFit.d.ts +46 -0
- package/dist/hand/armMask.d.ts +178 -0
- package/dist/hand/handCutout.d.ts +23 -0
- package/dist/hand/handCutoutRegistry.d.ts +7 -0
- package/dist/hand/handGestures.d.ts +524 -0
- package/dist/hand/handPose.d.ts +98 -0
- package/dist/hand/handRigSolver.d.ts +159 -0
- package/dist/hand/handTattoo.d.ts +81 -0
- package/dist/hand/handTouch.d.ts +240 -0
- package/dist/hand/wrist.d.ts +44 -0
- package/dist/hand/wristFilter.d.ts +44 -0
- package/dist/hooks/selectors.d.ts +8 -0
- package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
- package/dist/hooks/useTrackerContext.d.ts +6 -0
- package/dist/index-B1_TzJaI.js +1104 -0
- package/dist/index-BavF06C6.js +190 -0
- package/dist/index-BfFmpddl.cjs +21 -0
- package/dist/index-BuBzneeW.cjs +46 -0
- package/dist/index-CGsQWodV.cjs +1 -0
- package/dist/index-CIe7eCMH.js +3200 -0
- package/dist/index-CfSF8LXa.cjs +1 -0
- package/dist/index-D5GTzOzD.cjs +1 -0
- package/dist/index-DBhQzvVa.js +314 -0
- package/dist/index-DE17y0ZI.cjs +1 -0
- package/dist/index-JII7huPk.js +442 -0
- package/dist/index-tpCr9CLj.cjs +1 -0
- package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
- package/dist/index-zGaqrz_K.js +188 -0
- package/dist/instructions.cjs +30 -0
- package/dist/instructions.js +1507 -0
- package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
- package/dist/internal-Cjinca64.cjs +1 -0
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +15 -10
- package/dist/iris/compute.d.ts +7 -5
- package/dist/iris/types.d.ts +6 -4
- package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
- package/dist/landmarks-BlUqf5MZ.cjs +1 -0
- package/dist/landmarks-bftdwq6Z.js +76 -0
- package/dist/loaders-BGAUACsd.js +363 -0
- package/dist/loaders-BJ1_QCHt.cjs +1 -0
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +666 -602
- package/dist/main.cjs +1 -1
- package/dist/main.js +866 -1182
- package/dist/models/Body/index.d.ts +2 -0
- package/dist/models/Face/constants.d.ts +8 -0
- package/dist/models/Face/index.d.ts +3 -11
- package/dist/models/Face/rotation.d.ts +18 -3
- package/dist/models/Hand/HandTracking.d.ts +17 -1
- package/dist/models/Segmentation/index.d.ts +2 -0
- package/dist/models/nodeSource.d.ts +9 -0
- package/dist/particles/emission.d.ts +24 -0
- package/dist/particles/eyes.d.ts +24 -0
- package/dist/particles/glsl.d.ts +14 -0
- package/dist/particles/index.d.ts +10 -0
- package/dist/particles/motion.d.ts +42 -0
- package/dist/particles/presets.d.ts +12 -0
- package/dist/particles/ring.d.ts +58 -0
- package/dist/particles/selfTest.d.ts +53 -0
- package/dist/particles/settings.d.ts +127 -0
- package/dist/particles/shapes.d.ts +29 -0
- package/dist/particles/spawner.d.ts +60 -0
- package/dist/particles/system.d.ts +64 -0
- package/dist/particles.cjs +122 -0
- package/dist/particles.js +774 -0
- package/dist/product.cjs +1 -1
- package/dist/product.js +29 -29
- package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
- package/dist/providers-DHsrhDI2.cjs +62 -0
- package/dist/render/renderPasses.d.ts +8 -0
- package/dist/render/sceneBeforeRender.d.ts +12 -0
- package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
- package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
- package/dist/renderPasses-B6l8IpJv.js +1290 -0
- package/dist/renderPasses-dqmkft4P.cjs +158 -0
- package/dist/renderState-CJNmj5jz.js +39 -0
- package/dist/renderState-apSfg4eR.cjs +1 -0
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/segmentation-Cb3ouK6Z.js +1758 -0
- package/dist/segmentation-D9pYO6aR.cjs +1 -0
- package/dist/segmentation2d/types.d.ts +6 -0
- package/dist/select-Ck5LGz-J.cjs +1 -0
- package/dist/select-pYRo_win.js +233 -0
- package/dist/selectors-C4X71aoD.cjs +1 -0
- package/dist/selectors-DmNaKIwE.js +196 -0
- package/dist/session-BrH8G7iJ.cjs +31 -0
- package/dist/session-DgA_z6O1.js +418 -0
- package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
- package/dist/settings-C63FMBlF.cjs +1 -0
- package/dist/similarityFit-BFqHND2e.cjs +1 -0
- package/dist/similarityFit-Bbz-R8AY.js +91 -0
- package/dist/spring/index.d.ts +2 -0
- package/dist/spring/spring.d.ts +69 -0
- package/dist/spring/swing.d.ts +54 -0
- package/dist/tracking.cjs +10 -1
- package/dist/tracking.js +1002 -855
- package/dist/trigger-D0Pm9noT.cjs +49 -0
- package/dist/trigger-IQeys0oS.js +2128 -0
- package/dist/types/face.d.ts +20 -1
- package/dist/types/hand-tracking.d.ts +9 -0
- package/dist/types/nodes.d.ts +20 -1
- package/dist/types/segmentation.d.ts +5 -0
- package/dist/updateThrottle-BseecYag.js +4 -0
- package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
- package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
- package/dist/useFaceInfo-J4x7LsqL.js +76 -0
- package/dist/useFaceResultReader-BvEo5REG.js +61 -0
- package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
- package/dist/useInstructionHold-DOu-RpCM.js +53 -0
- package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
- package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
- package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
- package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
- package/dist/utils/headOccluderFit.d.ts +42 -0
- package/dist/utils/integrity.d.ts +17 -0
- package/dist/utils/resolveNumFaces.d.ts +13 -0
- package/dist/utils/shoulderOccluderFit.d.ts +38 -0
- package/dist/utils/similarityFit.d.ts +23 -0
- package/dist/uv-BMFt19bg.cjs +1 -0
- package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
- package/docs/SDK_DOCUMENTATION.md +1 -2
- package/docs/api/adaptive-quality.mdx +1 -1
- package/docs/api/body-instructions.mdx +285 -0
- package/docs/api/body-triggers.mdx +234 -0
- package/docs/api/camera-permission.mdx +1 -1
- package/docs/api/coordinate-spaces.mdx +7 -4
- package/docs/api/cross-camera.mdx +3 -2
- package/docs/api/debug-ui-scene-editor.mdx +23 -2
- package/docs/api/external-face-mesh.mdx +231 -0
- package/docs/api/face-actions.mdx +20 -16
- package/docs/api/face-attribute-expression.mdx +1 -1
- package/docs/api/face-binding-anchors.mdx +4 -2
- package/docs/api/face-character.mdx +157 -0
- package/docs/api/face-effects.mdx +3 -0
- package/docs/api/face-expression-controller.mdx +153 -0
- package/docs/api/face-info.mdx +17 -11
- package/docs/api/face-inset.mdx +204 -0
- package/docs/api/face-instructions.mdx +183 -0
- package/docs/api/face-liquify.mdx +196 -0
- package/docs/api/face-mesh.mdx +4 -7
- package/docs/api/face-morph.mdx +117 -0
- package/docs/api/face-painting.mdx +7 -0
- package/docs/api/face-reprojection.mdx +154 -0
- package/docs/api/face-retouching.mdx +18 -10
- package/docs/api/face-swap.mdx +350 -0
- package/docs/api/face-warp-3d.mdx +166 -0
- package/docs/api/faceless.mdx +143 -0
- package/docs/api/gestures.mdx +68 -32
- package/docs/api/hair.mdx +97 -0
- package/docs/api/hand-instructions.mdx +222 -0
- package/docs/api/hand-rig.mdx +535 -0
- package/docs/api/hand-touch.mdx +162 -0
- package/docs/api/head-occluder.mdx +563 -0
- package/docs/api/holistic-tracker.mdx +6 -1
- package/docs/api/instructions.mdx +323 -0
- package/docs/api/iris-tracking.mdx +24 -19
- package/docs/api/made-up-camera.mdx +131 -0
- package/docs/api/makeup-skin-tone.mdx +135 -0
- package/docs/api/makeup.mdx +353 -0
- package/docs/api/multi-subject.mdx +4 -1
- package/docs/api/particles.mdx +155 -0
- package/docs/api/person-cutout.mdx +1 -1
- package/docs/api/pin-to-face-mesh.mdx +274 -0
- package/docs/api/product-ar.mdx +5 -2
- package/docs/api/segmentation-overlay.mdx +1 -1
- package/docs/docs.json +29 -1
- package/docs/examples/lip-shaders.mdx +82 -33
- package/docs/guides/face-atlas-template.svg +1 -0
- package/docs/guides/face-atlas-textures.mdx +186 -0
- package/docs/guides/face-texture-template.svg +1 -0
- package/docs/guides/harness-debug-ui.mdx +4 -4
- package/docs/guides/lip-effect-textures.mdx +178 -102
- package/docs/guides/lip-uv-template.png +0 -0
- package/docs/guides/lip-uv-template.svg +1 -1
- package/docs/guides/makeup-design-textures.mdx +109 -0
- package/docs/introduction.mdx +1 -2
- package/package.json +11 -1
- package/dist/DebuggerUI-C-ldiozL.js +0 -269
- package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
- package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
- package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
- package/dist/FaceRetouch-C7h7x9kd.js +0 -683
- package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
- package/dist/GLTFLoader-C5q63sKO.js +0 -1633
- package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
- package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
- package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
- package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
- package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
- package/dist/components/FaceWarp3D/warp.d.ts +0 -13
- package/dist/contexts-CO0sd4JQ.cjs +0 -1
- package/dist/contexts-FzlnnMYD.js +0 -669
- package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
- package/dist/getFaceInfo-BkZfaQs-.js +0 -118
- package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
- package/dist/index--RgGzZ6X.cjs +0 -47
- package/dist/index-CHVbH0hz.js +0 -214
- package/dist/index-CeVkgsag.cjs +0 -1
- package/dist/index-CnGox6Xr.js +0 -3054
- package/dist/index-DKBAh6hV.cjs +0 -1
- package/dist/index-DsZwTfG0.cjs +0 -1
- package/dist/index-Dw6tj2Mi.js +0 -144
- package/dist/index-OCPjOaeP.cjs +0 -1
- package/dist/index-s9pF4zkG.js +0 -2053
- package/dist/internal-BYza1h8_.cjs +0 -1
- package/dist/measures-9dQPdw96.js +0 -154
- package/dist/measures-KfJzpvod.cjs +0 -1
- package/dist/providers-YNwkmNeK.cjs +0 -62
- package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
- package/dist/screenTransform-BenfCtZt.js +0 -44
- package/dist/screenTransform-BiXdpVf0.cjs +0 -1
- package/dist/segmentation-9PhSvc-R.cjs +0 -1
- package/dist/segmentation-CeOTKemr.js +0 -5
- package/dist/selectors-C5G1PMYL.js +0 -195
- package/dist/selectors-Du_PsVnW.cjs +0 -1
- package/dist/session-BBr0yN8h.cjs +0 -31
- package/dist/session-Cy0m7l7-.js +0 -363
- package/dist/settings-DRR7-snV.cjs +0 -1
- package/dist/useFaceInfo-Blf7FCu3.js +0 -303
- package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* Spring bones (pure): a mass that hangs from a pivot along a rest direction
|
|
4
|
+
* and swings when the pivot moves or turns, then settles. A `SpringChain`
|
|
5
|
+
* hangs masses one below another (a lock of hair, a tassel); jewellery uses
|
|
6
|
+
* one joint. Everything is in world space; the rest direction comes from the
|
|
7
|
+
* thing it hangs from (the head's or torso's own down), so it swings only
|
|
8
|
+
* from motion.
|
|
9
|
+
*
|
|
10
|
+
* Each mass is pulled toward its rest point (`pivot + rest × length`) by a
|
|
11
|
+
* spring of `frequency` and `damping` relative to how that point moves, then
|
|
12
|
+
* kept at `length` from its pivot and within `maxAngle` of rest. Frames are
|
|
13
|
+
* split into steps of at most `SPRING_MAX_SUBSTEP`, so the swing is the same
|
|
14
|
+
* at any frame rate.
|
|
15
|
+
*/
|
|
16
|
+
export type SpringSettings = {
|
|
17
|
+
/** Swings per second when let go (Hz): lower is slower and floppier. */
|
|
18
|
+
frequency: number;
|
|
19
|
+
/** 0..1: how fast a swing dies down (0: never; 1: no overshoot). */
|
|
20
|
+
damping: number;
|
|
21
|
+
/** The largest swing from rest, degrees. */
|
|
22
|
+
maxAngle: number;
|
|
23
|
+
};
|
|
24
|
+
/** Gentle, like real jewellery: swings with turns and nods, settles within about a second. */
|
|
25
|
+
export declare const SPRING_DEFAULTS: Readonly<SpringSettings>;
|
|
26
|
+
export declare const SPRING_SETTINGS_RANGES: {
|
|
27
|
+
readonly frequency: readonly [0.2, 10];
|
|
28
|
+
readonly damping: readonly [0, 1];
|
|
29
|
+
readonly maxAngle: readonly [1, 175];
|
|
30
|
+
};
|
|
31
|
+
/** Any partial settings → complete and clamped (non-finite values fall back to the defaults). */
|
|
32
|
+
export declare const resolveSpringSettings: (input?: Partial<SpringSettings>) => SpringSettings;
|
|
33
|
+
/** The longest physics step (s): longer frames are split. */
|
|
34
|
+
export declare const SPRING_MAX_SUBSTEP: number;
|
|
35
|
+
/** A frame longer than this (s), or a jump of the rest point by more than `SPRING_MAX_JUMP` lengths, snaps to rest. */
|
|
36
|
+
export declare const SPRING_MAX_FRAME = 0.25;
|
|
37
|
+
export declare const SPRING_MAX_JUMP = 20;
|
|
38
|
+
/** One mass on a pivot. Call `step` once a frame; `reset` (or the first step) starts it at rest. */
|
|
39
|
+
export declare class SpringJoint {
|
|
40
|
+
/** The mass, world space. */
|
|
41
|
+
readonly position: THREE.Vector3;
|
|
42
|
+
readonly velocity: THREE.Vector3;
|
|
43
|
+
private ready;
|
|
44
|
+
private readonly lastPivot;
|
|
45
|
+
private readonly lastRest;
|
|
46
|
+
private lastLength;
|
|
47
|
+
private readonly lastTarget;
|
|
48
|
+
/** Starts at rest below `pivot` (`rest` a unit direction, `length` in world units). */
|
|
49
|
+
reset(pivot: THREE.Vector3, rest: THREE.Vector3, length: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Moves the mass on by `dt` seconds, the pivot having gone from its last
|
|
52
|
+
* pose to `pivot` / `rest` / `length` (world). Writes the unit direction
|
|
53
|
+
* from the pivot to the mass into `out` and returns it.
|
|
54
|
+
*/
|
|
55
|
+
step(pivot: THREE.Vector3, rest: THREE.Vector3, length: number, dt: number, settings: SpringSettings, out?: THREE.Vector3): THREE.Vector3;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Masses hung one below another: joint 0 from the root pivot, each next
|
|
59
|
+
* joint from the mass before it. `rests` and `lengths` per joint (world).
|
|
60
|
+
*/
|
|
61
|
+
export declare class SpringChain {
|
|
62
|
+
readonly joints: SpringJoint[];
|
|
63
|
+
private readonly pivot;
|
|
64
|
+
constructor(count: number);
|
|
65
|
+
/** Steps every joint; writes each joint's unit direction into `out` (one per joint). */
|
|
66
|
+
step(root: THREE.Vector3, rests: readonly THREE.Vector3[], lengths: readonly number[], dt: number, settings: SpringSettings, out: THREE.Vector3[]): THREE.Vector3[];
|
|
67
|
+
/** Every joint at rest, hanging from `root`. */
|
|
68
|
+
reset(root: THREE.Vector3, rests: readonly THREE.Vector3[], lengths: readonly number[]): void;
|
|
69
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SpringSettings } from './spring';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/**
|
|
4
|
+
* A swing on a scene object (no React): `inner` (a child of `outer`) turns
|
|
5
|
+
* about `outer`'s origin so whatever is in it hangs along `outer`'s own −Y
|
|
6
|
+
* and swings as `outer` moves and turns. Call `update` after the world
|
|
7
|
+
* matrices are up to date (the scene's before-render hook), so the swing
|
|
8
|
+
* follows the pose the object is drawn at.
|
|
9
|
+
*/
|
|
10
|
+
export type SpringSwingOptions = Partial<SpringSettings> & {
|
|
11
|
+
/** How far below the pivot the weight sits, in the pivot's own units (cm in a head or torso frame). */
|
|
12
|
+
length?: number;
|
|
13
|
+
};
|
|
14
|
+
/** The default weight distance (cm): a short drop earring or a pendant. */
|
|
15
|
+
export declare const SPRING_SWING_LENGTH = 1.5;
|
|
16
|
+
export declare class SpringSwingDriver {
|
|
17
|
+
readonly outer: THREE.Object3D;
|
|
18
|
+
readonly inner: THREE.Object3D;
|
|
19
|
+
private settings;
|
|
20
|
+
private length;
|
|
21
|
+
private readonly joint;
|
|
22
|
+
private lastTime;
|
|
23
|
+
private readonly pivot;
|
|
24
|
+
private readonly rest;
|
|
25
|
+
private readonly direction;
|
|
26
|
+
private readonly linear;
|
|
27
|
+
constructor(outer: THREE.Object3D, inner: THREE.Object3D, options?: SpringSwingOptions);
|
|
28
|
+
setOptions({ length, ...settings }: SpringSwingOptions): void;
|
|
29
|
+
/**
|
|
30
|
+
* One frame at `time` (s): steps the swing from `outer`'s current world
|
|
31
|
+
* pose and turns `inner`. While `outer` (or a parent) is hidden it rests
|
|
32
|
+
* and starts again at rest when shown. A second call at the same time
|
|
33
|
+
* changes nothing.
|
|
34
|
+
*/
|
|
35
|
+
update(time: number): void;
|
|
36
|
+
/** Back to rest; the next update starts again from there. */
|
|
37
|
+
reset(): void;
|
|
38
|
+
private toRest;
|
|
39
|
+
}
|
|
40
|
+
/** A swing pivot inserted above a node: rotate `inner`, its contents swing about `outer`'s origin. */
|
|
41
|
+
export type SwingPivot = {
|
|
42
|
+
node: THREE.Object3D;
|
|
43
|
+
outer: THREE.Group;
|
|
44
|
+
inner: THREE.Group;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Finds the nodes under `root` whose name contains one of `names`
|
|
48
|
+
* (case-insensitive; a matching node's own descendants are left alone) and
|
|
49
|
+
* puts a pivot above each, at the node's origin: an `outer` group in the
|
|
50
|
+
* node's place and an `inner` group holding the node. Turning `inner` swings
|
|
51
|
+
* the node about its origin (a pendant's bail). Changes `root` in place:
|
|
52
|
+
* call it on your own clone.
|
|
53
|
+
*/
|
|
54
|
+
export declare const insertSwingPivots: (root: THREE.Object3D, names: readonly string[]) => SwingPivot[];
|
package/dist/tracking.cjs
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
"use strict";var lt=Object.create;var Fe=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var ft=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var mt=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ht(r))!Tt.call(e,s)&&s!==t&&Fe(e,s,{get:()=>r[s],enumerable:!(n=dt(r,s))||n.enumerable});return e};var De=(e,r,t)=>(t=e!=null?lt(ft(e)):{},mt(r||!e||!e.__esModule?Fe(t,"default",{value:e,enumerable:!0}):t,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("./index-OCPjOaeP.cjs"),O=require("react/jsx-runtime"),L=require("@react-three/fiber"),o=require("react"),E=require("./index-CeVkgsag.cjs"),Y=require("./selectors-Du_PsVnW.cjs"),re=require("./segmentation-9PhSvc-R.cjs"),q=require("./index-DsZwTfG0.cjs"),C=require("./detector-ijypGtse.cjs"),y=require("./getFaceInfo-ahPxQFGu.cjs"),A=require("./measures-KfJzpvod.cjs"),F=require("./useFaceInfo-C5mO8NQY.cjs"),Pe=require("./SegmentationOverlay-aWVod8Kl.cjs"),St=require("./drawNormalizedCrop-B-7zU-Xw.cjs"),N=require("./settings-DRR7-snV.cjs"),z=require("./providers-YNwkmNeK.cjs"),Ee=require("./landmarkMask-u7es2k4X.cjs"),He={"hand.wrist":0,"hand.thumbTip":4,"hand.indexTip":8,"hand.middleTip":12,"hand.ringTip":16,"hand.pinkyTip":20,"hand.indexBase":5,"hand.middleBase":9,"hand.ringBase":13,"hand.pinkyBase":17};function Be(e,r,t=0){var s;const n=(s=e==null?void 0:e.hands)!=null&&s.length?e.hands:e!=null&&e.coordinates?[{coordinates:e.coordinates,gesture:e.gesture,handedness:e.handedness}]:[];if(n.length){if(r){const i=n.find(u=>u.handedness===r);if(i)return i}return n[t]??n[0]}}const Rt=({children:e,hand:r,handIndex:t=0,targetFps:n,active:s=!0})=>{const i=o.useRef(null),u=o.useMemo(()=>n===void 0?void 0:{targetFps:n},[n]),{ready:a,node:l}=I.useXRModel(E.XRModel.HAND_TRACKER,u,s),{camera:c}=L.useThree(),f=o.useRef(c);f.current!==c&&(f.current=c);const h=o.useRef(null);L.useFrame(()=>{var d;if(!a||!l||!i.current)return;const p=Be(l,r,t);h.current=p??null;const R=(d=p==null?void 0:p.coordinates)==null?void 0:d[0];if(!R){i.current.visible=!1;return}const g=E.trackerToWorld(R,f.current);i.current.visible=!0,i.current.position.copy(g)});const m=o.useCallback(p=>{var d,S;const R=He[p];if(R===void 0)return null;const g=(S=(d=h.current)==null?void 0:d.coordinates)==null?void 0:S[R];return g?{position:E.trackerToWorld(g,f.current)}:null},[]),T=o.useMemo(()=>({type:"hand",resolveLandmark:m}),[m]);return O.jsx(I.TrackerContext.Provider,{value:T,children:O.jsx("group",{ref:i,renderOrder:Y.RENDER_LAYERS.TRACKED,children:e})})},Et={"hand.wrist":0,"hand.thumbTip":4,"hand.indexTip":8,"hand.middleTip":12,"hand.ringTip":16,"hand.pinkyTip":20,"hand.indexBase":5,"hand.middleBase":9,"hand.ringBase":13,"hand.pinkyBase":17},pt=({children:e,targetFps:r,active:t=!0})=>{const n=o.useRef(null),s=o.useMemo(()=>r===void 0?void 0:{targetFps:r},[r]),{ready:i,node:u}=I.useXRModel(E.XRModel.GESTURE_TRACKER,s,t),{camera:a}=L.useThree(),l=o.useRef(a);l.current!==a&&(l.current=a);const c=o.useRef(null);L.useFrame(()=>{var p;if(!i||!u||!n.current)return;c.current=u;const m=(p=u==null?void 0:u.coordinates)==null?void 0:p[0];if(!m){n.current.visible=!1;return}const T=E.trackerToWorld(m,l.current);n.current.visible=!0,n.current.position.copy(T)});const f=o.useCallback(m=>{var R,g;const T=Et[m];if(T===void 0)return null;const p=(g=(R=c.current)==null?void 0:R.coordinates)==null?void 0:g[T];return p?{position:E.trackerToWorld(p,l.current)}:null},[]),h=o.useMemo(()=>({type:"hand",resolveLandmark:f}),[f]);return O.jsx(I.TrackerContext.Provider,{value:h,children:O.jsx("group",{ref:n,renderOrder:Y.RENDER_LAYERS.TRACKED,children:e})})},Ue={"body.head":0,"body.leftShoulder":11,"body.rightShoulder":12,"body.leftElbow":13,"body.rightElbow":14,"body.leftWrist":15,"body.rightWrist":16,"body.leftHip":23,"body.rightHip":24,"body.leftKnee":25,"body.rightKnee":26,"body.leftAnkle":27,"body.rightAnkle":28},gt=({bodyIndex:e=0,active:r=!0,children:t})=>{const n=o.useRef(null),{ready:s,node:i}=I.useXRModel(E.XRModel.BODY_TRACKER,void 0,r),{camera:u}=L.useThree(),a=o.useRef(u);a.current!==u&&(a.current=u);const l=o.useRef(null);L.useFrame(()=>{if(!s||!i||!n.current)return;const h=i;l.current=h;const m=h.getLandmarks2D(e),T=m==null?void 0:m[0];if(!T){n.current.visible=!1;return}const p=E.trackerToWorld(T,a.current);n.current.visible=!0,n.current.position.copy(p)});const c=o.useCallback(h=>{const m=l.current;if(!m)return null;const T=m.getLandmarks2D(e);if(!T)return null;if(h==="body.neck"){const g=T[11],d=T[12];if(!g||!d)return null;const S={x:(g.x+d.x)/2,y:(g.y+d.y)/2,z:(g.z+d.z)/2};return{position:E.trackerToWorld(S,a.current)}}const p=Ue[h];if(p===void 0)return null;const R=T[p];return R?{position:E.trackerToWorld(R,a.current)}:null},[e]),f=o.useMemo(()=>({type:"body",resolveLandmark:c}),[c]);return O.jsx(I.TrackerContext.Provider,{value:f,children:O.jsx("group",{ref:n,renderOrder:Y.RENDER_LAYERS.TRACKED,children:t})})},ee={leftShoulder:11,rightShoulder:12,leftWrist:15,rightWrist:16},At=0,_t=[[5,8],[9,12],[13,16],[17,20]],se={smile:.3,mouthOpen:.25,minVisibility:.5,fingerExtension:1.25},Ge=()=>({facePresent:!1,leftHandPresent:!1,rightHandPresent:!1,posePresent:!1,smile:0,mouthOpen:0,smiling:!1,mouthIsOpen:!1,leftHandRaised:!1,rightHandRaised:!1,leftPalmOpen:!1,rightPalmOpen:!1,greeting:null}),xe=(e,r)=>Math.hypot(e.x-r.x,e.y-r.y),Se=(e,r=se.fingerExtension)=>{if(!e||e.landmarks.length<21)return!1;const t=e.landmarks[At];let n=0;for(const[s,i]of _t){const u=xe(e.landmarks[s],t),a=xe(e.landmarks[i],t);u>0&&a>=u*r&&(n+=1)}return n>=3},Re=(e,r,t=se.minVisibility)=>{const{pose:n}=e;if(!n||n.landmarks.length<33)return!1;const s=r==="left"?ee.leftWrist:ee.rightWrist,i=r==="left"?ee.leftShoulder:ee.rightShoulder;return n.visibility[s]<t||n.visibility[i]<t?!1:n.landmarks[s].y>n.landmarks[i].y},yt=(e,r={},t=Ge())=>{const n={...se,...r},{face:s,leftHand:i,rightHand:u,pose:a}=e;t.facePresent=s!==null,t.leftHandPresent=i!==null,t.rightHandPresent=u!==null,t.posePresent=a!==null;const l=s==null?void 0:s.blendshapes;return t.smile=l?((l.mouthSmileLeft??0)+(l.mouthSmileRight??0))/2:0,t.mouthOpen=(l==null?void 0:l.jawOpen)??0,t.smiling=s!==null&&t.smile>=n.smile,t.mouthIsOpen=s!==null&&t.mouthOpen>=n.mouthOpen,t.leftHandRaised=Re(e,"left",n.minVisibility),t.rightHandRaised=Re(e,"right",n.minVisibility),t.leftPalmOpen=Se(i,n.fingerExtension),t.rightPalmOpen=Se(u,n.fingerExtension),t.smiling&&t.rightHandRaised&&t.rightPalmOpen?t.greeting="right":t.smiling&&t.leftHandRaised&&t.leftPalmOpen?t.greeting="left":t.greeting=null,t},It={node:null,ready:!1,status:"loading",error:null},je=o.createContext(null),Ke=()=>o.useContext(je)??It,Ne=(e,r)=>r?"error":e?e.getStatus():"loading",Ot=({children:e,active:r=!0,onStatusChange:t,modelUrl:n,delegate:s,minFaceDetectionConfidence:i,minFacePresenceConfidence:u,minPoseDetectionConfidence:a,minPosePresenceConfidence:l,minHandLandmarksConfidence:c,outputFaceBlendshapes:f,targetFps:h,hands:m,analysisMaxDimension:T,holdMs:p,predictMs:R})=>{const g=o.useMemo(()=>{const _={};return n!==void 0&&(_.modelUrl=n),s!==void 0&&(_.delegate=s),i!==void 0&&(_.minFaceDetectionConfidence=i),u!==void 0&&(_.minFacePresenceConfidence=u),a!==void 0&&(_.minPoseDetectionConfidence=a),l!==void 0&&(_.minPosePresenceConfidence=l),c!==void 0&&(_.minHandLandmarksConfidence=c),f!==void 0&&(_.outputFaceBlendshapes=f),h!==void 0&&(_.targetFps=h),Object.keys(_).length>0?_:void 0},[s,i,u,c,a,l,n,f,h]),{ready:d,node:S,error:D}=I.useXRModel(E.XRModel.HOLISTIC_TRACKER,g,r);o.useEffect(()=>{S&&S.setOptions(E.resolveHolisticRuntimeOptions({hands:m,analysisMaxDimension:T,holdMs:p,predictMs:R}))},[S,m,T,p,R]);const[b,M]=o.useState(()=>Ne(S,D)),P=o.useRef(b),v=o.useRef(t);v.current=t,L.useFrame(()=>{var G;const _=Ne(S,D);_!==P.current&&(P.current=_,M(_),(G=v.current)==null||G.call(v,_,D??(S==null?void 0:S.getError())??null))});const Z=o.useMemo(()=>({node:S,ready:d&&b==="ready",status:b,error:D??(S==null?void 0:S.getError())??null}),[S,d,b,D]);return O.jsx(je.Provider,{value:Z,children:e})},Lt=()=>{const{camera:e}=L.useThree(),r=o.useRef(e);return r.current!==e&&(r.current=e),r},pe=(e,r)=>{const t=o.useRef(null),{node:n,ready:s}=Ke(),i=Lt();return L.useFrame(()=>{const u=t.current;if(!u)return;const a=s&&n?e(n.getResult()):null;if(!a){u.visible=!1;return}u.visible=!0,u.position.copy(r(a,i.current))}),{groupRef:t,cameraRef:i,node:n}},Xe=({children:e})=>{const r=o.useRef({x:0,y:0,z:0,visibility:0}),{groupRef:t,cameraRef:n,node:s}=pe(a=>{var l;return((l=a.face)==null?void 0:l.landmarks[4])??null},(a,l)=>E.feedToWorld(a,l)),i=o.useCallback((a,l)=>{var h;const c=(h=s==null?void 0:s.getResult().face)==null?void 0:h.landmarks;if(!c||c.length===0)return null;const f=I.resolveFaceAnchorPoint(a,c,l,r.current);return f?{position:E.feedToWorld(f,n.current)}:null},[n,s]),u=o.useMemo(()=>({type:"face",resolveLandmark:i}),[i]);return O.jsx(I.TrackerContext.Provider,{value:u,children:O.jsx("group",{ref:t,renderOrder:Y.RENDER_LAYERS.TRACKED,visible:!1,children:e})})};Xe.displayName="HolisticTracker.Face";const We=({hand:e,children:r})=>{const t=o.useCallback(l=>e==="left"?l.leftHand:l.rightHand,[e]),{groupRef:n,cameraRef:s,node:i}=pe(l=>{var c;return((c=t(l))==null?void 0:c.landmarks[0])??null},E.trackerToWorld),u=o.useCallback(l=>{var h;const c=He[l];if(c===void 0||!i)return null;const f=(h=t(i.getResult()))==null?void 0:h.landmarks[c];return f?{position:E.trackerToWorld(f,s.current)}:null},[s,i,t]),a=o.useMemo(()=>({type:"hand",resolveLandmark:u}),[u]);return O.jsx(I.TrackerContext.Provider,{value:a,children:O.jsx("group",{ref:n,renderOrder:Y.RENDER_LAYERS.TRACKED,visible:!1,children:r})})};We.displayName="HolisticTracker.Hand";const Ye=({children:e})=>{const{groupRef:r,cameraRef:t,node:n}=pe(u=>{var a;return((a=u.pose)==null?void 0:a.landmarks[0])??null},E.trackerToWorld),s=o.useCallback(u=>{var f;const a=(f=n==null?void 0:n.getResult().pose)==null?void 0:f.landmarks;if(!a)return null;if(u==="body.neck"){const h=a[11],m=a[12];if(!h||!m)return null;const T={x:(h.x+m.x)/2,y:(h.y+m.y)/2,z:(h.z+m.z)/2};return{position:E.trackerToWorld(T,t.current)}}const l=Ue[u];if(l===void 0)return null;const c=a[l];return c?{position:E.trackerToWorld(c,t.current)}:null},[t,n]),i=o.useMemo(()=>({type:"body",resolveLandmark:s}),[s]);return O.jsx(I.TrackerContext.Provider,{value:i,children:O.jsx("group",{ref:r,renderOrder:Y.RENDER_LAYERS.TRACKED,visible:!1,children:e})})};Ye.displayName="HolisticTracker.Body";const oe=Ot;oe.Face=Xe;oe.Hand=We;oe.Body=Ye;const bt=({type:e,active:r=!0,children:t})=>(I.useXRModel(E.XRModel.BACKGROUND_SEGMENTATION,{type:e},r),o.useEffect(()=>{re.SEGMENTATION_TYPES.includes(e)||console.warn(`[Segmentation] unsupported type "${e}"; valid values: ${re.SEGMENTATION_TYPES.join(", ")}`)},[e]),O.jsx(O.Fragment,{children:t})),kt=800,Ct=200,Ft=()=>({armed:!1,armStart:null,holdStart:null,fired:!1}),Dt=(e,{isTrigger:r,gesture:t,now:n,mode:s,debounceMs:i,holdMs:u})=>{if(e.fired)return null;if(s==="hold"){if(r&&t){if(e.holdStart===null&&(e.holdStart=n),n-e.holdStart>=u)return e.fired=!0,t}else e.holdStart=null;return null}return e.armed?r&&t?(e.fired=!0,t):null:(r?e.armStart=null:(e.armStart===null&&(e.armStart=n),n-e.armStart>=i&&(e.armed=!0)),null)};function xt({gestures:e,mode:r="arm",debounceMs:t=kt,holdMs:n=Ct,onTrigger:s,enabled:i=!0}){const{ready:u,node:a}=I.useXRModel(E.XRModel.GESTURE_TRACKER),l=o.useRef(s);o.useEffect(()=>{l.current=s},[s]);const c=o.useRef(new Set);o.useEffect(()=>{c.current=new Set(Array.isArray(e)?e:[e])},[e]);const f=o.useRef(Ft());L.useFrame(()=>{if(!i||!u||!a)return;const h=a.gesture,m=!!(h&&c.current.has(h)),T=Dt(f.current,{isTrigger:m,gesture:h,now:performance.now(),mode:r,debounceMs:t,holdMs:n});T&&l.current(T)})}const Nt=e=>(xt(e),null),Mt=["_neutral","browDownLeft","browDownRight","browInnerUp","browOuterUpLeft","browOuterUpRight","cheekPuff","cheekSquintLeft","cheekSquintRight","eyeBlinkLeft","eyeBlinkRight","eyeLookDownLeft","eyeLookDownRight","eyeLookInLeft","eyeLookInRight","eyeLookOutLeft","eyeLookOutRight","eyeLookUpLeft","eyeLookUpRight","eyeSquintLeft","eyeSquintRight","eyeWideLeft","eyeWideRight","jawForward","jawLeft","jawOpen","jawRight","mouthClose","mouthDimpleLeft","mouthDimpleRight","mouthFrownLeft","mouthFrownRight","mouthFunnel","mouthLeft","mouthLowerDownLeft","mouthLowerDownRight","mouthPressLeft","mouthPressRight","mouthPucker","mouthRight","mouthRollLower","mouthRollUpper","mouthShrugLower","mouthShrugUpper","mouthSmileLeft","mouthSmileRight","mouthStretchLeft","mouthStretchRight","mouthUpperUpLeft","mouthUpperUpRight","noseSneerLeft","noseSneerRight"],qe=({source:e,face:r,canvas:t,outputSize:n,padding:s=.2})=>St.drawNormalizedCrop({source:e,bounds:r.bounds,canvas:t,outputSize:n,padding:s}),vt=["browRaise","eyeBlink","eyeBlinkLeft","eyeBlinkRight","eyeBlinkEither","headUp","headDown","headTurnLeft","headTurnRight","mouthOpen","mouthPout","headTiltLeft","headTiltRight"],B=(e=.5)=>({threshold:e,releaseThreshold:Math.max(0,e-.15),holdMs:50}),j={threshold:Math.PI/18,releaseThreshold:Math.PI/30,holdMs:80},ze={browRaise:B(.45),eyeBlink:B(.55),eyeBlinkLeft:B(.55),eyeBlinkRight:B(.55),eyeBlinkEither:B(.55),headUp:j,headDown:j,headTurnLeft:j,headTurnRight:j,mouthOpen:B(.45),mouthPout:B(.5),headTiltLeft:j,headTiltRight:j},K=e=>Math.max(0,e),W=(e,r)=>e!==void 0&&Number.isFinite(e)?e:r,Ve=(e,r={})=>{const t=ze[e],n=Math.max(0,W(r.threshold,t.threshold));return{threshold:n,releaseThreshold:Math.min(n,Math.max(0,W(r.releaseThreshold,t.releaseThreshold))),holdMs:Math.max(0,W(r.holdMs,t.holdMs))}},U=(e,r,{neutralRotation:t={x:0,y:0,z:0}}={})=>{const n=W(t.x,0),s=W(t.y,0),i=W(t.z,0);switch(r){case"browRaise":return Math.max(y.getFaceBlendshape(e,"browInnerUp"),y.getFaceBlendshape(e,"browOuterUpLeft"),y.getFaceBlendshape(e,"browOuterUpRight"));case"eyeBlink":return Math.min(y.getFaceBlendshape(e,"eyeBlinkLeft"),y.getFaceBlendshape(e,"eyeBlinkRight"));case"eyeBlinkLeft":return y.getFaceBlendshape(e,"eyeBlinkRight");case"eyeBlinkRight":return y.getFaceBlendshape(e,"eyeBlinkLeft");case"eyeBlinkEither":return Math.max(y.getFaceBlendshape(e,"eyeBlinkLeft"),y.getFaceBlendshape(e,"eyeBlinkRight"));case"mouthOpen":return y.getFaceBlendshape(e,"jawOpen");case"mouthPout":return y.getFaceBlendshape(e,"mouthPucker");case"headUp":return K(e.pose.rotation.x-n);case"headDown":return K(n-e.pose.rotation.x);case"headTurnLeft":return K(e.pose.rotation.y-s);case"headTurnRight":return K(s-e.pose.rotation.y);case"headTiltLeft":return K(e.pose.rotation.z-i);case"headTiltRight":return K(i-e.pose.rotation.z)}},wt=(e,r,t={})=>U(e,r,t)>=Ve(r,t).threshold,Pt=(e,r,t={})=>{let n=null,s=0;for(const i of e){const u=U(i,r,t);(!n||u>s)&&(n=i,s=u)}return{face:n,value:s}},Me=e=>({action:e,active:!1,value:0,justStarted:!1,justEnded:!1,phase:"none",holdStartedAt:null}),Ht=(e,r,t,n,s)=>{const i=e.phase==="begin";if(e.value=r,e.justStarted=!1,e.justEnded=!1,e.phase=e.active?"stay":"none",!n)return e.holdStartedAt=null,e.active&&(e.active=!1,e.justEnded=!0,e.phase="end"),e;if(e.active){if(r<=s.releaseThreshold){if(i)return e;e.active=!1,e.justEnded=!0,e.phase="end"}return e}return r<s.threshold?(e.holdStartedAt=null,e):(e.holdStartedAt===null&&(e.holdStartedAt=t),t-e.holdStartedAt>=s.holdMs&&(e.active=!0,e.justStarted=!0,e.phase="begin",e.holdStartedAt=null),e)},ie=e=>({value:e,confidence:1}),te=(e,r,t,n)=>({name:e,kind:"face",description:r,defaults:n,measure:s=>s?ie(t(s)):null}),k=(e,r,t,n)=>({name:e,kind:"hand",description:r,defaults:n,measure:s=>s&&s.length>=21?ie(t(s)):null}),V=(e,r,t,n)=>({name:e,kind:"body",description:r,defaults:n,measure:s=>s&&s.length>=33?ie(t(s)):null}),he=e=>()=>({tracker:new A.OscillationTracker(e),wasPresent:!1}),fe=(e,r,t)=>r===null?(e.wasPresent=!1,null):(e.wasPresent||e.tracker.reset(),e.wasPresent=!0,ie(e.tracker.push(r,t))),Te={enterThreshold:.99,exitThreshold:.3,cooldownMs:600},ge={mouthOpen:te("mouthOpen","Jaw open (blendshape jawOpen).",e=>U(e,"mouthOpen")),smile:te("smile","Mean of the two mouthSmile blendshapes.",e=>(y.getFaceBlendshape(e,"mouthSmileLeft")+y.getFaceBlendshape(e,"mouthSmileRight"))/2,{enterThreshold:.4}),blink:te("blink","Both eyes closed (min of the eyeBlink blendshapes).",e=>U(e,"eyeBlink"),{enterThreshold:.55,holdMs:50}),browRaise:te("browRaise","Eyebrows raised (max of the brow-up blendshapes).",e=>U(e,"browRaise"),{enterThreshold:.45}),headNod:{name:"headNod",kind:"face",description:"Pitch oscillation: three turning points of at least 0.12 rad within 1.5 s.",defaults:Te,createMemory:he({minAmplitude:.12,requiredReversals:3,windowMs:1500}),measure:(e,r,t)=>fe(r,e?e.pose.rotation.x:null,t)},headShake:{name:"headShake",kind:"face",description:"Yaw oscillation: three turning points of at least 0.15 rad within 1.5 s.",defaults:Te,createMemory:he({minAmplitude:.15,requiredReversals:3,windowMs:1500}),measure:(e,r,t)=>fe(r,e?e.pose.rotation.y:null,t)},pinch:k("pinch","Thumb and index tips touching, relative to palm size.",A.measurePinch,{enterThreshold:.75,exitThreshold:.5}),grab:k("grab","Fist: index to pinky curled toward the wrist.",A.measureGrab,{enterThreshold:.7,exitThreshold:.45}),openPalm:k("openPalm","Index to pinky extended.",A.measureOpenPalm,{enterThreshold:.7,exitThreshold:.45}),handRaised:k("handRaised","Wrist in the upper part of the frame (0 bottom edge, 1 top edge).",A.measureHandHeight,{enterThreshold:.7,exitThreshold:.6}),oneFinger:k("oneFinger","Index extended, other fingers curled (pointing).",e=>A.measureFingerPattern(e,{fingers:[!0,!1,!1,!1]}),{enterThreshold:.65,exitThreshold:.45}),peaceSign:k("peaceSign","Index and middle extended, ring and pinky curled.",e=>A.measureFingerPattern(e,{fingers:[!0,!0,!1,!1]}),{enterThreshold:.65,exitThreshold:.45}),threeFingers:k("threeFingers","Index, middle and ring extended, pinky curled.",e=>A.measureFingerPattern(e,{fingers:[!0,!0,!0,!1]}),{enterThreshold:.65,exitThreshold:.45}),fourFingers:k("fourFingers","Index to pinky extended, thumb tucked.",e=>A.measureFingerPattern(e,{fingers:[!0,!0,!0,!0],thumb:!1}),{enterThreshold:.65,exitThreshold:.45}),fist:k("fist","All four fingers curled and the thumb tucked.",e=>A.measureFingerPattern(e,{fingers:[!1,!1,!1,!1],thumb:!1}),{enterThreshold:.65,exitThreshold:.45}),palm:k("palm","All four fingers extended and the thumb out.",e=>A.measureFingerPattern(e,{fingers:[!0,!0,!0,!0],thumb:!0}),{enterThreshold:.65,exitThreshold:.45}),thumbUp:k("thumbUp","Thumb out and pointing up, fingers curled.",e=>A.measureThumb(e,"up"),{enterThreshold:.6,exitThreshold:.4}),thumbDown:k("thumbDown","Thumb out and pointing down, fingers curled.",e=>A.measureThumb(e,"down"),{enterThreshold:.6,exitThreshold:.4}),wave:{name:"wave",kind:"hand",description:"Wrist swinging side to side: three turning points of at least 0.08 within 1.2 s.",defaults:Te,createMemory:he({minAmplitude:.08,requiredReversals:3,windowMs:1200}),measure:(e,r,t)=>fe(r,e&&e.length>=21?e[0].x:null,t)},armRaisedLeft:V("armRaisedLeft","Person's left wrist above the left shoulder, in shoulder widths.",e=>A.measureArmRaise(e,"left"),{enterThreshold:.3,exitThreshold:.15}),armRaisedRight:V("armRaisedRight","Person's right wrist above the right shoulder, in shoulder widths.",e=>A.measureArmRaise(e,"right"),{enterThreshold:.3,exitThreshold:.15}),armRaised:V("armRaised","Either wrist above its shoulder.",e=>Math.max(A.measureArmRaise(e,"left"),A.measureArmRaise(e,"right")),{enterThreshold:.3,exitThreshold:.15}),bothArmsRaised:V("bothArmsRaised","Both wrists above their shoulders.",e=>Math.min(A.measureArmRaise(e,"left"),A.measureArmRaise(e,"right")),{enterThreshold:.3,exitThreshold:.15}),tPose:V("tPose","Both arms level and outstretched.",A.measureTPose,{enterThreshold:.6,exitThreshold:.4,holdMs:150})},Bt=Object.keys(ge),Je=e=>typeof e=="string"?ge[e]:e,Ut=e=>e,Gt={face:E.XRModel.FACE_TRACKER,hand:E.XRModel.HAND_TRACKER,body:E.XRModel.BODY_TRACKER},ve=e=>C.snapshotGestureState(C.createGestureDetectorState(e)),$e=(e,r={})=>{var Le;const t=o.useMemo(()=>Je(e),[e]),{active:n=!0,faceIndex:s=0,numFaces:i,hand:u,handIndex:a=0,bodyIndex:l=0,targetFps:c,onBegin:f,onEnd:h,onChange:m,...T}=r,p=Gt[t.kind],R=Math.max(i??s+1,s+1),g=o.useMemo(()=>{const x={};return t.kind==="face"&&(x.numFaces=R),c!==void 0&&c>0&&(x.targetFps=c),Object.keys(x).length>0?x:void 0},[t.kind,R,c]),{node:d,ready:S}=I.useXRModel(p,g,n),{camera:D}=L.useThree();o.useEffect(()=>{!d||t.kind!=="face"||d.setCamera(D,s)},[D,t.kind,s,d]);const b=o.useMemo(()=>C.resolveGestureDetectorOptions(T,C.resolveGestureDetectorOptions(t.defaults)),[t,T.enterThreshold,T.exitThreshold,T.holdMs,T.cooldownMs,T.minConfidence,T.lostGraceMs]),M=o.useRef(C.createGestureDetectorState(t.name)),P=o.useRef((Le=t.createMemory)==null?void 0:Le.call(t)),v=o.useRef(y.createFaceInfoTarget()),[Z,_]=o.useState(()=>ve(t.name)),G=o.useRef(Z);o.useEffect(()=>{var w;M.current=C.createGestureDetectorState(t.name),P.current=(w=t.createMemory)==null?void 0:w.call(t);const x=ve(t.name);G.current=x,_(x)},[t]);const Ie=o.useRef({onBegin:f,onEnd:h,onChange:m});Ie.current={onBegin:f,onEnd:h,onChange:m};const Oe=o.useRef({faceIndex:s,hand:u,handIndex:a,bodyIndex:l,active:n});return Oe.current={faceIndex:s,hand:u,handIndex:a,bodyIndex:l,active:n},L.useFrame(()=>{var Ce;const x=performance.now(),w=Oe.current;let be=null;if(w.active&&S&&d){let Q;t.kind==="face"?Q=y.getFaceInfo(d,w.faceIndex,v.current):t.kind==="hand"?Q=(Ce=Be(d,w.hand,w.handIndex))==null?void 0:Ce.coordinates:Q=d.getLandmarks2D(w.bodyIndex),be=t.measure(Q,P.current,x)}const ke=C.stepGestureDetector(M.current,be,x,b);if(C.gestureStatesEqual(G.current,ke))return;const H=C.snapshotGestureState(ke);G.current=H,_(H);const{onBegin:ce,onEnd:le,onChange:de}=Ie.current;H.justBegan&&(ce==null||ce(H)),H.justEnded&&(le==null||le(H)),de==null||de(H)}),Z},jt=({gesture:e,...r})=>($e(e,r),null),ae=1,ue=Object.freeze({version:ae,orientation:0,mirrored:"auto",scale:1,offset:Object.freeze({x:0,y:0}),face:null,body:null,updatedAt:0}),Ze=(e={})=>J(ue,e,0),Kt=[0,90,180,270],Xt=e=>Math.min(4,Math.max(.25,e)),J=(e,r,t=Date.now())=>({version:ae,orientation:r.orientation!==void 0&&Kt.includes(r.orientation)?r.orientation:e.orientation,mirrored:r.mirrored===!0||r.mirrored===!1||r.mirrored==="auto"?r.mirrored:e.mirrored,scale:r.scale!==void 0&&Number.isFinite(r.scale)&&r.scale>0?Xt(r.scale):e.scale,offset:r.offset&&Number.isFinite(r.offset.x)&&Number.isFinite(r.offset.y)?{x:r.offset.x,y:r.offset.y}:{...e.offset},face:r.face!==void 0?r.face:e.face,body:r.body!==void 0?r.body:e.body,updatedAt:t}),Qe=(e=Date.now())=>J(ue,{},e),Wt=e=>e.orientation===0&&e.mirrored==="auto"&&e.scale===1&&e.offset.x===0&&e.offset.y===0,et=(e,r)=>e.mirrored==="auto"?!1:e.mirrored!==E.isMirroredSourceKind(r),tt=(e,r,t,n={x:0,y:0})=>{let{x:s,y:i}=e;switch(r.orientation){case 90:[s,i]=[1-i,s];break;case 180:[s,i]=[1-s,1-i];break;case 270:[s,i]=[i,1-s];break}return et(r,t)&&(s=1-s),s=.5+(s-.5)*r.scale+r.offset.x,i=.5+(i-.5)*r.scale+r.offset.y,n.x=s,n.y=i,e.z!==void 0&&(n.z=e.z),n},ne=(e,r)=>e&&r?Math.hypot(e.x-r.x,e.y-r.y):null,rt=Object.freeze({leftTemple:234,rightTemple:454,leftEyeOuter:33,rightEyeOuter:263}),Ae=(e,r=Date.now())=>{if(!e||e.length<468)return null;const{leftTemple:t,rightTemple:n,leftEyeOuter:s,rightEyeOuter:i}=rt,u=ne(e[t],e[n]),a=ne(e[s],e[i]);return!u||!a?null:{faceWidth:u,eyeDistance:a,capturedAt:r}},nt=Object.freeze({leftShoulder:11,rightShoulder:12,leftHip:23,rightHip:24}),_e=(e,r=Date.now())=>{if(!e||e.length<33)return null;const{leftShoulder:t,rightShoulder:n,leftHip:s,rightHip:i}=nt,u=ne(e[t],e[n]),a=ne(e[s],e[i]),l=e[t],c=e[n],f=e[s],h=e[i];if(!u||!a||!l||!c||!f||!h)return null;const m=Math.hypot((l.x+c.x)/2-(f.x+h.x)/2,(l.y+c.y)/2-(f.y+h.y)/2);return{shoulderWidth:u,hipWidth:a,torsoLength:m,capturedAt:r}},st=(e,r)=>{const t=r.face,n=Ae(e,0);return!t||!n?null:t.faceWidth>0&&n.faceWidth>0?n.faceWidth/t.faceWidth:t.eyeDistance>0&&n.eyeDistance>0?n.eyeDistance/t.eyeDistance:null},ot=(e,r)=>{const t=r.body,n=_e(e,0);return!t||!n||t.shoulderWidth<=0?null:n.shoulderWidth/t.shoulderWidth},$="vincentt.xr.calibration",ye=()=>{try{return typeof localStorage<"u"?localStorage:null}catch{return null}},it=(e=$,r=ye())=>{if(!r)return null;try{const t=r.getItem(e);if(!t)return null;const n=JSON.parse(t);return!n||typeof n!="object"||n.version!==ae?null:J(ue,{orientation:n.orientation,mirrored:n.mirrored,scale:n.scale,offset:n.offset,face:n.face??null,body:n.body??null},typeof n.updatedAt=="number"?n.updatedAt:0)}catch{return null}},at=(e,r=$,t=ye())=>{if(!t)return!1;try{return t.setItem(r,JSON.stringify(e)),!0}catch{return!1}},ut=(e=$,r=ye())=>{if(r)try{r.removeItem(e)}catch{}},Yt=(e={})=>{const{storageKey:r=$,persist:t=!0}=e,n=e.storage===void 0?void 0:e.storage,s=o.useRef(e.initial),{session:i}=E.useXRContext(),u=o.useSyncExternalStore(d=>i.store.subscribe(d),()=>i.store.getSnapshot().sourceKind,()=>{}),[a,l]=o.useState(()=>Ze(s.current)),[c,f]=o.useState(!t),h=o.useRef(a);h.current=a,o.useEffect(()=>{if(!t){f(!0);return}const d=it(r,n);d&&(h.current=d,l(d)),f(!0)},[t,r,n]);const m=o.useCallback(d=>(h.current=d,l(d),t&&at(d,r,n),d),[t,r,n]),T=o.useCallback(d=>m(J(h.current,d)),[m]),p=o.useCallback(()=>{const d=Qe();return h.current=d,l(d),t&&ut(r,n),d},[t,r,n]),R=o.useCallback(d=>{const S=Ae(d);return S?(T({face:S}),!0):!1},[T]),g=o.useCallback(d=>{const S=_e(d);return S?(T({body:S}),!0):!1},[T]);return o.useMemo(()=>({calibration:a,hydrated:c,update:T,reset:p,calibrateFace:R,calibrateBody:g,applyToFeedPoint:(d,S)=>tt(d,a,u,S),faceDistance:d=>st(d,a),bodyScale:d=>ot(d,a),sourceKind:u}),[a,c,T,p,R,g,u])},qt=(e,r)=>r&&!e?"begin":!r&&e?"end":r?"stay":"none",zt={face:null,faces:[],faceCount:0,detected:!1,justDetected:!1,justLost:!1,phase:"none"},Vt=({faceIndex:e=0,numFaces:r,...t}={})=>{const n=Number.isFinite(e)?Math.max(0,Math.round(e)):0,s=F.useFaceInfos({...t,numFaces:Math.max(r??n+1,n+1)}),i=o.useRef([]),u=o.useRef(n),a=o.useRef({detected:!1,faceIndex:n}),[l,c]=o.useState(zt),f=o.useRef(l);return o.useEffect(()=>{i.current=s,u.current=n},[s,n]),L.useFrame(()=>{const h=i.current,m=u.current,T=h[m]??null,p=!!T,R=a.current.faceIndex===m&&a.current.detected,g=qt(R,p);a.current={detected:p,faceIndex:m};const d={face:T,faces:h,faceCount:h.length,detected:p,justDetected:g==="begin",justLost:g==="end",phase:g},S=f.current;S.face===d.face&&S.faces===d.faces&&S.faceCount===d.faceCount&&S.detected===d.detected&&S.justDetected===d.justDetected&&S.justLost===d.justLost&&S.phase===d.phase||(f.current=d,c(d))}),l},we=e=>({action:e,active:!1,value:0,justStarted:!1,justEnded:!1,phase:"none"}),Jt=(e,r,t={})=>{const n=o.useRef(Me(r)),s=o.useRef(null),i=o.useRef(r),u=o.useRef({}),[a,l]=o.useState(()=>we(r)),c=o.useRef(a);return o.useEffect(()=>{s.current=e,u.current=t},[e,t]),o.useEffect(()=>{i.current=r,n.current=Me(r);const f=we(r);c.current=f,l(f)},[r]),L.useFrame(({clock:f})=>{const h=s.current,m=i.current,T=u.current,p=h?U(h,m,T):0,R=Ht(n.current,p,f.elapsedTime*1e3,!!h,Ve(m,T)),g=c.current;if(g.action===R.action&&g.active===R.active&&g.value===R.value&&g.justStarted===R.justStarted&&g.justEnded===R.justEnded&&g.phase===R.phase)return;const d={action:R.action,active:R.active,value:R.value,justStarted:R.justStarted,justEnded:R.justEnded,phase:R.phase};c.current=d,l(d)}),a},$t=["angry","disgust","fear","happy","neutral","sad","surprise","unknown"],X=["angry","disgust","fear","happy","neutral","sad","surprise"],Zt=(e,r=.55)=>{let t=-1/0;for(let c=0;c<X.length;c+=1)t=Math.max(t,Number(e[c])||0);const n=new Array(X.length);let s=0;for(let c=0;c<X.length;c+=1){const f=Math.exp((Number(e[c])||0)-t);n[c]=f,s+=f}const i=Object.fromEntries(X.map(c=>[c,0]));let u="unknown",a=0;for(let c=0;c<X.length;c+=1){const f=s?n[c]/s:0,h=X[c];i[h]=f,f>a&&(u=h,a=f)}const l=Number.isFinite(r)?Math.min(1,Math.max(0,r)):.55;return{expression:a>=l?u:"unknown",confidence:a,scores:i}},Qt=e=>{const r=e.width*e.height,t=new Float32Array(r*3);for(let n=0,s=0;n<r;n+=1,s+=4)t[n]=e.data[s]/127.5-1,t[r+n]=e.data[s+1]/127.5-1,t[r*2+n]=e.data[s+2]/127.5-1;return t},ct="https://huggingface.co/opencv/facial_expression_recognition/resolve/main/facial_expression_recognition_mobilefacenet_2022july_int8.onnx",er=e=>`https://cdn.jsdelivr.net/npm/onnxruntime-web@${e.env.versions.web}/dist/`,me=new Map,tr=e=>{let r=me.get(e);return r||(r=Promise.all([import("onnxruntime-web/wasm"),E.fetchAndVerify(e)]).then(([t,n])=>(t.env.wasm.wasmPaths=er(t),t.InferenceSession.create(n,{executionProviders:["wasm"]}))).catch(t=>{throw me.delete(e),t}),me.set(e,r)),r},rr=(e,{active:r=!0,targetFps:t=5,minConfidence:n=.55,modelUrl:s=ct}={})=>{const{session:i}=E.useXRContext(),u=o.useRef(null),a=o.useRef(null),l=o.useRef(!1),c=o.useRef(-1/0),f=o.useRef(!0),[h,m]=o.useState({status:"idle",result:null,error:null});return o.useEffect(()=>{const T=document.createElement("canvas");return u.current=T,a.current=T.getContext("2d",{willReadFrequently:!0}),f.current=!0,()=>{f.current=!1,u.current=null,a.current=null}},[]),L.useFrame(({clock:T})=>{if(!r||!e||l.current||h.status==="error")return;const p=Number.isFinite(t)&&t>0?t:5,R=T.elapsedTime*1e3;if(R-c.current<1e3/p)return;const g=i.getInputFrame(),d=u.current,S=a.current;if(!g||!d||!S||!qe({source:g,face:e,canvas:d,outputSize:{width:112,height:112}}))return;c.current=R,l.current=!0,h.status==="idle"&&m({status:"loading",result:null,error:null});const D=Qt(S.getImageData(0,0,112,112));Promise.all([import("onnxruntime-web/wasm"),tr(s)]).then(async([b,M])=>{const P=await M.run({[M.inputNames[0]]:new b.Tensor("float32",D,[1,3,112,112])}),v=Zt(P[M.outputNames[0]].data,n);f.current&&m({status:"ready",result:v,error:null})}).catch(b=>{f.current&&m({status:"error",result:null,error:b instanceof Error?b:new Error(String(b))})}).finally(()=>{l.current=!1})}),h};exports.FACE_LANDMARK_INDICES=I.FACE_LANDMARK_INDICES;exports.FaceMesh=I.FaceMesh;exports.FaceTracker=I.FaceTracker;exports.DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION=E.DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION;exports.DEFAULT_HOLISTIC_HOLD_MS=E.DEFAULT_HOLISTIC_HOLD_MS;exports.DEFAULT_HOLISTIC_MODEL_URL=E.DEFAULT_HOLISTIC_MODEL_URL;exports.DEFAULT_HOLISTIC_PREDICT_MS=E.DEFAULT_HOLISTIC_PREDICT_MS;exports.clearSemanticMask=E.clearSemanticMask;exports.createSemanticMask=E.createSemanticMask;exports.normalizedTrackerPointToTrackerPoint=E.normalizedTrackerPointToTrackerPoint;exports.trackerPointToNormalizedTrackerPoint=E.trackerPointToNormalizedTrackerPoint;exports.SEGMENTATION_TYPES=re.SEGMENTATION_TYPES;exports.SEMANTIC_SEGMENTATION_PRESETS=re.SEMANTIC_SEGMENTATION_PRESETS;exports.BODY_TARGETS=q.BODY_TARGETS;exports.DEFAULT_TRACKING_ANCHOR=q.DEFAULT_TRACKING_ANCHOR;exports.FACE_TARGETS=q.FACE_TARGETS;exports.HAND_TARGETS=q.HAND_TARGETS;exports.TrackingAnchor=q.TrackingAnchor;exports.getTargetNamespace=q.getTargetNamespace;exports.DEFAULT_GESTURE_DETECTOR_OPTIONS=C.DEFAULT_GESTURE_DETECTOR_OPTIONS;exports.resolveGestureDetectorOptions=C.resolveGestureDetectorOptions;exports.DEFAULT_FACE_EXPRESSION_THRESHOLD=y.DEFAULT_FACE_EXPRESSION_THRESHOLD;exports.getFaceBlendshape=y.getFaceBlendshape;exports.getFaceEyeDistance=y.getFaceEyeDistance;exports.hasFaceExpression=y.hasFaceExpression;exports.useFaceResults=A.useFaceResults;exports.DEFAULT_POLICY_NUM_FACES=F.DEFAULT_POLICY_NUM_FACES;exports.DEFAULT_SUBJECT_POLICY=F.DEFAULT_SUBJECT_POLICY;exports.EMPTY_SUBJECT_MEMORY=F.EMPTY_SUBJECT_MEMORY;exports.XR_MAX_SUBJECTS=F.XR_MAX_SUBJECTS;exports.associateSubjects=F.associateSubjects;exports.faceCandidates=F.faceCandidates;exports.jointCandidates=F.jointCandidates;exports.selectSubject=F.selectSubject;exports.useFaceInfo=F.useFaceInfo;exports.useFaceInfos=F.useFaceInfos;exports.SegmentationOverlay=Pe.SegmentationOverlay;exports.useIrisTracking=Pe.useIrisTracking;exports.DEFAULT_GESTURE_SETTINGS=N.DEFAULT_GESTURE_SETTINGS;exports.DEFAULT_HOLISTIC_TRACKER_SETTINGS=N.DEFAULT_HOLISTIC_TRACKER_SETTINGS;exports.GESTURE_SETTINGS_FIELDS=N.GESTURE_SETTINGS_FIELDS;exports.HOLISTIC_HANDS_OPTIONS=N.HOLISTIC_HANDS_OPTIONS;exports.HOLISTIC_TRACKER_SETTINGS_FIELDS=N.HOLISTIC_TRACKER_SETTINGS_FIELDS;exports.patchGestureSettings=N.patchGestureSettings;exports.patchHolisticTrackerSettings=N.patchHolisticTrackerSettings;exports.resolveGestureSettings=N.resolveGestureSettings;exports.resolveHolisticTrackerSettings=N.resolveHolisticTrackerSettings;exports.toHolisticTrackerProps=N.toHolisticTrackerProps;exports.IRIS_LANDMARKS=z.IRIS_LANDMARKS;exports.IRIS_LANDMARK_COUNT=z.IRIS_LANDMARK_COUNT;exports.PERSON_MASK_LABELS=z.PERSON_MASK_LABELS;exports.useHairMask=z.useHairMask;exports.usePersonMask=z.usePersonMask;exports.useSemanticSegmentationMask=z.useSemanticSegmentationMask;exports.DEFAULT_SEGMENTATION_OVERLAY_SETTINGS=Ee.DEFAULT_SEGMENTATION_OVERLAY_SETTINGS;exports.patchSegmentationOverlaySettings=Ee.patchSegmentationOverlaySettings;exports.resolveSegmentationOverlaySettings=Ee.resolveSegmentationOverlaySettings;exports.BODY_CALIBRATION_LANDMARKS=nt;exports.BodyTracker=gt;exports.CALIBRATION_STORAGE_KEY=$;exports.CALIBRATION_VERSION=ae;exports.DEFAULT_CALIBRATION=ue;exports.DEFAULT_FACE_ACTION_OPTIONS=ze;exports.DEFAULT_FACE_ATTRIBUTE_EXPRESSION_MODEL_URL=ct;exports.DEFAULT_HOLISTIC_SIGNAL_THRESHOLDS=se;exports.FACE_ACTION_NAMES=vt;exports.FACE_ATTRIBUTE_EXPRESSION_NAMES=$t;exports.FACE_BLENDSHAPE_NAMES=Mt;exports.FACE_CALIBRATION_LANDMARKS=rt;exports.GESTURES=ge;exports.GESTURE_NAMES=Bt;exports.GestureListener=jt;exports.GestureTracker=pt;exports.GestureTrigger=Nt;exports.HandTracker=Rt;exports.HolisticTracker=oe;exports.Segmentation=bt;exports.applyCalibrationToFeedPoint=tt;exports.clearCalibration=ut;exports.createCalibration=Ze;exports.createHolisticSignals=Ge;exports.defineGesture=Ut;exports.drawFaceCrop=qe;exports.estimateBodyScale=ot;exports.estimateFaceDistance=st;exports.getFaceActionValue=U;exports.getHolisticSignals=yt;exports.getStrongestFaceAction=Pt;exports.hasFaceAction=wt;exports.isHandRaised=Re;exports.isIdentityCalibration=Wt;exports.isPalmOpen=Se;exports.loadCalibration=it;exports.measureBodyCalibration=_e;exports.measureFaceCalibration=Ae;exports.resetCalibration=Qe;exports.resolveCalibrationMirror=et;exports.resolveGestureDefinition=Je;exports.saveCalibration=at;exports.updateCalibration=J;exports.useFaceAction=Jt;exports.useFaceAttributeExpression=rr;exports.useFaceDetection=Vt;exports.useGesture=$e;exports.useHolisticTracking=Ke;exports.useXRCalibration=Yt;
|
|
1
|
+
"use strict";var _t=Object.create;var Be=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var pt=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of At(r))!gt.call(e,s)&&s!==t&&Be(e,s,{get:()=>r[s],enumerable:!(n=mt(r,s))||n.enumerable});return e};var Ge=(e,r,t)=>(t=e!=null?_t(Ot(e)):{},pt(r||!e||!e.__esModule?Be(t,"default",{value:e,enumerable:!0}):t,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Z=require("./index-DE17y0ZI.cjs"),M=require("react/jsx-runtime"),b=require("@react-three/fiber"),o=require("react"),p=require("./index-CfSF8LXa.cjs"),ue=require("./uv-BMFt19bg.cjs"),q=require("./landmarks-BlUqf5MZ.cjs"),I=require("./SegmentationOverlay-D_FWkcyP.cjs"),E=require("./trigger-D0Pm9noT.cjs"),Dt=require("three"),le=require("./index-CGsQWodV.cjs"),j=require("./settings-C63FMBlF.cjs"),ce=require("./selectors-C4X71aoD.cjs"),Ee=require("./segmentation-D9pYO6aR.cjs"),oe=require("./index-D5GTzOzD.cjs"),Y=require("./detector-ijypGtse.cjs"),$=require("./getFaceInfo-B1otSDMX.cjs"),It=require("./useInstructionHold-DwJY1Alr.cjs"),Se=require("./useFaceInfo-BHDNCvsJ.cjs"),Nt=require("./drawNormalizedCrop-B-7zU-Xw.cjs"),ee=require("./select-Ck5LGz-J.cjs"),ae=require("./providers-DHsrhDI2.cjs"),He=require("./landmarkMask-u7es2k4X.cjs");function Ct(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const X=Ct(Dt),Ve={"hand.wrist":0,"hand.thumbTip":4,"hand.indexTip":8,"hand.middleTip":12,"hand.ringTip":16,"hand.pinkyTip":20,"hand.indexBase":5,"hand.middleBase":9,"hand.ringBase":13,"hand.pinkyBase":17};function qe(e,r,t=0){var s;const n=(s=e==null?void 0:e.hands)!=null&&s.length?e.hands:e!=null&&e.coordinates?[{coordinates:e.coordinates,gesture:e.gesture,handedness:e.handedness}]:[];if(n.length){if(r){const u=n.find(l=>l.handedness===r);if(u)return u}return n[t]??n[0]}}const yt=({children:e,hand:r,handIndex:t=0,targetFps:n,active:s=!0})=>{const u=o.useRef(null),l=o.useMemo(()=>n===void 0?void 0:{targetFps:n},[n]),{ready:a,node:i}=q.useXRModel(p.XRModel.HAND_TRACKER,l,s),{camera:c}=b.useThree(),T=o.useRef(c);T.current!==c&&(T.current=c);const f=o.useRef(null);b.useFrame(()=>{var d;if(!a||!i||!u.current)return;const O=qe(i,r,t);f.current=O??null;const S=(d=O==null?void 0:O.coordinates)==null?void 0:d[0];if(!S){u.current.visible=!1;return}const A=p.trackerToWorld(S,T.current);u.current.visible=!0,u.current.position.copy(A)});const h=o.useCallback(O=>{var d,_;const S=Ve[O];if(S===void 0)return null;const A=(_=(d=f.current)==null?void 0:d.coordinates)==null?void 0:_[S];return A?{position:p.trackerToWorld(A,T.current)}:null},[]),R=o.useMemo(()=>({type:"hand",resolveLandmark:h}),[h]);return M.jsx(Z.TrackerContext.Provider,{value:R,children:M.jsx("group",{ref:u,renderOrder:ue.RENDER_LAYERS.TRACKED,children:e})})},Mt={"hand.wrist":0,"hand.thumbTip":4,"hand.indexTip":8,"hand.middleTip":12,"hand.ringTip":16,"hand.pinkyTip":20,"hand.indexBase":5,"hand.middleBase":9,"hand.ringBase":13,"hand.pinkyBase":17},Lt=({children:e,targetFps:r,active:t=!0})=>{const n=o.useRef(null),s=o.useMemo(()=>r===void 0?void 0:{targetFps:r},[r]),{ready:u,node:l}=q.useXRModel(p.XRModel.GESTURE_TRACKER,s,t),{camera:a}=b.useThree(),i=o.useRef(a);i.current!==a&&(i.current=a);const c=o.useRef(null);b.useFrame(()=>{var O;if(!u||!l||!n.current)return;c.current=l;const h=(O=l==null?void 0:l.coordinates)==null?void 0:O[0];if(!h){n.current.visible=!1;return}const R=p.trackerToWorld(h,i.current);n.current.visible=!0,n.current.position.copy(R)});const T=o.useCallback(h=>{var S,A;const R=Mt[h];if(R===void 0)return null;const O=(A=(S=c.current)==null?void 0:S.coordinates)==null?void 0:A[R];return O?{position:p.trackerToWorld(O,i.current)}:null},[]),f=o.useMemo(()=>({type:"hand",resolveLandmark:T}),[T]);return M.jsx(Z.TrackerContext.Provider,{value:f,children:M.jsx("group",{ref:n,renderOrder:ue.RENDER_LAYERS.TRACKED,children:e})})},Ft=({joint:e,along:r=.5,offset:t,children:n})=>{const s=o.useContext(E.HandRigContext),u=o.useRef(null),l=o.useMemo(()=>({transform:{position:new X.Vector3,quaternion:new X.Quaternion},offsetE:new X.Euler,offsetQ:new X.Quaternion,offsetP:new X.Vector3}),[]);b.useFrame(()=>{var h,R,O,S,A,d;const c=u.current;if(!c||!s)return;const{position:T,quaternion:f}=le.handAttachmentLocal(s,e,r,l.transform);l.offsetQ.setFromEuler(l.offsetE.set(((h=t==null?void 0:t.rotation)==null?void 0:h[0])??0,((R=t==null?void 0:t.rotation)==null?void 0:R[1])??0,((O=t==null?void 0:t.rotation)==null?void 0:O[2])??0)),l.offsetP.set(((S=t==null?void 0:t.position)==null?void 0:S[0])??0,((A=t==null?void 0:t.position)==null?void 0:A[1])??0,((d=t==null?void 0:t.position)==null?void 0:d[2])??0),c.position.copy(T).add(l.offsetP.applyQuaternion(f)),c.quaternion.copy(f).multiply(l.offsetQ),c.scale.setScalar((t==null?void 0:t.scale)??1)});const a=!s;if(o.useEffect(()=>{a&&console.warn(`${p.libConfig.loggerPrefix} HandAttachment must be inside a HandRig or HandOccluder`)},[a]),!s)return null;const i=s.bones[e];return i?b.createPortal(M.jsx("group",{ref:u,children:n}),i):null},se=10,J=[0,1,5,9,13,17],bt=-.5,Le=J.length+j.HAND_JOINTS_2D_BONES.length*2+21*se+2+se,ze=(e,r,{inflate:t=1,forearm:n=1.4},s,u=0)=>{let l=u;const a=(m,D)=>{s[l*2]=m,s[l*2+1]=D,l+=1},i=m=>e[m].x*r,c=m=>e[m].y,T=Math.hypot(i(0)-i(9),c(0)-c(9)),f=.12*T*t;let h=0,R=0;for(const m of J)h+=i(m),R+=c(m);h/=J.length,R/=J.length;for(let m=0;m<J.length;m+=1){const D=J[m],y=J[(m+1)%J.length];a(h/r,R),a(i(D)/r,c(D)),a(i(y)/r,c(y))}const O=(m,D,y,g,v)=>{const B=y-m,L=g-D,N=Math.hypot(B,L)||1,k=-L/N*v,w=B/N*v;a((m+k)/r,D+w),a((y+k)/r,g+w),a((y-k)/r,g-w),a((m+k)/r,D+w),a((y-k)/r,g-w),a((m-k)/r,D-w)},S=(m,D,y)=>{for(let g=0;g<se;g+=1){const v=g/se*Math.PI*2,B=(g+1)/se*Math.PI*2;a(m/r,D),a((m+Math.cos(v)*y)/r,D+Math.sin(v)*y),a((m+Math.cos(B)*y)/r,D+Math.sin(B)*y)}};for(const[m,D]of j.HAND_JOINTS_2D_BONES){const y=m===0?f*1.4:f;O(i(m),c(m),i(D),c(D),y)}for(let m=0;m<21;m+=1)S(i(m),c(m),m===0?f*1.6:f);const A=i(0)-i(9),d=c(0)-c(9),_=Math.hypot(A,d)||1,F=n*T,C=i(0)+A/_*F,H=c(0)+d/_*F;if(n>0){const m=f*2,D=-d/_*m,y=A/_*m;a((i(0)+D)/r,c(0)+y),a((C+D)/r,H+y),a((C-D)/r,H-y),a((i(0)+D)/r,c(0)+y),a((C-D)/r,H-y),a((i(0)-D)/r,c(0)-y),S(C,H,m)}else for(let m=0;m<(2+se)*3;m+=1)a(i(0)/r,c(0));return l-u},De=2,Ht=`
|
|
2
|
+
void main() {
|
|
3
|
+
// On the near plane: in front of everything drawn after it.
|
|
4
|
+
gl_Position = vec4(position.xy, -1.0, 1.0);
|
|
5
|
+
}
|
|
6
|
+
`,vt=`
|
|
7
|
+
void main() {
|
|
8
|
+
gl_FragColor = vec4(1.0, 0.2, 0.8, 0.35);
|
|
9
|
+
}
|
|
10
|
+
`,xt=()=>new X.ShaderMaterial({name:"HandCutout",vertexShader:Ht,fragmentShader:vt,depthTest:!0,depthFunc:X.AlwaysDepth,depthWrite:!0,colorWrite:!1,side:X.DoubleSide}),kt=({inflate:e=1,forearm:r=1.4,debug:t=!1,renderOrder:n=-900})=>{const s=ce.useXRModelNode(p.XRModel.HAND_TRACKER),u=b.useThree(h=>h.size),l=b.useThree(h=>h.scene),a=o.useMemo(()=>{const h=new X.BufferGeometry,R=new X.BufferAttribute(new Float32Array(De*Le*3*3),3);return R.setUsage(X.DynamicDrawUsage),h.setAttribute("position",R),h.setDrawRange(0,0),h},[]);o.useEffect(()=>()=>a.dispose(),[a]),o.useEffect(()=>I.registerHandCutoutShape(l,a),[l,a]);const i=o.useMemo(xt,[]);o.useEffect(()=>()=>i.dispose(),[i]),o.useEffect(()=>{i.colorWrite=t,i.transparent=t,i.needsUpdate=!0},[i,t]);const c=o.useMemo(()=>new Float32Array(De*Le*3*2),[]),T=o.useRef(null);o.useEffect(()=>{const h=T.current;if(!(!h||t))return h.layers.enable(I.MADE_UP_CAMERA_LAYER),()=>h.layers.disable(I.MADE_UP_CAMERA_LAYER)},[t]);const f=o.useRef({inflate:e,forearm:r});return f.current={inflate:e,forearm:r},b.useFrame(()=>{const h=(s==null?void 0:s.hands)??[],R=u.width/Math.max(1,u.height);let O=0;for(const d of h.slice(0,De)){const _=d.coordinates;!_||_.length<21||(O+=ze(_,R,f.current,c,O))}const S=a.getAttribute("position"),A=S.array;for(let d=0;d<O;d+=1)A[d*3]=c[d*2],A[d*3+1]=c[d*2+1],A[d*3+2]=0;S.needsUpdate=!0,a.setDrawRange(0,O)},bt),M.jsx("group",{children:M.jsx("mesh",{ref:T,geometry:a,material:i,renderOrder:n,frustumCulled:!1})})},Ie={hovered:!1,grabbed:!1,hand:null},Pt=1.08,Ut=({shape:e="sphere",size:r=.4,position:t,velocity:n,mass:s,bounce:u,grabbable:l=!0,pushable:a=!0,gravity:i=!0,color:c="#f97316",onGrab:T,onRelease:f,onTap:h,onTouch:R,onHoverChange:O,children:S})=>{const A=o.useContext(E.HandTouchContext),d=o.useRef(null),[_,F]=o.useState(Ie),[C,H]=o.useState(null),m={onGrab:T,onRelease:f,onTap:h,onTouch:R,onHoverChange:O},D=o.useRef(m);D.current=m;const y=o.useRef(L=>{var k,w,x,P,Q,W;const N=D.current;switch(L.type){case"grab":F({hovered:!1,grabbed:!0,hand:L.hand}),(k=N.onGrab)==null||k.call(N,L);break;case"release":F(Ie),(w=N.onRelease)==null||w.call(N,L);break;case"hoverstart":F(U=>U.grabbed?U:{hovered:!0,grabbed:!1,hand:L.hand}),(x=N.onHoverChange)==null||x.call(N,!0,L.hand);break;case"hoverend":F(U=>U.grabbed?U:Ie),(P=N.onHoverChange)==null||P.call(N,!1,L.hand);break;case"tap":(Q=N.onTap)==null||Q.call(N,L);break;case"touch":(W=N.onTouch)==null||W.call(N,L);break}}),g=o.useRef({shape:e,size:r,position:t,velocity:n,mass:s,bounce:u,grabbable:l,pushable:a,gravity:i});o.useEffect(()=>{const L=d.current;if(!A||!L)return;const N=A.world.add(g.current);L.position.copy(N.position);const k=A.register(N,{object:L,onEvent:y});return H(N),()=>{k(),A.world.remove(N),H(null)}},[A]),o.useEffect(()=>{C&&(C.shape=e,C.size=Math.max(1e-4,r),C.radius=C.size/2,C.mass=Math.max(1e-6,s??C.size**3),C.bounce=u,C.grabbable=l,C.pushable=a,C.gravity=i)},[C,e,r,s,u,l,a,i]);const v=!A;o.useEffect(()=>{v&&console.warn(`${p.libConfig.loggerPrefix} Touchable must be inside a HandTouch`)},[v]);const B=S===void 0?M.jsx(wt,{shape:e,size:r,color:c,state:_}):typeof S=="function"?S(_):S;return M.jsx("group",{ref:d,children:M.jsx("group",{scale:_.grabbed?Pt:1,children:B})})},wt=({shape:e,size:r,color:t,state:n})=>M.jsxs("mesh",{children:[e==="box"?M.jsx("boxGeometry",{args:[r,r,r]}):M.jsx("sphereGeometry",{args:[r/2,32,20]}),M.jsx("meshStandardMaterial",{color:t,emissive:t,emissiveIntensity:n.grabbed?.45:n.hovered?.25:0,roughness:.45,metalness:.05})]}),Te={leftShoulder:11,rightShoulder:12,leftWrist:15,rightWrist:16},Bt=0,Gt=[[5,8],[9,12],[13,16],[17,20]],_e={smile:.3,mouthOpen:.25,minVisibility:.5,fingerExtension:1.25},Je=()=>({facePresent:!1,leftHandPresent:!1,rightHandPresent:!1,posePresent:!1,smile:0,mouthOpen:0,smiling:!1,mouthIsOpen:!1,leftHandRaised:!1,rightHandRaised:!1,leftPalmOpen:!1,rightPalmOpen:!1,greeting:null}),je=(e,r)=>Math.hypot(e.x-r.x,e.y-r.y),Fe=(e,r=_e.fingerExtension)=>{if(!e||e.landmarks.length<21)return!1;const t=e.landmarks[Bt];let n=0;for(const[s,u]of Gt){const l=je(e.landmarks[s],t),a=je(e.landmarks[u],t);l>0&&a>=l*r&&(n+=1)}return n>=3},be=(e,r,t=_e.minVisibility)=>{const{pose:n}=e;if(!n||n.landmarks.length<33)return!1;const s=r==="left"?Te.leftWrist:Te.rightWrist,u=r==="left"?Te.leftShoulder:Te.rightShoulder;return n.visibility[s]<t||n.visibility[u]<t?!1:n.landmarks[s].y>n.landmarks[u].y},jt=(e,r={},t=Je())=>{const n={..._e,...r},{face:s,leftHand:u,rightHand:l,pose:a}=e;t.facePresent=s!==null,t.leftHandPresent=u!==null,t.rightHandPresent=l!==null,t.posePresent=a!==null;const i=s==null?void 0:s.blendshapes;return t.smile=i?((i.mouthSmileLeft??0)+(i.mouthSmileRight??0))/2:0,t.mouthOpen=(i==null?void 0:i.jawOpen)??0,t.smiling=s!==null&&t.smile>=n.smile,t.mouthIsOpen=s!==null&&t.mouthOpen>=n.mouthOpen,t.leftHandRaised=be(e,"left",n.minVisibility),t.rightHandRaised=be(e,"right",n.minVisibility),t.leftPalmOpen=Fe(u,n.fingerExtension),t.rightPalmOpen=Fe(l,n.fingerExtension),t.smiling&&t.rightHandRaised&&t.rightPalmOpen?t.greeting="right":t.smiling&&t.leftHandRaised&&t.leftPalmOpen?t.greeting="left":t.greeting=null,t},Kt={node:null,ready:!1,status:"loading",error:null},$e=o.createContext(null),Qe=()=>o.useContext($e)??Kt,Ke=(e,r)=>r?"error":e?e.getStatus():"loading",Yt=({children:e,active:r=!0,onStatusChange:t,modelUrl:n,delegate:s,minFaceDetectionConfidence:u,minFacePresenceConfidence:l,minPoseDetectionConfidence:a,minPosePresenceConfidence:i,minHandLandmarksConfidence:c,outputFaceBlendshapes:T,targetFps:f,hands:h,analysisMaxDimension:R,holdMs:O,predictMs:S})=>{const A=o.useMemo(()=>{const g={};return n!==void 0&&(g.modelUrl=n),s!==void 0&&(g.delegate=s),u!==void 0&&(g.minFaceDetectionConfidence=u),l!==void 0&&(g.minFacePresenceConfidence=l),a!==void 0&&(g.minPoseDetectionConfidence=a),i!==void 0&&(g.minPosePresenceConfidence=i),c!==void 0&&(g.minHandLandmarksConfidence=c),T!==void 0&&(g.outputFaceBlendshapes=T),f!==void 0&&(g.targetFps=f),Object.keys(g).length>0?g:void 0},[s,u,l,c,a,i,n,T,f]),{ready:d,node:_,error:F}=q.useXRModel(p.XRModel.HOLISTIC_TRACKER,A,r);o.useEffect(()=>{_&&_.setOptions(p.resolveHolisticRuntimeOptions({hands:h,analysisMaxDimension:R,holdMs:O,predictMs:S}))},[_,h,R,O,S]);const[C,H]=o.useState(()=>Ke(_,F)),m=o.useRef(C),D=o.useRef(t);D.current=t,b.useFrame(()=>{var v;const g=Ke(_,F);g!==m.current&&(m.current=g,H(g),(v=D.current)==null||v.call(D,g,F??(_==null?void 0:_.getError())??null))});const y=o.useMemo(()=>({node:_,ready:d&&C==="ready",status:C,error:F??(_==null?void 0:_.getError())??null}),[_,d,C,F]);return M.jsx($e.Provider,{value:y,children:e})},Xt=()=>{const{camera:e}=b.useThree(),r=o.useRef(e);return r.current!==e&&(r.current=e),r},ve=(e,r)=>{const t=o.useRef(null),{node:n,ready:s}=Qe(),u=Xt();return b.useFrame(()=>{const l=t.current;if(!l)return;const a=s&&n?e(n.getResult()):null;if(!a){l.visible=!1;return}l.visible=!0,l.position.copy(r(a,u.current))}),{groupRef:t,cameraRef:u,node:n}},Ze=({children:e})=>{const r=o.useRef({x:0,y:0,z:0,visibility:0}),t=ce.useXRMirrored(),{groupRef:n,cameraRef:s,node:u}=ve(i=>{var c;return((c=i.face)==null?void 0:c.landmarks[4])??null},(i,c)=>p.feedToWorld(i,c)),l=o.useCallback((i,c)=>{var h;const T=(h=u==null?void 0:u.getResult().face)==null?void 0:h.landmarks;if(!T||T.length===0)return null;const f=q.resolveFaceAnchorPoint(i,T,c,r.current,t);return f?{position:p.feedToWorld(f,s.current)}:null},[s,u,t]),a=o.useMemo(()=>({type:"face",resolveLandmark:l}),[l]);return M.jsx(Z.TrackerContext.Provider,{value:a,children:M.jsx("group",{ref:n,renderOrder:ue.RENDER_LAYERS.TRACKED,visible:!1,children:e})})};Ze.displayName="HolisticTracker.Face";const et=({hand:e,children:r})=>{const t=o.useCallback(i=>e==="left"?i.leftHand:i.rightHand,[e]),{groupRef:n,cameraRef:s,node:u}=ve(i=>{var c;return((c=t(i))==null?void 0:c.landmarks[0])??null},p.trackerToWorld),l=o.useCallback(i=>{var f;const c=Ve[i];if(c===void 0||!u)return null;const T=(f=t(u.getResult()))==null?void 0:f.landmarks[c];return T?{position:p.trackerToWorld(T,s.current)}:null},[s,u,t]),a=o.useMemo(()=>({type:"hand",resolveLandmark:l}),[l]);return M.jsx(Z.TrackerContext.Provider,{value:a,children:M.jsx("group",{ref:n,renderOrder:ue.RENDER_LAYERS.TRACKED,visible:!1,children:r})})};et.displayName="HolisticTracker.Hand";const tt=({children:e})=>{const{groupRef:r,cameraRef:t,node:n}=ve(l=>{var a;return((a=l.pose)==null?void 0:a.landmarks[0])??null},p.trackerToWorld),s=o.useCallback(l=>{var T;const a=(T=n==null?void 0:n.getResult().pose)==null?void 0:T.landmarks;if(!a)return null;if(l==="body.neck"){const f=a[11],h=a[12];if(!f||!h)return null;const R={x:(f.x+h.x)/2,y:(f.y+h.y)/2,z:(f.z+h.z)/2};return{position:p.trackerToWorld(R,t.current)}}const i=I.BODY_LANDMARK_INDEX[l];if(i===void 0)return null;const c=a[i];return c?{position:p.trackerToWorld(c,t.current)}:null},[t,n]),u=o.useMemo(()=>({type:"body",resolveLandmark:s}),[s]);return M.jsx(Z.TrackerContext.Provider,{value:u,children:M.jsx("group",{ref:r,renderOrder:ue.RENDER_LAYERS.TRACKED,visible:!1,children:e})})};tt.displayName="HolisticTracker.Body";const me=Yt;me.Face=Ze;me.Hand=et;me.Body=tt;const Wt=({type:e,active:r=!0,children:t})=>(q.useXRModel(p.XRModel.BACKGROUND_SEGMENTATION,{type:e},r),o.useEffect(()=>{Ee.SEGMENTATION_TYPES.includes(e)||console.warn(`[Segmentation] unsupported type "${e}"; valid values: ${Ee.SEGMENTATION_TYPES.join(", ")}`)},[e]),M.jsx(M.Fragment,{children:t})),Vt=800,qt=200,zt=()=>({armed:!1,armStart:null,holdStart:null,fired:!1}),Jt=(e,{isTrigger:r,gesture:t,now:n,mode:s,debounceMs:u,holdMs:l})=>{if(e.fired)return null;if(s==="hold"){if(r&&t){if(e.holdStart===null&&(e.holdStart=n),n-e.holdStart>=l)return e.fired=!0,t}else e.holdStart=null;return null}return e.armed?r&&t?(e.fired=!0,t):null:(r?e.armStart=null:(e.armStart===null&&(e.armStart=n),n-e.armStart>=u&&(e.armed=!0)),null)};function $t({gestures:e,mode:r="arm",debounceMs:t=Vt,holdMs:n=qt,onTrigger:s,enabled:u=!0}){const{ready:l,node:a}=q.useXRModel(p.XRModel.GESTURE_TRACKER),i=o.useRef(s);o.useEffect(()=>{i.current=s},[s]);const c=o.useRef(new Set);o.useEffect(()=>{c.current=new Set(Array.isArray(e)?e:[e])},[e]);const T=o.useRef(zt());b.useFrame(()=>{if(!u||!l||!a)return;const f=a.gesture,h=!!(f&&c.current.has(f)),R=Jt(T.current,{isTrigger:h,gesture:f,now:performance.now(),mode:r,debounceMs:t,holdMs:n});R&&i.current(R)})}const Qt=e=>($t(e),null),rt=({source:e,face:r,canvas:t,outputSize:n,padding:s=.2})=>Nt.drawNormalizedCrop({source:e,bounds:r.bounds,canvas:t,outputSize:n,padding:s}),Ae=e=>({value:e,confidence:1}),he=(e,r,t,n)=>({name:e,kind:"face",description:r,defaults:n,measure:s=>s?Ae(t(s)):null}),G=(e,r,t,n)=>({name:e,kind:"hand",description:r,defaults:n,measure:s=>s&&s.length>=21?Ae(t(s)):null}),ie=(e,r,t,n)=>({name:e,kind:"body",description:r,defaults:n,measure:(s,u,l,a)=>s&&s.length>=33?Ae(t(s,(a==null?void 0:a.mirrored)??!1)):null}),Ne=e=>()=>({tracker:new E.OscillationTracker(e),wasPresent:!1}),Ce=(e,r,t)=>r===null?(e.wasPresent=!1,null):(e.wasPresent||e.tracker.reset(),e.wasPresent=!0,Ae(e.tracker.push(r,t))),ye={enterThreshold:.99,exitThreshold:.3,cooldownMs:600},xe={mouthOpen:he("mouthOpen","Jaw open (blendshape jawOpen).",e=>I.getFaceActionValue(e,"mouthOpen")),smile:he("smile","Mean of the two mouthSmile blendshapes.",e=>($.getFaceBlendshape(e,"mouthSmileLeft")+$.getFaceBlendshape(e,"mouthSmileRight"))/2,{enterThreshold:.4}),blink:he("blink","Both eyes closed (min of the eyeBlink blendshapes).",e=>I.getFaceActionValue(e,"eyeBlink"),{enterThreshold:.55,holdMs:50}),browRaise:he("browRaise","Eyebrows raised (max of the brow-up blendshapes).",e=>I.getFaceActionValue(e,"browRaise"),{enterThreshold:.45}),headNod:{name:"headNod",kind:"face",description:"Pitch oscillation: three turning points of at least 0.12 rad within 1.5 s.",defaults:ye,createMemory:Ne({minAmplitude:.12,requiredReversals:3,windowMs:1500}),measure:(e,r,t)=>Ce(r,e?e.pose.rotation.x:null,t)},headShake:{name:"headShake",kind:"face",description:"Yaw oscillation: three turning points of at least 0.15 rad within 1.5 s.",defaults:ye,createMemory:Ne({minAmplitude:.15,requiredReversals:3,windowMs:1500}),measure:(e,r,t)=>Ce(r,e?e.pose.rotation.y:null,t)},pinch:G("pinch","Thumb and index tips touching, relative to palm size.",E.measurePinch,{enterThreshold:.75,exitThreshold:.5}),grab:G("grab","Fist: index to pinky curled toward the wrist.",E.measureGrab,{enterThreshold:.7,exitThreshold:.45}),openPalm:G("openPalm","Index to pinky extended.",E.measureOpenPalm,{enterThreshold:.7,exitThreshold:.45}),handRaised:G("handRaised","Wrist in the upper part of the frame (0 bottom edge, 1 top edge).",E.measureHandHeight,{enterThreshold:.7,exitThreshold:.6}),oneFinger:G("oneFinger","Index extended, other fingers curled (pointing).",e=>E.measureFingerPattern(e,{fingers:[!0,!1,!1,!1]}),{enterThreshold:.65,exitThreshold:.45}),peaceSign:G("peaceSign","Index and middle extended, ring and pinky curled.",e=>E.measureFingerPattern(e,{fingers:[!0,!0,!1,!1]}),{enterThreshold:.65,exitThreshold:.45}),threeFingers:G("threeFingers","Index, middle and ring extended, pinky curled.",e=>E.measureFingerPattern(e,{fingers:[!0,!0,!0,!1]}),{enterThreshold:.65,exitThreshold:.45}),fourFingers:G("fourFingers","Index to pinky extended, thumb tucked.",e=>E.measureFingerPattern(e,{fingers:[!0,!0,!0,!0],thumb:!1}),{enterThreshold:.65,exitThreshold:.45}),fist:G("fist","All four fingers curled and the thumb tucked.",e=>E.measureFingerPattern(e,{fingers:[!1,!1,!1,!1],thumb:!1}),{enterThreshold:.65,exitThreshold:.45}),palm:G("palm","All four fingers extended and the thumb out.",e=>E.measureFingerPattern(e,{fingers:[!0,!0,!0,!0],thumb:!0}),{enterThreshold:.65,exitThreshold:.45}),thumbUp:G("thumbUp","Thumb out and pointing up, fingers curled.",e=>E.measureThumb(e,"up"),{enterThreshold:.6,exitThreshold:.4}),thumbDown:G("thumbDown","Thumb out and pointing down, fingers curled.",e=>E.measureThumb(e,"down"),{enterThreshold:.6,exitThreshold:.4}),wave:{name:"wave",kind:"hand",description:"Wrist swinging side to side: three turning points of at least 0.08 within 1.2 s.",defaults:ye,createMemory:Ne({minAmplitude:.08,requiredReversals:3,windowMs:1200}),measure:(e,r,t)=>Ce(r,e&&e.length>=21?e[0].x:null,t)},armRaisedLeft:ie("armRaisedLeft","Person's own left wrist above their left shoulder, in shoulder widths, on every feed.",(e,r)=>E.measureArmRaise(e,"left",r),{enterThreshold:.3,exitThreshold:.15}),armRaisedRight:ie("armRaisedRight","Person's own right wrist above their right shoulder, in shoulder widths, on every feed.",(e,r)=>E.measureArmRaise(e,"right",r),{enterThreshold:.3,exitThreshold:.15}),armRaised:ie("armRaised","Either wrist above its shoulder.",e=>Math.max(E.measureArmRaise(e,"left"),E.measureArmRaise(e,"right")),{enterThreshold:.3,exitThreshold:.15}),bothArmsRaised:ie("bothArmsRaised","Both wrists above their shoulders.",e=>Math.min(E.measureArmRaise(e,"left"),E.measureArmRaise(e,"right")),{enterThreshold:.3,exitThreshold:.15}),tPose:ie("tPose","Both arms level and outstretched.",E.measureTPose,{enterThreshold:.6,exitThreshold:.4,holdMs:150})},Zt=Object.keys(xe),nt=e=>typeof e=="string"?xe[e]:e,er=e=>e,tr={face:p.XRModel.FACE_TRACKER,hand:p.XRModel.HAND_TRACKER,body:p.XRModel.BODY_TRACKER},Ye=e=>Y.snapshotGestureState(Y.createGestureDetectorState(e)),st=(e,r={})=>{var w;const t=o.useMemo(()=>nt(e),[e]),{active:n=!0,faceIndex:s=0,numFaces:u,hand:l,handIndex:a=0,bodyIndex:i=0,targetFps:c,onBegin:T,onEnd:f,onChange:h,...R}=r,O=tr[t.kind],S=Math.max(u??s+1,s+1),A=o.useMemo(()=>{const x={};return t.kind==="face"&&(x.numFaces=S),c!==void 0&&c>0&&(x.targetFps=c),Object.keys(x).length>0?x:void 0},[t.kind,S,c]),{node:d,ready:_}=q.useXRModel(O,A,n),{camera:F}=b.useThree();o.useEffect(()=>{!d||t.kind!=="face"||d.setCamera(F,s)},[F,t.kind,s,d]);const C=o.useMemo(()=>Y.resolveGestureDetectorOptions(R,Y.resolveGestureDetectorOptions(t.defaults)),[t,R.enterThreshold,R.exitThreshold,R.holdMs,R.cooldownMs,R.minConfidence,R.lostGraceMs]),H=o.useRef(Y.createGestureDetectorState(t.name)),m=o.useRef((w=t.createMemory)==null?void 0:w.call(t)),D=o.useRef($.createFaceInfoTarget()),[y,g]=o.useState(()=>Ye(t.name)),v=o.useRef(y);o.useEffect(()=>{var P;H.current=Y.createGestureDetectorState(t.name),m.current=(P=t.createMemory)==null?void 0:P.call(t);const x=Ye(t.name);v.current=x,g(x)},[t]);const B=o.useRef({onBegin:T,onEnd:f,onChange:h});B.current={onBegin:T,onEnd:f,onChange:h};const L=ce.useXRMirrored(),N=o.useRef({mirrored:L});N.current.mirrored=L;const k=o.useRef({faceIndex:s,hand:l,handIndex:a,bodyIndex:i,active:n});return k.current={faceIndex:s,hand:l,handIndex:a,bodyIndex:i,active:n},b.useFrame(()=>{var re;const x=performance.now(),P=k.current;let Q=null;if(P.active&&_&&d){let z;t.kind==="face"?z=$.getFaceInfo(d,P.faceIndex,D.current):t.kind==="hand"?z=(re=qe(d,P.hand,P.handIndex))==null?void 0:re.coordinates:z=d.getLandmarks2D(P.bodyIndex),Q=t.measure(z,m.current,x,N.current)}const W=Y.stepGestureDetector(H.current,Q,x,C);if(Y.gestureStatesEqual(v.current,W))return;const U=Y.snapshotGestureState(W);v.current=U,g(U);const{onBegin:V,onEnd:te,onChange:K}=B.current;U.justBegan&&(V==null||V(U)),U.justEnded&&(te==null||te(U)),K==null||K(U)}),y},rr=({gesture:e,...r})=>(st(e,r),null),Xe=new WeakMap,nr=(e,r)=>{const{visibility:t,mirrored:n,aspect:s,shapeLimits:u,view:l}=r;if(u||l)return E.createBodyMoveFrame(e,{mirrored:n,visibility:t,aspect:s,limits:u,view:l});const a=Xe.get(e);if(a&&a.mirrored===n&&a.aspect===s)return a;const i=E.createBodyMoveFrame(e,{mirrored:n,visibility:t,aspect:s});return Xe.set(e,i),i},sr=e=>{if(!e)return;const r={};let t=!1;for(const n of Object.keys(e))n in le.BODY_SHAPE_LIMITS&&e[n]!==void 0&&(r[n]=e[n],t=!0);return t?r:void 0},ot=e=>{const{pose:r,move:t,bodyIndex:n=0,active:s=!0,targetFps:u,limits:l,view:a,onBegin:i,onEnd:c,onChange:T,...f}=e,h=t!==void 0?{move:t}:{pose:r},R=t!==void 0?`move:${typeof t=="string"?t:t.name}`:`pose:${It.specKey(r)}`,O=o.useMemo(()=>u!==void 0&&u>0?{targetFps:u}:void 0,[u]),{node:S,ready:A}=q.useXRModel(p.XRModel.BODY_TRACKER,O,s),d=ce.useXRMirrored(),_=ce.useXRFeedAspect(),F=JSON.stringify(l??null),C=o.useMemo(()=>sr(l),[F]),H=JSON.stringify(a??null),m=o.useMemo(()=>a,[H]),D=JSON.stringify(f)+F,y={...f,limits:l},g=o.useRef(null),v=o.useRef("");(g.current===null||v.current!==R)&&(g.current=E.createBodyTrigger(h,y),v.current=R),t!==void 0?g.current.move=E.resolveBodyMove(t):g.current.pose=r;const[B,L]=o.useState(()=>E.snapshotBodyTriggerState(g.current)),N=o.useRef(B);o.useEffect(()=>{const P=E.snapshotBodyTriggerState(g.current);N.current=P,L(P)},[R]),o.useEffect(()=>{g.current&&E.setBodyTriggerOptions(g.current,h,y)},[D]);const k=o.useRef({onBegin:i,onEnd:c,onChange:T});k.current={onBegin:i,onEnd:c,onChange:T};const w=o.useRef(null),x=o.useRef(null);return b.useFrame(()=>{var we;const P=g.current;if(!P)return;const Q=performance.now();let W=null,U=!0;const V=s&&A&&S?S.getLandmarks2D(n):void 0;V&&V.length>=le.BODY_LANDMARK_COUNT?(U=V!==w.current||!x.current,W=U?nr(V,{visibility:(we=S==null?void 0:S.getVisibility)==null?void 0:we.call(S,n),mirrored:d,aspect:_,shapeLimits:C,view:m}):x.current,w.current=V,x.current=W):(w.current=null,x.current=null);const te=E.stepBodyTrigger(P,W,Q,U);if(E.bodyTriggerStatesEqual(N.current,te))return;const K=E.snapshotBodyTriggerState(te);N.current=K,L(K);const{onBegin:re,onEnd:z,onChange:pe}=k.current;K.justBegan&&(re==null||re(K)),K.justEnded&&(z==null||z(K)),pe==null||pe(K)}),B},or=e=>(ot(e),null),Oe=1,ge=Object.freeze({version:Oe,orientation:0,mirrored:"auto",scale:1,offset:Object.freeze({x:0,y:0}),face:null,body:null,updatedAt:0}),at=(e={})=>de(ge,e,0),ar=[0,90,180,270],ir=e=>Math.min(4,Math.max(.25,e)),de=(e,r,t=Date.now())=>({version:Oe,orientation:r.orientation!==void 0&&ar.includes(r.orientation)?r.orientation:e.orientation,mirrored:r.mirrored===!0||r.mirrored===!1||r.mirrored==="auto"?r.mirrored:e.mirrored,scale:r.scale!==void 0&&Number.isFinite(r.scale)&&r.scale>0?ir(r.scale):e.scale,offset:r.offset&&Number.isFinite(r.offset.x)&&Number.isFinite(r.offset.y)?{x:r.offset.x,y:r.offset.y}:{...e.offset},face:r.face!==void 0?r.face:e.face,body:r.body!==void 0?r.body:e.body,updatedAt:t}),it=(e=Date.now())=>de(ge,{},e),cr=e=>e.orientation===0&&e.mirrored==="auto"&&e.scale===1&&e.offset.x===0&&e.offset.y===0,ct=(e,r)=>e.mirrored==="auto"?!1:e.mirrored!==p.isMirroredSourceKind(r),ut=(e,r,t,n={x:0,y:0})=>{let{x:s,y:u}=e;switch(r.orientation){case 90:[s,u]=[1-u,s];break;case 180:[s,u]=[1-s,1-u];break;case 270:[s,u]=[u,1-s];break}return ct(r,t)&&(s=1-s),s=.5+(s-.5)*r.scale+r.offset.x,u=.5+(u-.5)*r.scale+r.offset.y,n.x=s,n.y=u,e.z!==void 0&&(n.z=e.z),n},Re=(e,r)=>e&&r?Math.hypot(e.x-r.x,e.y-r.y):null,lt=Object.freeze({leftTemple:454,rightTemple:234,leftEyeOuter:263,rightEyeOuter:33}),ke=(e,r=Date.now())=>{if(!e||e.length<468)return null;const{leftTemple:t,rightTemple:n,leftEyeOuter:s,rightEyeOuter:u}=lt,l=Re(e[t],e[n]),a=Re(e[s],e[u]);return!l||!a?null:{faceWidth:l,eyeDistance:a,capturedAt:r}},dt=Object.freeze({leftShoulder:11,rightShoulder:12,leftHip:23,rightHip:24}),Pe=(e,r=Date.now())=>{if(!e||e.length<33)return null;const{leftShoulder:t,rightShoulder:n,leftHip:s,rightHip:u}=dt,l=Re(e[t],e[n]),a=Re(e[s],e[u]),i=e[t],c=e[n],T=e[s],f=e[u];if(!l||!a||!i||!c||!T||!f)return null;const h=Math.hypot((i.x+c.x)/2-(T.x+f.x)/2,(i.y+c.y)/2-(T.y+f.y)/2);return{shoulderWidth:l,hipWidth:a,torsoLength:h,capturedAt:r}},ft=(e,r)=>{const t=r.face,n=ke(e,0);return!t||!n?null:t.faceWidth>0&&n.faceWidth>0?n.faceWidth/t.faceWidth:t.eyeDistance>0&&n.eyeDistance>0?n.eyeDistance/t.eyeDistance:null},Tt=(e,r)=>{const t=r.body,n=Pe(e,0);return!t||!n||t.shoulderWidth<=0?null:n.shoulderWidth/t.shoulderWidth},fe="vincentt.xr.calibration",Ue=()=>{try{return typeof localStorage<"u"?localStorage:null}catch{return null}},ht=(e=fe,r=Ue())=>{if(!r)return null;try{const t=r.getItem(e);if(!t)return null;const n=JSON.parse(t);return!n||typeof n!="object"||n.version!==Oe?null:de(ge,{orientation:n.orientation,mirrored:n.mirrored,scale:n.scale,offset:n.offset,face:n.face??null,body:n.body??null},typeof n.updatedAt=="number"?n.updatedAt:0)}catch{return null}},Et=(e,r=fe,t=Ue())=>{if(!t)return!1;try{return t.setItem(r,JSON.stringify(e)),!0}catch{return!1}},Rt=(e=fe,r=Ue())=>{if(r)try{r.removeItem(e)}catch{}},ur=(e={})=>{const{storageKey:r=fe,persist:t=!0}=e,n=e.storage===void 0?void 0:e.storage,s=o.useRef(e.initial),{session:u}=p.useXRContext(),l=o.useSyncExternalStore(d=>u.store.subscribe(d),()=>u.store.getSnapshot().sourceKind,()=>{}),[a,i]=o.useState(()=>at(s.current)),[c,T]=o.useState(!t),f=o.useRef(a);f.current=a,o.useEffect(()=>{if(!t){T(!0);return}const d=ht(r,n);d&&(f.current=d,i(d)),T(!0)},[t,r,n]);const h=o.useCallback(d=>(f.current=d,i(d),t&&Et(d,r,n),d),[t,r,n]),R=o.useCallback(d=>h(de(f.current,d)),[h]),O=o.useCallback(()=>{const d=it();return f.current=d,i(d),t&&Rt(r,n),d},[t,r,n]),S=o.useCallback(d=>{const _=ke(d);return _?(R({face:_}),!0):!1},[R]),A=o.useCallback(d=>{const _=Pe(d);return _?(R({body:_}),!0):!1},[R]);return o.useMemo(()=>({calibration:a,hydrated:c,update:R,reset:O,calibrateFace:S,calibrateBody:A,applyToFeedPoint:(d,_)=>ut(d,a,l,_),faceDistance:d=>ft(d,a),bodyScale:d=>Tt(d,a),sourceKind:l}),[a,c,R,O,S,A,l])},lr=(e,r)=>r&&!e?"begin":!r&&e?"end":r?"stay":"none",dr={face:null,faces:[],faceCount:0,detected:!1,justDetected:!1,justLost:!1,phase:"none"},fr=({faceIndex:e=0,numFaces:r,...t}={})=>{const n=Number.isFinite(e)?Math.max(0,Math.round(e)):0,s=Se.useFaceInfos({...t,numFaces:Math.max(r??n+1,n+1)}),u=o.useRef([]),l=o.useRef(n),a=o.useRef({detected:!1,faceIndex:n}),[i,c]=o.useState(dr),T=o.useRef(i);return o.useEffect(()=>{u.current=s,l.current=n},[s,n]),b.useFrame(()=>{const f=u.current,h=l.current,R=f[h]??null,O=!!R,S=a.current.faceIndex===h&&a.current.detected,A=lr(S,O);a.current={detected:O,faceIndex:h};const d={face:R,faces:f,faceCount:f.length,detected:O,justDetected:A==="begin",justLost:A==="end",phase:A},_=T.current;_.face===d.face&&_.faces===d.faces&&_.faceCount===d.faceCount&&_.detected===d.detected&&_.justDetected===d.justDetected&&_.justLost===d.justLost&&_.phase===d.phase||(T.current=d,c(d))}),i},We=e=>({action:e,active:!1,value:0,justStarted:!1,justEnded:!1,phase:"none"}),Tr=(e,r,t={})=>{const n=o.useRef(I.createFaceActionStepState(r)),s=o.useRef(null),u=o.useRef(r),l=o.useRef({}),[a,i]=o.useState(()=>We(r)),c=o.useRef(a);return o.useEffect(()=>{s.current=e,l.current=t},[e,t]),o.useEffect(()=>{u.current=r,n.current=I.createFaceActionStepState(r);const T=We(r);c.current=T,i(T)},[r]),b.useFrame(({clock:T})=>{const f=s.current,h=u.current,R=l.current,O=f?I.getFaceActionValue(f,h,R):0,S=I.stepFaceActionState(n.current,O,T.elapsedTime*1e3,!!f,I.resolveFaceActionOptions(h,R)),A=c.current;if(A.action===S.action&&A.active===S.active&&A.value===S.value&&A.justStarted===S.justStarted&&A.justEnded===S.justEnded&&A.phase===S.phase)return;const d={action:S.action,active:S.active,value:S.value,justStarted:S.justStarted,justEnded:S.justEnded,phase:S.phase};c.current=d,i(d)}),a},hr=["angry","disgust","fear","happy","neutral","sad","surprise","unknown"],ne=["angry","disgust","fear","happy","neutral","sad","surprise"],Er=(e,r=.55)=>{let t=-1/0;for(let c=0;c<ne.length;c+=1)t=Math.max(t,Number(e[c])||0);const n=new Array(ne.length);let s=0;for(let c=0;c<ne.length;c+=1){const T=Math.exp((Number(e[c])||0)-t);n[c]=T,s+=T}const u=Object.fromEntries(ne.map(c=>[c,0]));let l="unknown",a=0;for(let c=0;c<ne.length;c+=1){const T=s?n[c]/s:0,f=ne[c];u[f]=T,T>a&&(l=f,a=T)}const i=Number.isFinite(r)?Math.min(1,Math.max(0,r)):.55;return{expression:a>=i?l:"unknown",confidence:a,scores:u}},Rr=e=>{const r=e.width*e.height,t=new Float32Array(r*3);for(let n=0,s=0;n<r;n+=1,s+=4)t[n]=e.data[s]/127.5-1,t[r+n]=e.data[s+1]/127.5-1,t[r*2+n]=e.data[s+2]/127.5-1;return t},St="https://huggingface.co/opencv/facial_expression_recognition/resolve/main/facial_expression_recognition_mobilefacenet_2022july_int8.onnx",Sr=e=>`https://cdn.jsdelivr.net/npm/onnxruntime-web@${e.env.versions.web}/dist/`,Me=new Map,_r=e=>{let r=Me.get(e);return r||(r=Promise.all([import("onnxruntime-web/wasm"),p.fetchAndVerify(e)]).then(([t,n])=>(t.env.wasm.wasmPaths=Sr(t),t.InferenceSession.create(n,{executionProviders:["wasm"]}))).catch(t=>{throw Me.delete(e),t}),Me.set(e,r)),r},mr=(e,{active:r=!0,targetFps:t=5,minConfidence:n=.55,modelUrl:s=St}={})=>{const{session:u}=p.useXRContext(),l=o.useRef(null),a=o.useRef(null),i=o.useRef(!1),c=o.useRef(-1/0),T=o.useRef(!0),[f,h]=o.useState({status:"idle",result:null,error:null});return o.useEffect(()=>{const R=document.createElement("canvas");return l.current=R,a.current=R.getContext("2d",{willReadFrequently:!0}),T.current=!0,()=>{T.current=!1,l.current=null,a.current=null}},[]),b.useFrame(({clock:R})=>{if(!r||!e||i.current||f.status==="error")return;const O=Number.isFinite(t)&&t>0?t:5,S=R.elapsedTime*1e3;if(S-c.current<1e3/O)return;const A=u.getInputFrame(),d=l.current,_=a.current;if(!A||!d||!_||!rt({source:A,face:e,canvas:d,outputSize:{width:112,height:112}}))return;c.current=S,i.current=!0,f.status==="idle"&&h({status:"loading",result:null,error:null});const F=Rr(_.getImageData(0,0,112,112));Promise.all([import("onnxruntime-web/wasm"),_r(s)]).then(async([C,H])=>{const m=await H.run({[H.inputNames[0]]:new C.Tensor("float32",F,[1,3,112,112])}),D=Er(m[H.outputNames[0]].data,n);T.current&&h({status:"ready",result:D,error:null})}).catch(C=>{T.current&&h({status:"error",result:null,error:C instanceof Error?C:new Error(String(C))})}).finally(()=>{i.current=!1})}),f};exports.FaceMesh=Z.FaceMesh;exports.FaceTracker=Z.FaceTracker;exports.DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION=p.DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION;exports.DEFAULT_HOLISTIC_HOLD_MS=p.DEFAULT_HOLISTIC_HOLD_MS;exports.DEFAULT_HOLISTIC_MODEL_URL=p.DEFAULT_HOLISTIC_MODEL_URL;exports.DEFAULT_HOLISTIC_PREDICT_MS=p.DEFAULT_HOLISTIC_PREDICT_MS;exports.HAND_JOINT_INDEX=p.HAND_JOINT_INDEX;exports.HAND_JOINT_NAMES=p.HAND_JOINT_NAMES;exports.HAND_POSE_DEFAULT_HOLD_MS=p.HAND_POSE_DEFAULT_HOLD_MS;exports.clearSemanticMask=p.clearSemanticMask;exports.createSemanticMask=p.createSemanticMask;exports.normalizedTrackerPointToTrackerPoint=p.normalizedTrackerPointToTrackerPoint;exports.trackerPointToNormalizedTrackerPoint=p.trackerPointToNormalizedTrackerPoint;exports.FACE_LANDMARK_INDICES=q.FACE_LANDMARK_INDICES;exports.BODY_LANDMARK_INDEX=I.BODY_LANDMARK_INDEX;exports.BodyTracker=I.BodyTracker;exports.CANONICAL_SHOULDER_DISTANCE=I.CANONICAL_SHOULDER_DISTANCE;exports.CANONICAL_TORSO_FIT_DEFAULT_SMOOTHING=I.CANONICAL_TORSO_FIT_DEFAULT_SMOOTHING;exports.CANONICAL_TORSO_INDICES=I.CANONICAL_TORSO_INDICES;exports.CANONICAL_TORSO_LANDMARKS=I.CANONICAL_TORSO_LANDMARKS;exports.CANONICAL_TORSO_POINTS=I.CANONICAL_TORSO_POINTS;exports.CanonicalTorsoFrame=I.CanonicalTorsoFrame;exports.DEFAULT_FACE_ACTION_OPTIONS=I.DEFAULT_FACE_ACTION_OPTIONS;exports.FACE_ACTION_NAMES=I.FACE_ACTION_NAMES;exports.FACE_BLENDSHAPE_NAMES=I.FACE_BLENDSHAPE_NAMES;exports.SHOULDER_OCCLUDER_DEFAULT_OPACITY=I.SHOULDER_OCCLUDER_DEFAULT_OPACITY;exports.SHOULDER_OCCLUDER_V1_PATH=I.SHOULDER_OCCLUDER_V1_PATH;exports.SegmentationOverlay=I.SegmentationOverlay;exports.ShoulderOccluder=I.ShoulderOccluder;exports.bodyLandmarkIndex=I.bodyLandmarkIndex;exports.getFaceActionValue=I.getFaceActionValue;exports.getStrongestFaceAction=I.getStrongestFaceAction;exports.hasFaceAction=I.hasFaceAction;exports.shoulderOccluderUrl=I.shoulderOccluderUrl;exports.solveShoulderPose=I.solveShoulderPose;exports.useCanonicalTorsoFit=I.useCanonicalTorsoFit;exports.useIrisTracking=I.useIrisTracking;exports.BODY_MOVES=E.BODY_MOVES;exports.BODY_MOVE_LIMITS=E.BODY_MOVE_LIMITS;exports.BODY_MOVE_NAMES=E.BODY_MOVE_NAMES;exports.BODY_MOVE_VIEW_LIMITS=E.BODY_MOVE_VIEW_LIMITS;exports.FOREARM_OCCLUDER_FLARE=E.FOREARM_OCCLUDER_FLARE;exports.FOREARM_OCCLUDER_LENGTH=E.FOREARM_OCCLUDER_LENGTH;exports.FOREARM_OCCLUDER_OVERLAP=E.FOREARM_OCCLUDER_OVERLAP;exports.ForearmOccluder=E.ForearmOccluder;exports.HAND_OCCLUDER_RENDER_ORDER=E.HAND_OCCLUDER_RENDER_ORDER;exports.HAND_TATTOO_DEFAULT_SIZE=E.HAND_TATTOO_DEFAULT_SIZE;exports.HAND_TATTOO_RENDER_ORDER=E.HAND_TATTOO_RENDER_ORDER;exports.HAND_TOUCH_DEFAULTS=E.HAND_TOUCH_DEFAULTS;exports.HAND_TOUCH_DEPTH=E.HAND_TOUCH_DEPTH;exports.HAND_TOUCH_POINTER_RADIUS=E.HAND_TOUCH_POINTER_RADIUS;exports.HAND_TOUCH_TIPS=E.HAND_TOUCH_TIPS;exports.HandOccluder=E.HandOccluder;exports.HandRig=E.HandRig;exports.HandTattoo=E.HandTattoo;exports.HandTouch=E.HandTouch;exports.TOUCH_WORLD_DEFAULTS=E.TOUCH_WORLD_DEFAULTS;exports.WRIST_DEPTH_OF_WIDTH=E.WRIST_DEPTH_OF_WIDTH;exports.WRIST_WIDTH_OF_PALM=E.WRIST_WIDTH_OF_PALM;exports.WristAttachment=E.WristAttachment;exports.createForearmGeometry=E.createForearmGeometry;exports.defineBodyMove=E.defineBodyMove;exports.resolveBodyMove=E.resolveBodyMove;exports.useFaceResults=E.useFaceResults;exports.useHandTouch=E.useHandTouch;exports.wristSizeOf=E.wristSizeOf;exports.HAND_RIG_REQUIRED_JOINTS=le.HAND_RIG_REQUIRED_JOINTS;exports.handPoseToScene=le.handPoseToScene;exports.DEFAULT_GESTURE_SETTINGS=j.DEFAULT_GESTURE_SETTINGS;exports.DEFAULT_HOLISTIC_TRACKER_SETTINGS=j.DEFAULT_HOLISTIC_TRACKER_SETTINGS;exports.GESTURE_SETTINGS_FIELDS=j.GESTURE_SETTINGS_FIELDS;exports.HOLISTIC_HANDS_OPTIONS=j.HOLISTIC_HANDS_OPTIONS;exports.HOLISTIC_TRACKER_SETTINGS_FIELDS=j.HOLISTIC_TRACKER_SETTINGS_FIELDS;exports.patchGestureSettings=j.patchGestureSettings;exports.patchHolisticTrackerSettings=j.patchHolisticTrackerSettings;exports.resolveGestureSettings=j.resolveGestureSettings;exports.resolveHolisticTrackerSettings=j.resolveHolisticTrackerSettings;exports.toHolisticTrackerProps=j.toHolisticTrackerProps;exports.SEGMENTATION_TYPES=Ee.SEGMENTATION_TYPES;exports.SEMANTIC_SEGMENTATION_PRESETS=Ee.SEMANTIC_SEGMENTATION_PRESETS;exports.BODY_TARGETS=oe.BODY_TARGETS;exports.DEFAULT_TRACKING_ANCHOR=oe.DEFAULT_TRACKING_ANCHOR;exports.FACE_TARGETS=oe.FACE_TARGETS;exports.HAND_TARGETS=oe.HAND_TARGETS;exports.TrackingAnchor=oe.TrackingAnchor;exports.getTargetNamespace=oe.getTargetNamespace;exports.DEFAULT_GESTURE_DETECTOR_OPTIONS=Y.DEFAULT_GESTURE_DETECTOR_OPTIONS;exports.resolveGestureDetectorOptions=Y.resolveGestureDetectorOptions;exports.DEFAULT_FACE_EXPRESSION_THRESHOLD=$.DEFAULT_FACE_EXPRESSION_THRESHOLD;exports.getFaceBlendshape=$.getFaceBlendshape;exports.getFaceEyeDistance=$.getFaceEyeDistance;exports.hasFaceExpression=$.hasFaceExpression;exports.DEFAULT_POLICY_NUM_FACES=Se.DEFAULT_POLICY_NUM_FACES;exports.useFaceInfo=Se.useFaceInfo;exports.useFaceInfos=Se.useFaceInfos;exports.DEFAULT_SUBJECT_POLICY=ee.DEFAULT_SUBJECT_POLICY;exports.EMPTY_SUBJECT_MEMORY=ee.EMPTY_SUBJECT_MEMORY;exports.XR_MAX_SUBJECTS=ee.XR_MAX_SUBJECTS;exports.associateSubjects=ee.associateSubjects;exports.faceCandidates=ee.faceCandidates;exports.jointCandidates=ee.jointCandidates;exports.selectSubject=ee.selectSubject;exports.IRIS_LANDMARKS=ae.IRIS_LANDMARKS;exports.IRIS_LANDMARK_COUNT=ae.IRIS_LANDMARK_COUNT;exports.PERSON_MASK_LABELS=ae.PERSON_MASK_LABELS;exports.useHairMask=ae.useHairMask;exports.usePersonMask=ae.usePersonMask;exports.useSemanticSegmentationMask=ae.useSemanticSegmentationMask;exports.DEFAULT_SEGMENTATION_OVERLAY_SETTINGS=He.DEFAULT_SEGMENTATION_OVERLAY_SETTINGS;exports.patchSegmentationOverlaySettings=He.patchSegmentationOverlaySettings;exports.resolveSegmentationOverlaySettings=He.resolveSegmentationOverlaySettings;exports.BODY_CALIBRATION_LANDMARKS=dt;exports.BodyTrigger=or;exports.CALIBRATION_STORAGE_KEY=fe;exports.CALIBRATION_VERSION=Oe;exports.DEFAULT_CALIBRATION=ge;exports.DEFAULT_FACE_ATTRIBUTE_EXPRESSION_MODEL_URL=St;exports.DEFAULT_HOLISTIC_SIGNAL_THRESHOLDS=_e;exports.FACE_ATTRIBUTE_EXPRESSION_NAMES=hr;exports.FACE_CALIBRATION_LANDMARKS=lt;exports.GESTURES=xe;exports.GESTURE_NAMES=Zt;exports.GestureListener=rr;exports.GestureTracker=Lt;exports.GestureTrigger=Qt;exports.HAND_CUTOUT_TRIANGLES=Le;exports.HandAttachment=Ft;exports.HandCutout=kt;exports.HandTracker=yt;exports.HolisticTracker=me;exports.Segmentation=Wt;exports.Touchable=Ut;exports.applyCalibrationToFeedPoint=ut;exports.clearCalibration=Rt;exports.createCalibration=at;exports.createHolisticSignals=Je;exports.defineGesture=er;exports.drawFaceCrop=rt;exports.estimateBodyScale=Tt;exports.estimateFaceDistance=ft;exports.getHolisticSignals=jt;exports.isHandRaised=be;exports.isIdentityCalibration=cr;exports.isPalmOpen=Fe;exports.loadCalibration=ht;exports.measureBodyCalibration=Pe;exports.measureFaceCalibration=ke;exports.resetCalibration=it;exports.resolveCalibrationMirror=ct;exports.resolveGestureDefinition=nt;exports.saveCalibration=Et;exports.updateCalibration=de;exports.useBodyTrigger=ot;exports.useFaceAction=Tr;exports.useFaceAttributeExpression=mr;exports.useFaceDetection=fr;exports.useGesture=st;exports.useHolisticTracking=Qe;exports.useXRCalibration=ur;exports.writeHandCutout=ze;
|