@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.
- package/GROUNDING.md +1813 -27
- package/dist/{DebuggerUI-CEfdddkZ.cjs → DebuggerUI-B45_Gb9d.cjs} +1 -1
- package/dist/{DebuggerUI-Dgop6Q6o.js → DebuggerUI-Cq28c18s.js} +1 -1
- package/dist/FaceMeshRenderer-6t8OsQhK.js +1195 -0
- package/dist/FaceMeshRenderer-lQLhYIW-.cjs +155 -0
- package/dist/FaceRetouch-CDrL0pXg.js +551 -0
- package/dist/FaceRetouch-DtNl8-4e.cjs +134 -0
- package/dist/audio/AudioEngine.d.ts +3 -1
- package/dist/audio/AudioPlayer.d.ts +29 -0
- package/dist/audio/AudioPlayerLogic.d.ts +4 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/components/Axes/index.d.ts +6 -0
- package/dist/components/FaceMesh/FaceMeshRenderer.d.ts +17 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +22 -1
- package/dist/components/FaceMesh/canonical/FaceMeshMaterial.d.ts +25 -0
- package/dist/components/FaceMesh/canonical/assets.d.ts +3 -0
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +9 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +2 -0
- package/dist/components/FaceMesh/canonical/shaders.d.ts +2 -0
- package/dist/components/FaceMesh/deform.d.ts +3 -0
- package/dist/components/FaceMesh/index.d.ts +5 -0
- package/dist/components/FaceMesh/material/defaults.d.ts +74 -0
- package/dist/components/FaceMesh/material/index.d.ts +1 -0
- package/dist/components/FaceMesh/material/options.d.ts +5 -1
- package/dist/components/FaceMesh/material/support.d.ts +7 -2
- package/dist/components/FaceMesh/material/textures.d.ts +4 -0
- package/dist/components/FaceMesh/material/types.d.ts +4 -2
- package/dist/components/FaceRetouch/Background.d.ts +9 -5
- package/dist/components/FaceRetouch/FaceRetouch.d.ts +47 -0
- package/dist/components/FaceRetouch/index.d.ts +2 -6
- package/dist/components/FaceRetouch/landmarkMask.d.ts +4 -6
- package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +4 -7
- package/dist/components/FaceTracker/index.d.ts +5 -3
- package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +15 -0
- package/dist/components/FaceWarp3D/defaults.d.ts +37 -0
- package/dist/components/FaceWarp3D/index.d.ts +3 -0
- package/dist/components/FaceWarp3D/warp.d.ts +13 -0
- package/dist/components/HandJoints2D/index.d.ts +6 -0
- package/dist/components/HandTracker/index.d.ts +2 -2
- package/dist/components/HandTracking2D/HandVisual.d.ts +12 -0
- package/dist/components/HandTracking2D/index.d.ts +5 -0
- package/dist/components/HandTracking2DController/index.d.ts +5 -0
- package/dist/components/HandTracking3D/index.d.ts +6 -0
- package/dist/components/LightObject/index.d.ts +20 -0
- package/dist/components/LookAt/index.d.ts +23 -0
- package/dist/components/MeshRenderer/index.d.ts +58 -0
- package/dist/components/PerspectiveCamera/index.d.ts +2 -8
- package/dist/components/PinToMesh/index.d.ts +47 -0
- package/dist/components/RenderGroupLayer/index.d.ts +6 -0
- package/dist/components/SceneObjectRenderer/index.d.ts +16 -0
- package/dist/components/Screen2D/ScreenTransformFrame.d.ts +11 -0
- package/dist/components/Screen2D/ScreenTransformHelpers.d.ts +19 -0
- package/dist/components/Screen2D/ScreenTransformInteraction.d.ts +18 -0
- package/dist/components/Screen2D/index.d.ts +5 -0
- package/dist/components/ScreenGlass/defaults.d.ts +3 -0
- package/dist/components/ScreenGlass/index.d.ts +5 -0
- package/dist/components/ScreenGlass/shaders.d.ts +2 -0
- package/dist/components/ScreenGlass/types.d.ts +10 -0
- package/dist/components/ScreenGradient/defaults.d.ts +5 -0
- package/dist/components/ScreenGradient/index.d.ts +5 -0
- package/dist/components/ScreenGradient/shaders.d.ts +2 -0
- package/dist/components/ScreenGradient/types.d.ts +19 -0
- package/dist/components/ScreenImage/ScreenImage.d.ts +4 -0
- package/dist/components/ScreenImage/components/DynamicTextureSync.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageFrame.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageTransformFrame.d.ts +9 -0
- package/dist/components/ScreenImage/fit.d.ts +52 -0
- package/dist/components/ScreenImage/index.d.ts +8 -0
- package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +9 -0
- package/dist/components/ScreenImage/materials/ScreenImageMatcap.d.ts +3 -0
- package/dist/components/ScreenImage/source.d.ts +16 -0
- package/dist/components/ScreenImage/types.d.ts +37 -0
- package/dist/components/ScreenImage/utils/ScreenImageConstants.d.ts +9 -0
- package/dist/components/ScreenImage/utils/ScreenImageHelpers.d.ts +4 -0
- package/dist/components/ScreenShape/geometry.d.ts +5 -0
- package/dist/components/ScreenShape/index.d.ts +5 -0
- package/dist/components/ScreenShape/types.d.ts +41 -0
- package/dist/components/ScreenSpaceUI/ScreenTransformGuide.d.ts +15 -0
- package/dist/components/ScreenSpaceUI/ScreenTransformOverlayGuide.d.ts +9 -0
- package/dist/components/ScreenSpaceUI/index.d.ts +2 -0
- package/dist/components/ScreenText/components/ScreenTextBody.d.ts +2 -0
- package/dist/components/ScreenText/components/ScreenTextTransformFrame.d.ts +9 -0
- package/dist/components/ScreenText/constants.d.ts +5 -0
- package/dist/components/ScreenText/index.d.ts +6 -0
- package/dist/components/ScreenText/types.d.ts +31 -0
- package/dist/components/ScreenText/utils/ScreenTextHelpers.d.ts +14 -0
- package/dist/components/ScreenText/utils/ScreenTextMappings.d.ts +17 -0
- package/dist/components/SequentialRenderPasses/index.d.ts +6 -0
- package/dist/components/TextLabel/TextLabel.d.ts +5 -0
- package/dist/components/TextLabel/alignment.d.ts +4 -0
- package/dist/components/TextLabel/bend.d.ts +9 -0
- package/dist/components/TextLabel/canvas/buildTextLabelTexture.d.ts +4 -0
- package/dist/components/TextLabel/canvas/canvasTypography.d.ts +13 -0
- package/dist/components/TextLabel/canvas/drawBackground.d.ts +21 -0
- package/dist/components/TextLabel/canvas/drawEffects.d.ts +34 -0
- package/dist/components/TextLabel/canvas/drawText.d.ts +19 -0
- package/dist/components/TextLabel/components/TextLabelMesh.d.ts +13 -0
- package/dist/components/TextLabel/constants.d.ts +2 -0
- package/dist/components/TextLabel/hooks/useTextLabelTexture.d.ts +7 -0
- package/dist/components/TextLabel/index.d.ts +2 -62
- package/dist/components/TextLabel/layout/measurement.d.ts +8 -0
- package/dist/components/TextLabel/layout/resolveTextLayout.d.ts +25 -0
- package/dist/components/TextLabel/layout/wrapText.d.ts +6 -0
- package/dist/components/TextLabel/types.d.ts +227 -0
- package/dist/components/TrackingAnchor/index.d.ts +18 -2
- package/dist/components/Transform3D/index.d.ts +30 -0
- package/dist/components/XRMediaSurface/index.d.ts +6 -6
- package/dist/components/XRScene/index.d.ts +14 -3
- package/dist/components/XRViewport/XRViewport.d.ts +11 -0
- package/dist/components/XRViewport/components/HiddenMedia.d.ts +7 -0
- package/dist/components/XRViewport/components/MediaAssetPicker.d.ts +8 -0
- package/dist/components/XRViewport/components/MediaControlStack.d.ts +13 -0
- package/dist/components/XRViewport/components/XRViewportLayers.d.ts +30 -0
- package/dist/components/XRViewport/constants.d.ts +24 -0
- package/dist/components/XRViewport/contexts.d.ts +6 -0
- package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +13 -0
- package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +16 -0
- package/dist/components/XRViewport/hooks/useViewportMediaTexture.d.ts +10 -0
- package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +41 -0
- package/dist/components/XRViewport/hooks/useViewportRenderState.d.ts +47 -0
- package/dist/components/XRViewport/index.d.ts +3 -101
- package/dist/components/XRViewport/layout.d.ts +16 -0
- package/dist/components/XRViewport/slots.d.ts +16 -0
- package/dist/components/XRViewport/types.d.ts +89 -0
- package/dist/components/XRViewport/useViewportSize.d.ts +3 -0
- package/dist/components/index.d.ts +19 -0
- package/dist/contexts-BKvTIayr.cjs +1 -0
- package/dist/contexts-Bk5zz_VR.js +214 -0
- package/dist/debug-ui/component-editor/index.d.ts +19 -0
- package/dist/debug-ui/default-setting/index.d.ts +37 -0
- package/dist/debug-ui/default-setting.cjs +21 -0
- package/dist/debug-ui/default-setting.js +777 -0
- package/dist/debug-ui/face-mesh-renderer-settings/index.d.ts +8 -0
- package/dist/debug-ui/face-retouch/index.d.ts +11 -0
- package/dist/debug-ui/face-warp-3d/index.d.ts +6 -0
- package/dist/debug-ui/hand-joints-2d/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-2d/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-2d-controller/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-3d/index.d.ts +6 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +29 -0
- package/dist/debug-ui/index.d.ts +46 -0
- package/dist/debug-ui/layer-panel/index.d.ts +18 -0
- package/dist/debug-ui/media-source/MediaSourceSwitcher.d.ts +10 -0
- package/dist/debug-ui/media-source/index.d.ts +6 -0
- package/dist/debug-ui/media-source/media-preset.d.ts +9 -0
- package/dist/debug-ui/media-source/session.d.ts +12 -0
- package/dist/debug-ui/media-source.cjs +1 -0
- package/dist/debug-ui/media-source.js +9 -0
- package/dist/debug-ui/mesh-renderer-settings/index.d.ts +6 -0
- package/dist/debug-ui/object-inspector-panel/index.d.ts +25 -0
- package/dist/debug-ui/pin-to-mesh-settings/index.d.ts +10 -0
- package/dist/debug-ui/scene-editor/context.d.ts +38 -0
- package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +9 -0
- package/dist/debug-ui/scene-editor/index.d.ts +11 -0
- package/dist/debug-ui/scene-editor/inspector-panel.d.ts +7 -0
- package/dist/debug-ui/scene-editor/store-utils.d.ts +2 -0
- package/dist/debug-ui/scene-editor/viewport-toolbar.d.ts +4 -0
- package/dist/debug-ui/scene-editor/viewport.d.ts +21 -0
- package/dist/debug-ui/screen-glass-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-gradient-settings/GradientStopsEditor.d.ts +5 -0
- package/dist/debug-ui/screen-gradient-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-gradient-settings/styles.d.ts +3 -0
- package/dist/debug-ui/screen-image-settings/index.d.ts +9 -0
- package/dist/debug-ui/screen-shape-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-text-settings/NumberField.d.ts +9 -0
- package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +3 -0
- package/dist/debug-ui/screen-text-settings/controls/NestedSection.d.ts +7 -0
- package/dist/debug-ui/screen-text-settings/controls/Section.d.ts +8 -0
- package/dist/debug-ui/screen-text-settings/controls/icons.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/index.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/BackgroundSection.d.ts +8 -0
- package/dist/debug-ui/screen-text-settings/sections/ContentSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/EffectsSection.d.ts +25 -0
- package/dist/debug-ui/screen-text-settings/sections/StyleSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/TransformSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundFillControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundSizeControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundStrokeControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/types.d.ts +7 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/BendEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/EffectChrome.d.ts +21 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/GlowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/InnerShadowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/OutlineEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/ShadowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/types.d.ts +14 -0
- package/dist/debug-ui/screen-text-settings/settings.d.ts +90 -0
- package/dist/debug-ui/screen-text-settings/styles.d.ts +26 -0
- package/dist/debug-ui/screen-text-settings/transform.d.ts +6 -0
- package/dist/debug-ui/screen-text-settings/types.d.ts +9 -0
- package/dist/debug-ui/settings-panel/index.d.ts +38 -0
- package/dist/debug-ui/shared/MaterialSection.d.ts +13 -0
- package/dist/debug-ui/shared/ScreenTransformSection.d.ts +32 -0
- package/dist/debug-ui/transform-3d-settings/index.d.ts +11 -0
- package/dist/debug-ui.cjs +10 -0
- package/dist/debug-ui.js +8861 -0
- package/dist/drawNormalizedCrop-B-7zU-Xw.cjs +1 -0
- package/dist/drawNormalizedCrop-CRdIDyl1.js +44 -0
- package/dist/entries/all.d.ts +1 -0
- package/dist/entries/core.d.ts +55 -4
- package/dist/entries/face-effects.d.ts +12 -8
- package/dist/entries/internal.d.ts +1 -1
- package/dist/entries/low-level.d.ts +21 -4
- package/dist/entries/scene-object.d.ts +10 -0
- package/dist/entries/tracking.d.ts +25 -2
- package/dist/face-action/index.d.ts +34 -0
- package/dist/face-attribute-expression/index.d.ts +10 -0
- package/dist/face-effects.cjs +1 -252
- package/dist/face-effects.js +1404 -2613
- package/dist/face-info/blendshapes.d.ts +3 -0
- package/dist/face-info/derive.d.ts +8 -0
- package/dist/face-info/drawFaceCrop.d.ts +10 -0
- package/dist/face-info/getFaceInfo.d.ts +8 -0
- package/dist/face-info/index.d.ts +8 -0
- package/dist/face-info/landmarks.d.ts +21 -0
- package/dist/face-info/types.d.ts +52 -0
- package/dist/getFaceInfo-CyPAKh3h.cjs +1 -0
- package/dist/getFaceInfo-hUKMLFcr.js +118 -0
- package/dist/hand/handJoints2d.d.ts +49 -0
- package/dist/hand/handTracking2d.d.ts +33 -0
- package/dist/hand/handTracking2dController.d.ts +65 -0
- package/dist/hand/handTracking3d.d.ts +52 -0
- package/dist/hooks/faceResults.d.ts +1 -1
- package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
- package/dist/hooks/useFaceAction.d.ts +3 -0
- package/dist/hooks/useFaceAttributeExpression.d.ts +16 -0
- package/dist/hooks/useFaceDetection.d.ts +18 -0
- package/dist/hooks/useFaceInfo.d.ts +7 -0
- package/dist/hooks/useFaceInfos.d.ts +15 -0
- package/dist/hooks/useFaceResultReader.d.ts +10 -0
- package/dist/hooks/useFrameCapture.d.ts +18 -0
- package/dist/hooks/useMediaRecorder.d.ts +14 -2
- package/dist/hooks/useOwnedTexture.d.ts +6 -0
- package/dist/hooks/useTrackerContext.d.ts +2 -2
- package/dist/hooks/useXRSession/facade.d.ts +3 -0
- package/dist/hooks/useXRSession/registry.d.ts +9 -0
- package/dist/index-82aENaRq.cjs +1 -0
- package/dist/{index-BD-JWMjE.js → index-BgQAX8rs.js} +198 -134
- package/dist/index-CEc1CAmB.cjs +1 -0
- package/dist/index-CTHeBQOs.js +178 -0
- package/dist/index-D4bLzBr6.cjs +1 -0
- package/dist/index-DSpzjuqd.cjs +1 -0
- package/dist/index-Di70KWuY.js +2049 -0
- package/dist/index-DzEzkBIH.cjs +17 -0
- package/dist/{index-CYMj26Ej.js → index-JygePOwo.js} +565 -498
- package/dist/index-UC0Ux38E.js +111 -0
- package/dist/{internal-KOKJDxCG.js → internal-DuMPpcbp.js} +86 -80
- package/dist/internal-i2JkM85N.cjs +1 -0
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +2 -2
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +959 -632
- package/dist/main.cjs +1 -1
- package/dist/main.js +556 -455
- package/dist/material/MaterialFill.d.ts +20 -0
- package/dist/material/MeshMaterial.d.ts +14 -0
- package/dist/material/index.d.ts +2 -0
- package/dist/models/Body/index.d.ts +1 -1
- package/dist/models/Face/index.d.ts +1 -0
- package/dist/models/Face/rotation.d.ts +3 -0
- package/dist/models/Hand/HandTracking.d.ts +2 -0
- package/dist/render/layerStack.d.ts +29 -0
- package/dist/render/renderGroups.d.ts +47 -0
- package/dist/render/renderPasses.d.ts +18 -0
- package/dist/renderGroups-C9QJrAXu.js +152 -0
- package/dist/renderGroups-Dvm1J4lW.cjs +1 -0
- package/dist/renderLayers-lDtL0_43.cjs +1 -0
- package/dist/renderLayers-zrK2pv5O.js +13 -0
- package/dist/renderPasses-CT5iBwtg.cjs +21 -0
- package/dist/renderPasses-CjgG_6kQ.js +1500 -0
- package/dist/scene-object/index.d.ts +146 -0
- package/dist/scene-object/runtimeRegistry.d.ts +14 -0
- package/dist/scene-object.cjs +1 -0
- package/dist/scene-object.js +40 -0
- package/dist/screen-image/screenImagePresets.d.ts +13 -0
- package/dist/screen-image/screenImageSettings.d.ts +57 -0
- package/dist/screen-text/screenTextPresets.d.ts +6 -0
- package/dist/screen-text/screenTextSettings.d.ts +147 -0
- package/dist/screen2d/coordinates.d.ts +87 -0
- package/dist/screen2d/index.d.ts +7 -0
- package/dist/screen2d/material-runtime.d.ts +32 -0
- package/dist/screen2d/screenTransform.d.ts +47 -0
- package/dist/screen2d/smoothing.d.ts +5 -0
- package/dist/screen2d/texture.d.ts +10 -0
- package/dist/screen2d/transform.d.ts +25 -0
- package/dist/screen2d/types.d.ts +90 -0
- package/dist/{selectors-Bub0o3qy.cjs → selectors-2QvO5RYY.cjs} +1 -1
- package/dist/{selectors-BHO6TnoC.js → selectors-Dw3C-gSk.js} +5 -5
- package/dist/services/MetricsCollector/index.d.ts +7 -1
- package/dist/services/MetricsCollector/utils.d.ts +1 -1
- package/dist/session-BChR4TgK.cjs +31 -0
- package/dist/session-C1StwN0f.js +363 -0
- package/dist/texture/animatedTexture.d.ts +61 -0
- package/dist/texture/animationMath.d.ts +8 -0
- package/dist/texture/sourceResolver.d.ts +30 -0
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +582 -298
- package/dist/types/face.d.ts +1 -13
- package/dist/types/hand-tracking.d.ts +8 -0
- package/dist/types/index.d.ts +0 -1
- package/dist/types/nodes.d.ts +4 -1
- package/dist/types/session.d.ts +2 -0
- package/dist/types/tracking.d.ts +8 -2
- package/dist/types/util-types.d.ts +1 -1
- package/dist/useFaceInfo-C-WfMlYp.cjs +1 -0
- package/dist/useFaceInfo-CwsHZedC.js +62 -0
- package/dist/useFaceResults-CkFc1egZ.js +19 -0
- package/dist/useFaceResults-VcFdOUFV.cjs +1 -0
- package/dist/utils/drawNormalizedCrop.d.ts +22 -0
- package/dist/utils/integrity.d.ts +4 -25
- package/dist/utils/landmarkBounds.d.ts +1 -1
- package/dist/utils/logger.d.ts +2 -2
- package/dist/x-Co8jPhP0.js +127 -0
- package/dist/x-KC8E4Gaj.cjs +41 -0
- package/docs/MIGRATION_GUIDE.md +589 -0
- package/docs/SDK_DOCUMENTATION.md +1155 -0
- package/docs/api/audio.mdx +36 -0
- package/docs/api/behavior-components.mdx +164 -0
- package/docs/api/capture-recording.mdx +103 -0
- package/docs/api/debug-ui-scene-editor.mdx +249 -0
- package/docs/api/face-actions.mdx +104 -0
- package/docs/api/face-attribute-expression.mdx +87 -0
- package/docs/api/face-binding-anchors.mdx +53 -0
- package/docs/api/face-effects.mdx +19 -0
- package/docs/api/face-info.mdx +112 -0
- package/docs/api/face-mesh.mdx +98 -0
- package/docs/api/face-painting.mdx +33 -0
- package/docs/api/face-retouching.mdx +73 -0
- package/docs/api/material-render-state.mdx +132 -0
- package/docs/api/runtime-3d.mdx +311 -0
- package/docs/api/scene-object-store.mdx +213 -0
- package/docs/api/screen-image.mdx +41 -0
- package/docs/api/screen-shape.mdx +64 -0
- package/docs/api/screen-space-coordinates.mdx +41 -0
- package/docs/api/screen-text.mdx +39 -0
- package/docs/api/texture-sources.mdx +55 -0
- package/docs/api/trackers.mdx +46 -0
- package/docs/docs.json +70 -0
- package/docs/examples/scene-object-recipes.mdx +194 -0
- package/docs/guides/harness-debug-ui.mdx +139 -0
- package/docs/inspector/hierarchy-panel.mdx +51 -0
- package/docs/inspector/object-inspector-panel.mdx +51 -0
- package/docs/introduction.mdx +121 -0
- package/docs/scene-objects/overview.mdx +127 -0
- package/docs/scene-objects/render-groups.mdx +77 -0
- package/docs/scene-objects/runtime-rendering.mdx +75 -0
- package/docs/texture-api-consumer.md +58 -0
- package/package.json +55 -7
- package/dist/components/FaceRetouch/retouchRegions.d.ts +0 -23
- package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +0 -12
- package/dist/index-B5J4gzn2.cjs +0 -1
- package/dist/index-BVBVg96G.cjs +0 -1
- package/dist/index-DtwHElmG.js +0 -157
- package/dist/index-PtFmD6B8.cjs +0 -1
- package/dist/internal-DH5d1Xnq.cjs +0 -1
- package/dist/modules/XRClient/index.d.ts +0 -9
- package/dist/modules/index.d.ts +0 -1
- package/dist/services/ApiService.d.ts +0 -12
- package/dist/types/client.d.ts +0 -3
- package/dist/useFaceResults-cpsSmKKc.js +0 -81
- 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
|
|
2
|
-
var
|
|
3
|
-
var s = (t, e, r) =>
|
|
4
|
-
import { jsx as f, jsxs as
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { u as
|
|
8
|
-
import { useFrame as
|
|
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
|
-
|
|
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] =
|
|
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__ */
|
|
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__ */
|
|
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
|
|
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
|
|
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
|
|
141
|
+
function Z(t, e) {
|
|
141
142
|
return e === 0 ? 0 : t / e * 100;
|
|
142
143
|
}
|
|
143
|
-
class
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
|
379
|
-
function
|
|
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] =
|
|
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
|
-
}),
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
}), []),
|
|
397
|
-
const c =
|
|
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 &&
|
|
400
|
-
const u =
|
|
400
|
+
if (n && P) {
|
|
401
|
+
const u = v._getVideoElement();
|
|
401
402
|
c.start(u), l.current = window.setInterval(async () => {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
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,
|
|
419
|
+
}, [n, P, v]), T(() => {
|
|
414
420
|
const c = (u) => {
|
|
415
|
-
const
|
|
416
|
-
|
|
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
|
|
428
|
+
const I = y(() => {
|
|
423
429
|
o((c) => !c);
|
|
424
|
-
}, []), M =
|
|
430
|
+
}, []), M = y(() => {
|
|
425
431
|
o(!0);
|
|
426
|
-
}, []),
|
|
432
|
+
}, []), x = y(() => {
|
|
427
433
|
o(!1);
|
|
428
|
-
}, []),
|
|
434
|
+
}, []), D = {
|
|
429
435
|
state: {
|
|
430
436
|
enabled: n,
|
|
431
437
|
collapsed: a,
|
|
432
|
-
metrics:
|
|
438
|
+
metrics: k
|
|
433
439
|
},
|
|
434
|
-
toggle:
|
|
435
|
-
setCollapsed:
|
|
440
|
+
toggle: I,
|
|
441
|
+
setCollapsed: p,
|
|
436
442
|
enable: M,
|
|
437
|
-
disable:
|
|
443
|
+
disable: x
|
|
438
444
|
};
|
|
439
|
-
return /* @__PURE__ */
|
|
445
|
+
return /* @__PURE__ */ w(C.Provider, { value: D, children: [
|
|
440
446
|
t,
|
|
441
|
-
n && /* @__PURE__ */ f(
|
|
442
|
-
|
|
447
|
+
n && /* @__PURE__ */ f(V, { fallback: null, children: /* @__PURE__ */ f(
|
|
448
|
+
ie,
|
|
443
449
|
{
|
|
444
|
-
metrics:
|
|
450
|
+
metrics: k,
|
|
445
451
|
collapsed: a,
|
|
446
|
-
onCollapse:
|
|
447
|
-
onClose:
|
|
452
|
+
onCollapse: p,
|
|
453
|
+
onClose: x,
|
|
448
454
|
position: i,
|
|
449
455
|
keyboardShortcut: e
|
|
450
456
|
}
|
|
451
457
|
) })
|
|
452
458
|
] });
|
|
453
459
|
}
|
|
454
|
-
function
|
|
455
|
-
const t =
|
|
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
|
|
461
|
-
const e =
|
|
462
|
-
return
|
|
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
|
|
473
|
-
const t =
|
|
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
|
|
485
|
-
const { enabled: t } =
|
|
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(
|
|
495
|
+
return t ? /* @__PURE__ */ f(ne, { onUpdate: e }) : null;
|
|
490
496
|
}
|
|
491
|
-
const
|
|
492
|
-
function
|
|
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
|
|
499
|
-
const i =
|
|
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 >
|
|
511
|
+
}), i.events.length > S && i.events.splice(0, i.events.length - S));
|
|
506
512
|
}
|
|
507
|
-
function
|
|
508
|
-
const e =
|
|
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
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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-
|
|
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-
|
|
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 "./
|
|
3
|
+
import { R as d } from "./renderLayers-zrK2pv5O.js";
|
|
4
4
|
export {
|
|
5
5
|
a as DebuggerOverlay,
|
|
6
6
|
s as DebuggerProvider,
|
package/dist/low-level.cjs
CHANGED
|
@@ -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;
|