@vincentt-xr/sdk 2.0.0-alpha.8 → 2.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GROUNDING.md +4643 -170
- package/README.md +1 -0
- package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
- package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
- package/dist/DebuggerUI-7ngnJsBe.js +275 -0
- package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
- package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
- package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
- package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
- package/dist/FaceSurface-DmP9AEeC.js +27 -0
- package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
- package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
- package/dist/SkeletonUtils-C2r90MtN.js +21 -0
- package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
- package/dist/TextLabel-XE0rQSDn.cjs +2 -0
- package/dist/TextLabel-c9BCucOI.js +961 -0
- package/dist/assets/gltfLoader.d.ts +16 -0
- package/dist/assets/loaders.d.ts +16 -1
- package/dist/body-pose/index.d.ts +521 -0
- package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
- package/dist/body-trigger/frame.d.ts +88 -0
- package/dist/body-trigger/index.d.ts +6 -0
- package/dist/body-trigger/moves.d.ts +235 -0
- package/dist/body-trigger/trigger.d.ts +75 -0
- package/dist/calibration/calibration.d.ts +11 -6
- package/dist/canonicalFace-BHwyCx1c.js +9 -0
- package/dist/canonicalFace-C83I225R.cjs +1 -0
- package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
- package/dist/components/BodyInstruction/index.d.ts +69 -0
- package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
- package/dist/components/BodyTracker/index.d.ts +10 -2
- package/dist/components/BodyTrigger/index.d.ts +49 -0
- package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
- package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
- package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
- package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
- package/dist/components/FaceAtlas/constants.d.ts +8 -0
- package/dist/components/FaceAtlas/index.d.ts +7 -0
- package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
- package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
- package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
- package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
- package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
- package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
- package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
- package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
- package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
- package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
- package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
- package/dist/components/FaceCharacter/index.d.ts +18 -0
- package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
- package/dist/components/FaceInset/FaceInset.d.ts +68 -0
- package/dist/components/FaceInset/frame.d.ts +94 -0
- package/dist/components/FaceInset/index.d.ts +6 -0
- package/dist/components/FaceInset/material.d.ts +40 -0
- package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
- package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
- package/dist/components/FaceInstruction/index.d.ts +56 -0
- package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
- package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
- package/dist/components/FaceLiquify/debug.d.ts +37 -0
- package/dist/components/FaceLiquify/frame.d.ts +55 -0
- package/dist/components/FaceLiquify/index.d.ts +10 -0
- package/dist/components/FaceLiquify/material.d.ts +39 -0
- package/dist/components/FaceLiquify/pass.d.ts +49 -0
- package/dist/components/FaceLiquify/presence.d.ts +25 -0
- package/dist/components/FaceLiquify/presets.d.ts +82 -0
- package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
- package/dist/components/FaceLiquify/target.d.ts +85 -0
- package/dist/components/FaceLiquify/warp.d.ts +72 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
- package/dist/components/FaceMesh/index.d.ts +1 -1
- package/dist/components/FaceRetouch/Background.d.ts +3 -1
- package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
- package/dist/components/FaceRetouch/renderState.d.ts +19 -0
- package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
- package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
- package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
- package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
- package/dist/components/FaceSwap/index.d.ts +13 -0
- package/dist/components/FaceSwap/settings.d.ts +300 -0
- package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
- package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
- package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
- package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
- package/dist/components/FaceWarp3D/index.d.ts +2 -3
- package/dist/components/Faceless/Faceless.d.ts +51 -0
- package/dist/components/Faceless/index.d.ts +2 -0
- package/dist/components/HairLock/HairLock.d.ts +39 -0
- package/dist/components/HairLock/index.d.ts +2 -0
- package/dist/components/HairLock/lockGeometry.d.ts +15 -0
- package/dist/components/HandCutout/index.d.ts +35 -0
- package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
- package/dist/components/HandInstruction/index.d.ts +74 -0
- package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
- package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
- package/dist/components/HandRig/HandAttachment.d.ts +34 -0
- package/dist/components/HandRig/HandOccluder.d.ts +55 -0
- package/dist/components/HandRig/HandTattoo.d.ts +61 -0
- package/dist/components/HandRig/WristAttachment.d.ts +34 -0
- package/dist/components/HandRig/index.d.ts +101 -0
- package/dist/components/HandRig/useArmMask.d.ts +29 -0
- package/dist/components/HandRig/wristSolve.d.ts +69 -0
- package/dist/components/HandTouch/HandTouch.d.ts +62 -0
- package/dist/components/HandTouch/Touchable.d.ts +36 -0
- package/dist/components/HandTouch/index.d.ts +2 -0
- package/dist/components/HeadBinding/index.d.ts +14 -0
- package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
- package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
- package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
- package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
- package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
- package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
- package/dist/components/HeadOccluder/index.d.ts +57 -3
- package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
- package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
- package/dist/components/Instruction/HintStage.d.ts +29 -0
- package/dist/components/Instruction/InstructionCue.d.ts +126 -0
- package/dist/components/Instruction/gestureHold.d.ts +20 -0
- package/dist/components/Instruction/ghost.d.ts +129 -0
- package/dist/components/Instruction/hintBlend.d.ts +19 -0
- package/dist/components/Instruction/hintLook.d.ts +81 -0
- package/dist/components/Instruction/hintLoop.d.ts +36 -0
- package/dist/components/Instruction/index.d.ts +41 -0
- package/dist/components/Instruction/useGhostModel.d.ts +33 -0
- package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
- package/dist/components/LipEffect/LipEffect.d.ts +22 -2
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
- package/dist/components/LipEffect/LipEffects.d.ts +5 -2
- package/dist/components/LipEffect/defaults.d.ts +21 -2
- package/dist/components/LipEffect/index.d.ts +1 -1
- package/dist/components/LipEffect/lipShading.d.ts +73 -0
- package/dist/components/LipEffect/settings.d.ts +117 -13
- package/dist/components/LipEffect/shader.d.ts +39 -0
- package/dist/components/LipEffect/types.d.ts +82 -10
- package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
- package/dist/components/LipEffect/uvGuide.d.ts +31 -16
- package/dist/components/Makeup/Blush.d.ts +18 -0
- package/dist/components/Makeup/Brows.d.ts +20 -0
- package/dist/components/Makeup/Contour.d.ts +17 -0
- package/dist/components/Makeup/Eyeliner.d.ts +20 -0
- package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
- package/dist/components/Makeup/Highlighter.d.ts +18 -0
- package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
- package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
- package/dist/components/Makeup/constants.d.ts +44 -0
- package/dist/components/Makeup/design.d.ts +106 -0
- package/dist/components/Makeup/designSamples.d.ts +42 -0
- package/dist/components/Makeup/eyes.d.ts +114 -0
- package/dist/components/Makeup/fields.d.ts +10 -0
- package/dist/components/Makeup/geometry.d.ts +106 -0
- package/dist/components/Makeup/index.d.ts +26 -0
- package/dist/components/Makeup/looks.d.ts +28 -0
- package/dist/components/Makeup/material.d.ts +239 -0
- package/dist/components/Makeup/settings.d.ts +54 -0
- package/dist/components/Makeup/shades.d.ts +143 -0
- package/dist/components/Makeup/shapes.d.ts +27 -0
- package/dist/components/Makeup/skinTone.d.ts +135 -0
- package/dist/components/Makeup/types.d.ts +110 -0
- package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
- package/dist/components/Necklace/Necklace.d.ts +44 -0
- package/dist/components/Necklace/index.d.ts +1 -0
- package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
- package/dist/components/ParticleEmitter/index.d.ts +1 -0
- package/dist/components/ShoulderOccluder/index.d.ts +43 -0
- package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
- package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
- package/dist/components/SpringSwing/index.d.ts +1 -0
- package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/config/index.d.ts +0 -1
- package/dist/context-DTxSQvp4.js +13 -0
- package/dist/context-hA0Rb2Xa.cjs +1 -0
- package/dist/contexts-BH7PdKFS.cjs +1 -0
- package/dist/contexts-jak8-tND.js +667 -0
- package/dist/coordinates/index.d.ts +2 -0
- package/dist/coordinates/side.d.ts +40 -0
- package/dist/debug-ui/default-setting.cjs +2 -2
- package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
- package/dist/debug-ui/index.d.ts +4 -3
- package/dist/debug-ui/media-source/index.d.ts +1 -1
- package/dist/debug-ui/media-source/session.d.ts +30 -2
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
- package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
- package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
- package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
- package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
- package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
- package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
- package/dist/debug-ui/settings-panel/index.d.ts +6 -1
- package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
- package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +2250 -2472
- package/dist/entries/all.d.ts +3 -1
- package/dist/entries/core.d.ts +3 -2
- package/dist/entries/face-effects.d.ts +114 -8
- package/dist/entries/instructions.d.ts +48 -0
- package/dist/entries/internal.d.ts +2 -1
- package/dist/entries/low-level.d.ts +28 -1
- package/dist/entries/particles.d.ts +11 -0
- package/dist/entries/tracking.d.ts +37 -2
- package/dist/face-atlas/attributes.d.ts +30 -0
- package/dist/face-atlas/eyes.d.ts +272 -0
- package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
- package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
- package/dist/face-atlas/glsl/common.d.ts +55 -0
- package/dist/face-atlas/glsl/design.d.ts +49 -0
- package/dist/face-atlas/glsl/eyes.d.ts +73 -0
- package/dist/face-atlas/glsl/finish.d.ts +24 -0
- package/dist/face-atlas/glsl/format.d.ts +4 -0
- package/dist/face-atlas/glsl/index.d.ts +59 -0
- package/dist/face-atlas/glsl/shading.d.ts +15 -0
- package/dist/face-atlas/glsl/shapes.d.ts +66 -0
- package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
- package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
- package/dist/face-atlas/guide.d.ts +51 -0
- package/dist/face-atlas/index.d.ts +25 -0
- package/dist/face-atlas/lead.d.ts +117 -0
- package/dist/face-atlas/madeUpCamera.d.ts +125 -0
- package/dist/face-atlas/masks.d.ts +53 -0
- package/dist/face-atlas/obj.d.ts +69 -0
- package/dist/face-atlas/polylines.d.ts +63 -0
- package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
- package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
- package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
- package/dist/face-atlas/probe/constants.d.ts +137 -0
- package/dist/face-atlas/probe/glsl.d.ts +43 -0
- package/dist/face-atlas/probe/lightFit.d.ts +108 -0
- package/dist/face-atlas/probe/schedule.d.ts +44 -0
- package/dist/face-atlas/probe/selfTest.d.ts +87 -0
- package/dist/face-atlas/probe/stats.d.ts +143 -0
- package/dist/face-atlas/probe/targets.d.ts +70 -0
- package/dist/face-atlas/probe/unwrap.d.ts +76 -0
- package/dist/face-atlas/quality.d.ts +28 -0
- package/dist/face-atlas/regions.d.ts +31 -0
- package/dist/face-atlas/registry.d.ts +252 -0
- package/dist/face-atlas/renderState.d.ts +86 -0
- package/dist/face-atlas/selfOcclusion.d.ts +62 -0
- package/dist/face-atlas/shading.d.ts +406 -0
- package/dist/face-atlas/shapes.d.ts +86 -0
- package/dist/face-atlas/sides.d.ts +41 -0
- package/dist/face-atlas/skinMask.d.ts +35 -0
- package/dist/face-atlas/surface.d.ts +155 -0
- package/dist/face-atlas/topology.d.ts +44 -0
- package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
- package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
- package/dist/face-character/bindFaceModel.d.ts +106 -0
- package/dist/face-character/canonicalFace.d.ts +17 -0
- package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
- package/dist/face-character/canonicalFacePositions.d.ts +7 -0
- package/dist/face-character/driveFaceModel.d.ts +57 -0
- package/dist/face-character/expressionOutputs.d.ts +45 -0
- package/dist/face-character/faceExpressions.d.ts +104 -0
- package/dist/face-character/faceImageLandmarker.d.ts +93 -0
- package/dist/face-character/faceMeshBinding.d.ts +62 -0
- package/dist/face-character/faceMorph.d.ts +77 -0
- package/dist/face-character/faceMorphs.d.ts +46 -0
- package/dist/face-character/facePhoto.d.ts +138 -0
- package/dist/face-character/facePiercings.d.ts +116 -0
- package/dist/face-character/facePin.d.ts +131 -0
- package/dist/face-character/faceReprojection.d.ts +273 -0
- package/dist/face-character/faceReprojector.d.ts +171 -0
- package/dist/face-character/faceRig.d.ts +176 -0
- package/dist/face-character/faceSwapPresence.d.ts +85 -0
- package/dist/face-character/faceTexture.d.ts +169 -0
- package/dist/face-character/faceTextureBaker.d.ts +86 -0
- package/dist/face-character/faceTextureGuide.d.ts +106 -0
- package/dist/face-character/faceTextureStats.d.ts +298 -0
- package/dist/face-character/faceTransfer.d.ts +396 -0
- package/dist/face-character/faceTransferGeometry.d.ts +109 -0
- package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
- package/dist/face-character/faceWarp3D.d.ts +101 -0
- package/dist/face-character/faceless.d.ts +79 -0
- package/dist/face-character/featureWarp.d.ts +28 -0
- package/dist/face-character/liveFaceRegistry.d.ts +370 -0
- package/dist/face-character/liveValue.d.ts +12 -0
- package/dist/face-character/memo.d.ts +15 -0
- package/dist/face-effects.cjs +2252 -83
- package/dist/face-effects.js +14234 -1231
- package/dist/face-expression/index.d.ts +182 -0
- package/dist/face-info/landmarks.d.ts +17 -3
- package/dist/face-info/types.d.ts +20 -3
- package/dist/gestures/definitions.d.ts +15 -2
- package/dist/gestures/index.d.ts +1 -1
- package/dist/gestures/measures.d.ts +21 -8
- package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
- package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
- package/dist/hand/armFit.d.ts +46 -0
- package/dist/hand/armMask.d.ts +178 -0
- package/dist/hand/handCutout.d.ts +23 -0
- package/dist/hand/handCutoutRegistry.d.ts +7 -0
- package/dist/hand/handGestures.d.ts +524 -0
- package/dist/hand/handPose.d.ts +98 -0
- package/dist/hand/handRigSolver.d.ts +159 -0
- package/dist/hand/handTattoo.d.ts +81 -0
- package/dist/hand/handTouch.d.ts +240 -0
- package/dist/hand/wrist.d.ts +44 -0
- package/dist/hand/wristFilter.d.ts +44 -0
- package/dist/hooks/selectors.d.ts +8 -0
- package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
- package/dist/hooks/useTrackerContext.d.ts +6 -0
- package/dist/index-B1_TzJaI.js +1104 -0
- package/dist/index-BavF06C6.js +190 -0
- package/dist/index-BfFmpddl.cjs +21 -0
- package/dist/index-BuBzneeW.cjs +46 -0
- package/dist/index-CGsQWodV.cjs +1 -0
- package/dist/index-CIe7eCMH.js +3200 -0
- package/dist/index-CfSF8LXa.cjs +1 -0
- package/dist/index-D5GTzOzD.cjs +1 -0
- package/dist/index-DBhQzvVa.js +314 -0
- package/dist/index-DE17y0ZI.cjs +1 -0
- package/dist/index-JII7huPk.js +442 -0
- package/dist/index-tpCr9CLj.cjs +1 -0
- package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
- package/dist/index-zGaqrz_K.js +188 -0
- package/dist/instructions.cjs +30 -0
- package/dist/instructions.js +1507 -0
- package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
- package/dist/internal-Cjinca64.cjs +1 -0
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +15 -10
- package/dist/iris/compute.d.ts +7 -5
- package/dist/iris/types.d.ts +6 -4
- package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
- package/dist/landmarks-BlUqf5MZ.cjs +1 -0
- package/dist/landmarks-bftdwq6Z.js +76 -0
- package/dist/loaders-BGAUACsd.js +363 -0
- package/dist/loaders-BJ1_QCHt.cjs +1 -0
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +666 -602
- package/dist/main.cjs +1 -1
- package/dist/main.js +866 -1182
- package/dist/models/Body/index.d.ts +2 -0
- package/dist/models/Face/constants.d.ts +8 -0
- package/dist/models/Face/index.d.ts +3 -11
- package/dist/models/Face/rotation.d.ts +18 -3
- package/dist/models/Hand/HandTracking.d.ts +17 -1
- package/dist/models/Segmentation/index.d.ts +2 -0
- package/dist/models/nodeSource.d.ts +9 -0
- package/dist/particles/emission.d.ts +24 -0
- package/dist/particles/eyes.d.ts +24 -0
- package/dist/particles/glsl.d.ts +14 -0
- package/dist/particles/index.d.ts +10 -0
- package/dist/particles/motion.d.ts +42 -0
- package/dist/particles/presets.d.ts +12 -0
- package/dist/particles/ring.d.ts +58 -0
- package/dist/particles/selfTest.d.ts +53 -0
- package/dist/particles/settings.d.ts +127 -0
- package/dist/particles/shapes.d.ts +29 -0
- package/dist/particles/spawner.d.ts +60 -0
- package/dist/particles/system.d.ts +64 -0
- package/dist/particles.cjs +122 -0
- package/dist/particles.js +774 -0
- package/dist/product.cjs +1 -1
- package/dist/product.js +29 -29
- package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
- package/dist/providers-DHsrhDI2.cjs +62 -0
- package/dist/render/renderPasses.d.ts +8 -0
- package/dist/render/sceneBeforeRender.d.ts +12 -0
- package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
- package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
- package/dist/renderPasses-B6l8IpJv.js +1290 -0
- package/dist/renderPasses-dqmkft4P.cjs +158 -0
- package/dist/renderState-CJNmj5jz.js +39 -0
- package/dist/renderState-apSfg4eR.cjs +1 -0
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/segmentation-Cb3ouK6Z.js +1758 -0
- package/dist/segmentation-D9pYO6aR.cjs +1 -0
- package/dist/segmentation2d/types.d.ts +6 -0
- package/dist/select-Ck5LGz-J.cjs +1 -0
- package/dist/select-pYRo_win.js +233 -0
- package/dist/selectors-C4X71aoD.cjs +1 -0
- package/dist/selectors-DmNaKIwE.js +196 -0
- package/dist/session-BrH8G7iJ.cjs +31 -0
- package/dist/session-DgA_z6O1.js +418 -0
- package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
- package/dist/settings-C63FMBlF.cjs +1 -0
- package/dist/similarityFit-BFqHND2e.cjs +1 -0
- package/dist/similarityFit-Bbz-R8AY.js +91 -0
- package/dist/spring/index.d.ts +2 -0
- package/dist/spring/spring.d.ts +69 -0
- package/dist/spring/swing.d.ts +54 -0
- package/dist/tracking.cjs +10 -1
- package/dist/tracking.js +1002 -855
- package/dist/trigger-D0Pm9noT.cjs +49 -0
- package/dist/trigger-IQeys0oS.js +2128 -0
- package/dist/types/face.d.ts +20 -1
- package/dist/types/hand-tracking.d.ts +9 -0
- package/dist/types/nodes.d.ts +20 -1
- package/dist/types/segmentation.d.ts +5 -0
- package/dist/updateThrottle-BseecYag.js +4 -0
- package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
- package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
- package/dist/useFaceInfo-J4x7LsqL.js +76 -0
- package/dist/useFaceResultReader-BvEo5REG.js +61 -0
- package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
- package/dist/useInstructionHold-DOu-RpCM.js +53 -0
- package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
- package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
- package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
- package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
- package/dist/utils/headOccluderFit.d.ts +42 -0
- package/dist/utils/integrity.d.ts +17 -0
- package/dist/utils/resolveNumFaces.d.ts +13 -0
- package/dist/utils/shoulderOccluderFit.d.ts +38 -0
- package/dist/utils/similarityFit.d.ts +23 -0
- package/dist/uv-BMFt19bg.cjs +1 -0
- package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
- package/docs/SDK_DOCUMENTATION.md +1 -2
- package/docs/api/adaptive-quality.mdx +1 -1
- package/docs/api/body-instructions.mdx +285 -0
- package/docs/api/body-triggers.mdx +234 -0
- package/docs/api/camera-permission.mdx +1 -1
- package/docs/api/coordinate-spaces.mdx +7 -4
- package/docs/api/cross-camera.mdx +3 -2
- package/docs/api/debug-ui-scene-editor.mdx +23 -2
- package/docs/api/external-face-mesh.mdx +231 -0
- package/docs/api/face-actions.mdx +20 -16
- package/docs/api/face-attribute-expression.mdx +1 -1
- package/docs/api/face-binding-anchors.mdx +4 -2
- package/docs/api/face-character.mdx +157 -0
- package/docs/api/face-effects.mdx +3 -0
- package/docs/api/face-expression-controller.mdx +153 -0
- package/docs/api/face-info.mdx +17 -11
- package/docs/api/face-inset.mdx +204 -0
- package/docs/api/face-instructions.mdx +183 -0
- package/docs/api/face-liquify.mdx +196 -0
- package/docs/api/face-mesh.mdx +4 -7
- package/docs/api/face-morph.mdx +117 -0
- package/docs/api/face-painting.mdx +7 -0
- package/docs/api/face-reprojection.mdx +154 -0
- package/docs/api/face-retouching.mdx +18 -10
- package/docs/api/face-swap.mdx +350 -0
- package/docs/api/face-warp-3d.mdx +166 -0
- package/docs/api/faceless.mdx +143 -0
- package/docs/api/gestures.mdx +68 -32
- package/docs/api/hair.mdx +97 -0
- package/docs/api/hand-instructions.mdx +222 -0
- package/docs/api/hand-rig.mdx +535 -0
- package/docs/api/hand-touch.mdx +162 -0
- package/docs/api/head-occluder.mdx +563 -0
- package/docs/api/holistic-tracker.mdx +6 -1
- package/docs/api/instructions.mdx +323 -0
- package/docs/api/iris-tracking.mdx +24 -19
- package/docs/api/made-up-camera.mdx +131 -0
- package/docs/api/makeup-skin-tone.mdx +135 -0
- package/docs/api/makeup.mdx +353 -0
- package/docs/api/multi-subject.mdx +4 -1
- package/docs/api/particles.mdx +155 -0
- package/docs/api/person-cutout.mdx +1 -1
- package/docs/api/pin-to-face-mesh.mdx +274 -0
- package/docs/api/product-ar.mdx +5 -2
- package/docs/api/segmentation-overlay.mdx +1 -1
- package/docs/docs.json +29 -1
- package/docs/examples/lip-shaders.mdx +82 -33
- package/docs/guides/face-atlas-template.svg +1 -0
- package/docs/guides/face-atlas-textures.mdx +186 -0
- package/docs/guides/face-texture-template.svg +1 -0
- package/docs/guides/harness-debug-ui.mdx +4 -4
- package/docs/guides/lip-effect-textures.mdx +178 -102
- package/docs/guides/lip-uv-template.png +0 -0
- package/docs/guides/lip-uv-template.svg +1 -1
- package/docs/guides/makeup-design-textures.mdx +109 -0
- package/docs/introduction.mdx +1 -2
- package/package.json +11 -1
- package/dist/DebuggerUI-C-ldiozL.js +0 -269
- package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
- package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
- package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
- package/dist/FaceRetouch-C7h7x9kd.js +0 -683
- package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
- package/dist/GLTFLoader-C5q63sKO.js +0 -1633
- package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
- package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
- package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
- package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
- package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
- package/dist/components/FaceWarp3D/warp.d.ts +0 -13
- package/dist/contexts-CO0sd4JQ.cjs +0 -1
- package/dist/contexts-FzlnnMYD.js +0 -669
- package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
- package/dist/getFaceInfo-BkZfaQs-.js +0 -118
- package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
- package/dist/index--RgGzZ6X.cjs +0 -47
- package/dist/index-CHVbH0hz.js +0 -214
- package/dist/index-CeVkgsag.cjs +0 -1
- package/dist/index-CnGox6Xr.js +0 -3054
- package/dist/index-DKBAh6hV.cjs +0 -1
- package/dist/index-DsZwTfG0.cjs +0 -1
- package/dist/index-Dw6tj2Mi.js +0 -144
- package/dist/index-OCPjOaeP.cjs +0 -1
- package/dist/index-s9pF4zkG.js +0 -2053
- package/dist/internal-BYza1h8_.cjs +0 -1
- package/dist/measures-9dQPdw96.js +0 -154
- package/dist/measures-KfJzpvod.cjs +0 -1
- package/dist/providers-YNwkmNeK.cjs +0 -62
- package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
- package/dist/screenTransform-BenfCtZt.js +0 -44
- package/dist/screenTransform-BiXdpVf0.cjs +0 -1
- package/dist/segmentation-9PhSvc-R.cjs +0 -1
- package/dist/segmentation-CeOTKemr.js +0 -5
- package/dist/selectors-C5G1PMYL.js +0 -195
- package/dist/selectors-Du_PsVnW.cjs +0 -1
- package/dist/session-BBr0yN8h.cjs +0 -31
- package/dist/session-Cy0m7l7-.js +0 -363
- package/dist/settings-DRR7-snV.cjs +0 -1
- package/dist/useFaceInfo-Blf7FCu3.js +0 -303
- package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { jsx as v, jsxs as D } from "react/jsx-runtime";
|
|
2
|
+
import { useThree as U, useFrame as P } from "@react-three/fiber";
|
|
3
|
+
import L, { useRef as m, useMemo as g, useEffect as B, useContext as K, createContext as W, useCallback as I } from "react";
|
|
4
|
+
import * as R from "three";
|
|
5
|
+
import { o as Y, X as O, k as G } from "./index-CIe7eCMH.js";
|
|
6
|
+
import { a as Q, F as J, R as $ } from "./uv-DJU_XfmN.js";
|
|
7
|
+
import { u as H, r as ee } from "./landmarks-bftdwq6Z.js";
|
|
8
|
+
const te = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PURE__ */ v("meshBasicMaterial", { ...e }) : /* @__PURE__ */ v(
|
|
9
|
+
"meshStandardMaterial",
|
|
10
|
+
{
|
|
11
|
+
...e,
|
|
12
|
+
roughness: t.roughness,
|
|
13
|
+
metalness: t.metalness
|
|
14
|
+
}
|
|
15
|
+
), S = 1e-6, re = (e) => {
|
|
16
|
+
const { x: t, y: r, z: a } = e.scale;
|
|
17
|
+
return Math.abs(t - r) <= S && Math.abs(t - a) <= S ? t : 1;
|
|
18
|
+
}, Ae = (e, t, r, a) => {
|
|
19
|
+
if (!r.enabled) return e;
|
|
20
|
+
const s = re(r);
|
|
21
|
+
return a.x = t.x + (e.x - t.x) * s + r.position.x, a.y = t.y + (e.y - t.y) * s - r.position.y, a.z = t.z + (e.z - t.z) * s + r.position.z, a;
|
|
22
|
+
}, ne = (e, t, r) => Y(e, t, r), he = (e, t, r) => {
|
|
23
|
+
const a = (e.x - 0.5) * 2, s = (0.5 - e.y) * 2, d = R.MathUtils.clamp(e.z * 2, -1, 1);
|
|
24
|
+
return r.set(a, s, d).unproject(t);
|
|
25
|
+
}, oe = (e, t, r, a, s, d) => {
|
|
26
|
+
const M = Math.min(t, e.length);
|
|
27
|
+
for (let h = 0; h < M; h++) {
|
|
28
|
+
s(e[h], a, d);
|
|
29
|
+
const o = h * 3;
|
|
30
|
+
r[o] = d.x, r[o + 1] = d.y, r[o + 2] = d.z;
|
|
31
|
+
}
|
|
32
|
+
return M;
|
|
33
|
+
}, V = 468, se = V * 3, ae = {
|
|
34
|
+
type: "standard",
|
|
35
|
+
color: "#ffffff",
|
|
36
|
+
opacity: 1,
|
|
37
|
+
wireframe: !1,
|
|
38
|
+
roughness: 1,
|
|
39
|
+
metalness: 0
|
|
40
|
+
}, j = ({
|
|
41
|
+
material: e,
|
|
42
|
+
faceIndex: t = 0,
|
|
43
|
+
numFaces: r,
|
|
44
|
+
visible: a = !0,
|
|
45
|
+
children: s
|
|
46
|
+
}) => {
|
|
47
|
+
const { ready: d, node: M } = H(
|
|
48
|
+
O.FACE_TRACKER,
|
|
49
|
+
r === void 0 ? void 0 : { numFaces: r }
|
|
50
|
+
), { camera: h } = U(), o = m(null), b = m(null), x = m(null), p = m(null), C = m(null), E = m(new R.Vector3()), u = g(() => {
|
|
51
|
+
const l = new Uint16Array(J), f = new R.BufferAttribute(l, 1), c = new R.Float32BufferAttribute(Q, 2), y = new R.Float32BufferAttribute(
|
|
52
|
+
new Float32Array(se),
|
|
53
|
+
3
|
|
54
|
+
);
|
|
55
|
+
y.setUsage(R.DynamicDrawUsage);
|
|
56
|
+
const n = y.array;
|
|
57
|
+
return { indexAttr: f, uvAttr: c, positionAttr: y, positions: n };
|
|
58
|
+
}, []);
|
|
59
|
+
B(() => {
|
|
60
|
+
p.current = u.indexAttr, C.current = u.uvAttr, x.current = u.positionAttr, b.current = u.positions;
|
|
61
|
+
const l = o.current;
|
|
62
|
+
if (l) {
|
|
63
|
+
const f = l.geometry;
|
|
64
|
+
f.setAttribute("position", u.positionAttr), f.setAttribute("uv", u.uvAttr), f.setIndex(u.indexAttr);
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
p.current = null, C.current = null, x.current = null, b.current = null;
|
|
68
|
+
};
|
|
69
|
+
}, [u]), P(() => {
|
|
70
|
+
var A;
|
|
71
|
+
if (!d || !M || !o.current) return;
|
|
72
|
+
const { detectionResults: l } = M, f = (A = l == null ? void 0 : l.faceLandmarks) == null ? void 0 : A[t], c = o.current.geometry, y = b.current, n = x.current;
|
|
73
|
+
if (!f || f.length === 0 || !y || !n) {
|
|
74
|
+
c.drawRange.count !== 0 && c.setDrawRange(0, 0);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
c.getAttribute("position") !== n && (c.setAttribute("position", n), c.setAttribute("uv", C.current), c.setIndex(p.current)), c.drawRange.count === 0 && c.setDrawRange(0, 1 / 0), oe(
|
|
78
|
+
f,
|
|
79
|
+
V,
|
|
80
|
+
y,
|
|
81
|
+
h,
|
|
82
|
+
ne,
|
|
83
|
+
E.current
|
|
84
|
+
), n.needsUpdate = !0, c.computeVertexNormals();
|
|
85
|
+
});
|
|
86
|
+
const _ = s != null && s !== !1;
|
|
87
|
+
return /* @__PURE__ */ D("mesh", { material: e, ref: o, visible: a, children: [
|
|
88
|
+
/* @__PURE__ */ v("bufferGeometry", {}),
|
|
89
|
+
!e && !_ && /* @__PURE__ */ v(
|
|
90
|
+
te,
|
|
91
|
+
{
|
|
92
|
+
settings: ae,
|
|
93
|
+
materialProps: {
|
|
94
|
+
attach: "material",
|
|
95
|
+
transparent: !0,
|
|
96
|
+
depthWrite: !1,
|
|
97
|
+
side: R.DoubleSide,
|
|
98
|
+
needsUpdate: !0
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
!e && _ ? s : null
|
|
103
|
+
] });
|
|
104
|
+
};
|
|
105
|
+
j.displayName = "FaceMesh";
|
|
106
|
+
const X = W(null), ye = () => K(X), N = new R.Euler(), ce = ({
|
|
107
|
+
faceIndex: e = 0,
|
|
108
|
+
numFaces: t,
|
|
109
|
+
scaleWithFace: r = !1,
|
|
110
|
+
followFaceRoll: a = !0,
|
|
111
|
+
targetFps: s,
|
|
112
|
+
active: d = !0,
|
|
113
|
+
children: M
|
|
114
|
+
}) => {
|
|
115
|
+
const h = m(null), o = m(null), b = g(() => {
|
|
116
|
+
if (!(t === void 0 && s === void 0))
|
|
117
|
+
return {
|
|
118
|
+
...t === void 0 ? {} : { numFaces: t },
|
|
119
|
+
...s === void 0 ? {} : { targetFps: s }
|
|
120
|
+
};
|
|
121
|
+
}, [t, s]), { ready: x, node: p } = H(
|
|
122
|
+
O.FACE_TRACKER,
|
|
123
|
+
b,
|
|
124
|
+
d
|
|
125
|
+
), { camera: C } = U(), E = m(C);
|
|
126
|
+
E.current = C;
|
|
127
|
+
const u = m(null), _ = m({ x: 0, y: 0, z: 0, visibility: 0 });
|
|
128
|
+
P(() => {
|
|
129
|
+
if (!x || !p || !o.current) return;
|
|
130
|
+
u.current = p;
|
|
131
|
+
const n = h.current;
|
|
132
|
+
E.current && ((n == null ? void 0 : n.node) !== p || n.faceIndex !== e || n.camera !== E.current) && (p.setCamera(E.current, e), h.current = {
|
|
133
|
+
node: p,
|
|
134
|
+
faceIndex: e,
|
|
135
|
+
camera: E.current
|
|
136
|
+
});
|
|
137
|
+
const A = p.getFace(e);
|
|
138
|
+
if (!A) {
|
|
139
|
+
o.current.visible = !1;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
o.current.visible = !0;
|
|
143
|
+
const { position: i, quaternion: T, scale: F } = A.transform;
|
|
144
|
+
o.current.position.set(i.x, i.y, i.z), o.current.quaternion.copy(T), a || (N.setFromQuaternion(T, "XYZ"), N.z = 0, o.current.quaternion.setFromEuler(N)), r ? o.current.scale.set(F.x, F.y, F.z) : o.current.scale.set(1, 1, 1);
|
|
145
|
+
});
|
|
146
|
+
const l = I(
|
|
147
|
+
(n, A) => {
|
|
148
|
+
var k, w, z;
|
|
149
|
+
const i = u.current, T = (w = (k = i == null ? void 0 : i.detectionResults) == null ? void 0 : k.faceLandmarks) == null ? void 0 : w[e];
|
|
150
|
+
if (!T || T.length === 0) return null;
|
|
151
|
+
const F = ee(
|
|
152
|
+
n,
|
|
153
|
+
T,
|
|
154
|
+
A,
|
|
155
|
+
_.current,
|
|
156
|
+
((z = i == null ? void 0 : i.getFace(e)) == null ? void 0 : z.mirrored) !== !1
|
|
157
|
+
);
|
|
158
|
+
return F ? { position: G(F, E.current) } : null;
|
|
159
|
+
},
|
|
160
|
+
[e]
|
|
161
|
+
), f = g(
|
|
162
|
+
() => ({ type: "face", resolveLandmark: l, faceIndex: e }),
|
|
163
|
+
[l, e]
|
|
164
|
+
);
|
|
165
|
+
let c;
|
|
166
|
+
const y = [];
|
|
167
|
+
return L.Children.forEach(M, (n) => {
|
|
168
|
+
var A, i;
|
|
169
|
+
L.isValidElement(n) && // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
170
|
+
(((A = n.type) == null ? void 0 : A.displayName) === "FaceTracker.Mesh" || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
171
|
+
((i = n.type) == null ? void 0 : i.displayName) === "FaceMesh") ? c = L.cloneElement(n, { faceIndex: e, numFaces: t }) : y.push(n);
|
|
172
|
+
}), /* @__PURE__ */ D(X.Provider, { value: f, children: [
|
|
173
|
+
/* @__PURE__ */ v("group", { ref: o, renderOrder: $.TRACKED, children: y }),
|
|
174
|
+
c
|
|
175
|
+
] });
|
|
176
|
+
}, Z = (e) => /* @__PURE__ */ v(j, { ...e });
|
|
177
|
+
Z.displayName = "FaceTracker.Mesh";
|
|
178
|
+
const q = ce;
|
|
179
|
+
q.Mesh = Z;
|
|
180
|
+
const Ee = q;
|
|
181
|
+
export {
|
|
182
|
+
q as F,
|
|
183
|
+
Ee as H,
|
|
184
|
+
te as M,
|
|
185
|
+
X as T,
|
|
186
|
+
j as a,
|
|
187
|
+
he as p,
|
|
188
|
+
Ae as t,
|
|
189
|
+
ye as u
|
|
190
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";const Ce=require("./index-tpCr9CLj.cjs"),re=require("@react-three/fiber"),h=require("react"),d=require("three"),Le=require("./index-CfSF8LXa.cjs"),v=require("./index-D5GTzOzD.cjs"),I=require("./renderPasses-dqmkft4P.cjs"),p=require("react/jsx-runtime"),Ne=require("@react-three/drei"),J=require("./context-hA0Rb2Xa.cjs");function Ue(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const ee=Ue(d),ae={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},Ie=({color:e="#22d3ee",controlScale:t=[1,1,1],handleColor:n="#ffffff",onHandlePointerDown:o,opacity:r=.9,pivot:s=[.5,.5],pivotScale:a=t,renderOrder:i,showSideHandles:l=!0,thickness:f=.004})=>{const m=p.jsx("meshBasicMaterial",{color:e,transparent:!0,opacity:r,depthTest:!1,depthWrite:!1,toneMapped:!1}),b=p.jsx("meshBasicMaterial",{color:n,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1}),w=Math.max(f*7,.028),E=Math.max(f*7,.03),O=Math.max(f*8,.032),S=.04,c=.06,y=.08,x=.1,u=i??0,j=[["topLeft",-.5,.5],["topRight",.5,.5],["bottomLeft",-.5,-.5],["bottomRight",.5,-.5],...l?[["top",0,.5],["bottom",0,-.5],["left",-.5,0],["right",.5,0]]:[]],D=[["rotateTopLeft",-.56,.56,0],["rotateTopRight",.56,.56,-Math.PI/2],["rotateBottomRight",.56,-.56,Math.PI],["rotateBottomLeft",-.56,-.56,Math.PI/2]],g=T=>o?P=>{P.stopPropagation(),document.body.style.cursor=T==="move"?"grabbing":ae[T],o(T,P)}:void 0,M=T=>{o&&(document.body.style.cursor=ae[T])},_=()=>{o&&(document.body.style.cursor="")},R=[s[0]-.5,s[1]-.5,x];return p.jsxs("group",{renderOrder:u,children:[p.jsxs("mesh",{position:[0,.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),m]}),p.jsxs("mesh",{position:[0,-.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),m]}),p.jsxs("mesh",{position:[-.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),m]}),p.jsxs("mesh",{position:[.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),m]}),p.jsxs("mesh",{position:[0,0,c],renderOrder:u+1,onPointerDown:g("move"),onPointerOver:()=>M("move"),onPointerOut:_,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),j.map(([T,P,F])=>p.jsxs("mesh",{position:[P,F,y],scale:[w*t[0],w*t[1],t[2]],renderOrder:u+2,onPointerDown:g(T),onPointerOver:()=>M(T),onPointerOut:_,children:[p.jsx("planeGeometry",{args:[1,1]}),b]},T)),D.map(([T,P,F,k])=>p.jsx("group",{position:[P,F,y+.01],rotation:[0,0,k],scale:[O*t[0],O*t[1],t[2]],renderOrder:u+3,onPointerDown:g(T),onPointerOver:()=>M(T),onPointerOut:_,children:p.jsxs("mesh",{renderOrder:u+3,children:[p.jsx("planeGeometry",{args:[1.9,1.9]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]})},T)),p.jsx("group",{position:R,scale:[E*a[0],E*a[1],a[2]],renderOrder:u+5,onPointerDown:g("pivot"),onPointerOver:()=>M("pivot"),onPointerOut:_,children:p.jsxs("group",{rotation:[0,0,Math.PI/4],children:[p.jsxs("mesh",{scale:[1.8,1.8,1],renderOrder:u+5,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),p.jsxs("mesh",{position:[0,0,.002],renderOrder:u+6,children:[p.jsx("planeGeometry",{args:[1,1]}),b]}),p.jsxs("mesh",{scale:[.62,.62,1],position:[0,0,.004],renderOrder:u+7,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{color:"#111827",transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1})]})]})})]})},A=e=>Math.round(e*2)/2,ce=e=>Math.min(1,Math.max(0,e)),Y={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},We=[["topLeft",0,0],["top",.5,0],["topRight",1,0],["right",1,.5],["bottomRight",1,1],["bottom",.5,1],["bottomLeft",0,1],["left",0,.5]],Ge=[["rotateTopLeft",-.03,-.03],["rotateTopRight",1.03,-.03],["rotateBottomRight",1.03,1.03],["rotateBottomLeft",-.03,1.03]],ke=(e,t)=>{const n=v.resolveScreenTransform2D({transform:t,parentSize:{width:e.width,height:e.height}}),o=Math.min(e.width/v.DEFAULT_SCREEN_TRANSFORM_ROOT.width,e.height/v.DEFAULT_SCREEN_TRANSFORM_ROOT.height)*(v.DEFAULT_REFERENCE_PIXELS_PER_UNIT/Math.max(t.referencePixelsPerUnit,1e-6))||1,r=v.DEFAULT_SCREEN_TRANSFORM_ROOT.width*o,s=v.DEFAULT_SCREEN_TRANSFORM_ROOT.height*o,a=e.left+(e.width-r)/2,i=e.top+(e.height-s)/2,l=a+r/2,f=i+s/2,m=n.size[0],b=n.size[1],w=l+n.center[0],E=f-n.center[1];return{centerX:w,centerY:E,height:b,left:w-m/2,scale:o,top:E-b/2,width:m}},Xe=(e,t,n,o)=>{const r=v.DEFAULT_SCREEN_TRANSFORM_ROOT.width*o,s=v.DEFAULT_SCREEN_TRANSFORM_ROOT.height*o,a=n.left+(n.width-r)/2,i=n.top+(n.height-s)/2;return{x:(e-(a+r/2))/o,y:(i+s/2-t)/o}},Be=({color:e="#38bdf8",handleColor:t="#ffffff",onChange:n,transform:o})=>{const r=h.useRef(n);r.current=n;const{gl:s}=re.useThree(),[a,i]=h.useState(null),l=h.useRef(null),f=h.useRef(null),m=h.useCallback(()=>{i(s.domElement.getBoundingClientRect())},[s.domElement]);h.useEffect(()=>(m(),window.addEventListener("resize",m),window.addEventListener("scroll",m,!0),()=>{window.removeEventListener("resize",m),window.removeEventListener("scroll",m,!0)}),[m]);const b=h.useMemo(()=>a?ke(a,o):null,[a,o]),w=h.useCallback(S=>{const c=l.current,y=r.current;if(!c||!y)return;const x=(S.clientX-c.startX)/c.scale,u=-(S.clientY-c.startY)/c.scale,j={x:c.startPointerDesign.x+x,y:c.startPointerDesign.y+u},D={...c.startTransform,position:{...c.startTransform.position},size:{...c.startTransform.size},pivot:[...c.startTransform.pivot]};if(c.handle==="move")D.position={x:A(c.startTransform.position.x+x),y:A(c.startTransform.position.y+u)};else if(c.handle==="pivot"){const g=Math.max(1,c.startTransform.size.width*c.startTransform.scale2D.x),M=Math.max(1,c.startTransform.size.height*c.startTransform.scale2D.y),_=ce(c.startTransform.pivot[0]+x/g),R=ce(c.startTransform.pivot[1]+u/M);D.pivot=[A(_*1e3)/1e3,A(R*1e3)/1e3],D.position={x:A(c.startTransform.position.x+(D.pivot[0]-c.startTransform.pivot[0])*g),y:A(c.startTransform.position.y+(D.pivot[1]-c.startTransform.pivot[1])*M)}}else if(c.handle.startsWith("rotate")){const g=Math.atan2(c.startPointerDesign.y-c.startTransform.position.y,c.startPointerDesign.x-c.startTransform.position.x),M=Math.atan2(j.y-c.startTransform.position.y,j.x-c.startTransform.position.x);D.rotation=A(c.startTransform.rotation+(M-g)*180/Math.PI)}else{const g=c.handle==="left"||c.handle.endsWith("Left"),M=c.handle==="right"||c.handle.endsWith("Right"),_=c.handle==="top"||c.handle.startsWith("top"),R=c.handle==="bottom"||c.handle.startsWith("bottom"),T=M?x*2:g?-x*2:0,P=_?u*2:R?-u*2:0;D.size={width:Math.max(1,A(c.startTransform.size.width+T)),height:Math.max(1,A(c.startTransform.size.height+P))}}y(D)},[]),E=h.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",E)},[w]);h.useEffect(()=>E,[E]);const O=h.useCallback((S,c)=>{!a||!b||!n||(c.preventDefault(),document.body.style.cursor=S==="move"?"grabbing":Y[S],l.current={handle:S,startX:c.clientX,startY:c.clientY,startPointerDesign:Xe(c.clientX,c.clientY,a,b.scale),startTransform:o,scale:b.scale},window.addEventListener("pointermove",w),window.addEventListener("pointerup",E))},[a,b,n,E,o,w]);return h.useEffect(()=>{if(typeof document>"u")return;const S=document.createElement("div");return document.body.appendChild(S),f.current=S,()=>{S.remove(),f.current=null}},[]),h.useEffect(()=>{const S=f.current;if(!S||(S.replaceChildren(),!b))return;const c=12,y=12,x=document.createElement("div");Object.assign(x.style,{position:"fixed",inset:"0",zIndex:"19999",pointerEvents:"none"});const u=document.createElement("div");Object.assign(u.style,{position:"absolute",left:`${b.left}px`,top:`${b.top}px`,width:`${b.width}px`,height:`${b.height}px`,border:`1px solid ${e}`,boxSizing:"border-box",transform:`rotate(${-o.rotation}deg)`,transformOrigin:`${o.pivot[0]*100}% ${(1-o.pivot[1])*100}%`,pointerEvents:n?"auto":"none",cursor:Y.move}),u.addEventListener("pointerdown",g=>O("move",g));const j=(g,M,_,R,T="translate(-50%, -50%)")=>{const P=document.createElement("div");return Object.assign(P.style,{position:"absolute",left:`${M*100}%`,top:`${_*100}%`,width:`${R}px`,height:`${R}px`,cursor:Y[g],transform:T,pointerEvents:"auto"}),P.addEventListener("pointerdown",F=>{F.stopPropagation(),O(g,F)}),P};for(const[g,M,_]of We){const R=j(g,M,_,c);R.style.background=t,u.appendChild(R)}for(const[g,M,_]of Ge)u.appendChild(j(g,M,_,26));const D=j("pivot",o.pivot[0],1-o.pivot[1],y,"translate(-50%, -50%) rotate(45deg)");return Object.assign(D.style,{border:"2px solid #ffffff",background:"#111827",boxSizing:"border-box"}),u.appendChild(D),x.appendChild(u),S.appendChild(x),()=>{S.replaceChildren()}},[e,t,b,n,O,o]),null},X={enabled:!1,targetObjectId:null,orientation:"none",uv:{x:.5,y:.5},vertexNormal:!1,offsetSpace:"local",offsetPosition:{x:0,y:0,z:0},offsetRotation:{x:0,y:0,z:0}},Ve=(e,t,n,o)=>{const r=n.clone().sub(t),s=o.clone().sub(t),a=e.clone().sub(t),i=r.x*s.y-s.x*r.y;if(Math.abs(i)<1e-8)return null;const l=(a.x*s.y-s.x*a.y)/i,f=(r.x*a.y-a.x*r.y)/i,m=1-l-f;return m>=-1e-5&&l>=-1e-5&&f>=-1e-5?[m,l,f]:null},Ye=(e,t,n=!1)=>{const o=new d.Vector2(t.x,t.y),r=new d.Vector2,s=new d.Vector2,a=new d.Vector2,i=new d.Vector3,l=new d.Vector3,f=new d.Vector3,m=new d.Vector3,b=new d.Vector3,w=new d.Vector3;let E=null;if(e.traverse(S=>{var M,_;if(E||!S.isMesh)return;const c=S,y=c.geometry,x=(M=y==null?void 0:y.attributes)==null?void 0:M.position,u=(_=y==null?void 0:y.attributes)==null?void 0:_.uv;if(!x||!u)return;const j=y.attributes.normal,D=y.index,g=R=>(D==null?void 0:D.getX(R))??R;for(let R=0;R<(D?D.count:x.count);R+=3){const T=[g(R),g(R+1),g(R+2)];r.set(u.getX(T[0]),u.getY(T[0])),s.set(u.getX(T[1]),u.getY(T[1])),a.set(u.getX(T[2]),u.getY(T[2]));const P=Ve(o,r,s,a);if(P){i.set(0,0,0),l.set(0,0,0),T.forEach((F,k)=>{f.fromBufferAttribute(x,F),i.addScaledVector(f,P[k]),j&&n&&l.addScaledVector(f.fromBufferAttribute(j,F),P[k])}),n||(m.fromBufferAttribute(x,T[0]),b.fromBufferAttribute(x,T[1]),w.fromBufferAttribute(x,T[2]),l.copy(b.sub(m).cross(w.sub(m)).normalize())),E={mesh:c,localPosition:i.clone(),localNormal:l.clone().normalize()};break}}}),E)return E;const O=new d.Box3().setFromObject(e);return{mesh:e,localPosition:e.worldToLocal(O.getCenter(new d.Vector3)),localNormal:new d.Vector3(0,1,0)}},He=e=>({position:e.mesh.localToWorld(e.localPosition.clone()),normal:e.localNormal.clone().transformDirection(e.mesh.matrixWorld).normalize()}),N=(e,t=0)=>Number.isFinite(e)?e:t,H=new d.Vector3,$=new d.Vector3,le=new d.Matrix4,q=new d.Quaternion,Q=new d.Quaternion,$e=new d.Vector3(0,1,0),qe=e=>{e.position.set(0,0,0),e.quaternion.identity()},Qe=({settings:e,source:t,surface:n})=>{e.orientation==="positionAndDirection"?(le.lookAt(n.position,n.position.clone().add(n.normal),$e),q.setFromRotationMatrix(le)):q.identity(),t.quaternion.copy(q),$.set(N(e.offsetPosition.x),N(e.offsetPosition.y),N(e.offsetPosition.z)),e.offsetSpace==="local"&&$.applyQuaternion(t.quaternion),H.copy(n.position).add($),t.parent&&t.parent.worldToLocal(H),t.position.copy(H),Q.setFromEuler(new d.Euler(N(e.offsetRotation.x)*Math.PI/180,N(e.offsetRotation.y)*Math.PI/180,N(e.offsetRotation.z)*Math.PI/180)),e.offsetSpace==="local"?t.quaternion.multiply(Q):t.quaternion.premultiply(Q)},Ke=({target:e,settings:t,children:n})=>{const o=Le.useResolveRuntimeObject(),r=h.useRef(null),s=h.useRef(null),a=()=>{r.current&&qe(r.current)};return h.useEffect(()=>{s.current=null},[t.targetObjectId]),h.useEffect(()=>{t.enabled||a()},[t.enabled]),re.useFrame(()=>{const i=e??o(t.targetObjectId);if(!t.enabled||!i||!r.current){(!t.enabled||!i)&&a();return}const l=`${t.uv.x}:${t.uv.y}:${t.vertexNormal?"vertex":"face"}`;(!s.current||s.current.target!==i||s.current.key!==l)&&(s.current={key:l,target:i,surface:Ye(i,t.uv,t.vertexNormal)}),i.updateWorldMatrix(!0,!0);const f=He(s.current.surface);Qe({source:r.current,surface:f,settings:t})}),h.createElement("group",{ref:r},n)},C=e=>Math.round(e*2)/2,de=e=>Math.min(1,Math.max(0,e));function Ze(e){return Math.min(e.width/v.DEFAULT_SCREEN_TRANSFORM_ROOT.width,e.height/v.DEFAULT_SCREEN_TRANSFORM_ROOT.height)||1}function Je({resolved:e,transform:t}){return e.size[0]/Math.max(Math.abs(t.size.width*t.scale2D.x),1e-6)||1}function et({parent:e,resolved:t,transform:n}){const s=16*((Math.min(e.width/v.DEFAULT_SCREEN_TRANSFORM_ROOT.width,e.height/v.DEFAULT_SCREEN_TRANSFORM_ROOT.height)||1)*(v.DEFAULT_REFERENCE_PIXELS_PER_UNIT/Math.max(n.referencePixelsPerUnit,1e-6))),a=.028;return[s/Math.max(Math.abs(t.size[0])*a,1e-6),s/Math.max(Math.abs(t.size[1])*a,1e-6),1]}function tt({drag:e,clientX:t,clientY:n,designScale:o}){const r=(t-e.startX)/o,s=-(n-e.startY)/o,a={x:e.startPointerDesign.x+r,y:e.startPointerDesign.y+s},i={...e.startTransform,position:{...e.startTransform.position},size:{...e.startTransform.size},pivot:[...e.startTransform.pivot]};if(e.handle==="move")return i.position={x:C(e.startTransform.position.x+r),y:C(e.startTransform.position.y+s)},i;if(e.handle==="pivot"){const O=Math.max(1,e.startTransform.size.width*e.startTransform.scale2D.x),S=Math.max(1,e.startTransform.size.height*e.startTransform.scale2D.y),c=de(e.startTransform.pivot[0]+r/O),y=de(e.startTransform.pivot[1]+s/S);return i.pivot=[C(c*1e3)/1e3,C(y*1e3)/1e3],i.position={x:C(e.startTransform.position.x+(i.pivot[0]-e.startTransform.pivot[0])*O),y:C(e.startTransform.position.y+(i.pivot[1]-e.startTransform.pivot[1])*S)},i}if(e.handle.startsWith("rotate")){const O=Math.atan2(e.startPointerDesign.y-e.startTransform.position.y,e.startPointerDesign.x-e.startTransform.position.x),S=Math.atan2(a.y-e.startTransform.position.y,a.x-e.startTransform.position.x);return i.rotation=C(e.startTransform.rotation+(S-O)*180/Math.PI),i}const l=e.handle==="left"||e.handle.endsWith("Left"),f=e.handle==="right"||e.handle.endsWith("Right"),m=e.handle==="top"||e.handle.startsWith("top"),b=e.handle==="bottom"||e.handle.startsWith("bottom"),w=f?r*2:l?-r*2:0,E=m?s*2:b?-s*2:0;return i.size={width:Math.max(1,C(e.startTransform.size.width+w)),height:Math.max(1,C(e.startTransform.size.height+E))},i}function pe({transform:e,guideLayer:t,guideColor:n,onChange:o,children:r}){const s=J.useScreenSpace(),{size:a}=re.useThree(),i=h.useRef(o);i.current=o;const l=h.useRef(null),f=h.useMemo(()=>v.resolveScreenTransform2D({transform:e,parentSize:s}),[s,e]),m=Ze(a),b=h.useRef(m);b.current=m;const w=Je({resolved:f,transform:e}),E=h.useCallback(y=>{const x=l.current,u=i.current;!x||!u||u(tt({drag:x,clientX:y.clientX,clientY:y.clientY,designScale:b.current}))},[]),O=h.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",O)},[E]);h.useEffect(()=>O,[O]);const S=h.useCallback((y,x)=>{o&&(l.current={handle:y,startX:x.nativeEvent.clientX,startY:x.nativeEvent.clientY,startPointerDesign:{x:x.point.x/w,y:x.point.y/w},startTransform:e},window.addEventListener("pointermove",E),window.addEventListener("pointerup",O))},[o,O,e,w,E]),c=h.useMemo(()=>et({parent:s,resolved:f,transform:e}),[s,f,e]);return p.jsx("group",{position:[f.center[0]+(e.pivot[0]-.5)*f.size[0],f.center[1]+(e.pivot[1]-.5)*f.size[1],0],rotation:f.rotation,children:p.jsx("group",{position:[(.5-e.pivot[0])*f.size[0],(.5-e.pivot[1])*f.size[1],0],scale:f.size,children:p.jsxs(J.ScreenRectAspectContext.Provider,{value:f.aspect,children:[r,e.showTransformGuides&&t==="scene"?p.jsx(Ie,{color:n,controlScale:c,onHandlePointerDown:o?S:void 0,pivot:e.pivot,pivotScale:c,renderOrder:e.renderOrder+1}):null,e.showTransformGuides&&t==="overlay"?p.jsx(Be,{color:n,onChange:o,transform:e}):null]})})})}const U={tint:"#dff6ff",opacity:.28,frost:.35,highlight:.55},se=e=>({...U,...e,opacity:d.MathUtils.clamp((e==null?void 0:e.opacity)??U.opacity,0,1),frost:d.MathUtils.clamp((e==null?void 0:e.frost)??U.frost,0,1),highlight:d.MathUtils.clamp((e==null?void 0:e.highlight)??U.highlight,0,1)}),nt=`
|
|
2
|
+
varying vec2 vPosition;
|
|
3
|
+
void main() {
|
|
4
|
+
vPosition = position.xy;
|
|
5
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
6
|
+
}
|
|
7
|
+
`,ot=`
|
|
8
|
+
uniform vec3 tint;
|
|
9
|
+
uniform float opacity;
|
|
10
|
+
uniform float frost;
|
|
11
|
+
uniform float highlight;
|
|
12
|
+
varying vec2 vPosition;
|
|
13
|
+
|
|
14
|
+
void main() {
|
|
15
|
+
float grain = fract(sin(dot(vPosition * 997.0, vec2(12.9898, 78.233))) * 43758.5453);
|
|
16
|
+
float sheen = smoothstep(0.15, 0.85, 1.0 - (vPosition.x + vPosition.y + 1.0) * 0.5);
|
|
17
|
+
vec3 frosted = mix(tint, vec3(1.0), frost * (0.18 + grain * 0.08));
|
|
18
|
+
vec3 color = mix(frosted, vec3(1.0), sheen * highlight * 0.32);
|
|
19
|
+
gl_FragColor = vec4(color, opacity);
|
|
20
|
+
}
|
|
21
|
+
`,ue=({opacity:e=1,value:t})=>{const n=h.useMemo(()=>{const r=se(t);return{tint:new d.Color(r.tint),opacity:r.opacity*e,frost:r.frost,highlight:r.highlight}},[e,t]),o=I.useStableUniforms(n);return p.jsx("shaderMaterial",{uniforms:o,vertexShader:nt,fragmentShader:ot,transparent:!0,depthTest:!1,depthWrite:!1,toneMapped:!1})},K=(e,t=1)=>Array.from({length:e},(n,o)=>{const r=o%2?t*.5:.5,s=-Math.PI/2+o/e*Math.PI*2;return[Math.cos(s)*r,Math.sin(s)*r,0]}),rt=e=>{switch(e.kind){case"line":return[[e.lineStart.x-.5,.5-e.lineStart.y,0],[e.lineEnd.x-.5,.5-e.lineEnd.y,0]];case"polygon":return K(Math.max(3,Math.round(e.sides)));case"star":return K(Math.max(3,Math.round(e.sides))*2,ee.MathUtils.clamp(e.innerRadiusRatio,.05,.95));case"rectangle":return[[-.5,-.5,0],[.5,-.5,0],[.5,.5,0],[-.5,.5,0]];case"roundedRectangle":{const t=ee.MathUtils.clamp(e.cornerRadius,0,.5),n=[];return[[.5-t,.5-t,0],[-.5+t,.5-t,Math.PI/2],[-.5+t,-.5+t,Math.PI],[.5-t,-.5+t,Math.PI*1.5]].forEach(([r,s,a])=>{for(let i=0;i<=6;i+=1){const l=a+i/6*(Math.PI/2);n.push([r+Math.cos(l)*t,s+Math.sin(l)*t,0])}}),n}case"circle":case"ellipse":default:return K(64)}},st=e=>{const t=new ee.Shape;return e.forEach(([n,o],r)=>r?t.lineTo(n,o):t.moveTo(n,o)),t.closePath(),t},W={kind:"rectangle",fillColor:"#38bdf8",fillOpacity:1,fillMode:"solid",gradient:I.DEFAULT_SCREEN_GRADIENT,glass:U,strokeColor:"#ffffff",strokeOpacity:1,strokeWidth:3,cornerRadius:.15,sides:5,innerRadiusRatio:.45,dashed:!1,lineStart:{x:.1,y:.5},lineEnd:{x:.9,y:.5}},he=e=>{const t={...W,...e,lineStart:{...W.lineStart,...e==null?void 0:e.lineStart},lineEnd:{...W.lineEnd,...e==null?void 0:e.lineEnd},gradient:I.normalizeScreenGradient(e==null?void 0:e.gradient),glass:se(e==null?void 0:e.glass)},n=(o,r)=>Number.isFinite(o)?o:r;return{...t,fillOpacity:d.MathUtils.clamp(n(t.fillOpacity,1),0,1),strokeOpacity:d.MathUtils.clamp(n(t.strokeOpacity,1),0,1),strokeWidth:Math.max(0,n(t.strokeWidth,0)),cornerRadius:d.MathUtils.clamp(n(t.cornerRadius,0),0,.5),sides:d.MathUtils.clamp(Math.round(n(t.sides,5)),3,12),innerRadiusRatio:d.MathUtils.clamp(n(t.innerRadiusRatio,.45),.05,.95),lineStart:{x:d.MathUtils.clamp(n(t.lineStart.x,.1),0,1),y:d.MathUtils.clamp(n(t.lineStart.y,.5),0,1)},lineEnd:{x:d.MathUtils.clamp(n(t.lineEnd.x,.9),0,1),y:d.MathUtils.clamp(n(t.lineEnd.y,.5),0,1)}}},it=({name:e,renderOrder:t,settings:n,visible:o})=>{const r=J.useScreenRectAspect(),s=h.useMemo(()=>rt(n),[n]),a=h.useMemo(()=>st(s),[s]),l=["circle","polygon","star"].includes(n.kind)?[Math.min(1,1/r),Math.min(1,r),1]:[1,1,1],m=n.kind!=="line"?[...s,s[0]]:s;return p.jsxs("group",{name:e,visible:o,scale:l,children:[n.kind!=="line"&&n.fillOpacity>0?p.jsxs("mesh",{renderOrder:t,children:[p.jsx("shapeGeometry",{args:[a]}),n.fillMode==="glass"?p.jsx(ue,{value:n.glass,opacity:n.fillOpacity}):p.jsx(I.MaterialFill,{settings:{source:n.fillMode,color:n.fillColor,opacity:n.fillOpacity,gradient:n.gradient}})]}):null,n.strokeWidth>0&&n.strokeOpacity>0?p.jsx(Ne.Line,{points:m,color:n.strokeColor,lineWidth:n.strokeWidth,opacity:n.strokeOpacity,transparent:n.strokeOpacity<1,dashed:n.dashed,dashSize:.05,gapSize:.03,depthTest:!1,depthWrite:!1,renderOrder:t+1}):null]})},at=({name:e,onScreenTransformChange:t,renderOrder:n,settings:o,transform:r,transformGuideLayer:s="scene",visible:a=!0})=>{const i=h.useMemo(()=>he(o),[o]),l=h.useMemo(()=>v.mergeScreenTransform2D(r??v.DEFAULT_SCREEN_TRANSFORM_2D),[r]);return l.enabled?p.jsx(pe,{transform:l,guideLayer:s,guideColor:"#38bdf8",onChange:t,children:p.jsx(it,{name:e,settings:i,visible:a&&l.visible,renderOrder:n??l.renderOrder})}):null};function ct(e){const{screenSpaceUI:t,screenImage:n}=e,{image:o,transformation:r}=n,s=o.src.trim();return{shouldRender:t.enabled&&n.enabled&&r.enabled,props:{source:o.sourceKind==="image"&&s.length>0?{kind:"image",src:s}:o.sourceKind==="gif"&&s.length>0?{kind:"gif",src:s}:{kind:"default"},transform:n.screenTransform,coordinateSpace:r.coordinateSpace,canvasSize:r.canvasSize,position:[r.position.x,r.position.y],size:[r.size.width,r.size.height],rotation:r.rotation,pivot:r.pivot,stretchMode:o.stretchMode,materialType:o.materialType,blendMode:o.blendMode,opacity:o.opacity,color:o.color,flipX:o.flipX,flipY:o.flipY,renderOrder:r.renderOrder,transparent:o.transparent,alphaTest:o.alphaTest,overlay:r.overlay,visible:r.visible}}}const V={enabled:!0,preset:"placeholder",transformation:{enabled:!0,showFitGuides:!1,coordinateSpace:"canvas",canvasSize:{width:720,height:1280},position:{x:0,y:0},size:{width:680,height:1230},rotation:0,pivot:[.5,.5],renderOrder:999,overlay:!0,visible:!0},screenTransform:{...v.DEFAULT_SCREEN_TRANSFORM_2D,renderOrder:999},image:{sourceKind:"default",src:"",stretchMode:"fit",materialType:"unlit",blendMode:"normal",opacity:1,color:"#ffffff",flipX:!1,flipY:!1,transparent:!0,alphaTest:0}},lt={screenImage:V,screenSpaceUI:{enabled:!0}},dt=e=>e*Math.PI/180;function me(e){if(!e)return;const t=e.offset??0,n=dt(e.angle??-45);return{color:e.color,opacity:e.opacity,blur:(e.feather??0)*100,offsetX:Math.cos(n)*t,offsetY:Math.sin(n)*t}}function ft(e){const{screenSpaceUI:t,screenText:n}=e,{content:o,layout:r,style:s,transformation:a}=n,i=s.background;return{shouldRender:t.enabled&&n.enabled&&a.enabled,props:{text:o.text,screenTransform:n.screenTransform,coordinateSpace:a.coordinateSpace,canvasSize:a.canvasSize,position:[a.position.x,a.position.y],size:[a.size.width,a.size.height],rotation:a.rotation,pivot:a.pivot,renderOrder:a.renderOrder,overlay:a.overlay,visible:a.visible,showTransformGuides:a.showTransformGuides,fontSize:s.fontSize,fontFamily:s.fontFamily,fontWeight:s.fontWeight,fontStyle:s.fontStyle,underline:s.underline,strikethrough:s.strikethrough,letterSpacing:s.letterSpacing,lineSpacing:s.lineSpacing,color:s.color,opacity:s.opacity,outlineEnabled:s.outlineEnabled,strokeLayers:s.strokeLayers,shadowEnabled:s.shadowEnabled,shadowLayers:s.shadowLayers,innerShadow:s.innerShadowEnabled?me(s.innerShadow):void 0,glow:s.glowEnabled?s.glow:void 0,bend:s.bendEnabled?s.bend:void 0,bgColor:i.enabled?i.color:"transparent",bgOpacity:i.opacity,bgFit:i.fit,bgAutoSize:i.autoSize,bgFillMode:i.fillMode,bgWidth:i.width,bgHeight:i.height,bgGradientStops:i.gradientStops,bgTextureUrl:i.textureUrl,bgTextureFit:i.textureFit,bgTextureFlipX:i.textureFlipX,bgTextureFlipY:i.textureFlipY,padding:i.padding,borderColor:i.borderEnabled?i.borderColor:void 0,borderWidth:i.borderEnabled?i.borderWidth:0,borderRadius:i.borderRadius,textAlign:r.textAlign,verticalAlign:r.verticalAlign,overflow:r.overflow,resizeToFit:r.resizeToFit,minFontSize:r.minFontSize}}}const Se={color:"#000000",blur:0,offsetX:7.071,offsetY:-7.071,opacity:1,offset:10,angle:-45,feather:0},Te={screenText:{enabled:!0,content:{text:"Hello from Vincentt"},layout:{textAlign:"center",verticalAlign:"center",overflow:"clip",resizeToFit:!1,minFontSize:32},style:{fontSize:72,fontFamily:'"Space Grotesk", sans-serif',fontWeight:400,bold:!1,fontStyle:"normal",underline:!1,strikethrough:!1,letterSpacing:0,lineSpacing:.3,color:"#ffffff",opacity:1,aspect:3,outlineEnabled:!0,shadowEnabled:!1,innerShadowEnabled:!1,innerShadow:{color:"#000000",opacity:1,offset:10,angle:-45,feather:0},glowEnabled:!1,glow:{color:"#ffffff",style:"outward",intensity:.5,range:.5,horizontalAngle:0,verticalAngle:0},bendEnabled:!1,bend:{preset:"arc",strength:100},background:{enabled:!1,autoSize:!0,fit:"text",fillMode:"solid",color:"#14286e",opacity:1,borderRadius:32,padding:0,width:540,height:220,borderEnabled:!1,borderWidth:0,borderColor:"#ffffff",gradientStops:[{color:"#14286e",position:0},{color:"#3657d6",position:.5},{color:"#8ab4ff",position:1}],textureUrl:"",textureFit:"cover",textureFlipX:!1,textureFlipY:!1},strokeLayers:[{color:"#0f172a",width:12,opacity:1}],shadowLayers:[Se]},screenTransform:{...v.DEFAULT_SCREEN_TRANSFORM_2D,renderOrder:1e3},transformation:{enabled:!0,showTransformGuides:!1,coordinateSpace:"canvas",canvasSize:{width:720,height:1280},position:{x:0,y:0},size:{width:680,height:1230},rotation:0,pivot:[.5,.5],renderOrder:1e3,overlay:!0,visible:!0},textArtPreset:"clean"},screenImage:V,screenSpaceUI:{enabled:!0}},ie=e=>{const t=typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;return`${e}_${t}`},xe=()=>ie("obj"),be=()=>ie("cmp"),L=e=>typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e)),ge=()=>L(I.DEFAULT_TRANSFORM_3D),Ee=()=>L(v.DEFAULT_SCREEN_TRANSFORM_2D),ye=()=>L(V),ve=()=>L(Te.screenText),Me=()=>L(W),Re=()=>L(Ce.DEFAULT_MESH_RENDERER),we=()=>L(I.DEFAULT_FACE_MESH_RENDERER),Oe=()=>({type:"standard",color:"#ffffff",opacity:1,wireframe:!1,roughness:.42,metalness:.08}),De=()=>({flipX:!1,flipY:!1}),pt=()=>({enabled:!0,type:"directional",color:"#ffffff",intensity:2.2,castShadow:!0,distance:10,angle:Math.PI/6,penumbra:.2,decay:2,showHelper:!1}),ut=()=>({enabled:!1,targetObjectId:null,mode:"point",inheritChildren:!1,offsetRotation:{x:0,y:0,z:0}}),ht=()=>({...X,uv:{...X.uv},offsetPosition:{...X.offsetPosition},offsetRotation:{...X.offsetRotation}}),mt=()=>L(v.DEFAULT_TRACKING_ANCHOR),_e={Transform:ge,ScreenTransform:Ee,ScreenImage:ye,ScreenText:ve,ScreenShape:Me,MeshRenderer:Re,FaceMeshRenderer:we,Material:Oe,Texture:De,Light:pt,LookAt:ut,PinToMesh:ht,TrackingAnchor:mt},St=({componentIds:e=[],enabled:t=!0,id:n=xe(),parentObjectId:o=null,childObjectIds:r=[],renderGroupId:s,layerId:a,name:i})=>({id:n,name:i,enabled:t,parentObjectId:o,childObjectIds:r,layerId:a,renderGroupId:s??a,componentIds:e}),Tt=(e,t)=>({id:be(),objectId:t,type:e,enabled:!0,settings:_e[e]()}),G=(e,t)=>{const n=e.objects[t];return n?n.componentIds.map(o=>e.components[o]).filter(o=>!!o):[]},xt=()=>{let e=null,t=null,n=null,o=[];return(r,s)=>{const a=r.objects[s];if(!a)return e=r,t=s,n=null,o=[],o;const i=a.componentIds;return e===r&&t===s&&n===i&&o.length===i.length&&o.every(f=>r.components[f.id]===f)||(e=r,t=s,n=i,o=G(r,s)),o}},bt=(e,t)=>{const n=e.objects[t.objectId];return n?{...e,objects:{...e.objects,[n.id]:{...n,componentIds:[...n.componentIds,t.id]}},components:{...e.components,[t.id]:t}}:e},gt=(e,t,n,o)=>{const r=e.objects[t];if(!r||r.componentIds.indexOf(n)<0)return e;const a=r.componentIds.filter(i=>i!==n);return a.splice(Math.max(0,Math.min(o,a.length)),0,n),{...e,objects:{...e.objects,[t]:{...r,componentIds:a}}}},Et=(e,t,n)=>{const o=e.objects[t];if(!o)return e;const r={...e.components};return delete r[n],{...e,objects:{...e.objects,[t]:{...o,componentIds:o.componentIds.filter(s=>s!==n)}},components:r}},te=(e,t)=>e.components[t.id]?{...e,components:{...e.components,[t.id]:t}}:e,Pe=(e,t)=>e.objects[t.id]?{...e,objects:{...e.objects,[t.id]:t}}:e,ze=(e,t)=>{const n=e.objects[t],o=(n==null?void 0:n.childObjectIds)??[],r=Object.values(e.objects).filter(a=>a.parentObjectId===t).map(a=>a.id);return[...new Set([...o,...r])].map(a=>e.objects[a]).filter(a=>!!a)},yt=(e,t,n)=>{var s;let o=n;const r=new Set;for(;o;){if(o===t||r.has(o))return!0;r.add(o),o=((s=e.objects[o])==null?void 0:s.parentObjectId)??null}return!1},fe=(e,t)=>{const n=new Set(G(e,t).map(o=>o.type));return n.has("Transform")?"3d":n.has("ScreenTransform")?"2d":null},je=(e,t,n,o)=>{const r=e.objects[t];if(!r||n!==null&&!e.objects[n])return e;if(n!==null){const i=fe(e,t),l=fe(e,n);if(i&&l&&i!==l)return e}if(yt(e,t,n))return e;const s=r.parentObjectId??null;if(s===n&&n===null)return e;const a={...e.objects};if(s&&a[s]){const i=a[s];a[s]={...i,childObjectIds:(i.childObjectIds??[]).filter(l=>l!==t)}}if(a[t]={...r,parentObjectId:n},n){const i=a[n],l=(i.childObjectIds??[]).filter(f=>f!==t);l.splice(Math.max(0,Math.min(o??l.length,l.length)),0,t),a[n]={...i,childObjectIds:l}}return{...e,objects:a}},Z=Math.PI/180,B=180/Math.PI,z=e=>Number(e.toFixed(4)),vt=e=>(e==null?void 0:e.type)==="Transform",Fe=(e,t)=>G(e,t).find(vt)??null,Mt=e=>(e==null?void 0:e.type)==="ScreenTransform",Ae=(e,t)=>G(e,t).find(Mt)??null,Rt=e=>new d.Matrix4().compose(new d.Vector3(e.position.x,e.position.y,e.position.z),new d.Quaternion().setFromEuler(new d.Euler(e.rotation.x*Z,e.rotation.y*Z,e.rotation.z*Z)),new d.Vector3(e.scale.x,e.scale.y,e.scale.z)),wt=(e,t)=>{const n=Fe(e,t);return n?Rt(n.settings):new d.Matrix4},ne=(e,t)=>{const n=e.objects[t],o=wt(e,t);return!(n!=null&&n.parentObjectId)||!e.objects[n.parentObjectId]?o:ne(e,n.parentObjectId).multiply(o)},Ot=e=>{const t=v.resolveScreenTransform2D({transform:e,parentSize:v.DEFAULT_SCREEN_TRANSFORM_ROOT,snapIncrement:0});return new d.Matrix4().compose(new d.Vector3(...t.center),new d.Quaternion().setFromEuler(new d.Euler(...t.rotation)),new d.Vector3(...t.size))},oe=(e,t)=>{var s;const n=Ae(e,t),o=n?Ot(n.settings):new d.Matrix4,r=(s=e.objects[t])==null?void 0:s.parentObjectId;return!r||!e.objects[r]?o:oe(e,r).multiply(o)},Dt=(e,t)=>{const n=new d.Vector3,o=new d.Quaternion,r=new d.Vector3;e.decompose(n,o,r);const s=new d.Euler().setFromQuaternion(o);return{...t,position:{x:z(n.x),y:z(n.y),z:z(n.z)},rotation:{x:z(s.x*B),y:z(s.y*B),z:z(s.z*B)},scale:{x:z(r.x),y:z(r.y),z:z(r.z)}}},_t=(e,t)=>{const n=new d.Vector3,o=new d.Quaternion,r=new d.Vector3;e.decompose(n,o,r);const s=new d.Euler().setFromQuaternion(o),a=v.DEFAULT_REFERENCE_PIXELS_PER_UNIT/t.referencePixelsPerUnit,i=Math.abs(r.x),l=Math.abs(r.y),f=(t.pivot[0]-.5)*i,m=(t.pivot[1]-.5)*l;return{...t,position:{x:z((n.x+f)/a),y:z((n.y+m)/a)},rotation:z(s.z*B),scale2D:{x:z(i/(t.size.width*a)),y:z(l/(t.size.height*a))}}},Pt=(e,t,n,o)=>{const r=Fe(e,t),s=Ae(e,t),a=r?ne(e,t):s?oe(e,t):null,i=je(e,t,n,o);if(i===e||!a)return i;const f=(n?r?ne(i,n):oe(i,n):new d.Matrix4).clone().invert().multiply(a);return s?te(i,{...s,settings:_t(f,s.settings)}):r?te(i,{...r,settings:Dt(f,r.settings)}):i},zt=(e,t,n)=>{const o=e.objects[t];return o?Pe(e,{...o,enabled:n}):e},jt=(e,t)=>{const n=e.objects[t];if(!n)return e;const o=ze(e,t).map(i=>i.id),r={...e.objects};delete r[t];const s=Object.fromEntries(Object.entries(r).map(([i,l])=>[i,o.includes(i)||l.parentObjectId===t?{...l,parentObjectId:null}:{...l,childObjectIds:(l.childObjectIds??[]).filter(f=>f!==t)}])),a={...e.components};for(const i of n.componentIds)delete a[i];return{...e,objects:s,components:a}};exports.DEFAULT_SCREEN_GLASS=U;exports.DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS=lt;exports.DEFAULT_SCREEN_IMAGE_SETTINGS=V;exports.DEFAULT_SCREEN_SHAPE_SETTINGS=W;exports.DEFAULT_SCREEN_TEXT_SCENE_SETTINGS=Te;exports.DEFAULT_SCREEN_TEXT_SHADOW_LAYER=Se;exports.PinToMesh=Ke;exports.ScreenGlassMaterial=ue;exports.ScreenShape=at;exports.ScreenTransformFrame=pe;exports.addComponentToObject=bt;exports.componentDefaults=_e;exports.createDefaultComponent=Tt;exports.createDefaultFaceMeshRendererSettings=we;exports.createDefaultMaterialSettings=Oe;exports.createDefaultMeshRendererSettings=Re;exports.createDefaultScreenImageSettings=ye;exports.createDefaultScreenShapeSettings=Me;exports.createDefaultScreenTextSettings=ve;exports.createDefaultScreenTransformSettings=Ee;exports.createDefaultTextureSettings=De;exports.createDefaultTransformSettings=ge;exports.createOrderedComponentsSelector=xt;exports.createSceneComponentId=be;exports.createSceneId=ie;exports.createSceneObject=St;exports.createSceneObjectId=xe;exports.deleteSceneObject=jt;exports.getOrderedComponents=G;exports.getSceneObjectChildren=ze;exports.mapScreenImageSettingsToProps=ct;exports.mapScreenTextInnerShadowToProps=me;exports.mapScreenTextSettingsToProps=ft;exports.mergeScreenShapeSettings=he;exports.moveComponent=gt;exports.normalizeScreenGlass=se;exports.removeComponent=Et;exports.replaceSceneComponent=te;exports.replaceSceneObject=Pe;exports.setSceneObjectParent=je;exports.setSceneObjectParentPreserveWorldTransform=Pt;exports.setSceneObjectVisible=zt;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";const A=require("react/jsx-runtime"),R=require("@react-three/fiber"),d=require("react"),L=require("three"),ke=require("./index-tpCr9CLj.cjs"),j=require("./renderPasses-dqmkft4P.cjs"),M=require("./index-BfFmpddl.cjs"),q=require("./TextLabel-XE0rQSDn.cjs"),z=require("./context-hA0Rb2Xa.cjs"),K=require("./contexts-BH7PdKFS.cjs"),V=require("./index-D5GTzOzD.cjs"),ye=require("./index-DE17y0ZI.cjs"),Me=require("./landmarks-BlUqf5MZ.cjs"),De=require("./useFaceInfo-BHDNCvsJ.cjs"),ne=require("./index-CfSF8LXa.cjs"),we=require("@react-three/drei"),Le=require("./select-Ck5LGz-J.cjs");function Fe(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,s.get?s:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const I=Fe(L),O={width:720,height:1280},je=(e=[.5,.5])=>[e[0]*2-1,e[1]*2-1],te=({position:e=[0,0],size:n=[1,1]})=>{const t=n[0]/2,s=n[1]/2;return{left:e[0]-t,right:e[0]+t,top:e[1]+s,bottom:e[1]-s}},Re=({position:e=[0,0],size:n,canvasSize:t=O})=>{const s=t.width/2||O.width/2,o=t.height/2||O.height/2,r=n??[t.width,t.height];return te({position:[e[0]/s,e[1]/o],size:[r[0]/s,r[1]/o]})},ge=({coordinateSpace:e="normalized",canvasSize:n=O,position:t,size:s,fallbackAnchors:o})=>o||(!t&&!s?te({}):e==="canvas"?Re({position:t,size:s,canvasSize:n}):te({position:t,size:s})),Ge="data:image/png;base64,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";function Z(e,n){return!Number.isFinite(e)||!Number.isFinite(n)||e<=0||n<=0?[1,1,1]:Math.abs(e-n)<1e-6?[1,1,1]:e>n?[n/e,1,1]:[1,e/n,1]}const Xe=(e,n)=>e||(n==="cover"?"fill":n==="stretch"?"stretch":"fit"),le=(e,n)=>{const[t,s]=Z(e,n);return t===1&&s===1?[1,1,1]:t<1?[1,1/t,1]:[1/s,1,1]},Ye=(e,n,t,s,o,r,l)=>{let a=[1,1,1],u=[1,1,1],c=[1,1],h=[0,0];switch(e){case"fit":a=Z(n,t),u=a;break;case"fitWidth":a=[1,n>0&&t>0?n/t:1,1],u=a;break;case"fitHeight":a=[n>0&&t>0?t/n:1,1,1],u=a;break;case"center":a=r&&l&&r.width>0&&r.height>0&&l.width>0&&l.height>0?[l.width/r.width,l.height/r.height,1]:Z(n,t),u=a;break;case"fill":a=le(n,t),u=a;break;case"fillAndCut":if(u=le(n,t),t>n){const f=n/t;c=[f,1],h=[(1-f)/2,0]}else if(t<n){const f=t/n;c=[1,f],h=[0,(1-f)/2]}break}return{meshScale:[a[0]*(s?-1:1),a[1]*(o?-1:1),1],guideScale:u,repeat:c,offset:h}},We=(e,n)=>e??(n?{kind:"image",src:n}:{kind:"default"}),Y=e=>{const n=e.image;return{width:(n==null?void 0:n.videoWidth)??(n==null?void 0:n.width)??1,height:(n==null?void 0:n.videoHeight)??(n==null?void 0:n.height)??1}},Je=e=>{if(e.isVideoTexture||e.isCanvasTexture)return!0;const n=e.image;return typeof HTMLCanvasElement<"u"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas},Pe=e=>{const{width:n,height:t}=Y(e);return n>0&&t>0?n/t:1},ze=new Set(["overlay","softLight","hardLight","difference","exclusion"]),Ke={overlay:0,softLight:1,hardLight:2,difference:3,exclusion:4},Ve=e=>{switch(e){case"add":return{blending:I.AdditiveBlending};case"subtract":return{blending:I.SubtractiveBlending};case"multiply":return{blending:I.MultiplyBlending};case"screen":return{blending:I.CustomBlending,blendSrc:I.OneFactor,blendDst:I.OneMinusSrcColorFactor,blendEquation:I.AddEquation};case"lighten":return{blending:I.CustomBlending,blendSrc:I.OneFactor,blendDst:I.OneFactor,blendEquation:I.MaxEquation};case"darken":return{blending:I.CustomBlending,blendSrc:I.OneFactor,blendDst:I.OneFactor,blendEquation:I.MinEquation};default:return{blending:I.NormalBlending}}},Oe=`
|
|
2
|
+
varying vec2 vUv;
|
|
3
|
+
void main(){vUv=uv;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}`,Ne=`
|
|
4
|
+
uniform sampler2D imageMap;uniform sampler2D backdropMap;uniform vec2 resolution;
|
|
5
|
+
uniform vec3 tint;uniform float opacity;uniform float alphaTest;uniform int blendMode;varying vec2 vUv;
|
|
6
|
+
float overlayChannel(float b,float s){return b<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
|
|
7
|
+
float hardLightChannel(float b,float s){return s<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
|
|
8
|
+
float softLightChannel(float b,float s){return s<.5?b-(1.-2.*s)*b*(1.-b):b+(2.*s-1.)*(sqrt(max(b,0.))-b);}
|
|
9
|
+
vec3 applyAdvancedBlend(vec3 b,vec3 s){
|
|
10
|
+
if(blendMode==0)return vec3(overlayChannel(b.r,s.r),overlayChannel(b.g,s.g),overlayChannel(b.b,s.b));
|
|
11
|
+
if(blendMode==1)return vec3(softLightChannel(b.r,s.r),softLightChannel(b.g,s.g),softLightChannel(b.b,s.b));
|
|
12
|
+
if(blendMode==2)return vec3(hardLightChannel(b.r,s.r),hardLightChannel(b.g,s.g),hardLightChannel(b.b,s.b));
|
|
13
|
+
if(blendMode==3)return abs(b-s);return b+s-2.*b*s;}
|
|
14
|
+
void main(){vec4 image=texture2D(imageMap,vUv)*vec4(tint,opacity);if(image.a<=alphaTest)discard;
|
|
15
|
+
vec2 uv=gl_FragCoord.xy/max(resolution,vec2(1.));vec3 base=texture2D(backdropMap,uv).rgb;
|
|
16
|
+
vec3 mixed=applyAdvancedBlend(base,image.rgb);gl_FragColor=vec4(mix(base,mixed,image.a),1.);
|
|
17
|
+
#include <colorspace_fragment>
|
|
18
|
+
}`,He=()=>{const e=document.createElement("canvas");e.width=256,e.height=256;const n=e.getContext("2d");if(!n)return new I.CanvasTexture(e);const t=n.createRadialGradient(96,80,10,128,128,128);t.addColorStop(0,"#ffffff"),t.addColorStop(.18,"#f8fafc"),t.addColorStop(.44,"#cbd5e1"),t.addColorStop(.72,"#475569"),t.addColorStop(1,"#0f172a"),n.fillStyle=t,n.fillRect(0,0,e.width,e.height);const s=new I.CanvasTexture(e);return s.needsUpdate=!0,s},fe=["alpha","red","green","luminance"],Ue=e=>{const n=fe.indexOf(e??"alpha");return n<0?0:n},qe=`
|
|
19
|
+
varying vec2 vUv;
|
|
20
|
+
void main(){vUv=uv;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}`,Ze=`
|
|
21
|
+
uniform sampler2D imageMap;uniform sampler2D maskMap;uniform mat3 mapTransform;
|
|
22
|
+
uniform vec3 tint;uniform float opacity;uniform float alphaTest;uniform int maskChannel;uniform float maskInvert;
|
|
23
|
+
uniform float maskFeather;uniform float maskErode;uniform vec2 maskTexel;
|
|
24
|
+
varying vec2 vUv;
|
|
25
|
+
float coverageAt(vec2 uv){
|
|
26
|
+
vec4 m=texture2D(maskMap,uv);
|
|
27
|
+
float c=maskChannel==0?m.a:maskChannel==1?m.r:maskChannel==2?m.g:dot(m.rgb,vec3(0.299,0.587,0.114));
|
|
28
|
+
return mix(c,1.0-c,maskInvert);}
|
|
29
|
+
void main(){
|
|
30
|
+
vec2 uv=(mapTransform*vec3(vUv,1.0)).xy;
|
|
31
|
+
vec4 image=texture2D(imageMap,uv);
|
|
32
|
+
float coverage;
|
|
33
|
+
if(maskFeather>0.0){
|
|
34
|
+
vec2 step=maskTexel*maskFeather;
|
|
35
|
+
coverage=0.0;
|
|
36
|
+
for(int y=-1;y<=1;y++){for(int x=-1;x<=1;x++){coverage+=coverageAt(uv+vec2(float(x),float(y))*step);}}
|
|
37
|
+
coverage/=9.0;
|
|
38
|
+
// Erode: raise the threshold on the blurred edge so the silhouette shrinks
|
|
39
|
+
// by up to the feather radius (maskErode is a fraction of that width).
|
|
40
|
+
coverage=smoothstep(clamp(maskErode,0.0,0.95),1.0,coverage);
|
|
41
|
+
}else{coverage=coverageAt(uv);}
|
|
42
|
+
float alpha=image.a*opacity*coverage;
|
|
43
|
+
if(alpha<=alphaTest)discard;
|
|
44
|
+
gl_FragColor=vec4(image.rgb*tint,alpha);
|
|
45
|
+
#include <colorspace_fragment>
|
|
46
|
+
}`;function _e({materialTexture:e,sourceTexture:n,onSourceSizeChange:t}){const s=d.useRef(Y(n));return R.useFrame(()=>{e.needsUpdate=!0;const o=Y(n);(o.width!==s.current.width||o.height!==s.current.height)&&(s.current=o,t(o))}),null}const $e=999,en=Math.PI/180,nn=K.createTextureSourceResolver([K.gifTextureSourceProvider]);function tn(e){const[n,t]=d.useState(null);return d.useEffect(()=>{if(t(null),!e||typeof document>"u")return;const s=new AbortController;let o;return nn({kind:"gif",src:e},s.signal).then(r=>{o=r,t(r)}).catch(r=>{r instanceof DOMException&&r.name==="AbortError"||console.warn("[xr-sdk] Failed to load GIF ScreenImage source",r)}),()=>{s.abort(),K.disposeResolvedTextureSource(o)}},[e]),n}function ue({name:e,source:n,src:t,fit:s,stretchMode:o,materialType:r="unlit",blendMode:l="normal",backdropTexture:a=null,rotation:u=0,opacity:c=1,color:h="#ffffff",maskTexture:f=null,maskChannel:E,maskInvert:v=!1,maskFeather:g=0,maskErode:D=0,flipX:b=!1,flipY:C=!1,renderOrder:y=$e,transparent:p=!0,alphaTest:B=0,overlay:Q=!0,visible:W,layoutSize:G}){const{size:S}=R.useThree(),i=K.useXRViewportRenderOutputs(),x=We(n,t),_=x.kind==="image"?x.src:Ge,J=we.useTexture(_),$=tn(x.kind==="gif"?x.src:void 0),w=x.kind==="texture"?x.texture:x.kind==="gif"?($==null?void 0:$.texture)??J:J,re=z.useScreenRectAspect(),Ae=Xe(o,s),[me,se]=d.useState(()=>Y(w));d.useEffect(()=>{se(Y(w))},[w]);const oe=Je(w),P=oe?me:Y(w),Se=d.useCallback(F=>se(F),[]),ie=P.width>0&&P.height>0?P.width/P.height:Pe(w),ae=d.useMemo(()=>He(),[]),X=d.useMemo(()=>Ye(Ae,re,ie,b,C,G,P),[Ae,re,ie,b,C,G,P]),T=d.useMemo(()=>{const F=w.clone();return F.needsUpdate=!0,F.repeat.set(X.repeat[0],X.repeat[1]),F.offset.set(X.offset[0],X.offset[1]),F},[w,X.repeat,X.offset]);q.useOwnedTexture(T),q.useOwnedTexture(ae);const H=d.useMemo(()=>Ve(l),[l]),U=ze.has(l)?l:null,ee=a??(i==null?void 0:i.finalColorTexture)??(i==null?void 0:i.sceneColorTexture)??null,pe=U!==null&&ee!==null,Be=d.useMemo(()=>({imageMap:T,backdropMap:ee,resolution:new I.Vector2(S.width,S.height),tint:new I.Color(h),opacity:c,alphaTest:B,blendMode:U===null?0:Ke[U]}),[U,B,ee,S.height,S.width,h,T,c]),Qe=j.useStableUniforms(Be),ce=d.useMemo(()=>(T.updateMatrix(),T.matrix.clone()),[T]),xe=d.useMemo(()=>({imageMap:T,maskMap:f,mapTransform:ce,tint:new I.Color(h),opacity:c,alphaTest:B,maskChannel:Ue(E),maskInvert:v?1:0,maskFeather:g,maskErode:D,maskTexel:(()=>{const{width:F,height:be}=Y(f??T);return new I.Vector2(1/Math.max(F,1),1/Math.max(be,1))})()}),[B,h,ce,E,D,g,v,f,T,c]),Te=j.useStableUniforms(xe);return A.jsxs("group",{visible:W,children:[oe?A.jsx(_e,{materialTexture:T,sourceTexture:w,onSourceSizeChange:Se}):null,A.jsxs("mesh",{name:e,scale:X.meshScale,rotation:[0,0,u*en],renderOrder:y,children:[A.jsx("planeGeometry",{args:[1,1]}),f?A.jsx("shaderMaterial",{uniforms:Te,vertexShader:qe,fragmentShader:Ze,transparent:!0,depthTest:!Q,depthWrite:!Q,toneMapped:!1,...H}):pe?A.jsx("shaderMaterial",{uniforms:Qe,vertexShader:Oe,fragmentShader:Ne,transparent:!1,depthTest:!Q,depthWrite:!Q,toneMapped:!1}):r==="standardPBR"?A.jsx("meshStandardMaterial",{map:T,transparent:p||c<1,opacity:c,color:h,alphaTest:B,depthTest:!Q,depthWrite:!Q,toneMapped:!1,roughness:.72,metalness:.08,emissive:h,emissiveIntensity:.18,...H}):r==="matcap"?A.jsx("meshMatcapMaterial",{map:T,matcap:ae,transparent:p||c<1,opacity:c,color:h,alphaTest:B,depthTest:!Q,depthWrite:!Q,toneMapped:!1,...H}):A.jsx("meshBasicMaterial",{map:T,transparent:p||c<1,opacity:c,color:h,alphaTest:B,depthTest:!Q,depthWrite:!Q,toneMapped:!1,...H})]})]})}const rn={left:0,right:0,top:0,bottom:0},An=Math.PI/180;function sn({anchors:e,offsets:n,pivot:t,rotation:s,children:o}){const{width:r,height:l}=z.useScreenSpace(),a=d.useMemo(()=>({left:-1,right:1,top:1,bottom:-1,...e}),[e]),u=d.useMemo(()=>({...rn,...n}),[n]),c=d.useMemo(()=>K.computeScreenTransform(r,l,a,u,t),[l,t,a,u,r]),h=c.width>0&&c.height>0?c.width/c.height:null;return A.jsx("group",{position:[c.centerX-c.pivotX,c.centerY-c.pivotY,0],rotation:[0,0,s*An],scale:[c.width,c.height,1],children:A.jsx(z.ScreenRectAspectContext.Provider,{value:h,children:o})})}function on({transform:e,guideLayer:n,onChange:t,children:s}){return A.jsx(M.ScreenTransformFrame,{guideColor:"#22d3ee",guideLayer:n,transform:e,onChange:t,children:s})}const an={left:-1,right:1,top:1,bottom:-1},cn={},ln=[.5,.5];[["Normal","normal"],["Add","add"],["Subtract","subtract"],["Multiply","multiply"],["Screen","screen"],["Lighten","lighten"],["Darken","darken"],["Overlay","overlay"],["Soft Light","softLight"],["Hard Light","hardLight"],["Difference","difference"],["Exclusion","exclusion"]].map(([e,n])=>({label:e,value:n}));const un=e=>[e[0]*2-1,e[1]*2-1],dn=(e,n,t,s,o)=>e||(!s&&!o?an:ge({coordinateSpace:n,canvasSize:t??O,position:s,size:o}));function he({anchors:e,coordinateSpace:n,canvasSize:t,position:s,size:o,offsets:r=cn,pivot:l=ln,rotation:a=0,transform:u,onScreenTransformChange:c,transformGuideLayer:h="scene",...f}){const E=d.useMemo(()=>dn(e,n,t,s,o),[e,t,n,s,o]),v=d.useMemo(()=>un(l),[l]);if(u){const g=V.mergeScreenTransform2D(u);return g.enabled?A.jsx(on,{guideLayer:h,transform:g,onChange:c,children:A.jsx(ue,{...f,layoutSize:g.size,renderOrder:f.renderOrder??g.renderOrder,overlay:f.overlay??g.overlay,visible:f.visible??g.visible,rotation:0})}):null}return A.jsx(sn,{anchors:E,offsets:r,pivot:v,rotation:a,children:A.jsx(ue,{...f,layoutSize:o?{width:o[0],height:o[1]}:void 0,rotation:0})})}const gn=2.5,fn="#38bdf8",hn={top:{left:-.92,right:.92,top:.92,bottom:.56},center:{left:-.92,right:.92,top:.18,bottom:-.18},bottom:{left:-.92,right:.92,top:-.56,bottom:-.92}};function En({bend:e,bendPreset:n,bendStrength:t}){return{bendPreset:(e==null?void 0:e.preset)??n,bendStrength:(e==null?void 0:e.strength)??t}}function vn({width:e,height:n}){const t=Math.max(1,e),s=Math.max(1,n);return{aspect:t/s,resolution:s}}function de(e){const n=z.useScreenRectAspect(),{bend:t,layoutSize:s,renderOrder:o,overlay:r=!0,...l}=e,a=s?vn(s):void 0,u=Math.max((a==null?void 0:a.aspect)??n??gn,.1),c=En({bend:t,bendPreset:l.bendPreset,bendStrength:l.bendStrength});return A.jsx(q.TextLabel,{...l,aspect:u,resolution:(a==null?void 0:a.resolution)??l.resolution,...c,overlay:r,renderOrder:o})}function In({transform:e,guideLayer:n,onChange:t,children:s}){return A.jsx(M.ScreenTransformFrame,{guideColor:fn,guideLayer:n,transform:e,onChange:t,children:s})}function Cn(e="center"){return hn[e]}function mn({anchors:e,coordinateSpace:n,canvasSize:t,position:s,size:o,transform:r,pivot:l,verticalAlign:a}){return{resolvedAnchors:r!=null&&r.anchors?r.anchors:e||(r!=null&&r.position||r!=null&&r.size||s||o?ge({coordinateSpace:(r==null?void 0:r.coordinateSpace)??n,canvasSize:(r==null?void 0:r.canvasSize)??t,position:(r==null?void 0:r.position)??s,size:(r==null?void 0:r.size)??o}):Cn(a)),resolvedOffsets:r==null?void 0:r.offsets,resolvedPivot:je((r==null?void 0:r.pivot)??l??[.5,.5])}}function Ee({anchors:e,coordinateSpace:n,canvasSize:t,offsets:s,pivot:o,position:r,rotation:l=0,size:a,transform:u,screenTransform:c,onScreenTransformChange:h,transformGuideLayer:f="scene",verticalAlign:E="center",...v}){const{resolvedAnchors:g,resolvedOffsets:D,resolvedPivot:b}=d.useMemo(()=>mn({anchors:e,coordinateSpace:n,canvasSize:t,position:r,size:a,transform:u,pivot:o,verticalAlign:E}),[e,t,n,o,r,a,u,E]),C=(u==null?void 0:u.offsets)??s??D,y=(u==null?void 0:u.rotation)??l;if(c){const p=V.mergeScreenTransform2D(c);return p.enabled?A.jsx(In,{guideLayer:f,transform:p,onChange:h,children:A.jsx(de,{...v,layoutSize:p.size,verticalAlign:E,renderOrder:v.renderOrder??p.renderOrder,overlay:v.overlay??p.overlay,visible:v.visible??p.visible})}):null}return A.jsx(K.ScreenTransform,{anchors:g,offsets:C,pivot:b,children:A.jsx("group",{rotation:[0,0,y*Math.PI/180],children:A.jsx(de,{...v,verticalAlign:E})})})}const ve=({settings:e,transform:n})=>{const t=d.useMemo(()=>A.jsxs("group",{name:"LightEditorGizmo",visible:e.showHelper,children:[A.jsxs("mesh",{renderOrder:1e3,children:[A.jsx("sphereGeometry",{args:[.12,12,8]}),A.jsx("meshBasicMaterial",{color:"#facc15",wireframe:!0,depthTest:!1,depthWrite:!1})]}),A.jsxs("mesh",{position:[0,0,-.35],rotation:[Math.PI/2,0,0],renderOrder:1e3,children:[A.jsx("coneGeometry",{args:[.08,.45,12]}),A.jsx("meshBasicMaterial",{color:"#fde047",wireframe:!0,depthTest:!1,depthWrite:!1})]})]}),[e.showHelper]);return e.enabled?A.jsxs(j.Transform3D,{value:n,children:[t,e.type==="ambient"?A.jsx("ambientLight",{color:e.color,intensity:e.intensity}):null,e.type==="directional"?A.jsx("directionalLight",{color:e.color,intensity:e.intensity,castShadow:e.castShadow}):null,e.type==="point"?A.jsx("pointLight",{color:e.color,intensity:e.intensity,distance:e.distance,decay:e.decay,castShadow:e.castShadow}):null,e.type==="spot"?A.jsx("spotLight",{color:e.color,intensity:e.intensity,distance:e.distance,angle:e.angle,penumbra:e.penumbra,decay:e.decay,castShadow:e.castShadow}):null]}):null},Sn=({source:e,target:n,settings:t})=>{if(!t.enabled||!n)return!1;const s=new L.Quaternion;if(t.mode==="point"){const r=new L.Vector3;n.getWorldPosition(r),e.lookAt(r),s.copy(e.quaternion)}else n.getWorldQuaternion(s);const o=new L.Quaternion().setFromEuler(new L.Euler(t.offsetRotation.x*Math.PI/180,t.offsetRotation.y*Math.PI/180,t.offsetRotation.z*Math.PI/180));return e.quaternion.copy(s).multiply(o),!0},Ie=({target:e,settings:n,children:t})=>{const s=d.useRef(null);return R.useFrame(()=>{s.current&&Sn({source:s.current,target:e,settings:n})}),A.jsx("group",{ref:s,children:t})},pn=(e,n)=>{let t=e;for(;t&&t!==n;){if("isTransformControls"in t&&t.isTransformControls===!0)return!0;t=t.parent}return!1},k=({children:e,layer:n})=>{const t=d.useRef(null),s=d.useRef(0),o=d.useCallback(()=>{n===void 0||!t.current||t.current.traverse(r=>{pn(r,t.current)||r.layers.set(n)})},[n]);return d.useLayoutEffect(()=>{o(),s.current=2},[o,e]),R.useFrame(()=>{s.current<=0||(o(),s.current-=1)},-1e3),A.jsx("group",{ref:t,children:e})},m=(e,n)=>(e==null?void 0:e.type)===n,Bn=e=>null,N=({children:e,inside:n})=>n?A.jsx(A.Fragment,{children:e}):A.jsx(q.ScreenSpaceUI,{children:e}),Qn=({children:e,insideScreenSpaceUI:n,objectRef:t,renderOrder:s,settings:o})=>A.jsx(N,{inside:n,children:A.jsx(xn,{settings:o,renderOrder:s,objectRef:t,children:e})}),xn=({children:e,objectRef:n,renderOrder:t,settings:s})=>{const o=z.useScreenSpace();if(!s.enabled||!s.visible)return null;const r=V.resolveScreenTransform2D({transform:s,parentSize:o});return A.jsx("group",{ref:n,position:r.center,rotation:r.rotation,scale:r.size,renderOrder:t??s.renderOrder,children:e})},Tn=({anchor:e,children:n,insideScreenSpaceUI:t,objectRef:s,renderOrder:o,settings:r})=>A.jsx(N,{inside:t,children:A.jsx(bn,{anchor:e,settings:r,renderOrder:o,objectRef:s,children:n})}),bn=({anchor:e,children:n,objectRef:t,renderOrder:s,settings:o})=>{const r=De.useFaceInfo({targetFps:24}),{size:l}=R.useThree(),a=z.useScreenSpace(),u=d.useRef(null),c=d.useRef(new L.Vector3),h=d.useRef({pos:new L.Vector3,prevRaw:new L.Vector3,dxHat:new L.Vector3,initialized:!1}),f=d.useRef(!1),E=d.useRef({x:0,y:0,z:0,visibility:0}),v=d.useRef({x:0,y:0}),g=r?Me.resolveFaceAnchorPoint(e.target,r.landmarks,e.customAnchorPoint,E.current,r.mirrored):null,D=r?r.mirrored?r.pose.rotation.z:-r.pose.rotation.z:0,b=g?Le.normalizedToScreenPixels({point:g,viewportSize:l,target:v.current}):null,C=b?V.resolveScreenTransform2D({transform:{...o,position:{x:b.x+o.position.x+e.offset.x,y:b.y+o.position.y+e.offset.y}},parentSize:a}):null;return R.useFrame((y,p)=>{const B=u.current;if(B){if(B.visible=!!(C&&o.enabled&&o.visible),!C){f.current=!1,h.current.initialized=!1;return}c.current.set(C.center[0],C.center[1],e.offset.z),e.smoothing>0?(V.stepTrackingSmoothing(h.current,c.current,f.current?p:0,e.smoothing),B.position.copy(h.current.pos)):B.position.copy(c.current),f.current=!0}}),A.jsx("group",{ref:y=>{u.current=y,t==null||t(y)},rotation:[(C==null?void 0:C.rotation[0])??0,(C==null?void 0:C.rotation[1])??0,((C==null?void 0:C.rotation[2])??0)+(e.followFaceRoll?D:0)],scale:[o.size.width/100*o.scale2D.x,o.size.height/100*o.scale2D.y,1],renderOrder:s??o.renderOrder,children:n})},Ce=({editorMode:e=!1,faceMeshMaterialOverrides:n,fallback:t=Bn,insideScreenSpaceUI:s=!1,objectId:o,onComponentChange:r,renderLayer:l,renderOrder:a,store:u})=>{const c=ne.useRegisterRuntimeObject(),h=ne.useResolveRuntimeObject(),f=u.objects[o];if(!f||!f.enabled)return null;const E=M.getOrderedComponents(u,o).filter(i=>i.enabled),v=E.find(i=>i.type==="Transform"),g=E.find(i=>i.type==="ScreenTransform"),D=E.find(i=>i.type==="ScreenImage"),b=E.find(i=>i.type==="ScreenText"),C=E.find(i=>i.type==="ScreenShape"),y=E.find(i=>i.type==="MeshRenderer"),p=E.find(i=>i.type==="FaceMeshRenderer"),B=E.find(i=>i.type==="Light"),Q=E.find(i=>i.type==="LookAt"),W=E.find(i=>i.type==="PinToMesh"),G=E.find(i=>i.type==="TrackingAnchor"),S=M.getSceneObjectChildren(u,o).map(i=>A.jsx(Ce,{objectId:i.id,store:u,editorMode:e,renderOrder:a,renderLayer:l,onComponentChange:r,fallback:t,faceMeshMaterialOverrides:n,insideScreenSpaceUI:s||!!g},i.id));if(m(v,"Transform")&&m(B,"Light"))return A.jsx(k,{layer:l,children:A.jsxs("group",{ref:i=>c(o,i),children:[A.jsx(ve,{settings:B.settings,transform:v.settings}),S]})});if(m(v,"Transform")&&m(y,"MeshRenderer")){const i=m(Q,"LookAt")?Q.settings:M.createDefaultComponent("LookAt",o).settings,x=i.inheritChildren?S:null,_=i.inheritChildren?null:S;return A.jsx(k,{layer:l,children:A.jsx("group",{ref:J=>c(o,J),children:A.jsx(M.PinToMesh,{target:m(W,"PinToMesh")?h(W.settings.targetObjectId):null,settings:m(W,"PinToMesh")?W.settings:M.createDefaultComponent("PinToMesh",o).settings,children:A.jsxs(j.Transform3D,{value:v.settings,onChange:r?J=>r({...v,settings:J}):void 0,children:[A.jsxs(Ie,{target:m(Q,"LookAt")?h(Q.settings.targetObjectId):null,settings:i,children:[A.jsx(ke.MeshRenderer,{value:y.settings,renderOrder:a}),x]}),_]})})})})}if(m(p,"FaceMeshRenderer"))return A.jsx(k,{layer:l,children:A.jsxs("group",{ref:i=>c(o,i),children:[A.jsx(j.FaceMeshRenderer,{value:p.settings,materialOverride:n==null?void 0:n[p.id],transform:m(v,"Transform")?v.settings:void 0}),S]})});if(m(v,"Transform")){if(m(G,"TrackingAnchor")){const i=G.settings;return A.jsx(k,{layer:l,children:A.jsx(ye.FaceTracker,{followFaceRoll:i.followFaceRoll,children:A.jsx(V.TrackingAnchor,{target:i.target,customAnchorPoint:i.customAnchorPoint,offset:[i.offset.x,i.offset.y,i.offset.z],smoothing:i.smoothing,children:A.jsx(j.Transform3D,{objectRef:x=>c(o,x),value:v.settings,children:S})})})})}return A.jsx(k,{layer:l,children:A.jsx("group",{children:A.jsx(j.Transform3D,{objectRef:i=>c(o,i),value:v.settings,onChange:r?i=>r({...v,settings:i}):void 0,children:S})})})}if(m(g,"ScreenTransform")&&m(D,"ScreenImage")){const i=M.mapScreenImageSettingsToProps({screenSpaceUI:{enabled:!0},screenImage:{...D.settings,screenTransform:g.settings}});return i.shouldRender?A.jsx(k,{layer:l,children:A.jsx("group",{renderOrder:a,children:A.jsxs(N,{inside:s,children:[A.jsx(he,{...i.props,renderOrder:a??i.props.renderOrder,onScreenTransformChange:r?x=>r({...g,settings:x}):void 0}),S]})})}):null}if(m(g,"ScreenTransform")&&m(b,"ScreenText")){const i=M.mapScreenTextSettingsToProps({screenSpaceUI:{enabled:!0},screenText:{...b.settings,screenTransform:g.settings}});return i.shouldRender?A.jsx(k,{layer:l,children:A.jsx("group",{renderOrder:a,children:A.jsxs(N,{inside:s,children:[A.jsx(Ee,{...i.props,renderOrder:a??i.props.renderOrder,onScreenTransformChange:r?x=>r({...g,settings:x}):void 0}),S]})})}):null}return m(g,"ScreenTransform")&&m(C,"ScreenShape")?A.jsx(k,{layer:l,children:A.jsx("group",{ref:i=>c(o,i),renderOrder:a,children:A.jsxs(N,{inside:s,children:[A.jsx(M.ScreenShape,{name:f.name,settings:C.settings,transform:g.settings,renderOrder:a,onScreenTransformChange:r?i=>r({...g,settings:i}):void 0}),S]})})}):m(g,"ScreenTransform")?m(G,"TrackingAnchor")?A.jsx(k,{layer:l,children:A.jsx("group",{children:A.jsx(Tn,{anchor:G.settings,settings:g.settings,renderOrder:a,insideScreenSpaceUI:s,objectRef:i=>c(o,i),children:S})})}):A.jsx(k,{layer:l,children:A.jsx("group",{children:A.jsx(Qn,{settings:g.settings,renderOrder:a,insideScreenSpaceUI:s,objectRef:i=>c(o,i),children:S})})}):e?A.jsxs(A.Fragment,{children:[S,t(`Object "${f.name}" has unsupported components: ${E.map(i=>i.type).join(", ")}`)]}):S.length?A.jsx(A.Fragment,{children:S}):null},kn=({layers:e})=>{const{camera:n,gl:t,raycaster:s,scene:o}=R.useThree(),{session:r}=ne.useXRContext(),l=d.useCallback(()=>j.renderSequentialPasses({renderer:t,scene:o,camera:n,layers:e}),[n,t,e,o]);return R.useFrame(l,1),d.useEffect(()=>{const a=s.layers.mask;return e.forEach(u=>s.layers.enable(u)),()=>{s.layers.mask=a}},[e,s]),d.useEffect(()=>(r._setR3FState({renderer:t,scene:o,camera:n,renderFrame:l}),()=>r._setR3FState({renderer:t,scene:o,camera:n})),[n,t,l,o,r]),null};exports.LightObject=ve;exports.LookAt=Ie;exports.RenderGroupLayer=k;exports.SCREEN_IMAGE_MASK_CHANNELS=fe;exports.SceneObjectRenderer=Ce;exports.ScreenImage=he;exports.ScreenText=Ee;exports.SequentialRenderPasses=kn;exports.computeContainScale=Z;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const xt=require("three"),m=require("./index-CfSF8LXa.cjs"),Dt=require("./similarityFit-BFqHND2e.cjs");function It(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,a.get?a:{enumerable:!0,get:()=>t[o]})}}return e.default=t,Object.freeze(e)}const h=It(xt),ut=m.HAND_JOINT_NAMES.filter(t=>!t.endsWith("Tip")),v=["thumb","index","middle","ring","pinky"].flatMap(t=>{const e=(t==="thumb"?["Cmc","Mcp","Ip","Tip"]:["Mcp","Pip","Dip","Tip"]).map(o=>`${t}${o}`);return e.slice(0,3).map((o,a)=>({name:o,parent:a===0?"wrist":e[a-1],child:e[a+1]}))}),et=["wrist","thumbCmc","indexMcp","middleMcp","ringMcp","pinkyMcp"],M={m:new h.Matrix4,inv:new h.Matrix4,p:new h.Vector3,q:new h.Quaternion,s:new h.Vector3},Pt=(t,e="right")=>{const o=ut.filter(i=>!t.getObjectByName(i));if(o.length)throw new Error(`Hand rig is missing joint node(s): ${o.join(", ")}`);t.updateMatrixWorld(!0),M.inv.copy(t.matrixWorld).invert();const a={},l=[],r={},s={},n={},u={};for(const i of m.HAND_JOINT_NAMES){const d=t.getObjectByName(i)??null;if(a[i]=d,!d){l.push(new h.Vector3);continue}M.m.multiplyMatrices(M.inv,d.matrixWorld).decompose(M.p,M.q,M.s),l.push(M.p.clone()),r[i]=M.q.clone(),s[i]=d.quaternion.clone(),n[i]=d.position.clone(),u[i]=d.scale.clone()}for(const{name:i,child:d}of v){if(!d.endsWith("Tip")||a[d])continue;const c=l[m.HAND_JOINT_INDEX[i]],y=v.find(_=>_.child===i),H=l[m.HAND_JOINT_INDEX[y.name]];l[m.HAND_JOINT_INDEX[d]].copy(c).addScaledVector(c.clone().sub(H),.8)}const w=Float64Array.from(et.flatMap(i=>l[m.HAND_JOINT_INDEX[i]].toArray())),N=i=>l[m.HAND_JOINT_INDEX[i]],S=new h.Vector3().subVectors(N("indexMcp"),N("pinkyMcp")).cross(new h.Vector3().subVectors(N("middleMcp"),N("wrist"))).normalize().multiplyScalar(e==="right"?1:-1);return{root:t,bones:a,restPositions:l,restQuaternions:r,restLocal:s,restLocalPosition:n,restLocalScale:u,restPalm:w,restPalmNormal:S,modelHand:e}},p={offset:new h.Vector3,x:new h.Vector3,y:new h.Vector3,z:new h.Vector3,inv:new h.Quaternion,basis:new h.Matrix4},Tt=(t,e,o,a={position:new h.Vector3,quaternion:new h.Quaternion})=>{const l=v.find(n=>n.name===e);if(!l)throw new Error(`HandAttachment: "${e}" is not a finger bone`);const r=t.bones[l.child],s=t.restQuaternions[e];if(!s)throw new Error(`HandAttachment: the rig has no "${e}" node`);return p.inv.copy(s).invert(),r?p.offset.copy(r.position):p.offset.subVectors(t.restPositions[m.HAND_JOINT_INDEX[l.child]],t.restPositions[m.HAND_JOINT_INDEX[e]]).applyQuaternion(p.inv),a.position.copy(p.offset).multiplyScalar(o),p.y.copy(p.offset).normalize(),p.z.copy(t.restPalmNormal).applyQuaternion(p.inv),p.z.addScaledVector(p.y,-p.z.dot(p.y)).normalize(),p.x.crossVectors(p.y,p.z),p.basis.makeBasis(p.x,p.y,p.z),a.quaternion.setFromRotationMatrix(p.basis),a},ft=(t,e,o=m.HAND_JOINT_NAMES.map(()=>new h.Vector3))=>{const a=m.HAND_JOINT_NAMES.length;let l=0,r=0,s=0,n=0;for(let c=0;c<a;c+=1)m.trackerToWorld(t.image[c],e,o[c],0),l+=t.world[c].x,r+=t.world[c].y,s+=o[c].x,n+=o[c].y;l/=a,r/=a,s/=a,n/=a;let u=0,w=0,N=0;for(let c=0;c<a;c+=1){const y=t.world[c].x-l,H=t.world[c].y-r,_=o[c].x-s,f=o[c].y-n;u+=y*_+H*f,w+=y*f-H*_,N+=y*y+H*H}const S=Math.hypot(u,w)/Math.max(N,1e-12),i=u/Math.max(Math.hypot(u,w),1e-12),d=w/Math.max(Math.hypot(u,w),1e-12);for(let c=0;c<a;c+=1){const y=t.world[c].x-l,H=t.world[c].y-r;o[c].set(s+S*(i*y-d*H),n+S*(d*y+i*H),S*t.world[c].z)}return o},pt=.2,$=[.75,1.35],mt=2.5,vt=t=>mt*t.restPositions[m.HAND_JOINT_INDEX.middleMcp].distanceTo(t.restPositions[m.HAND_JOINT_INDEX.wrist]),Et=t=>t==="left"?"right":"left",yt=(t,e)=>e?Et(t):t,Rt=(t,e,o,a,l)=>{const r=l??{fit:{scale:1,quaternion:new h.Quaternion,translation:new h.Vector3,rms:0},mirrored:!1,local:{},lengths:{},knuckles:{}},s=ft(e,o);if(r.mirrored=yt(e.handedness,a)!==t.modelHand,r.mirrored)for(const f of s)f.x=-f.x;const n=Float64Array.from(et.flatMap(f=>s[m.HAND_JOINT_INDEX[f]].toArray()));Dt.solveSimilarity(t.restPalm,n,r.fit);const{scale:u,quaternion:w,translation:N}=r.fit,S=w.clone().invert(),i=s.map(f=>f.clone().sub(N).applyQuaternion(S).divideScalar(u)),d={wrist:t.restQuaternions.wrist.clone()},c=new h.Vector3,y=new h.Vector3,H=new h.Quaternion,_=new h.Quaternion;for(const{name:f,parent:I,child:J}of v){const D=m.HAND_JOINT_INDEX[f],B=m.HAND_JOINT_INDEX[J];H.copy(d[I]).multiply(t.restQuaternions[I].clone().invert()),c.subVectors(t.restPositions[B],t.restPositions[D]).normalize().applyQuaternion(H),y.subVectors(i[B],i[D]),y.lengthSq()<1e-12&&y.copy(c),_.setFromUnitVectors(c,y.normalize()),d[f]=_.clone().multiply(H).multiply(t.restQuaternions[f]);const L=r.local[f]??new h.Quaternion;r.local[f]=L.copy(d[I]).invert().multiply(d[f]);const V=t.restPositions[B].distanceTo(t.restPositions[D]),E=i[B].distanceTo(i[D]);if(r.lengths[f]=h.MathUtils.clamp(V>1e-9?E/V:1,$[0],$[1]),I==="wrist"){const k=r.knuckles[f]??new h.Vector3;r.knuckles[f]=k.subVectors(i[D],t.restPositions[D])}}return r},Bt=t=>{if(!t)return null;const e=t.length();if(e<1e-9)return null;for(const o of["x","y","z"])if(Math.abs(t[o])/e>=.98)return o;return null},X={q:new h.Quaternion,v:new h.Vector3},gt=(t,e,o=null)=>{const a=t.restPositions[m.HAND_JOINT_INDEX.middleMcp].distanceTo(t.restPositions[m.HAND_JOINT_INDEX.wrist]);X.q.copy(t.restQuaternions.wrist).invert();for(const{name:l,parent:r,child:s}of v){const n=t.bones[l];if(!n)continue;if(r==="wrist"){const d=t.restLocalPosition[l];if(d){n.position.copy(d);const c=o==null?void 0:o[l];c&&(X.v.copy(c).clampLength(0,pt*a),n.position.add(X.v.applyQuaternion(X.q)))}}const u=(e==null?void 0:e[l])??1;n.scale.copy(t.restLocalScale[l]??n.scale);const w=t.bones[s],N=t.restLocalPosition[s];if(v.some(d=>d.name===s)&&w&&N){w.position.copy(N).multiplyScalar(u);continue}const i=Bt(N);i?n.scale[i]*=u:n.scale.multiplyScalar(u)}},Lt=(t,e,o=!0)=>{for(const{name:a}of v){const l=t.bones[a],r=e.local[a];l&&r&&l.quaternion.copy(r)}gt(t,o?e.lengths:null,o?e.knuckles:null)},kt=(t,e,o=new h.Matrix4)=>(M.s.setScalar(t.scale),o.compose(t.translation,t.quaternion,M.s),e&&o.premultiply(M.m.makeScale(-1,1,1)),o),Nt={nose:0,leftShoulder:11,rightShoulder:12,leftElbow:13,rightElbow:14,leftWrist:15,rightWrist:16,leftPinky:17,rightPinky:18,leftIndex:19,rightIndex:20,leftThumb:21,rightThumb:22,leftHip:23,rightHip:24,leftKnee:25,rightKnee:26,leftAnkle:27,rightAnkle:28},Z=33,wt=[0,11,12,13,14,15,16],Ht=[23,24,25,26,27,28],tt=Object.freeze({visible:.5,raisedAboveShoulder:.75,outLevel:.5,outReach:.9,outStraight:45,onHeadAboveShoulder:.35,onHeadNearNose:.8,onHeadMaxAboveNose:1.1,onHeadBend:55,onHipAboveMin:.12,onHipAboveMax:.9,onHipInward:-.45,onHipOutward:.7,onHipElbowOut:.3,onHipBend:45,thumbUpLift:.08,thumbUpAboveWrist:.12,thumbUpTop:.6,thumbUpBottom:-1.3,thumbUpPastMidline:.3,crossedPast:.05,crossedTop:.35,crossedBottom:-1.9,downBelow:.9,legRaisedKnee:-.6,legRaisedAnkle:.4,legDownBelow:.8,squatHipHeight:1.65,leanDegrees:8,wideStance:1.4}),_t=(t,e=1)=>e===1||!Number.isFinite(e)||e<=0?t:t.map(o=>({x:o.x*e,y:o.y,z:o.z*e})),U=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),Y=t=>Math.hypot(t.x,t.y),ct=(t,e)=>{const o=Y(t)*Y(e);return o<1e-9?0:Math.acos(Math.max(-1,Math.min(1,(t.x*e.x+t.y*e.y)/o)))*180/Math.PI},qt=(t,{mirrored:e=!1,visibility:o,limits:a,aspect:l=1}={})=>{if(t.length<Z)throw new Error(`analyzeBodyShape needs MediaPipe's ${Z} pose landmarks (got ${t.length})`);const r=_t(t,l),s=a?{...tt,...a}:tt,n=Nt,u=g=>((o==null?void 0:o[g])??1)>=s.visible,w=r[n.nose],N=r[n.leftShoulder],S=r[n.rightShoulder],i=Math.max(Y(U(N,S)),1e-6),d=(N.x+S.x)/2,c=g=>{const A=r[g==="left"?n.leftShoulder:n.rightShoulder],x=r[g==="left"?n.leftElbow:n.rightElbow],O=r[g==="left"?n.leftWrist:n.rightWrist],Q=r[g==="left"?n.leftHip:n.rightHip],P=Math.sign(A.x-d)||1,b=(O.y-A.y)/i,q=P*(O.x-A.x)/i,R=ct(U(x,A),U(O,x)),W=-P*(O.x-d)/i,z=(O.y-w.y)/i,bt=Math.abs(O.x-w.x)/i,rt=P*(x.x-A.x)/i,K=(O.y-Q.y)/i,it=P*(O.x-Q.x)/i,Ot=u(g==="left"?n.leftHip:n.rightHip),[C,lt,F]=g==="left"?[n.leftThumb,n.leftIndex,n.leftPinky]:[n.rightThumb,n.rightIndex,n.rightPinky],j=r.length>F&&u(C)&&u(lt)&&u(F),at=j?(r[C].y-Math.max(r[lt].y,r[F].y))/i:0,Mt=j?(r[C].y-O.y)/i:0;let T="other";return j&&at>s.thumbUpLift&&Mt>s.thumbUpAboveWrist&&b<s.thumbUpTop&&b>s.thumbUpBottom&&W<s.thumbUpPastMidline?T="thumbUp":W>s.crossedPast&&b<s.crossedTop&&b>s.crossedBottom?T="crossed":b>s.onHeadAboveShoulder&&bt<s.onHeadNearNose&&z<s.onHeadMaxAboveNose&&R>s.onHeadBend?T="onHead":b>s.raisedAboveShoulder?T="raised":Math.abs(b)<s.outLevel&&q>s.outReach&&R<s.outStraight?T="out":Ot&&K>s.onHipAboveMin&&K<s.onHipAboveMax&&it>s.onHipInward&&it<s.onHipOutward&&rt>s.onHipElbowOut&&R>s.onHipBend?T="onHip":b<-s.downBelow&&(T="down"),{state:T,up:b,out:q,bend:R,elbowOut:rt,aboveHip:K,thumbLift:at}},y={left:c("left"),right:c("right")},H=e?{left:y.right,right:y.left}:y,_=(g,A,x)=>r[x==="left"!==e?g:A],f=u(n.leftHip)&&u(n.rightHip),I=(g,A)=>({x:(g.x+A.x)/2,y:(g.y+A.y)/2}),J=I(r[n.leftHip],r[n.rightHip]),D=I(N,S),B=Math.sign(_(n.leftShoulder,n.rightShoulder,"left").x-_(n.leftShoulder,n.rightShoulder,"right").x)||1,L=f?Math.atan2(B*(D.x-J.x),D.y-J.y)*180/Math.PI:null,V=r.length>n.rightAnkle&&Ht.every(g=>u(g));let E=null,k=null,G=null;if(V){const g=x=>{const O=x==="left"?"right":"left",Q=_(n.leftHip,n.rightHip,x),P=_(n.leftKnee,n.rightKnee,x),b=_(n.leftAnkle,n.rightAnkle,x),q=(P.y-Q.y)/i,R=(b.y-_(n.leftAnkle,n.rightAnkle,O).y)/i,W=ct(U(P,Q),U(b,P));let z="other";return q>s.legRaisedKnee&&R>s.legRaisedAnkle?z="raised":q<-s.legDownBelow&&(z="down"),{state:z,kneeLift:q,ankleLift:R,bend:W}};E={left:g("left"),right:g("right")};const A=I(r[n.leftAnkle],r[n.rightAnkle]);k=(J.y-A.y)/i,G=Y(U(r[n.leftAnkle],r[n.rightAnkle]))/i}const st=!!E&&E.left.state!=="raised"&&E.right.state!=="raised";return{arms:H,shoulderWidth:i,upperBodyVisible:wt.every(u),hipsVisible:f,lowerBodyVisible:V,legs:E,lean:L,leanSide:L===null||Math.abs(L)<s.leanDegrees?null:L>0?"left":"right",hipHeight:k,stance:G,squat:st&&k!==null&&k<s.squatHipHeight,wideStance:st&&G!==null&&G>s.wideStance}},Ut=t=>{if(!t.rule&&!t.match)throw new Error("defineBodyPose needs a rule or a match function");return t},nt={hooray:{label:"Raise both arms",rule:{arms:{left:"raised",right:"raised"}},hint:{clip:"hooray",arms:["left","right"]}},handsUp:{label:"Hands up",rule:{arms:{left:"raised",right:"raised"}},hint:{clip:"hooray",arms:["left","right"]}},tPose:{label:"Make a T-pose",rule:{arms:{left:"out",right:"out"}},hint:{clip:"tpose",arms:["left","right"]}},raiseLeft:{label:"Raise your left arm",rule:{arms:{left:"raised",right:["down","other","onHip"]},lean:"none"},hint:{clip:"raiseLeft",arms:["left"]}},raiseRight:{label:"Raise your right arm",rule:{arms:{right:"raised",left:["down","other","onHip"]},lean:"none"},hint:{clip:"raiseRight",arms:["right"]}},handsOnHips:{label:"Hands on your hips",rule:{arms:{left:"onHip",right:"onHip"}},hint:{clip:"handsOnHips",arms:["left","right"]}},armsCrossed:{label:"Cross your arms",rule:{arms:{left:"crossed",right:"crossed"}},hint:{clip:"armsCrossed",arms:["left","right"]}},handsOnHead:{label:"Hands on your head",rule:{arms:{left:"onHead",right:"onHead"}},hint:{clip:"handsOnHead",arms:["left","right"]}},thumbUp:{label:"Give a thumbs up",rule:{anyOf:[{arms:{right:"thumbUp"}},{arms:{left:"thumbUp"}}]},hint:{clip:"thumbUp",arms:["right"]}},bothThumbsUp:{label:"Two thumbs up",rule:{arms:{left:"thumbUp",right:"thumbUp"}},hint:{clip:"bothThumbsUp",arms:["left","right"]}},salute:{label:"Salute",rule:{arms:{right:"onHead",left:["down","other","onHip"]}},hint:{clip:"salute",arms:["right"]}},squat:{label:"Squat down",rule:{squat:!0},view:"full",hint:{clip:"squat",arms:[],legs:["left","right"]}},leanLeft:{label:"Lean to your left",rule:{lean:"left"},view:"full",hint:{clip:"leanLeft",arms:["right"]}},leanRight:{label:"Lean to your right",rule:{lean:"right"},view:"full",hint:{clip:"leanRight",arms:["left"]}},oneLeg:{label:"Stand on one leg",rule:{anyOf:[{legs:{right:"raised",left:"down"}},{legs:{left:"raised",right:"down"}}]},view:"full",hint:{clip:"oneLeg",arms:[],legs:["right"]}},star:{label:"Make a star",rule:{wideStance:!0,arms:{left:["raised","out"],right:["raised","out"]}},view:"full",hint:{clip:"star",arms:["left","right"],legs:["left","right"]}}},St=Object.keys(nt),At=t=>typeof t=="string"?nt[t]:typeof t=="object"&&"hint"in t?t:void 0,ht=(t,e)=>t===void 0||(typeof t=="string"?e===t:t.includes(e)),dt=(t,e)=>{var o,a;for(const l of["left","right"])if(!ht((o=e.arms)==null?void 0:o[l],t.arms[l].state)||((a=e.legs)==null?void 0:a[l])!==void 0&&(!t.legs||!ht(e.legs[l],t.legs[l].state)))return!1;return!(e.lean!==void 0&&(e.lean==="none"?t.leanSide!==null:t.leanSide!==e.lean)||e.squat!==void 0&&(e.squat?!t.squat:t.squat)||e.wideStance!==void 0&&(e.wideStance?!t.wideStance:t.wideStance)||e.anyOf&&e.anyOf.length>0&&!e.anyOf.some(l=>ot(t,l)))},ot=(t,e)=>{if(typeof e=="function")return e(t);const o=At(e);return o?o.rule&&!dt(t,o.rule)?!1:o.match?o.match(t):!!o.rule:dt(t,e)},Jt=t=>St.filter(e=>ot(t,e));exports.BODY_LANDMARK_COUNT=Z;exports.BODY_LOWER_JOINTS=Ht;exports.BODY_POSES=nt;exports.BODY_POSE_JOINTS=Nt;exports.BODY_POSE_NAMES=St;exports.BODY_SHAPE_LIMITS=tt;exports.BODY_UPPER_JOINTS=wt;exports.HAND_RIG_BONES=v;exports.HAND_RIG_KNUCKLE_SHIFT=pt;exports.HAND_RIG_LENGTH_RANGE=$;exports.HAND_RIG_PALM_JOINTS=et;exports.HAND_RIG_REQUIRED_JOINTS=ut;exports.HAND_RIG_SNAP_PALMS=mt;exports.analyzeBodyShape=qt;exports.applyHandRigLengths=gt;exports.applyHandRigSolution=Lt;exports.bindHandRig=Pt;exports.defineBodyPose=Ut;exports.handAttachmentLocal=Tt;exports.handPoseToScene=ft;exports.handRigRootMatrix=kt;exports.handRigSnapDistance=vt;exports.matchBodyPose=ot;exports.matchingBodyPoses=Jt;exports.resolveBodyPose=At;exports.screenChirality=yt;exports.solveHandRig=Rt;exports.squareLandmarks=_t;
|