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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/GROUNDING.md +4643 -170
  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/gltfLoader.d.ts +16 -0
  18. package/dist/assets/loaders.d.ts +16 -1
  19. package/dist/body-pose/index.d.ts +521 -0
  20. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  21. package/dist/body-trigger/frame.d.ts +88 -0
  22. package/dist/body-trigger/index.d.ts +6 -0
  23. package/dist/body-trigger/moves.d.ts +235 -0
  24. package/dist/body-trigger/trigger.d.ts +75 -0
  25. package/dist/calibration/calibration.d.ts +11 -6
  26. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  27. package/dist/canonicalFace-C83I225R.cjs +1 -0
  28. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  29. package/dist/components/BodyInstruction/index.d.ts +69 -0
  30. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  31. package/dist/components/BodyTracker/index.d.ts +10 -2
  32. package/dist/components/BodyTrigger/index.d.ts +49 -0
  33. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  34. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  35. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  36. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  37. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  38. package/dist/components/FaceAtlas/index.d.ts +7 -0
  39. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  40. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  41. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  42. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  43. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  44. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  45. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  46. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  47. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  48. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  49. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  50. package/dist/components/FaceCharacter/index.d.ts +18 -0
  51. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  52. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  53. package/dist/components/FaceInset/frame.d.ts +94 -0
  54. package/dist/components/FaceInset/index.d.ts +6 -0
  55. package/dist/components/FaceInset/material.d.ts +40 -0
  56. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  57. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  58. package/dist/components/FaceInstruction/index.d.ts +56 -0
  59. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  60. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  61. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  62. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  63. package/dist/components/FaceLiquify/index.d.ts +10 -0
  64. package/dist/components/FaceLiquify/material.d.ts +39 -0
  65. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  66. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  67. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  68. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  69. package/dist/components/FaceLiquify/target.d.ts +85 -0
  70. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  71. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
  72. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  73. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
  74. package/dist/components/FaceMesh/index.d.ts +1 -1
  75. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  76. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  77. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  78. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  79. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  80. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  81. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  82. package/dist/components/FaceSwap/index.d.ts +13 -0
  83. package/dist/components/FaceSwap/settings.d.ts +300 -0
  84. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  85. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  86. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  87. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  88. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  89. package/dist/components/Faceless/Faceless.d.ts +51 -0
  90. package/dist/components/Faceless/index.d.ts +2 -0
  91. package/dist/components/HairLock/HairLock.d.ts +39 -0
  92. package/dist/components/HairLock/index.d.ts +2 -0
  93. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  94. package/dist/components/HandCutout/index.d.ts +35 -0
  95. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  96. package/dist/components/HandInstruction/index.d.ts +74 -0
  97. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  98. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  99. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  100. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  101. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  102. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  103. package/dist/components/HandRig/index.d.ts +101 -0
  104. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  105. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  106. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  107. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  108. package/dist/components/HandTouch/index.d.ts +2 -0
  109. package/dist/components/HeadBinding/index.d.ts +14 -0
  110. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  111. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  112. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  113. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  114. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  115. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  116. package/dist/components/HeadOccluder/index.d.ts +57 -3
  117. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  118. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  119. package/dist/components/Instruction/HintStage.d.ts +29 -0
  120. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  121. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  122. package/dist/components/Instruction/ghost.d.ts +129 -0
  123. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  124. package/dist/components/Instruction/hintLook.d.ts +81 -0
  125. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  126. package/dist/components/Instruction/index.d.ts +41 -0
  127. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  128. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  129. package/dist/components/LipEffect/LipEffect.d.ts +22 -2
  130. package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
  131. package/dist/components/LipEffect/LipEffects.d.ts +5 -2
  132. package/dist/components/LipEffect/defaults.d.ts +21 -2
  133. package/dist/components/LipEffect/index.d.ts +1 -1
  134. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  135. package/dist/components/LipEffect/settings.d.ts +117 -13
  136. package/dist/components/LipEffect/shader.d.ts +39 -0
  137. package/dist/components/LipEffect/types.d.ts +82 -10
  138. package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
  139. package/dist/components/LipEffect/uvGuide.d.ts +31 -16
  140. package/dist/components/Makeup/Blush.d.ts +18 -0
  141. package/dist/components/Makeup/Brows.d.ts +20 -0
  142. package/dist/components/Makeup/Contour.d.ts +17 -0
  143. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  144. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  145. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  146. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  147. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  148. package/dist/components/Makeup/constants.d.ts +44 -0
  149. package/dist/components/Makeup/design.d.ts +106 -0
  150. package/dist/components/Makeup/designSamples.d.ts +42 -0
  151. package/dist/components/Makeup/eyes.d.ts +114 -0
  152. package/dist/components/Makeup/fields.d.ts +10 -0
  153. package/dist/components/Makeup/geometry.d.ts +106 -0
  154. package/dist/components/Makeup/index.d.ts +26 -0
  155. package/dist/components/Makeup/looks.d.ts +28 -0
  156. package/dist/components/Makeup/material.d.ts +239 -0
  157. package/dist/components/Makeup/settings.d.ts +54 -0
  158. package/dist/components/Makeup/shades.d.ts +143 -0
  159. package/dist/components/Makeup/shapes.d.ts +27 -0
  160. package/dist/components/Makeup/skinTone.d.ts +135 -0
  161. package/dist/components/Makeup/types.d.ts +110 -0
  162. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  163. package/dist/components/Necklace/Necklace.d.ts +44 -0
  164. package/dist/components/Necklace/index.d.ts +1 -0
  165. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  166. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  167. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  168. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  169. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  170. package/dist/components/SpringSwing/index.d.ts +1 -0
  171. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  172. package/dist/components/index.d.ts +8 -0
  173. package/dist/config/index.d.ts +0 -1
  174. package/dist/context-DTxSQvp4.js +13 -0
  175. package/dist/context-hA0Rb2Xa.cjs +1 -0
  176. package/dist/contexts-BH7PdKFS.cjs +1 -0
  177. package/dist/contexts-jak8-tND.js +667 -0
  178. package/dist/coordinates/index.d.ts +2 -0
  179. package/dist/coordinates/side.d.ts +40 -0
  180. package/dist/debug-ui/default-setting.cjs +2 -2
  181. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  182. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  183. package/dist/debug-ui/index.d.ts +4 -3
  184. package/dist/debug-ui/media-source/index.d.ts +1 -1
  185. package/dist/debug-ui/media-source/session.d.ts +30 -2
  186. package/dist/debug-ui/media-source.cjs +1 -1
  187. package/dist/debug-ui/media-source.js +1 -1
  188. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  189. package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
  190. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  191. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  192. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  193. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  194. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  195. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  196. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  197. package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
  198. package/dist/debug-ui.cjs +3 -3
  199. package/dist/debug-ui.js +2250 -2472
  200. package/dist/entries/all.d.ts +3 -1
  201. package/dist/entries/core.d.ts +3 -2
  202. package/dist/entries/face-effects.d.ts +114 -8
  203. package/dist/entries/instructions.d.ts +48 -0
  204. package/dist/entries/internal.d.ts +2 -1
  205. package/dist/entries/low-level.d.ts +28 -1
  206. package/dist/entries/particles.d.ts +11 -0
  207. package/dist/entries/tracking.d.ts +37 -2
  208. package/dist/face-atlas/attributes.d.ts +30 -0
  209. package/dist/face-atlas/eyes.d.ts +272 -0
  210. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  211. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  212. package/dist/face-atlas/glsl/common.d.ts +55 -0
  213. package/dist/face-atlas/glsl/design.d.ts +49 -0
  214. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  215. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  216. package/dist/face-atlas/glsl/format.d.ts +4 -0
  217. package/dist/face-atlas/glsl/index.d.ts +59 -0
  218. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  219. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  220. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  221. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  222. package/dist/face-atlas/guide.d.ts +51 -0
  223. package/dist/face-atlas/index.d.ts +25 -0
  224. package/dist/face-atlas/lead.d.ts +117 -0
  225. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  226. package/dist/face-atlas/masks.d.ts +53 -0
  227. package/dist/face-atlas/obj.d.ts +69 -0
  228. package/dist/face-atlas/polylines.d.ts +63 -0
  229. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  230. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  231. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  232. package/dist/face-atlas/probe/constants.d.ts +137 -0
  233. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  234. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  235. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  236. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  237. package/dist/face-atlas/probe/stats.d.ts +143 -0
  238. package/dist/face-atlas/probe/targets.d.ts +70 -0
  239. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  240. package/dist/face-atlas/quality.d.ts +28 -0
  241. package/dist/face-atlas/regions.d.ts +31 -0
  242. package/dist/face-atlas/registry.d.ts +252 -0
  243. package/dist/face-atlas/renderState.d.ts +86 -0
  244. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  245. package/dist/face-atlas/shading.d.ts +406 -0
  246. package/dist/face-atlas/shapes.d.ts +86 -0
  247. package/dist/face-atlas/sides.d.ts +41 -0
  248. package/dist/face-atlas/skinMask.d.ts +35 -0
  249. package/dist/face-atlas/surface.d.ts +155 -0
  250. package/dist/face-atlas/topology.d.ts +44 -0
  251. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  252. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  253. package/dist/face-character/bindFaceModel.d.ts +106 -0
  254. package/dist/face-character/canonicalFace.d.ts +17 -0
  255. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  256. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  257. package/dist/face-character/driveFaceModel.d.ts +57 -0
  258. package/dist/face-character/expressionOutputs.d.ts +45 -0
  259. package/dist/face-character/faceExpressions.d.ts +104 -0
  260. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  261. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  262. package/dist/face-character/faceMorph.d.ts +77 -0
  263. package/dist/face-character/faceMorphs.d.ts +46 -0
  264. package/dist/face-character/facePhoto.d.ts +138 -0
  265. package/dist/face-character/facePiercings.d.ts +116 -0
  266. package/dist/face-character/facePin.d.ts +131 -0
  267. package/dist/face-character/faceReprojection.d.ts +273 -0
  268. package/dist/face-character/faceReprojector.d.ts +171 -0
  269. package/dist/face-character/faceRig.d.ts +176 -0
  270. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  271. package/dist/face-character/faceTexture.d.ts +169 -0
  272. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  273. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  274. package/dist/face-character/faceTextureStats.d.ts +298 -0
  275. package/dist/face-character/faceTransfer.d.ts +396 -0
  276. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  277. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  278. package/dist/face-character/faceWarp3D.d.ts +101 -0
  279. package/dist/face-character/faceless.d.ts +79 -0
  280. package/dist/face-character/featureWarp.d.ts +28 -0
  281. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  282. package/dist/face-character/liveValue.d.ts +12 -0
  283. package/dist/face-character/memo.d.ts +15 -0
  284. package/dist/face-effects.cjs +2252 -83
  285. package/dist/face-effects.js +14234 -1231
  286. package/dist/face-expression/index.d.ts +182 -0
  287. package/dist/face-info/landmarks.d.ts +17 -3
  288. package/dist/face-info/types.d.ts +20 -3
  289. package/dist/gestures/definitions.d.ts +15 -2
  290. package/dist/gestures/index.d.ts +1 -1
  291. package/dist/gestures/measures.d.ts +21 -8
  292. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  293. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  294. package/dist/hand/armFit.d.ts +46 -0
  295. package/dist/hand/armMask.d.ts +178 -0
  296. package/dist/hand/handCutout.d.ts +23 -0
  297. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  298. package/dist/hand/handGestures.d.ts +524 -0
  299. package/dist/hand/handPose.d.ts +98 -0
  300. package/dist/hand/handRigSolver.d.ts +159 -0
  301. package/dist/hand/handTattoo.d.ts +81 -0
  302. package/dist/hand/handTouch.d.ts +240 -0
  303. package/dist/hand/wrist.d.ts +44 -0
  304. package/dist/hand/wristFilter.d.ts +44 -0
  305. package/dist/hooks/selectors.d.ts +8 -0
  306. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  307. package/dist/hooks/useTrackerContext.d.ts +6 -0
  308. package/dist/index-B1_TzJaI.js +1104 -0
  309. package/dist/index-BavF06C6.js +190 -0
  310. package/dist/index-BfFmpddl.cjs +21 -0
  311. package/dist/index-BuBzneeW.cjs +46 -0
  312. package/dist/index-CGsQWodV.cjs +1 -0
  313. package/dist/index-CIe7eCMH.js +3200 -0
  314. package/dist/index-CfSF8LXa.cjs +1 -0
  315. package/dist/index-D5GTzOzD.cjs +1 -0
  316. package/dist/index-DBhQzvVa.js +314 -0
  317. package/dist/index-DE17y0ZI.cjs +1 -0
  318. package/dist/index-JII7huPk.js +442 -0
  319. package/dist/index-tpCr9CLj.cjs +1 -0
  320. package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
  321. package/dist/index-zGaqrz_K.js +188 -0
  322. package/dist/instructions.cjs +30 -0
  323. package/dist/instructions.js +1507 -0
  324. package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
  325. package/dist/internal-Cjinca64.cjs +1 -0
  326. package/dist/internal.cjs +1 -1
  327. package/dist/internal.js +15 -10
  328. package/dist/iris/compute.d.ts +7 -5
  329. package/dist/iris/types.d.ts +6 -4
  330. package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
  331. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  332. package/dist/landmarks-bftdwq6Z.js +76 -0
  333. package/dist/loaders-BGAUACsd.js +363 -0
  334. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  335. package/dist/low-level.cjs +1 -1
  336. package/dist/low-level.js +666 -602
  337. package/dist/main.cjs +1 -1
  338. package/dist/main.js +866 -1182
  339. package/dist/models/Body/index.d.ts +2 -0
  340. package/dist/models/Face/constants.d.ts +8 -0
  341. package/dist/models/Face/index.d.ts +3 -11
  342. package/dist/models/Face/rotation.d.ts +18 -3
  343. package/dist/models/Hand/HandTracking.d.ts +17 -1
  344. package/dist/models/Segmentation/index.d.ts +2 -0
  345. package/dist/models/nodeSource.d.ts +9 -0
  346. package/dist/particles/emission.d.ts +24 -0
  347. package/dist/particles/eyes.d.ts +24 -0
  348. package/dist/particles/glsl.d.ts +14 -0
  349. package/dist/particles/index.d.ts +10 -0
  350. package/dist/particles/motion.d.ts +42 -0
  351. package/dist/particles/presets.d.ts +12 -0
  352. package/dist/particles/ring.d.ts +58 -0
  353. package/dist/particles/selfTest.d.ts +53 -0
  354. package/dist/particles/settings.d.ts +127 -0
  355. package/dist/particles/shapes.d.ts +29 -0
  356. package/dist/particles/spawner.d.ts +60 -0
  357. package/dist/particles/system.d.ts +64 -0
  358. package/dist/particles.cjs +122 -0
  359. package/dist/particles.js +774 -0
  360. package/dist/product.cjs +1 -1
  361. package/dist/product.js +29 -29
  362. package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
  363. package/dist/providers-DHsrhDI2.cjs +62 -0
  364. package/dist/render/renderPasses.d.ts +8 -0
  365. package/dist/render/sceneBeforeRender.d.ts +12 -0
  366. package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
  367. package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  368. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  369. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  370. package/dist/renderState-CJNmj5jz.js +39 -0
  371. package/dist/renderState-apSfg4eR.cjs +1 -0
  372. package/dist/scene-object.cjs +1 -1
  373. package/dist/scene-object.js +2 -2
  374. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  375. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  376. package/dist/segmentation2d/types.d.ts +6 -0
  377. package/dist/select-Ck5LGz-J.cjs +1 -0
  378. package/dist/select-pYRo_win.js +233 -0
  379. package/dist/selectors-C4X71aoD.cjs +1 -0
  380. package/dist/selectors-DmNaKIwE.js +196 -0
  381. package/dist/session-BrH8G7iJ.cjs +31 -0
  382. package/dist/session-DgA_z6O1.js +418 -0
  383. package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
  384. package/dist/settings-C63FMBlF.cjs +1 -0
  385. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  386. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  387. package/dist/spring/index.d.ts +2 -0
  388. package/dist/spring/spring.d.ts +69 -0
  389. package/dist/spring/swing.d.ts +54 -0
  390. package/dist/tracking.cjs +10 -1
  391. package/dist/tracking.js +1002 -855
  392. package/dist/trigger-D0Pm9noT.cjs +49 -0
  393. package/dist/trigger-IQeys0oS.js +2128 -0
  394. package/dist/types/face.d.ts +20 -1
  395. package/dist/types/hand-tracking.d.ts +9 -0
  396. package/dist/types/nodes.d.ts +20 -1
  397. package/dist/types/segmentation.d.ts +5 -0
  398. package/dist/updateThrottle-BseecYag.js +4 -0
  399. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  400. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  401. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  402. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  403. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  404. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  405. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  406. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  407. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  408. package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
  409. package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
  410. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  411. package/dist/utils/headOccluderFit.d.ts +42 -0
  412. package/dist/utils/integrity.d.ts +17 -0
  413. package/dist/utils/resolveNumFaces.d.ts +13 -0
  414. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  415. package/dist/utils/similarityFit.d.ts +23 -0
  416. package/dist/uv-BMFt19bg.cjs +1 -0
  417. package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
  418. package/docs/SDK_DOCUMENTATION.md +1 -2
  419. package/docs/api/adaptive-quality.mdx +1 -1
  420. package/docs/api/body-instructions.mdx +285 -0
  421. package/docs/api/body-triggers.mdx +234 -0
  422. package/docs/api/camera-permission.mdx +1 -1
  423. package/docs/api/coordinate-spaces.mdx +7 -4
  424. package/docs/api/cross-camera.mdx +3 -2
  425. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  426. package/docs/api/external-face-mesh.mdx +231 -0
  427. package/docs/api/face-actions.mdx +20 -16
  428. package/docs/api/face-attribute-expression.mdx +1 -1
  429. package/docs/api/face-binding-anchors.mdx +4 -2
  430. package/docs/api/face-character.mdx +157 -0
  431. package/docs/api/face-effects.mdx +3 -0
  432. package/docs/api/face-expression-controller.mdx +153 -0
  433. package/docs/api/face-info.mdx +17 -11
  434. package/docs/api/face-inset.mdx +204 -0
  435. package/docs/api/face-instructions.mdx +183 -0
  436. package/docs/api/face-liquify.mdx +196 -0
  437. package/docs/api/face-mesh.mdx +4 -7
  438. package/docs/api/face-morph.mdx +117 -0
  439. package/docs/api/face-painting.mdx +7 -0
  440. package/docs/api/face-reprojection.mdx +154 -0
  441. package/docs/api/face-retouching.mdx +18 -10
  442. package/docs/api/face-swap.mdx +350 -0
  443. package/docs/api/face-warp-3d.mdx +166 -0
  444. package/docs/api/faceless.mdx +143 -0
  445. package/docs/api/gestures.mdx +68 -32
  446. package/docs/api/hair.mdx +97 -0
  447. package/docs/api/hand-instructions.mdx +222 -0
  448. package/docs/api/hand-rig.mdx +535 -0
  449. package/docs/api/hand-touch.mdx +162 -0
  450. package/docs/api/head-occluder.mdx +563 -0
  451. package/docs/api/holistic-tracker.mdx +6 -1
  452. package/docs/api/instructions.mdx +323 -0
  453. package/docs/api/iris-tracking.mdx +24 -19
  454. package/docs/api/made-up-camera.mdx +131 -0
  455. package/docs/api/makeup-skin-tone.mdx +135 -0
  456. package/docs/api/makeup.mdx +353 -0
  457. package/docs/api/multi-subject.mdx +4 -1
  458. package/docs/api/particles.mdx +155 -0
  459. package/docs/api/person-cutout.mdx +1 -1
  460. package/docs/api/pin-to-face-mesh.mdx +274 -0
  461. package/docs/api/product-ar.mdx +5 -2
  462. package/docs/api/segmentation-overlay.mdx +1 -1
  463. package/docs/docs.json +29 -1
  464. package/docs/examples/lip-shaders.mdx +82 -33
  465. package/docs/guides/face-atlas-template.svg +1 -0
  466. package/docs/guides/face-atlas-textures.mdx +186 -0
  467. package/docs/guides/face-texture-template.svg +1 -0
  468. package/docs/guides/harness-debug-ui.mdx +4 -4
  469. package/docs/guides/lip-effect-textures.mdx +178 -102
  470. package/docs/guides/lip-uv-template.png +0 -0
  471. package/docs/guides/lip-uv-template.svg +1 -1
  472. package/docs/guides/makeup-design-textures.mdx +109 -0
  473. package/docs/introduction.mdx +1 -2
  474. package/package.json +11 -1
  475. package/dist/DebuggerUI-C-ldiozL.js +0 -269
  476. package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
  477. package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
  478. package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
  479. package/dist/FaceRetouch-C7h7x9kd.js +0 -683
  480. package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
  481. package/dist/GLTFLoader-C5q63sKO.js +0 -1633
  482. package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
  483. package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
  484. package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
  485. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  486. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  487. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  488. package/dist/contexts-CO0sd4JQ.cjs +0 -1
  489. package/dist/contexts-FzlnnMYD.js +0 -669
  490. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  491. package/dist/getFaceInfo-BkZfaQs-.js +0 -118
  492. package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
  493. package/dist/index--RgGzZ6X.cjs +0 -47
  494. package/dist/index-CHVbH0hz.js +0 -214
  495. package/dist/index-CeVkgsag.cjs +0 -1
  496. package/dist/index-CnGox6Xr.js +0 -3054
  497. package/dist/index-DKBAh6hV.cjs +0 -1
  498. package/dist/index-DsZwTfG0.cjs +0 -1
  499. package/dist/index-Dw6tj2Mi.js +0 -144
  500. package/dist/index-OCPjOaeP.cjs +0 -1
  501. package/dist/index-s9pF4zkG.js +0 -2053
  502. package/dist/internal-BYza1h8_.cjs +0 -1
  503. package/dist/measures-9dQPdw96.js +0 -154
  504. package/dist/measures-KfJzpvod.cjs +0 -1
  505. package/dist/providers-YNwkmNeK.cjs +0 -62
  506. package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
  507. package/dist/screenTransform-BenfCtZt.js +0 -44
  508. package/dist/screenTransform-BiXdpVf0.cjs +0 -1
  509. package/dist/segmentation-9PhSvc-R.cjs +0 -1
  510. package/dist/segmentation-CeOTKemr.js +0 -5
  511. package/dist/selectors-C5G1PMYL.js +0 -195
  512. package/dist/selectors-Du_PsVnW.cjs +0 -1
  513. package/dist/session-BBr0yN8h.cjs +0 -31
  514. package/dist/session-Cy0m7l7-.js +0 -363
  515. package/dist/settings-DRR7-snV.cjs +0 -1
  516. package/dist/useFaceInfo-Blf7FCu3.js +0 -303
  517. package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
