@vincentt-xr/sdk 2.0.0-alpha.0 → 2.0.0-alpha.2

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 (362) hide show
  1. package/GROUNDING.md +1813 -27
  2. package/dist/{DebuggerUI-CEfdddkZ.cjs → DebuggerUI-B45_Gb9d.cjs} +1 -1
  3. package/dist/{DebuggerUI-Dgop6Q6o.js → DebuggerUI-Cq28c18s.js} +1 -1
  4. package/dist/FaceMeshRenderer-6t8OsQhK.js +1195 -0
  5. package/dist/FaceMeshRenderer-lQLhYIW-.cjs +155 -0
  6. package/dist/FaceRetouch-CDrL0pXg.js +551 -0
  7. package/dist/FaceRetouch-DtNl8-4e.cjs +134 -0
  8. package/dist/audio/AudioEngine.d.ts +3 -1
  9. package/dist/audio/AudioPlayer.d.ts +29 -0
  10. package/dist/audio/AudioPlayerLogic.d.ts +4 -0
  11. package/dist/audio/index.d.ts +2 -0
  12. package/dist/components/Axes/index.d.ts +6 -0
  13. package/dist/components/FaceMesh/FaceMeshRenderer.d.ts +17 -0
  14. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +22 -1
  15. package/dist/components/FaceMesh/canonical/FaceMeshMaterial.d.ts +25 -0
  16. package/dist/components/FaceMesh/canonical/assets.d.ts +3 -0
  17. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +9 -0
  18. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +2 -0
  19. package/dist/components/FaceMesh/canonical/shaders.d.ts +2 -0
  20. package/dist/components/FaceMesh/deform.d.ts +3 -0
  21. package/dist/components/FaceMesh/index.d.ts +5 -0
  22. package/dist/components/FaceMesh/material/defaults.d.ts +74 -0
  23. package/dist/components/FaceMesh/material/index.d.ts +1 -0
  24. package/dist/components/FaceMesh/material/options.d.ts +5 -1
  25. package/dist/components/FaceMesh/material/support.d.ts +7 -2
  26. package/dist/components/FaceMesh/material/textures.d.ts +4 -0
  27. package/dist/components/FaceMesh/material/types.d.ts +4 -2
  28. package/dist/components/FaceRetouch/Background.d.ts +9 -5
  29. package/dist/components/FaceRetouch/FaceRetouch.d.ts +47 -0
  30. package/dist/components/FaceRetouch/index.d.ts +2 -6
  31. package/dist/components/FaceRetouch/landmarkMask.d.ts +4 -6
  32. package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +4 -7
  33. package/dist/components/FaceTracker/index.d.ts +5 -3
  34. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +15 -0
  35. package/dist/components/FaceWarp3D/defaults.d.ts +37 -0
  36. package/dist/components/FaceWarp3D/index.d.ts +3 -0
  37. package/dist/components/FaceWarp3D/warp.d.ts +13 -0
  38. package/dist/components/HandJoints2D/index.d.ts +6 -0
  39. package/dist/components/HandTracker/index.d.ts +2 -2
  40. package/dist/components/HandTracking2D/HandVisual.d.ts +12 -0
  41. package/dist/components/HandTracking2D/index.d.ts +5 -0
  42. package/dist/components/HandTracking2DController/index.d.ts +5 -0
  43. package/dist/components/HandTracking3D/index.d.ts +6 -0
  44. package/dist/components/LightObject/index.d.ts +20 -0
  45. package/dist/components/LookAt/index.d.ts +23 -0
  46. package/dist/components/MeshRenderer/index.d.ts +58 -0
  47. package/dist/components/PerspectiveCamera/index.d.ts +2 -8
  48. package/dist/components/PinToMesh/index.d.ts +47 -0
  49. package/dist/components/RenderGroupLayer/index.d.ts +6 -0
  50. package/dist/components/SceneObjectRenderer/index.d.ts +16 -0
  51. package/dist/components/Screen2D/ScreenTransformFrame.d.ts +11 -0
  52. package/dist/components/Screen2D/ScreenTransformHelpers.d.ts +19 -0
  53. package/dist/components/Screen2D/ScreenTransformInteraction.d.ts +18 -0
  54. package/dist/components/Screen2D/index.d.ts +5 -0
  55. package/dist/components/ScreenGlass/defaults.d.ts +3 -0
  56. package/dist/components/ScreenGlass/index.d.ts +5 -0
  57. package/dist/components/ScreenGlass/shaders.d.ts +2 -0
  58. package/dist/components/ScreenGlass/types.d.ts +10 -0
  59. package/dist/components/ScreenGradient/defaults.d.ts +5 -0
  60. package/dist/components/ScreenGradient/index.d.ts +5 -0
  61. package/dist/components/ScreenGradient/shaders.d.ts +2 -0
  62. package/dist/components/ScreenGradient/types.d.ts +19 -0
  63. package/dist/components/ScreenImage/ScreenImage.d.ts +4 -0
  64. package/dist/components/ScreenImage/components/DynamicTextureSync.d.ts +9 -0
  65. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +9 -0
  66. package/dist/components/ScreenImage/components/ScreenImageFrame.d.ts +9 -0
  67. package/dist/components/ScreenImage/components/ScreenImageTransformFrame.d.ts +9 -0
  68. package/dist/components/ScreenImage/fit.d.ts +52 -0
  69. package/dist/components/ScreenImage/index.d.ts +8 -0
  70. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +9 -0
  71. package/dist/components/ScreenImage/materials/ScreenImageMatcap.d.ts +3 -0
  72. package/dist/components/ScreenImage/source.d.ts +16 -0
  73. package/dist/components/ScreenImage/types.d.ts +37 -0
  74. package/dist/components/ScreenImage/utils/ScreenImageConstants.d.ts +9 -0
  75. package/dist/components/ScreenImage/utils/ScreenImageHelpers.d.ts +4 -0
  76. package/dist/components/ScreenShape/geometry.d.ts +5 -0
  77. package/dist/components/ScreenShape/index.d.ts +5 -0
  78. package/dist/components/ScreenShape/types.d.ts +41 -0
  79. package/dist/components/ScreenSpaceUI/ScreenTransformGuide.d.ts +15 -0
  80. package/dist/components/ScreenSpaceUI/ScreenTransformOverlayGuide.d.ts +9 -0
  81. package/dist/components/ScreenSpaceUI/index.d.ts +2 -0
  82. package/dist/components/ScreenText/components/ScreenTextBody.d.ts +2 -0
  83. package/dist/components/ScreenText/components/ScreenTextTransformFrame.d.ts +9 -0
  84. package/dist/components/ScreenText/constants.d.ts +5 -0
  85. package/dist/components/ScreenText/index.d.ts +6 -0
  86. package/dist/components/ScreenText/types.d.ts +31 -0
  87. package/dist/components/ScreenText/utils/ScreenTextHelpers.d.ts +14 -0
  88. package/dist/components/ScreenText/utils/ScreenTextMappings.d.ts +17 -0
  89. package/dist/components/SequentialRenderPasses/index.d.ts +6 -0
  90. package/dist/components/TextLabel/TextLabel.d.ts +5 -0
  91. package/dist/components/TextLabel/alignment.d.ts +4 -0
  92. package/dist/components/TextLabel/bend.d.ts +9 -0
  93. package/dist/components/TextLabel/canvas/buildTextLabelTexture.d.ts +4 -0
  94. package/dist/components/TextLabel/canvas/canvasTypography.d.ts +13 -0
  95. package/dist/components/TextLabel/canvas/drawBackground.d.ts +21 -0
  96. package/dist/components/TextLabel/canvas/drawEffects.d.ts +34 -0
  97. package/dist/components/TextLabel/canvas/drawText.d.ts +19 -0
  98. package/dist/components/TextLabel/components/TextLabelMesh.d.ts +13 -0
  99. package/dist/components/TextLabel/constants.d.ts +2 -0
  100. package/dist/components/TextLabel/hooks/useTextLabelTexture.d.ts +7 -0
  101. package/dist/components/TextLabel/index.d.ts +2 -62
  102. package/dist/components/TextLabel/layout/measurement.d.ts +8 -0
  103. package/dist/components/TextLabel/layout/resolveTextLayout.d.ts +25 -0
  104. package/dist/components/TextLabel/layout/wrapText.d.ts +6 -0
  105. package/dist/components/TextLabel/types.d.ts +227 -0
  106. package/dist/components/TrackingAnchor/index.d.ts +18 -2
  107. package/dist/components/Transform3D/index.d.ts +30 -0
  108. package/dist/components/XRMediaSurface/index.d.ts +6 -6
  109. package/dist/components/XRScene/index.d.ts +14 -3
  110. package/dist/components/XRViewport/XRViewport.d.ts +11 -0
  111. package/dist/components/XRViewport/components/HiddenMedia.d.ts +7 -0
  112. package/dist/components/XRViewport/components/MediaAssetPicker.d.ts +8 -0
  113. package/dist/components/XRViewport/components/MediaControlStack.d.ts +13 -0
  114. package/dist/components/XRViewport/components/XRViewportLayers.d.ts +30 -0
  115. package/dist/components/XRViewport/constants.d.ts +24 -0
  116. package/dist/components/XRViewport/contexts.d.ts +6 -0
  117. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +13 -0
  118. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +16 -0
  119. package/dist/components/XRViewport/hooks/useViewportMediaTexture.d.ts +10 -0
  120. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +41 -0
  121. package/dist/components/XRViewport/hooks/useViewportRenderState.d.ts +47 -0
  122. package/dist/components/XRViewport/index.d.ts +3 -101
  123. package/dist/components/XRViewport/layout.d.ts +16 -0
  124. package/dist/components/XRViewport/slots.d.ts +16 -0
  125. package/dist/components/XRViewport/types.d.ts +89 -0
  126. package/dist/components/XRViewport/useViewportSize.d.ts +3 -0
  127. package/dist/components/index.d.ts +19 -0
  128. package/dist/contexts-BKvTIayr.cjs +1 -0
  129. package/dist/contexts-Bk5zz_VR.js +214 -0
  130. package/dist/debug-ui/component-editor/index.d.ts +19 -0
  131. package/dist/debug-ui/default-setting/index.d.ts +37 -0
  132. package/dist/debug-ui/default-setting.cjs +21 -0
  133. package/dist/debug-ui/default-setting.js +777 -0
  134. package/dist/debug-ui/face-mesh-renderer-settings/index.d.ts +8 -0
  135. package/dist/debug-ui/face-retouch/index.d.ts +11 -0
  136. package/dist/debug-ui/face-warp-3d/index.d.ts +6 -0
  137. package/dist/debug-ui/hand-joints-2d/index.d.ts +6 -0
  138. package/dist/debug-ui/hand-tracking-2d/index.d.ts +6 -0
  139. package/dist/debug-ui/hand-tracking-2d-controller/index.d.ts +6 -0
  140. package/dist/debug-ui/hand-tracking-3d/index.d.ts +6 -0
  141. package/dist/debug-ui/hierarchy-panel/index.d.ts +29 -0
  142. package/dist/debug-ui/index.d.ts +46 -0
  143. package/dist/debug-ui/layer-panel/index.d.ts +18 -0
  144. package/dist/debug-ui/media-source/MediaSourceSwitcher.d.ts +10 -0
  145. package/dist/debug-ui/media-source/index.d.ts +6 -0
  146. package/dist/debug-ui/media-source/media-preset.d.ts +9 -0
  147. package/dist/debug-ui/media-source/session.d.ts +12 -0
  148. package/dist/debug-ui/media-source.cjs +1 -0
  149. package/dist/debug-ui/media-source.js +9 -0
  150. package/dist/debug-ui/mesh-renderer-settings/index.d.ts +6 -0
  151. package/dist/debug-ui/object-inspector-panel/index.d.ts +25 -0
  152. package/dist/debug-ui/pin-to-mesh-settings/index.d.ts +10 -0
  153. package/dist/debug-ui/scene-editor/context.d.ts +38 -0
  154. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +9 -0
  155. package/dist/debug-ui/scene-editor/index.d.ts +11 -0
  156. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +7 -0
  157. package/dist/debug-ui/scene-editor/store-utils.d.ts +2 -0
  158. package/dist/debug-ui/scene-editor/viewport-toolbar.d.ts +4 -0
  159. package/dist/debug-ui/scene-editor/viewport.d.ts +21 -0
  160. package/dist/debug-ui/screen-glass-settings/index.d.ts +6 -0
  161. package/dist/debug-ui/screen-gradient-settings/GradientStopsEditor.d.ts +5 -0
  162. package/dist/debug-ui/screen-gradient-settings/index.d.ts +6 -0
  163. package/dist/debug-ui/screen-gradient-settings/styles.d.ts +3 -0
  164. package/dist/debug-ui/screen-image-settings/index.d.ts +9 -0
  165. package/dist/debug-ui/screen-shape-settings/index.d.ts +6 -0
  166. package/dist/debug-ui/screen-text-settings/NumberField.d.ts +9 -0
  167. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +3 -0
  168. package/dist/debug-ui/screen-text-settings/controls/NestedSection.d.ts +7 -0
  169. package/dist/debug-ui/screen-text-settings/controls/Section.d.ts +8 -0
  170. package/dist/debug-ui/screen-text-settings/controls/icons.d.ts +4 -0
  171. package/dist/debug-ui/screen-text-settings/index.d.ts +2 -0
  172. package/dist/debug-ui/screen-text-settings/sections/BackgroundSection.d.ts +8 -0
  173. package/dist/debug-ui/screen-text-settings/sections/ContentSection.d.ts +5 -0
  174. package/dist/debug-ui/screen-text-settings/sections/EffectsSection.d.ts +25 -0
  175. package/dist/debug-ui/screen-text-settings/sections/StyleSection.d.ts +5 -0
  176. package/dist/debug-ui/screen-text-settings/sections/TransformSection.d.ts +5 -0
  177. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundFillControls.d.ts +2 -0
  178. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundSizeControls.d.ts +2 -0
  179. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundStrokeControls.d.ts +2 -0
  180. package/dist/debug-ui/screen-text-settings/sections/background/types.d.ts +7 -0
  181. package/dist/debug-ui/screen-text-settings/sections/effects/BendEffectSection.d.ts +4 -0
  182. package/dist/debug-ui/screen-text-settings/sections/effects/EffectChrome.d.ts +21 -0
  183. package/dist/debug-ui/screen-text-settings/sections/effects/GlowEffectSection.d.ts +4 -0
  184. package/dist/debug-ui/screen-text-settings/sections/effects/InnerShadowEffectSection.d.ts +4 -0
  185. package/dist/debug-ui/screen-text-settings/sections/effects/OutlineEffectSection.d.ts +4 -0
  186. package/dist/debug-ui/screen-text-settings/sections/effects/ShadowEffectSection.d.ts +4 -0
  187. package/dist/debug-ui/screen-text-settings/sections/effects/types.d.ts +14 -0
  188. package/dist/debug-ui/screen-text-settings/settings.d.ts +90 -0
  189. package/dist/debug-ui/screen-text-settings/styles.d.ts +26 -0
  190. package/dist/debug-ui/screen-text-settings/transform.d.ts +6 -0
  191. package/dist/debug-ui/screen-text-settings/types.d.ts +9 -0
  192. package/dist/debug-ui/settings-panel/index.d.ts +38 -0
  193. package/dist/debug-ui/shared/MaterialSection.d.ts +13 -0
  194. package/dist/debug-ui/shared/ScreenTransformSection.d.ts +32 -0
  195. package/dist/debug-ui/transform-3d-settings/index.d.ts +11 -0
  196. package/dist/debug-ui.cjs +10 -0
  197. package/dist/debug-ui.js +8861 -0
  198. package/dist/drawNormalizedCrop-B-7zU-Xw.cjs +1 -0
  199. package/dist/drawNormalizedCrop-CRdIDyl1.js +44 -0
  200. package/dist/entries/all.d.ts +1 -0
  201. package/dist/entries/core.d.ts +55 -4
  202. package/dist/entries/face-effects.d.ts +12 -8
  203. package/dist/entries/internal.d.ts +1 -1
  204. package/dist/entries/low-level.d.ts +21 -4
  205. package/dist/entries/scene-object.d.ts +10 -0
  206. package/dist/entries/tracking.d.ts +25 -2
  207. package/dist/face-action/index.d.ts +34 -0
  208. package/dist/face-attribute-expression/index.d.ts +10 -0
  209. package/dist/face-effects.cjs +1 -252
  210. package/dist/face-effects.js +1404 -2613
  211. package/dist/face-info/blendshapes.d.ts +3 -0
  212. package/dist/face-info/derive.d.ts +8 -0
  213. package/dist/face-info/drawFaceCrop.d.ts +10 -0
  214. package/dist/face-info/getFaceInfo.d.ts +8 -0
  215. package/dist/face-info/index.d.ts +8 -0
  216. package/dist/face-info/landmarks.d.ts +21 -0
  217. package/dist/face-info/types.d.ts +52 -0
  218. package/dist/getFaceInfo-CyPAKh3h.cjs +1 -0
  219. package/dist/getFaceInfo-hUKMLFcr.js +118 -0
  220. package/dist/hand/handJoints2d.d.ts +49 -0
  221. package/dist/hand/handTracking2d.d.ts +33 -0
  222. package/dist/hand/handTracking2dController.d.ts +65 -0
  223. package/dist/hand/handTracking3d.d.ts +52 -0
  224. package/dist/hooks/faceResults.d.ts +1 -1
  225. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  226. package/dist/hooks/useFaceAction.d.ts +3 -0
  227. package/dist/hooks/useFaceAttributeExpression.d.ts +16 -0
  228. package/dist/hooks/useFaceDetection.d.ts +18 -0
  229. package/dist/hooks/useFaceInfo.d.ts +7 -0
  230. package/dist/hooks/useFaceInfos.d.ts +15 -0
  231. package/dist/hooks/useFaceResultReader.d.ts +10 -0
  232. package/dist/hooks/useFrameCapture.d.ts +18 -0
  233. package/dist/hooks/useMediaRecorder.d.ts +14 -2
  234. package/dist/hooks/useOwnedTexture.d.ts +6 -0
  235. package/dist/hooks/useTrackerContext.d.ts +2 -2
  236. package/dist/hooks/useXRSession/facade.d.ts +3 -0
  237. package/dist/hooks/useXRSession/registry.d.ts +9 -0
  238. package/dist/index-82aENaRq.cjs +1 -0
  239. package/dist/{index-BD-JWMjE.js → index-BgQAX8rs.js} +198 -134
  240. package/dist/index-CEc1CAmB.cjs +1 -0
  241. package/dist/index-CTHeBQOs.js +178 -0
  242. package/dist/index-D4bLzBr6.cjs +1 -0
  243. package/dist/index-DSpzjuqd.cjs +1 -0
  244. package/dist/index-Di70KWuY.js +2049 -0
  245. package/dist/index-DzEzkBIH.cjs +17 -0
  246. package/dist/{index-CYMj26Ej.js → index-JygePOwo.js} +565 -498
  247. package/dist/index-UC0Ux38E.js +111 -0
  248. package/dist/{internal-KOKJDxCG.js → internal-DuMPpcbp.js} +86 -80
  249. package/dist/internal-i2JkM85N.cjs +1 -0
  250. package/dist/internal.cjs +1 -1
  251. package/dist/internal.js +2 -2
  252. package/dist/low-level.cjs +1 -1
  253. package/dist/low-level.js +959 -632
  254. package/dist/main.cjs +1 -1
  255. package/dist/main.js +556 -455
  256. package/dist/material/MaterialFill.d.ts +20 -0
  257. package/dist/material/MeshMaterial.d.ts +14 -0
  258. package/dist/material/index.d.ts +2 -0
  259. package/dist/models/Body/index.d.ts +1 -1
  260. package/dist/models/Face/index.d.ts +1 -0
  261. package/dist/models/Face/rotation.d.ts +3 -0
  262. package/dist/models/Hand/HandTracking.d.ts +2 -0
  263. package/dist/render/layerStack.d.ts +29 -0
  264. package/dist/render/renderGroups.d.ts +47 -0
  265. package/dist/render/renderPasses.d.ts +18 -0
  266. package/dist/renderGroups-C9QJrAXu.js +152 -0
  267. package/dist/renderGroups-Dvm1J4lW.cjs +1 -0
  268. package/dist/renderLayers-lDtL0_43.cjs +1 -0
  269. package/dist/renderLayers-zrK2pv5O.js +13 -0
  270. package/dist/renderPasses-CT5iBwtg.cjs +21 -0
  271. package/dist/renderPasses-CjgG_6kQ.js +1500 -0
  272. package/dist/scene-object/index.d.ts +146 -0
  273. package/dist/scene-object/runtimeRegistry.d.ts +14 -0
  274. package/dist/scene-object.cjs +1 -0
  275. package/dist/scene-object.js +40 -0
  276. package/dist/screen-image/screenImagePresets.d.ts +13 -0
  277. package/dist/screen-image/screenImageSettings.d.ts +57 -0
  278. package/dist/screen-text/screenTextPresets.d.ts +6 -0
  279. package/dist/screen-text/screenTextSettings.d.ts +147 -0
  280. package/dist/screen2d/coordinates.d.ts +87 -0
  281. package/dist/screen2d/index.d.ts +7 -0
  282. package/dist/screen2d/material-runtime.d.ts +32 -0
  283. package/dist/screen2d/screenTransform.d.ts +47 -0
  284. package/dist/screen2d/smoothing.d.ts +5 -0
  285. package/dist/screen2d/texture.d.ts +10 -0
  286. package/dist/screen2d/transform.d.ts +25 -0
  287. package/dist/screen2d/types.d.ts +90 -0
  288. package/dist/{selectors-Bub0o3qy.cjs → selectors-2QvO5RYY.cjs} +1 -1
  289. package/dist/{selectors-BHO6TnoC.js → selectors-Dw3C-gSk.js} +5 -5
  290. package/dist/services/MetricsCollector/index.d.ts +7 -1
  291. package/dist/services/MetricsCollector/utils.d.ts +1 -1
  292. package/dist/session-BChR4TgK.cjs +31 -0
  293. package/dist/session-C1StwN0f.js +363 -0
  294. package/dist/texture/animatedTexture.d.ts +61 -0
  295. package/dist/texture/animationMath.d.ts +8 -0
  296. package/dist/texture/sourceResolver.d.ts +30 -0
  297. package/dist/tracking.cjs +1 -1
  298. package/dist/tracking.js +582 -298
  299. package/dist/types/face.d.ts +1 -13
  300. package/dist/types/hand-tracking.d.ts +8 -0
  301. package/dist/types/index.d.ts +0 -1
  302. package/dist/types/nodes.d.ts +4 -1
  303. package/dist/types/session.d.ts +2 -0
  304. package/dist/types/tracking.d.ts +8 -2
  305. package/dist/types/util-types.d.ts +1 -1
  306. package/dist/useFaceInfo-C-WfMlYp.cjs +1 -0
  307. package/dist/useFaceInfo-CwsHZedC.js +62 -0
  308. package/dist/useFaceResults-CkFc1egZ.js +19 -0
  309. package/dist/useFaceResults-VcFdOUFV.cjs +1 -0
  310. package/dist/utils/drawNormalizedCrop.d.ts +22 -0
  311. package/dist/utils/integrity.d.ts +4 -25
  312. package/dist/utils/landmarkBounds.d.ts +1 -1
  313. package/dist/utils/logger.d.ts +2 -2
  314. package/dist/x-Co8jPhP0.js +127 -0
  315. package/dist/x-KC8E4Gaj.cjs +41 -0
  316. package/docs/MIGRATION_GUIDE.md +589 -0
  317. package/docs/SDK_DOCUMENTATION.md +1155 -0
  318. package/docs/api/audio.mdx +36 -0
  319. package/docs/api/behavior-components.mdx +164 -0
  320. package/docs/api/capture-recording.mdx +103 -0
  321. package/docs/api/debug-ui-scene-editor.mdx +249 -0
  322. package/docs/api/face-actions.mdx +104 -0
  323. package/docs/api/face-attribute-expression.mdx +87 -0
  324. package/docs/api/face-binding-anchors.mdx +53 -0
  325. package/docs/api/face-effects.mdx +19 -0
  326. package/docs/api/face-info.mdx +112 -0
  327. package/docs/api/face-mesh.mdx +98 -0
  328. package/docs/api/face-painting.mdx +33 -0
  329. package/docs/api/face-retouching.mdx +73 -0
  330. package/docs/api/material-render-state.mdx +132 -0
  331. package/docs/api/runtime-3d.mdx +311 -0
  332. package/docs/api/scene-object-store.mdx +213 -0
  333. package/docs/api/screen-image.mdx +41 -0
  334. package/docs/api/screen-shape.mdx +64 -0
  335. package/docs/api/screen-space-coordinates.mdx +41 -0
  336. package/docs/api/screen-text.mdx +39 -0
  337. package/docs/api/texture-sources.mdx +55 -0
  338. package/docs/api/trackers.mdx +46 -0
  339. package/docs/docs.json +70 -0
  340. package/docs/examples/scene-object-recipes.mdx +194 -0
  341. package/docs/guides/harness-debug-ui.mdx +139 -0
  342. package/docs/inspector/hierarchy-panel.mdx +51 -0
  343. package/docs/inspector/object-inspector-panel.mdx +51 -0
  344. package/docs/introduction.mdx +121 -0
  345. package/docs/scene-objects/overview.mdx +127 -0
  346. package/docs/scene-objects/render-groups.mdx +77 -0
  347. package/docs/scene-objects/runtime-rendering.mdx +75 -0
  348. package/docs/texture-api-consumer.md +58 -0
  349. package/package.json +55 -7
  350. package/dist/components/FaceRetouch/retouchRegions.d.ts +0 -23
  351. package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +0 -12
  352. package/dist/index-B5J4gzn2.cjs +0 -1
  353. package/dist/index-BVBVg96G.cjs +0 -1
  354. package/dist/index-DtwHElmG.js +0 -157
  355. package/dist/index-PtFmD6B8.cjs +0 -1
  356. package/dist/internal-DH5d1Xnq.cjs +0 -1
  357. package/dist/modules/XRClient/index.d.ts +0 -9
  358. package/dist/modules/index.d.ts +0 -1
  359. package/dist/services/ApiService.d.ts +0 -12
  360. package/dist/types/client.d.ts +0 -3
  361. package/dist/useFaceResults-cpsSmKKc.js +0 -81
  362. package/dist/useFaceResults-hVUJYSEY.cjs +0 -1
