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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (639) hide show
  1. package/GROUNDING.md +5651 -82
  2. package/README.md +1 -0
  3. package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
  4. package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
  5. package/dist/DebuggerUI-7ngnJsBe.js +275 -0
  6. package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
  7. package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
  8. package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
  9. package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
  10. package/dist/FaceSurface-DmP9AEeC.js +27 -0
  11. package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
  12. package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
  13. package/dist/SkeletonUtils-C2r90MtN.js +21 -0
  14. package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
  15. package/dist/TextLabel-XE0rQSDn.cjs +2 -0
  16. package/dist/TextLabel-c9BCucOI.js +961 -0
  17. package/dist/assets/cache.d.ts +99 -0
  18. package/dist/assets/estimate.d.ts +11 -0
  19. package/dist/assets/gltfLoader.d.ts +16 -0
  20. package/dist/assets/index.d.ts +7 -0
  21. package/dist/assets/loaders.d.ts +43 -0
  22. package/dist/assets/react.d.ts +33 -0
  23. package/dist/body-pose/index.d.ts +521 -0
  24. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  25. package/dist/body-trigger/frame.d.ts +88 -0
  26. package/dist/body-trigger/index.d.ts +6 -0
  27. package/dist/body-trigger/moves.d.ts +235 -0
  28. package/dist/body-trigger/trigger.d.ts +75 -0
  29. package/dist/calibration/calibration.d.ts +75 -0
  30. package/dist/calibration/index.d.ts +6 -0
  31. package/dist/calibration/storage.d.ts +13 -0
  32. package/dist/calibration/types.d.ts +53 -0
  33. package/dist/calibration/useXRCalibration.d.ts +46 -0
  34. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  35. package/dist/camera/devices.d.ts +26 -0
  36. package/dist/camera/index.d.ts +8 -0
  37. package/dist/camera/permission.d.ts +86 -0
  38. package/dist/camera/useCameraPermission.d.ts +35 -0
  39. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  40. package/dist/canonicalFace-C83I225R.cjs +1 -0
  41. package/dist/capabilities/detect.d.ts +45 -0
  42. package/dist/capabilities/index.d.ts +5 -0
  43. package/dist/capabilities/types.d.ts +120 -0
  44. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  45. package/dist/compat/environment.d.ts +5 -0
  46. package/dist/compat/index.d.ts +4 -0
  47. package/dist/compat/run.d.ts +18 -0
  48. package/dist/compat/scenarios.d.ts +10 -0
  49. package/dist/compat/types.d.ts +101 -0
  50. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  51. package/dist/components/BodyInstruction/index.d.ts +69 -0
  52. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  53. package/dist/components/BodyTracker/index.d.ts +17 -0
  54. package/dist/components/BodyTrigger/index.d.ts +49 -0
  55. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  56. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  57. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  58. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  59. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  60. package/dist/components/FaceAtlas/index.d.ts +7 -0
  61. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  62. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  63. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  64. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  65. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  66. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  67. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  68. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  69. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  70. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  71. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  72. package/dist/components/FaceCharacter/index.d.ts +18 -0
  73. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  74. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  75. package/dist/components/FaceInset/frame.d.ts +94 -0
  76. package/dist/components/FaceInset/index.d.ts +6 -0
  77. package/dist/components/FaceInset/material.d.ts +40 -0
  78. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  79. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  80. package/dist/components/FaceInstruction/index.d.ts +56 -0
  81. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  82. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  83. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  84. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  85. package/dist/components/FaceLiquify/index.d.ts +10 -0
  86. package/dist/components/FaceLiquify/material.d.ts +39 -0
  87. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  88. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  89. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  90. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  91. package/dist/components/FaceLiquify/target.d.ts +85 -0
  92. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  93. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +37 -5
  94. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  95. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +21 -0
  96. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  97. package/dist/components/FaceMesh/index.d.ts +2 -2
  98. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  99. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  100. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  101. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  102. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  103. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  104. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  105. package/dist/components/FaceSwap/index.d.ts +13 -0
  106. package/dist/components/FaceSwap/settings.d.ts +300 -0
  107. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  108. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  109. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  110. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  111. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  112. package/dist/components/Faceless/Faceless.d.ts +51 -0
  113. package/dist/components/Faceless/index.d.ts +2 -0
  114. package/dist/components/GestureListener/index.d.ts +11 -0
  115. package/dist/components/HairLock/HairLock.d.ts +39 -0
  116. package/dist/components/HairLock/index.d.ts +2 -0
  117. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  118. package/dist/components/HandCutout/index.d.ts +35 -0
  119. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  120. package/dist/components/HandInstruction/index.d.ts +74 -0
  121. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  122. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  123. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  124. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  125. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  126. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  127. package/dist/components/HandRig/index.d.ts +101 -0
  128. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  129. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  130. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  131. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  132. package/dist/components/HandTouch/index.d.ts +2 -0
  133. package/dist/components/HandTracker/index.d.ts +10 -0
  134. package/dist/components/HeadBinding/index.d.ts +14 -0
  135. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  136. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  137. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  138. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  139. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  140. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  141. package/dist/components/HeadOccluder/index.d.ts +57 -3
  142. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  143. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  144. package/dist/components/HolisticTracker/index.d.ts +69 -0
  145. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  146. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  147. package/dist/components/Instruction/HintStage.d.ts +29 -0
  148. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  149. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  150. package/dist/components/Instruction/ghost.d.ts +129 -0
  151. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  152. package/dist/components/Instruction/hintLook.d.ts +81 -0
  153. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  154. package/dist/components/Instruction/index.d.ts +41 -0
  155. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  156. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  157. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  158. package/dist/components/IrisEffect/index.d.ts +51 -0
  159. package/dist/components/IrisEffect/settings.d.ts +117 -0
  160. package/dist/components/LipEffect/LipEffect.d.ts +27 -1
  161. package/dist/components/LipEffect/LipEffectMaterial.d.ts +95 -7
  162. package/dist/components/LipEffect/LipEffects.d.ts +12 -0
  163. package/dist/components/LipEffect/defaults.d.ts +46 -4
  164. package/dist/components/LipEffect/index.d.ts +11 -3
  165. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  166. package/dist/components/LipEffect/settings.d.ts +375 -0
  167. package/dist/components/LipEffect/shader.d.ts +39 -0
  168. package/dist/components/LipEffect/types.d.ts +128 -9
  169. package/dist/components/LipEffect/useLipDesignTextures.d.ts +17 -0
  170. package/dist/components/LipEffect/uvGuide.d.ts +74 -0
  171. package/dist/components/Makeup/Blush.d.ts +18 -0
  172. package/dist/components/Makeup/Brows.d.ts +20 -0
  173. package/dist/components/Makeup/Contour.d.ts +17 -0
  174. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  175. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  176. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  177. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  178. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  179. package/dist/components/Makeup/constants.d.ts +44 -0
  180. package/dist/components/Makeup/design.d.ts +106 -0
  181. package/dist/components/Makeup/designSamples.d.ts +42 -0
  182. package/dist/components/Makeup/eyes.d.ts +114 -0
  183. package/dist/components/Makeup/fields.d.ts +10 -0
  184. package/dist/components/Makeup/geometry.d.ts +106 -0
  185. package/dist/components/Makeup/index.d.ts +26 -0
  186. package/dist/components/Makeup/looks.d.ts +28 -0
  187. package/dist/components/Makeup/material.d.ts +239 -0
  188. package/dist/components/Makeup/settings.d.ts +54 -0
  189. package/dist/components/Makeup/shades.d.ts +143 -0
  190. package/dist/components/Makeup/shapes.d.ts +27 -0
  191. package/dist/components/Makeup/skinTone.d.ts +135 -0
  192. package/dist/components/Makeup/types.d.ts +110 -0
  193. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  194. package/dist/components/Necklace/Necklace.d.ts +44 -0
  195. package/dist/components/Necklace/index.d.ts +1 -0
  196. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  197. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  198. package/dist/components/PersonCutout/index.d.ts +50 -0
  199. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  200. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  201. package/dist/components/ScreenImage/index.d.ts +3 -1
  202. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  203. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  204. package/dist/components/ScreenImage/source.d.ts +6 -0
  205. package/dist/components/ScreenImage/types.d.ts +18 -0
  206. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  207. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  208. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  209. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  210. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  211. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  212. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  213. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  214. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  215. package/dist/components/SpringSwing/index.d.ts +1 -0
  216. package/dist/components/XRProvider/index.d.ts +16 -2
  217. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  218. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  219. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  220. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  221. package/dist/components/index.d.ts +11 -0
  222. package/dist/config/index.d.ts +0 -1
  223. package/dist/constants/index.d.ts +4 -1
  224. package/dist/context-DTxSQvp4.js +13 -0
  225. package/dist/context-hA0Rb2Xa.cjs +1 -0
  226. package/dist/contexts-BH7PdKFS.cjs +1 -0
  227. package/dist/contexts-jak8-tND.js +667 -0
  228. package/dist/coordinates/feed.d.ts +52 -0
  229. package/dist/coordinates/index.d.ts +7 -0
  230. package/dist/coordinates/side.d.ts +40 -0
  231. package/dist/coordinates/spaces.d.ts +49 -0
  232. package/dist/coordinates/viewport.d.ts +22 -0
  233. package/dist/coordinates/world.d.ts +15 -0
  234. package/dist/debug-ui/default-setting.cjs +2 -2
  235. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  236. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  237. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  238. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  239. package/dist/debug-ui/index.d.ts +18 -3
  240. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  241. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  242. package/dist/debug-ui/media-source/index.d.ts +1 -1
  243. package/dist/debug-ui/media-source/session.d.ts +30 -2
  244. package/dist/debug-ui/media-source.cjs +1 -1
  245. package/dist/debug-ui/media-source.js +1 -1
  246. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  247. package/dist/debug-ui/product-hotspots/index.d.ts +25 -0
  248. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  249. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  250. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  251. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  252. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  253. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  254. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  255. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  256. package/dist/debug-ui/xr-diagnostics/index.d.ts +26 -0
  257. package/dist/debug-ui.cjs +3 -3
  258. package/dist/debug-ui.js +2695 -2547
  259. package/dist/detector-K8aej4MB.js +59 -0
  260. package/dist/detector-ijypGtse.cjs +1 -0
  261. package/dist/entries/all.d.ts +3 -1
  262. package/dist/entries/core.d.ts +20 -2
  263. package/dist/entries/face-effects.d.ts +123 -9
  264. package/dist/entries/instructions.d.ts +48 -0
  265. package/dist/entries/internal.d.ts +2 -1
  266. package/dist/entries/low-level.d.ts +49 -3
  267. package/dist/entries/particles.d.ts +11 -0
  268. package/dist/entries/product.d.ts +11 -0
  269. package/dist/entries/tracking.d.ts +60 -2
  270. package/dist/face-atlas/attributes.d.ts +30 -0
  271. package/dist/face-atlas/eyes.d.ts +272 -0
  272. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  273. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  274. package/dist/face-atlas/glsl/common.d.ts +55 -0
  275. package/dist/face-atlas/glsl/design.d.ts +49 -0
  276. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  277. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  278. package/dist/face-atlas/glsl/format.d.ts +4 -0
  279. package/dist/face-atlas/glsl/index.d.ts +59 -0
  280. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  281. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  282. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  283. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  284. package/dist/face-atlas/guide.d.ts +51 -0
  285. package/dist/face-atlas/index.d.ts +25 -0
  286. package/dist/face-atlas/lead.d.ts +117 -0
  287. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  288. package/dist/face-atlas/masks.d.ts +53 -0
  289. package/dist/face-atlas/obj.d.ts +69 -0
  290. package/dist/face-atlas/polylines.d.ts +63 -0
  291. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  292. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  293. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  294. package/dist/face-atlas/probe/constants.d.ts +137 -0
  295. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  296. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  297. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  298. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  299. package/dist/face-atlas/probe/stats.d.ts +143 -0
  300. package/dist/face-atlas/probe/targets.d.ts +70 -0
  301. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  302. package/dist/face-atlas/quality.d.ts +28 -0
  303. package/dist/face-atlas/regions.d.ts +31 -0
  304. package/dist/face-atlas/registry.d.ts +252 -0
  305. package/dist/face-atlas/renderState.d.ts +86 -0
  306. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  307. package/dist/face-atlas/shading.d.ts +406 -0
  308. package/dist/face-atlas/shapes.d.ts +86 -0
  309. package/dist/face-atlas/sides.d.ts +41 -0
  310. package/dist/face-atlas/skinMask.d.ts +35 -0
  311. package/dist/face-atlas/surface.d.ts +155 -0
  312. package/dist/face-atlas/topology.d.ts +44 -0
  313. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  314. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  315. package/dist/face-character/bindFaceModel.d.ts +106 -0
  316. package/dist/face-character/canonicalFace.d.ts +17 -0
  317. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  318. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  319. package/dist/face-character/driveFaceModel.d.ts +57 -0
  320. package/dist/face-character/expressionOutputs.d.ts +45 -0
  321. package/dist/face-character/faceExpressions.d.ts +104 -0
  322. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  323. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  324. package/dist/face-character/faceMorph.d.ts +77 -0
  325. package/dist/face-character/faceMorphs.d.ts +46 -0
  326. package/dist/face-character/facePhoto.d.ts +138 -0
  327. package/dist/face-character/facePiercings.d.ts +116 -0
  328. package/dist/face-character/facePin.d.ts +131 -0
  329. package/dist/face-character/faceReprojection.d.ts +273 -0
  330. package/dist/face-character/faceReprojector.d.ts +171 -0
  331. package/dist/face-character/faceRig.d.ts +176 -0
  332. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  333. package/dist/face-character/faceTexture.d.ts +169 -0
  334. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  335. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  336. package/dist/face-character/faceTextureStats.d.ts +298 -0
  337. package/dist/face-character/faceTransfer.d.ts +396 -0
  338. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  339. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  340. package/dist/face-character/faceWarp3D.d.ts +101 -0
  341. package/dist/face-character/faceless.d.ts +79 -0
  342. package/dist/face-character/featureWarp.d.ts +28 -0
  343. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  344. package/dist/face-character/liveValue.d.ts +12 -0
  345. package/dist/face-character/memo.d.ts +15 -0
  346. package/dist/face-effects.cjs +2324 -1
  347. package/dist/face-effects.js +14208 -2268
  348. package/dist/face-expression/index.d.ts +182 -0
  349. package/dist/face-info/landmarks.d.ts +17 -3
  350. package/dist/face-info/types.d.ts +20 -3
  351. package/dist/gestures/definitions.d.ts +98 -0
  352. package/dist/gestures/detector.d.ts +87 -0
  353. package/dist/gestures/index.d.ts +8 -0
  354. package/dist/gestures/measures.d.ts +114 -0
  355. package/dist/gestures/settings.d.ts +49 -0
  356. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  357. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  358. package/dist/hand/armFit.d.ts +46 -0
  359. package/dist/hand/armMask.d.ts +178 -0
  360. package/dist/hand/handCutout.d.ts +23 -0
  361. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  362. package/dist/hand/handGestures.d.ts +524 -0
  363. package/dist/hand/handPose.d.ts +98 -0
  364. package/dist/hand/handRigSolver.d.ts +159 -0
  365. package/dist/hand/handTattoo.d.ts +81 -0
  366. package/dist/hand/handTouch.d.ts +240 -0
  367. package/dist/hand/wrist.d.ts +44 -0
  368. package/dist/hand/wristFilter.d.ts +44 -0
  369. package/dist/hooks/selectors.d.ts +76 -1
  370. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  371. package/dist/hooks/useFaceInfo.d.ts +13 -1
  372. package/dist/hooks/useFaceInfos.d.ts +1 -1
  373. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  374. package/dist/hooks/useGesture.d.ts +32 -0
  375. package/dist/hooks/useIrisTracking.d.ts +45 -0
  376. package/dist/hooks/useTrackerContext.d.ts +6 -0
  377. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  378. package/dist/hooks/useXRModel.d.ts +7 -0
  379. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  380. package/dist/hooks/useXRSession/index.d.ts +2 -2
  381. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  382. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  383. package/dist/hooks/useXRSession/store.d.ts +52 -3
  384. package/dist/index-B1_TzJaI.js +1104 -0
  385. package/dist/index-BavF06C6.js +190 -0
  386. package/dist/index-BfFmpddl.cjs +21 -0
  387. package/dist/index-BuBzneeW.cjs +46 -0
  388. package/dist/index-CGsQWodV.cjs +1 -0
  389. package/dist/index-CIe7eCMH.js +3200 -0
  390. package/dist/index-CfSF8LXa.cjs +1 -0
  391. package/dist/index-D5GTzOzD.cjs +1 -0
  392. package/dist/index-DBhQzvVa.js +314 -0
  393. package/dist/index-DE17y0ZI.cjs +1 -0
  394. package/dist/index-JII7huPk.js +442 -0
  395. package/dist/index-tpCr9CLj.cjs +1 -0
  396. package/dist/index-w1S7fI2B.js +1432 -0
  397. package/dist/index-zGaqrz_K.js +188 -0
  398. package/dist/instructions.cjs +30 -0
  399. package/dist/instructions.js +1507 -0
  400. package/dist/{internal-Dmk1cTXq.js → internal-B90P-clC.js} +138 -119
  401. package/dist/internal-Cjinca64.cjs +1 -0
  402. package/dist/internal.cjs +1 -1
  403. package/dist/internal.js +15 -10
  404. package/dist/iris/compute.d.ts +27 -0
  405. package/dist/iris/index.d.ts +4 -0
  406. package/dist/iris/lead.d.ts +19 -0
  407. package/dist/iris/types.d.ts +89 -0
  408. package/dist/landmarkMask-BFDyBnKM.js +224 -0
  409. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  410. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  411. package/dist/landmarks-bftdwq6Z.js +76 -0
  412. package/dist/loaders-BGAUACsd.js +363 -0
  413. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  414. package/dist/low-level.cjs +1 -1
  415. package/dist/low-level.js +1190 -675
  416. package/dist/main.cjs +1 -1
  417. package/dist/main.js +1190 -452
  418. package/dist/models/Base/index.d.ts +49 -0
  419. package/dist/models/Body/index.d.ts +3 -1
  420. package/dist/models/Face/constants.d.ts +8 -0
  421. package/dist/models/Face/index.d.ts +4 -12
  422. package/dist/models/Face/rotation.d.ts +18 -3
  423. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  424. package/dist/models/Hand/HandTracking.d.ts +17 -1
  425. package/dist/models/Holistic/index.d.ts +49 -0
  426. package/dist/models/Holistic/result.d.ts +68 -0
  427. package/dist/models/Segmentation/index.d.ts +2 -0
  428. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  429. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  430. package/dist/models/index.d.ts +2 -0
  431. package/dist/models/nodeSource.d.ts +9 -0
  432. package/dist/particles/emission.d.ts +24 -0
  433. package/dist/particles/eyes.d.ts +24 -0
  434. package/dist/particles/glsl.d.ts +14 -0
  435. package/dist/particles/index.d.ts +10 -0
  436. package/dist/particles/motion.d.ts +42 -0
  437. package/dist/particles/presets.d.ts +12 -0
  438. package/dist/particles/ring.d.ts +58 -0
  439. package/dist/particles/selfTest.d.ts +53 -0
  440. package/dist/particles/settings.d.ts +127 -0
  441. package/dist/particles/shapes.d.ts +29 -0
  442. package/dist/particles/spawner.d.ts +60 -0
  443. package/dist/particles/system.d.ts +64 -0
  444. package/dist/particles.cjs +122 -0
  445. package/dist/particles.js +774 -0
  446. package/dist/product/ProductDimensions.d.ts +16 -0
  447. package/dist/product/ProductHotspot.d.ts +16 -0
  448. package/dist/product/ProductViewer.d.ts +9 -0
  449. package/dist/product/details.d.ts +53 -0
  450. package/dist/product/index.d.ts +14 -0
  451. package/dist/product/loadModelViewer.d.ts +4 -0
  452. package/dist/product/types.d.ts +71 -0
  453. package/dist/product/useProductAr.d.ts +37 -0
  454. package/dist/product/useProductDetails.d.ts +60 -0
  455. package/dist/product.cjs +1 -0
  456. package/dist/product.js +414 -0
  457. package/dist/providers-C8rE26Uf.js +366 -0
  458. package/dist/providers-DHsrhDI2.cjs +62 -0
  459. package/dist/quality/XRQualityController.d.ts +25 -0
  460. package/dist/quality/controller.d.ts +33 -0
  461. package/dist/quality/index.d.ts +6 -0
  462. package/dist/quality/types.d.ts +100 -0
  463. package/dist/quality/useXRQuality.d.ts +28 -0
  464. package/dist/render/renderPasses.d.ts +8 -0
  465. package/dist/render/sceneBeforeRender.d.ts +12 -0
  466. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-B38pUaX2.js} +1 -1
  467. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  468. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  469. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  470. package/dist/renderState-CJNmj5jz.js +39 -0
  471. package/dist/renderState-apSfg4eR.cjs +1 -0
  472. package/dist/scene-object.cjs +1 -1
  473. package/dist/scene-object.js +2 -2
  474. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  475. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  476. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  477. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  478. package/dist/segmentation2d/index.d.ts +9 -0
  479. package/dist/segmentation2d/maskUv.d.ts +23 -0
  480. package/dist/segmentation2d/rasterize.d.ts +14 -0
  481. package/dist/segmentation2d/types.d.ts +52 -0
  482. package/dist/select-Ck5LGz-J.cjs +1 -0
  483. package/dist/select-pYRo_win.js +233 -0
  484. package/dist/selectors-C4X71aoD.cjs +1 -0
  485. package/dist/selectors-DmNaKIwE.js +196 -0
  486. package/dist/session-BrH8G7iJ.cjs +31 -0
  487. package/dist/session-DgA_z6O1.js +418 -0
  488. package/dist/settings-BJ7FMBsO.js +111 -0
  489. package/dist/settings-C63FMBlF.cjs +1 -0
  490. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  491. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  492. package/dist/spring/index.d.ts +2 -0
  493. package/dist/spring/spring.d.ts +69 -0
  494. package/dist/spring/swing.d.ts +54 -0
  495. package/dist/subjects/index.d.ts +2 -0
  496. package/dist/subjects/select.d.ts +62 -0
  497. package/dist/subjects/types.d.ts +55 -0
  498. package/dist/tracking-config/apply.d.ts +57 -0
  499. package/dist/tracking-config/index.d.ts +7 -0
  500. package/dist/tracking-config/resolve.d.ts +25 -0
  501. package/dist/tracking-config/storage.d.ts +8 -0
  502. package/dist/tracking-config/types.d.ts +106 -0
  503. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  504. package/dist/tracking.cjs +10 -1
  505. package/dist/tracking.js +1326 -506
  506. package/dist/trigger-D0Pm9noT.cjs +49 -0
  507. package/dist/trigger-IQeys0oS.js +2128 -0
  508. package/dist/types/compositor.d.ts +21 -0
  509. package/dist/types/face.d.ts +20 -1
  510. package/dist/types/hand-tracking.d.ts +9 -0
  511. package/dist/types/holistic.d.ts +121 -0
  512. package/dist/types/index.d.ts +1 -0
  513. package/dist/types/model.d.ts +22 -2
  514. package/dist/types/nodes.d.ts +47 -3
  515. package/dist/types/segmentation.d.ts +24 -0
  516. package/dist/types/session.d.ts +41 -3
  517. package/dist/updateThrottle-BseecYag.js +4 -0
  518. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  519. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  520. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  521. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  522. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  523. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  524. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  525. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  526. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  527. package/dist/useXRCapabilities-Cr3RzuAW.cjs +1 -0
  528. package/dist/useXRCapabilities-Cxmlmpbd.js +30 -0
  529. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  530. package/dist/utils/fns.d.ts +6 -3
  531. package/dist/utils/headOccluderFit.d.ts +42 -0
  532. package/dist/utils/integrity.d.ts +21 -1
  533. package/dist/utils/resolveNumFaces.d.ts +13 -0
  534. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  535. package/dist/utils/similarityFit.d.ts +23 -0
  536. package/dist/utils/updateThrottle.d.ts +2 -0
  537. package/dist/utils/useStableUniforms.d.ts +18 -0
  538. package/dist/uv-BMFt19bg.cjs +1 -0
  539. package/dist/{index-ByoNj0QP.js → uv-DJU_XfmN.js} +15 -247
  540. package/docs/SDK_DOCUMENTATION.md +1 -2
  541. package/docs/api/adaptive-quality.mdx +104 -0
  542. package/docs/api/asset-lifecycle.mdx +78 -0
  543. package/docs/api/body-instructions.mdx +285 -0
  544. package/docs/api/body-triggers.mdx +234 -0
  545. package/docs/api/camera-permission.mdx +142 -0
  546. package/docs/api/coordinate-spaces.mdx +168 -0
  547. package/docs/api/cross-camera.mdx +89 -0
  548. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  549. package/docs/api/diagnostics-calibration.mdx +97 -0
  550. package/docs/api/external-face-mesh.mdx +231 -0
  551. package/docs/api/face-actions.mdx +20 -16
  552. package/docs/api/face-attribute-expression.mdx +1 -1
  553. package/docs/api/face-binding-anchors.mdx +4 -2
  554. package/docs/api/face-character.mdx +157 -0
  555. package/docs/api/face-effects.mdx +9 -0
  556. package/docs/api/face-expression-controller.mdx +153 -0
  557. package/docs/api/face-info.mdx +17 -11
  558. package/docs/api/face-inset.mdx +204 -0
  559. package/docs/api/face-instructions.mdx +183 -0
  560. package/docs/api/face-liquify.mdx +196 -0
  561. package/docs/api/face-mesh.mdx +8 -9
  562. package/docs/api/face-morph.mdx +117 -0
  563. package/docs/api/face-painting.mdx +7 -0
  564. package/docs/api/face-reprojection.mdx +154 -0
  565. package/docs/api/face-retouching.mdx +18 -10
  566. package/docs/api/face-swap.mdx +350 -0
  567. package/docs/api/face-warp-3d.mdx +166 -0
  568. package/docs/api/faceless.mdx +143 -0
  569. package/docs/api/gestures.mdx +209 -0
  570. package/docs/api/hair.mdx +97 -0
  571. package/docs/api/hand-instructions.mdx +222 -0
  572. package/docs/api/hand-rig.mdx +535 -0
  573. package/docs/api/hand-touch.mdx +162 -0
  574. package/docs/api/head-occluder.mdx +563 -0
  575. package/docs/api/holistic-tracker.mdx +164 -0
  576. package/docs/api/instructions.mdx +323 -0
  577. package/docs/api/iris-tracking.mdx +247 -0
  578. package/docs/api/made-up-camera.mdx +131 -0
  579. package/docs/api/makeup-skin-tone.mdx +135 -0
  580. package/docs/api/makeup.mdx +353 -0
  581. package/docs/api/multi-subject.mdx +98 -0
  582. package/docs/api/particles.mdx +155 -0
  583. package/docs/api/person-cutout.mdx +136 -0
  584. package/docs/api/pin-to-face-mesh.mdx +274 -0
  585. package/docs/api/product-ar.mdx +114 -0
  586. package/docs/api/product-details.mdx +78 -0
  587. package/docs/api/screen-space-coordinates.mdx +4 -1
  588. package/docs/api/segmentation-overlay.mdx +301 -0
  589. package/docs/api/session-lifecycle.mdx +136 -0
  590. package/docs/api/trackers.mdx +5 -0
  591. package/docs/api/tracking-config.mdx +108 -0
  592. package/docs/docs.json +51 -1
  593. package/docs/examples/lip-shaders.mdx +273 -0
  594. package/docs/guides/face-atlas-template.svg +1 -0
  595. package/docs/guides/face-atlas-textures.mdx +186 -0
  596. package/docs/guides/face-texture-template.svg +1 -0
  597. package/docs/guides/harness-debug-ui.mdx +4 -4
  598. package/docs/guides/lip-effect-textures.mdx +368 -0
  599. package/docs/guides/lip-uv-template.png +0 -0
  600. package/docs/guides/lip-uv-template.svg +1 -0
  601. package/docs/guides/makeup-design-textures.mdx +109 -0
  602. package/docs/introduction.mdx +1 -2
  603. package/package.json +23 -1
  604. package/dist/DebuggerUI-B6bP6P9r.cjs +0 -1
  605. package/dist/DebuggerUI-BjOMr8q_.js +0 -269
  606. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  607. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  608. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  609. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  610. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  611. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  612. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  613. package/dist/contexts-ByhzppYl.js +0 -663
  614. package/dist/contexts-Dr62It_K.cjs +0 -1
  615. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  616. package/dist/getFaceInfo-C4QpCQIY.js +0 -118
  617. package/dist/getFaceInfo-fA1bFBub.cjs +0 -1
  618. package/dist/index-9dlAQAhy.js +0 -1462
  619. package/dist/index-BjmTe9eM.cjs +0 -1
  620. package/dist/index-BpEf2BBb.cjs +0 -1
  621. package/dist/index-CyUUurQT.cjs +0 -1
  622. package/dist/index-DCiMbxC3.cjs +0 -1
  623. package/dist/index-DXT3WccE.js +0 -2089
  624. package/dist/index-DpI-qo5X.cjs +0 -17
  625. package/dist/index-DyVF4vEW.js +0 -111
  626. package/dist/index-VJ0SJwmG.js +0 -214
  627. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  628. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  629. package/dist/renderLayers-zrK2pv5O.js +0 -13
  630. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  631. package/dist/renderPasses-BcquyVtu.js +0 -1500
  632. package/dist/selectors-B8H97CKA.js +0 -59
  633. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  634. package/dist/session-CpkiK5YA.cjs +0 -31
  635. package/dist/session-DLFN_VII.js +0 -363
  636. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  637. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  638. package/dist/useFaceResults-CtetsO9M.js +0 -19
  639. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -6,6 +6,27 @@ export type XRLayerConfig = {
6
6
  zIndex: number;
7
7
  };