package/dist/product.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var ae=Object.create;var X=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var de=(e,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ce(r))!le.call(e,s)&&s!==t&&X(e,s,{get:()=>r[s],enumerable:!(a=ie(r,s))||a.enumerable});return e};var fe=(e,r,t)=>(t=e!=null?ae(ue(e)):{},de(r||!e||!e.__esModule?X(t,"default",{value:e,enumerable:!0}):t,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime"),o=require("react"),N=require("./index-CeVkgsag.cjs"),pe=require("./useXRCapabilities-B1R2ghy-.cjs");let j=null;const B=()=>typeof customElements<"u"&&customElements.get("model-viewer")!==void 0,U=()=>B()?Promise.resolve():(j||(j=import("@google/model-viewer").then(()=>{}).catch(e=>{throw j=null,new Error(`@google/model-viewer could not be loaded (install it as a dependency to use <ProductViewer>): ${e instanceof Error?e.message:String(e)}`)})),j),O=["webxr","scene-viewer","quick-look"],W=o.forwardRef(({src:e,iosSrc:r,alt:t="3D product",poster:a,arModes:s=O,ar:n=!0,placement:i="floor",scale:d="auto",cameraControls:f=!0,autoRotate:A=!1,loading:v="auto",environmentImage:x,shadowIntensity:l=1,exposure:c,attributes:p,className:m,style:y,children:h,onLoad:g,onError:P,onArStatus:F,onReady:M},u)=>{const E=o.useRef(null),[R,re]=o.useState(!1),L=o.useRef({onLoad:g,onError:P,onArStatus:F,onReady:M});L.current={onLoad:g,onError:P,onArStatus:F,onReady:M};const ne=o.useCallback(b=>{E.current=b,typeof u=="function"?u(b):u&&(u.current=b)},[u]);o.useEffect(()=>{let b=!0;return U().then(()=>{b&&re(!0)}).catch($=>{var D,z;b&&((z=(D=L.current).onError)==null||z.call(D,$))}),()=>{b=!1}},[]),o.useEffect(()=>{var q,I;const b=E.current;if(!R||!b)return;const $=()=>{var k,w;return(w=(k=L.current).onLoad)==null?void 0:w.call(k)},D=k=>{var V,T;const w=k.detail;(T=(V=L.current).onError)==null||T.call(V,(w==null?void 0:w.sourceError)??new Error(`model-viewer ${(w==null?void 0:w.type)??"error"} for ${e}`))},z=k=>{var w,V;return(V=(w=L.current).onArStatus)==null?void 0:V.call(w,k.detail.status)};return b.addEventListener("load",$),b.addEventListener("error",D),b.addEventListener("ar-status",z),(I=(q=L.current).onReady)==null||I.call(q,b),()=>{b.removeEventListener("load",$),b.removeEventListener("error",D),b.removeEventListener("ar-status",z)}},[R,e]);const oe={src:e,alt:t,...r?{"ios-src":r}:{},...a?{poster:a}:{},...n?{ar:"","ar-modes":s.join(" "),"ar-placement":i,"ar-scale":d}:{},...f?{"camera-controls":""}:{},...A?{"auto-rotate":""}:{},loading:v,...x?{"environment-image":x}:{},"shadow-intensity":String(l),...c!==void 0?{exposure:String(c)}:{},...p??{},class:m,style:y,ref:ne};return o.createElement("model-viewer",oe,h)});W.displayName="ProductViewer";const J=(e,r)=>{if(!e)return[];const t={webxr:e.webxr,"scene-viewer":e.sceneViewer,"quick-look":e.quickLook};return r.filter(a=>t[a])},G=async(e,r="webxr")=>{if(!e||r!=="webxr")return async()=>{};const t=e.store.getSnapshot(),a=t.lifecycle==="paused";if(t.lifecycle!=="running"&&!a)return async()=>{};if(t.source!==N.XRMediaSource.WEBCAM)return async()=>{};const s=t.cameraFacing??"user";return await e.stop(),async()=>{await e.switchCamera({facingMode:s}),a&&e.pause()}},me=(e={})=>{var M;const{handoffCamera:r=!0}=e,t=(e.modes??O).join(","),a=o.useMemo(()=>t.split(","),[t]),s=pe.useXRCapabilities({queryPermission:!1}),n=N.useOptionalXRContext(),[i,d]=o.useState(null),[f,A]=o.useState("not-presenting"),[v,x]=o.useState(!1),[l,c]=o.useState(null),p=o.useRef(null),m=o.useRef(e.onStatus);m.current=e.onStatus;const y=o.useMemo(()=>{var u;return J(((u=s.capabilities)==null?void 0:u.placement)??null,a)},[s.capabilities,a]),h=s.status==="ready"&&y.length===0?((M=s.capabilities)==null?void 0:M.placement.reason)??N.createFallbackReason("placement-unsupported"):null,g=o.useCallback(u=>{var E;if(A(u),(E=m.current)==null||E.call(m,u),u==="not-presenting"||u==="failed"){const R=p.current;p.current=null,R&&R().catch(()=>{})}},[]),P=o.useCallback(u=>{d(u)},[]);o.useEffect(()=>{if(!i)return;const u=R=>g(R.detail.status),E=()=>x(!!i.canActivateAR);return i.addEventListener("ar-status",u),i.addEventListener("load",E),x(!!i.canActivateAR),()=>{i.removeEventListener("ar-status",u),i.removeEventListener("load",E)}},[i,g]);const F=o.useCallback(async()=>{if(!i)throw new Error("useProductAr: bind the <ProductViewer> first");c(null);try{r&&(p.current=await G((n==null?void 0:n.session)??null,y[0]??null)),await i.activateAR()}catch(u){const E=u instanceof Error?u:new Error(String(u));throw c(E),g("failed"),E}},[i,r,n,g,y]);return o.useMemo(()=>({status:h?"unavailable":f,supportedModes:y,canActivate:v,reason:h,loading:s.status==="checking"||s.status==="idle",error:l,bind:P,activate:F,handleStatus:g}),[h,f,y,v,s.status,l,P,F,g])},H=(e,r=4)=>e.map(t=>Number(t.toFixed(r))).join(" "),K=e=>({slot:`hotspot-${e.id}`,"data-position":H(e.position),"data-normal":H(e.normal)}),be=/[^a-z0-9-]+/g,Q=(e,r)=>{let t=(r??"").toLowerCase().replace(be,"-").replace(/^-+|-+$/g,"")||"hotspot";t.startsWith("__")&&(t=t.replace(/^_+/,"")||"hotspot");const a=new Set(e.map(n=>n.id));if(!a.has(t))return t;let s=2;for(;a.has(`${t}-${s}`);)s+=1;return`${t}-${s}`},_=e=>{if(!Array.isArray(e))return[];const r=[],t=new Set;for(const a of e){if(!a||typeof a!="object")continue;const s=a,n=Array.isArray(s.position)?s.position:null,i=Array.isArray(s.normal)?s.normal:[0,0,1];typeof s.id!="string"||!s.id||t.has(s.id)||s.id.startsWith("__")||!n||n.length!==3||n.some(d=>typeof d!="number"||!Number.isFinite(d))||i.length!==3||i.some(d=>typeof d!="number"||!Number.isFinite(d))||(t.add(s.id),r.push({id:s.id,position:[n[0],n[1],n[2]],normal:[i[0],i[1],i[2]],...typeof s.label=="string"?{label:s.label}:{},...typeof s.description=="string"?{description:s.description}:{}}))}return r},Y=e=>JSON.stringify(_(e),null,2),Z=(e,r="metric")=>{if(!Number.isFinite(e))return"–";if(r==="imperial"){const t=e/.0254;return t>=12?`${(t/12).toFixed(2)} ft`:`${t.toFixed(1)} in`}return e>=1?`${e.toFixed(2)} m`:`${(e*100).toFixed(1)} cm`},ee=({size:e,center:r})=>{const[t,a,s]=e,[n,i,d]=r,f=n-t/2,A=n+t/2,v=i-a/2,x=i+a/2,l=d-s/2,c=d+s/2,p=(m,y,h,g)=>({axis:m,start:y,end:h,mid:[(y[0]+h[0])/2,(y[1]+h[1])/2,(y[2]+h[2])/2],length:g});return[p("x",[f,v,c],[A,v,c],t),p("y",[f,v,c],[f,x,c],a),p("z",[f,v,l],[f,v,c],s)]},C=e=>e,te=(e,r)=>(e.loaded&&r(),e.addEventListener("load",r),()=>e.removeEventListener("load",r)),ye=e=>{const[r,t]=o.useState([]),[a,s]=o.useState(null);o.useEffect(()=>{if(e)return te(e,()=>{t([...C(e).availableVariants??[]]),s(C(e).variantName??null)})},[e]);const n=o.useCallback(i=>{e&&(C(e).variantName=i,s(i))},[e]);return o.useMemo(()=>({variants:r,variant:a,setVariant:n}),[r,a,n])},ge=e=>{const[r,t]=o.useState(null);return o.useEffect(()=>{if(e)return te(e,()=>{var n,i,d,f;const a=(i=(n=C(e)).getDimensions)==null?void 0:i.call(n),s=(f=(d=C(e)).getBoundingBoxCenter)==null?void 0:f.call(d);!a||!s||t({size:[a.x,a.y,a.z],center:[s.x,s.y,s.z]})})},[e]),r},ve=(e,r={})=>{const[t,a]=o.useState(()=>_(r.initial??[])),s=o.useRef(r.initial);o.useEffect(()=>{r.initial!==s.current&&(s.current=r.initial,a(_(r.initial??[])))},[r.initial]);const n=o.useCallback(l=>{var c;a(l),(c=r.onChange)==null||c.call(r,l)},[r.onChange]),i=o.useCallback(l=>{const c={...l,id:l.id??Q(t,l.label)};return n([...t,c]),c},[t,n]),d=o.useCallback((l,c,p)=>{var g,P;const m=e?(P=(g=C(e)).positionAndNormalFromPoint)==null?void 0:P.call(g,l,c):null;if(!m)return null;const y=[m.position.x,m.position.y,m.position.z],h=[m.normal.x,m.normal.y,m.normal.z];return i({position:y,normal:h,...p?{label:p}:{}})},[e,i]),f=o.useCallback((l,c)=>n(t.map(p=>p.id===l?{...p,...c}:p)),[t,n]),A=o.useCallback(l=>n(t.filter(c=>c.id!==l)),[t,n]),v=o.useCallback(()=>n([]),[n]),x=o.useCallback(l=>{try{n(_(JSON.parse(l)))}catch{}},[n]);return o.useMemo(()=>({hotspots:t,placeFromPointer:d,add:i,update:f,remove:A,clear:v,json:Y(t),importJson:x}),[t,d,i,f,A,v,x])},se=e=>o.useMemo(()=>e?ee(e):[],[e]),he={display:"flex",alignItems:"center",gap:6,padding:"4px 8px",borderRadius:999,background:"rgba(8, 15, 28, 0.85)",color:"#f8fafc",border:"1px solid rgba(255,255,255,0.3)",fontSize:12,fontFamily:"system-ui, sans-serif",whiteSpace:"nowrap",cursor:"pointer"},we={display:"inline-flex",alignItems:"center",gap:6,transform:"translate(-50%, -50%)"},Ee={background:"none",border:0,padding:0,margin:0},xe=({hotspot:e,children:r,onClick:t,style:a,className:s})=>S.jsx("button",{type:"button",...K(e),className:s,style:Ee,onClick:n=>{n.stopPropagation(),t==null||t(e)},"aria-label":e.label??e.id,"data-visibility-attribute":"visible",children:S.jsx("span",{style:{...he,...we,...a},children:r??S.jsxs(S.Fragment,{children:[S.jsx("span",{style:{width:8,height:8,borderRadius:4,background:"#22d3ee"}}),e.label]})})}),Se={padding:"2px 6px",borderRadius:4,background:"rgba(8, 15, 28, 0.85)",color:"#f8fafc",border:"1px solid rgba(255,255,255,0.3)",fontSize:11,fontFamily:"ui-monospace, monospace",whiteSpace:"nowrap",transform:"translate(-50%, -50%)"},Ae="hotspot-__dim-",Pe={x:"W",y:"H",z:"D"},Re=({dimensions:e,unit:r="metric",axes:t=["x","y","z"],style:a})=>{const s=se(e);return S.jsx(S.Fragment,{children:s.filter(n=>t.includes(n.axis)).map(n=>S.jsx("div",{slot:`${Ae}${n.axis}`,"data-position":H(n.mid),"data-normal":n.axis==="y"?"-1 0 0":"0 0 1",children:S.jsxs("span",{style:{...Se,...a},children:[Pe[n.axis]," ",Z(n.length,r)]})},n.axis))})};exports.DEFAULT_PRODUCT_AR_MODES=O;exports.ProductDimensions=Re;exports.ProductHotspot=xe;exports.ProductViewer=W;exports.dimensionLines=ee;exports.formatLength=Z;exports.hotspotAttributes=K;exports.isModelViewerDefined=B;exports.loadModelViewer=U;exports.nextHotspotId=Q;exports.parseHotspots=_;exports.releaseSessionForAr=G;exports.serializeHotspots=Y;exports.supportedProductArModes=J;exports.useDimensionLines=se;exports.useProductAr=me;exports.useProductDimensions=ge;exports.useProductHotspots=ve;exports.useProductVariants=ye;
1
+ "use strict";var ae=Object.create;var X=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var ce=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var de=(e,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ce(r))!le.call(e,s)&&s!==t&&X(e,s,{get:()=>r[s],enumerable:!(a=ie(r,s))||a.enumerable});return e};var fe=(e,r,t)=>(t=e!=null?ae(ue(e)):{},de(r||!e||!e.__esModule?X(t,"default",{value:e,enumerable:!0}):t,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react/jsx-runtime"),o=require("react"),N=require("./index-CfSF8LXa.cjs"),pe=require("./useXRCapabilities-Cr3RzuAW.cjs");let j=null;const B=()=>typeof customElements<"u"&&customElements.get("model-viewer")!==void 0,U=()=>B()?Promise.resolve():(j||(j=import("@google/model-viewer").then(()=>{}).catch(e=>{throw j=null,new Error(`@google/model-viewer could not be loaded (install it as a dependency to use <ProductViewer>): ${e instanceof Error?e.message:String(e)}`)})),j),O=["webxr","scene-viewer","quick-look"],W=o.forwardRef(({src:e,iosSrc:r,alt:t="3D product",poster:a,arModes:s=O,ar:n=!0,placement:i="floor",scale:d="auto",cameraControls:f=!0,autoRotate:A=!1,loading:v="auto",environmentImage:x,shadowIntensity:l=1,exposure:c,attributes:p,className:m,style:y,children:h,onLoad:g,onError:P,onArStatus:F,onReady:M},u)=>{const E=o.useRef(null),[R,re]=o.useState(!1),L=o.useRef({onLoad:g,onError:P,onArStatus:F,onReady:M});L.current={onLoad:g,onError:P,onArStatus:F,onReady:M};const ne=o.useCallback(b=>{E.current=b,typeof u=="function"?u(b):u&&(u.current=b)},[u]);o.useEffect(()=>{let b=!0;return U().then(()=>{b&&re(!0)}).catch($=>{var D,z;b&&((z=(D=L.current).onError)==null||z.call(D,$))}),()=>{b=!1}},[]),o.useEffect(()=>{var q,I;const b=E.current;if(!R||!b)return;const $=()=>{var k,w;return(w=(k=L.current).onLoad)==null?void 0:w.call(k)},D=k=>{var V,T;const w=k.detail;(T=(V=L.current).onError)==null||T.call(V,(w==null?void 0:w.sourceError)??new Error(`model-viewer ${(w==null?void 0:w.type)??"error"} for ${e}`))},z=k=>{var w,V;return(V=(w=L.current).onArStatus)==null?void 0:V.call(w,k.detail.status)};return b.addEventListener("load",$),b.addEventListener("error",D),b.addEventListener("ar-status",z),(I=(q=L.current).onReady)==null||I.call(q,b),()=>{b.removeEventListener("load",$),b.removeEventListener("error",D),b.removeEventListener("ar-status",z)}},[R,e]);const oe={src:e,alt:t,...r?{"ios-src":r}:{},...a?{poster:a}:{},...n?{ar:"","ar-modes":s.join(" "),"ar-placement":i,"ar-scale":d}:{},...f?{"camera-controls":""}:{},...A?{"auto-rotate":""}:{},loading:v,...x?{"environment-image":x}:{},"shadow-intensity":String(l),...c!==void 0?{exposure:String(c)}:{},...p??{},class:m,style:y,ref:ne};return o.createElement("model-viewer",oe,h)});W.displayName="ProductViewer";const J=(e,r)=>{if(!e)return[];const t={webxr:e.webxr,"scene-viewer":e.sceneViewer,"quick-look":e.quickLook};return r.filter(a=>t[a])},G=async(e,r="webxr")=>{if(!e||r!=="webxr")return async()=>{};const t=e.store.getSnapshot(),a=t.lifecycle==="paused";if(t.lifecycle!=="running"&&!a)return async()=>{};if(t.source!==N.XRMediaSource.WEBCAM)return async()=>{};const s=t.cameraFacing??"user";return await e.stop(),async()=>{await e.switchCamera({facingMode:s}),a&&e.pause()}},me=(e={})=>{var M;const{handoffCamera:r=!0}=e,t=(e.modes??O).join(","),a=o.useMemo(()=>t.split(","),[t]),s=pe.useXRCapabilities({queryPermission:!1}),n=N.useOptionalXRContext(),[i,d]=o.useState(null),[f,A]=o.useState("not-presenting"),[v,x]=o.useState(!1),[l,c]=o.useState(null),p=o.useRef(null),m=o.useRef(e.onStatus);m.current=e.onStatus;const y=o.useMemo(()=>{var u;return J(((u=s.capabilities)==null?void 0:u.placement)??null,a)},[s.capabilities,a]),h=s.status==="ready"&&y.length===0?((M=s.capabilities)==null?void 0:M.placement.reason)??N.createFallbackReason("placement-unsupported"):null,g=o.useCallback(u=>{var E;if(A(u),(E=m.current)==null||E.call(m,u),u==="not-presenting"||u==="failed"){const R=p.current;p.current=null,R&&R().catch(()=>{})}},[]),P=o.useCallback(u=>{d(u)},[]);o.useEffect(()=>{if(!i)return;const u=R=>g(R.detail.status),E=()=>x(!!i.canActivateAR);return i.addEventListener("ar-status",u),i.addEventListener("load",E),x(!!i.canActivateAR),()=>{i.removeEventListener("ar-status",u),i.removeEventListener("load",E)}},[i,g]);const F=o.useCallback(async()=>{if(!i)throw new Error("useProductAr: bind the <ProductViewer> first");c(null);try{r&&(p.current=await G((n==null?void 0:n.session)??null,y[0]??null)),await i.activateAR()}catch(u){const E=u instanceof Error?u:new Error(String(u));throw c(E),g("failed"),E}},[i,r,n,g,y]);return o.useMemo(()=>({status:h?"unavailable":f,supportedModes:y,canActivate:v,reason:h,loading:s.status==="checking"||s.status==="idle",error:l,bind:P,activate:F,handleStatus:g}),[h,f,y,v,s.status,l,P,F,g])},H=(e,r=4)=>e.map(t=>Number(t.toFixed(r))).join(" "),K=e=>({slot:`hotspot-${e.id}`,"data-position":H(e.position),"data-normal":H(e.normal)}),be=/[^a-z0-9-]+/g,Q=(e,r)=>{let t=(r??"").toLowerCase().replace(be,"-").replace(/^-+|-+$/g,"")||"hotspot";t.startsWith("__")&&(t=t.replace(/^_+/,"")||"hotspot");const a=new Set(e.map(n=>n.id));if(!a.has(t))return t;let s=2;for(;a.has(`${t}-${s}`);)s+=1;return`${t}-${s}`},_=e=>{if(!Array.isArray(e))return[];const r=[],t=new Set;for(const a of e){if(!a||typeof a!="object")continue;const s=a,n=Array.isArray(s.position)?s.position:null,i=Array.isArray(s.normal)?s.normal:[0,0,1];typeof s.id!="string"||!s.id||t.has(s.id)||s.id.startsWith("__")||!n||n.length!==3||n.some(d=>typeof d!="number"||!Number.isFinite(d))||i.length!==3||i.some(d=>typeof d!="number"||!Number.isFinite(d))||(t.add(s.id),r.push({id:s.id,position:[n[0],n[1],n[2]],normal:[i[0],i[1],i[2]],...typeof s.label=="string"?{label:s.label}:{},...typeof s.description=="string"?{description:s.description}:{}}))}return r},Y=e=>JSON.stringify(_(e),null,2),Z=(e,r="metric")=>{if(!Number.isFinite(e))return"–";if(r==="imperial"){const t=e/.0254;return t>=12?`${(t/12).toFixed(2)} ft`:`${t.toFixed(1)} in`}return e>=1?`${e.toFixed(2)} m`:`${(e*100).toFixed(1)} cm`},ee=({size:e,center:r})=>{const[t,a,s]=e,[n,i,d]=r,f=n-t/2,A=n+t/2,v=i-a/2,x=i+a/2,l=d-s/2,c=d+s/2,p=(m,y,h,g)=>({axis:m,start:y,end:h,mid:[(y[0]+h[0])/2,(y[1]+h[1])/2,(y[2]+h[2])/2],length:g});return[p("x",[f,v,c],[A,v,c],t),p("y",[f,v,c],[f,x,c],a),p("z",[f,v,l],[f,v,c],s)]},C=e=>e,te=(e,r)=>(e.loaded&&r(),e.addEventListener("load",r),()=>e.removeEventListener("load",r)),ye=e=>{const[r,t]=o.useState([]),[a,s]=o.useState(null);o.useEffect(()=>{if(e)return te(e,()=>{t([...C(e).availableVariants??[]]),s(C(e).variantName??null)})},[e]);const n=o.useCallback(i=>{e&&(C(e).variantName=i,s(i))},[e]);return o.useMemo(()=>({variants:r,variant:a,setVariant:n}),[r,a,n])},ge=e=>{const[r,t]=o.useState(null);return o.useEffect(()=>{if(e)return te(e,()=>{var n,i,d,f;const a=(i=(n=C(e)).getDimensions)==null?void 0:i.call(n),s=(f=(d=C(e)).getBoundingBoxCenter)==null?void 0:f.call(d);!a||!s||t({size:[a.x,a.y,a.z],center:[s.x,s.y,s.z]})})},[e]),r},ve=(e,r={})=>{const[t,a]=o.useState(()=>_(r.initial??[])),s=o.useRef(r.initial);o.useEffect(()=>{r.initial!==s.current&&(s.current=r.initial,a(_(r.initial??[])))},[r.initial]);const n=o.useCallback(l=>{var c;a(l),(c=r.onChange)==null||c.call(r,l)},[r.onChange]),i=o.useCallback(l=>{const c={...l,id:l.id??Q(t,l.label)};return n([...t,c]),c},[t,n]),d=o.useCallback((l,c,p)=>{var g,P;const m=e?(P=(g=C(e)).positionAndNormalFromPoint)==null?void 0:P.call(g,l,c):null;if(!m)return null;const y=[m.position.x,m.position.y,m.position.z],h=[m.normal.x,m.normal.y,m.normal.z];return i({position:y,normal:h,...p?{label:p}:{}})},[e,i]),f=o.useCallback((l,c)=>n(t.map(p=>p.id===l?{...p,...c}:p)),[t,n]),A=o.useCallback(l=>n(t.filter(c=>c.id!==l)),[t,n]),v=o.useCallback(()=>n([]),[n]),x=o.useCallback(l=>{try{n(_(JSON.parse(l)))}catch{}},[n]);return o.useMemo(()=>({hotspots:t,placeFromPointer:d,add:i,update:f,remove:A,clear:v,json:Y(t),importJson:x}),[t,d,i,f,A,v,x])},se=e=>o.useMemo(()=>e?ee(e):[],[e]),he={display:"flex",alignItems:"center",gap:6,padding:"4px 8px",borderRadius:999,background:"rgba(8, 15, 28, 0.85)",color:"#f8fafc",border:"1px solid rgba(255,255,255,0.3)",fontSize:12,fontFamily:"system-ui, sans-serif",whiteSpace:"nowrap",cursor:"pointer"},we={display:"inline-flex",alignItems:"center",gap:6,transform:"translate(-50%, -50%)"},Ee={background:"none",border:0,padding:0,margin:0},xe=({hotspot:e,children:r,onClick:t,style:a,className:s})=>S.jsx("button",{type:"button",...K(e),className:s,style:Ee,onClick:n=>{n.stopPropagation(),t==null||t(e)},"aria-label":e.label??e.id,"data-visibility-attribute":"visible",children:S.jsx("span",{style:{...he,...we,...a},children:r??S.jsxs(S.Fragment,{children:[S.jsx("span",{style:{width:8,height:8,borderRadius:4,background:"#22d3ee"}}),e.label]})})}),Se={padding:"2px 6px",borderRadius:4,background:"rgba(8, 15, 28, 0.85)",color:"#f8fafc",border:"1px solid rgba(255,255,255,0.3)",fontSize:11,fontFamily:"ui-monospace, monospace",whiteSpace:"nowrap",transform:"translate(-50%, -50%)"},Ae="hotspot-__dim-",Pe={x:"W",y:"H",z:"D"},Re=({dimensions:e,unit:r="metric",axes:t=["x","y","z"],style:a})=>{const s=se(e);return S.jsx(S.Fragment,{children:s.filter(n=>t.includes(n.axis)).map(n=>S.jsx("div",{slot:`${Ae}${n.axis}`,"data-position":H(n.mid),"data-normal":n.axis==="y"?"-1 0 0":"0 0 1",children:S.jsxs("span",{style:{...Se,...a},children:[Pe[n.axis]," ",Z(n.length,r)]})},n.axis))})};exports.DEFAULT_PRODUCT_AR_MODES=O;exports.ProductDimensions=Re;exports.ProductHotspot=xe;exports.ProductViewer=W;exports.dimensionLines=ee;exports.formatLength=Z;exports.hotspotAttributes=K;exports.isModelViewerDefined=B;exports.loadModelViewer=U;exports.nextHotspotId=Q;exports.parseHotspots=_;exports.releaseSessionForAr=G;exports.serializeHotspots=Y;exports.supportedProductArModes=J;exports.useDimensionLines=se;exports.useProductAr=me;exports.useProductDimensions=ge;exports.useProductHotspots=ve;exports.useProductVariants=ye;
package/dist/product.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx as C, jsxs as J, Fragment as T } from "react/jsx-runtime";
2
- import { forwardRef as Z, useRef as j, useState as S, useCallback as w, useEffect as N, createElement as tt, useMemo as z } from "react";
3
- import { g as et, h as rt, j as nt } from "./index-CnGox6Xr.js";
4
- import { u as ot } from "./useXRCapabilities-C68v__wB.js";
2
+ import { forwardRef as Z, useRef as j, useState as S, useCallback as w, useEffect as N, createElement as tt, useMemo as F } from "react";
3
+ import { z as et, A as rt, B as nt } from "./index-CIe7eCMH.js";
4
+ import { u as ot } from "./useXRCapabilities-Cxmlmpbd.js";
5
5
  let O = null;
6
6
  const st = () => typeof customElements < "u" && customElements.get("model-viewer") !== void 0, it = () => st() ? Promise.resolve() : (O || (O = import("@google/model-viewer").then(() => {
7
7
  }).catch((t) => {
@@ -60,20 +60,20 @@ const st = () => typeof customElements < "u" && customElements.get("model-viewer
60
60
  const m = E.current;
61
61
  if (!P || !m) return;
62
62
  const H = () => {
63
- var F, h;
64
- return (h = (F = R.current).onLoad) == null ? void 0 : h.call(F);
65
- }, k = (F) => {
63
+ var z, h;
64
+ return (h = (z = R.current).onLoad) == null ? void 0 : h.call(z);
65
+ }, k = (z) => {
66
66
  var M, W;
67
- const h = F.detail;
67
+ const h = z.detail;
68
68
  (W = (M = R.current).onError) == null || W.call(
69
69
  M,
70
70
  (h == null ? void 0 : h.sourceError) ?? new Error(`model-viewer ${(h == null ? void 0 : h.type) ?? "error"} for ${t}`)
71
71
  );
72
- }, D = (F) => {
72
+ }, D = (z) => {
73
73
  var h, M;
74
74
  return (M = (h = R.current).onArStatus) == null ? void 0 : M.call(
75
75
  h,
76
- F.detail.status
76
+ z.detail.status
77
77
  );
78
78
  };
79
79
  return m.addEventListener("load", H), m.addEventListener("error", k), m.addEventListener("ar-status", D), (q = (X = R.current).onReady) == null || q.call(X, m), () => {
@@ -123,9 +123,9 @@ const ct = (t, o) => {
123
123
  };
124
124
  }, Rt = (t = {}) => {
125
125
  var _;
126
- const { handoffCamera: o = !0 } = t, e = (t.modes ?? U).join(","), s = z(() => e.split(","), [e]), r = ot({ queryPermission: !1 }), n = rt(), [i, l] = S(null), [d, A] = S("not-presenting"), [g, x] = S(!1), [u, a] = S(null), f = j(null), p = j(t.onStatus);
126
+ const { handoffCamera: o = !0 } = t, e = (t.modes ?? U).join(","), s = F(() => e.split(","), [e]), r = ot({ queryPermission: !1 }), n = rt(), [i, l] = S(null), [d, A] = S("not-presenting"), [g, x] = S(!1), [u, a] = S(null), f = j(null), p = j(t.onStatus);
127
127
  p.current = t.onStatus;
128
- const y = z(
128
+ const y = F(
129
129
  () => {
130
130
  var c;
131
131
  return ct(((c = r.capabilities) == null ? void 0 : c.placement) ?? null, s);
@@ -161,7 +161,7 @@ const ct = (t, o) => {
161
161
  throw a(E), b("failed"), E;
162
162
  }
163
163
  }, [i, o, n, b, y]);
164
- return z(
164
+ return F(
165
165
  () => ({
166
166
  status: v ? "unavailable" : d,
167
167
  supportedModes: y,
@@ -185,10 +185,10 @@ const ct = (t, o) => {
185
185
  b
186
186
  ]
187
187
  );
188
- }, B = (t, o = 4) => t.map((e) => Number(e.toFixed(o))).join(" "), lt = (t) => ({
188
+ }, I = (t, o = 4) => t.map((e) => Number(e.toFixed(o))).join(" "), lt = (t) => ({
189
189
  slot: `hotspot-${t.id}`,
190
- "data-position": B(t.position),
191
- "data-normal": B(t.normal)
190
+ "data-position": I(t.position),
191
+ "data-normal": I(t.normal)
192
192
  }), dt = /[^a-z0-9-]+/g, ft = (t, o) => {
193
193
  let e = (o ?? "").toLowerCase().replace(dt, "-").replace(/^-+|-+$/g, "") || "hotspot";
194
194
  e.startsWith("__") && (e = e.replace(/^_+/, "") || "hotspot");
@@ -197,7 +197,7 @@ const ct = (t, o) => {
197
197
  let r = 2;
198
198
  for (; s.has(`${e}-${r}`); ) r += 1;
199
199
  return `${e}-${r}`;
200
- }, I = (t) => {
200
+ }, B = (t) => {
201
201
  if (!Array.isArray(t)) return [];
202
202
  const o = [], e = /* @__PURE__ */ new Set();
203
203
  for (const s of t) {
@@ -212,7 +212,7 @@ const ct = (t, o) => {
212
212
  }));
213
213
  }
214
214
  return o;
215
- }, pt = (t) => JSON.stringify(I(t), null, 2), mt = (t, o = "metric") => {
215
+ }, pt = (t) => JSON.stringify(B(t), null, 2), mt = (t, o = "metric") => {
216
216
  if (!Number.isFinite(t)) return "–";
217
217
  if (o === "imperial") {
218
218
  const e = t / 0.0254;
@@ -232,7 +232,7 @@ const ct = (t, o) => {
232
232
  f("y", [d, g, a], [d, x, a], s),
233
233
  f("z", [d, g, u], [d, g, a], r)
234
234
  ];
235
- }, $ = (t) => t, G = (t, o) => (t.loaded && o(), t.addEventListener("load", o), () => t.removeEventListener("load", o)), Ft = (t) => {
235
+ }, $ = (t) => t, G = (t, o) => (t.loaded && o(), t.addEventListener("load", o), () => t.removeEventListener("load", o)), zt = (t) => {
236
236
  const [o, e] = S([]), [s, r] = S(null);
237
237
  N(() => {
238
238
  if (t)
@@ -246,8 +246,8 @@ const ct = (t, o) => {
246
246
  },
247
247
  [t]
248
248
  );
249
- return z(() => ({ variants: o, variant: s, setVariant: n }), [o, s, n]);
250
- }, zt = (t) => {
249
+ return F(() => ({ variants: o, variant: s, setVariant: n }), [o, s, n]);
250
+ }, Ft = (t) => {
251
251
  const [o, e] = S(null);
252
252
  return N(() => {
253
253
  if (t)
@@ -259,10 +259,10 @@ const ct = (t, o) => {
259
259
  }, [t]), o;
260
260
  }, $t = (t, o = {}) => {
261
261
  const [e, s] = S(
262
- () => I(o.initial ?? [])
262
+ () => B(o.initial ?? [])
263
263
  ), r = j(o.initial);
264
264
  N(() => {
265
- o.initial !== r.current && (r.current = o.initial, s(I(o.initial ?? [])));
265
+ o.initial !== r.current && (r.current = o.initial, s(B(o.initial ?? [])));
266
266
  }, [o.initial]);
267
267
  const n = w(
268
268
  (u) => {
@@ -299,13 +299,13 @@ const ct = (t, o) => {
299
299
  ), g = w(() => n([]), [n]), x = w(
300
300
  (u) => {
301
301
  try {
302
- n(I(JSON.parse(u)));
302
+ n(B(JSON.parse(u)));
303
303
  } catch {
304
304
  }
305
305
  },
306
306
  [n]
307
307
  );
308
- return z(
308
+ return F(
309
309
  () => ({
310
310
  hotspots: e,
311
311
  placeFromPointer: l,
@@ -318,7 +318,7 @@ const ct = (t, o) => {
318
318
  }),
319
319
  [e, l, i, d, A, g, x]
320
320
  );
321
- }, bt = (t) => z(() => t ? yt(t) : [], [t]), gt = {
321
+ }, bt = (t) => F(() => t ? yt(t) : [], [t]), gt = {
322
322
  display: "flex",
323
323
  alignItems: "center",
324
324
  gap: 6,
@@ -380,7 +380,7 @@ const ct = (t, o) => {
380
380
  "div",
381
381
  {
382
382
  slot: `${Et}${n.axis}`,
383
- "data-position": B(n.mid),
383
+ "data-position": I(n.mid),
384
384
  "data-normal": n.axis === "y" ? "-1 0 0" : "0 0 1",
385
385
  children: /* @__PURE__ */ J("span", { style: { ...wt, ...s }, children: [
386
386
  xt[n.axis],
@@ -402,13 +402,13 @@ export {
402
402
  st as isModelViewerDefined,
403
403
  it as loadModelViewer,
404
404
  ft as nextHotspotId,
405
- I as parseHotspots,
405
+ B as parseHotspots,
406
406
  ut as releaseSessionForAr,
407
407
  pt as serializeHotspots,
408
408
  ct as supportedProductArModes,
409
409
  bt as useDimensionLines,
410
410
  Rt as useProductAr,
411
- zt as useProductDimensions,
411
+ Ft as useProductDimensions,
412
412
  $t as useProductHotspots,
413
- Ft as useProductVariants
413
+ zt as useProductVariants
414
414
  };
@@ -1,14 +1,15 @@
1
1
  var W = Object.defineProperty;
2
2
  var Y = (e, r, t) => r in e ? W(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
- var y = (e, r, t) => Y(e, typeof r != "symbol" ? r + "" : r, t);
4
- import { n as B, a as V, b as N, f as H, X as x, e as b, S as X, F as K } from "./index-CnGox6Xr.js";
3
+ var E = (e, r, t) => Y(e, typeof r != "symbol" ? r + "" : r, t);
4
+ import { q as B, n as V, v as H, w as N, x as X, X as x, y as b, S as K, F as q } from "./index-CIe7eCMH.js";
5
5
  import { useMemo as g, useEffect as L, useState as j, useRef as T } from "react";
6
6
  import * as d from "three";
7
- import { p as q, S as J, a as Q, L as Z, R as $, b as ee, c as te, O as re, I as ae } from "./landmarkMask-CbTFzBYG.js";
7
+ import { p as J, S as Q, F as Z, L as $, R as ee, a as te, b as re, O as se, I as ae } from "./landmarkMask-BFDyBnKM.js";
8
8
  import { useFrame as S } from "@react-three/fiber";
9
- import { a as w, u as se } from "./selectors-C5G1PMYL.js";
10
- import { u as U, s as z } from "./index-CsUdQ-pn.js";
11
- const ne = {
9
+ import { b as w, c as ne } from "./selectors-DmNaKIwE.js";
10
+ import { u as U } from "./landmarks-bftdwq6Z.js";
11
+ import { s as z } from "./updateThrottle-BseecYag.js";
12
+ const oe = {
12
13
  left: {
13
14
  /** Iris center. */
14
15
  center: 473,
@@ -27,7 +28,7 @@ const ne = {
27
28
  upperLid: 159,
28
29
  lowerLid: 145
29
30
  }
30
- }, oe = 478, ie = 0.2, p = () => ({ x: 0, y: 0, z: 0 }), A = (e) => ({
31
+ }, ie = 478, ce = 0.2, p = () => ({ x: 0, y: 0, z: 0 }), A = (e) => ({
31
32
  side: e,
32
33
  detected: !1,
33
34
  center: p(),
@@ -39,7 +40,7 @@ const ne = {
39
40
  openness: 0,
40
41
  offset: { x: 0, y: 0 },
41
42
  confidence: 0
42
- }), Ne = (e = 0) => ({
43
+ }), Ue = (e = 0) => ({
43
44
  version: 0,
44
45
  timestampMs: 0,
45
46
  faceIndex: e,
@@ -50,46 +51,46 @@ const ne = {
50
51
  right: A("right")
51
52
  }), C = (e, r) => {
52
53
  e.x = r.x, e.y = r.y, e.z = r.z;
53
- }, I = (e) => Math.max(-1, Math.min(1, e)), O = (e, r, t, s = 1, a = !1) => {
54
- const n = ne[r];
55
- if (!e || e.length < oe)
54
+ }, I = (e) => Math.max(-1, Math.min(1, e)), O = (e, r, t, a = 1, s = !1) => {
55
+ const n = oe[B(r, s)];
56
+ if (!e || e.length < ie)
56
57
  return t.detected = !1, t.confidence = 0, !1;
57
58
  const o = e[n.center];
58
- C(t.center, o), B(o, t.trackerCenter);
59
+ C(t.center, o), V(o, t.trackerCenter);
59
60
  for (let f = 0; f < 4; f += 1) C(t.ring[f], e[n.ring[f]]);
60
61
  t.radius = Math.abs(t.ring[0].x - t.ring[2].x) / 2;
61
62
  const c = e[n.innerCorner], i = e[n.outerCorner];
62
63
  t.eyeCenter.x = (c.x + i.x) / 2, t.eyeCenter.y = (c.y + i.y) / 2, t.eyeCenter.z = (c.z + i.z) / 2, t.eyeWidth = Math.hypot(c.x - i.x, c.y - i.y);
63
64
  const u = Math.abs(e[n.lowerLid].y - e[n.upperLid].y);
64
65
  t.openness = t.eyeWidth > 0 ? u / t.eyeWidth : 0;
65
- const l = t.eyeWidth / 2, h = a ? -1 : 1;
66
- return t.offset.x = l > 0 ? I(h * (o.x - t.eyeCenter.x) / l) : 0, t.offset.y = l > 0 ? I((t.eyeCenter.y - o.y) / l) : 0, t.detected = !0, t.confidence = Math.max(0, Math.min(1, t.openness / ie)) * s, !0;
67
- }, Le = (e, r, t, s = {}) => {
68
- const a = s.held ?? !1, n = s.faceConfidence ?? (a ? 0 : 1), o = s.mirrored ?? !1;
69
- e.faceIndex = s.faceIndex ?? e.faceIndex;
66
+ const l = t.eyeWidth / 2, h = s ? -1 : 1;
67
+ return t.offset.x = l > 0 ? I(h * (o.x - t.eyeCenter.x) / l) : 0, t.offset.y = l > 0 ? I((t.eyeCenter.y - o.y) / l) : 0, t.detected = !0, t.confidence = Math.max(0, Math.min(1, t.openness / ce)) * a, !0;
68
+ }, ze = (e, r, t, a = {}) => {
69
+ const s = a.held ?? !1, n = a.faceConfidence ?? (s ? 0 : 1), o = a.mirrored ?? !1;
70
+ e.faceIndex = a.faceIndex ?? e.faceIndex;
70
71
  const c = O(r, "left", e.left, n, o), i = O(r, "right", e.right, n, o);
71
- return e.detected = c && i, e.held = e.detected && a, e.confidence = e.detected ? n : 0, e.timestampMs = t, e.version += 1, e;
72
- }, ce = () => ({ x: 0, y: 0, z: 0, vx: 0, vy: 0, vz: 0, sampleMs: 0, seen: !1 });
73
- class Ue {
72
+ return e.detected = c && i, e.held = e.detected && s, e.confidence = e.detected ? n : 0, e.timestampMs = t, e.version += 1, e;
73
+ }, le = () => ({ x: 0, y: 0, z: 0, vx: 0, vy: 0, vz: 0, sampleMs: 0, seen: !1 });
74
+ class De {
74
75
  constructor(r = 250) {
75
- y(this, "slots", {});
76
- y(this, "maxGapMs");
76
+ E(this, "slots", {});
77
+ E(this, "maxGapMs");
77
78
  this.maxGapMs = r;
78
79
  }
79
80
  reset() {
80
81
  this.slots = {};
81
82
  }
82
83
  /** Record a fresh inference sample for `key` (e.g. "left"). */
83
- observe(r, t, s) {
84
- const a = this.slots[r] ?? (this.slots[r] = ce()), n = (s - a.sampleMs) / 1e3;
85
- a.seen && n > 0 && n * 1e3 <= this.maxGapMs ? (a.vx = 0.5 * a.vx + 0.5 * ((t.x - a.x) / n), a.vy = 0.5 * a.vy + 0.5 * ((t.y - a.y) / n), a.vz = 0.5 * a.vz + 0.5 * ((t.z - a.z) / n)) : (a.vx = 0, a.vy = 0, a.vz = 0), a.x = t.x, a.y = t.y, a.z = t.z, a.sampleMs = s, a.seen = !0;
84
+ observe(r, t, a) {
85
+ const s = this.slots[r] ?? (this.slots[r] = le()), n = (a - s.sampleMs) / 1e3;
86
+ s.seen && n > 0 && n * 1e3 <= this.maxGapMs ? (s.vx = 0.5 * s.vx + 0.5 * ((t.x - s.x) / n), s.vy = 0.5 * s.vy + 0.5 * ((t.y - s.y) / n), s.vz = 0.5 * s.vz + 0.5 * ((t.z - s.z) / n)) : (s.vx = 0, s.vy = 0, s.vz = 0), s.x = t.x, s.y = t.y, s.z = t.z, s.sampleMs = a, s.seen = !0;
86
87
  }
87
88
  /** Write the extrapolated position of `key` into `out`; a no-op before the first sample. */
88
- apply(r, t, s, a) {
89
+ apply(r, t, a, s) {
89
90
  const n = this.slots[r];
90
- if (!n || !n.seen || s <= 0) return a;
91
- const o = Math.max(0, Math.min(t - n.sampleMs, s)) / 1e3;
92
- return a.x = n.x + n.vx * o, a.y = n.y + n.vy * o, a.z = n.z + n.vz * o, a;
91
+ if (!n || !n.seen || a <= 0) return s;
92
+ const o = Math.max(0, Math.min(t - n.sampleMs, a)) / 1e3;
93
+ return s.x = n.x + n.vx * o, s.y = n.y + n.vy * o, s.z = n.z + n.vz * o, s;
93
94
  }
94
95
  }
95
96
  const D = (e = 1, r = 1) => {
@@ -101,47 +102,47 @@ const D = (e = 1, r = 1) => {
101
102
  d.UnsignedByteType
102
103
  );
103
104
  return t.minFilter = d.NearestFilter, t.magFilter = d.NearestFilter, t.generateMipmaps = !1, t.flipY = !1, t.unpackAlignment = 1, t.needsUpdate = !0, t;
104
- }, le = (e, r) => {
105
+ }, ue = (e, r) => {
105
106
  const t = e.image;
106
107
  if (t.width !== r.width || t.height !== r.height) {
107
108
  e.dispose();
108
- const s = D(r.width, r.height);
109
- return s.image.data.set(r.indices), s.needsUpdate = !0, s;
109
+ const a = D(r.width, r.height);
110
+ return a.image.data.set(r.indices), a.needsUpdate = !0, a;
110
111
  }
111
112
  return t.data.set(r.indices), e.needsUpdate = !0, e;
112
- }, ze = (e) => {
113
+ }, Fe = (e) => {
113
114
  const r = g(
114
115
  () => ({ texture: D(), version: -1, mask: null }),
115
116
  []
116
117
  );
117
- return L(() => () => r.texture.dispose(), [r]), { holder: r, sync: () => (e && (r.mask !== e || r.version !== e.version) && (r.texture = le(r.texture, e), r.mask = e, r.version = e.version), r.texture) };
118
- }, ue = ({
118
+ return L(() => () => r.texture.dispose(), [r]), { holder: r, sync: () => (e && (r.mask !== e || r.version !== e.version) && (r.texture = ue(r.texture, e), r.mask = e, r.version = e.version), r.texture) };
119
+ }, de = ({
119
120
  space: e = "feed",
120
121
  mirrored: r = !1,
121
122
  maskWidth: t,
122
- maskHeight: s,
123
- feedWidth: a,
123
+ maskHeight: a,
124
+ feedWidth: s,
124
125
  feedHeight: n,
125
126
  zoom: o = 1
126
127
  }, c = new d.Matrix3()) => {
127
128
  let i = 1, u = 1;
128
129
  if (e === "source") {
129
- const m = V(
130
- { width: t, height: s },
131
- { width: a, height: n },
130
+ const v = H(
131
+ { width: t, height: a },
132
+ { width: s, height: n },
132
133
  "cover",
133
134
  o
134
135
  );
135
- m && (i = a / m.drawWidth, u = n / m.drawHeight);
136
+ v && (i = s / v.drawWidth, u = n / v.drawHeight);
136
137
  }
137
- const l = r ? -i : i, h = 0.5 - 0.5 * l, f = -u, v = 0.5 + 0.5 * u;
138
- return c.set(l, 0, h, 0, f, v, 0, 0, 1);
139
- }, de = 4, fe = `
138
+ const l = r ? -i : i, h = 0.5 - 0.5 * l, f = -u, m = 0.5 + 0.5 * u;
139
+ return c.set(l, 0, h, 0, f, m, 0, 0, 1);
140
+ }, fe = 4, he = `
140
141
  varying vec2 vUv;
141
142
  void main() {
142
143
  vUv = uv;
143
144
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
144
- }`, he = `
145
+ }`, me = `
145
146
  uniform sampler2D cameraTexture;
146
147
  uniform sampler2D maskTexture;
147
148
  uniform sampler2D designTexture;
@@ -217,30 +218,30 @@ const F = () => (M || (M = new d.DataTexture(new Uint8Array([255, 255, 255, 255]
217
218
  };
218
219
  return new d.ShaderMaterial({
219
220
  uniforms: e,
220
- vertexShader: fe,
221
- fragmentShader: he,
221
+ vertexShader: he,
222
+ fragmentShader: me,
222
223
  transparent: !0,
223
224
  depthTest: !1,
224
225
  depthWrite: !1,
225
226
  toneMapped: !1,
226
227
  side: d.DoubleSide
227
228
  });
228
- }, me = (e, r) => q(r).map((t) => e ? e.labels.indexOf(t) : -1).filter((t) => t >= 0).slice(0, de), pe = (e, r) => e && e.version > 0 ? me(e, r) : [], xe = (e, {
229
+ }, pe = (e, r) => J(r).map((t) => e ? e.labels.indexOf(t) : -1).filter((t) => t >= 0).slice(0, fe), xe = (e, r) => e && e.version > 0 ? pe(e, r) : [], ge = (e, {
229
230
  cameraTexture: r,
230
231
  maskTexture: t,
231
- mask: s,
232
- settings: a,
232
+ mask: a,
233
+ settings: s,
233
234
  designTexture: n = null,
234
235
  feedWidth: o = 0,
235
236
  feedHeight: c = 0
236
237
  }) => {
237
- const i = e.uniforms, u = pe(s, a.label);
238
- i.cameraTexture.value = r, i.maskTexture.value = t, i.designTexture.value = n ?? F(), i.useDesign.value = n ? 1 : 0, i.labels.value.set(u[0] ?? -1, u[1] ?? -1, u[2] ?? -1, u[3] ?? -1), i.labelCount.value = u.length, i.invert.value = a.invert ? 1 : 0, i.tint.value.set(a.color), i.opacity.value = a.opacity, i.blendMode.value = J.indexOf(a.blendMode), i.feather.value = a.feather;
239
- const l = (s == null ? void 0 : s.width) ?? 1, h = (s == null ? void 0 : s.height) ?? 1;
240
- return i.maskTexel.value.set(1 / l, 1 / h), ue(
238
+ const i = e.uniforms, u = xe(a, s.label);
239
+ i.cameraTexture.value = r, i.maskTexture.value = t, i.designTexture.value = n ?? F(), i.useDesign.value = n ? 1 : 0, i.labels.value.set(u[0] ?? -1, u[1] ?? -1, u[2] ?? -1, u[3] ?? -1), i.labelCount.value = u.length, i.invert.value = s.invert ? 1 : 0, i.tint.value.set(s.color), i.opacity.value = s.opacity, i.blendMode.value = Q.indexOf(s.blendMode), i.feather.value = s.feather;
240
+ const l = (a == null ? void 0 : a.width) ?? 1, h = (a == null ? void 0 : a.height) ?? 1;
241
+ return i.maskTexel.value.set(1 / l, 1 / h), de(
241
242
  {
242
- space: (s == null ? void 0 : s.space) ?? "feed",
243
- mirrored: a.mirrored,
243
+ space: (a == null ? void 0 : a.space) ?? "feed",
244
+ mirrored: s.mirrored,
244
245
  maskWidth: l,
245
246
  maskHeight: h,
246
247
  feedWidth: o,
@@ -248,118 +249,118 @@ const F = () => (M || (M = new d.DataTexture(new Uint8Array([255, 255, 255, 255]
248
249
  },
249
250
  i.maskTransform.value
250
251
  ), e;
251
- }, De = (e) => {
252
+ }, Ge = (e) => {
252
253
  const r = g(ve, []);
253
- return L(() => () => r.dispose(), [r]), xe(r, e), r;
254
- }, ge = ["bg", "face_skin", "brows", "eyes", "lips", "mouth"], Me = [
255
- { label: "face_skin", polygons: [Q] },
256
- { label: "brows", polygons: [Z, $] },
257
- { label: "eyes", polygons: [ee, te] },
258
- { label: "lips", polygons: [re] },
254
+ return L(() => () => r.dispose(), [r]), ge(r, e), r;
255
+ }, Me = ["bg", "face_skin", "brows", "eyes", "lips", "mouth"], Te = [
256
+ { label: "face_skin", polygons: [Z] },
257
+ { label: "brows", polygons: [$, ee] },
258
+ { label: "eyes", polygons: [te, re] },
259
+ { label: "lips", polygons: [se] },
259
260
  { label: "mouth", polygons: [ae] }
260
- ], Te = (e, r, { regions: t, clear: s = !0 } = {}, a = []) => {
261
- s && N(e), Me.forEach(({ label: n, polygons: o }) => {
261
+ ], ye = (e, r, { regions: t, clear: a = !0 } = {}, s = []) => {
262
+ a && N(e), Te.forEach(({ label: n, polygons: o }) => {
262
263
  if (t && !t.includes(n)) return;
263
264
  const c = e.labels.indexOf(n);
264
265
  c < 0 || o.forEach(
265
- (i) => H(e, r, i, c, a)
266
+ (i) => X(e, r, i, c, s)
266
267
  );
267
268
  });
268
269
  }, Ee = (e) => {
269
- const r = e == null ? void 0 : e.image, t = (r == null ? void 0 : r.width) ?? 0, s = (r == null ? void 0 : r.height) ?? 0;
270
- return t > 0 && s > 0 ? { width: t, height: s } : { width: 1, height: 1 };
271
- }, ye = (e, r) => {
270
+ const r = e == null ? void 0 : e.image, t = (r == null ? void 0 : r.width) ?? 0, a = (r == null ? void 0 : r.height) ?? 0;
271
+ return t > 0 && a > 0 ? { width: t, height: a } : { width: 1, height: 1 };
272
+ }, be = (e, r) => {
272
273
  const t = r / Math.max(e.width, e.height, 1);
273
274
  return {
274
275
  width: Math.max(1, Math.round(e.width * t)),
275
276
  height: Math.max(1, Math.round(e.height * t))
276
277
  };
277
- }, Fe = ({
278
+ }, ke = ({
278
279
  faceIndex: e = "all",
279
280
  regions: r,
280
281
  resolution: t = 256,
281
- maxUpdateFps: s,
282
- holdMs: a = 250,
282
+ maxUpdateFps: a,
283
+ holdMs: s = 250,
283
284
  predictMs: n = 0
284
285
  } = {}) => {
285
- const o = w(x.FACE_TRACKER), c = se(), i = Ee(c), u = ye(i, t), l = g(
286
- () => b(u.width, u.height, ge),
286
+ const o = w(x.FACE_TRACKER), c = ne(), i = Ee(c), u = be(i, t), l = g(
287
+ () => b(u.width, u.height, Me),
287
288
  [u.width, u.height]
288
- ), h = T([]), f = T(-1 / 0), v = T(null);
289
- v.current || (v.current = new K({ holdMs: a, predictMs: n }));
290
- const m = v.current;
291
- return m.setOptions({ holdMs: a, predictMs: n }), S((E) => {
289
+ ), h = T([]), f = T(-1 / 0), m = T(null);
290
+ m.current || (m.current = new q({ holdMs: s, predictMs: n }));
291
+ const v = m.current;
292
+ return v.setOptions({ holdMs: s, predictMs: n }), S((y) => {
292
293
  var _;
293
- if (z(E.clock.elapsedTime, f.current, s)) return;
294
- f.current = E.clock.elapsedTime;
295
- const R = ((_ = o == null ? void 0 : o.detectionResults) == null ? void 0 : _.faceLandmarks) ?? [], G = e === "all" ? R : [R[e] ?? []], k = m.update(G, E.clock.elapsedTime * 1e3);
294
+ if (z(y.clock.elapsedTime, f.current, a)) return;
295
+ f.current = y.clock.elapsedTime;
296
+ const R = ((_ = o == null ? void 0 : o.detectionResults) == null ? void 0 : _.faceLandmarks) ?? [], G = e === "all" ? R : [R[e] ?? []], k = v.update(G, y.clock.elapsedTime * 1e3);
296
297
  N(l), k.forEach(
297
- (P) => Te(l, P, { regions: r, clear: !1 }, h.current)
298
+ (P) => ye(l, P, { regions: r, clear: !1 }, h.current)
298
299
  ), l.version += 1;
299
300
  }), l;
300
- }, be = ["bg", "person"], Ge = ({
301
+ }, Se = ["bg", "person"], Pe = ({
301
302
  maxUpdateFps: e = 15,
302
303
  active: r = !0
303
304
  } = {}) => {
304
305
  U(x.BACKGROUND_SEGMENTATION, { type: "portrait" }, r);
305
- const t = w(x.BACKGROUND_SEGMENTATION), s = g(() => b(1, 1, be), []), a = T(-1 / 0);
306
+ const t = w(x.BACKGROUND_SEGMENTATION), a = g(() => b(1, 1, Se), []), s = T(-1 / 0);
306
307
  return S((n) => {
307
308
  var u;
308
- if (z(n.clock.elapsedTime, a.current, e)) return;
309
+ if (z(n.clock.elapsedTime, s.current, e)) return;
309
310
  const o = (u = t == null ? void 0 : t.getRawSegmentationData) == null ? void 0 : u.call(t);
310
311
  if (!(o != null && o.maskData) || o.width <= 0 || o.height <= 0) return;
311
- a.current = n.clock.elapsedTime, (s.width !== o.width || s.height !== o.height) && (s.width = o.width, s.height = o.height, s.indices = new Uint8Array(o.width * o.height));
312
- const c = o.maskData, i = s.indices;
312
+ s.current = n.clock.elapsedTime, (a.width !== o.width || a.height !== o.height) && (a.width = o.width, a.height = o.height, a.indices = new Uint8Array(o.width * o.height));
313
+ const c = o.maskData, i = a.indices;
313
314
  for (let l = 0; l < i.length; l += 1) i[l] = c[l] > 127 ? 0 : 1;
314
- s.version += 1;
315
- }), s;
316
- }, Se = ({
315
+ a.version += 1, a.timestampMs = o.timestampMs;
316
+ }), a;
317
+ }, we = ({
317
318
  active: e = !0,
318
319
  ...r
319
320
  } = {}) => {
320
- const { ready: t, error: s } = U(
321
+ const { ready: t, error: a } = U(
321
322
  x.SEMANTIC_SEGMENTATION,
322
323
  r,
323
324
  e
324
- ), a = w(x.SEMANTIC_SEGMENTATION), n = r.preset ?? "hair", o = g(
325
- () => b(1, 1, X[n].labels),
325
+ ), s = w(x.SEMANTIC_SEGMENTATION), n = r.preset ?? "hair", o = g(
326
+ () => b(1, 1, K[n].labels),
326
327
  [n]
327
328
  ), [c, i] = j({ status: "loading", error: null });
328
329
  S(() => {
329
- const f = (a == null ? void 0 : a.getStatus()) ?? "loading", v = (a == null ? void 0 : a.getError()) ?? null;
330
- (f !== c.status || v !== c.error) && i({ status: f, error: v });
330
+ const f = (s == null ? void 0 : s.getStatus()) ?? "loading", m = (s == null ? void 0 : s.getError()) ?? null;
331
+ (f !== c.status || m !== c.error) && i({ status: f, error: m });
331
332
  });
332
- const u = (a == null ? void 0 : a.getMask()) ?? o, l = s ?? c.error, h = l ? "error" : t ? c.status : "loading";
333
+ const u = (s == null ? void 0 : s.getMask()) ?? o, l = a ?? c.error, h = l ? "error" : t ? c.status : "loading";
333
334
  return { mask: u, status: h, error: l, labels: u.labels };
334
- }, ke = (e = {}) => Se({ ...e, preset: "hair" });
335
+ }, We = (e = {}) => we({ ...e, preset: "hair" });
335
336
  export {
336
- ge as F,
337
- Ue as I,
338
- de as M,
339
- be as P,
340
- he as S,
341
- ze as a,
342
- De as b,
343
- Ne as c,
344
- Fe as d,
345
- ke as e,
346
- Ge as f,
347
- Se as g,
348
- ne as h,
349
- oe as i,
350
- ie as j,
351
- O as k,
352
- A as l,
353
- fe as m,
354
- ve as n,
355
- me as o,
356
- xe as p,
357
- D as q,
358
- pe as r,
359
- le as s,
360
- ye as t,
361
- Le as u,
362
- Me as v,
363
- ue as w,
364
- Te as x
337
+ Te as F,
338
+ De as I,
339
+ fe as M,
340
+ Se as P,
341
+ me as S,
342
+ Fe as a,
343
+ Ge as b,
344
+ Ue as c,
345
+ oe as d,
346
+ ie as e,
347
+ We as f,
348
+ Pe as g,
349
+ we as h,
350
+ ce as i,
351
+ O as j,
352
+ A as k,
353
+ he as l,
354
+ ve as m,
355
+ pe as n,
356
+ ge as o,
357
+ D as p,
358
+ ue as q,
359
+ xe as r,
360
+ be as s,
361
+ de as t,
362
+ ze as u,
363
+ ye as v,
364
+ ke as w,
365
+ Me as x
365
366
  };