@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
package/dist/low-level.js CHANGED
@@ -1,24 +1,30 @@
1
- import { u as O, X as ee } from "./index-9dlAQAhy.js";
2
- import { u as le } from "./index-ByoNj0QP.js";
3
- import { H as ct, a as ut } from "./index-ByoNj0QP.js";
4
- import { c as de } from "./selectors-B8H97CKA.js";
5
- import { u as mt, b as ft, e as pt, a as gt, d as bt } from "./selectors-B8H97CKA.js";
6
- import { useEffect as z, useState as C, useRef as X, useCallback as ce, useLayoutEffect as ue, useMemo as $, Children as he, isValidElement as me } from "react";
7
- import { c as fe } from "./getFaceInfo-C4QpCQIY.js";
8
- import { d as xt, e as vt } from "./getFaceInfo-C4QpCQIY.js";
9
- import { jsx as g, jsxs as k, Fragment as _ } from "react/jsx-runtime";
10
- import { PerspectiveCamera as pe } from "@react-three/drei";
11
- import { S as yt, g as Ct, c as Rt, d as It, u as Et } from "./index-VJ0SJwmG.js";
12
- import { u as te } from "./useFaceResults-CtetsO9M.js";
13
- import { h as Mt } from "./hasFullUnitUVBounds-BGvcFsQM.js";
14
- import { X as ge, a as be, b as we } from "./contexts-ByhzppYl.js";
15
- import { B as zt, M as Xt, h as kt, i as At, T as Lt, c as Vt, j as Dt, k as Bt, g as _t, e as Wt, f as Ht, r as Pt, t as $t, d as qt, u as Ut } from "./contexts-ByhzppYl.js";
16
- import * as L from "three";
17
- const B = ({
1
+ import { u as ie, X as H, v as he, ab as P, m as ge, d as ye, a1 as be, s as we, z as ee } from "./index-CIe7eCMH.js";
2
+ import { E as kt, af as _t, ar as Lt, as as Ot, ad as Dt, ah as Xt, x as Ht, ap as Bt, at as Nt, ai as Pt, l as zt, ac as $t, ag as Vt, aj as Wt, g as Gt, ak as Ut, al as qt, am as jt, aq as Kt, e as Yt, an as Qt, ao as Jt, ae as Zt } from "./index-CIe7eCMH.js";
3
+ import { H as ta, u as aa } from "./index-BavF06C6.js";
4
+ import { u as Se } from "./landmarks-bftdwq6Z.js";
5
+ import { b as ve } from "./selectors-DmNaKIwE.js";
6
+ import { m as na, l as sa, c as ia, f as oa, g as la, p as da, h as ca, e as ua, i as ma, n as pa, q as fa, a as ha, u as ga, d as ya, o as ba, k as wa, j as Sa } from "./selectors-DmNaKIwE.js";
7
+ import { useEffect as k, useState as T, useRef as L, useCallback as xe, useLayoutEffect as Re, useMemo as U, Children as Ce, isValidElement as Ee } from "react";
8
+ import { c as Te } from "./getFaceInfo-Cu4xDWiL.js";
9
+ import { a as xa, b as Ra } from "./getFaceInfo-Cu4xDWiL.js";
10
+ import { jsx as w, jsxs as O, Fragment as $ } from "react/jsx-runtime";
11
+ import { PerspectiveCamera as Me } from "@react-three/drei";
12
+ import { g as Ea, b as Ta, c as Ma } from "./index-zGaqrz_K.js";
13
+ import { R as oe } from "./trigger-IQeys0oS.js";
14
+ import { ah as Fa, ad as Ia, ai as ka, Z as _a, S as La, ao as Oa, a2 as Da, a5 as Xa, H as Ha, ap as Ba, aq as Na, a as Pa, O as za, U as $a, _ as Va, au as Wa, as as Ga, at as Ua, ae as qa, l as ja, n as Ka, i as Ya, a3 as Qa, aa as Ja, av as Za, aj as er, ar as tr, V as ar, ak as rr, al as nr, a6 as sr, a7 as ir, a8 as or, a9 as lr, af as dr, b as cr, d as ur, g as mr, e as pr, f as fr, h as hr, m as gr, c as yr, a4 as br, $ as wr, a0 as Sr, am as vr, j as xr, ab as Rr, a1 as Cr, s as Er, k as Tr, X as Mr, Y as Ar, aw as Fr, ax as Ir, ag as kr, an as _r, ac as Lr } from "./trigger-IQeys0oS.js";
15
+ import { h as Dr } from "./hasFullUnitUVBounds-BGvcFsQM.js";
16
+ import { X as Ae, a as Fe, b as Ie } from "./contexts-jak8-tND.js";
17
+ import { B as Hr, M as Br, h as Nr, i as Pr, T as zr, c as $r, j as Vr, k as Wr, g as Gr, e as Ur, f as qr, r as jr, t as Kr, d as Yr, u as Qr } from "./contexts-jak8-tND.js";
18
+ import { H as Zr, v as en, w as tn, x as an, y as rn, o as nn, z as sn, b as on, t as ln, p as dn, l as cn, s as un, n as mn } from "./index-JII7huPk.js";
19
+ import { c as fn, g as hn, s as gn, a as yn } from "./detector-K8aej4MB.js";
20
+ import { F as wn, i as Sn, I as vn, M as xn, S as Rn, l as Cn, j as En, t as Tn, k as Mn, c as An, m as Fn, p as In, v as kn, r as _n, s as Ln, n as On, u as Dn, o as Xn, q as Hn, b as Bn, a as Nn } from "./providers-C8rE26Uf.js";
21
+ import { S as zn, u as $n } from "./context-DTxSQvp4.js";
22
+ import * as X from "three";
23
+ const z = ({
18
24
  children: e,
19
25
  config: t,
20
- style: n
21
- }) => /* @__PURE__ */ g(
26
+ style: r
27
+ }) => /* @__PURE__ */ w(
22
28
  "div",
23
29
  {
24
30
  "data-render-target": t.name,
@@ -30,88 +36,88 @@ const B = ({
30
36
  pointerEvents: t.pointerEvents ?? "none",
31
37
  zIndex: t.zIndex,
32
38
  opacity: t.hidden ? 0 : 1,
33
- ...n
39
+ ...r
34
40
  },
35
41
  children: e
36
42
  }
37
43
  ), q = ({
38
44
  canvas: e,
39
45
  layout: t,
40
- media: n,
41
- mirrored: r,
42
- filter: i
46
+ media: r,
47
+ mirrored: a,
48
+ filter: n
43
49
  }) => {
44
- const o = Math.round(t.destination.width), a = Math.round(t.destination.height);
45
- e.width !== o && (e.width = o), e.height !== a && (e.height = a);
46
- const s = e.getContext("2d");
47
- s && (s.setTransform(1, 0, 0, 1, 0, 0), s.clearRect(0, 0, o, a), r && (s.translate(o, 0), s.scale(-1, 1)), i && (s.filter = i), s.drawImage(n, t.offsetX, t.offsetY, t.drawWidth, t.drawHeight), i && (s.filter = "none"), s.setTransform(1, 0, 0, 1, 0, 0));
48
- }, re = ({
50
+ const d = Math.round(t.destination.width), u = Math.round(t.destination.height);
51
+ e.width !== d && (e.width = d), e.height !== u && (e.height = u);
52
+ const c = e.getContext("2d");
53
+ c && (c.setTransform(1, 0, 0, 1, 0, 0), c.clearRect(0, 0, d, u), a && (c.translate(d, 0), c.scale(-1, 1)), n && (c.filter = n), c.drawImage(r, t.offsetX, t.offsetY, t.drawWidth, t.drawHeight), n && (c.filter = "none"), c.setTransform(1, 0, 0, 1, 0, 0));
54
+ }, le = ({
49
55
  canvasRef: e,
50
56
  enabled: t = !0,
51
- fps: n = 30,
52
- imageRef: r,
53
- layout: i,
54
- mirrored: o,
55
- sourceKind: a,
56
- videoRef: s
57
+ fps: r = 30,
58
+ imageRef: a,
59
+ layout: n,
60
+ mirrored: d,
61
+ sourceKind: u,
62
+ videoRef: c
57
63
  }) => {
58
- z(() => {
64
+ k(() => {
59
65
  if (!t) {
60
- const b = e.current, f = b == null ? void 0 : b.getContext("2d");
61
- b && f && f.clearRect(0, 0, b.width, b.height);
66
+ const f = e.current, g = f == null ? void 0 : f.getContext("2d");
67
+ f && g && g.clearRect(0, 0, f.width, f.height);
62
68
  return;
63
69
  }
64
- let l = 0, d = 0;
65
- const c = n > 0 ? 1e3 / n : 0, h = (b) => {
66
- if (l = requestAnimationFrame(h), c > 0 && b - d < c) return;
67
- d = b;
68
- const f = e.current;
69
- if (!f || !i) return;
70
- if (a === "image") {
71
- const p = r.current;
72
- if (!p || !p.complete || p.naturalWidth <= 0 || p.naturalHeight <= 0)
70
+ let i = 0, p = 0;
71
+ const h = r > 0 ? 1e3 / r : 0, s = (f) => {
72
+ if (i = requestAnimationFrame(s), h > 0 && f - p < h) return;
73
+ p = f;
74
+ const g = e.current;
75
+ if (!g || !n) return;
76
+ if (u === "image") {
77
+ const l = a.current;
78
+ if (!l || !l.complete || l.naturalWidth <= 0 || l.naturalHeight <= 0)
73
79
  return;
74
80
  q({
75
- canvas: f,
76
- layout: i,
77
- media: p,
78
- mirrored: o
81
+ canvas: g,
82
+ layout: n,
83
+ media: l,
84
+ mirrored: d
79
85
  });
80
86
  return;
81
87
  }
82
- const w = s.current;
83
- !w || w.readyState < 2 || w.videoWidth <= 0 || w.videoHeight <= 0 || q({
84
- canvas: f,
85
- layout: i,
86
- media: w,
87
- mirrored: o
88
+ const o = c.current;
89
+ !o || o.readyState < 2 || o.videoWidth <= 0 || o.videoHeight <= 0 || q({
90
+ canvas: g,
91
+ layout: n,
92
+ media: o,
93
+ mirrored: d
88
94
  });
89
95
  };
90
- return l = requestAnimationFrame(h), () => {
91
- cancelAnimationFrame(l);
96
+ return i = requestAnimationFrame(s), () => {
97
+ cancelAnimationFrame(i);
92
98
  };
93
- }, [e, t, n, r, i, o, a, s]);
94
- }, xe = ({
99
+ }, [e, t, r, a, n, d, u, c]);
100
+ }, ke = ({
95
101
  canvasRef: e,
96
102
  imageRef: t,
97
- layer: n,
98
- layout: r,
99
- mirrored: i,
100
- onCaptureTarget: o,
101
- sourceKind: a,
102
- videoRef: s
103
- }) => (re({
103
+ layer: r,
104
+ layout: a,
105
+ mirrored: n,
106
+ onCaptureTarget: d,
107
+ sourceKind: u,
108
+ videoRef: c
109
+ }) => (le({
104
110
  canvasRef: e,
105
111
  imageRef: t,
106
- layout: r,
107
- mirrored: i,
108
- sourceKind: a,
109
- videoRef: s
110
- }), z(() => {
111
- const l = e.current;
112
- if (l)
113
- return o == null || o(l), () => o == null ? void 0 : o(void 0);
114
- }, [e, o]), /* @__PURE__ */ g(B, { config: n, children: /* @__PURE__ */ g(
112
+ layout: a,
113
+ mirrored: n,
114
+ sourceKind: u,
115
+ videoRef: c
116
+ }), k(() => {
117
+ const i = e.current;
118
+ if (i)
119
+ return d == null || d(i), () => d == null ? void 0 : d(void 0);
120
+ }, [e, d]), /* @__PURE__ */ w(z, { config: r, children: /* @__PURE__ */ w(
115
121
  "canvas",
116
122
  {
117
123
  ref: e,
@@ -124,84 +130,84 @@ const B = ({
124
130
  background: "#000"
125
131
  }
126
132
  }
127
- ) })), tt = ({
133
+ ) })), St = ({
128
134
  canvasRef: e,
129
135
  controlInsetTop: t,
130
- debugVisible: n,
131
- fps: r = 15,
132
- imageRef: i,
133
- layer: o,
134
- layout: a,
135
- mirrored: s,
136
- sourceKind: l,
137
- videoRef: d,
138
- viewportSize: c
136
+ debugVisible: r,
137
+ fps: a = 15,
138
+ imageRef: n,
139
+ layer: d,
140
+ layout: u,
141
+ mirrored: c,
142
+ sourceKind: i,
143
+ videoRef: p,
144
+ viewportSize: h
139
145
  }) => {
140
- re({
146
+ le({
141
147
  canvasRef: e,
142
- enabled: n,
143
- fps: r,
144
- imageRef: i,
145
- layout: a,
146
- mirrored: s,
147
- sourceKind: l,
148
- videoRef: d
148
+ enabled: r,
149
+ fps: a,
150
+ imageRef: n,
151
+ layout: u,
152
+ mirrored: c,
153
+ sourceKind: i,
154
+ videoRef: p
149
155
  });
150
- const h = Math.min(220, Math.max(120, c.width * 0.22)), b = c.width > 0 && c.height > 0 ? c.width / c.height : 1, f = Math.min(c.height - 24, Math.max(t ?? 16, 16));
151
- return /* @__PURE__ */ g(B, { config: o, children: /* @__PURE__ */ g(
156
+ const s = Math.min(220, Math.max(120, h.width * 0.22)), f = h.width > 0 && h.height > 0 ? h.width / h.height : 1, g = Math.min(h.height - 24, Math.max(t ?? 16, 16));
157
+ return /* @__PURE__ */ w(z, { config: d, children: /* @__PURE__ */ w(
152
158
  "canvas",
153
159
  {
154
160
  ref: e,
155
161
  style: {
156
162
  position: "absolute",
157
163
  left: 16,
158
- top: f,
159
- width: n ? h : 1,
160
- height: n ? "auto" : 1,
161
- aspectRatio: `${b}`,
162
- opacity: n ? 0.85 : 0,
164
+ top: g,
165
+ width: r ? s : 1,
166
+ height: r ? "auto" : 1,
167
+ aspectRatio: `${f}`,
168
+ opacity: r ? 0.85 : 0,
163
169
  borderRadius: 10,
164
- border: n ? "1px solid rgba(255,255,255,0.16)" : "none",
170
+ border: r ? "1px solid rgba(255,255,255,0.16)" : "none",
165
171
  pointerEvents: "none",
166
172
  objectFit: "contain",
167
173
  background: "#000"
168
174
  }
169
175
  }
170
176
  ) });
171
- }, ve = {
177
+ }, _e = {
172
178
  audio: !1,
173
179
  video: {
174
180
  facingMode: "user",
175
181
  frameRate: { ideal: 30, max: 60 }
176
182
  }
177
- }, Se = {
183
+ }, Le = {
178
184
  name: "viewport-live",
179
185
  clearColor: "#000000",
180
186
  pointerEvents: "none",
181
187
  zIndex: 0
182
- }, ye = {
188
+ }, Oe = {
183
189
  name: "viewport-ui",
184
190
  clearColor: "transparent",
185
191
  pointerEvents: "auto",
186
192
  zIndex: 5
187
- }, Ce = {
193
+ }, De = {
188
194
  name: "viewport-scene",
189
195
  clearColor: "transparent",
190
196
  pointerEvents: "auto",
191
197
  zIndex: 1
192
- }, A = {
198
+ }, D = {
193
199
  webcam: { icon: "◉", label: "Webcam" },
194
200
  image: { icon: "▣", label: "Images" },
195
201
  video: { icon: "▶", label: "Videos" }
196
- }, Re = ({
202
+ }, Xe = ({
197
203
  imageRef: e,
198
204
  selectedSource: t,
199
- videoRef: n
200
- }) => /* @__PURE__ */ k(_, { children: [
201
- /* @__PURE__ */ g(
205
+ videoRef: r
206
+ }) => /* @__PURE__ */ O($, { children: [
207
+ /* @__PURE__ */ w(
202
208
  "video",
203
209
  {
204
- ref: n,
210
+ ref: r,
205
211
  style: {
206
212
  position: "absolute",
207
213
  width: 1,
@@ -211,7 +217,7 @@ const B = ({
211
217
  }
212
218
  }
213
219
  ),
214
- /* @__PURE__ */ g(
220
+ /* @__PURE__ */ w(
215
221
  "img",
216
222
  {
217
223
  ref: e,
@@ -225,13 +231,13 @@ const B = ({
225
231
  }
226
232
  }
227
233
  )
228
- ] }), Y = ({
234
+ ] }), te = ({
229
235
  dock: e,
230
236
  label: t,
231
- onChange: n,
232
- options: r,
233
- value: i
234
- }) => /* @__PURE__ */ g(
237
+ onChange: r,
238
+ options: a,
239
+ value: n
240
+ }) => /* @__PURE__ */ w(
235
241
  "div",
236
242
  {
237
243
  style: {
@@ -248,7 +254,7 @@ const B = ({
248
254
  boxShadow: "0 12px 30px rgba(0,0,0,0.18)",
249
255
  backdropFilter: "blur(10px)"
250
256
  },
251
- children: /* @__PURE__ */ k(
257
+ children: /* @__PURE__ */ O(
252
258
  "label",
253
259
  {
254
260
  style: {
@@ -259,12 +265,12 @@ const B = ({
259
265
  fontWeight: 700
260
266
  },
261
267
  children: [
262
- /* @__PURE__ */ g("span", { children: t }),
263
- /* @__PURE__ */ g(
268
+ /* @__PURE__ */ w("span", { children: t }),
269
+ /* @__PURE__ */ w(
264
270
  "select",
265
271
  {
266
- value: i,
267
- onChange: (o) => n(o.target.value),
272
+ value: n,
273
+ onChange: (d) => r(d.target.value),
268
274
  style: {
269
275
  minWidth: 180,
270
276
  maxWidth: "calc(100vw - 52px)",
@@ -275,31 +281,31 @@ const B = ({
275
281
  color: "#e5eefb",
276
282
  padding: "0 10px"
277
283
  },
278
- children: r.map((o) => /* @__PURE__ */ g("option", { value: o.id, style: { color: "#111827" }, children: o.label }, o.id))
284
+ children: a.map((d) => /* @__PURE__ */ w("option", { value: d.id, style: { color: "#111827" }, children: d.label }, d.id))
279
285
  }
280
286
  )
281
287
  ]
282
288
  }
283
289
  )
284
290
  }
285
- ), Ie = ({
291
+ ), He = ({
286
292
  dock: e,
287
293
  imageOptions: t,
288
- selectedImageId: n,
289
- selectedSource: r,
290
- selectedVideoId: i,
291
- setSelectedImageId: o,
292
- setSelectedSource: a,
293
- setSelectedVideoId: s,
294
- showMediaControls: l,
295
- videoOptions: d
294
+ selectedImageId: r,
295
+ selectedSource: a,
296
+ selectedVideoId: n,
297
+ setSelectedImageId: d,
298
+ setSelectedSource: u,
299
+ setSelectedVideoId: c,
300
+ showMediaControls: i,
301
+ videoOptions: p
296
302
  }) => {
297
- const [c, h] = C(!1), b = ["webcam", "image", "video"].filter((f) => f === "image" ? t.length > 0 : f === "video" ? d.length > 0 : !0);
298
- return l ? c ? /* @__PURE__ */ g(
303
+ const [h, s] = T(!1), f = ["webcam", "image", "video"].filter((g) => g === "image" ? t.length > 0 : g === "video" ? p.length > 0 : !0);
304
+ return i ? h ? /* @__PURE__ */ w(
299
305
  "button",
300
306
  {
301
307
  type: "button",
302
- onClick: () => h(!1),
308
+ onClick: () => s(!1),
303
309
  "aria-label": "Open media controls",
304
310
  title: "Open media controls",
305
311
  style: {
@@ -320,8 +326,8 @@ const B = ({
320
326
  },
321
327
  children: "≡"
322
328
  }
323
- ) : /* @__PURE__ */ k(_, { children: [
324
- /* @__PURE__ */ k(
329
+ ) : /* @__PURE__ */ O($, { children: [
330
+ /* @__PURE__ */ O(
325
331
  "div",
326
332
  {
327
333
  style: {
@@ -336,7 +342,7 @@ const B = ({
336
342
  maxWidth: "calc(100vw - 32px)"
337
343
  },
338
344
  children: [
339
- /* @__PURE__ */ g(
345
+ /* @__PURE__ */ w(
340
346
  "div",
341
347
  {
342
348
  style: {
@@ -351,15 +357,15 @@ const B = ({
351
357
  backdropFilter: "blur(10px)",
352
358
  overflowX: "auto"
353
359
  },
354
- children: b.map((f) => {
355
- const w = f === r;
356
- return /* @__PURE__ */ k(
360
+ children: f.map((g) => {
361
+ const o = g === a;
362
+ return /* @__PURE__ */ O(
357
363
  "button",
358
364
  {
359
365
  type: "button",
360
- onClick: () => a(f),
361
- "aria-pressed": w,
362
- title: A[f].label,
366
+ onClick: () => u(g),
367
+ "aria-pressed": o,
368
+ title: D[g].label,
363
369
  style: {
364
370
  border: "none",
365
371
  borderRadius: 999,
@@ -370,26 +376,26 @@ const B = ({
370
376
  alignItems: "center",
371
377
  justifyContent: "center",
372
378
  gap: 8,
373
- background: w ? "rgba(56, 189, 248, 0.18)" : "rgba(255,255,255,0.04)",
374
- color: w ? "#e0f2fe" : "rgba(229,238,251,0.82)",
379
+ background: o ? "rgba(56, 189, 248, 0.18)" : "rgba(255,255,255,0.04)",
380
+ color: o ? "#e0f2fe" : "rgba(229,238,251,0.82)",
375
381
  cursor: "pointer",
376
382
  flex: "0 0 auto"
377
383
  },
378
384
  children: [
379
- /* @__PURE__ */ g("span", { style: { fontSize: 14, lineHeight: 1 }, children: A[f].icon }),
380
- /* @__PURE__ */ g("span", { style: { fontSize: 12, fontWeight: 700, letterSpacing: "0.01em" }, children: A[f].label })
385
+ /* @__PURE__ */ w("span", { style: { fontSize: 14, lineHeight: 1 }, children: D[g].icon }),
386
+ /* @__PURE__ */ w("span", { style: { fontSize: 12, fontWeight: 700, letterSpacing: "0.01em" }, children: D[g].label })
381
387
  ]
382
388
  },
383
- f
389
+ g
384
390
  );
385
391
  })
386
392
  }
387
393
  ),
388
- /* @__PURE__ */ g(
394
+ /* @__PURE__ */ w(
389
395
  "button",
390
396
  {
391
397
  type: "button",
392
- onClick: () => h(!0),
398
+ onClick: () => s(!0),
393
399
  "aria-label": "Close media controls",
394
400
  title: "Close media controls",
395
401
  style: {
@@ -410,55 +416,55 @@ const B = ({
410
416
  ]
411
417
  }
412
418
  ),
413
- r === "image" && t.length > 0 && /* @__PURE__ */ g(
414
- Y,
419
+ a === "image" && t.length > 0 && /* @__PURE__ */ w(
420
+ te,
415
421
  {
416
422
  dock: e,
417
423
  label: "Image Asset",
418
424
  options: t,
419
- value: n,
420
- onChange: o
425
+ value: r,
426
+ onChange: d
421
427
  }
422
428
  ),
423
- r === "video" && d.length > 0 && /* @__PURE__ */ g(
424
- Y,
429
+ a === "video" && p.length > 0 && /* @__PURE__ */ w(
430
+ te,
425
431
  {
426
432
  dock: e,
427
433
  label: "Video Asset",
428
- options: d,
429
- value: i,
430
- onChange: s
434
+ options: p,
435
+ value: n,
436
+ onChange: c
431
437
  }
432
438
  )
433
439
  ] }) : null;
434
- }, Ee = ({
440
+ }, Be = ({
435
441
  containerRef: e,
436
442
  displayCanvasRef: t,
437
- imageOptions: n,
438
- imageRef: r,
439
- layout: i,
440
- managesOwnMedia: o,
441
- mediaDock: a,
442
- mode: s,
443
- overlayContent: l,
444
- renderOutputs: d,
445
- sceneContent: c,
446
- selectedImageId: h,
447
- selectedSource: b,
448
- selectedVideoId: f,
449
- setSceneRenderOutputs: w,
450
- setSelectedImageId: p,
443
+ imageOptions: r,
444
+ imageRef: a,
445
+ layout: n,
446
+ managesOwnMedia: d,
447
+ mediaDock: u,
448
+ mode: c,
449
+ overlayContent: i,
450
+ renderOutputs: p,
451
+ sceneContent: h,
452
+ selectedImageId: s,
453
+ selectedSource: f,
454
+ selectedVideoId: g,
455
+ setSceneRenderOutputs: o,
456
+ setSelectedImageId: l,
451
457
  setSelectedSource: m,
452
- setSelectedVideoId: S,
453
- showMediaControls: M,
458
+ setSelectedVideoId: b,
459
+ showMediaControls: S,
454
460
  style: R,
455
- videoOptions: v,
461
+ videoOptions: x,
456
462
  videoRef: E,
457
- viewportSize: x,
458
- mirrored: u
463
+ viewportSize: v,
464
+ mirrored: y
459
465
  }) => {
460
- const { session: I } = O();
461
- return /* @__PURE__ */ k(
466
+ const { session: M } = ie();
467
+ return /* @__PURE__ */ O(
462
468
  "div",
463
469
  {
464
470
  ref: e,
@@ -470,576 +476,568 @@ const B = ({
470
476
  ...R
471
477
  },
472
478
  children: [
473
- /* @__PURE__ */ g(Re, { imageRef: r, selectedSource: b, videoRef: E }),
474
- s === "dom" && o && /* @__PURE__ */ g(
475
- xe,
479
+ /* @__PURE__ */ w(Xe, { imageRef: a, selectedSource: f, videoRef: E }),
480
+ c === "dom" && d && /* @__PURE__ */ w(
481
+ ke,
476
482
  {
477
483
  canvasRef: t,
478
- imageRef: r,
484
+ imageRef: a,
479
485
  videoRef: E,
480
- layer: Se,
481
- layout: i,
482
- mirrored: u,
483
- onCaptureTarget: I._setCaptureTarget,
484
- sourceKind: b === "image" ? "image" : "video"
486
+ layer: Le,
487
+ layout: n,
488
+ mirrored: y,
489
+ onCaptureTarget: M._setCaptureTarget,
490
+ sourceKind: f === "image" ? "image" : "video"
485
491
  }
486
492
  ),
487
- (s === "r3f" || s === "hybrid") && /* @__PURE__ */ g(B, { config: Ce, children: /* @__PURE__ */ g(
488
- ge,
493
+ (c === "r3f" || c === "hybrid") && /* @__PURE__ */ w(z, { config: De, children: /* @__PURE__ */ w(
494
+ Ae,
489
495
  {
490
- onRenderOutputs: w,
496
+ onRenderOutputs: o,
491
497
  renderOutputs: {
492
- sceneColor: d.sceneColor || d.finalColor,
493
- sceneDepth: d.sceneDepth
498
+ sceneColor: p.sceneColor || p.finalColor,
499
+ sceneDepth: p.sceneDepth
494
500
  },
495
- renderTargetSize: x,
501
+ renderTargetSize: v,
496
502
  style: { width: "100%", height: "100%" },
497
- children: c
503
+ children: h
498
504
  }
499
505
  ) }),
500
- /* @__PURE__ */ k(B, { config: ye, children: [
501
- o && /* @__PURE__ */ g(
502
- Ie,
506
+ /* @__PURE__ */ O(z, { config: Oe, children: [
507
+ d && /* @__PURE__ */ w(
508
+ He,
503
509
  {
504
- dock: a,
505
- imageOptions: n,
506
- selectedImageId: h,
507
- selectedSource: b,
508
- selectedVideoId: f,
509
- setSelectedImageId: p,
510
+ dock: u,
511
+ imageOptions: r,
512
+ selectedImageId: s,
513
+ selectedSource: f,
514
+ selectedVideoId: g,
515
+ setSelectedImageId: l,
510
516
  setSelectedSource: m,
511
- setSelectedVideoId: S,
512
- showMediaControls: M,
513
- videoOptions: v
517
+ setSelectedVideoId: b,
518
+ showMediaControls: S,
519
+ videoOptions: x
514
520
  }
515
521
  ),
516
- l
522
+ i
517
523
  ] })
518
524
  ]
519
525
  }
520
526
  );
521
- }, Fe = 5, Me = 1, Te = (e, t) => t, ze = "brightness(2.2) contrast(1.5) saturate(1.25)", Xe = ({
527
+ }, Ne = 5, Pe = 1, ze = (e, t) => t, $e = "brightness(2.2) contrast(1.5) saturate(1.25)", Ve = ({
522
528
  enabled: e,
523
529
  displayMirrored: t,
524
- imageRef: n,
525
- layout: r,
526
- mode: i,
527
- numFaces: o,
528
- selectedSource: a,
529
- sourceStream: s,
530
- videoRef: l
530
+ imageRef: r,
531
+ layout: a,
532
+ mode: n,
533
+ numFaces: d,
534
+ selectedSource: u,
535
+ sourceStream: c,
536
+ videoRef: i
531
537
  }) => {
532
- const { session: d } = O(), c = X(null), h = X(!1), b = X(document.createElement("canvas")), {
533
- ready: f,
534
- node: w,
535
- error: p
536
- } = le(ee.FACE_TRACKER, {
537
- numFaces: o ?? (i === "head-binding" ? Me : Fe)
538
- }), [m, S] = C("idle"), [M, R] = C(null), v = e && f && !!w, E = te({
539
- node: v ? w : null,
540
- enabled: v,
541
- selectedSource: a,
542
- onFrame: ce(() => {
543
- R(null), S("ready");
538
+ const { session: p } = ie(), h = L(null), s = L(!1), f = L(document.createElement("canvas")), {
539
+ ready: g,
540
+ node: o,
541
+ error: l
542
+ } = Se(H.FACE_TRACKER, {
543
+ numFaces: d ?? (n === "head-binding" ? Pe : Ne)
544
+ }), [m, b] = T("idle"), [S, R] = T(null), x = e && g && !!o, E = oe({
545
+ node: x ? o : null,
546
+ enabled: x,
547
+ selectedSource: u,
548
+ onFrame: xe(() => {
549
+ R(null), b("ready");
544
550
  }, [])
545
551
  });
546
- return z(() => {
547
- if (!e || !r) return;
548
- const x = () => {
549
- const y = a === "image" ? n.current : l.current;
550
- if (y) {
551
- if (y instanceof HTMLImageElement) {
552
- if (!y.complete || y.naturalWidth <= 0 || y.naturalHeight <= 0) return;
553
- } else if (y.readyState < 2 || y.videoWidth <= 0 || y.videoHeight <= 0)
552
+ return k(() => {
553
+ if (!e || !a) return;
554
+ const v = () => {
555
+ const C = u === "image" ? r.current : i.current;
556
+ if (C) {
557
+ if (C instanceof HTMLImageElement) {
558
+ if (!C.complete || C.naturalWidth <= 0 || C.naturalHeight <= 0) return;
559
+ } else if (C.readyState < 2 || C.videoWidth <= 0 || C.videoHeight <= 0)
554
560
  return;
555
561
  q({
556
- canvas: b.current,
557
- layout: r,
558
- media: y,
562
+ canvas: f.current,
563
+ layout: a,
564
+ media: C,
559
565
  mirrored: t,
560
- filter: a === "webcam" ? ze : void 0
566
+ filter: u === "webcam" ? $e : void 0
561
567
  });
562
568
  }
563
569
  };
564
- if (a === "image") {
565
- x();
570
+ if (u === "image") {
571
+ v();
566
572
  return;
567
573
  }
568
- let u = 0;
569
- const I = () => {
570
- u = requestAnimationFrame(I), x();
574
+ let y = 0;
575
+ const M = () => {
576
+ y = requestAnimationFrame(M), v();
571
577
  };
572
- return u = requestAnimationFrame(I), () => cancelAnimationFrame(u);
573
- }, [t, e, n, r, a, l]), z(() => {
574
- var V;
578
+ return y = requestAnimationFrame(M), () => cancelAnimationFrame(y);
579
+ }, [t, e, r, a, u, i]), k(() => {
580
+ var B;
575
581
  if (!e) {
576
- S("idle"), R(null), h.current = !1, c.current = null;
582
+ b("idle"), R(null), s.current = !1, h.current = null;
577
583
  return;
578
584
  }
579
- if (!r) {
580
- S("initializing");
585
+ if (!a) {
586
+ b("initializing");
581
587
  return;
582
588
  }
583
- const x = (s == null ? void 0 : s.id) ?? (((V = l.current) == null ? void 0 : V.srcObject) instanceof MediaStream ? l.current.srcObject.id : "none"), I = a === "webcam" ? `webcam:${x}` : a;
584
- c.current !== I && (h.current = !1, c.current = I);
585
- let y = !1;
589
+ const v = (c == null ? void 0 : c.id) ?? (((B = i.current) == null ? void 0 : B.srcObject) instanceof MediaStream ? i.current.srcObject.id : "none"), M = u === "webcam" ? `webcam:${v}` : u;
590
+ h.current !== M && (s.current = !1, h.current = M);
591
+ let C = !1;
586
592
  return (async () => {
587
593
  try {
588
- S("initializing");
589
- const T = !h.current;
590
- if (T && await d.setFrameSource({
591
- canvas: b.current,
592
- sourceKind: a
593
- }), await d._setRenderSize(
594
- Math.round(r.destination.width),
595
- Math.round(r.destination.height)
596
- ), T && (await d.start(), h.current = !0), y) return;
597
- R(null), S("initializing");
598
- } catch (T) {
599
- if (y) return;
600
- S("error"), R(T instanceof Error ? T.message : "Failed to initialize SDK face tracking");
594
+ b("initializing");
595
+ const I = !s.current;
596
+ if (I && await p.setFrameSource({
597
+ canvas: f.current,
598
+ sourceKind: u
599
+ }), await p._setRenderSize(
600
+ Math.round(a.destination.width),
601
+ Math.round(a.destination.height)
602
+ ), I && (await p.start(), s.current = !0), C) return;
603
+ R(null), b("initializing");
604
+ } catch (I) {
605
+ if (C) return;
606
+ b("error"), R(I instanceof Error ? I.message : "Failed to initialize SDK face tracking");
601
607
  }
602
608
  })(), () => {
603
- y = !0;
609
+ C = !0;
604
610
  };
605
- }, [e, r, a, d, s, l]), z(() => {
606
- !v && e && !p && S("initializing");
607
- }, [v, e, p]), z(() => {
608
- p && (S("error"), R(p.message));
609
- }, [p]), z(() => () => {
610
- h.current = !1, d.stop();
611
- }, [d]), {
611
+ }, [e, a, u, p, c, i]), k(() => {
612
+ !x && e && !l && b("initializing");
613
+ }, [x, e, l]), k(() => {
614
+ l && (b("error"), R(l.message));
615
+ }, [l]), k(() => () => {
616
+ s.current = !1, p.stop();
617
+ }, [p]), {
612
618
  activeDelegate: "GPU",
613
619
  faces: E,
614
620
  status: m,
615
- error: M
621
+ error: S
616
622
  };
617
- }, ke = (e, t) => e === "auto" ? t === "webcam" ? "cover" : "contain" : e, Ae = ({
623
+ }, We = (e, t) => e === "auto" ? t === "webcam" ? "cover" : "contain" : e, Ge = ({
618
624
  imageOptions: e,
619
625
  initialImageId: t,
620
- initialSource: n,
621
- initialVideoId: r,
622
- source: i,
623
- videoOptions: o
626
+ initialSource: r,
627
+ initialVideoId: a,
628
+ source: n,
629
+ videoOptions: d
624
630
  }) => {
625
- var l, d, c, h;
626
- const a = (i == null ? void 0 : i.kind) ?? n ?? "webcam";
631
+ var i, p, h, s;
632
+ const u = (n == null ? void 0 : n.kind) ?? r ?? "webcam";
627
633
  return {
628
- selectedSource: a === "image" && e.length === 0 || a === "video" && o.length === 0 ? "webcam" : a,
629
- selectedImageId: (i == null ? void 0 : i.kind) === "image" ? i.assetId ?? ((l = e[0]) == null ? void 0 : l.id) ?? "" : t ?? ((d = e[0]) == null ? void 0 : d.id) ?? "",
630
- selectedVideoId: (i == null ? void 0 : i.kind) === "video" ? i.assetId ?? ((c = o[0]) == null ? void 0 : c.id) ?? "" : r ?? ((h = o[0]) == null ? void 0 : h.id) ?? ""
634
+ selectedSource: u === "image" && e.length === 0 || u === "video" && d.length === 0 ? "webcam" : u,
635
+ selectedImageId: (n == null ? void 0 : n.kind) === "image" ? n.assetId ?? ((i = e[0]) == null ? void 0 : i.id) ?? "" : t ?? ((p = e[0]) == null ? void 0 : p.id) ?? "",
636
+ selectedVideoId: (n == null ? void 0 : n.kind) === "video" ? n.assetId ?? ((h = d[0]) == null ? void 0 : h.id) ?? "" : a ?? ((s = d[0]) == null ? void 0 : s.id) ?? ""
631
637
  };
632
- }, Le = (e, t, n) => {
638
+ }, Ue = (e, t, r) => {
633
639
  if (e.width <= 0 || e.height <= 0 || t.width <= 0 || t.height <= 0)
634
640
  return null;
635
- const r = n === "contain" ? Math.min(t.width / e.width, t.height / e.height) : Math.max(t.width / e.width, t.height / e.height), i = e.width * r, o = e.height * r;
636
- return {
637
- source: e,
638
- destination: t,
639
- drawWidth: i,
640
- drawHeight: o,
641
- offsetX: (t.width - i) * 0.5,
642
- offsetY: (t.height - o) * 0.5,
643
- scale: r
644
- };
645
- }, Ve = (e) => {
641
+ const a = he(e, t, r);
642
+ return a ? { source: e, destination: t, ...a } : null;
643
+ }, qe = (e) => {
646
644
  if (!e) return { width: 0, height: 0 };
647
645
  const t = e.getBoundingClientRect();
648
646
  return {
649
647
  width: t.width || e.clientWidth,
650
648
  height: t.height || e.clientHeight
651
649
  };
652
- }, De = (e) => {
653
- const [t, n] = C({ width: 0, height: 0 });
654
- return ue(() => {
655
- const r = e.current;
656
- if (!r) return;
657
- let i = 0;
658
- const o = () => {
659
- const d = Ve(r);
660
- n(
661
- (c) => c.width === d.width && c.height === d.height ? c : d
650
+ }, je = (e) => {
651
+ const [t, r] = T({ width: 0, height: 0 });
652
+ return Re(() => {
653
+ const a = e.current;
654
+ if (!a) return;
655
+ let n = 0;
656
+ const d = () => {
657
+ const p = qe(a);
658
+ r(
659
+ (h) => h.width === p.width && h.height === p.height ? h : p
662
660
  );
663
- }, a = () => {
664
- o(), i && cancelAnimationFrame(i), i = requestAnimationFrame(o);
661
+ }, u = () => {
662
+ d(), n && cancelAnimationFrame(n), n = requestAnimationFrame(d);
665
663
  };
666
- a();
667
- const s = new ResizeObserver(a);
668
- s.observe(r);
669
- const l = window.visualViewport;
670
- return window.addEventListener("resize", a), window.addEventListener("orientationchange", a), l == null || l.addEventListener("resize", a), l == null || l.addEventListener("scroll", a), () => {
671
- i && cancelAnimationFrame(i), s.disconnect(), window.removeEventListener("resize", a), window.removeEventListener("orientationchange", a), l == null || l.removeEventListener("resize", a), l == null || l.removeEventListener("scroll", a);
664
+ u();
665
+ const c = new ResizeObserver(u);
666
+ c.observe(a);
667
+ const i = window.visualViewport;
668
+ return window.addEventListener("resize", u), window.addEventListener("orientationchange", u), i == null || i.addEventListener("resize", u), i == null || i.addEventListener("scroll", u), () => {
669
+ n && cancelAnimationFrame(n), c.disconnect(), window.removeEventListener("resize", u), window.removeEventListener("orientationchange", u), i == null || i.removeEventListener("resize", u), i == null || i.removeEventListener("scroll", u);
672
670
  };
673
671
  }, [e]), t;
674
- }, Be = ({
672
+ }, Ke = ({
675
673
  enabled: e,
676
674
  selectedSource: t
677
675
  }) => {
678
- const n = de(ee.FACE_TRACKER);
676
+ const r = ve(H.FACE_TRACKER);
679
677
  return {
680
- faces: te({ node: n, enabled: e, selectedSource: t }),
681
- trackerStatus: n ? "ready" : "idle"
678
+ faces: oe({ node: r, enabled: e, selectedSource: t }),
679
+ trackerStatus: r ? "ready" : "idle"
682
680
  };
683
- }, J = (e) => {
681
+ }, ae = (e) => {
684
682
  e && (e.pause(), e.removeAttribute("src"), e.srcObject = null, e.load());
685
- }, Q = (e) => {
683
+ }, re = (e) => {
686
684
  e && e.removeAttribute("src");
687
- }, _e = ({
685
+ }, Ye = ({
688
686
  enabled: e,
689
687
  imageAsset: t,
690
- selectedSource: n,
691
- videoAsset: r
688
+ selectedSource: r,
689
+ videoAsset: a
692
690
  }) => {
693
- const i = X(null), o = X(null), [a, s] = C(null), [l, d] = C({ width: 0, height: 0 }), [c, h] = C("idle"), [b, f] = C(null);
694
- return z(() => {
691
+ const n = L(null), d = L(null), [u, c] = T(null), [i, p] = T({ width: 0, height: 0 }), [h, s] = T("idle"), [f, g] = T(null);
692
+ return k(() => {
695
693
  if (!e) {
696
- J(i.current), Q(o.current), s(null), d({ width: 0, height: 0 }), h("idle"), f(null);
694
+ ae(n.current), re(d.current), c(null), p({ width: 0, height: 0 }), s("idle"), g(null);
697
695
  return;
698
696
  }
699
- let w = !1, p = null;
700
- const m = (x, u) => {
701
- w || (d({ width: x, height: u }), h("ready"), f(null));
702
- }, S = () => {
703
- J(i.current), Q(o.current), p == null || p.getTracks().forEach((x) => x.stop()), p = null, s(null);
704
- }, M = async () => {
705
- h("requesting");
706
- const x = await navigator.mediaDevices.getUserMedia(ve);
707
- if (w) {
708
- x.getTracks().forEach((I) => I.stop());
697
+ let o = !1, l = null;
698
+ const m = (v, y) => {
699
+ o || (p({ width: v, height: y }), s("ready"), g(null));
700
+ }, b = () => {
701
+ ae(n.current), re(d.current), l == null || l.getTracks().forEach((v) => v.stop()), l = null, c(null);
702
+ }, S = async () => {
703
+ s("requesting");
704
+ const v = await navigator.mediaDevices.getUserMedia(_e);
705
+ if (o) {
706
+ v.getTracks().forEach((M) => M.stop());
709
707
  return;
710
708
  }
711
- p = x, s(x);
712
- const u = i.current;
713
- u && (u.srcObject = x, u.muted = !0, u.playsInline = !0, u.autoplay = !0, await u.play(), m(u.videoWidth, u.videoHeight));
714
- }, R = async (x) => {
715
- h("requesting"), s(null);
716
- const u = i.current;
717
- u && (u.src = x, u.muted = !0, u.loop = !0, u.playsInline = !0, u.autoplay = !0, u.crossOrigin = "anonymous", await u.play(), m(u.videoWidth, u.videoHeight));
718
- }, v = async (x) => {
719
- h("requesting"), s(null);
720
- const u = o.current;
721
- u && (await new Promise((I, y) => {
722
- u.onload = () => I(), u.onerror = () => y(new Error("Unable to load image")), u.src = x;
723
- }), m(u.naturalWidth, u.naturalHeight));
709
+ l = v, c(v);
710
+ const y = n.current;
711
+ y && (y.srcObject = v, y.muted = !0, y.playsInline = !0, y.autoplay = !0, await y.play(), m(y.videoWidth, y.videoHeight));
712
+ }, R = async (v) => {
713
+ s("requesting"), c(null);
714
+ const y = n.current;
715
+ y && (y.src = v, y.muted = !0, y.loop = !0, y.playsInline = !0, y.autoplay = !0, y.crossOrigin = "anonymous", await y.play(), m(y.videoWidth, y.videoHeight));
716
+ }, x = async (v) => {
717
+ s("requesting"), c(null);
718
+ const y = d.current;
719
+ y && (await new Promise((M, C) => {
720
+ y.onload = () => M(), y.onerror = () => C(new Error("Unable to load image")), y.src = v;
721
+ }), m(y.naturalWidth, y.naturalHeight));
724
722
  };
725
- return S(), (async () => {
723
+ return b(), (async () => {
726
724
  try {
727
- if (n === "webcam") {
728
- await M();
725
+ if (r === "webcam") {
726
+ await S();
729
727
  return;
730
728
  }
731
- if (n === "video") {
732
- if (!(r != null && r.src)) throw new Error("Missing video source");
733
- await R(r.src);
729
+ if (r === "video") {
730
+ if (!(a != null && a.src)) throw new Error("Missing video source");
731
+ await R(a.src);
734
732
  return;
735
733
  }
736
734
  if (!(t != null && t.src)) throw new Error("Missing image source");
737
- await v(t.src);
738
- } catch (x) {
739
- if (w) return;
740
- h("error"), f(x instanceof Error ? x.message : `Unable to initialize ${n}`);
735
+ await x(t.src);
736
+ } catch (v) {
737
+ if (o) return;
738
+ s("error"), g(v instanceof Error ? v.message : `Unable to initialize ${r}`);
741
739
  }
742
740
  })(), () => {
743
- w = !0, S();
741
+ o = !0, b();
744
742
  };
745
- }, [e, t, n, r]), {
746
- videoRef: i,
747
- imageRef: o,
748
- stream: a,
749
- mediaSize: l,
750
- status: c,
751
- error: b
743
+ }, [e, t, r, a]), {
744
+ videoRef: n,
745
+ imageRef: d,
746
+ stream: u,
747
+ mediaSize: i,
748
+ status: h,
749
+ error: f
752
750
  };
753
- }, We = ({
751
+ }, Qe = ({
754
752
  enabled: e,
755
753
  imageRef: t,
756
- selectedSource: n,
757
- status: r,
758
- videoRef: i
754
+ selectedSource: r,
755
+ status: a,
756
+ videoRef: n
759
757
  }) => {
760
- const [o, a] = C(null);
761
- return z(() => {
762
- if (!e || r !== "ready") {
763
- a((d) => (d == null || d.dispose(), null));
758
+ const [d, u] = T(null);
759
+ return k(() => {
760
+ if (!e || a !== "ready") {
761
+ u((p) => (p == null || p.dispose(), null));
764
762
  return;
765
763
  }
766
- const s = n === "image" ? t.current : i.current;
767
- if (!s) return;
768
- const l = n === "image" ? new L.Texture(s) : new L.VideoTexture(s);
769
- return l.colorSpace = L.SRGBColorSpace, l.minFilter = L.LinearFilter, l.magFilter = L.LinearFilter, l.generateMipmaps = !1, l.needsUpdate = !0, a((d) => (d == null || d.dispose(), l)), () => {
770
- l.dispose();
764
+ const c = r === "image" ? t.current : n.current;
765
+ if (!c) return;
766
+ const i = r === "image" ? new X.Texture(c) : new X.VideoTexture(c);
767
+ return i.colorSpace = X.SRGBColorSpace, i.minFilter = X.LinearFilter, i.magFilter = X.LinearFilter, i.generateMipmaps = !1, i.needsUpdate = !0, u((p) => (p == null || p.dispose(), i)), () => {
768
+ i.dispose();
771
769
  };
772
- }, [e, t, n, r, i]), o;
773
- }, He = ({
770
+ }, [e, t, r, a, n]), d;
771
+ }, Je = ({
774
772
  externalTracker: e,
775
773
  imageOptions: t,
776
- layout: n,
777
- managesOwnMedia: r,
778
- mediaError: i,
779
- mediaFitMode: o,
780
- mediaSize: a,
781
- mediaStatus: s,
782
- mirrored: l,
783
- selectedImage: d,
784
- selectedImageId: c,
785
- selectedSource: h,
786
- selectedVideo: b,
787
- selectedVideoId: f,
788
- setMirrored: w,
789
- setSelectedImageId: p,
774
+ layout: r,
775
+ managesOwnMedia: a,
776
+ mediaError: n,
777
+ mediaFitMode: d,
778
+ mediaSize: u,
779
+ mediaStatus: c,
780
+ mirrored: i,
781
+ selectedImage: p,
782
+ selectedImageId: h,
783
+ selectedSource: s,
784
+ selectedVideo: f,
785
+ selectedVideoId: g,
786
+ setMirrored: o,
787
+ setSelectedImageId: l,
790
788
  setSelectedSource: m,
791
- setSelectedVideoId: S,
792
- setShowMediaControls: M,
789
+ setSelectedVideoId: b,
790
+ setShowMediaControls: S,
793
791
  showMediaControls: R,
794
- tracker: v,
792
+ tracker: x,
795
793
  videoOptions: E,
796
- viewportSize: x
794
+ viewportSize: v
797
795
  }) => {
798
- const u = h === "image" ? `${A.image.label}: ${(d == null ? void 0 : d.label) ?? ""}` : h === "video" ? `${A.video.label}: ${(b == null ? void 0 : b.label) ?? ""}` : A.webcam.label;
796
+ const y = s === "image" ? `${D.image.label}: ${(p == null ? void 0 : p.label) ?? ""}` : s === "video" ? `${D.video.label}: ${(f == null ? void 0 : f.label) ?? ""}` : D.webcam.label;
799
797
  return {
800
- activeDelegate: r ? v.activeDelegate : null,
801
- faces: r ? v.faces : e.faces,
798
+ activeDelegate: a ? x.activeDelegate : null,
799
+ faces: a ? x.faces : e.faces,
802
800
  imageOptions: t,
803
- layout: n,
804
- mediaError: i,
805
- mediaFitMode: o,
806
- mediaLabel: u,
807
- mediaStatus: s,
808
- mirrored: l,
809
- selectedImageId: c,
810
- selectedSource: h,
811
- selectedVideoId: f,
812
- setMirrored: w,
813
- setSelectedImageId: p,
801
+ layout: r,
802
+ mediaError: n,
803
+ mediaFitMode: d,
804
+ mediaLabel: y,
805
+ mediaStatus: c,
806
+ mirrored: i,
807
+ selectedImageId: h,
808
+ selectedSource: s,
809
+ selectedVideoId: g,
810
+ setMirrored: o,
811
+ setSelectedImageId: l,
814
812
  setSelectedSource: m,
815
- setSelectedVideoId: S,
816
- setShowMediaControls: M,
813
+ setSelectedVideoId: b,
814
+ setShowMediaControls: S,
817
815
  showMediaControls: R,
818
- trackerError: r ? v.error : null,
819
- trackerStatus: r ? v.status : e.trackerStatus,
816
+ trackerError: a ? x.error : null,
817
+ trackerStatus: a ? x.status : e.trackerStatus,
820
818
  videoOptions: E,
821
- viewportSize: x,
822
- mediaSize: a
819
+ viewportSize: v,
820
+ mediaSize: u
823
821
  };
824
- }, Pe = ({
822
+ }, Ze = ({
825
823
  mediaTexture: e,
826
824
  previewMode: t,
827
- renderOutputs: n,
828
- sceneRenderOutputs: r
829
- }) => $(
825
+ renderOutputs: r,
826
+ sceneRenderOutputs: a
827
+ }) => U(
830
828
  () => ({
831
- requested: n,
829
+ requested: r,
832
830
  previewMode: t,
833
831
  mediaColorTexture: e,
834
- sceneColorTexture: r.sceneColorTexture,
835
- finalColorTexture: n.finalColor ? r.sceneColorTexture : null,
836
- sceneDepthTexture: r.sceneDepthTexture,
832
+ sceneColorTexture: a.sceneColorTexture,
833
+ finalColorTexture: r.finalColor ? a.sceneColorTexture : null,
834
+ sceneDepthTexture: a.sceneDepthTexture,
837
835
  estimatedDepthTexture: null,
838
836
  available: {
839
837
  mediaColor: e !== null,
840
- sceneColor: r.sceneColorTexture !== null,
841
- finalColor: !!(n.finalColor && r.sceneColorTexture),
842
- sceneDepth: r.sceneDepthTexture !== null,
838
+ sceneColor: a.sceneColorTexture !== null,
839
+ finalColor: !!(r.finalColor && a.sceneColorTexture),
840
+ sceneDepth: a.sceneDepthTexture !== null,
843
841
  estimatedDepth: !1
844
842
  }
845
843
  }),
846
- [e, t, n, r]
847
- ), $e = ({
844
+ [e, t, r, a]
845
+ ), et = ({
848
846
  fitMode: e,
849
847
  imageOptions: t,
850
- initialImageId: n,
851
- initialMirrored: r,
852
- initialSource: i,
853
- initialVideoId: o,
854
- mediaStrategy: a,
855
- previewMode: s,
856
- renderOutputs: l,
857
- showMediaControlsByDefault: d,
858
- source: c,
859
- videoOptions: h
848
+ initialImageId: r,
849
+ initialMirrored: a,
850
+ initialSource: n,
851
+ initialVideoId: d,
852
+ mediaStrategy: u,
853
+ previewMode: c,
854
+ renderOutputs: i,
855
+ showMediaControlsByDefault: p,
856
+ source: h,
857
+ videoOptions: s
860
858
  }) => {
861
- const b = X(null), f = X(null), w = De(b), p = $(
862
- () => Ae({
859
+ const f = L(null), g = L(null), o = je(f), l = U(
860
+ () => Ge({
863
861
  imageOptions: t,
864
- initialImageId: n,
865
- initialSource: i,
866
- initialVideoId: o,
867
- source: c,
868
- videoOptions: h
862
+ initialImageId: r,
863
+ initialSource: n,
864
+ initialVideoId: d,
865
+ source: h,
866
+ videoOptions: s
869
867
  }),
870
- [t, n, i, o, c, h]
871
- ), [m, S] = C(r), [M, R] = C(d), [v, E] = C(
872
- p.selectedSource
873
- ), [x, u] = C(p.selectedImageId), [I, y] = C(p.selectedVideoId), [j, V] = C({
868
+ [t, r, n, d, h, s]
869
+ ), [m, b] = T(a), [S, R] = T(p), [x, E] = T(
870
+ l.selectedSource
871
+ ), [v, y] = T(l.selectedImageId), [M, C] = T(l.selectedVideoId), [Q, B] = T({
874
872
  sceneColorTexture: null,
875
873
  sceneDepthTexture: null
876
- }), T = a === "internal";
877
- z(() => {
878
- c && (E(p.selectedSource), u(p.selectedImageId), y(p.selectedVideoId));
879
- }, [p, c]);
880
- const K = t.find((P) => P.id === x) ?? t[0], G = h.find((P) => P.id === I) ?? h[0], F = _e({
881
- enabled: T,
882
- imageAsset: K,
883
- selectedSource: v,
884
- videoAsset: G
885
- }), W = ke(e, v), D = $(
886
- () => Le(F.mediaSize, w, W),
887
- [F.mediaSize, W, w]
888
- ), ne = We({
889
- enabled: !!(l.mediaColor || l.finalColor),
890
- imageRef: F.imageRef,
891
- selectedSource: v,
892
- status: F.status,
893
- videoRef: F.videoRef
894
- }), H = Te(v, m), oe = Xe({
895
- displayMirrored: H,
896
- enabled: T && F.status === "ready" && D !== null,
897
- imageRef: F.imageRef,
898
- layout: D,
899
- selectedSource: v,
900
- sourceStream: F.stream,
901
- videoRef: F.videoRef
902
- }), ie = Be({
903
- enabled: !T,
904
- selectedSource: v
905
- }), ae = He({
906
- externalTracker: ie,
874
+ }), I = u === "internal";
875
+ k(() => {
876
+ h && (E(l.selectedSource), y(l.selectedImageId), C(l.selectedVideoId));
877
+ }, [l, h]);
878
+ const J = t.find((G) => G.id === v) ?? t[0], Z = s.find((G) => G.id === M) ?? s[0], A = Ye({
879
+ enabled: I,
880
+ imageAsset: J,
881
+ selectedSource: x,
882
+ videoAsset: Z
883
+ }), V = We(e, x), N = U(
884
+ () => Ue(A.mediaSize, o, V),
885
+ [A.mediaSize, V, o]
886
+ ), ce = Qe({
887
+ enabled: !!(i.mediaColor || i.finalColor),
888
+ imageRef: A.imageRef,
889
+ selectedSource: x,
890
+ status: A.status,
891
+ videoRef: A.videoRef
892
+ }), W = ze(x, m), ue = Ve({
893
+ displayMirrored: W,
894
+ enabled: I && A.status === "ready" && N !== null,
895
+ imageRef: A.imageRef,
896
+ layout: N,
897
+ selectedSource: x,
898
+ sourceStream: A.stream,
899
+ videoRef: A.videoRef
900
+ }), me = Ke({
901
+ enabled: !I,
902
+ selectedSource: x
903
+ }), pe = Je({
904
+ externalTracker: me,
907
905
  imageOptions: t,
908
- layout: D,
909
- managesOwnMedia: T,
910
- mediaError: F.error,
911
- mediaFitMode: W,
912
- mediaSize: F.mediaSize,
913
- mediaStatus: F.status,
914
- mirrored: H,
915
- selectedImage: K,
916
- selectedImageId: x,
917
- selectedSource: v,
918
- selectedVideo: G,
919
- selectedVideoId: I,
920
- setMirrored: S,
921
- setSelectedImageId: u,
906
+ layout: N,
907
+ managesOwnMedia: I,
908
+ mediaError: A.error,
909
+ mediaFitMode: V,
910
+ mediaSize: A.mediaSize,
911
+ mediaStatus: A.status,
912
+ mirrored: W,
913
+ selectedImage: J,
914
+ selectedImageId: v,
915
+ selectedSource: x,
916
+ selectedVideo: Z,
917
+ selectedVideoId: M,
918
+ setMirrored: b,
919
+ setSelectedImageId: y,
922
920
  setSelectedSource: E,
923
- setSelectedVideoId: y,
921
+ setSelectedVideoId: C,
924
922
  setShowMediaControls: R,
925
- showMediaControls: M,
926
- tracker: oe,
927
- videoOptions: h,
928
- viewportSize: w
929
- }), se = Pe({
930
- mediaTexture: ne,
931
- previewMode: s,
932
- renderOutputs: l,
933
- sceneRenderOutputs: j
923
+ showMediaControls: S,
924
+ tracker: ue,
925
+ videoOptions: s,
926
+ viewportSize: o
927
+ }), fe = Ze({
928
+ mediaTexture: ce,
929
+ previewMode: c,
930
+ renderOutputs: i,
931
+ sceneRenderOutputs: Q
934
932
  });
935
933
  return {
936
- containerRef: b,
937
- displayCanvasRef: f,
938
- displayMirrored: H,
939
- layout: D,
940
- managesOwnMedia: T,
941
- media: F,
942
- renderOutputState: se,
943
- renderState: ae,
944
- selectedImageId: x,
945
- selectedSource: v,
946
- selectedVideoId: I,
947
- setSceneRenderOutputs: V,
948
- setSelectedImageId: u,
934
+ containerRef: f,
935
+ displayCanvasRef: g,
936
+ displayMirrored: W,
937
+ layout: N,
938
+ managesOwnMedia: I,
939
+ media: A,
940
+ renderOutputState: fe,
941
+ renderState: pe,
942
+ selectedImageId: v,
943
+ selectedSource: x,
944
+ selectedVideoId: M,
945
+ setSceneRenderOutputs: B,
946
+ setSelectedImageId: y,
949
947
  setSelectedSource: E,
950
- setSelectedVideoId: y,
951
- showMediaControls: M,
952
- viewportSize: w
948
+ setSelectedVideoId: C,
949
+ showMediaControls: S,
950
+ viewportSize: o
953
951
  };
954
- }, U = ({ children: e }) => /* @__PURE__ */ g(_, { children: e });
955
- U.displayName = "XRViewport.Scene";
956
- const N = ({ children: e }) => /* @__PURE__ */ g(_, { children: e });
957
- N.displayName = "XRViewport.Overlay";
958
- const qe = (e, t) => {
952
+ }, K = ({ children: e }) => /* @__PURE__ */ w($, { children: e });
953
+ K.displayName = "XRViewport.Scene";
954
+ const Y = ({ children: e }) => /* @__PURE__ */ w($, { children: e });
955
+ Y.displayName = "XRViewport.Overlay";
956
+ const tt = (e, t) => {
959
957
  if (e === "dom")
960
958
  return {
961
959
  sceneContent: null,
962
960
  overlayContent: t
963
961
  };
964
- let n = null, r = null;
965
- const i = [];
966
- return he.forEach(t, (o) => {
967
- var s;
968
- if (!me(o)) {
969
- o != null && i.push(o);
962
+ let r = null, a = null;
963
+ const n = [];
964
+ return Ce.forEach(t, (d) => {
965
+ var c;
966
+ if (!Ee(d)) {
967
+ d != null && n.push(d);
970
968
  return;
971
969
  }
972
- const a = (s = o.type) == null ? void 0 : s.displayName;
973
- if (a === U.displayName) {
974
- n = o.props.children;
970
+ const u = (c = d.type) == null ? void 0 : c.displayName;
971
+ if (u === K.displayName) {
972
+ r = d.props.children;
975
973
  return;
976
974
  }
977
- if (a === N.displayName) {
978
- r = o.props.children;
975
+ if (u === Y.displayName) {
976
+ a = d.props.children;
979
977
  return;
980
978
  }
981
- i.push(o);
982
- }), !r && i.length > 0 && (r = i), {
983
- sceneContent: n,
984
- overlayContent: r
979
+ n.push(d);
980
+ }), !a && n.length > 0 && (a = n), {
981
+ sceneContent: r,
982
+ overlayContent: a
985
983
  };
986
- }, Z = (e, t) => typeof e == "function" ? e(t) : e;
987
- function Ue(e) {
988
- return e.Scene = U, e.Overlay = N, e;
984
+ }, ne = (e, t) => typeof e == "function" ? e(t) : e;
985
+ function at(e) {
986
+ return e.Scene = K, e.Overlay = Y, e;
989
987
  }
990
- const rt = Ue(({
988
+ const vt = at(({
991
989
  children: e,
992
990
  fitMode: t = "auto",
993
- imageOptions: n = [],
994
- initialImageId: r,
995
- initialMirrored: i = !0,
996
- initialSource: o = "webcam",
997
- initialVideoId: a,
998
- mediaStrategy: s = "internal",
999
- mediaDock: l = "bottom-left",
1000
- mode: d = "dom",
1001
- previewMode: c = "finalColor",
1002
- renderOutputs: h = {},
1003
- showMediaControlsByDefault: b = !0,
1004
- source: f,
1005
- style: w,
1006
- videoOptions: p = []
991
+ imageOptions: r = [],
992
+ initialImageId: a,
993
+ initialMirrored: n = !0,
994
+ initialSource: d = "webcam",
995
+ initialVideoId: u,
996
+ mediaStrategy: c = "internal",
997
+ mediaDock: i = "bottom-left",
998
+ mode: p = "dom",
999
+ previewMode: h = "finalColor",
1000
+ renderOutputs: s = {},
1001
+ showMediaControlsByDefault: f = !0,
1002
+ source: g,
1003
+ style: o,
1004
+ videoOptions: l = []
1007
1005
  }) => {
1008
- const m = $e({
1006
+ const m = et({
1009
1007
  fitMode: t,
1010
- imageOptions: n,
1011
- initialImageId: r,
1012
- initialMirrored: i,
1013
- initialSource: o,
1014
- initialVideoId: a,
1015
- mediaStrategy: s,
1016
- previewMode: c,
1017
- renderOutputs: h,
1018
- showMediaControlsByDefault: b,
1019
- source: f,
1020
- videoOptions: p
1021
- }), S = typeof e == "function" ? e(m.renderState) : e, { sceneContent: M, overlayContent: R } = qe(d, S), v = Z(
1022
- M,
1008
+ imageOptions: r,
1009
+ initialImageId: a,
1010
+ initialMirrored: n,
1011
+ initialSource: d,
1012
+ initialVideoId: u,
1013
+ mediaStrategy: c,
1014
+ previewMode: h,
1015
+ renderOutputs: s,
1016
+ showMediaControlsByDefault: f,
1017
+ source: g,
1018
+ videoOptions: l
1019
+ }), b = typeof e == "function" ? e(m.renderState) : e, { sceneContent: S, overlayContent: R } = tt(p, b), x = ne(
1020
+ S,
1023
1021
  m.renderState
1024
- ), E = Z(
1022
+ ), E = ne(
1025
1023
  R,
1026
1024
  m.renderState
1027
1025
  );
1028
- return /* @__PURE__ */ g(be.Provider, { value: m.renderState, children: /* @__PURE__ */ g(we.Provider, { value: m.renderOutputState, children: /* @__PURE__ */ g(
1029
- Ee,
1026
+ return /* @__PURE__ */ w(Fe.Provider, { value: m.renderState, children: /* @__PURE__ */ w(Ie.Provider, { value: m.renderOutputState, children: /* @__PURE__ */ w(
1027
+ Be,
1030
1028
  {
1031
1029
  containerRef: m.containerRef,
1032
1030
  displayCanvasRef: m.displayCanvasRef,
1033
- imageOptions: n,
1031
+ imageOptions: r,
1034
1032
  imageRef: m.media.imageRef,
1035
1033
  layout: m.layout,
1036
1034
  managesOwnMedia: m.managesOwnMedia,
1037
- mediaDock: l,
1035
+ mediaDock: i,
1038
1036
  mirrored: m.displayMirrored,
1039
- mode: d,
1037
+ mode: p,
1040
1038
  overlayContent: E,
1041
- renderOutputs: h,
1042
- sceneContent: v,
1039
+ renderOutputs: s,
1040
+ sceneContent: x,
1043
1041
  selectedImageId: m.selectedImageId,
1044
1042
  selectedSource: m.selectedSource,
1045
1043
  selectedVideoId: m.selectedVideoId,
@@ -1048,13 +1046,13 @@ const rt = Ue(({
1048
1046
  setSelectedSource: m.setSelectedSource,
1049
1047
  setSelectedVideoId: m.setSelectedVideoId,
1050
1048
  showMediaControls: m.showMediaControls,
1051
- style: w,
1052
- videoOptions: p,
1049
+ style: o,
1050
+ videoOptions: l,
1053
1051
  videoRef: m.media.videoRef,
1054
1052
  viewportSize: m.viewportSize
1055
1053
  }
1056
1054
  ) }) });
1057
- }), Ne = {
1055
+ }), rt = {
1058
1056
  position: "absolute",
1059
1057
  top: -28,
1060
1058
  left: 0,
@@ -1065,13 +1063,13 @@ const rt = Ue(({
1065
1063
  fontWeight: 700,
1066
1064
  padding: "4px 8px",
1067
1065
  whiteSpace: "nowrap"
1068
- }, nt = ({
1066
+ }, xt = ({
1069
1067
  boundingBox: e,
1070
1068
  label: t = "face bounding box",
1071
- color: n = "#22c55e",
1072
- style: r,
1073
- labelStyle: i
1074
- }) => /* @__PURE__ */ g(
1069
+ color: r = "#22c55e",
1070
+ style: a,
1071
+ labelStyle: n
1072
+ }) => /* @__PURE__ */ w(
1075
1073
  "div",
1076
1074
  {
1077
1075
  style: {
@@ -1080,43 +1078,416 @@ const rt = Ue(({
1080
1078
  top: `${e.top * 100}%`,
1081
1079
  width: `${e.width * 100}%`,
1082
1080
  height: `${e.height * 100}%`,
1083
- border: `3px solid ${n}`,
1081
+ border: `3px solid ${r}`,
1084
1082
  boxSizing: "border-box",
1085
1083
  pointerEvents: "none",
1086
1084
  zIndex: 20,
1087
- ...r
1085
+ ...a
1088
1086
  },
1089
- children: t !== null && /* @__PURE__ */ g("div", { style: { ...Ne, ...i }, children: t })
1087
+ children: t !== null && /* @__PURE__ */ w("div", { style: { ...rt, ...n }, children: t })
1088
+ }
1089
+ ), j = [
1090
+ {
1091
+ id: "capabilities",
1092
+ title: "Capability report",
1093
+ steps: "Run detectXRCapabilities with model probes.",
1094
+ expect: "Rendering supported (WebGL, OffscreenCanvas, WebAssembly); camera not unsupported; model assets reachable.",
1095
+ mode: "automated",
1096
+ layer: "capability"
1097
+ },
1098
+ {
1099
+ id: "session-start",
1100
+ title: "Session binds and starts",
1101
+ steps: "setMediaSource (webcam or the supplied stream) and start().",
1102
+ expect: "Lifecycle reaches running within the timeout; feed frames advance.",
1103
+ mode: "automated",
1104
+ layer: "lifecycle"
1105
+ },
1106
+ {
1107
+ id: "model-ready",
1108
+ title: "Tracker models initialize",
1109
+ steps: "Acquire each requested model and wait for ready.",
1110
+ expect: "Every model reaches ready; none errors.",
1111
+ mode: "automated",
1112
+ layer: "model"
1113
+ },
1114
+ {
1115
+ id: "model-detects",
1116
+ title: "Trackers run inference",
1117
+ steps: "Sample diagnostics while running.",
1118
+ expect: "Each ready model reports inferences > 0 (detection itself needs a subject in frame).",
1119
+ mode: "automated",
1120
+ layer: "model"
1121
+ },
1122
+ {
1123
+ id: "pause-resume",
1124
+ title: "Pause and resume",
1125
+ steps: "session.pause(), then resume().",
1126
+ expect: "Lifecycle paused then running; feed resumes.",
1127
+ mode: "automated",
1128
+ layer: "lifecycle"
1129
+ },
1130
+ {
1131
+ id: "stop-start",
1132
+ title: "Stop and rebind",
1133
+ steps: "session.stop(), then setMediaSource + start() again.",
1134
+ expect: "Lifecycle stopped then running on the same source.",
1135
+ mode: "automated",
1136
+ layer: "lifecycle"
1137
+ },
1138
+ {
1139
+ id: "performance",
1140
+ title: "Performance sample",
1141
+ steps: "Measure frame rate and tracker inference over the window.",
1142
+ expect: "Frame rate ≥ 20 fps and total inference ≤ 50 ms while running.",
1143
+ mode: "automated",
1144
+ layer: "performance"
1145
+ }
1146
+ ], nt = [
1147
+ {
1148
+ id: "permission-prompt",
1149
+ title: "First-visit permission prompt",
1150
+ steps: "Open the app in a fresh profile; tap Allow on the prompt.",
1151
+ expect: "Camera starts; no second prompt on reload.",
1152
+ mode: "manual",
1153
+ layer: "capability"
1154
+ },
1155
+ {
1156
+ id: "permission-blocked",
1157
+ title: "Blocked camera recovers",
1158
+ steps: "Block the camera in site settings, reload, then allow it from the address bar.",
1159
+ expect: "Gate shows blocked with instructions; allowing flips it without a reload.",
1160
+ mode: "manual",
1161
+ layer: "capability"
1162
+ },
1163
+ {
1164
+ id: "rear-camera",
1165
+ title: "Rear camera",
1166
+ steps: "Switch front → rear on /camera.",
1167
+ expect: "Rear feed is straight (text readable); tracking stays aligned.",
1168
+ mode: "manual",
1169
+ layer: "lifecycle"
1170
+ },
1171
+ {
1172
+ id: "orientation",
1173
+ title: "Rotate the device",
1174
+ steps: "Rotate portrait ↔ landscape while tracking a face.",
1175
+ expect: "Anchored content stays on the face; no stretched feed.",
1176
+ mode: "manual",
1177
+ layer: "lifecycle"
1178
+ },
1179
+ {
1180
+ id: "background-foreground",
1181
+ title: "Background and return",
1182
+ steps: "Switch apps / lock the screen for 10 s and come back.",
1183
+ expect: "Feed resumes by itself; no frozen frame; trackers continue.",
1184
+ mode: "manual",
1185
+ layer: "lifecycle"
1186
+ },
1187
+ {
1188
+ id: "camera-interrupted",
1189
+ title: "Camera taken by another app",
1190
+ steps: "Take a call or open the native camera, then return.",
1191
+ expect: "Session reports camera-lost and recovers on retry.",
1192
+ mode: "manual",
1193
+ layer: "lifecycle"
1194
+ },
1195
+ {
1196
+ id: "thermal",
1197
+ title: "Sustained use",
1198
+ steps: "Run face + body tracking for 5 minutes.",
1199
+ expect: "Adaptive quality steps down before the frame rate collapses; no crash.",
1200
+ mode: "manual",
1201
+ layer: "performance"
1202
+ },
1203
+ {
1204
+ id: "low-end",
1205
+ title: "Low-end device",
1206
+ steps: "Run the automated set on the slowest supported device.",
1207
+ expect: "All pass; performance may land on the low tier.",
1208
+ mode: "manual",
1209
+ layer: "performance"
1210
+ }
1211
+ ], Rt = (e) => j.find((t) => t.id === e) ?? nt.find((t) => t.id === e), F = (e, t) => {
1212
+ const r = e.match(t);
1213
+ return r ? r[1] : "";
1214
+ }, st = (e) => {
1215
+ const t = /iPhone|iPad|iPod/.test(e) || /Macintosh/.test(e) && /Mobile/.test(e), r = /Android/.test(e);
1216
+ let a = { name: "unknown", version: "" };
1217
+ /Edg\//.test(e) ? a = { name: "Edge", version: F(e, /Edg\/(\d+)/) } : /OPR\//.test(e) ? a = { name: "Opera", version: F(e, /OPR\/(\d+)/) } : /SamsungBrowser\//.test(e) ? a = { name: "Samsung Internet", version: F(e, /SamsungBrowser\/(\d+)/) } : /CriOS\//.test(e) ? a = { name: "Chrome iOS", version: F(e, /CriOS\/(\d+)/) } : /FxiOS\//.test(e) ? a = { name: "Firefox iOS", version: F(e, /FxiOS\/(\d+)/) } : /Firefox\//.test(e) ? a = { name: "Firefox", version: F(e, /Firefox\/(\d+)/) } : /Chrome\//.test(e) ? a = { name: "Chrome", version: F(e, /Chrome\/(\d+)/) } : /Safari\//.test(e) && (a = { name: "Safari", version: F(e, /Version\/(\d+)/) });
1218
+ let n = { name: "unknown", version: "" };
1219
+ return t ? n = { name: "iOS", version: F(e, /OS (\d+[._]\d+)/).replace("_", ".") } : r ? n = { name: "Android", version: F(e, /Android (\d+(?:\.\d+)?)/) } : /Mac OS X/.test(e) ? n = { name: "macOS", version: F(e, /Mac OS X (\d+[._]\d+)/).replace("_", ".") } : /Windows NT/.test(e) ? n = { name: "Windows", version: F(e, /Windows NT (\d+\.\d+)/) } : /Linux/.test(e) && (n = { name: "Linux", version: "" }), { browser: a, os: n, mobile: t || r || /Mobile/.test(e) };
1220
+ }, it = () => {
1221
+ var a, n;
1222
+ const e = typeof navigator < "u" ? navigator : void 0, t = (e == null ? void 0 : e.userAgent) ?? "", r = st(t);
1223
+ return {
1224
+ userAgent: t,
1225
+ platform: (e == null ? void 0 : e.platform) ?? "",
1226
+ ...r,
1227
+ screen: typeof window < "u" ? {
1228
+ width: ((a = window.screen) == null ? void 0 : a.width) ?? 0,
1229
+ height: ((n = window.screen) == null ? void 0 : n.height) ?? 0,
1230
+ dpr: window.devicePixelRatio || 1
1231
+ } : { width: 0, height: 0, dpr: 1 },
1232
+ deviceMemoryGb: typeof (e == null ? void 0 : e.deviceMemory) == "number" ? e.deviceMemory : null,
1233
+ hardwareConcurrency: typeof (e == null ? void 0 : e.hardwareConcurrency) == "number" ? e.hardwareConcurrency : null,
1234
+ secureContext: typeof window < "u" ? !!window.isSecureContext : !1,
1235
+ videoCaptureStream: typeof HTMLVideoElement < "u" && ("captureStream" in HTMLVideoElement.prototype || "mozCaptureStream" in HTMLVideoElement.prototype),
1236
+ touch: typeof navigator < "u" && (navigator.maxTouchPoints ?? 0) > 0
1237
+ };
1238
+ }, ot = [H.FACE_TRACKER, H.HAND_TRACKER, H.BODY_TRACKER], se = "__xr_compat__", de = (e) => new Promise((t) => setTimeout(t, e)), _ = async (e, t, r = 50) => {
1239
+ const a = Date.now() + t;
1240
+ for (; Date.now() < a; ) {
1241
+ if (e()) return !0;
1242
+ await de(r);
1243
+ }
1244
+ return e();
1245
+ }, lt = (e, t) => e ? /^(camera-|no-camera|webgl-|offscreen-canvas-|wasm-)/.test(e) ? "capability" : /^model-/.test(e) ? "model" : /^(lifecycle|timeout:lifecycle|feed-stalled|start-)/.test(e) ? "lifecycle" : /^(fps|inference|frame)/.test(e) ? "performance" : t : t, dt = (e) => {
1246
+ const t = {
1247
+ pass: 0,
1248
+ fail: 0,
1249
+ skip: 0,
1250
+ causes: { capability: 0, model: 0, lifecycle: 0, performance: 0, unknown: 0 }
1251
+ };
1252
+ for (const r of e)
1253
+ t[r.status] += 1, r.status === "fail" && (t.causes[r.cause ?? "unknown"] += 1);
1254
+ return t;
1255
+ }, ct = (e, t, r = {}) => ({
1256
+ version: 1,
1257
+ sdkVersion: r.sdkVersion ?? "dev",
1258
+ checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
1259
+ label: r.label ?? "",
1260
+ environment: it(),
1261
+ capabilities: t,
1262
+ results: e,
1263
+ summary: dt(e)
1264
+ }), Ct = async (e, t = {}) => {
1265
+ var h;
1266
+ const r = t.timeoutMs ?? 2e4, a = t.models ?? ot, n = new Set(
1267
+ t.scenarios ?? j.map((s) => s.id)
1268
+ ), d = [];
1269
+ let u = null, c = !1;
1270
+ const i = (s, f, g, o) => {
1271
+ var m;
1272
+ const l = {
1273
+ id: s,
1274
+ status: o.status,
1275
+ cause: o.status === "fail" ? lt(o.code ?? null, f) : null,
1276
+ // Codes describe failures; a pass carries none.
1277
+ code: o.status === "fail" ? o.code ?? null : null,
1278
+ detail: o.detail,
1279
+ durationMs: Math.round(performance.now() - g)
1280
+ };
1281
+ d.push(l), (m = t.onResult) == null || m.call(t, l);
1282
+ }, p = async () => {
1283
+ t.stream ? await e.setMediaSource({
1284
+ source: ee.STREAM,
1285
+ stream: t.stream,
1286
+ sourceKind: "video"
1287
+ }) : await e.setMediaSource({ source: ee.WEBCAM }), await e.start();
1288
+ };
1289
+ try {
1290
+ for (const s of j) {
1291
+ if (!n.has(s.id)) continue;
1292
+ const f = performance.now();
1293
+ try {
1294
+ const g = s.id;
1295
+ switch (g) {
1296
+ case "capabilities": {
1297
+ u = await ye({
1298
+ models: a,
1299
+ timeoutMs: Math.min(r, 8e3)
1300
+ });
1301
+ const o = a.map((m) => be(u, m)).filter((m) => !m.supported && m.reason).map((m) => m.reason.code), l = Array.from(new Set(o));
1302
+ i(s.id, s.layer, f, {
1303
+ status: l.length ? "fail" : "pass",
1304
+ code: l[0] ?? null,
1305
+ detail: l.length ? `blocked: ${l.join(", ")}` : `webgl${u.rendering.webglVersion}, camera ${u.camera.status}`
1306
+ });
1307
+ break;
1308
+ }
1309
+ case "session-start": {
1310
+ await p();
1311
+ const o = await _(
1312
+ () => e.store.getSnapshot().lifecycle === "running",
1313
+ r
1314
+ ), l = e.store.getSnapshot().feedFrames, m = o && await _(() => e.store.getSnapshot().feedFrames > l, r);
1315
+ c = o && m;
1316
+ const b = e.store.getSnapshot().error;
1317
+ i(s.id, s.layer, f, {
1318
+ status: c ? "pass" : "fail",
1319
+ code: b ? b.reason : o ? "feed-stalled" : "timeout:lifecycle",
1320
+ detail: c ? `running on ${e.store.getSnapshot().sourceKind}` : b ? b.message : o ? "running but no feed frames advanced" : `lifecycle ${e.store.getSnapshot().lifecycle}`
1321
+ });
1322
+ break;
1323
+ }
1324
+ case "model-ready": {
1325
+ if (!c) {
1326
+ i(s.id, s.layer, f, {
1327
+ status: "skip",
1328
+ detail: "session did not start"
1329
+ });
1330
+ break;
1331
+ }
1332
+ const o = [];
1333
+ await Promise.all(
1334
+ a.map(async (l) => {
1335
+ try {
1336
+ await e.registry.acquire(l, se), await _(
1337
+ () => e.store.getSnapshot().pipeline.has(l),
1338
+ r
1339
+ ) || o.push(`${l}: timeout`);
1340
+ } catch (m) {
1341
+ o.push(`${l}: ${ge(m).code}`);
1342
+ }
1343
+ })
1344
+ ), i(s.id, s.layer, f, {
1345
+ status: o.length ? "fail" : "pass",
1346
+ code: o.length ? o[0].split(": ")[1] === "timeout" ? "model-init-failed" : o[0].split(": ")[1] : null,
1347
+ detail: o.length ? o.join("; ") : `${a.length} models ready`
1348
+ });
1349
+ break;
1350
+ }
1351
+ case "model-detects": {
1352
+ if (!c) {
1353
+ i(s.id, s.layer, f, {
1354
+ status: "skip",
1355
+ detail: "session did not start"
1356
+ });
1357
+ break;
1358
+ }
1359
+ const o = await _(
1360
+ () => P(e, a, null).models.every((R) => R.state !== "ready" || R.inferences > 0),
1361
+ Math.min(r, 8e3)
1362
+ ), l = P(e, a, null), m = l.models.filter((S) => S.state === "ready" && S.inferences === 0).map((S) => S.label), b = l.models.filter((S) => S.state === "error").map((S) => {
1363
+ var R;
1364
+ return `${S.label}: ${((R = S.error) == null ? void 0 : R.message) ?? "error"}`;
1365
+ });
1366
+ i(s.id, s.layer, f, {
1367
+ status: o && !b.length ? "pass" : "fail",
1368
+ code: b.length ? "model-init-failed" : m.length ? "model-idle" : null,
1369
+ detail: b.length ? b.join("; ") : m.length ? `no inference from ${m.join(", ")}` : l.models.map((S) => `${S.label} ${S.inferences} run · ${S.detections ?? "–"} det`).join(", ")
1370
+ });
1371
+ break;
1372
+ }
1373
+ case "pause-resume": {
1374
+ if (!c) {
1375
+ i(s.id, s.layer, f, {
1376
+ status: "skip",
1377
+ detail: "session did not start"
1378
+ });
1379
+ break;
1380
+ }
1381
+ e.pause();
1382
+ const o = e.store.getSnapshot().lifecycle === "paused";
1383
+ await e.resume();
1384
+ const l = await _(
1385
+ () => e.store.getSnapshot().lifecycle === "running",
1386
+ r
1387
+ ), m = e.store.getSnapshot().feedFrames, b = l && await _(() => e.store.getSnapshot().feedFrames > m, r);
1388
+ i(s.id, s.layer, f, {
1389
+ status: o && l && b ? "pass" : "fail",
1390
+ code: o ? l ? "feed-stalled" : "lifecycle:resume" : "lifecycle:pause",
1391
+ detail: o && l && b ? "paused → running, feed advanced" : `paused=${o} resumed=${l} advanced=${b}`
1392
+ });
1393
+ break;
1394
+ }
1395
+ case "stop-start": {
1396
+ if (!c) {
1397
+ i(s.id, s.layer, f, {
1398
+ status: "skip",
1399
+ detail: "session did not start"
1400
+ });
1401
+ break;
1402
+ }
1403
+ await e.stop();
1404
+ const o = e.store.getSnapshot().lifecycle === "stopped";
1405
+ await p();
1406
+ const l = await _(
1407
+ () => e.store.getSnapshot().lifecycle === "running",
1408
+ r
1409
+ );
1410
+ i(s.id, s.layer, f, {
1411
+ status: o && l ? "pass" : "fail",
1412
+ code: o ? "lifecycle:restart" : "lifecycle:stop",
1413
+ detail: o && l ? "stopped → running" : `stopped=${o} running=${l}`
1414
+ });
1415
+ break;
1416
+ }
1417
+ case "performance": {
1418
+ if (!c) {
1419
+ i(s.id, s.layer, f, {
1420
+ status: "skip",
1421
+ detail: "session did not start"
1422
+ });
1423
+ break;
1424
+ }
1425
+ const o = t.performanceWindowMs ?? 3e3;
1426
+ let l = 0, m = 0;
1427
+ const b = () => {
1428
+ l += 1, m = requestAnimationFrame(b);
1429
+ };
1430
+ m = requestAnimationFrame(b);
1431
+ const S = P(e, a, null);
1432
+ await de(o), cancelAnimationFrame(m);
1433
+ const R = P(e, a, {
1434
+ feedFrames: S.session.feedFrames,
1435
+ sampledAt: S.sampledAt
1436
+ }), x = l * 1e3 / o, E = R.inferenceMsTotal, v = x >= 20 && E <= 50;
1437
+ i(s.id, s.layer, f, {
1438
+ status: v ? "pass" : "fail",
1439
+ code: x < 20 ? "fps-low" : E > 50 ? "inference-high" : null,
1440
+ detail: `${x.toFixed(0)} fps · feed ${R.session.feedFps.toFixed(0)} fps · inference ${E.toFixed(1)} ms`
1441
+ });
1442
+ break;
1443
+ }
1444
+ default:
1445
+ i(g, s.layer, f, { status: "skip", detail: "no runner" });
1446
+ }
1447
+ } catch (g) {
1448
+ const o = g instanceof Error ? g.message : String(g), l = (h = e.store.getSnapshot().error) == null ? void 0 : h.reason;
1449
+ i(s.id, s.layer, f, {
1450
+ status: "fail",
1451
+ code: l ? we(l).code : null,
1452
+ detail: l ? `${o} (${l})` : o
1453
+ });
1454
+ }
1455
+ }
1456
+ } finally {
1457
+ for (const s of a) e.registry.release(s, se);
1458
+ t.keepSessionRunning || await e.stop().catch(() => {
1459
+ });
1090
1460
  }
1091
- ), ot = (e) => {
1092
- const [t, n] = C(null);
1093
- return z(() => {
1094
- let r = 0;
1095
- const i = () => {
1096
- var l, d;
1097
- r = requestAnimationFrame(i);
1098
- const o = (d = (l = e == null ? void 0 : e.detectionResults) == null ? void 0 : l.faceLandmarks) == null ? void 0 : d[0];
1099
- if (!o || o.length === 0) {
1100
- n(null);
1461
+ return ct(d, u, t);
1462
+ }, Et = (e) => {
1463
+ const [t, r] = T(null);
1464
+ return k(() => {
1465
+ let a = 0;
1466
+ const n = () => {
1467
+ var i, p;
1468
+ a = requestAnimationFrame(n);
1469
+ const d = (p = (i = e == null ? void 0 : e.detectionResults) == null ? void 0 : i.faceLandmarks) == null ? void 0 : p[0];
1470
+ if (!d || d.length === 0) {
1471
+ r(null);
1101
1472
  return;
1102
1473
  }
1103
- const a = fe(o), s = {
1104
- left: a.minX,
1105
- top: a.minY,
1106
- width: a.width,
1107
- height: a.height
1474
+ const u = Te(d), c = {
1475
+ left: u.minX,
1476
+ top: u.minY,
1477
+ width: u.width,
1478
+ height: u.height
1108
1479
  };
1109
- n((c) => c && c.left === s.left && c.top === s.top && c.width === s.width && c.height === s.height ? c : s);
1480
+ r((h) => h && h.left === c.left && h.top === c.top && h.width === c.width && h.height === c.height ? h : c);
1110
1481
  };
1111
- return i(), () => {
1112
- cancelAnimationFrame(r);
1482
+ return n(), () => {
1483
+ cancelAnimationFrame(a);
1113
1484
  };
1114
1485
  }, [e]), t;
1115
- }, it = ({
1486
+ }, Tt = ({
1116
1487
  background: e = "#000",
1117
1488
  children: t,
1118
- style: n
1119
- }) => /* @__PURE__ */ g(
1489
+ style: r
1490
+ }) => /* @__PURE__ */ w(
1120
1491
  "div",
1121
1492
  {
1122
1493
  style: {
@@ -1124,68 +1495,212 @@ const rt = Ue(({
1124
1495
  inset: 0,
1125
1496
  overflow: "hidden",
1126
1497
  background: e,
1127
- ...n
1498
+ ...r
1128
1499
  },
1129
1500
  children: t
1130
1501
  }
1131
- ), at = (e) => {
1132
- const { makeDefault: t = !0, ...n } = e;
1133
- return /* @__PURE__ */ g(
1134
- pe,
1502
+ ), Mt = (e) => {
1503
+ const { makeDefault: t = !0, ...r } = e;
1504
+ return /* @__PURE__ */ w(
1505
+ Me,
1135
1506
  {
1136
1507
  position: [0, 0, 40],
1137
1508
  fov: 30,
1138
1509
  near: 0.1,
1139
1510
  far: 1e3,
1140
1511
  makeDefault: t,
1141
- ...n
1512
+ ...r
1142
1513
  }
1143
1514
  );
1144
- }, st = ["fill", "contain"];
1515
+ }, At = ["fill", "contain"];
1145
1516
  export {
1146
- zt as BasicAnimatedTextureController,
1147
- nt as BoundingBoxOverlay,
1148
- ct as HeadTracker,
1149
- Xt as MAX_GIF_BYTES,
1150
- kt as MAX_GIF_FRAMES,
1151
- At as MAX_GIF_PIXELS,
1152
- at as PerspectiveCamera,
1153
- yt as ScreenRectAspectContext,
1154
- st as TEXTURE_FITS,
1155
- Lt as TextureSourceLoadError,
1156
- it as XRCompositor,
1157
- B as XRLayer,
1158
- xe as XRMediaSurface,
1159
- tt as XRTrackingOverlay,
1160
- rt as XRViewport,
1161
- fe as computeLandmarkBounds,
1162
- Vt as computeScreenTransform,
1163
- xt as createFaceInfoTarget,
1164
- Dt as createTextureSourceResolver,
1165
- Bt as disposeResolvedTextureSource,
1166
- vt as getFaceInfo,
1167
- _t as getPlaybackFrame,
1168
- Wt as getSequenceFrame,
1169
- Ct as getThreeBlending,
1170
- Rt as getThreeDepthFunction,
1171
- It as getThreeSide,
1172
- Ht as gifTextureSourceProvider,
1173
- Mt as hasFullUnitUVBounds,
1174
- Te as resolveCalibrationFaceDisplayMirrored,
1175
- Pt as resolveTextureSource,
1176
- $t as throwIfAborted,
1177
- Xe as useCalibrationFaceTracker,
1178
- ot as useFaceBoundingBox,
1179
- Et as useScreenSpace,
1180
- ut as useTrackerContext,
1181
- mt as useXRCameraTexture,
1182
- O as useXRContext,
1183
- ft as useXRError,
1184
- le as useXRModel,
1185
- de as useXRModelNode,
1186
- pt as useXRPipelineSnapshot,
1187
- gt as useXRReady,
1188
- bt as useXRRenderSize,
1189
- qt as useXRViewportRenderOutputs,
1190
- Ut as useXRViewportState
1517
+ Fa as ARM_FIT_DEFAULTS,
1518
+ Ia as ARM_MASK_DEFAULTS,
1519
+ ka as ArmTracker,
1520
+ _a as BODY_POSE_TRIGGER_DEFAULTS,
1521
+ Hr as BasicAnimatedTextureController,
1522
+ xt as BoundingBoxOverlay,
1523
+ j as COMPAT_SCENARIOS,
1524
+ kt as EMPTY_QUALITY_SIGNALS,
1525
+ wn as FACE_REGION_POLYGONS,
1526
+ La as HAND_JOINTS,
1527
+ Zr as HAND_RIG_BONES,
1528
+ Oa as HAND_RIG_FOREARM,
1529
+ en as HAND_RIG_KNUCKLE_SHIFT,
1530
+ tn as HAND_RIG_LENGTH_RANGE,
1531
+ Da as HAND_RIG_MODEL_MESH,
1532
+ an as HAND_RIG_PALM_JOINTS,
1533
+ rn as HAND_RIG_SNAP_PALMS,
1534
+ Xa as HAND_TATTOO_FACING_FADE,
1535
+ Ha as HandRigContext,
1536
+ Ba as HandRigWrist,
1537
+ Na as HandRigWristContext,
1538
+ Pa as HandTouchContext,
1539
+ ta as HeadTracker,
1540
+ Sn as IRIS_FULL_OPENNESS,
1541
+ vn as IrisLead,
1542
+ nt as MANUAL_COMPAT_SCENARIOS,
1543
+ Br as MAX_GIF_BYTES,
1544
+ Nr as MAX_GIF_FRAMES,
1545
+ Pr as MAX_GIF_PIXELS,
1546
+ xn as MAX_OVERLAY_LABELS,
1547
+ za as OscillationTracker,
1548
+ $a as POSE_JOINTS,
1549
+ Mt as PerspectiveCamera,
1550
+ Rn as SEGMENTATION_OVERLAY_FRAGMENT_SHADER,
1551
+ Cn as SEGMENTATION_OVERLAY_VERTEX_SHADER,
1552
+ zn as ScreenRectAspectContext,
1553
+ At as TEXTURE_FITS,
1554
+ zr as TextureSourceLoadError,
1555
+ Va as TimedSeries,
1556
+ Wa as TouchWorld,
1557
+ Ga as WRIST_FILTER_DEFAULTS,
1558
+ Ua as WristRotationFilter,
1559
+ Tt as XRCompositor,
1560
+ z as XRLayer,
1561
+ ke as XRMediaSurface,
1562
+ St as XRTrackingOverlay,
1563
+ vt as XRViewport,
1564
+ _t as XR_MODEL_LABELS,
1565
+ Lt as anatomicalHandedness,
1566
+ nn as applyHandRigLengths,
1567
+ sn as applyHandRigSolution,
1568
+ qa as armQueryOf,
1569
+ Ot as assignHandPoses,
1570
+ on as bindHandRig,
1571
+ ja as bodyTriggerStatesEqual,
1572
+ Dt as classifyCameraFailure,
1573
+ lt as classifyCompatCause,
1574
+ En as computeIrisEye,
1575
+ Te as computeLandmarkBounds,
1576
+ Tn as computeMaskUvTransform,
1577
+ $r as computeScreenTransform,
1578
+ Ka as createBodyMoveFrame,
1579
+ Ya as createBodyTrigger,
1580
+ ct as createCompatReport,
1581
+ xa as createFaceInfoTarget,
1582
+ fn as createGestureDetectorState,
1583
+ Qa as createHandOccluderMaterial,
1584
+ Ja as createHandTattooMaterial,
1585
+ Mn as createIrisEye,
1586
+ An as createIrisResult,
1587
+ Xt as createQualityState,
1588
+ Fn as createSegmentationOverlayMaterial,
1589
+ In as createSemanticMaskTexture,
1590
+ Vr as createTextureSourceResolver,
1591
+ Za as createTouchHand,
1592
+ it as describeCompatEnvironment,
1593
+ Wr as disposeResolvedTextureSource,
1594
+ er as ellipseWidthOnScreen,
1595
+ tr as ensureForearmBone,
1596
+ Ht as fillLandmarkPolygon,
1597
+ Bt as fillPolygon,
1598
+ Rt as findCompatScenario,
1599
+ ar as fingerExtensions,
1600
+ rr as fitWristFrame,
1601
+ nr as frameUpOnScreen,
1602
+ hn as gestureStatesEqual,
1603
+ Ra as getFaceInfo,
1604
+ Gr as getPlaybackFrame,
1605
+ Ur as getSequenceFrame,
1606
+ Ea as getThreeBlending,
1607
+ Ta as getThreeDepthFunction,
1608
+ Ma as getThreeSide,
1609
+ qr as gifTextureSourceProvider,
1610
+ ln as handAttachmentLocal,
1611
+ sr as handGeometryToRoot,
1612
+ dn as handRigRootMatrix,
1613
+ cn as handRigSnapDistance,
1614
+ ir as handTattooFrame,
1615
+ or as handTattooMatrix,
1616
+ lr as handTattooUv,
1617
+ Nt as handWorldLandmarkToJoint,
1618
+ Dr as hasFullUnitUVBounds,
1619
+ Pt as judgeSample,
1620
+ zt as lockQuality,
1621
+ $t as mapDomExceptionToReason,
1622
+ ge as mapModelErrorToReason,
1623
+ dr as measureArm,
1624
+ cr as measureArmRaise,
1625
+ ur as measureFingerPattern,
1626
+ mr as measureGrab,
1627
+ pr as measureHandHeight,
1628
+ fr as measureOpenPalm,
1629
+ hr as measurePinch,
1630
+ gr as measureTPose,
1631
+ yr as measureThumb,
1632
+ st as parseUserAgent,
1633
+ br as patchHandOccluderInflate,
1634
+ Vt as permissionStateToStatus,
1635
+ kn as rasterizeFaceRegions,
1636
+ Wt as readDeviceSignals,
1637
+ Gt as resetQuality,
1638
+ _n as resolveActiveOverlayLabelIndices,
1639
+ wr as resolveBodyMoveLimits,
1640
+ Sr as resolveBodyTriggerOptions,
1641
+ ze as resolveCalibrationFaceDisplayMirrored,
1642
+ Ut as resolveInitialTierIndex,
1643
+ Ln as resolveMaskSize,
1644
+ On as resolveOverlayLabelIndices,
1645
+ qt as resolvePerformanceBudget,
1646
+ jt as resolveQualityTier,
1647
+ jr as resolveTextureSource,
1648
+ Ct as runCompatChecks,
1649
+ P as sampleXRDiagnostics,
1650
+ vr as screenAngle,
1651
+ un as screenChirality,
1652
+ Kt as semanticMaskLabelIndex,
1653
+ we as sessionReasonToFallback,
1654
+ xr as setBodyTriggerOptions,
1655
+ Rr as setHandTattooBlend,
1656
+ Yt as setQualityTier,
1657
+ Cr as sideJoint,
1658
+ Er as snapshotBodyTriggerState,
1659
+ gn as snapshotGestureState,
1660
+ mn as solveHandRig,
1661
+ Tr as stepBodyTrigger,
1662
+ yn as stepGestureDetector,
1663
+ Qt as stepQualityController,
1664
+ dt as summarizeCompatResults,
1665
+ Kr as throwIfAborted,
1666
+ Mr as thumbDirection,
1667
+ Ar as thumbExtension,
1668
+ Jt as tierToApply,
1669
+ Dn as updateIrisResult,
1670
+ Fr as updatePointerHand,
1671
+ Xn as updateSegmentationOverlayMaterial,
1672
+ Ir as updateTouchHand,
1673
+ Hn as uploadSemanticMask,
1674
+ kr as useArmMask,
1675
+ Ve as useCalibrationFaceTracker,
1676
+ Et as useFaceBoundingBox,
1677
+ $n as useScreenSpace,
1678
+ Bn as useSegmentationOverlayMaterial,
1679
+ Nn as useSemanticMaskTexture,
1680
+ aa as useTrackerContext,
1681
+ na as useXRCameraDeviceId,
1682
+ sa as useXRCameraFacing,
1683
+ ia as useXRCameraTexture,
1684
+ ie as useXRContext,
1685
+ Zt as useXRDiagnostics,
1686
+ oa as useXRError,
1687
+ la as useXRFeedAspect,
1688
+ da as useXRFeedCrop,
1689
+ ca as useXRLifecycle,
1690
+ ua as useXRMirrored,
1691
+ Se as useXRModel,
1692
+ ma as useXRModelErrors,
1693
+ ve as useXRModelNode,
1694
+ pa as useXROrientation,
1695
+ fa as useXRPipelineSnapshot,
1696
+ ha as useXRQualityConfig,
1697
+ ga as useXRQualityState,
1698
+ ya as useXRReady,
1699
+ ba as useXRRenderSize,
1700
+ wa as useXRSessionCameraPermission,
1701
+ Sa as useXRTrackerStatus,
1702
+ Yr as useXRViewportRenderOutputs,
1703
+ Qr as useXRViewportState,
1704
+ _r as worldToFeedUnits,
1705
+ Lr as wristFrameLocal
1191
1706
  };