@@ -0,0 +1,111 @@
1
+ import { jsx as w } from "react/jsx-runtime";
2
+ import { useFrame as A } from "@react-three/fiber";
3
+ import { useRef as y, useEffect as k } from "react";
4
+ import * as p from "three";
5
+ import { R as H } from "./renderLayers-zrK2pv5O.js";
6
+ import { a as v } from "./index-BgQAX8rs.js";
7
+ const O = [
8
+ "face.center",
9
+ "face.forehead",
10
+ "face.noseTip",
11
+ "face.chin",
12
+ "face.leftEyeOuter",
13
+ "face.rightEyeOuter",
14
+ "face.leftCheek",
15
+ "face.rightCheek",
16
+ "face.mouthCenter",
17
+ "face.leftEye",
18
+ "face.rightEye",
19
+ "face.leftEarlobe",
20
+ "face.rightEarlobe",
21
+ "face.custom"
22
+ ], N = [
23
+ "hand.wrist",
24
+ "hand.thumbTip",
25
+ "hand.indexTip",
26
+ "hand.middleTip",
27
+ "hand.ringTip",
28
+ "hand.pinkyTip",
29
+ "hand.indexBase",
30
+ "hand.middleBase",
31
+ "hand.ringBase",
32
+ "hand.pinkyBase"
33
+ ], P = [
34
+ "body.head",
35
+ "body.neck",
36
+ "body.leftShoulder",
37
+ "body.rightShoulder",
38
+ "body.leftElbow",
39
+ "body.rightElbow",
40
+ "body.leftWrist",
41
+ "body.rightWrist",
42
+ "body.leftHip",
43
+ "body.rightHip",
44
+ "body.leftKnee",
45
+ "body.rightKnee",
46
+ "body.leftAnkle",
47
+ "body.rightAnkle"
48
+ ], z = (e) => e.startsWith("face.") ? "face" : e.startsWith("hand.") ? "hand" : e.startsWith("body.") ? "body" : null, q = {
49
+ target: "face.center",
50
+ customAnchorPoint: { x: 0, y: 0, z: 0 },
51
+ offset: { x: 0, y: 0, z: 0 },
52
+ smoothing: 0,
53
+ followFaceRoll: !1
54
+ }, m = (e, r, n) => r + n * (e - r), E = (e, r) => 1 / (1 + 1 / (2 * Math.PI * e) / r), B = (e, r, n, i, T, o) => {
55
+ if (!e.initialized || n <= 0)
56
+ return e.pos.copy(r), e.prevRaw.copy(r), e.dxHat.set(0, 0, 0), e.initialized = !0, e;
57
+ const a = E(o, n), l = ["x", "y", "z"];
58
+ for (const t of l) {
59
+ const f = (r[t] - e.prevRaw[t]) / n, c = m(f, e.dxHat[t], a);
60
+ e.dxHat[t] = c;
61
+ const u = i + T * Math.abs(c), d = E(u, n);
62
+ e.pos[t] = m(r[t], e.pos[t], d), e.prevRaw[t] = r[t];
63
+ }
64
+ return e;
65
+ }, D = (e, r, n, i) => B(e, r, n, i * 0.1, 0.5, 1), G = ({
66
+ target: e,
67
+ customAnchorPoint: r,
68
+ offset: n,
69
+ smoothing: i = 0,
70
+ children: T
71
+ }) => {
72
+ const o = v(), a = y(null), l = y(!1), t = y(new p.Vector3()), f = y({
73
+ pos: new p.Vector3(),
74
+ prevRaw: new p.Vector3(),
75
+ dxHat: new p.Vector3(),
76
+ initialized: !1
77
+ }), c = z(e), u = o !== null && c !== null && o.type !== c, d = o === null, b = d || u || c === null;
78
+ return k(() => {
79
+ d ? console.warn(
80
+ `[TrackingAnchor] target "${e}" requires a FaceTracker / HandTracker / BodyTracker ancestor; rendering null.`
81
+ ) : u ? console.warn(
82
+ `[TrackingAnchor] target "${e}" namespace does not match parent tracker type "${o == null ? void 0 : o.type}"; rendering null.`
83
+ ) : c === null && console.warn(
84
+ `[TrackingAnchor] target "${e}" is not a recognized face/hand/body landmark; rendering null.`
85
+ );
86
+ }, [e, c, d, u, o == null ? void 0 : o.type]), A((F, R) => {
87
+ if (b || !a.current || !o) return;
88
+ const h = o.resolveLandmark(e, r);
89
+ if (!h) {
90
+ a.current.visible = !1, l.current = !1, f.current.initialized = !1;
91
+ return;
92
+ }
93
+ a.current.visible = !0;
94
+ const s = t.current.copy(h.position), g = a.current.parent;
95
+ if (g) {
96
+ g.updateMatrixWorld();
97
+ const x = new p.Matrix4().copy(g.matrixWorld).invert();
98
+ s.applyMatrix4(x);
99
+ }
100
+ n && (s.x += n[0], s.y += n[1], s.z += n[2]), i > 0 ? (D(f.current, s, l.current ? R : 0, i), a.current.position.copy(f.current.pos)) : a.current.position.copy(s), l.current = !0, h.quaternion && a.current.quaternion.copy(h.quaternion);
101
+ }), b ? null : /* @__PURE__ */ w("group", { ref: a, renderOrder: H.TRACKED, children: T });
102
+ };
103
+ export {
104
+ P as B,
105
+ q as D,
106
+ O as F,
107
+ N as H,
108
+ G as T,
109
+ z as g,
110
+ D as s
111
+ };
@@ -1,19 +1,20 @@
1
- var B = Object.defineProperty;
2
- var K = (t, e, r) => e in t ? B(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
- var s = (t, e, r) => K(t, typeof e != "symbol" ? e + "" : e, r);
4
- import { jsx as f, jsxs as y } from "react/jsx-runtime";
5
- import O, { useState as p, useRef as g, useEffect as v, useCallback as T, createContext as W, Suspense as X, lazy as V } from "react";
6
- import { b as q } from "./selectors-BHO6TnoC.js";
7
- import { u as J } from "./index-CYMj26Ej.js";
8
- import { useFrame as G } from "@react-three/fiber";
1
+ var K = Object.defineProperty;
2
+ var O = (t, e, r) => e in t ? K(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var s = (t, e, r) => O(t, typeof e != "symbol" ? e + "" : e, r);
4
+ import { jsx as f, jsxs as w } from "react/jsx-runtime";
5
+ import W, { useState as b, useRef as h, useEffect as T, useCallback as y, createContext as X, Suspense as V, lazy as q } from "react";
6
+ import { u as J } from "./selectors-Dw3C-gSk.js";
7
+ import { u as G } from "./index-JygePOwo.js";
8
+ import { useFrame as Q } from "@react-three/fiber";
9
9
  import "./hasFullUnitUVBounds-BGvcFsQM.js";
10
- const fe = ({
10
+ import "./renderLayers-zrK2pv5O.js";
11
+ const pe = ({
11
12
  children: t,
12
13
  defaultCollapsed: e = !0,
13
14
  title: r,
14
15
  width: i = 320
15
16
  }) => {
16
- const [n, o] = p(e);
17
+ const [n, o] = b(e);
17
18
  return n ? /* @__PURE__ */ f(
18
19
  "button",
19
20
  {
@@ -39,7 +40,7 @@ const fe = ({
39
40
  },
40
41
  children: "◫"
41
42
  }
42
- ) : /* @__PURE__ */ y(
43
+ ) : /* @__PURE__ */ w(
43
44
  "div",
44
45
  {
45
46
  style: {
@@ -59,7 +60,7 @@ const fe = ({
59
60
  color: "#e5eefb"
60
61
  },
61
62
  children: [
62
- /* @__PURE__ */ y(
63
+ /* @__PURE__ */ w(
63
64
  "div",
64
65
  {
65
66
  style: {
@@ -99,7 +100,7 @@ const fe = ({
99
100
  }
100
101
  );
101
102
  };
102
- class Q {
103
+ class Y {
103
104
  // 500ms as per PRD
104
105
  constructor() {
105
106
  s(this, "frameTimestamps", []);
@@ -131,16 +132,16 @@ class Q {
131
132
  this.frameTimestamps = [], this.lastUpdateTime = performance.now(), this.currentFPS = 0;
132
133
  }
133
134
  }
134
- function he(t, e = 1) {
135
+ function ge(t, e = 1) {
135
136
  return t.toFixed(e);
136
137
  }
137
138
  function _(t) {
138
139
  return t / (1024 * 1024);
139
140
  }
140
- function Y(t, e) {
141
+ function Z(t, e) {
141
142
  return e === 0 ? 0 : t / e * 100;
142
143
  }
143
- class Z {
144
+ class ee {
144
145
  constructor(e = 1e3) {
145
146
  s(this, "intervalId", null);
146
147
  s(this, "memoryUsage", null);
@@ -188,7 +189,7 @@ class Z {
188
189
  this.memoryUsage = {
189
190
  used: _(r),
190
191
  total: _(i),
191
- percentage: Y(r, i)
192
+ percentage: Z(r, i)
192
193
  };
193
194
  }
194
195
  /**
@@ -205,7 +206,7 @@ class Z {
205
206
  return this.isSupported;
206
207
  }
207
208
  }
208
- class ee {
209
+ class te {
209
210
  constructor() {
210
211
  s(this, "resolution", "N/A");
211
212
  s(this, "videoElement", null);
@@ -247,7 +248,7 @@ class ee {
247
248
  return this.videoElement && this.updateResolution(), this.resolution;
248
249
  }
249
250
  }
250
- class te {
251
+ class re {
251
252
  constructor(e = {}) {
252
253
  s(this, "options");
253
254
  s(this, "isRunning", !1);
@@ -271,7 +272,7 @@ class te {
271
272
  this.options = {
272
273
  enableMemoryTracking: e.enableMemoryTracking ?? !0,
273
274
  memoryUpdateInterval: e.memoryUpdateInterval ?? 1e3
274
- }, this.cameraFPSTracker = new Q(), this.memoryTracker = new Z(this.options.memoryUpdateInterval), this.resolutionTracker = new ee();
275
+ }, this.cameraFPSTracker = new Y(), this.memoryTracker = new ee(this.options.memoryUpdateInterval), this.resolutionTracker = new te();
275
276
  }
276
277
  /**
277
278
  * Start collecting metrics
@@ -282,13 +283,13 @@ class te {
282
283
  console.warn("[MetricsCollector] Already running");
283
284
  return;
284
285
  }
285
- this.isRunning = !0, this.lastEffectiveFPSUpdate = performance.now(), this.options.enableMemoryTracking && this.memoryTracker.start(), e && this.resolutionTracker.start(e), this.setupCameraFPSHook(), console.log("[MetricsCollector] Started");
286
+ this.isRunning = !0, this.lastEffectiveFPSUpdate = performance.now(), this.options.enableMemoryTracking && this.memoryTracker.start(), e && this.resolutionTracker.start(e), this.setupCameraFPSHook(), console.info("[MetricsCollector] Started");
286
287
  }
287
288
  /**
288
289
  * Stop collecting metrics and clean up
289
290
  */
290
291
  stop() {
291
- this.isRunning && (this.isRunning = !1, this.memoryTracker.stop(), this.resolutionTracker.stop(), this.cameraFPSTracker.reset(), this.cleanupCameraFPSHook(), console.log("[MetricsCollector] Stopped"));
292
+ this.isRunning && (this.isRunning = !1, this.memoryTracker.stop(), this.resolutionTracker.stop(), this.cameraFPSTracker.reset(), this.cleanupCameraFPSHook(), console.info("[MetricsCollector] Stopped"));
292
293
  }
293
294
  /**
294
295
  * Setup global hook for camera FPS tracking
@@ -348,7 +349,7 @@ class te {
348
349
  name: a.name,
349
350
  processingTime: a.processingTime || 0
350
351
  }));
351
- const o = n.reduce((a, h) => a + (h.processingTime || 0), 0);
352
+ const o = n.reduce((a, p) => a + (p.processingTime || 0), 0);
352
353
  this.metrics.detectionTime = o, this.updateEffectiveFPS();
353
354
  } catch (r) {
354
355
  console.warn("[MetricsCollector] Error updating detection time:", r), this.metrics.detectionTime = 0, this.metrics.modelPerformance = [];
@@ -375,14 +376,14 @@ class te {
375
376
  return this.isRunning;
376
377
  }
377
378
  }
378
- const re = V(async () => ({ default: (await import("./DebuggerUI-Dgop6Q6o.js")).DebuggerUI })), F = W(null);
379
- function pe({
379
+ const ie = q(async () => ({ default: (await import("./DebuggerUI-Cq28c18s.js")).DebuggerUI })), C = X(null);
380
+ function be({
380
381
  children: t,
381
382
  keyboardShortcut: e = "ctrl+shift+d",
382
383
  initialEnabled: r = !1,
383
384
  position: i = "top-left"
384
385
  }) {
385
- const [n, o] = p(r), [a, h] = p(!1), [S, R] = p({
386
+ const [n, o] = b(r), [a, p] = b(!1), [k, E] = b({
386
387
  cameraFPS: 0,
387
388
  detectionTime: 0,
388
389
  modelPerformance: [],
@@ -390,76 +391,81 @@ function pe({
390
391
  effectiveFPS: 0,
391
392
  memory: null,
392
393
  resolution: "N/A"
393
- }), d = g(null), l = g(null), { session: b } = J(), k = q();
394
- v(() => (d.current || (d.current = new te(), window.__xr_metrics_collector = d.current), () => {
395
- d.current && d.current.stop(), l.current && clearInterval(l.current), window.__xr_metrics_collector && delete window.__xr_metrics_collector;
396
- }), []), v(() => {
397
- const c = d.current;
394
+ }), m = h(null), l = h(null), g = h(!1), { session: v } = G(), P = J();
395
+ T(() => (m.current || (m.current = new re(), window.__xr_metrics_collector = m.current), () => {
396
+ m.current && m.current.stop(), l.current && clearInterval(l.current), window.__xr_metrics_collector && delete window.__xr_metrics_collector;
397
+ }), []), T(() => {
398
+ const c = m.current;
398
399
  if (c) {
399
- if (n && k) {
400
- const u = b._getVideoElement();
400
+ if (n && P) {
401
+ const u = v._getVideoElement();
401
402
  c.start(u), l.current = window.setInterval(async () => {
402
- const x = Object.fromEntries(b.store.getSnapshot().pipeline);
403
- await c.updateDetectionTime(x);
404
- const m = c.getMetrics();
405
- R(m);
406
- }, 16);
403
+ if (!g.current) {
404
+ g.current = !0;
405
+ try {
406
+ const F = Object.fromEntries(v.store.getSnapshot().pipeline);
407
+ await c.updateDetectionTime(F), E(c.getMetrics());
408
+ } finally {
409
+ g.current = !1;
410
+ }
411
+ }
412
+ }, 100);
407
413
  } else
408
- c.stop(), l.current && (clearInterval(l.current), l.current = null);
414
+ c.stop(), l.current && (clearInterval(l.current), l.current = null), g.current = !1;
409
415
  return () => {
410
416
  l.current && (clearInterval(l.current), l.current = null);
411
417
  };
412
418
  }
413
- }, [n, k, b]), v(() => {
419
+ }, [n, P, v]), T(() => {
414
420
  const c = (u) => {
415
- const m = e.toLowerCase().split("+"), D = m.includes("ctrl") || m.includes("control"), U = m.includes("shift"), L = m.includes("alt"), A = m[m.length - 1], N = D ? u.ctrlKey || u.metaKey : !0, H = U ? u.shiftKey : !0, z = L ? u.altKey : !0, j = u.key.toLowerCase() === A;
416
- N && H && z && j && (u.preventDefault(), o(($) => !$));
421
+ const d = e.toLowerCase().split("+"), U = d.includes("ctrl") || d.includes("control"), L = d.includes("shift"), A = d.includes("alt"), N = d[d.length - 1], H = U ? u.ctrlKey || u.metaKey : !0, z = L ? u.shiftKey : !0, j = A ? u.altKey : !0, $ = u.key.toLowerCase() === N;
422
+ H && z && j && $ && (u.preventDefault(), o((B) => !B));
417
423
  };
418
424
  return window.addEventListener("keydown", c), () => {
419
425
  window.removeEventListener("keydown", c);
420
426
  };
421
427
  }, [e]);
422
- const E = T(() => {
428
+ const I = y(() => {
423
429
  o((c) => !c);
424
- }, []), M = T(() => {
430
+ }, []), M = y(() => {
425
431
  o(!0);
426
- }, []), P = T(() => {
432
+ }, []), x = y(() => {
427
433
  o(!1);
428
- }, []), I = {
434
+ }, []), D = {
429
435
  state: {
430
436
  enabled: n,
431
437
  collapsed: a,
432
- metrics: S
438
+ metrics: k
433
439
  },
434
- toggle: E,
435
- setCollapsed: h,
440
+ toggle: I,
441
+ setCollapsed: p,
436
442
  enable: M,
437
- disable: P
443
+ disable: x
438
444
  };
439
- return /* @__PURE__ */ y(F.Provider, { value: I, children: [
445
+ return /* @__PURE__ */ w(C.Provider, { value: D, children: [
440
446
  t,
441
- n && /* @__PURE__ */ f(X, { fallback: null, children: /* @__PURE__ */ f(
442
- re,
447
+ n && /* @__PURE__ */ f(V, { fallback: null, children: /* @__PURE__ */ f(
448
+ ie,
443
449
  {
444
- metrics: S,
450
+ metrics: k,
445
451
  collapsed: a,
446
- onCollapse: h,
447
- onClose: P,
452
+ onCollapse: p,
453
+ onClose: x,
448
454
  position: i,
449
455
  keyboardShortcut: e
450
456
  }
451
457
  ) })
452
458
  ] });
453
459
  }
454
- function ie() {
455
- const t = O.useContext(F);
460
+ function se() {
461
+ const t = W.useContext(C);
456
462
  if (!t)
457
463
  throw new Error("useDebuggerContext must be used within a DebuggerProvider");
458
464
  return t;
459
465
  }
460
- function se({ onUpdate: t }) {
461
- const e = g(0), r = g(!0);
462
- return G(() => {
466
+ function ne({ onUpdate: t }) {
467
+ const e = h(0), r = h(!0);
468
+ return Q(() => {
463
469
  if (r.current)
464
470
  r.current = !1;
465
471
  else {
@@ -469,8 +475,8 @@ function se({ onUpdate: t }) {
469
475
  e.current = performance.now();
470
476
  }, -1e3), null;
471
477
  }
472
- function ne() {
473
- const t = ie();
478
+ function oe() {
479
+ const t = se();
474
480
  return {
475
481
  metrics: t.state.metrics,
476
482
  enabled: t.state.enabled,
@@ -481,39 +487,39 @@ function ne() {
481
487
  disable: t.disable
482
488
  };
483
489
  }
484
- function ge() {
485
- const { enabled: t } = ne(), e = (r) => {
490
+ function ve() {
491
+ const { enabled: t } = oe(), e = (r) => {
486
492
  const i = window;
487
493
  i.__xr_metrics_collector && i.__xr_metrics_collector.updateRenderTime(r);
488
494
  };
489
- return t ? /* @__PURE__ */ f(se, { onUpdate: e }) : null;
495
+ return t ? /* @__PURE__ */ f(ne, { onUpdate: e }) : null;
490
496
  }
491
- const w = 600;
492
- function C() {
497
+ const S = 600;
498
+ function R() {
493
499
  if (typeof window > "u")
494
500
  return;
495
501
  const t = window;
496
502
  return t.__xrCalibrationDebugState || (t.__xrCalibrationDebugState = { events: [] }), t.__xrCalibrationDebugState;
497
503
  }
498
- function be(t, e, r) {
499
- const i = C();
504
+ function Te(t, e, r) {
505
+ const i = R();
500
506
  i && (i.events.push({
501
507
  source: t,
502
508
  label: e,
503
509
  payload: r,
504
510
  ts: performance.now()
505
- }), i.events.length > w && i.events.splice(0, i.events.length - w));
511
+ }), i.events.length > S && i.events.splice(0, i.events.length - S));
506
512
  }
507
- function ve(t = w) {
508
- const e = C();
513
+ function ye(t = S) {
514
+ const e = R();
509
515
  return e ? e.events.slice(Math.max(0, e.events.length - t)) : [];
510
516
  }
511
517
  export {
512
- pe as D,
513
- fe as X,
514
- ge as a,
515
- be as b,
516
- he as f,
517
- ve as r,
518
- ne as u
518
+ be as D,
519
+ pe as X,
520
+ ve as a,
521
+ Te as b,
522
+ ge as f,
523
+ ye as r,
524
+ oe as u
519
525
  };
@@ -0,0 +1 @@
1
+ "use strict";var H=Object.defineProperty;var z=(t,e,r)=>e in t?H(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e,r)=>z(t,typeof e!="symbol"?e+"":e,r);const m=require("react/jsx-runtime"),n=require("react"),O=require("./selectors-2QvO5RYY.cjs"),$=require("./index-D4bLzBr6.cjs"),B=require("@react-three/fiber");require("./hasFullUnitUVBounds-p1Dl0ejX.cjs");require("./renderLayers-lDtL0_43.cjs");const K=({children:t,defaultCollapsed:e=!0,title:r,width:s=320})=>{const[o,a]=n.useState(e);return o?m.jsx("button",{type:"button",onClick:()=>a(!1),"aria-label":`Open ${r}`,title:`Open ${r}`,style:{position:"absolute",right:16,bottom:16,zIndex:40,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",pointerEvents:"auto"},children:"◫"}):m.jsxs("div",{style:{position:"absolute",right:16,bottom:16,zIndex:40,width:s,maxWidth:"calc(100vw - 32px)",padding:14,borderRadius:14,boxShadow:"0 12px 30px rgba(0,0,0,0.26)",backdropFilter:"blur(10px)",pointerEvents:"auto",background:"rgba(15, 23, 42, 0.78)",border:"1px solid rgba(255,255,255,0.12)",color:"#e5eefb"},children:[m.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:10},children:[m.jsx("div",{style:{fontSize:13,fontWeight:700},children:r}),m.jsx("button",{type:"button",onClick:()=>a(!0),"aria-label":`Close ${r}`,title:`Close ${r}`,style:{width:32,height:32,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(255,255,255,0.04)",color:"#e5eefb",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),t]})};class V{constructor(){i(this,"frameTimestamps",[]);i(this,"lastUpdateTime",0);i(this,"currentFPS",0);i(this,"updateInterval",500);this.lastUpdateTime=performance.now()}trackFrame(){const e=performance.now();this.frameTimestamps.push(e);const r=e-this.updateInterval;this.frameTimestamps=this.frameTimestamps.filter(s=>s>r),e-this.lastUpdateTime>=this.updateInterval&&(this.currentFPS=this.frameTimestamps.length*2,this.lastUpdateTime=e)}getFPS(){return this.currentFPS}reset(){this.frameTimestamps=[],this.lastUpdateTime=performance.now(),this.currentFPS=0}}function W(t,e=1){return t.toFixed(e)}function x(t){return t/(1024*1024)}function X(t,e){return e===0?0:t/e*100}class J{constructor(e=1e3){i(this,"intervalId",null);i(this,"memoryUsage",null);i(this,"updateInterval");i(this,"isSupported",!1);this.updateInterval=e,this.checkSupport()}checkSupport(){const e=performance;this.isSupported="memory"in e&&e.memory!==void 0,this.isSupported||console.warn("[MemoryTracker] performance.memory not available (Chrome-only API)")}start(){if(this.intervalId!==null){console.warn("[MemoryTracker] Already running");return}if(!this.isSupported){this.memoryUsage=null;return}this.updateMemory(),this.intervalId=window.setInterval(()=>{this.updateMemory()},this.updateInterval)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}updateMemory(){if(!this.isSupported)return;const e=performance;if(!e.memory)return;const r=e.memory.usedJSHeapSize,s=e.memory.jsHeapSizeLimit;this.memoryUsage={used:x(r),total:x(s),percentage:X(r,s)}}getMemoryUsage(){return this.memoryUsage}isMemorySupported(){return this.isSupported}}class G{constructor(){i(this,"resolution","N/A");i(this,"videoElement",null);i(this,"metadataListener",null)}start(e){if(!e){this.resolution="N/A";return}this.videoElement=e,e.videoWidth>0&&e.videoHeight>0&&this.updateResolution(),this.metadataListener=()=>{this.updateResolution()},e.addEventListener("loadedmetadata",this.metadataListener)}stop(){this.videoElement&&this.metadataListener&&(this.videoElement.removeEventListener("loadedmetadata",this.metadataListener),this.metadataListener=null),this.videoElement=null,this.resolution="N/A"}updateResolution(){if(!this.videoElement){this.resolution="N/A";return}const e=this.videoElement.videoWidth,r=this.videoElement.videoHeight;e>0&&r>0?this.resolution=`${e}x${r}`:this.resolution="N/A"}getResolution(){return this.videoElement&&this.updateResolution(),this.resolution}}class Q{constructor(e={}){i(this,"options");i(this,"isRunning",!1);i(this,"metrics",{cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"});i(this,"cameraFPSTracker");i(this,"memoryTracker");i(this,"resolutionTracker");i(this,"frameTimes",[]);i(this,"lastEffectiveFPSUpdate",0);this.options={enableMemoryTracking:e.enableMemoryTracking??!0,memoryUpdateInterval:e.memoryUpdateInterval??1e3},this.cameraFPSTracker=new V,this.memoryTracker=new J(this.options.memoryUpdateInterval),this.resolutionTracker=new G}start(e){if(this.isRunning){console.warn("[MetricsCollector] Already running");return}this.isRunning=!0,this.lastEffectiveFPSUpdate=performance.now(),this.options.enableMemoryTracking&&this.memoryTracker.start(),e&&this.resolutionTracker.start(e),this.setupCameraFPSHook(),console.info("[MetricsCollector] Started")}stop(){this.isRunning&&(this.isRunning=!1,this.memoryTracker.stop(),this.resolutionTracker.stop(),this.cameraFPSTracker.reset(),this.cleanupCameraFPSHook(),console.info("[MetricsCollector] Stopped"))}setupCameraFPSHook(){const e=window;e.__xr_debugger_metrics||(e.__xr_debugger_metrics={trackCameraFrame:()=>{this.cameraFPSTracker.trackFrame(),this.metrics.cameraFPS=this.cameraFPSTracker.getFPS()}})}cleanupCameraFPSHook(){const e=window;e.__xr_debugger_metrics&&delete e.__xr_debugger_metrics}getMetrics(){return this.updateMetricsFromTrackers(),{...this.metrics}}updateMetricsFromTrackers(){this.isRunning&&(this.metrics.memory=this.memoryTracker.getMemoryUsage(),this.metrics.resolution=this.resolutionTracker.getResolution(),this.updateEffectiveFPS())}updateRenderTime(e){this.metrics.renderTime=e,this.updateEffectiveFPS()}async updateDetectionTime(e){if(!e||!this.isRunning){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}try{const r=Object.values(e).filter(Boolean);if(r.length===0){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}const s=r.map(c=>c&&typeof c.getPerformanceData=="function"?c.getPerformanceData():Promise.resolve({name:"unknown",processingTime:0})),o=await Promise.all(s);this.metrics.modelPerformance=o.map(c=>({name:c.name,processingTime:c.processingTime||0}));const a=o.reduce((c,p)=>c+(p.processingTime||0),0);this.metrics.detectionTime=a,this.updateEffectiveFPS()}catch(r){console.warn("[MetricsCollector] Error updating detection time:",r),this.metrics.detectionTime=0,this.metrics.modelPerformance=[]}}updateEffectiveFPS(){const e=performance.now(),r=this.metrics.detectionTime+this.metrics.renderTime;if(this.frameTimes.push(r),e-this.lastEffectiveFPSUpdate>=1e3){if(this.frameTimes.length>0){const s=this.frameTimes.reduce((o,a)=>o+a,0)/this.frameTimes.length;this.metrics.effectiveFPS=s>0?1e3/s:0}this.frameTimes=[],this.lastEffectiveFPSUpdate=e}}isActive(){return this.isRunning}}const Y=n.lazy(async()=>({default:(await Promise.resolve().then(()=>require("./DebuggerUI-B45_Gb9d.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
package/dist/internal.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-DH5d1Xnq.cjs"),r=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),n=require("./index-PtFmD6B8.cjs");exports.DebuggerOverlay=e.DebuggerOverlay;exports.DebuggerProvider=e.DebuggerProvider;exports.XRDebugView=e.XRDebugView;exports.readCalibrationDebugEvents=e.readCalibrationDebugEvents;exports.recordCalibrationDebugEvent=e.recordCalibrationDebugEvent;exports.useDebugger=e.useDebugger;exports._resetUVBoundsWarnings=r._resetUVBoundsWarnings;exports.logUVBoundsWarningOnce=r.logUVBoundsWarningOnce;exports.RENDER_LAYERS=n.RENDER_LAYERS;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-i2JkM85N.cjs"),r=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),n=require("./renderLayers-lDtL0_43.cjs");exports.DebuggerOverlay=e.DebuggerOverlay;exports.DebuggerProvider=e.DebuggerProvider;exports.XRDebugView=e.XRDebugView;exports.readCalibrationDebugEvents=e.readCalibrationDebugEvents;exports.recordCalibrationDebugEvent=e.recordCalibrationDebugEvent;exports.useDebugger=e.useDebugger;exports._resetUVBoundsWarnings=r._resetUVBoundsWarnings;exports.logUVBoundsWarningOnce=r.logUVBoundsWarningOnce;exports.RENDER_LAYERS=n.RENDER_LAYERS;
package/dist/internal.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a, D as s, X as o, r as g, b as n, u } from "./internal-KOKJDxCG.js";
1
+ import { a, D as s, X as o, r as g, b as n, u } from "./internal-DuMPpcbp.js";
2
2
  import { _ as i, l as t } from "./hasFullUnitUVBounds-BGvcFsQM.js";
3
- import { R as d } from "./index-CYMj26Ej.js";
3
+ import { R as d } from "./renderLayers-zrK2pv5O.js";
4
4
  export {
5
5
  a as DebuggerOverlay,
6
6
  s as DebuggerProvider,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("./index-B5J4gzn2.cjs"),M=require("./selectors-Bub0o3qy.cjs"),c=require("react"),_=require("./useFaceResults-hVUJYSEY.cjs"),D=require("./index-PtFmD6B8.cjs"),fe=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),U=require("./index-BVBVg96G.cjs"),l=require("react/jsx-runtime"),me=require("@react-three/drei"),ge={position:"absolute",top:-28,left:0,background:"rgba(34, 197, 94, 0.9)",color:"#04130a",fontFamily:"Menlo, Monaco, Consolas, monospace",fontSize:12,fontWeight:700,padding:"4px 8px",whiteSpace:"nowrap"},pe=({boundingBox:e,label:t="face bounding box",color:r="#22c55e",style:o,labelStyle:n})=>l.jsx("div",{style:{position:"absolute",left:`${e.left*100}%`,top:`${e.top*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,border:`3px solid ${r}`,boxSizing:"border-box",pointerEvents:"none",zIndex:20,...o},children:t!==null&&l.jsx("div",{style:{...ge,...n},children:t})}),be=e=>{const{makeDefault:t=!0,...r}=e,o={position:[0,0,40],fov:30,near:.1,far:1e3,makeDefault:t,...r};return l.jsx(me.PerspectiveCamera,{...o})},xe=({background:e="#000",children:t,style:r})=>l.jsx("div",{style:{position:"fixed",inset:0,overflow:"hidden",background:e,...r},children:t}),T=({children:e,config:t,style:r})=>l.jsx("div",{"data-render-target":t.name,style:{position:"absolute",inset:0,overflow:"hidden",background:t.clearColor,pointerEvents:t.pointerEvents??"none",zIndex:t.zIndex,opacity:t.hidden?0:1,...r},children:e}),K=({canvas:e,layout:t,media:r,mirrored:o,filter:n})=>{const i=Math.round(t.destination.width),s=Math.round(t.destination.height);e.width!==i&&(e.width=i),e.height!==s&&(e.height=s);const a=e.getContext("2d");a&&(a.setTransform(1,0,0,1,0,0),a.clearRect(0,0,i,s),o&&(a.translate(i,0),a.scale(-1,1)),n&&(a.filter=n),a.drawImage(r,t.offsetX,t.offsetY,t.drawWidth,t.drawHeight),n&&(a.filter="none"),a.setTransform(1,0,0,1,0,0))},ne=({canvasRef:e,enabled:t=!0,fps:r=30,imageRef:o,layout:n,mirrored:i,sourceKind:s,videoRef:a})=>{c.useEffect(()=>{if(!t){const b=e.current,u=b==null?void 0:b.getContext("2d");b&&u&&u.clearRect(0,0,b.width,b.height);return}let m=0,g=0;const h=r>0?1e3/r:0,p=b=>{if(m=requestAnimationFrame(p),h>0&&b-g<h)return;g=b;const u=e.current;if(!u||!n)return;if(s==="image"){const w=o.current;if(!w||!w.complete||w.naturalWidth<=0||w.naturalHeight<=0)return;K({canvas:u,layout:n,media:w,mirrored:i});return}const x=a.current;!x||x.readyState<2||x.videoWidth<=0||x.videoHeight<=0||K({canvas:u,layout:n,media:x,mirrored:i})};return m=requestAnimationFrame(p),()=>{cancelAnimationFrame(m)}},[e,t,r,o,n,i,s,a])},re=({canvasRef:e,imageRef:t,layer:r,layout:o,mirrored:n,sourceKind:i,videoRef:s})=>(ne({canvasRef:e,imageRef:t,layout:o,mirrored:n,sourceKind:i,videoRef:s}),l.jsx(T,{config:r,children:l.jsx("canvas",{ref:e,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block",background:"#000"}})})),we=({canvasRef:e,controlInsetTop:t,debugVisible:r,fps:o=15,imageRef:n,layer:i,layout:s,mirrored:a,sourceKind:m,videoRef:g,viewportSize:h})=>{ne({canvasRef:e,enabled:r,fps:o,imageRef:n,layout:s,mirrored:a,sourceKind:m,videoRef:g});const p=Math.min(220,Math.max(120,h.width*.22)),b=h.width>0&&h.height>0?h.width/h.height:1,u=Math.min(h.height-24,Math.max(t??16,16));return l.jsx(T,{config:i,children:l.jsx("canvas",{ref:e,style:{position:"absolute",left:16,top:u,width:r?p:1,height:r?"auto":1,aspectRatio:`${b}`,opacity:r?.85:0,borderRadius:10,border:r?"1px solid rgba(255,255,255,0.16)":"none",pointerEvents:"none",objectFit:"contain",background:"#000"}})})},ve=5,Re=1,ie=(e,t)=>t,ye="brightness(2.2) contrast(1.5) saturate(1.25)",ae=({enabled:e,displayMirrored:t,imageRef:r,layout:o,mode:n,numFaces:i,selectedSource:s,sourceStream:a,videoRef:m})=>{const{session:g}=D.useXRContext(),h=c.useRef(null),p=c.useRef(!1),b=c.useRef(document.createElement("canvas")),{ready:u,node:x,error:w}=H.useXRModel(D.XRModel.FACE_TRACKER,{numFaces:i??(n==="head-binding"?Re:ve)}),[E,v]=c.useState("idle"),[k,F]=c.useState(null),I=e&&u&&!!x,z=_.useFaceResults({node:I?x:null,enabled:I,selectedSource:s,onFrame:c.useCallback(()=>{F(null),v("ready")},[])});return c.useEffect(()=>{if(!e||!o)return;const f=()=>{const R=s==="image"?r.current:m.current;if(R){if(R instanceof HTMLImageElement){if(!R.complete||R.naturalWidth<=0||R.naturalHeight<=0)return}else if(R.readyState<2||R.videoWidth<=0||R.videoHeight<=0)return;K({canvas:b.current,layout:o,media:R,mirrored:t,filter:s==="webcam"?ye:void 0})}};if(s==="image"){f();return}let d=0;const y=()=>{d=requestAnimationFrame(y),f()};return d=requestAnimationFrame(y),()=>cancelAnimationFrame(d)},[t,e,r,o,s,m]),c.useEffect(()=>{var j;if(!e){v("idle"),F(null),p.current=!1,h.current=null;return}if(!o){v("initializing");return}const f=(a==null?void 0:a.id)??(((j=m.current)==null?void 0:j.srcObject)instanceof MediaStream?m.current.srcObject.id:"none"),y=s==="webcam"?`webcam:${f}`:s;h.current!==y&&(p.current=!1,h.current=y);let R=!1;return(async()=>{try{if(v("initializing"),p.current||(await g.setFrameSource({canvas:b.current,sourceKind:s}),await g.start(),p.current=!0),R)return;F(null),v("initializing")}catch(C){if(R)return;v("error"),F(C instanceof Error?C.message:"Failed to initialize SDK face tracking")}})(),()=>{R=!0}},[e,o,s,g,a,m]),c.useEffect(()=>{!I&&e&&!w&&v("initializing")},[I,e,w]),c.useEffect(()=>{w&&(v("error"),F(w.message))},[w]),c.useEffect(()=>()=>{p.current=!1,g.stop()},[g]),{activeDelegate:"GPU",faces:z,status:E,error:k}},oe=c.createContext(null),Se={audio:!1,video:{facingMode:"user",frameRate:{ideal:30,max:60}}},Ce={name:"viewport-live",clearColor:"#000000",pointerEvents:"none",zIndex:0},Ee={name:"viewport-ui",clearColor:"transparent",pointerEvents:"auto",zIndex:5},Fe={name:"viewport-scene",clearColor:"transparent",pointerEvents:"auto",zIndex:1},X={webcam:{icon:"◉",label:"Webcam"},image:{icon:"▣",label:"Images"},video:{icon:"▶",label:"Videos"}},O=({children:e})=>l.jsx(l.Fragment,{children:e});O.displayName="XRViewport.Scene";const Y=({children:e})=>l.jsx(l.Fragment,{children:e});Y.displayName="XRViewport.Overlay";const Ie=e=>{if(!e)return{width:0,height:0};const t=e.getBoundingClientRect();return{width:t.width||e.clientWidth,height:t.height||e.clientHeight}},Me=e=>{const[t,r]=c.useState({width:0,height:0});return c.useLayoutEffect(()=>{const o=e.current;if(!o)return;let n=0;const i=()=>{const g=Ie(o);r(h=>h.width===g.width&&h.height===g.height?h:g)};i(),n=requestAnimationFrame(i);const s=new ResizeObserver(()=>{i(),n&&cancelAnimationFrame(n),n=requestAnimationFrame(i)});s.observe(o);const a=window.visualViewport,m=()=>{i(),n&&cancelAnimationFrame(n),n=requestAnimationFrame(i)};return window.addEventListener("resize",m),window.addEventListener("orientationchange",m),a==null||a.addEventListener("resize",m),a==null||a.addEventListener("scroll",m),()=>{n&&cancelAnimationFrame(n),s.disconnect(),window.removeEventListener("resize",m),window.removeEventListener("orientationchange",m),a==null||a.removeEventListener("resize",m),a==null||a.removeEventListener("scroll",m)}},[e]),t},Q=e=>{e&&(e.pause(),e.removeAttribute("src"),e.srcObject=null,e.load())},Z=e=>{e&&e.removeAttribute("src")},je=({enabled:e,imageAsset:t,selectedSource:r,videoAsset:o})=>{const n=c.useRef(null),i=c.useRef(null),[s,a]=c.useState(null),[m,g]=c.useState({width:0,height:0}),[h,p]=c.useState("idle"),[b,u]=c.useState(null);return c.useEffect(()=>{if(!e){Q(n.current),Z(i.current),a(null),g({width:0,height:0}),p("idle"),u(null);return}let x=!1,w=null;const E=(f,d)=>{x||(g({width:f,height:d}),p("ready"),u(null))},v=()=>{Q(n.current),Z(i.current),w==null||w.getTracks().forEach(f=>f.stop()),w=null,a(null)},k=async()=>{p("requesting");const f=await navigator.mediaDevices.getUserMedia(Se);if(x){f.getTracks().forEach(y=>y.stop());return}w=f,a(f);const d=n.current;d&&(d.srcObject=f,d.muted=!0,d.playsInline=!0,d.autoplay=!0,await d.play(),E(d.videoWidth,d.videoHeight))},F=async f=>{p("requesting"),a(null);const d=n.current;d&&(d.src=f,d.muted=!0,d.loop=!0,d.playsInline=!0,d.autoplay=!0,d.crossOrigin="anonymous",await d.play(),E(d.videoWidth,d.videoHeight))},I=async f=>{p("requesting"),a(null);const d=i.current;d&&(await new Promise((y,R)=>{d.onload=()=>y(),d.onerror=()=>R(new Error("Unable to load image")),d.src=f}),E(d.naturalWidth,d.naturalHeight))};return v(),(async()=>{try{if(r==="webcam"){await k();return}if(r==="video"){if(!(o!=null&&o.src))throw new Error("Missing video source");await F(o.src);return}if(!(t!=null&&t.src))throw new Error("Missing image source");await I(t.src)}catch(f){if(x)return;p("error"),u(f instanceof Error?f.message:`Unable to initialize ${r}`)}})(),()=>{x=!0,v()}},[e,t,r,o]),{videoRef:n,imageRef:i,stream:s,mediaSize:m,status:h,error:b}},Xe=(e,t)=>e==="auto"?t==="webcam"?"cover":"contain":e,ke=({imageOptions:e,initialImageId:t,initialSource:r,initialVideoId:o,source:n,videoOptions:i})=>{var h,p,b,u;const s=(n==null?void 0:n.kind)??r??"webcam",a=s==="image"&&e.length===0||s==="video"&&i.length===0?"webcam":s,m=(n==null?void 0:n.kind)==="image"?n.assetId??((h=e[0])==null?void 0:h.id)??"":t??((p=e[0])==null?void 0:p.id)??"",g=(n==null?void 0:n.kind)==="video"?n.assetId??((b=i[0])==null?void 0:b.id)??"":o??((u=i[0])==null?void 0:u.id)??"";return{selectedSource:a,selectedImageId:m,selectedVideoId:g}},Te=(e,t,r)=>{if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return null;const o=r==="contain"?Math.min(t.width/e.width,t.height/e.height):Math.max(t.width/e.width,t.height/e.height),n=e.width*o,i=e.height*o,s=(t.width-n)*.5,a=(t.height-i)*.5;return{source:e,destination:t,drawWidth:n,drawHeight:i,offsetX:s,offsetY:a,scale:o}},ze=(e,t)=>{if(e==="dom")return{sceneContent:null,overlayContent:t};let r=null,o=null;const n=[];return c.Children.forEach(t,i=>{var a;if(!c.isValidElement(i)){i!=null&&n.push(i);return}const s=(a=i.type)==null?void 0:a.displayName;if(s===O.displayName){r=i.props.children;return}if(s===Y.displayName){o=i.props.children;return}n.push(i)}),!o&&n.length>0&&(o=n),{sceneContent:r,overlayContent:o}},ee=(e,t)=>typeof e=="function"?e(t):e,Ae=()=>c.useContext(oe),Le=({imageRef:e,selectedSource:t,videoRef:r})=>l.jsxs(l.Fragment,{children:[l.jsx("video",{ref:r,style:{position:"absolute",width:1,height:1,opacity:t==="image"?0:.001,pointerEvents:"none"}}),l.jsx("img",{ref:e,alt:"",style:{position:"absolute",width:1,height:1,opacity:t==="image"?.001:0,pointerEvents:"none"}})]}),te=({dock:e,label:t,onChange:r,options:o,value:n})=>l.jsx("div",{style:{position:"absolute",top:e==="top-left"?74:void 0,bottom:e==="bottom-left"?74:void 0,left:16,zIndex:5,maxWidth:"calc(100vw - 32px)",padding:10,borderRadius:14,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)"},children:l.jsxs("label",{style:{display:"grid",gap:6,color:"#e5eefb",fontSize:12,fontWeight:700},children:[l.jsx("span",{children:t}),l.jsx("select",{value:n,onChange:i=>r(i.target.value),style:{minWidth:180,maxWidth:"calc(100vw - 52px)",height:36,borderRadius:10,border:"1px solid rgba(255,255,255,0.12)",background:"rgba(255,255,255,0.06)",color:"#e5eefb",padding:"0 10px"},children:o.map(i=>l.jsx("option",{value:i.id,style:{color:"#111827"},children:i.label},i.id))})]})}),Be=({dock:e,imageOptions:t,selectedImageId:r,selectedSource:o,selectedVideoId:n,setSelectedImageId:i,setSelectedSource:s,setSelectedVideoId:a,showMediaControls:m,videoOptions:g})=>{const[h,p]=c.useState(!1),b=["webcam","image","video"].filter(u=>u==="image"?t.length>0:u==="video"?g.length>0:!0);return m?h?l.jsx("button",{type:"button",onClick:()=>p(!1),"aria-label":"Open media controls",title:"Open media controls",style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer"},children:"≡"}):l.jsxs(l.Fragment,{children:[l.jsxs("div",{style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,display:"inline-flex",alignItems:"center",gap:8,maxWidth:"calc(100vw - 32px)"},children:[l.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:8,padding:8,borderRadius:999,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",overflowX:"auto"},children:b.map(u=>{const x=u===o;return l.jsxs("button",{type:"button",onClick:()=>s(u),"aria-pressed":x,title:X[u].label,style:{border:"none",borderRadius:999,minWidth:42,height:42,padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,background:x?"rgba(56, 189, 248, 0.18)":"rgba(255,255,255,0.04)",color:x?"#e0f2fe":"rgba(229,238,251,0.82)",cursor:"pointer",flex:"0 0 auto"},children:[l.jsx("span",{style:{fontSize:14,lineHeight:1},children:X[u].icon}),l.jsx("span",{style:{fontSize:12,fontWeight:700,letterSpacing:"0.01em"},children:X[u].label})]},u)})}),l.jsx("button",{type:"button",onClick:()=>p(!0),"aria-label":"Close media controls",title:"Close media controls",style:{width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),o==="image"&&t.length>0&&l.jsx(te,{dock:e,label:"Image Asset",options:t,value:r,onChange:i}),o==="video"&&g.length>0&&l.jsx(te,{dock:e,label:"Video Asset",options:g,value:n,onChange:a})]}):null},We=({enabled:e,selectedSource:t})=>{const r=M.useXRModelNode(D.XRModel.FACE_TRACKER);return{faces:_.useFaceResults({node:r,enabled:e,selectedSource:t}),trackerStatus:r?"ready":"idle"}},G=({children:e,fitMode:t="auto",imageOptions:r=[],initialImageId:o,initialMirrored:n=!0,initialSource:i="webcam",initialVideoId:s,mediaStrategy:a="internal",mediaDock:m="bottom-left",mode:g="dom",showMediaControlsByDefault:h=!0,source:p,style:b,videoOptions:u=[]})=>{const x=c.useRef(null),w=c.useRef(null),E=Me(x),v=c.useMemo(()=>ke({imageOptions:r,initialImageId:o,initialSource:i,initialVideoId:s,source:p,videoOptions:u}),[r,o,i,s,p,u]),[k,F]=c.useState(n),[I,z]=c.useState(h),[f,d]=c.useState(v.selectedSource),[y,R]=c.useState(v.selectedImageId),[A,j]=c.useState(v.selectedVideoId),C=a==="internal";c.useEffect(()=>{p&&(d(v.selectedSource),R(v.selectedImageId),j(v.selectedVideoId))},[v,p]);const L=r.find(P=>P.id===y)??r[0],B=u.find(P=>P.id===A)??u[0],S=je({enabled:C,imageAsset:L,selectedSource:f,videoAsset:B}),$=Xe(t,f),W=c.useMemo(()=>Te(S.mediaSize,E,$),[S.mediaSize,$,E]),N=ie(f,k),q=ae({displayMirrored:N,enabled:C&&S.status==="ready"&&W!==null,imageRef:S.imageRef,layout:W,selectedSource:f,sourceStream:S.stream,videoRef:S.videoRef}),J=We({enabled:!C,selectedSource:f}),se=f==="image"?`${X.image.label}: ${(L==null?void 0:L.label)??""}`:f==="video"?`${X.video.label}: ${(B==null?void 0:B.label)??""}`:X.webcam.label,V={activeDelegate:C?q.activeDelegate:null,faces:C?q.faces:J.faces,imageOptions:r,layout:W,mediaError:S.error,mediaFitMode:$,mediaLabel:se,mediaStatus:S.status,mirrored:N,selectedImageId:y,selectedSource:f,selectedVideoId:A,setMirrored:F,setSelectedImageId:R,setSelectedSource:d,setSelectedVideoId:j,setShowMediaControls:z,showMediaControls:I,trackerError:C?q.error:null,trackerStatus:C?q.status:J.trackerStatus,videoOptions:u,viewportSize:E,mediaSize:S.mediaSize},le=typeof e=="function"?e(V):e,{sceneContent:ce,overlayContent:de}=ze(g,le),ue=ee(ce,V),he=ee(de,V);return l.jsx(oe.Provider,{value:V,children:l.jsxs("div",{ref:x,style:{position:"fixed",inset:0,overflow:"hidden",background:"#000",...b},children:[l.jsx(Le,{imageRef:S.imageRef,selectedSource:f,videoRef:S.videoRef}),g==="dom"&&C&&l.jsx(re,{canvasRef:w,imageRef:S.imageRef,videoRef:S.videoRef,layer:Ce,layout:W,mirrored:N,sourceKind:f==="image"?"image":"video"}),(g==="r3f"||g==="hybrid")&&l.jsx(T,{config:Fe,children:l.jsx(U.XRScene,{renderTargetSize:E,style:{width:"100%",height:"100%"},children:ue})}),l.jsxs(T,{config:Ee,children:[C&&l.jsx(Be,{dock:m,imageOptions:r,selectedImageId:y,selectedSource:f,selectedVideoId:A,setSelectedImageId:R,setSelectedSource:d,setSelectedVideoId:j,showMediaControls:I,videoOptions:u}),he]})]})})};G.Scene=O;G.Overlay=Y;const qe=e=>{const[t,r]=c.useState(null);return c.useEffect(()=>{let o=0;const n=()=>{var m,g;o=requestAnimationFrame(n);const i=(g=(m=e==null?void 0:e.detectionResults)==null?void 0:m.faceLandmarks)==null?void 0:g[0];if(!i||i.length===0){r(null);return}const s=_.computeLandmarkBounds(i),a={left:s.minX,top:s.minY,width:s.width,height:s.height};r(h=>h&&h.left===a.left&&h.top===a.top&&h.width===a.width&&h.height===a.height?h:a)};return n(),()=>{cancelAnimationFrame(o)}},[e]),t},Ve=["fill","contain"];exports.HeadTracker=H.HeadTracker;exports.useTrackerContext=H.useTrackerContext;exports.useXRModel=H.useXRModel;exports.useXRCameraTexture=M.useXRCameraTexture;exports.useXRError=M.useXRError;exports.useXRModelNode=M.useXRModelNode;exports.useXRPipelineSnapshot=M.useXRPipelineSnapshot;exports.useXRReady=M.useXRReady;exports.useXRRenderSize=M.useXRRenderSize;exports.computeLandmarkBounds=_.computeLandmarkBounds;exports.useXRContext=D.useXRContext;exports.hasFullUnitUVBounds=fe.hasFullUnitUVBounds;exports.ScreenRectAspectContext=U.ScreenRectAspectContext;exports.computeScreenTransform=U.computeScreenTransform;exports.useScreenSpace=U.useScreenSpace;exports.BoundingBoxOverlay=pe;exports.PerspectiveCamera=be;exports.TEXTURE_FITS=Ve;exports.XRCompositor=xe;exports.XRLayer=T;exports.XRMediaSurface=re;exports.XRTrackingOverlay=we;exports.XRViewport=G;exports.resolveCalibrationFaceDisplayMirrored=ie;exports.useCalibrationFaceTracker=ae;exports.useFaceBoundingBox=qe;exports.useXRViewportState=Ae;
1
+ "use strict";var pe=Object.defineProperty;var me=(e,t,r)=>t in e?pe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var X=(e,t,r)=>me(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const q=require("./index-D4bLzBr6.cjs"),P=require("./index-82aENaRq.cjs"),j=require("./selectors-2QvO5RYY.cjs"),f=require("react"),W=require("./getFaceInfo-CyPAKh3h.cjs"),u=require("react/jsx-runtime"),ge=require("@react-three/drei"),V=require("./index-CEc1CAmB.cjs"),re=require("./useFaceResults-VcFdOUFV.cjs"),xe=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),L=require("./contexts-BKvTIayr.cjs"),be=require("three");function we(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const z=we(be),B=({children:e,config:t,style:r})=>u.jsx("div",{"data-render-target":t.name,style:{position:"absolute",inset:0,overflow:"hidden",background:t.clearColor,pointerEvents:t.pointerEvents??"none",zIndex:t.zIndex,opacity:t.hidden?0:1,...r},children:e}),N=({canvas:e,layout:t,media:r,mirrored:n,filter:o})=>{const i=Math.round(t.destination.width),a=Math.round(t.destination.height);e.width!==i&&(e.width=i),e.height!==a&&(e.height=a);const s=e.getContext("2d");s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,i,a),n&&(s.translate(i,0),s.scale(-1,1)),o&&(s.filter=o),s.drawImage(r,t.offsetX,t.offsetY,t.drawWidth,t.drawHeight),o&&(s.filter="none"),s.setTransform(1,0,0,1,0,0))},ne=({canvasRef:e,enabled:t=!0,fps:r=30,imageRef:n,layout:o,mirrored:i,sourceKind:a,videoRef:s})=>{f.useEffect(()=>{if(!t){const b=e.current,g=b==null?void 0:b.getContext("2d");b&&g&&g.clearRect(0,0,b.width,b.height);return}let l=0,c=0;const d=r>0?1e3/r:0,p=b=>{if(l=requestAnimationFrame(p),d>0&&b-c<d)return;c=b;const g=e.current;if(!g||!o)return;if(a==="image"){const x=n.current;if(!x||!x.complete||x.naturalWidth<=0||x.naturalHeight<=0)return;N({canvas:g,layout:o,media:x,mirrored:i});return}const w=s.current;!w||w.readyState<2||w.videoWidth<=0||w.videoHeight<=0||N({canvas:g,layout:o,media:w,mirrored:i})};return l=requestAnimationFrame(p),()=>{cancelAnimationFrame(l)}},[e,t,r,n,o,i,a,s])},oe=({canvasRef:e,imageRef:t,layer:r,layout:n,mirrored:o,sourceKind:i,videoRef:a})=>(ne({canvasRef:e,imageRef:t,layout:n,mirrored:o,sourceKind:i,videoRef:a}),u.jsx(B,{config:r,children:u.jsx("canvas",{ref:e,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block",background:"#000"}})})),ve=({canvasRef:e,controlInsetTop:t,debugVisible:r,fps:n=15,imageRef:o,layer:i,layout:a,mirrored:s,sourceKind:l,videoRef:c,viewportSize:d})=>{ne({canvasRef:e,enabled:r,fps:n,imageRef:o,layout:a,mirrored:s,sourceKind:l,videoRef:c});const p=Math.min(220,Math.max(120,d.width*.22)),b=d.width>0&&d.height>0?d.width/d.height:1,g=Math.min(d.height-24,Math.max(t??16,16));return u.jsx(B,{config:i,children:u.jsx("canvas",{ref:e,style:{position:"absolute",left:16,top:g,width:r?p:1,height:r?"auto":1,aspectRatio:`${b}`,opacity:r?.85:0,borderRadius:10,border:r?"1px solid rgba(255,255,255,0.16)":"none",pointerEvents:"none",objectFit:"contain",background:"#000"}})})},Se={audio:!1,video:{facingMode:"user",frameRate:{ideal:30,max:60}}},ye={name:"viewport-live",clearColor:"#000000",pointerEvents:"none",zIndex:0},Re={name:"viewport-ui",clearColor:"transparent",pointerEvents:"auto",zIndex:5},Ce={name:"viewport-scene",clearColor:"transparent",pointerEvents:"auto",zIndex:1},k={webcam:{icon:"◉",label:"Webcam"},image:{icon:"▣",label:"Images"},video:{icon:"▶",label:"Videos"}},Ee=({imageRef:e,selectedSource:t,videoRef:r})=>u.jsxs(u.Fragment,{children:[u.jsx("video",{ref:r,style:{position:"absolute",width:1,height:1,opacity:t==="image"?0:.001,pointerEvents:"none"}}),u.jsx("img",{ref:e,alt:"",style:{position:"absolute",width:1,height:1,opacity:t==="image"?.001:0,pointerEvents:"none"}})]}),Q=({dock:e,label:t,onChange:r,options:n,value:o})=>u.jsx("div",{style:{position:"absolute",top:e==="top-left"?74:void 0,bottom:e==="bottom-left"?74:void 0,left:16,zIndex:5,maxWidth:"calc(100vw - 32px)",padding:10,borderRadius:14,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)"},children:u.jsxs("label",{style:{display:"grid",gap:6,color:"#e5eefb",fontSize:12,fontWeight:700},children:[u.jsx("span",{children:t}),u.jsx("select",{value:o,onChange:i=>r(i.target.value),style:{minWidth:180,maxWidth:"calc(100vw - 52px)",height:36,borderRadius:10,border:"1px solid rgba(255,255,255,0.12)",background:"rgba(255,255,255,0.06)",color:"#e5eefb",padding:"0 10px"},children:n.map(i=>u.jsx("option",{value:i.id,style:{color:"#111827"},children:i.label},i.id))})]})}),Te=({dock:e,imageOptions:t,selectedImageId:r,selectedSource:n,selectedVideoId:o,setSelectedImageId:i,setSelectedSource:a,setSelectedVideoId:s,showMediaControls:l,videoOptions:c})=>{const[d,p]=f.useState(!1),b=["webcam","image","video"].filter(g=>g==="image"?t.length>0:g==="video"?c.length>0:!0);return l?d?u.jsx("button",{type:"button",onClick:()=>p(!1),"aria-label":"Open media controls",title:"Open media controls",style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer"},children:"≡"}):u.jsxs(u.Fragment,{children:[u.jsxs("div",{style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,display:"inline-flex",alignItems:"center",gap:8,maxWidth:"calc(100vw - 32px)"},children:[u.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:8,padding:8,borderRadius:999,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",overflowX:"auto"},children:b.map(g=>{const w=g===n;return u.jsxs("button",{type:"button",onClick:()=>a(g),"aria-pressed":w,title:k[g].label,style:{border:"none",borderRadius:999,minWidth:42,height:42,padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,background:w?"rgba(56, 189, 248, 0.18)":"rgba(255,255,255,0.04)",color:w?"#e0f2fe":"rgba(229,238,251,0.82)",cursor:"pointer",flex:"0 0 auto"},children:[u.jsx("span",{style:{fontSize:14,lineHeight:1},children:k[g].icon}),u.jsx("span",{style:{fontSize:12,fontWeight:700,letterSpacing:"0.01em"},children:k[g].label})]},g)})}),u.jsx("button",{type:"button",onClick:()=>p(!0),"aria-label":"Close media controls",title:"Close media controls",style:{width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),n==="image"&&t.length>0&&u.jsx(Q,{dock:e,label:"Image Asset",options:t,value:r,onChange:i}),n==="video"&&c.length>0&&u.jsx(Q,{dock:e,label:"Video Asset",options:c,value:o,onChange:s})]}):null},Me=({containerRef:e,displayCanvasRef:t,imageOptions:r,imageRef:n,layout:o,managesOwnMedia:i,mediaDock:a,mode:s,overlayContent:l,renderOutputs:c,sceneContent:d,selectedImageId:p,selectedSource:b,selectedVideoId:g,setSceneRenderOutputs:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,showMediaControls:F,style:C,videoOptions:S,videoRef:E,viewportSize:v,mirrored:h})=>u.jsxs("div",{ref:e,style:{position:"fixed",inset:0,overflow:"hidden",background:"#000",...C},children:[u.jsx(Ee,{imageRef:n,selectedSource:b,videoRef:E}),s==="dom"&&i&&u.jsx(oe,{canvasRef:t,imageRef:n,videoRef:E,layer:ye,layout:o,mirrored:h,sourceKind:b==="image"?"image":"video"}),(s==="r3f"||s==="hybrid")&&u.jsx(B,{config:Ce,children:u.jsx(L.XRScene,{onRenderOutputs:w,renderOutputs:{sceneColor:c.sceneColor||c.finalColor,sceneDepth:c.sceneDepth},renderTargetSize:v,style:{width:"100%",height:"100%"},children:d})}),u.jsxs(B,{config:Re,children:[i&&u.jsx(Te,{dock:a,imageOptions:r,selectedImageId:p,selectedSource:b,selectedVideoId:g,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,showMediaControls:F,videoOptions:S}),l]})]}),Fe=5,Ie=1,ie=(e,t)=>t,je="brightness(2.2) contrast(1.5) saturate(1.25)",ae=({enabled:e,displayMirrored:t,imageRef:r,layout:n,mode:o,numFaces:i,selectedSource:a,sourceStream:s,videoRef:l})=>{const{session:c}=q.useXRContext(),d=f.useRef(null),p=f.useRef(!1),b=f.useRef(document.createElement("canvas")),{ready:g,node:w,error:x}=P.useXRModel(q.XRModel.FACE_TRACKER,{numFaces:i??(o==="head-binding"?Ie:Fe)}),[m,y]=f.useState("idle"),[F,C]=f.useState(null),S=e&&g&&!!w,E=re.useFaceResults({node:S?w:null,enabled:S,selectedSource:a,onFrame:f.useCallback(()=>{C(null),y("ready")},[])});return f.useEffect(()=>{if(!e||!n)return;const v=()=>{const R=a==="image"?r.current:l.current;if(R){if(R instanceof HTMLImageElement){if(!R.complete||R.naturalWidth<=0||R.naturalHeight<=0)return}else if(R.readyState<2||R.videoWidth<=0||R.videoHeight<=0)return;N({canvas:b.current,layout:n,media:R,mirrored:t,filter:a==="webcam"?je:void 0})}};if(a==="image"){v();return}let h=0;const T=()=>{h=requestAnimationFrame(T),v()};return h=requestAnimationFrame(T),()=>cancelAnimationFrame(h)},[t,e,r,n,a,l]),f.useEffect(()=>{var D;if(!e){y("idle"),C(null),p.current=!1,d.current=null;return}if(!n){y("initializing");return}const v=(s==null?void 0:s.id)??(((D=l.current)==null?void 0:D.srcObject)instanceof MediaStream?l.current.srcObject.id:"none"),T=a==="webcam"?`webcam:${v}`:a;d.current!==T&&(p.current=!1,d.current=T);let R=!1;return(async()=>{try{if(y("initializing"),p.current||(await c.setFrameSource({canvas:b.current,sourceKind:a}),await c.start(),p.current=!0),R)return;C(null),y("initializing")}catch(I){if(R)return;y("error"),C(I instanceof Error?I.message:"Failed to initialize SDK face tracking")}})(),()=>{R=!0}},[e,n,a,c,s,l]),f.useEffect(()=>{!S&&e&&!x&&y("initializing")},[S,e,x]),f.useEffect(()=>{x&&(y("error"),C(x.message))},[x]),f.useEffect(()=>()=>{p.current=!1,c.stop()},[c]),{activeDelegate:"GPU",faces:E,status:m,error:F}},Xe=(e,t)=>e==="auto"?t==="webcam"?"cover":"contain":e,ke=({imageOptions:e,initialImageId:t,initialSource:r,initialVideoId:n,source:o,videoOptions:i})=>{var l,c,d,p;const a=(o==null?void 0:o.kind)??r??"webcam";return{selectedSource:a==="image"&&e.length===0||a==="video"&&i.length===0?"webcam":a,selectedImageId:(o==null?void 0:o.kind)==="image"?o.assetId??((l=e[0])==null?void 0:l.id)??"":t??((c=e[0])==null?void 0:c.id)??"",selectedVideoId:(o==null?void 0:o.kind)==="video"?o.assetId??((d=i[0])==null?void 0:d.id)??"":n??((p=i[0])==null?void 0:p.id)??""}},Le=(e,t,r)=>{if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return null;const n=r==="contain"?Math.min(t.width/e.width,t.height/e.height):Math.max(t.width/e.width,t.height/e.height),o=e.width*n,i=e.height*n;return{source:e,destination:t,drawWidth:o,drawHeight:i,offsetX:(t.width-o)*.5,offsetY:(t.height-i)*.5,scale:n}},ze=e=>{if(!e)return{width:0,height:0};const t=e.getBoundingClientRect();return{width:t.width||e.clientWidth,height:t.height||e.clientHeight}},Be=e=>{const[t,r]=f.useState({width:0,height:0});return f.useLayoutEffect(()=>{const n=e.current;if(!n)return;let o=0;const i=()=>{const c=ze(n);r(d=>d.width===c.width&&d.height===c.height?d:c)},a=()=>{i(),o&&cancelAnimationFrame(o),o=requestAnimationFrame(i)};a();const s=new ResizeObserver(a);s.observe(n);const l=window.visualViewport;return window.addEventListener("resize",a),window.addEventListener("orientationchange",a),l==null||l.addEventListener("resize",a),l==null||l.addEventListener("scroll",a),()=>{o&&cancelAnimationFrame(o),s.disconnect(),window.removeEventListener("resize",a),window.removeEventListener("orientationchange",a),l==null||l.removeEventListener("resize",a),l==null||l.removeEventListener("scroll",a)}},[e]),t},Ve=({enabled:e,selectedSource:t})=>{const r=j.useXRModelNode(q.XRModel.FACE_TRACKER);return{faces:re.useFaceResults({node:r,enabled:e,selectedSource:t}),trackerStatus:r?"ready":"idle"}},Z=e=>{e&&(e.pause(),e.removeAttribute("src"),e.srcObject=null,e.load())},ee=e=>{e&&e.removeAttribute("src")},De=({enabled:e,imageAsset:t,selectedSource:r,videoAsset:n})=>{const o=f.useRef(null),i=f.useRef(null),[a,s]=f.useState(null),[l,c]=f.useState({width:0,height:0}),[d,p]=f.useState("idle"),[b,g]=f.useState(null);return f.useEffect(()=>{if(!e){Z(o.current),ee(i.current),s(null),c({width:0,height:0}),p("idle"),g(null);return}let w=!1,x=null;const m=(v,h)=>{w||(c({width:v,height:h}),p("ready"),g(null))},y=()=>{Z(o.current),ee(i.current),x==null||x.getTracks().forEach(v=>v.stop()),x=null,s(null)},F=async()=>{p("requesting");const v=await navigator.mediaDevices.getUserMedia(Se);if(w){v.getTracks().forEach(T=>T.stop());return}x=v,s(v);const h=o.current;h&&(h.srcObject=v,h.muted=!0,h.playsInline=!0,h.autoplay=!0,await h.play(),m(h.videoWidth,h.videoHeight))},C=async v=>{p("requesting"),s(null);const h=o.current;h&&(h.src=v,h.muted=!0,h.loop=!0,h.playsInline=!0,h.autoplay=!0,h.crossOrigin="anonymous",await h.play(),m(h.videoWidth,h.videoHeight))},S=async v=>{p("requesting"),s(null);const h=i.current;h&&(await new Promise((T,R)=>{h.onload=()=>T(),h.onerror=()=>R(new Error("Unable to load image")),h.src=v}),m(h.naturalWidth,h.naturalHeight))};return y(),(async()=>{try{if(r==="webcam"){await F();return}if(r==="video"){if(!(n!=null&&n.src))throw new Error("Missing video source");await C(n.src);return}if(!(t!=null&&t.src))throw new Error("Missing image source");await S(t.src)}catch(v){if(w)return;p("error"),g(v instanceof Error?v.message:`Unable to initialize ${r}`)}})(),()=>{w=!0,y()}},[e,t,r,n]),{videoRef:o,imageRef:i,stream:a,mediaSize:l,status:d,error:b}},Ae=({enabled:e,imageRef:t,selectedSource:r,status:n,videoRef:o})=>{const[i,a]=f.useState(null);return f.useEffect(()=>{if(!e||n!=="ready"){a(c=>(c==null||c.dispose(),null));return}const s=r==="image"?t.current:o.current;if(!s)return;const l=r==="image"?new z.Texture(s):new z.VideoTexture(s);return l.colorSpace=z.SRGBColorSpace,l.minFilter=z.LinearFilter,l.magFilter=z.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,a(c=>(c==null||c.dispose(),l)),()=>{l.dispose()}},[e,t,r,n,o]),i},qe=({externalTracker:e,imageOptions:t,layout:r,managesOwnMedia:n,mediaError:o,mediaFitMode:i,mediaSize:a,mediaStatus:s,mirrored:l,selectedImage:c,selectedImageId:d,selectedSource:p,selectedVideo:b,selectedVideoId:g,setMirrored:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,setShowMediaControls:F,showMediaControls:C,tracker:S,videoOptions:E,viewportSize:v})=>{const h=p==="image"?`${k.image.label}: ${(c==null?void 0:c.label)??""}`:p==="video"?`${k.video.label}: ${(b==null?void 0:b.label)??""}`:k.webcam.label;return{activeDelegate:n?S.activeDelegate:null,faces:n?S.faces:e.faces,imageOptions:t,layout:r,mediaError:o,mediaFitMode:i,mediaLabel:h,mediaStatus:s,mirrored:l,selectedImageId:d,selectedSource:p,selectedVideoId:g,setMirrored:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,setShowMediaControls:F,showMediaControls:C,trackerError:n?S.error:null,trackerStatus:n?S.status:e.trackerStatus,videoOptions:E,viewportSize:v,mediaSize:a}},Pe=({mediaTexture:e,previewMode:t,renderOutputs:r,sceneRenderOutputs:n})=>f.useMemo(()=>({requested:r,previewMode:t,mediaColorTexture:e,sceneColorTexture:n.sceneColorTexture,finalColorTexture:r.finalColor?n.sceneColorTexture:null,sceneDepthTexture:n.sceneDepthTexture,estimatedDepthTexture:null,available:{mediaColor:e!==null,sceneColor:n.sceneColorTexture!==null,finalColor:!!(r.finalColor&&n.sceneColorTexture),sceneDepth:n.sceneDepthTexture!==null,estimatedDepth:!1}}),[e,t,r,n]),We=({fitMode:e,imageOptions:t,initialImageId:r,initialMirrored:n,initialSource:o,initialVideoId:i,mediaStrategy:a,previewMode:s,renderOutputs:l,showMediaControlsByDefault:c,source:d,videoOptions:p})=>{const b=f.useRef(null),g=f.useRef(null),w=Be(b),x=f.useMemo(()=>ke({imageOptions:t,initialImageId:r,initialSource:o,initialVideoId:i,source:d,videoOptions:p}),[t,r,o,i,d,p]),[m,y]=f.useState(n),[F,C]=f.useState(c),[S,E]=f.useState(x.selectedSource),[v,h]=f.useState(x.selectedImageId),[T,R]=f.useState(x.selectedVideoId),[G,D]=f.useState({sceneColorTexture:null,sceneDepthTexture:null}),I=a==="internal";f.useEffect(()=>{d&&(E(x.selectedSource),h(x.selectedImageId),R(x.selectedVideoId))},[x,d]);const Y=t.find(U=>U.id===v)??t[0],J=p.find(U=>U.id===T)??p[0],M=De({enabled:I,imageAsset:Y,selectedSource:S,videoAsset:J}),_=Xe(e,S),A=f.useMemo(()=>Le(M.mediaSize,w,_),[M.mediaSize,_,w]),ce=Ae({enabled:!!(l.mediaColor||l.finalColor),imageRef:M.imageRef,selectedSource:S,status:M.status,videoRef:M.videoRef}),H=ie(S,m),de=ae({displayMirrored:H,enabled:I&&M.status==="ready"&&A!==null,imageRef:M.imageRef,layout:A,selectedSource:S,sourceStream:M.stream,videoRef:M.videoRef}),ue=Ve({enabled:!I,selectedSource:S}),he=qe({externalTracker:ue,imageOptions:t,layout:A,managesOwnMedia:I,mediaError:M.error,mediaFitMode:_,mediaSize:M.mediaSize,mediaStatus:M.status,mirrored:H,selectedImage:Y,selectedImageId:v,selectedSource:S,selectedVideo:J,selectedVideoId:T,setMirrored:y,setSelectedImageId:h,setSelectedSource:E,setSelectedVideoId:R,setShowMediaControls:C,showMediaControls:F,tracker:de,videoOptions:p,viewportSize:w}),fe=Pe({mediaTexture:ce,previewMode:s,renderOutputs:l,sceneRenderOutputs:G});return{containerRef:b,displayCanvasRef:g,displayMirrored:H,layout:A,managesOwnMedia:I,media:M,renderOutputState:fe,renderState:he,selectedImageId:v,selectedSource:S,selectedVideoId:T,setSceneRenderOutputs:D,setSelectedImageId:h,setSelectedSource:E,setSelectedVideoId:R,showMediaControls:F,viewportSize:w}},O=({children:e})=>u.jsx(u.Fragment,{children:e});O.displayName="XRViewport.Scene";const K=({children:e})=>u.jsx(u.Fragment,{children:e});K.displayName="XRViewport.Overlay";const _e=(e,t)=>{if(e==="dom")return{sceneContent:null,overlayContent:t};let r=null,n=null;const o=[];return f.Children.forEach(t,i=>{var s;if(!f.isValidElement(i)){i!=null&&o.push(i);return}const a=(s=i.type)==null?void 0:s.displayName;if(a===O.displayName){r=i.props.children;return}if(a===K.displayName){n=i.props.children;return}o.push(i)}),!n&&o.length>0&&(n=o),{sceneContent:r,overlayContent:n}},te=(e,t)=>typeof e=="function"?e(t):e;function He(e){return e.Scene=O,e.Overlay=K,e}const Ue=He(({children:e,fitMode:t="auto",imageOptions:r=[],initialImageId:n,initialMirrored:o=!0,initialSource:i="webcam",initialVideoId:a,mediaStrategy:s="internal",mediaDock:l="bottom-left",mode:c="dom",previewMode:d="finalColor",renderOutputs:p={},showMediaControlsByDefault:b=!0,source:g,style:w,videoOptions:x=[]})=>{const m=We({fitMode:t,imageOptions:r,initialImageId:n,initialMirrored:o,initialSource:i,initialVideoId:a,mediaStrategy:s,previewMode:d,renderOutputs:p,showMediaControlsByDefault:b,source:g,videoOptions:x}),y=typeof e=="function"?e(m.renderState):e,{sceneContent:F,overlayContent:C}=_e(c,y),S=te(F,m.renderState),E=te(C,m.renderState);return u.jsx(L.XRViewportStateContext.Provider,{value:m.renderState,children:u.jsx(L.XRViewportRenderOutputsContext.Provider,{value:m.renderOutputState,children:u.jsx(Me,{containerRef:m.containerRef,displayCanvasRef:m.displayCanvasRef,imageOptions:r,imageRef:m.media.imageRef,layout:m.layout,managesOwnMedia:m.managesOwnMedia,mediaDock:l,mirrored:m.displayMirrored,mode:c,overlayContent:E,renderOutputs:p,sceneContent:S,selectedImageId:m.selectedImageId,selectedSource:m.selectedSource,selectedVideoId:m.selectedVideoId,setSceneRenderOutputs:m.setSceneRenderOutputs,setSelectedImageId:m.setSelectedImageId,setSelectedSource:m.setSelectedSource,setSelectedVideoId:m.setSelectedVideoId,showMediaControls:m.showMediaControls,style:w,videoOptions:x,videoRef:m.media.videoRef,viewportSize:m.viewportSize})})})}),Ne={position:"absolute",top:-28,left:0,background:"rgba(34, 197, 94, 0.9)",color:"#04130a",fontFamily:"Menlo, Monaco, Consolas, monospace",fontSize:12,fontWeight:700,padding:"4px 8px",whiteSpace:"nowrap"},$e=({boundingBox:e,label:t="face bounding box",color:r="#22c55e",style:n,labelStyle:o})=>u.jsx("div",{style:{position:"absolute",left:`${e.left*100}%`,top:`${e.top*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,border:`3px solid ${r}`,boxSizing:"border-box",pointerEvents:"none",zIndex:20,...n},children:t!==null&&u.jsx("div",{style:{...Ne,...o},children:t})}),Oe=e=>{const[t,r]=f.useState(null);return f.useEffect(()=>{let n=0;const o=()=>{var l,c;n=requestAnimationFrame(o);const i=(c=(l=e==null?void 0:e.detectionResults)==null?void 0:l.faceLandmarks)==null?void 0:c[0];if(!i||i.length===0){r(null);return}const a=W.computeLandmarkBounds(i),s={left:a.minX,top:a.minY,width:a.width,height:a.height};r(d=>d&&d.left===s.left&&d.top===s.top&&d.width===s.width&&d.height===s.height?d:s)};return o(),()=>{cancelAnimationFrame(n)}},[e]),t},Ke=({background:e="#000",children:t,style:r})=>u.jsx("div",{style:{position:"fixed",inset:0,overflow:"hidden",background:e,...r},children:t}),Ge=e=>{const{makeDefault:t=!0,...r}=e;return u.jsx(ge.PerspectiveCamera,{position:[0,0,40],fov:30,near:.1,far:1e3,makeDefault:t,...r})},Ye=["fill","contain"],Je=(e,t,r,n,o)=>{const i=Math.max(1,Math.floor(t)),a=Math.max(0,Math.floor(e)),s=r==="ping-pong"&&i>1?i*2-2:i,l=Math.floor(a/s),c=o>0?l>=o:!n&&a>=s,d=c?s-1:a%s;return{frame:r==="reverse"?i-1-d%i:r==="random"?d*7919%i:r==="ping-pong"&&d>=i?s-d:d,ended:c,loop:l}},Qe=(e,t,r)=>{const n=Math.max(1,Math.floor(r));return Math.floor(Math.max(0,e)*Math.max(0,t))%n};class Ze{constructor(t,r){X(this,"capabilities");X(this,"snapshot");X(this,"listeners",new Set);X(this,"eventListeners",new Map);this.capabilities=t,this.snapshot={state:"idle",frame:0,time:0,playMode:"forward",loop:!0,loopCount:0,...r}}play(){const t=this.snapshot.state==="paused";this.update({state:"playing"}),this.emit(t?"Resume":"PlayBegin")}pause(){this.update({state:"paused"}),this.emit("Pause")}restart(){this.update({state:"playing",frame:0,time:0}),this.emit("PlayBegin")}setPlayMode(t){this.update({playMode:t})}setLoop(t,r=0){this.update({loop:t,loopCount:r})}seek(t){this.capabilities.canSeek&&this.update({frame:Math.max(0,Math.floor(t)),time:Math.max(0,t)})}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}on(t,r){const n=this.eventListeners.get(t)??new Set;return n.add(r),this.eventListeners.set(t,n),()=>this.off(t,r)}off(t,r){var n;(n=this.eventListeners.get(t))==null||n.delete(r)}getSnapshot(){return this.snapshot}dispose(){this.listeners.clear(),this.eventListeners.clear(),this.snapshot={...this.snapshot,state:"idle"}}emit(t){var r;(r=this.eventListeners.get(t))==null||r.forEach(n=>n({type:t,snapshot:this.snapshot}))}update(t){this.snapshot={...this.snapshot,...t},this.listeners.forEach(r=>r(this.snapshot))}}function et(e){return async(t,r)=>{const n=e.find(o=>o.canResolve(t));if(!n)throw new se("No texture provider matched source",t);return le(n.resolve.bind(n),t,r)}}class se extends Error{constructor(r,n){super(r);X(this,"source");this.name="TextureSourceLoadError",this.source=n}}function $(e){if(e.aborted)throw new DOMException("Texture source load aborted","AbortError")}async function le(e,t,r){$(r);const n=await e(t,r);return r.aborted&&(n.dispose(),$(r)),n}function tt(e){e==null||e.dispose()}exports.useXRContext=q.useXRContext;exports.HeadTracker=P.HeadTracker;exports.useTrackerContext=P.useTrackerContext;exports.useXRModel=P.useXRModel;exports.useXRCameraTexture=j.useXRCameraTexture;exports.useXRError=j.useXRError;exports.useXRModelNode=j.useXRModelNode;exports.useXRPipelineSnapshot=j.useXRPipelineSnapshot;exports.useXRReady=j.useXRReady;exports.useXRRenderSize=j.useXRRenderSize;exports.computeLandmarkBounds=W.computeLandmarkBounds;exports.createFaceInfoTarget=W.createFaceInfoTarget;exports.getFaceInfo=W.getFaceInfo;exports.ScreenRectAspectContext=V.ScreenRectAspectContext;exports.getThreeBlending=V.getThreeBlending;exports.getThreeDepthFunction=V.getThreeDepthFunction;exports.getThreeSide=V.getThreeSide;exports.useScreenSpace=V.useScreenSpace;exports.hasFullUnitUVBounds=xe.hasFullUnitUVBounds;exports.computeScreenTransform=L.computeScreenTransform;exports.useXRViewportRenderOutputs=L.useXRViewportRenderOutputs;exports.useXRViewportState=L.useXRViewportState;exports.BasicAnimatedTextureController=Ze;exports.BoundingBoxOverlay=$e;exports.PerspectiveCamera=Ge;exports.TEXTURE_FITS=Ye;exports.TextureSourceLoadError=se;exports.XRCompositor=Ke;exports.XRLayer=B;exports.XRMediaSurface=oe;exports.XRTrackingOverlay=ve;exports.XRViewport=Ue;exports.createTextureSourceResolver=et;exports.disposeResolvedTextureSource=tt;exports.getPlaybackFrame=Je;exports.getSequenceFrame=Qe;exports.resolveCalibrationFaceDisplayMirrored=ie;exports.resolveTextureSource=le;exports.throwIfAborted=$;exports.useCalibrationFaceTracker=ae;exports.useFaceBoundingBox=Oe;