8
8
  export type XRMediaSourceKind = "image" | "video";
9
+ /** Which camera a webcam bind asks for: the front (`user`) or the rear (`environment`). */
10
+ export type XRCameraFacing = "user" | "environment";
11
+ /**
12
+ * Every kind of media a session can bind. `webcam` is a mirrored live camera
13
+ * (the front camera by default); `rear-camera` is a live camera drawn
14
+ * straight, like `image` / `video`. The mirror decision follows the kind
15
+ * (`isMirroredSourceKind`), so consumers never need to know the facing.
16
+ */
17
+ export type XRSessionSourceKind = "webcam" | "rear-camera" | XRMediaSourceKind;
18
+ /** Device orientation as the session sees it (from `screen.orientation`, falling back to the viewport aspect). */
19
+ export type XROrientation = {
20
+ type: "portrait" | "landscape";
21
+ /** Clockwise screen rotation in degrees (0, 90, 180, 270); 0 when unknown. */
22
+ angle: 0 | 90 | 180 | 270;
23
+ };
24
+ /** How a webcam bind chooses and presents the camera. */
25
+ export type XRCameraRequest = {
26
+ facingMode?: XRCameraFacing;
27
+ deviceId?: string;
28
+ mirrored?: boolean;
29
+ };
9
30
  export type XRMediaLayout = {
10
31
  source: {
11
32
  width: number;
@@ -1,15 +1,34 @@
1
1
  import { Category, Matrix, NormalizedLandmark } from '@mediapipe/tasks-vision';
2
- import { Vector3 } from 'three';
2
+ import { Quaternion, Vector3 } from 'three';
3
3
  export type FaceModelOptions = {
4
4
  numFaces?: number;
5
5
  };
6
6
  export type Face = {
7
7
  transform: {
8
8
  position: Vector3;
9
+ /**
10
+ * Rotation READING in the SDK's sign convention (radians): X pitch, + =
11
+ * looking up; Y yaw, + = turning to the person's own left; Z roll, + =
12
+ * tilting toward the person's own left shoulder — on every feed. Not a
13
+ * three.js rotation — do not apply it to an object; use `quaternion` for
14
+ * that.
15
+ */
9
16
  rotation: Vector3;
17
+ /**
18
+ * The head's orientation in three.js world axes (+X screen right, +Y up,
19
+ * +Z toward the viewer), for the feed as displayed. Identity = facing the
20
+ * camera. `FaceTracker` applies this to its group.
21
+ */
22
+ quaternion: Quaternion;
10
23
  scale: Vector3;
11
24
  };
12
25
  gestures: Record<string, number>;
26
+ /**
27
+ * The face was read from a mirrored feed (the front webcam). MediaPipe's
28
+ * own sides (landmark indices, `…Left` / `…Right` blendshapes) are then the
29
+ * person's opposite side (GROUNDING "Left and right").
30
+ */
31
+ mirrored: boolean;
13
32
  };
14
33
  export type FaceBounds = {
15
34
  minX: number;
@@ -1,9 +1,18 @@
1
1
  import { TrackerPoint } from './common';
2
2
  export type Handedness = "left" | "right";
3
3
  export type HandData = {
4
+ /** 21 joints in tracker space (centre origin, ±1, Y up; `z` is relative depth). */
4
5
  coordinates?: TrackerPoint[];
6
+ /**
7
+ * 21 joints in the hand's metric frame: centimetres, origin at the hand
8
+ * centre, three.js axes (+X screen right, +Y up, +Z toward the viewer).
9
+ */
10
+ worldCoordinates?: TrackerPoint[];
5
11
  gesture?: "closed_fist" | "open_palm";
12
+ /** The person's anatomical hand on every source (mirrored webcam or not). */
6
13
  handedness?: Handedness;
14
+ /** MediaPipe's handedness confidence, 0..1. */
15
+ handednessScore?: number;
7
16
  };
8
17
  export type HandTrackingData = {
9
18
  hands?: HandData[];
@@ -0,0 +1,121 @@
1
+ import { NormalizedLandmark } from '@mediapipe/tasks-vision';
2
+ import { TrackerPoint } from './common';
3
+ /** Which hands the holistic tracker publishes. Holistic is single-person: at most one left and one right hand. */
4
+ export type HolisticHandsOption = "both" | "left" | "right" | "none";
5
+ export type HolisticHandSide = "left" | "right";
6
+ export type HolisticTrackingStatus = "loading" | "ready" | "error";
7
+ /**
8
+ * Inference backend. `"auto"` (default) starts on the GPU and falls back to
9
+ * the CPU the first time the graph fails to run there: MediaPipe's holistic
10
+ * face-blendshape stage has no WebGL implementation, so with
11
+ * `outputFaceBlendshapes` the GPU path fails on the first frame.
12
+ */
13
+ export type HolisticDelegate = "auto" | "GPU" | "CPU";
14
+ /** The backend actually running inference. */
15
+ export type HolisticActiveDelegate = "GPU" | "CPU";
16
+ /**
17
+ * Options the first acquirer passes to `XRModel.HOLISTIC_TRACKER`. The
18
+ * model-creation options (`modelUrl`, confidences, `outputFaceBlendshapes`)
19
+ * are fixed for the model's lifetime; the runtime subset
20
+ * (`HolisticRuntimeOptions`) can be changed live through `node.setOptions`.
21
+ */
22
+ export type HolisticModelOptions = HolisticRuntimeOptions & {
23
+ /**
24
+ * Override the `.task` asset. Pre-release default: MediaPipe's published
25
+ * holistic landmarker on `storage.googleapis.com`, integrity-verified; the
26
+ * SDK CDN copy is not published yet and will become the default when it is.
27
+ * Set this to a self-hosted copy to drop the third-party dependency; a custom
28
+ * URL is fetched best-effort.
29
+ */
30
+ modelUrl?: string;
31
+ /** Face detector confidence, 0..1. MediaPipe default 0.5. */
32
+ minFaceDetectionConfidence?: number;
33
+ /** Face presence confidence for the landmark stage, 0..1. MediaPipe default 0.5. */
34
+ minFacePresenceConfidence?: number;
35
+ /** Pose detector confidence, 0..1. MediaPipe default 0.5. */
36
+ minPoseDetectionConfidence?: number;
37
+ /** Pose presence confidence for the landmark stage, 0..1. MediaPipe default 0.5. */
38
+ minPosePresenceConfidence?: number;
39
+ /** Hand landmark confidence, 0..1. MediaPipe default 0.5. */
40
+ minHandLandmarksConfidence?: number;
41
+ /** Emit the 52 face blendshape scores. Default `true`. */
42
+ outputFaceBlendshapes?: boolean;
43
+ /** Inference backend policy. Default `"auto"`. */
44
+ delegate?: HolisticDelegate;
45
+ /** Inference cap (fps). Read by the session at run time; overrides `perf.targetFps`. */
46
+ targetFps?: number;
47
+ };
48
+ /** Options that can change while the model is running (last writer wins). */
49
+ export type HolisticRuntimeOptions = {
50
+ /** Hands to publish. Default `"both"`. */
51
+ hands?: HolisticHandsOption;
52
+ /**
53
+ * Longest side (px) of the frame handed to MediaPipe. The feed is
54
+ * downscaled to this before inference; outputs are normalized so consumers
55
+ * never see it. Default 768.
56
+ */
57
+ analysisMaxDimension?: number;
58
+ /** Keep a lost face / hand / pose for this long (ms) before dropping it. Default 250. */
59
+ holdMs?: number;
60
+ /** While held, extrapolate along the last velocity for up to this long (ms). Default 0. */
61
+ predictMs?: number;
62
+ };
63
+ /** Live face stream: landmarks in MediaPipe image space, like `FaceTracker`'s `detectionResults`. */
64
+ export type HolisticFaceResult = {
65
+ /** 478 landmarks, normalized 0..1, top-left origin, Y down; `z` is tracker-relative depth. */
66
+ landmarks: NormalizedLandmark[];
67
+ /** Blendshape name → score (0..1). Empty when `outputFaceBlendshapes` is false. */
68
+ blendshapes: Record<string, number>;
69
+ /** 1 while detected; decays linearly to 0 over `holdMs` while held. */
70
+ confidence: number;
71
+ /** True when the stream is being replayed from memory after a dropout. */
72
+ held: boolean;
73
+ };
74
+ /** Live hand stream in SDK tracker coordinates, like `HandTracker`'s `coordinates`. */
75
+ export type HolisticHandResult = {
76
+ /**
77
+ * The person's anatomical side on every source. Holistic labels follow the
78
+ * image, so the SDK swaps them on the mirrored webcam feed; this matches
79
+ * what `HandTracker` reports on the same feed.
80
+ */
81
+ handedness: HolisticHandSide;
82
+ /** 21 joints, center origin, X right, Y up, Z toward the viewer. */
83
+ landmarks: TrackerPoint[];
84
+ /** 21 joints in MediaPipe's metric world space (metres, wrist-relative, Y down). Not converted. */
85
+ worldLandmarks: TrackerPoint[];
86
+ /** 1 while detected; decays linearly to 0 over `holdMs` while held. */
87
+ confidence: number;
88
+ held: boolean;
89
+ };
90
+ /**
91
+ * Live pose stream in SDK tracker coordinates, like `BodyTracker`'s
92
+ * `getLandmarks2D()`. Unlike `BodyTracker`, left/right indices are the
93
+ * person's anatomical sides on every source (swapped on the mirrored webcam
94
+ * feed), so they agree with `leftHand` / `rightHand`.
95
+ */
96
+ export type HolisticPoseResult = {
97
+ /** 33 landmarks, center origin, X right, Y up, Z toward the viewer. */
98
+ landmarks: TrackerPoint[];
99
+ /** 33 landmarks in MediaPipe's metric world space (metres, hip-relative, Y down). Not converted. */
100
+ worldLandmarks: TrackerPoint[];
101
+ /** Per-landmark visibility from MediaPipe (0..1), aligned with `landmarks`. */
102
+ visibility: number[];
103
+ /** Mean landmark visibility while detected; decays linearly to 0 over `holdMs` while held. */
104
+ confidence: number;
105
+ held: boolean;
106
+ };
107
+ /**
108
+ * The unified holistic result. One object per model instance, mutated in
109
+ * place every frame; read it inside `useFrame` and treat it as read-only.
110
+ * A stream is `null` when it is neither detected nor held.
111
+ */
112
+ export type HolisticResult = {
113
+ /** Bumped on every publish; `0` until the first inference. */
114
+ version: number;
115
+ /** `performance.now()` of the last publish. */
116
+ timestampMs: number;
117
+ face: HolisticFaceResult | null;
118
+ leftHand: HolisticHandResult | null;
119
+ rightHand: HolisticHandResult | null;
120
+ pose: HolisticPoseResult | null;
121
+ };
@@ -3,6 +3,7 @@ export * from './session';
3
3
  export * from './body';
4
4
  export * from './face';
5
5
  export * from './headBinding';
6
+ export * from './holistic';
6
7
  export * from './model';
7
8
  export * from './segmentation';
8
9
  export * from './common';
@@ -1,4 +1,4 @@
1
- import { XRMediaSourceKind } from './compositor';
1
+ import { XRSessionSourceKind } from './compositor';
2
2
  /**
3
3
  * Session-level performance config, set via `<XRProvider perf={...}>`. Trades
4
4
  * tracking fidelity for lower GPU/CPU load and heat. Every field is optional;
@@ -29,12 +29,30 @@ export type XRPerfConfig = {
29
29
  * the tight native-selfie framing users expect; set `1` for the widest FOV.
30
30
  */
31
31
  cameraZoom?: number;
32
+ /**
33
+ * Multiplier (0.25..1) on every tracker's analysis resolution. Lower =
34
+ * cheaper inference, coarser landmarks. The adaptive-quality controller
35
+ * drives it per tier; set it directly only with `quality={false}`.
36
+ */
37
+ analysisScale?: number;
38
+ };
39
+ /**
40
+ * Session lifecycle behaviour, set via `<XRProvider lifecycle={...}>`.
41
+ */
42
+ export type XRLifecycleConfig = {
43
+ /**
44
+ * Pause the whole session (blit loop, every model, the video element) while
45
+ * the tab is hidden and resume it when it returns. Off by default: a hidden
46
+ * tab already throttles RAF, and some flows (recording, picture-in-picture)
47
+ * must keep running. Turn it on for battery-sensitive single-page apps.
48
+ */
49
+ pauseWhenHidden?: boolean;
32
50
  };
33
51
  export type RunModelParams = {
34
52
  sourceCanvas: OffscreenCanvas | HTMLCanvasElement;
35
53
  renderWidth: number;
36
54
  renderHeight: number;
37
- getSource?: () => "webcam" | XRMediaSourceKind | undefined;
55
+ getSource?: () => XRSessionSourceKind | undefined;
38
56
  /**
39
57
  * Cap the model's inference rate to this many frames per second. The model's
40
58
  * RAF loop still runs at display rate, but the (expensive) MediaPipe detect
@@ -43,4 +61,6 @@ export type RunModelParams = {
43
61
  * smoothness. See `session.perf.targetFps` and the per-tracker `targetFps`.
44
62
  */
45
63
  targetFps?: number;
64
+ /** Multiplier on the model's analysis resolution (0.25..1); default 1. */
65
+ analysisScale?: number;
46
66
  };
@@ -1,10 +1,13 @@
1
- import { FaceLandmarkerResult } from '@mediapipe/tasks-vision';
1
+ import { FaceLandmarkerResult, HolisticLandmarkerResult } from '@mediapipe/tasks-vision';
2
2
  import { Texture, Camera } from 'three';
3
3
  import { TrackerPoint } from './common';
4
4
  import { Face, FaceRawTrackingData } from './face';
5
5
  import { GestureData } from './gesture-tracking';
6
- import { HandData } from './hand-tracking';
7
- import { SegmentationData } from './segmentation';
6
+ import { HandData, Handedness } from './hand-tracking';
7
+ import { HandPose, HandPoses } from '../hand/handPose';
8
+ import { HolisticActiveDelegate, HolisticResult, HolisticRuntimeOptions, HolisticTrackingStatus } from './holistic';
9
+ import { SemanticMask } from '../segmentation2d/types';
10
+ import { SegmentationData, SemanticSegmentationStatus } from './segmentation';
8
11
  export type XRModelNodeSegmentation = {
9
12
  backgroundSegmentationMask?: Texture;
10
13
  getMaskCanvas: () => HTMLCanvasElement | null;
@@ -16,11 +19,46 @@ export type XRModelNodeSegmentation = {
16
19
  */
17
20
  setInputSource: (source: CanvasImageSource | null | undefined) => void;
18
21
  };
22
+ /** Live state of `XRModel.SEMANTIC_SEGMENTATION`; functions read the model's current values. */
23
+ export type XRModelNodeSemanticSegmentation = {
24
+ /** Stable mask object in feed space, mutated in place; `version` 0 until the first inference. */
25
+ getMask: () => SemanticMask;
26
+ getStatus: () => SemanticSegmentationStatus;
27
+ getError: () => Error | null;
28
+ };
29
+ /**
30
+ * Live state of `XRModel.HOLISTIC_TRACKER`. One node object per model
31
+ * instance; every function reads the current value.
32
+ */
33
+ export type XRModelNodeHolisticTracking = {
34
+ /** Unified, dropout-bridged result. Stable object mutated in place; `version` 0 until the first inference. */
35
+ getResult: () => HolisticResult;
36
+ /** The last raw MediaPipe result, unbridged and unconverted. */
37
+ getRawResult: () => HolisticLandmarkerResult | undefined;
38
+ getStatus: () => HolisticTrackingStatus;
39
+ getError: () => Error | null;
40
+ /** The backend running inference; `"CPU"` after an automatic fallback. */
41
+ getDelegate: () => HolisticActiveDelegate;
42
+ /** Change the runtime-tunable options without re-initializing the model. */
43
+ setOptions: (options: HolisticRuntimeOptions) => void;
44
+ };
19
45
  export type XRModelNodeBodyTracking = {
20
46
  getLandmarks2D: (bodyIndex?: number) => TrackerPoint[] | undefined;
47
+ /**
48
+ * Per-landmark visibility (0..1, MediaPipe's estimate that the point is in
49
+ * frame and not occluded), in landmark order. Optional for custom nodes.
50
+ */
51
+ getVisibility?: (bodyIndex?: number) => number[] | undefined;
21
52
  };
22
53
  export type XRModelNodeHandTracking = {
23
54
  hands?: HandData[];
55
+ /**
56
+ * Both hands by anatomical side, with stable identity through label flips
57
+ * and short dropouts (`assignHandPoses`). `null` = that hand is not tracked.
58
+ */
59
+ poses?: HandPoses;
60
+ /** `poses[hand]`. */
61
+ getHandPose?: (hand: Handedness) => HandPose | null;
24
62
  coordinates?: HandData["coordinates"];
25
63
  gesture?: HandData["gesture"];
26
64
  handedness?: HandData["handedness"];
@@ -31,6 +69,12 @@ export type XRModelNodeGestureTracking = {
31
69
  };
32
70
  export type XRModelNodeFaceTracking = {
33
71
  detectionResults?: FaceLandmarkerResult;
72
+ /**
73
+ * How many faces the shared face model was started with (`numFaces` of the
74
+ * first consumer to start it; default 1). Read-only: the model reports at
75
+ * most this many faces until it is started again. Optional for custom nodes.
76
+ */
77
+ readonly numFaces?: number;
34
78
  getDetectionResults: () => FaceLandmarkerResult | undefined;
35
79
  getFace: (faceIndex?: number) => Face | undefined;
36
80
  getRawFaceTrackingData: (faceIndex?: number) => FaceRawTrackingData | undefined;
@@ -18,6 +18,11 @@ export type SegmentationData = {
18
18
  maskData: Uint8Array | null;
19
19
  width: number;
20
20
  height: number;
21
+ /**
22
+ * `performance.now()` when the frame this mask comes from was segmented
23
+ * (the clock hand poses use): pair it with tracking from the same moment.
24
+ */
25
+ timestampMs?: number;
21
26
  };
22
27
  export type SegmentationQuality = "low" | "medium" | "high";
23
28
  export type SegmentationModelOptions = {
@@ -29,3 +34,22 @@ export type SegmentationModelOptions = {
29
34
  */
30
35
  quality?: SegmentationQuality;
31
36
  };
37
+ /**
38
+ * Category-segmentation presets served by `XRModel.SEMANTIC_SEGMENTATION`.
39
+ * `hair` runs MediaPipe's Hair Segmenter (`bg` / `hair`); `multiclass` runs
40
+ * the Selfie Multiclass model (`bg`, `hair`, `body_skin`, `face_skin`,
41
+ * `clothes`, `others`). One preset per session: the first acquirer decides.
42
+ */
43
+ export declare const SEMANTIC_SEGMENTATION_PRESETS: readonly ["hair", "multiclass"];
44
+ export type SemanticSegmentationPreset = (typeof SEMANTIC_SEGMENTATION_PRESETS)[number];
45
+ export type SemanticSegmentationModelOptions = {
46
+ preset?: SemanticSegmentationPreset;
47
+ /**
48
+ * Override the model asset URL. Defaults to the SDK CDN path for the
49
+ * preset, which is integrity-verified; a custom URL is fetched best-effort.
50
+ */
51
+ modelUrl?: string;
52
+ /** Process-canvas scale relative to the feed: low 0.5, medium 0.75, high 1. Default medium. */
53
+ quality?: SegmentationQuality;
54
+ };
55
+ export type SemanticSegmentationStatus = "loading" | "ready" | "error";
@@ -1,8 +1,9 @@
1
1
  import { XRMediaSource, XRModel } from '../constants';
2
- import { XRMediaSourceKind } from './compositor';
2
+ import { XRCameraFacing, XRCameraRequest, XRMediaSourceKind } from './compositor';
3
3
  import { BodyModelOptions } from './body';
4
4
  import { FaceModelOptions } from './face';
5
- import { SegmentationModelOptions } from './segmentation';
5
+ import { HolisticModelOptions } from './holistic';
6
+ import { SegmentationModelOptions, SemanticSegmentationModelOptions } from './segmentation';
6
7
  export declare enum SessionStatus {
7
8
  ACTIVE = "ACTIVE",
8
9
  DISABLED = "DISABLED"
@@ -18,6 +19,19 @@ export type Session = {
18
19
  type SetMediaSourceWebcamParams = {
19
20
  source: XRMediaSource.WEBCAM;
20
21
  sourceKind?: "webcam";
22
+ /**
23
+ * Which camera to open: `user` (front, default) or `environment` (rear).
24
+ * Binding again with a different facing swaps the camera mid-session.
25
+ */
26
+ facingMode?: XRCameraFacing;
27
+ /** A specific camera from `enumerateDevices()`; beats `facingMode` when set. */
28
+ deviceId?: string;
29
+ /**
30
+ * Mirror override. Default: the front camera is mirrored (`sourceKind`
31
+ * `"webcam"`), the rear camera is drawn straight (`sourceKind`
32
+ * `"rear-camera"`). Set explicitly for a camera whose facing is unknown.
33
+ */
34
+ mirrored?: boolean;
21
35
  };
22
36
  type SetMediaSourceStreamParams = {
23
37
  source: XRMediaSource.STREAM;
@@ -44,9 +58,15 @@ export type RegisterXRPipelineParams = Array<{
44
58
  } | {
45
59
  model: XRModel.FACE_TRACKER;
46
60
  options?: FaceModelOptions;
61
+ } | {
62
+ model: XRModel.HOLISTIC_TRACKER;
63
+ options?: HolisticModelOptions;
47
64
  } | {
48
65
  model: XRModel.BACKGROUND_SEGMENTATION;
49
66
  options?: SegmentationModelOptions;
67
+ } | {
68
+ model: XRModel.SEMANTIC_SEGMENTATION;
69
+ options?: SemanticSegmentationModelOptions;
50
70
  }>;
51
71
  /**
52
72
  * Public XR session surface. Returned by `useXRContext().session` and used
@@ -62,7 +82,10 @@ export type RegisterXRPipelineParams = Array<{
62
82
  * Lifecycle:
63
83
  *
64
84
  * idle ──setMediaSource──> media-bound ──start──> running ──stop──> stopped
65
- * ↑ │
85
+ * ↑ │ ↑ │
86
+ * │ pause │ │ resume │
87
+ * │ ▼ │ │
88
+ * │ paused ─┘ │
66
89
  * └────────────reset──────────────────────┘
67
90
  */
68
91
  export type XRSession = {
@@ -83,6 +106,21 @@ export type XRSession = {
83
106
  * `stop()` + clear the model registry. Returns the session to `idle`.
84
107
  */
85
108
  reset: () => Promise<void>;
109
+ /**
110
+ * Suspend a `running` session without releasing the camera: the feed loop
111
+ * stops, every model pauses, the video element pauses. No-op in any other
112
+ * state. `resume()` (or `start()`) continues with no rebind.
113
+ */
114
+ pause: () => void;
115
+ /** Continue a `paused` session. No-op in any other state. */
116
+ resume: () => Promise<void>;
117
+ /**
118
+ * Open another camera (`facingMode` / `deviceId`, optional `mirrored`
119
+ * override) and keep going: models, lifecycle and scene stay; a
120
+ * `media-bound` / `stopped` session is started. Resolves to the facing the
121
+ * session ended up with (a single-camera device answers with what it has).
122
+ */
123
+ switchCamera: (request?: XRCameraRequest) => Promise<XRCameraFacing>;
86
124
  /**
87
125
  * @deprecated Prefer `useXRModel(modelName, options)`. Kept as an
88
126
  * additive shim for backwards compatibility — multiple calls are
@@ -0,0 +1,4 @@
1
+ const d = (e, t, o) => !!(o && o > 0 && e - t < 1 / o);
2
+ export {
3
+ d as s
4
+ };
@@ -0,0 +1 @@
1
+ "use strict";const e=(t,d,o)=>!!(o&&o>0&&t-d<1/o);exports.shouldSkipUpdate=e;
@@ -0,0 +1 @@
1
+ "use strict";const c=require("react"),M=require("./select-Ck5LGz-J.cjs"),_=require("@react-three/fiber"),C=require("./index-CfSF8LXa.cjs"),N=require("./getFaceInfo-B1otSDMX.cjs"),b=require("./useFaceResultReader-DuaL1KJG.cjs"),q=require("./landmarks-BlUqf5MZ.cjs"),h=({active:i=!0,holdMs:d=250,numFaces:r=1,targetFps:t,throttleMs:u=16}={})=>{const{camera:s}=_.useThree(),a=Number.isFinite(r)?Math.min(M.XR_MAX_SUBJECTS.face.max,Math.max(1,Math.round(r))):1,l=t!==void 0&&Number.isFinite(t)&&t>0?t:void 0,e=c.useMemo(()=>({numFaces:a,...l?{targetFps:l}:{}}),[a,l]),{node:n,ready:m}=q.useXRModel(C.XRModel.FACE_TRACKER,e,i);c.useEffect(()=>{if(n)for(let o=0;o<e.numFaces;o+=1)n.setCamera(s,o)},[e.numFaces,s,n]);const f=c.useCallback(o=>{if(!n)return[];const x=[];for(let F=0;F<o.faceLandmarks.length;F+=1){const R=N.getFaceInfoFromResults(n,o,F);R&&x.push(R)}return x},[n]);return b.useFaceResultReader({enabled:i&&m,holdMs:Number.isFinite(d)?Math.max(0,d):250,node:n,prepare:f,throttleMs:Number.isFinite(u)?Math.max(0,u):16})},E=4,T=({faceIndex:i=0,numFaces:d,subject:r,...t}={})=>{const u=Number.isFinite(i)?Math.max(0,Math.round(i)):0,s=h({...t,numFaces:Math.max(d??(r?E:u+1),u+1)}),a=c.useRef(M.EMPTY_SUBJECT_MEMORY),l=JSON.stringify(r??null),e=c.useMemo(()=>{if(!r)return null;const n=s.map((m,f)=>({index:f,center:{x:m.bounds.centerX,y:m.bounds.centerY},size:m.bounds.width}));return M.selectSubject(n,r,a.current)},[s,l]);return c.useEffect(()=>{e&&(a.current=e.memory)},[e]),r?e&&e.index!==null?s[e.index]??null:null:s[u]??null};exports.DEFAULT_POLICY_NUM_FACES=E;exports.useFaceInfo=T;exports.useFaceInfos=h;
@@ -0,0 +1,76 @@
1
+ import { useMemo as x, useEffect as p, useCallback as h, useRef as E } from "react";
2
+ import { X as R, E as C, s as N } from "./select-pYRo_win.js";
3
+ import { useThree as _ } from "@react-three/fiber";
4
+ import { X as b } from "./index-CIe7eCMH.js";
5
+ import { g as y } from "./getFaceInfo-Cu4xDWiL.js";
6
+ import { u as T } from "./useFaceResultReader-BvEo5REG.js";
7
+ import { u as X } from "./landmarks-bftdwq6Z.js";
8
+ const S = ({
9
+ active: i = !0,
10
+ holdMs: l = 250,
11
+ numFaces: r = 1,
12
+ targetFps: s,
13
+ throttleMs: o = 16
14
+ } = {}) => {
15
+ const { camera: t } = _(), u = Number.isFinite(r) ? Math.min(R.face.max, Math.max(1, Math.round(r))) : 1, m = s !== void 0 && Number.isFinite(s) && s > 0 ? s : void 0, e = x(
16
+ () => ({
17
+ numFaces: u,
18
+ ...m ? { targetFps: m } : {}
19
+ }),
20
+ [u, m]
21
+ ), { node: n, ready: c } = X(
22
+ b.FACE_TRACKER,
23
+ e,
24
+ i
25
+ );
26
+ p(() => {
27
+ if (n)
28
+ for (let a = 0; a < e.numFaces; a += 1)
29
+ n.setCamera(t, a);
30
+ }, [e.numFaces, t, n]);
31
+ const d = h(
32
+ (a) => {
33
+ if (!n) return [];
34
+ const F = [];
35
+ for (let f = 0; f < a.faceLandmarks.length; f += 1) {
36
+ const M = y(n, a, f);
37
+ M && F.push(M);
38
+ }
39
+ return F;
40
+ },
41
+ [n]
42
+ );
43
+ return T({
44
+ enabled: i && c,
45
+ holdMs: Number.isFinite(l) ? Math.max(0, l) : 250,
46
+ node: n,
47
+ prepare: d,
48
+ throttleMs: Number.isFinite(o) ? Math.max(0, o) : 16
49
+ });
50
+ }, A = 4, L = ({
51
+ faceIndex: i = 0,
52
+ numFaces: l,
53
+ subject: r,
54
+ ...s
55
+ } = {}) => {
56
+ const o = Number.isFinite(i) ? Math.max(0, Math.round(i)) : 0, t = S({
57
+ ...s,
58
+ numFaces: Math.max(l ?? (r ? A : o + 1), o + 1)
59
+ }), u = E(C), m = JSON.stringify(r ?? null), e = x(() => {
60
+ if (!r) return null;
61
+ const n = t.map((c, d) => ({
62
+ index: d,
63
+ center: { x: c.bounds.centerX, y: c.bounds.centerY },
64
+ size: c.bounds.width
65
+ }));
66
+ return N(n, r, u.current);
67
+ }, [t, m]);
68
+ return p(() => {
69
+ e && (u.current = e.memory);
70
+ }, [e]), r ? e && e.index !== null ? t[e.index] ?? null : null : t[o] ?? null;
71
+ };
72
+ export {
73
+ A as D,
74
+ L as a,
75
+ S as u
76
+ };
@@ -0,0 +1,61 @@
1
+ import { useState as E, useEffect as N } from "react";
2
+ import { c as P } from "./getFaceInfo-Cu4xDWiL.js";
3
+ const S = (t, i) => t.map((e) => ({
4
+ landmarks: e,
5
+ bounds: P(e)
6
+ })), R = {
7
+ publishedCount: 0,
8
+ // -Infinity, not 0: the first non-empty frame must publish regardless of its
9
+ // timestamp (a frame at now=0 would otherwise be throttled against 0).
10
+ lastPublishAt: -1 / 0,
11
+ lastNonEmptyAt: -1
12
+ }, g = (t, i, e, a, l) => {
13
+ if (i > 0) {
14
+ const u = { ...t, lastNonEmptyAt: e };
15
+ return e - t.lastPublishAt >= a ? {
16
+ action: "publish",
17
+ state: { publishedCount: i, lastPublishAt: e, lastNonEmptyAt: e }
18
+ } : { action: "none", state: u };
19
+ }
20
+ return t.publishedCount === 0 ? { action: "none", state: t } : t.lastNonEmptyAt >= 0 && e - t.lastNonEmptyAt < l ? { action: "none", state: t } : {
21
+ action: "clear",
22
+ // Reset the throttle anchor so the next reacquired face publishes at once.
23
+ state: { publishedCount: 0, lastPublishAt: -1 / 0, lastNonEmptyAt: t.lastNonEmptyAt }
24
+ };
25
+ }, x = ({
26
+ enabled: t,
27
+ holdMs: i,
28
+ node: e,
29
+ onFrame: a,
30
+ prepare: l,
31
+ throttleMs: u
32
+ }) => {
33
+ const [d, c] = E([]);
34
+ return N(() => {
35
+ if (!t || !e) {
36
+ c((s) => s.length === 0 ? s : []);
37
+ return;
38
+ }
39
+ let r = 0, f, m = R;
40
+ const p = (s, n, o) => {
41
+ const { action: h, state: y } = g(m, s, n, u, i);
42
+ m = y, h === "publish" ? c(o) : h === "clear" && c((A) => A.length === 0 ? A : []);
43
+ }, b = () => {
44
+ r = requestAnimationFrame(b), a == null || a();
45
+ const s = performance.now(), n = e.getDetectionResults();
46
+ if (!n) {
47
+ p(0, s, []), f = n;
48
+ return;
49
+ }
50
+ if (n === f) return;
51
+ f = n;
52
+ const o = l(n);
53
+ p(o.length, s, o);
54
+ };
55
+ return r = requestAnimationFrame(b), () => cancelAnimationFrame(r);
56
+ }, [t, i, e, a, l, u]), d;
57
+ };
58
+ export {
59
+ S as p,
60
+ x as u
61
+ };
@@ -0,0 +1 @@
1
+ "use strict";const d=require("react"),E=require("./getFaceInfo-B1otSDMX.cjs"),F=(t,a)=>t.map(e=>({landmarks:e,bounds:E.computeLandmarkBounds(e)})),N={publishedCount:0,lastPublishAt:-1/0,lastNonEmptyAt:-1},P=(t,a,e,i,u)=>{if(a>0){const l={...t,lastNonEmptyAt:e};return e-t.lastPublishAt>=i?{action:"publish",state:{publishedCount:a,lastPublishAt:e,lastNonEmptyAt:e}}:{action:"none",state:l}}return t.publishedCount===0?{action:"none",state:t}:t.lastNonEmptyAt>=0&&e-t.lastNonEmptyAt<u?{action:"none",state:t}:{action:"clear",state:{publishedCount:0,lastPublishAt:-1/0,lastNonEmptyAt:t.lastNonEmptyAt}}},g=({enabled:t,holdMs:a,node:e,onFrame:i,prepare:u,throttleMs:l})=>{const[y,o]=d.useState([]);return d.useEffect(()=>{if(!t||!e){o(s=>s.length===0?s:[]);return}let r=0,f,b=N;const h=(s,n,c)=>{const{action:A,state:R}=P(b,s,n,l,a);b=R,A==="publish"?o(c):A==="clear"&&o(m=>m.length===0?m:[])},p=()=>{r=requestAnimationFrame(p),i==null||i();const s=performance.now(),n=e.getDetectionResults();if(!n){h(0,s,[]),f=n;return}if(n===f)return;f=n;const c=u(n);h(c.length,s,c)};return r=requestAnimationFrame(p),()=>cancelAnimationFrame(r)},[t,a,e,i,u,l]),y};exports.prepareCalibrationFaceResults=F;exports.useFaceResultReader=g;
@@ -0,0 +1,53 @@
1
+ import { useFrame as E } from "@react-three/fiber";
2
+ import { useRef as a, useCallback as g, useState as _, useEffect as G } from "react";
3
+ const p = 400, m = 150, R = () => ({
4
+ status: "waiting",
5
+ since: null,
6
+ lastMatch: null,
7
+ progress: 0
8
+ }), H = (t, e, s, r = p, c = m) => {
9
+ if (t.status === "done") return t;
10
+ e ? (t.lastMatch = s, t.since === null && (t.since = s)) : (t.lastMatch === null || s - t.lastMatch > c) && (t.since = null);
11
+ const n = t.since === null ? 0 : s - t.since;
12
+ return t.progress = r > 0 ? Math.min(n / r, 1) : t.since === null ? 0 : 1, t.status = t.progress >= 1 ? "done" : t.since === null ? "waiting" : "holding", t;
13
+ }, y = (t, {
14
+ holdMs: e = p,
15
+ graceMs: s = m,
16
+ onComplete: r
17
+ }) => {
18
+ const c = a(R()), n = a(!1), [l, o] = _("waiting"), u = a(r);
19
+ u.current = r;
20
+ const f = g(() => {
21
+ c.current = R(), n.current = !1, o("waiting");
22
+ }, []);
23
+ return G(f, [t, f]), { status: l, holdRef: c, matchedRef: n, reset: f, step: (d) => {
24
+ var h;
25
+ n.current = d;
26
+ const i = c.current, S = i.status;
27
+ H(i, d, performance.now(), e, s), i.status !== S && (o(i.status), i.status === "done" && ((h = u.current) == null || h.call(u)));
28
+ } };
29
+ }, b = (t) => typeof t == "string" ? t : typeof t == "function" ? "match()" : JSON.stringify(t, (e, s) => typeof s == "function" ? "match()" : s), w = () => !0, k = (t, { isInView: e = w, resetKey: s, active: r = !0, ...c } = {}) => {
30
+ const n = y(s, c), l = a(t);
31
+ l.current = t;
32
+ const o = a(e);
33
+ o.current = e;
34
+ const u = g(() => o.current(), []);
35
+ return E(() => {
36
+ r && n.step(!!l.current());
37
+ }), {
38
+ status: n.status,
39
+ holdRef: n.holdRef,
40
+ matchedRef: n.matchedRef,
41
+ isInView: u,
42
+ reset: n.reset
43
+ };
44
+ };
45
+ export {
46
+ p as G,
47
+ k as a,
48
+ m as b,
49
+ R as c,
50
+ H as d,
51
+ b as s,
52
+ y as u
53
+ };