@vincentt-xr/sdk 2.0.0-alpha.6 → 2.0.0-alpha.7
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 +81 -3
- package/dist/{DebuggerUI-DYT_dk1E.cjs → DebuggerUI-B6bP6P9r.cjs} +1 -1
- package/dist/{DebuggerUI-C_rbLdkh.js → DebuggerUI-BjOMr8q_.js} +1 -1
- package/dist/{FaceMeshRenderer-D1WsrTLA.cjs → FaceMeshRenderer-C5l6VLdO.cjs} +6 -6
- package/dist/{FaceMeshRenderer-DSCd1H55.js → FaceMeshRenderer-wjAHrJzP.js} +102 -96
- package/dist/{FaceRetouch-DsE0Dbw-.cjs → FaceRetouch-BkJzoA79.cjs} +1 -1
- package/dist/{FaceRetouch-CMJbGThL.js → FaceRetouch-DwbKQJAN.js} +4 -4
- package/dist/components/FaceMesh/FaceMeshRenderer.d.ts +11 -3
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +10 -4
- package/dist/components/FaceMesh/index.d.ts +2 -2
- package/dist/components/SceneObjectRenderer/index.d.ts +9 -2
- package/dist/components/XRMediaSurface/index.d.ts +2 -1
- package/dist/{contexts-DvQI4PqI.js → contexts-ByhzppYl.js} +3 -3
- package/dist/{contexts-h-9TRH0r.cjs → contexts-Dr62It_K.cjs} +1 -1
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui.cjs +1 -1
- package/dist/debug-ui.js +10 -10
- package/dist/entries/core.d.ts +3 -2
- package/dist/entries/face-effects.d.ts +2 -2
- package/dist/entries/tracking.d.ts +2 -0
- package/dist/face-effects.cjs +1 -1
- package/dist/face-effects.js +25 -24
- package/dist/{getFaceInfo-B43Cwq4n.js → getFaceInfo-C4QpCQIY.js} +1 -1
- package/dist/{getFaceInfo-DEzcL_Ub.cjs → getFaceInfo-fA1bFBub.cjs} +1 -1
- package/dist/hooks/useXRSession/facade.d.ts +2 -0
- package/dist/{index-I4eF5TKT.js → index-9dlAQAhy.js} +405 -400
- package/dist/{index-CY7Z8cHV.cjs → index-BjmTe9eM.cjs} +1 -1
- package/dist/{index-D67hHm44.cjs → index-BpEf2BBb.cjs} +1 -1
- package/dist/{index-B-s4YbWu.js → index-ByoNj0QP.js} +1 -1
- package/dist/{index-CxMEeCRP.cjs → index-CyUUurQT.cjs} +1 -1
- package/dist/index-DCiMbxC3.cjs +1 -0
- package/dist/{index-G_5h_FJQ.js → index-DXT3WccE.js} +808 -787
- package/dist/index-DpI-qo5X.cjs +17 -0
- package/dist/{index-DYfY9ljy.js → index-DyVF4vEW.js} +1 -1
- package/dist/{index-uE3sKczj.js → index-VJ0SJwmG.js} +1 -1
- package/dist/{internal-MvKrz0Nt.cjs → internal-Cq-TEQ5Y.cjs} +1 -1
- package/dist/{internal-ldPYiUF0.js → internal-Dmk1cTXq.js} +3 -3
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +1 -1
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +344 -330
- package/dist/main.cjs +1 -1
- package/dist/main.js +94 -91
- package/dist/{renderGroups-BJsx32q5.cjs → renderGroups-80H3DpTl.cjs} +1 -1
- package/dist/{renderGroups-CFt1yYLB.js → renderGroups-KZk6eRiY.js} +1 -1
- package/dist/{renderPasses-D-Krl6D0.cjs → renderPasses-BOoBSr8z.cjs} +1 -1
- package/dist/{renderPasses-C72MbZ-a.js → renderPasses-BcquyVtu.js} +4 -4
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/screen2d/coordinates.d.ts +20 -0
- package/dist/{selectors-ByKNTXeA.js → selectors-B8H97CKA.js} +1 -1
- package/dist/{selectors-CAwmL9VW.cjs → selectors-CZLKT2Iv.cjs} +1 -1
- package/dist/{session-CANvoLD6.cjs → session-CpkiK5YA.cjs} +1 -1
- package/dist/{session-Dhi0OqZo.js → session-DLFN_VII.js} +1 -1
- package/dist/tracking/coordinates.d.ts +5 -0
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +69 -66
- package/dist/types/common.d.ts +11 -1
- package/dist/types/gesture-tracking.d.ts +2 -2
- package/dist/types/hand-tracking.d.ts +3 -3
- package/dist/types/nodes.d.ts +2 -2
- package/dist/types/session.d.ts +7 -1
- package/dist/{useFaceInfo-BSZq7AO1.cjs → useFaceInfo-BJ8-_MOs.cjs} +1 -1
- package/dist/{useFaceInfo-FVQBBNdY.js → useFaceInfo-Dk426LTu.js} +3 -3
- package/dist/{useFaceResults-D62STzT1.js → useFaceResults-CtetsO9M.js} +1 -1
- package/dist/{useFaceResults-C3oZkn2Z.cjs → useFaceResults-wBJF3zyp.cjs} +1 -1
- package/docs/SDK_DOCUMENTATION.md +3 -0
- package/docs/api/capture-recording.mdx +9 -1
- package/docs/api/face-mesh.mdx +33 -0
- package/docs/api/runtime-3d.mdx +5 -0
- package/docs/api/screen-image.mdx +3 -1
- package/docs/api/screen-space-coordinates.mdx +31 -0
- package/docs/api/trackers.mdx +13 -0
- package/package.json +4 -1
- package/dist/index-C0-fg1Hk.cjs +0 -1
- package/dist/index-DPPpU5By.cjs +0 -17
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";const a=require("react/jsx-runtime"),U=require("@react-three/fiber"),v=require("react"),Y=require("three"),K=require("./index-BjmTe9eM.cjs"),re=require("./FaceMeshRenderer-C5l6VLdO.cjs"),I=require("./renderPasses-BOoBSr8z.cjs"),te=require("./contexts-Dr62It_K.cjs"),We=require("./index-CyUUurQT.cjs"),Xe=require("./index-BpEf2BBb.cjs"),nt=require("./useFaceInfo-BJ8-_MOs.cjs"),Ae=require("./index-DCiMbxC3.cjs"),rt=require("@react-three/drei");function it(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const M=it(Y),ie={width:720,height:1280},st=(t=[.5,.5])=>[t[0]*2-1,t[1]*2-1],he=({position:t=[0,0],size:e=[1,1]})=>{const n=e[0]/2,r=e[1]/2;return{left:t[0]-n,right:t[0]+n,top:t[1]+r,bottom:t[1]-r}},ot=({position:t=[0,0],size:e,canvasSize:n=ie})=>{const r=n.width/2||ie.width/2,s=n.height/2||ie.height/2,i=e??[n.width,n.height];return he({position:[t[0]/r,t[1]/s],size:[i[0]/r,i[1]/s]})},je=({coordinateSpace:t="normalized",canvasSize:e=ie,position:n,size:r,fallbackAnchors:s})=>s||(!n&&!r?he({}):t==="canvas"?ot({position:n,size:r,canvasSize:e}):he({position:n,size:r})),k=(t,e)=>{if(!Number.isFinite(t)||t<=0)throw new RangeError(`${e} must be positive`);return t},at=(t,e)=>{const n=k(e.width,"root.width"),r=k(e.height,"root.height");return!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<=0||t.height<=0?0:Math.min(t.width/n,t.height/r)},Ee=(t,e,n,r)=>e.width<=0||e.height<=0?Object.assign(r,{x:0,y:0}):(k(n.width,"root.width"),k(n.height,"root.height"),r.x=(t.x/e.width-.5)*n.width,r.y=(.5-t.y/e.height)*n.height,r),Ce=(t,e,n,r)=>e.width<=0||e.height<=0?Object.assign(r,{x:0,y:0}):(k(n.width,"root.width"),k(n.height,"root.height"),r.x=(t.x/n.width+.5)*e.width,r.y=(.5-t.y/n.height)*e.height,r),Ge=({parentSize:t,referencePixelsPerUnit:e=I.DEFAULT_REFERENCE_PIXELS_PER_UNIT,root:n=I.DEFAULT_SCREEN_TRANSFORM_ROOT})=>at(t,n)*(I.DEFAULT_REFERENCE_PIXELS_PER_UNIT/k(e,"referencePixelsPerUnit")),lt=(t,e)=>t*Ge(e),ct=(t,e)=>{const n=Ge(e);return n===0?0:t/n},At=({point:t,parentSize:e,referencePixelsPerUnit:n=I.DEFAULT_REFERENCE_PIXELS_PER_UNIT,root:r=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:s={x:0,y:0}})=>{if(e.width<=0||e.height<=0)return Object.assign(s,{x:0,y:0});const i=I.DEFAULT_REFERENCE_PIXELS_PER_UNIT/k(n,"referencePixelsPerUnit");return s.x=t.x*(e.width/k(r.width,"root.width"))*i,s.y=t.y*(e.height/k(r.height,"root.height"))*i,s},ht=({point:t,parentSize:e,referencePixelsPerUnit:n=I.DEFAULT_REFERENCE_PIXELS_PER_UNIT,root:r=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:s={x:0,y:0}})=>{if(e.width<=0||e.height<=0)return Object.assign(s,{x:0,y:0});const i=I.DEFAULT_REFERENCE_PIXELS_PER_UNIT/k(n,"referencePixelsPerUnit");return s.x=t.x/(e.width/k(r.width,"root.width")*i),s.y=t.y/(e.height/k(r.height,"root.height")*i),s},dt=({point:t,rect:e,root:n=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0}})=>Ee({x:t.x-e.left,y:t.y-e.top},e,n,r),gt=({point:t,rect:e,root:n=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0}})=>(Ce(t,e,n,r),r.x+=e.left,r.y+=e.top,r),ve=({point:t,root:e=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:n={x:0,y:0},viewportSize:r})=>Ee({x:t.x*r.width,y:t.y*r.height},r,e,n),ut=({point:t,root:e=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:n={x:0,y:0},viewportSize:r})=>r.width<=0||r.height<=0?Object.assign(n,{x:0,y:0}):(Ce(t,r,e,n),n.x/=r.width,n.y/=r.height,n),ft=({point:t,root:e=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:n={x:0,y:0},viewportSize:r})=>ve({point:{x:(t.x+1)/2,y:(1-t.y)/2},viewportSize:r,root:e,target:n}),St=({layout:t,mirrored:e=!1,point:n,root:r=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:s={x:0,y:0}})=>{if(t.scale<=0)return Object.assign(s,{x:0,y:0});const i=t.offsetX+n.x*t.scale;return Ee({x:e?t.destination.width-i:i,y:t.offsetY+n.y*t.scale},t.destination,r,s)},Et=({layout:t,mirrored:e=!1,point:n,root:r=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:s={x:0,y:0}})=>{if(t.scale<=0)return Object.assign(s,{x:0,y:0});Ce(n,t.destination,r,s);const i=e?t.destination.width-s.x:s.x;return s.x=(i-t.offsetX)/t.scale,s.y=(s.y-t.offsetY)/t.scale,s},ae=new Y.Vector3,Qe=new Y.Vector2,Fe=new Y.Raycaster,Ct=({camera:t,point:e,root:n=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0,depth:0},viewportSize:s})=>(k(n.width,"root.width"),k(n.height,"root.height"),ae.set(e.x,e.y,e.z).project(t),r.x=ae.x*n.width/2,r.y=ae.y*n.height/2,r.depth=ae.z,r),vt=({camera:t,point:e,root:n=I.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r=new Y.Ray,viewportSize:s})=>(k(n.width,"root.width"),k(n.height,"root.height"),Qe.set(e.x*2/n.width,e.y*2/n.height),Fe.setFromCamera(Qe,t),r.copy(Fe.ray)),Ne=({children:t,depth:e=0})=>{const{camera:n,size:r}=U.useThree(),s=v.useMemo(()=>{if(!n.isPerspectiveCamera)return{width:10,height:10};const i=n,o=Math.abs(i.position.z-e),l=i.fov*Math.PI/180,c=2*Math.tan(l/2)*o;return{width:c*(r.width/r.height),height:c}},[n,r,e]);return a.jsx(K.ScreenSpaceContext.Provider,{value:s,children:a.jsx("group",{position:[0,0,e],children:t})})},He=v.forwardRef(({texture:t,name:e,overlay:n,opacity:r,position:s,rotation:i,scale:o,visible:l,renderOrder:c},A)=>a.jsxs("mesh",{ref:A,name:e,position:s,rotation:i,scale:o,visible:l,renderOrder:c,children:[a.jsx("planeGeometry",{args:[1,1]}),a.jsx("meshBasicMaterial",{map:t,transparent:!0,opacity:r,depthTest:!n,depthWrite:!n})]}));He.displayName="TextLabelMesh";const mt={color:"#ffffff",strokeWidth:0,strokeOpacity:1,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowOpacity:1,fontWeight:"bold",fontStyle:"normal",fontFamily:"Arial, sans-serif",fontSize:48,textAlign:"center",verticalAlign:"center",minFontSize:12,letterSpacing:0,lineSpacing:.3,bgColor:"rgba(20,40,110,0.88)",bgFillMode:"solid",bgOpacity:1,bgFit:"full",bgTextureFit:"cover",bgTextureFlipX:!1,bgTextureFlipY:!1,borderWidth:0,borderRadius:24,padding:32,aspect:2.5,resolution:512,opacity:1,underline:!1,strikethrough:!1,bendPreset:"arc",bendStrength:0},de=t=>{v.useEffect(()=>()=>{t==null||t.dispose()},[t])};function Tt(t,e,n){return n==="left"?e:n==="right"?t-e:t/2}function It(t,e,n,r,s){return s==="top"?e+n/2:s==="bottom"?t-e-r+n/2:t/2-(r-n)/2}function bt(t,e,n,r){return r==="full"||n==="left"?0:n==="right"?t-e:(t-e)/2}function Je(t,e,n,r){return`${t} ${e} ${n}px ${r}`}function oe(t,e){const n=Math.max(0,Math.min(e,1));return t*n*.08}function Ue(t,e){const n=Math.max(0,Math.min(e,1));return t*(1.2+n*.6)}function ze(t,e){"letterSpacing"in t&&(t.letterSpacing=`${e}px`)}function Ke(t){"letterSpacing"in t&&(t.letterSpacing="0px")}function ne(t,e,n){ze(t,n);const r=t.measureText(e).width;return Ke(t),r}function ge(t,e,n,r){return Math.max(1,Math.floor((t-e*2)/Ue(n,r)))}function xt(t,e,n,r,s){return e.length<=r&&e.every(i=>ne(t,i,s)<=n)}function ue(t,e,n,r,s,i,o,l){t.font=Je(r,s,i,o);const c=e.split(" "),A=[];let h="";for(const u of c){const g=h?`${h} ${u}`:u;ne(t,g,l)>n&&h?(A.push(h),h=u):h=g}return h&&A.push(h),A}function ke(t,e,n,r,s,i,o,l){const A=e.split(/\r?\n/).flatMap(h=>h.trim().length===0?[""]:ue(t,h,n,r,s,i,o,l));return A.length>0?A:[e]}function Ve(t,e,n,r,s){const i=r?"...":"";let o=e.trimEnd();for(;o.length>0&&ne(t,`${o}${i}`,s)>n;)o=o.slice(0,-1).trimEnd();return`${o}${i}`}function fe(t,e,n,r,s){return e.map((i,o)=>{if(ne(t,i,s)<=n)return i;const l=o===e.length-1;return Ve(t,i,n,r==="ellipsis"&&l,s)})}function Le(t,e,n,r,s,i){if(e.length<=n)return fe(t,e,r,s?"ellipsis":"clip",i);const o=e.slice(0,n),l=o[n-1];return o[n-1]=Ve(t,l,r,s,i),fe(t,o,r,s?"ellipsis":"clip",i)}function yt(t){const{ctx:e,text:n,explicitLines:r,maxWidth:s,maxHeight:i,padding:o,fontStyle:l,fontWeight:c,fontSize:A,fontFamily:h,letterSpacing:u,lineSpacing:g,overflow:S,resizeToFit:E,minFontSize:C}=t;let f=A,m=oe(f,u),b=r??ke(e,n,s,l,c,f,h,m),T=ge(i,o,f,g);const p=E===!0||S==="shrink";for(;p&&!xt(e,b,s,T,m)&&f>C&&(f=Math.max(C,f-4),m=oe(f,u),b=r??ke(e,n,s,l,c,f,h,m),T=ge(i,o,f,g),f!==C););return S==="ellipsis"?b=Le(e,b,T,s,!0,m):S==="clamp"||S==="shrink"?b=Le(e,b,T,s,!1,m):S!=="clip"&&(b=fe(e,b,s,void 0,m)),{fontSize:f,lines:b}}function Bt(t){const{ctx:e,text:n,maxWidth:r,maxHeight:s,padding:i,fontStyle:o,fontWeight:l,fontSize:c,fontFamily:A,letterSpacing:h,lineSpacing:u}=t;let g=c,S=ue(e,n,r,o,l,g,A,oe(g,h));const E=ge(s,i,g,u);return S.length>E&&(g=Math.max(12,Math.round(g*.75)),S=ue(e,n,r,o,l,g,A,oe(g,h))),{fontSize:g,lines:S}}function Se(t,e){return typeof OffscreenCanvas<"u"?new OffscreenCanvas(t,e):(()=>{const n=document.createElement("canvas");return n.width=t,n.height=e,n})()}function Mt(t,e){const n=e.width-e.padding*2,s=Array.isArray(e.lines)||e.text.includes(`
|
|
2
|
+
`)||e.overflow!==void 0||e.resizeToFit!==void 0?yt({ctx:t,text:e.text,explicitLines:e.lines,maxWidth:n,maxHeight:e.height,padding:e.padding,fontStyle:e.fontStyle,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFamily:e.fontFamily,overflow:e.overflow,resizeToFit:e.resizeToFit,minFontSize:e.minFontSize,letterSpacing:e.letterSpacing,lineSpacing:e.lineSpacing}):Bt({ctx:t,text:e.text,maxWidth:n,maxHeight:e.height,padding:e.padding,fontStyle:e.fontStyle,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFamily:e.fontFamily,letterSpacing:e.letterSpacing,lineSpacing:e.lineSpacing}),i=s.fontSize,o=s.lines;t.font=Je(e.fontStyle,e.fontWeight,i,e.fontFamily);const l=oe(i,e.letterSpacing),c=Ue(i,e.lineSpacing),A=Math.max(i,i+(o.length-1)*c),h=It(e.height,e.padding,i,A,e.verticalAlign),u=o.map(g=>ne(t,g,l));return{fontSize:i,resolvedLines:o,letterSpacingPx:l,lineHeight:c,startY:h,textBlockWidth:Math.min(e.width,Math.max(0,Math.max(...u,0))+e.padding*2),textBlockHeight:Math.min(e.height,A+e.padding*2),textX:Tt(e.width,e.padding,e.textAlign)}}function wt(t,e,n,r,s,i){t.beginPath(),t.moveTo(e+i,n),t.lineTo(e+r-i,n),t.quadraticCurveTo(e+r,n,e+r,n+i),t.lineTo(e+r,n+s-i),t.quadraticCurveTo(e+r,n+s,e+r-i,n+s),t.lineTo(e+i,n+s),t.quadraticCurveTo(e,n+s,e,n+s-i),t.lineTo(e,n+i),t.quadraticCurveTo(e,n,e+i,n),t.closePath()}function Re(t,e,n){return typeof t!="number"||Number.isNaN(t)||t<=0?e:Math.min(t,n)}function pt(t,e){const n=bt(e.canvasWidth,e.panelWidth,e.textAlign,e.bgFit),r=(e.canvasHeight-e.panelHeight)/2,s=Math.min(e.borderRadius,Math.min(e.panelWidth,e.panelHeight)/2);wt(t,n,r,e.panelWidth,e.panelHeight,s),Qt(t,{panelX:n,panelY:r,panelWidth:e.panelWidth,panelHeight:e.panelHeight,bgColor:e.bgColor,bgFillMode:e.bgFillMode,bgOpacity:e.bgOpacity,bgGradientStops:e.bgGradientStops,bgTextureImage:e.bgTextureImage,bgTextureFit:e.bgTextureFit,bgTextureFlipX:e.bgTextureFlipX,bgTextureFlipY:e.bgTextureFlipY}),e.borderColor&&e.borderWidth>0&&(t.lineWidth=e.borderWidth,t.strokeStyle=e.borderColor,t.stroke())}function Qt(t,e){if(t.save(),t.globalAlpha=Math.max(0,Math.min(e.bgOpacity,1)),e.bgFillMode==="gradient"&&e.bgGradientStops&&e.bgGradientStops.length>1){const n=t.createLinearGradient(e.panelX,e.panelY,e.panelX+e.panelWidth,e.panelY+e.panelHeight);[...e.bgGradientStops].sort((r,s)=>r.position-s.position).forEach(r=>n.addColorStop(Math.max(0,Math.min(r.position,1)),r.color)),t.fillStyle=n,t.fill(),t.restore();return}if(e.bgTextureImage){t.clip(),Ft(t,{image:e.bgTextureImage,x:e.panelX,y:e.panelY,width:e.panelWidth,height:e.panelHeight,fit:e.bgTextureFit,flipX:e.bgTextureFlipX,flipY:e.bgTextureFlipY}),t.restore();return}t.fillStyle=e.bgColor,t.fill(),t.restore()}function Ft(t,e){const{image:n,x:r,y:s,width:i,height:o,fit:l,flipX:c,flipY:A}=e,h="naturalWidth"in n?n.naturalWidth:"videoWidth"in n?n.videoWidth:n.width,u="naturalHeight"in n?n.naturalHeight:"videoHeight"in n?n.videoHeight:n.height;let g=i,S=o,E=r,C=s;if(l!=="stretch"&&h>0&&u>0){const f=l==="cover"?Math.max(i/h,o/u):Math.min(i/h,o/u);g=h*f,S=u*f,E=r+(i-g)/2,C=s+(o-S)/2}t.save(),(c||A)&&(t.translate(c?r+i:0,A?s+o:0),t.scale(c?-1:1,A?-1:1),E=c?-(E-r)-g+r:E,C=A?-(C-s)-S+s:C),t.drawImage(n,E,C,g,S),t.restore()}function kt(t,e,n,r,s,i){const o=s/72,l=Math.abs(o),c=1-Math.min(1,Math.abs(e)),A=Math.min(1,Math.abs(e)),h=r<=1?.5:n/(r-1),u=Math.sin(h*Math.PI*2-Math.PI/2),g=Math.sin(h*Math.PI*2.7-Math.PI/2)*(.65+h*.35),S=s*e*e,E=2*s*e/i,C={xOffset:0,yOffset:0,rotation:0,scaleX:1,scaleY:1};switch(t){case"arc":return{...C,yOffset:S,rotation:Math.atan(E)};case"arc-lower":return{...C,yOffset:S*.55,scaleY:Math.max(.2,1+o*e*e*.45)};case"arc-upper":return{...C,yOffset:-S*.55,scaleY:Math.max(.2,1-o*e*e*.45)};case"arch":return{...C,yOffset:S};case"bulge":return{...C,scaleY:Math.max(.2,1+o*c*.75)};case"shell-lower":return{...C,yOffset:s*.45*h*c,scaleY:Math.max(.2,1+o*h*c)};case"shell-upper":return{...C,yOffset:-s*.45*(1-h)*c,scaleY:Math.max(.2,1+o*(1-h)*c)};case"flag":return{...C,yOffset:s*.65*g,rotation:Math.atan(s/Math.max(i,1)*Math.cos(h*Math.PI*2.7)*1.6)};case"wave":return{...C,yOffset:s*.6*u,rotation:Math.atan(s/Math.max(i,1)*Math.cos(h*Math.PI*2)*1.4)};case"fish":return{...C,scaleX:Math.max(.25,1-l*A*.55),scaleY:Math.max(.2,1+o*c)};case"rise":return{...C,yOffset:s*e};case"fisheye":return{...C,yOffset:s*.18*e*c,scaleX:Math.max(.25,1+o*c*.7),scaleY:Math.max(.2,1+o*c*.7)};case"inflate":return{...C,scaleX:Math.max(.25,1+o*c*.6),scaleY:Math.max(.2,1+o*c*.6)};case"squeeze":return{...C,scaleY:Math.max(.2,1-o*c*.8)};case"twist":return{...C,yOffset:s*e,rotation:o*e*.45,scaleY:Math.max(.2,1+o*e*.25)};default:return C}}function $(t,e,n,r,s,i,o="arc",l=0){if(l!==0){Lt(t,e,n,r,s,i,o,l);return}ze(t,s),i==="fill"?t.fillText(e,n,r):t.strokeText(e,n,r),Ke(t)}function Lt(t,e,n,r,s,i,o,l){const c=Array.from(e);if(c.length===0)return;const A=c.map(m=>t.measureText(m).width),h=A.reduce((m,b)=>m+b,0)+s*Math.max(0,c.length-1),u=t.textAlign,g=u==="right"?n-h:u==="center"?n-h/2:n,E=Math.max(-100,Math.min(l,100))/100*72,C=Math.max(h/2,1);let f=g;for(let m=0;m<c.length;m++){const b=c[m],T=A[m],p=f+T/2,w=(p-g-h/2)/C,y=kt(o,w,m,c.length,E,C);t.save(),t.translate(p+y.xOffset,r+y.yOffset),t.rotate(y.rotation),t.scale(y.scaleX,y.scaleY),t.textAlign="center",i==="fill"?t.fillText(b,0,0):t.strokeText(b,0,0),t.restore(),f+=T+s}}function Pe(t,e,n,r,s,i,o,l,c){const A=ne(t,e,l),h=s==="center"?n-A/2:s==="right"?n-A:n,u=c==="underline"?o*.42:-o*.08,g=r+u;t.save(),t.strokeStyle=i,t.lineWidth=Math.max(2,o*.06),t.lineCap="round",t.beginPath(),t.moveTo(h,g),t.lineTo(h+A,g),t.stroke(),t.restore()}function Rt(t,e){for(let n=0;n<e.lines.length;n++){const r=e.lines[n],s=e.startY+n*e.lineHeight;for(const i of e.shadowLayers)t.save(),t.shadowColor=i.color,t.shadowBlur=i.blur,t.shadowOffsetX=i.offsetX??0,t.shadowOffsetY=i.offsetY??0,t.globalAlpha=i.opacity??1,t.fillStyle=e.color,$(t,r,e.textX,s,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength),t.restore();for(const i of e.strokeLayers)t.save(),t.lineJoin="round",t.miterLimit=2,t.lineWidth=i.width,t.strokeStyle=i.color,t.globalAlpha=i.opacity??1,$(t,r,e.textX,s,e.letterSpacingPx,"stroke",e.bendPreset,e.bendStrength),t.restore();t.save(),t.fillStyle=e.color,t.globalAlpha=1,$(t,r,e.textX,s,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength),t.restore(),e.underline&&Pe(t,r,e.textX,s,e.textAlign,e.color,e.fontSize,e.letterSpacingPx,"underline"),e.strikethrough&&Pe(t,r,e.textX,s,e.textAlign,e.color,e.fontSize,e.letterSpacingPx,"strikethrough")}}function Pt(t,e){const n=Math.max(0,Math.min(e.intensity,1));if(n<=0)return;const r=Math.max(0,Math.min(e.range,1)),s=r*72,i=Math.max(-.5,Math.min(e.horizontalAngle,.5))*80,o=Math.max(-.5,Math.min(e.verticalAngle,.5))*80;for(let l=0;l<e.lines.length;l++){const c=e.startY+l*e.lineHeight;t.save(),t.globalAlpha=n,t.shadowColor=e.color,t.shadowBlur=s,t.shadowOffsetX=i,t.shadowOffsetY=o,e.style==="contoured"?(t.lineJoin="round",t.miterLimit=2,t.lineWidth=Math.max(2,r*42),t.strokeStyle=e.color,$(t,e.lines[l],e.textX,c,e.letterSpacingPx,"stroke",e.bendPreset,e.bendStrength)):(t.fillStyle=e.color,$(t,e.lines[l],e.textX,c,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength)),t.restore()}}function Dt(t,e){const n=Se(e.width,e.height),r=n.getContext("2d");r.clearRect(0,0,e.width,e.height),r.font=e.font,r.fillStyle="#ffffff",r.textAlign=e.textAlign,r.textBaseline="middle";for(let o=0;o<e.lines.length;o++)$(r,e.lines[o],e.textX,e.startY+o*e.lineHeight,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength);const s=Se(e.width,e.height),i=s.getContext("2d");i.clearRect(0,0,e.width,e.height),i.save(),i.globalAlpha=e.opacity,i.filter=e.blur>0?`blur(${e.blur}px)`:"none",i.drawImage(n,e.offsetX,e.offsetY),i.restore(),i.globalCompositeOperation="destination-in",i.drawImage(n,0,0),i.globalCompositeOperation="source-in",i.globalAlpha=e.opacity,i.fillStyle=e.color,i.fillRect(0,0,e.width,e.height),t.drawImage(s,0,0)}function Ot(t){const{width:e,height:n,color:r,strokeLayers:s,strokeColor:i,strokeWidth:o,strokeOpacity:l,shadowLayers:c,innerShadow:A,glow:h,shadowColor:u,shadowBlur:g,shadowOffsetX:S,shadowOffsetY:E,shadowOpacity:C,textAlign:f,bgFillMode:m,bgOpacity:b,bgFit:T,bgAutoSize:p,bgWidth:w,bgHeight:y,bgGradientStops:L,bgTextureImage:B,bgTextureFit:d,bgTextureFlipX:R,bgTextureFlipY:N,underline:G,strikethrough:V,bendPreset:H,bendStrength:O}=t;let{fontSize:q,bgColor:z}=t;const Z=[...s??[],...i&&o>0?[{color:i,width:o,opacity:l}]:[]].filter(P=>P.width>0),W=[...c??[],...u&&(g>0||S!==0||E!==0)?[{color:u,blur:g,offsetX:S,offsetY:E,opacity:C}]:[]].filter(P=>P.blur>0||(P.offsetX??0)!==0||(P.offsetY??0)!==0);let D;const J=Se(e,n),F=J.getContext("2d");F.clearRect(0,0,e,n),F.fillStyle=r,F.textAlign=f,F.textBaseline="middle";const x=Mt(F,t);if(q=x.fontSize,z!=="transparent"){const P=p===!0,_=Re(P?void 0:w,T==="text"||P?x.textBlockWidth:e,e),X=Re(P?void 0:y,T==="text"||P?x.textBlockHeight:n,n);pt(F,{canvasWidth:e,canvasHeight:n,textAlign:f,bgFit:T,panelWidth:_,panelHeight:X,bgColor:z,bgFillMode:m,bgOpacity:b,bgGradientStops:L,bgTextureImage:B,bgTextureFit:d,bgTextureFlipX:R,bgTextureFlipY:N,borderColor:t.borderColor,borderWidth:t.borderWidth,borderRadius:t.borderRadius})}return h&&Pt(F,{lines:x.resolvedLines,textX:x.textX,startY:x.startY,lineHeight:x.lineHeight,letterSpacingPx:x.letterSpacingPx,bendPreset:H,bendStrength:O,color:h.color,style:h.style,intensity:h.intensity??.5,range:h.range??.5,horizontalAngle:h.horizontalAngle??0,verticalAngle:h.verticalAngle??0}),Rt(F,{lines:x.resolvedLines,textX:x.textX,startY:x.startY,lineHeight:x.lineHeight,textAlign:f,color:r,fontSize:q,letterSpacingPx:x.letterSpacingPx,bendPreset:H,bendStrength:O,shadowLayers:W,strokeLayers:Z,underline:G,strikethrough:V}),A&&Dt(F,{width:e,height:n,font:F.font,lines:x.resolvedLines,textX:x.textX,startY:x.startY,lineHeight:x.lineHeight,letterSpacingPx:x.letterSpacingPx,bendPreset:H,bendStrength:O,textAlign:f,color:A.color,opacity:A.opacity??1,blur:A.blur,offsetX:A.offsetX??0,offsetY:A.offsetY??0}),D=new M.CanvasTexture(J),D.needsUpdate=!0,D}function Yt(t,e){const{lines:n,color:r,strokeLayers:s,outlineEnabled:i,strokeColor:o,strokeWidth:l,strokeOpacity:c,shadowLayers:A,shadowEnabled:h,innerShadow:u,glow:g,shadowColor:S,shadowBlur:E,shadowOffsetX:C,shadowOffsetY:f,shadowOpacity:m,fontWeight:b,fontStyle:T,fontFamily:p,fontSize:w,textAlign:y,verticalAlign:L,overflow:B,resizeToFit:d,minFontSize:R,letterSpacing:N,lineSpacing:G,bgFillMode:V,bgOpacity:H,bgFit:O,bgAutoSize:q,bgWidth:z,bgHeight:Z,bgGradientStops:W,bgTextureFit:D,bgTextureFlipX:J,bgTextureFlipY:F,borderColor:x,borderWidth:P,borderRadius:_,padding:X,aspect:me,resolution:ce,underline:Te,strikethrough:Ie,bendPreset:be,bendStrength:xe}=t,ye=v.useMemo(()=>i===!1?[]:s,[i,s]),Be=v.useMemo(()=>h===!1?[]:A,[h,A]),Me=void 0,we=v.useMemo(()=>({text:e.text,lines:n,color:r,strokeLayers:ye,strokeColor:i===!1?void 0:o,strokeWidth:i===!1?0:l,strokeOpacity:c,shadowLayers:Be,innerShadow:u,glow:g,shadowColor:h===!1?void 0:S,shadowBlur:h===!1?0:E,shadowOffsetX:h===!1?0:C,shadowOffsetY:h===!1?0:f,shadowOpacity:m,fontWeight:b,fontStyle:T,fontFamily:p,fontSize:w,textAlign:y,verticalAlign:L,overflow:B,resizeToFit:d,minFontSize:R,letterSpacing:N,lineSpacing:G,bgColor:e.bgColor,bgFillMode:V,bgOpacity:H,bgFit:O,bgAutoSize:q,bgWidth:z,bgHeight:Z,bgGradientStops:W,bgTextureImage:Me,bgTextureFit:D,bgTextureFlipX:J,bgTextureFlipY:F,borderColor:x,borderWidth:P,borderRadius:_,padding:X,height:ce,width:Math.round(ce*Math.max(me,.1)),underline:Te,strikethrough:Ie,bendPreset:be,bendStrength:xe}),[e.text,e.bgColor,n,r,ye,i,o,l,c,Be,u,g,h,S,E,C,f,m,b,T,p,w,y,L,B,d,R,N,G,V,H,O,q,z,Z,W,Me,D,J,F,x,P,_,X,me,ce,Te,Ie,be,xe]),pe=v.useMemo(()=>Ot(we),[we]);return de(pe),pe}function qe(t){const e={...mt,...t},{text:n,bgColor:r,opacity:s,name:i,overlay:o=!0,position:l,rotation:c,scale:A,visible:h,renderOrder:u}=e,[g,S]=v.useState(null),[E,C]=v.useState(null),f=v.useRef(n);f.current!==n&&(f.current=n,g!==null&&S(null));const m=v.useRef(r);m.current!==r&&(m.current=r,E!==null&&C(null));const b=v.useRef(null),w=Yt(e,{text:g??n,bgColor:E??r});return v.useEffect(()=>{const y=b.current;if(y)return y.userData.setText=L=>S(L),y.userData.setBgColor=L=>C(L),()=>{delete y.userData.setText,delete y.userData.setBgColor}},[]),a.jsx(He,{ref:b,name:i,texture:w,overlay:o,opacity:s,position:l,rotation:c,scale:A,visible:h,renderOrder:u})}function le(t,e){return!Number.isFinite(t)||!Number.isFinite(e)||t<=0||e<=0?[1,1,1]:Math.abs(t-e)<1e-6?[1,1,1]:t>e?[e/t,1,1]:[1,t/e,1]}const Wt="data:image/png;base64,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",Xt=(t,e)=>t||(e==="cover"?"fill":e==="stretch"?"stretch":"fit"),De=(t,e)=>{const[n,r]=le(t,e);return n===1&&r===1?[1,1,1]:n<1?[1,1/n,1]:[1/r,1,1]},jt=(t,e,n,r,s,i,o)=>{let l=[1,1,1],c=[1,1,1],A=[1,1],h=[0,0];switch(t){case"fit":l=le(e,n),c=l;break;case"fitWidth":l=[1,e>0&&n>0?e/n:1,1],c=l;break;case"fitHeight":l=[e>0&&n>0?n/e:1,1,1],c=l;break;case"center":l=i&&o&&i.width>0&&i.height>0&&o.width>0&&o.height>0?[o.width/i.width,o.height/i.height,1]:le(e,n),c=l;break;case"fill":l=De(e,n),c=l;break;case"fillAndCut":if(c=De(e,n),n>e){const u=e/n;A=[u,1],h=[(1-u)/2,0]}else if(n<e){const u=n/e;A=[1,u],h=[0,(1-u)/2]}break}return{meshScale:[l[0]*(r?-1:1),l[1]*(s?-1:1),1],guideScale:c,repeat:A,offset:h}},Gt=(t,e)=>t??(e?{kind:"image",src:e}:{kind:"default"}),ee=t=>{const e=t.image;return{width:(e==null?void 0:e.videoWidth)??(e==null?void 0:e.width)??1,height:(e==null?void 0:e.videoHeight)??(e==null?void 0:e.height)??1}},Nt=t=>{const{width:e,height:n}=ee(t);return e>0&&n>0?e/n:1},Ht=new Set(["overlay","softLight","hardLight","difference","exclusion"]),Jt={overlay:0,softLight:1,hardLight:2,difference:3,exclusion:4},Ut=t=>{switch(t){case"add":return{blending:M.AdditiveBlending};case"subtract":return{blending:M.SubtractiveBlending};case"multiply":return{blending:M.MultiplyBlending};case"screen":return{blending:M.CustomBlending,blendSrc:M.OneFactor,blendDst:M.OneMinusSrcColorFactor,blendEquation:M.AddEquation};case"lighten":return{blending:M.CustomBlending,blendSrc:M.OneFactor,blendDst:M.OneFactor,blendEquation:M.MaxEquation};case"darken":return{blending:M.CustomBlending,blendSrc:M.OneFactor,blendDst:M.OneFactor,blendEquation:M.MinEquation};default:return{blending:M.NormalBlending}}},zt=`
|
|
3
|
+
varying vec2 vUv;
|
|
4
|
+
void main(){vUv=uv;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}`,Kt=`
|
|
5
|
+
uniform sampler2D imageMap;uniform sampler2D backdropMap;uniform vec2 resolution;
|
|
6
|
+
uniform vec3 tint;uniform float opacity;uniform float alphaTest;uniform int blendMode;varying vec2 vUv;
|
|
7
|
+
float overlayChannel(float b,float s){return b<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
|
|
8
|
+
float hardLightChannel(float b,float s){return s<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
|
|
9
|
+
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);}
|
|
10
|
+
vec3 applyAdvancedBlend(vec3 b,vec3 s){
|
|
11
|
+
if(blendMode==0)return vec3(overlayChannel(b.r,s.r),overlayChannel(b.g,s.g),overlayChannel(b.b,s.b));
|
|
12
|
+
if(blendMode==1)return vec3(softLightChannel(b.r,s.r),softLightChannel(b.g,s.g),softLightChannel(b.b,s.b));
|
|
13
|
+
if(blendMode==2)return vec3(hardLightChannel(b.r,s.r),hardLightChannel(b.g,s.g),hardLightChannel(b.b,s.b));
|
|
14
|
+
if(blendMode==3)return abs(b-s);return b+s-2.*b*s;}
|
|
15
|
+
void main(){vec4 image=texture2D(imageMap,vUv)*vec4(tint,opacity);if(image.a<=alphaTest)discard;
|
|
16
|
+
vec2 uv=gl_FragCoord.xy/max(resolution,vec2(1.));vec3 base=texture2D(backdropMap,uv).rgb;
|
|
17
|
+
vec3 mixed=applyAdvancedBlend(base,image.rgb);gl_FragColor=vec4(mix(base,mixed,image.a),1.);}`,Vt=()=>{const t=document.createElement("canvas");t.width=256,t.height=256;const e=t.getContext("2d");if(!e)return new M.CanvasTexture(t);const n=e.createRadialGradient(96,80,10,128,128,128);n.addColorStop(0,"#ffffff"),n.addColorStop(.18,"#f8fafc"),n.addColorStop(.44,"#cbd5e1"),n.addColorStop(.72,"#475569"),n.addColorStop(1,"#0f172a"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);const r=new M.CanvasTexture(t);return r.needsUpdate=!0,r};function qt({materialTexture:t,sourceTexture:e,onSourceSizeChange:n}){const r=v.useRef(ee(e));return U.useFrame(()=>{t.needsUpdate=!0;const s=ee(e);(s.width!==r.current.width||s.height!==r.current.height)&&(r.current=s,n(s))}),null}const Zt=999,_t=Math.PI/180,$t=te.createTextureSourceResolver([te.gifTextureSourceProvider]);function en(t){const[e,n]=v.useState(null);return v.useEffect(()=>{if(n(null),!t||typeof document>"u")return;const r=new AbortController;let s;return $t({kind:"gif",src:t},r.signal).then(i=>{s=i,n(i)}).catch(i=>{i instanceof DOMException&&i.name==="AbortError"||console.warn("[xr-sdk] Failed to load GIF ScreenImage source",i)}),()=>{r.abort(),te.disposeResolvedTextureSource(s)}},[t]),e}function Oe({name:t,source:e,src:n,fit:r,stretchMode:s,materialType:i="unlit",blendMode:o="normal",backdropTexture:l=null,rotation:c=0,opacity:A=1,color:h="#ffffff",flipX:u=!1,flipY:g=!1,renderOrder:S=Zt,transparent:E=!0,alphaTest:C=0,overlay:f=!0,visible:m,layoutSize:b}){const{size:T}=U.useThree(),p=te.useXRViewportRenderOutputs(),w=Gt(e,n),y=w.kind==="image"?w.src:Wt,L=rt.useTexture(y),B=en(w.kind==="gif"?w.src:void 0),d=w.kind==="texture"?w.texture:w.kind==="gif"?(B==null?void 0:B.texture)??L:L,R=K.useScreenRectAspect(),N=Xt(s,r),[G,V]=v.useState(()=>ee(d));v.useEffect(()=>{V(ee(d))},[d]);const H=d instanceof M.VideoTexture||typeof HTMLCanvasElement<"u"&&d.image instanceof HTMLCanvasElement,O=H?G:ee(d),q=v.useCallback(X=>V(X),[]),z=O.width>0&&O.height>0?O.width/O.height:Nt(d),Z=v.useMemo(()=>Vt(),[]),W=v.useMemo(()=>jt(N,R,z,u,g,b,O),[N,R,z,u,g,b,O]),D=v.useMemo(()=>{const X=d.clone();return X.needsUpdate=!0,X.repeat.set(W.repeat[0],W.repeat[1]),X.offset.set(W.offset[0],W.offset[1]),X},[d,W.repeat,W.offset]);de(D),de(Z);const J=v.useMemo(()=>Ut(o),[o]),F=Ht.has(o)?o:null,x=l??(p==null?void 0:p.finalColorTexture)??(p==null?void 0:p.sceneColorTexture)??null,P=F!==null&&x!==null,_=v.useMemo(()=>({imageMap:{value:D},backdropMap:{value:x},resolution:{value:new M.Vector2(T.width,T.height)},tint:{value:new M.Color(h)},opacity:{value:A},alphaTest:{value:C},blendMode:{value:F===null?0:Jt[F]}}),[F,C,x,T.height,T.width,h,D,A]);return a.jsxs("group",{visible:m,children:[H?a.jsx(qt,{materialTexture:D,sourceTexture:d,onSourceSizeChange:q}):null,a.jsxs("mesh",{name:t,scale:W.meshScale,rotation:[0,0,c*_t],renderOrder:S,children:[a.jsx("planeGeometry",{args:[1,1]}),P?a.jsx("shaderMaterial",{uniforms:_,vertexShader:zt,fragmentShader:Kt,transparent:!1,depthTest:!f,depthWrite:!f,toneMapped:!1}):i==="standardPBR"?a.jsx("meshStandardMaterial",{map:D,transparent:E||A<1,opacity:A,color:h,alphaTest:C,depthTest:!f,depthWrite:!f,toneMapped:!1,roughness:.72,metalness:.08,emissive:h,emissiveIntensity:.18,...J}):i==="matcap"?a.jsx("meshMatcapMaterial",{map:D,matcap:Z,transparent:E||A<1,opacity:A,color:h,alphaTest:C,depthTest:!f,depthWrite:!f,toneMapped:!1,...J}):a.jsx("meshBasicMaterial",{map:D,transparent:E||A<1,opacity:A,color:h,alphaTest:C,depthTest:!f,depthWrite:!f,toneMapped:!1,...J})]})]})}const tn={left:0,right:0,top:0,bottom:0},nn=Math.PI/180;function rn({anchors:t,offsets:e,pivot:n,rotation:r,children:s}){const{width:i,height:o}=K.useScreenSpace(),l=v.useMemo(()=>({left:-1,right:1,top:1,bottom:-1,...t}),[t]),c=v.useMemo(()=>({...tn,...e}),[e]),A=v.useMemo(()=>te.computeScreenTransform(i,o,l,c,n),[o,n,l,c,i]),h=A.width>0&&A.height>0?A.width/A.height:null;return a.jsx("group",{position:[A.centerX-A.pivotX,A.centerY-A.pivotY,0],rotation:[0,0,r*nn],scale:[A.width,A.height,1],children:a.jsx(K.ScreenRectAspectContext.Provider,{value:h,children:s})})}function sn({transform:t,guideLayer:e,onChange:n,children:r}){return a.jsx(I.ScreenTransformFrame,{guideColor:"#22d3ee",guideLayer:e,transform:t,onChange:n,children:r})}const on={left:-1,right:1,top:1,bottom:-1},an={},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(([t,e])=>({label:t,value:e}));const cn=t=>[t[0]*2-1,t[1]*2-1],An=(t,e,n,r,s)=>t||(!r&&!s?on:je({coordinateSpace:e,canvasSize:n??ie,position:r,size:s}));function Ze({anchors:t,coordinateSpace:e,canvasSize:n,position:r,size:s,offsets:i=an,pivot:o=ln,rotation:l=0,transform:c,onScreenTransformChange:A,transformGuideLayer:h="scene",...u}){const g=v.useMemo(()=>An(t,e,n,r,s),[t,n,e,r,s]),S=v.useMemo(()=>cn(o),[o]);if(c){const E=I.mergeScreenTransform2D(c);return E.enabled?a.jsx(sn,{guideLayer:h,transform:E,onChange:A,children:a.jsx(Oe,{...u,layoutSize:E.size,renderOrder:u.renderOrder??E.renderOrder,overlay:u.overlay??E.overlay,visible:u.visible??E.visible,rotation:0})}):null}return a.jsx(rn,{anchors:g,offsets:i,pivot:S,rotation:l,children:a.jsx(Oe,{...u,layoutSize:s?{width:s[0],height:s[1]}:void 0,rotation:0})})}const hn=2.5,dn="#38bdf8",gn={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 un({bend:t,bendPreset:e,bendStrength:n}){return{bendPreset:(t==null?void 0:t.preset)??e,bendStrength:(t==null?void 0:t.strength)??n}}function fn({width:t,height:e}){const n=Math.max(1,t),r=Math.max(1,e);return{aspect:n/r,resolution:r}}function Ye(t){const e=K.useScreenRectAspect(),{bend:n,layoutSize:r,renderOrder:s,overlay:i=!0,...o}=t,l=r?fn(r):void 0,c=Math.max((l==null?void 0:l.aspect)??e??hn,.1),A=un({bend:n,bendPreset:o.bendPreset,bendStrength:o.bendStrength});return a.jsx(qe,{...o,aspect:c,resolution:(l==null?void 0:l.resolution)??o.resolution,...A,overlay:i,renderOrder:s})}function Sn({transform:t,guideLayer:e,onChange:n,children:r}){return a.jsx(I.ScreenTransformFrame,{guideColor:dn,guideLayer:e,transform:t,onChange:n,children:r})}function En(t="center"){return gn[t]}function Cn({anchors:t,coordinateSpace:e,canvasSize:n,position:r,size:s,transform:i,pivot:o,verticalAlign:l}){return{resolvedAnchors:i!=null&&i.anchors?i.anchors:t||(i!=null&&i.position||i!=null&&i.size||r||s?je({coordinateSpace:(i==null?void 0:i.coordinateSpace)??e,canvasSize:(i==null?void 0:i.canvasSize)??n,position:(i==null?void 0:i.position)??r,size:(i==null?void 0:i.size)??s}):En(l)),resolvedOffsets:i==null?void 0:i.offsets,resolvedPivot:st((i==null?void 0:i.pivot)??o??[.5,.5])}}function _e({anchors:t,coordinateSpace:e,canvasSize:n,offsets:r,pivot:s,position:i,rotation:o=0,size:l,transform:c,screenTransform:A,onScreenTransformChange:h,transformGuideLayer:u="scene",verticalAlign:g="center",...S}){const{resolvedAnchors:E,resolvedOffsets:C,resolvedPivot:f}=v.useMemo(()=>Cn({anchors:t,coordinateSpace:e,canvasSize:n,position:i,size:l,transform:c,pivot:s,verticalAlign:g}),[t,n,e,s,i,l,c,g]),m=(c==null?void 0:c.offsets)??r??C,b=(c==null?void 0:c.rotation)??o;if(A){const T=I.mergeScreenTransform2D(A);return T.enabled?a.jsx(Sn,{guideLayer:u,transform:T,onChange:h,children:a.jsx(Ye,{...S,layoutSize:T.size,verticalAlign:g,renderOrder:S.renderOrder??T.renderOrder,overlay:S.overlay??T.overlay,visible:S.visible??T.visible})}):null}return a.jsx(te.ScreenTransform,{anchors:E,offsets:m,pivot:f,children:a.jsx("group",{rotation:[0,0,b*Math.PI/180],children:a.jsx(Ye,{...S,verticalAlign:g})})})}const $e=({settings:t,transform:e})=>{const n=v.useMemo(()=>a.jsxs("group",{name:"LightEditorGizmo",visible:t.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})]})]}),[t.showHelper]);return t.enabled?a.jsxs(re.Transform3D,{value:e,children:[n,t.type==="ambient"?a.jsx("ambientLight",{color:t.color,intensity:t.intensity}):null,t.type==="directional"?a.jsx("directionalLight",{color:t.color,intensity:t.intensity,castShadow:t.castShadow}):null,t.type==="point"?a.jsx("pointLight",{color:t.color,intensity:t.intensity,distance:t.distance,decay:t.decay,castShadow:t.castShadow}):null,t.type==="spot"?a.jsx("spotLight",{color:t.color,intensity:t.intensity,distance:t.distance,angle:t.angle,penumbra:t.penumbra,decay:t.decay,castShadow:t.castShadow}):null]}):null},vn=({source:t,target:e,settings:n})=>{if(!n.enabled||!e)return!1;const r=new Y.Quaternion;if(n.mode==="point"){const i=new Y.Vector3;e.getWorldPosition(i),t.lookAt(i),r.copy(t.quaternion)}else e.getWorldQuaternion(r);const s=new Y.Quaternion().setFromEuler(new Y.Euler(n.offsetRotation.x*Math.PI/180,n.offsetRotation.y*Math.PI/180,n.offsetRotation.z*Math.PI/180));return t.quaternion.copy(r).multiply(s),!0},et=({target:t,settings:e,children:n})=>{const r=v.useRef(null);return U.useFrame(()=>{r.current&&vn({source:r.current,target:t,settings:e})}),a.jsx("group",{ref:r,children:n})},mn=(t,e)=>{let n=t;for(;n&&n!==e;){if("isTransformControls"in n&&n.isTransformControls===!0)return!0;n=n.parent}return!1},j=({children:t,layer:e})=>{const n=v.useRef(null),r=v.useRef(0),s=v.useCallback(()=>{e===void 0||!n.current||n.current.traverse(i=>{mn(i,n.current)||i.layers.set(e)})},[e]);return v.useLayoutEffect(()=>{s(),r.current=2},[s,t]),U.useFrame(()=>{r.current<=0||(s(),r.current-=1)},-1e3),a.jsx("group",{ref:n,children:t})},Q=(t,e)=>(t==null?void 0:t.type)===e,Tn=t=>null,se=({children:t,inside:e})=>e?a.jsx(a.Fragment,{children:t}):a.jsx(Ne,{children:t}),In=({children:t,insideScreenSpaceUI:e,objectRef:n,renderOrder:r,settings:s})=>a.jsx(se,{inside:e,children:a.jsx(bn,{settings:s,renderOrder:r,objectRef:n,children:t})}),bn=({children:t,objectRef:e,renderOrder:n,settings:r})=>{const s=K.useScreenSpace();if(!r.enabled||!r.visible)return null;const i=I.resolveScreenTransform2D({transform:r,parentSize:s});return a.jsx("group",{ref:e,position:i.center,rotation:i.rotation,scale:i.size,renderOrder:n??r.renderOrder,children:t})},xn=({anchor:t,children:e,insideScreenSpaceUI:n,objectRef:r,renderOrder:s,settings:i})=>a.jsx(se,{inside:n,children:a.jsx(yn,{anchor:t,settings:i,renderOrder:s,objectRef:r,children:e})}),yn=({anchor:t,children:e,objectRef:n,renderOrder:r,settings:s})=>{const i=nt.useFaceInfo({targetFps:24}),{size:o}=U.useThree(),l=K.useScreenSpace(),c=v.useRef(null),A=v.useRef(new Y.Vector3),h=v.useRef({pos:new Y.Vector3,prevRaw:new Y.Vector3,dxHat:new Y.Vector3,initialized:!1}),u=v.useRef(!1),g=v.useRef({x:0,y:0,z:0,visibility:0}),S=v.useRef({x:0,y:0}),E=i?We.resolveFaceAnchorPoint(t.target,i.landmarks,t.customAnchorPoint,g.current):null,C=E?ve({point:E,viewportSize:o,target:S.current}):null,f=C?I.resolveScreenTransform2D({transform:{...s,position:{x:C.x+s.position.x+t.offset.x,y:C.y+s.position.y+t.offset.y}},parentSize:l}):null;return U.useFrame((m,b)=>{const T=c.current;if(T){if(T.visible=!!(f&&s.enabled&&s.visible),!f){u.current=!1,h.current.initialized=!1;return}A.current.set(f.center[0],f.center[1],t.offset.z),t.smoothing>0?(Xe.stepTrackingSmoothing(h.current,A.current,u.current?b:0,t.smoothing),T.position.copy(h.current.pos)):T.position.copy(A.current),u.current=!0}}),a.jsx("group",{ref:m=>{c.current=m,n==null||n(m)},rotation:[(f==null?void 0:f.rotation[0])??0,(f==null?void 0:f.rotation[1])??0,((f==null?void 0:f.rotation[2])??0)+(t.followFaceRoll?(i==null?void 0:i.pose.rotation.z)??0:0)],scale:[s.size.width/100*s.scale2D.x,s.size.height/100*s.scale2D.y,1],renderOrder:r??s.renderOrder,children:e})},tt=({editorMode:t=!1,faceMeshMaterialOverrides:e,fallback:n=Tn,insideScreenSpaceUI:r=!1,objectId:s,onComponentChange:i,renderLayer:o,renderOrder:l,store:c})=>{const A=Ae.useRegisterRuntimeObject(),h=Ae.useResolveRuntimeObject(),u=c.objects[s];if(!u||!u.enabled)return null;const g=I.getOrderedComponents(c,s).filter(d=>d.enabled),S=g.find(d=>d.type==="Transform"),E=g.find(d=>d.type==="ScreenTransform"),C=g.find(d=>d.type==="ScreenImage"),f=g.find(d=>d.type==="ScreenText"),m=g.find(d=>d.type==="ScreenShape"),b=g.find(d=>d.type==="MeshRenderer"),T=g.find(d=>d.type==="FaceMeshRenderer"),p=g.find(d=>d.type==="Light"),w=g.find(d=>d.type==="LookAt"),y=g.find(d=>d.type==="PinToMesh"),L=g.find(d=>d.type==="TrackingAnchor"),B=I.getSceneObjectChildren(c,s).map(d=>a.jsx(tt,{objectId:d.id,store:c,editorMode:t,renderOrder:l,renderLayer:o,onComponentChange:i,fallback:n,faceMeshMaterialOverrides:e,insideScreenSpaceUI:r||!!E},d.id));if(Q(S,"Transform")&&Q(p,"Light"))return a.jsx(j,{layer:o,children:a.jsxs("group",{ref:d=>A(s,d),children:[a.jsx($e,{settings:p.settings,transform:S.settings}),B]})});if(Q(S,"Transform")&&Q(b,"MeshRenderer")){const d=Q(w,"LookAt")?w.settings:I.createDefaultComponent("LookAt",s).settings,R=d.inheritChildren?B:null,N=d.inheritChildren?null:B;return a.jsx(j,{layer:o,children:a.jsx("group",{ref:G=>A(s,G),children:a.jsx(I.PinToMesh,{target:Q(y,"PinToMesh")?h(y.settings.targetObjectId):null,settings:Q(y,"PinToMesh")?y.settings:I.createDefaultComponent("PinToMesh",s).settings,children:a.jsxs(re.Transform3D,{value:S.settings,onChange:i?G=>i({...S,settings:G}):void 0,children:[a.jsxs(et,{target:Q(w,"LookAt")?h(w.settings.targetObjectId):null,settings:d,children:[a.jsx(K.MeshRenderer,{value:b.settings,renderOrder:l}),R]}),N]})})})})}if(Q(T,"FaceMeshRenderer"))return a.jsx(j,{layer:o,children:a.jsxs("group",{ref:d=>A(s,d),children:[a.jsx(re.FaceMeshRenderer,{value:T.settings,materialOverride:e==null?void 0:e[T.id],transform:Q(S,"Transform")?S.settings:void 0}),B]})});if(Q(S,"Transform")){if(Q(L,"TrackingAnchor")){const d=L.settings;return a.jsx(j,{layer:o,children:a.jsx(We.FaceTracker,{followFaceRoll:d.followFaceRoll,children:a.jsx(Xe.TrackingAnchor,{target:d.target,customAnchorPoint:d.customAnchorPoint,offset:[d.offset.x,d.offset.y,d.offset.z],smoothing:d.smoothing,children:a.jsx(re.Transform3D,{objectRef:R=>A(s,R),value:S.settings,children:B})})})})}return a.jsx(j,{layer:o,children:a.jsx("group",{children:a.jsx(re.Transform3D,{objectRef:d=>A(s,d),value:S.settings,onChange:i?d=>i({...S,settings:d}):void 0,children:B})})})}if(Q(E,"ScreenTransform")&&Q(C,"ScreenImage")){const d=I.mapScreenImageSettingsToProps({screenSpaceUI:{enabled:!0},screenImage:{...C.settings,screenTransform:E.settings}});return d.shouldRender?a.jsx(j,{layer:o,children:a.jsx("group",{renderOrder:l,children:a.jsxs(se,{inside:r,children:[a.jsx(Ze,{...d.props,renderOrder:l??d.props.renderOrder,onScreenTransformChange:i?R=>i({...E,settings:R}):void 0}),B]})})}):null}if(Q(E,"ScreenTransform")&&Q(f,"ScreenText")){const d=I.mapScreenTextSettingsToProps({screenSpaceUI:{enabled:!0},screenText:{...f.settings,screenTransform:E.settings}});return d.shouldRender?a.jsx(j,{layer:o,children:a.jsx("group",{renderOrder:l,children:a.jsxs(se,{inside:r,children:[a.jsx(_e,{...d.props,renderOrder:l??d.props.renderOrder,onScreenTransformChange:i?R=>i({...E,settings:R}):void 0}),B]})})}):null}return Q(E,"ScreenTransform")&&Q(m,"ScreenShape")?a.jsx(j,{layer:o,children:a.jsx("group",{ref:d=>A(s,d),renderOrder:l,children:a.jsxs(se,{inside:r,children:[a.jsx(I.ScreenShape,{name:u.name,settings:m.settings,transform:E.settings,renderOrder:l,onScreenTransformChange:i?d=>i({...E,settings:d}):void 0}),B]})})}):Q(E,"ScreenTransform")?Q(L,"TrackingAnchor")?a.jsx(j,{layer:o,children:a.jsx("group",{children:a.jsx(xn,{anchor:L.settings,settings:E.settings,renderOrder:l,insideScreenSpaceUI:r,objectRef:d=>A(s,d),children:B})})}):a.jsx(j,{layer:o,children:a.jsx("group",{children:a.jsx(In,{settings:E.settings,renderOrder:l,insideScreenSpaceUI:r,objectRef:d=>A(s,d),children:B})})}):t?a.jsxs(a.Fragment,{children:[B,n(`Object "${u.name}" has unsupported components: ${g.map(d=>d.type).join(", ")}`)]}):B.length?a.jsx(a.Fragment,{children:B}):null},Bn=({layers:t})=>{const{camera:e,gl:n,raycaster:r,scene:s}=U.useThree(),{session:i}=Ae.useXRContext(),o=v.useCallback(()=>I.renderSequentialPasses({renderer:n,scene:s,camera:e,layers:t}),[e,n,t,s]);return U.useFrame(o,1),v.useEffect(()=>{const l=r.layers.mask;return t.forEach(c=>r.layers.enable(c)),()=>{r.layers.mask=l}},[t,r]),v.useEffect(()=>(i._setR3FState({renderer:n,scene:s,camera:e,renderFrame:o}),()=>i._setR3FState({renderer:n,scene:s,camera:e})),[e,n,o,s,i]),null};exports.LightObject=$e;exports.LookAt=et;exports.RenderGroupLayer=j;exports.SceneObjectRenderer=tt;exports.ScreenImage=Ze;exports.ScreenSpaceUI=Ne;exports.ScreenText=_e;exports.SequentialRenderPasses=Bn;exports.TextLabel=qe;exports.clientToScreenPixels=dt;exports.computeContainScale=le;exports.mediaToScreenPixels=St;exports.normalizedToScreenPixels=ve;exports.screenPixelsToClient=gt;exports.screenPixelsToMedia=Et;exports.screenPixelsToNormalized=ut;exports.screenPixelsToScreenSpace=At;exports.screenPixelsToUnits=lt;exports.screenPointToRay=vt;exports.screenSpaceToScreenPixels=ht;exports.screenUnitsToPixels=ct;exports.trackerPointToScreenPixels=ft;exports.worldToScreenPixels=Ct;
|
|
@@ -3,7 +3,7 @@ import { useFrame as A } from "@react-three/fiber";
|
|
|
3
3
|
import { useRef as y, useEffect as k } from "react";
|
|
4
4
|
import * as p from "three";
|
|
5
5
|
import { R as H } from "./renderLayers-zrK2pv5O.js";
|
|
6
|
-
import { a as v } from "./index-
|
|
6
|
+
import { a as v } from "./index-ByoNj0QP.js";
|
|
7
7
|
const O = [
|
|
8
8
|
"face.center",
|
|
9
9
|
"face.forehead",
|
|
@@ -3,7 +3,7 @@ import { jsx as p, jsxs as L } from "react/jsx-runtime";
|
|
|
3
3
|
import { useGLTF as P } from "@react-three/drei";
|
|
4
4
|
import { useFrame as U } from "@react-three/fiber";
|
|
5
5
|
import { AdditiveBlending as W, SubtractiveBlending as q, MultiplyBlending as K, NoBlending as N, NormalBlending as G, NeverDepth as F, LessDepth as I, EqualDepth as z, GreaterDepth as H, NotEqualDepth as Y, GreaterEqualDepth as V, AlwaysDepth as $, LessEqualDepth as J, BackSide as Q, DoubleSide as X, FrontSide as Z, AnimationMixer as j, LoopRepeat as ee } from "three";
|
|
6
|
-
import { M as re } from "./index-
|
|
6
|
+
import { M as re } from "./index-ByoNj0QP.js";
|
|
7
7
|
const te = A(null), ke = () => {
|
|
8
8
|
const e = _(te);
|
|
9
9
|
if (!e)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var H=Object.defineProperty;var z=(t,e,r)=>e in t?H(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e,r)=>z(t,typeof e!="symbol"?e+"":e,r);const m=require("react/jsx-runtime"),n=require("react"),O=require("./selectors-CAwmL9VW.cjs"),$=require("./index-C0-fg1Hk.cjs"),B=require("@react-three/fiber");require("./hasFullUnitUVBounds-p1Dl0ejX.cjs");require("./renderLayers-lDtL0_43.cjs");const K=({children:t,defaultCollapsed:e=!0,title:r,width:s=320})=>{const[o,a]=n.useState(e);return o?m.jsx("button",{type:"button",onClick:()=>a(!1),"aria-label":`Open ${r}`,title:`Open ${r}`,style:{position:"absolute",right:16,bottom:16,zIndex:40,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",pointerEvents:"auto"},children:"◫"}):m.jsxs("div",{style:{position:"absolute",right:16,bottom:16,zIndex:40,width:s,maxWidth:"calc(100vw - 32px)",padding:14,borderRadius:14,boxShadow:"0 12px 30px rgba(0,0,0,0.26)",backdropFilter:"blur(10px)",pointerEvents:"auto",background:"rgba(15, 23, 42, 0.78)",border:"1px solid rgba(255,255,255,0.12)",color:"#e5eefb"},children:[m.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:10},children:[m.jsx("div",{style:{fontSize:13,fontWeight:700},children:r}),m.jsx("button",{type:"button",onClick:()=>a(!0),"aria-label":`Close ${r}`,title:`Close ${r}`,style:{width:32,height:32,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(255,255,255,0.04)",color:"#e5eefb",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),t]})};class V{constructor(){i(this,"frameTimestamps",[]);i(this,"lastUpdateTime",0);i(this,"currentFPS",0);i(this,"updateInterval",500);this.lastUpdateTime=performance.now()}trackFrame(){const e=performance.now();this.frameTimestamps.push(e);const r=e-this.updateInterval;this.frameTimestamps=this.frameTimestamps.filter(s=>s>r),e-this.lastUpdateTime>=this.updateInterval&&(this.currentFPS=this.frameTimestamps.length*2,this.lastUpdateTime=e)}getFPS(){return this.currentFPS}reset(){this.frameTimestamps=[],this.lastUpdateTime=performance.now(),this.currentFPS=0}}function W(t,e=1){return t.toFixed(e)}function x(t){return t/(1024*1024)}function X(t,e){return e===0?0:t/e*100}class J{constructor(e=1e3){i(this,"intervalId",null);i(this,"memoryUsage",null);i(this,"updateInterval");i(this,"isSupported",!1);this.updateInterval=e,this.checkSupport()}checkSupport(){const e=performance;this.isSupported="memory"in e&&e.memory!==void 0,this.isSupported||console.warn("[MemoryTracker] performance.memory not available (Chrome-only API)")}start(){if(this.intervalId!==null){console.warn("[MemoryTracker] Already running");return}if(!this.isSupported){this.memoryUsage=null;return}this.updateMemory(),this.intervalId=window.setInterval(()=>{this.updateMemory()},this.updateInterval)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}updateMemory(){if(!this.isSupported)return;const e=performance;if(!e.memory)return;const r=e.memory.usedJSHeapSize,s=e.memory.jsHeapSizeLimit;this.memoryUsage={used:x(r),total:x(s),percentage:X(r,s)}}getMemoryUsage(){return this.memoryUsage}isMemorySupported(){return this.isSupported}}class G{constructor(){i(this,"resolution","N/A");i(this,"videoElement",null);i(this,"metadataListener",null)}start(e){if(!e){this.resolution="N/A";return}this.videoElement=e,e.videoWidth>0&&e.videoHeight>0&&this.updateResolution(),this.metadataListener=()=>{this.updateResolution()},e.addEventListener("loadedmetadata",this.metadataListener)}stop(){this.videoElement&&this.metadataListener&&(this.videoElement.removeEventListener("loadedmetadata",this.metadataListener),this.metadataListener=null),this.videoElement=null,this.resolution="N/A"}updateResolution(){if(!this.videoElement){this.resolution="N/A";return}const e=this.videoElement.videoWidth,r=this.videoElement.videoHeight;e>0&&r>0?this.resolution=`${e}x${r}`:this.resolution="N/A"}getResolution(){return this.videoElement&&this.updateResolution(),this.resolution}}class Q{constructor(e={}){i(this,"options");i(this,"isRunning",!1);i(this,"metrics",{cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"});i(this,"cameraFPSTracker");i(this,"memoryTracker");i(this,"resolutionTracker");i(this,"frameTimes",[]);i(this,"lastEffectiveFPSUpdate",0);this.options={enableMemoryTracking:e.enableMemoryTracking??!0,memoryUpdateInterval:e.memoryUpdateInterval??1e3},this.cameraFPSTracker=new V,this.memoryTracker=new J(this.options.memoryUpdateInterval),this.resolutionTracker=new G}start(e){if(this.isRunning){console.warn("[MetricsCollector] Already running");return}this.isRunning=!0,this.lastEffectiveFPSUpdate=performance.now(),this.options.enableMemoryTracking&&this.memoryTracker.start(),e&&this.resolutionTracker.start(e),this.setupCameraFPSHook(),console.info("[MetricsCollector] Started")}stop(){this.isRunning&&(this.isRunning=!1,this.memoryTracker.stop(),this.resolutionTracker.stop(),this.cameraFPSTracker.reset(),this.cleanupCameraFPSHook(),console.info("[MetricsCollector] Stopped"))}setupCameraFPSHook(){const e=window;e.__xr_debugger_metrics||(e.__xr_debugger_metrics={trackCameraFrame:()=>{this.cameraFPSTracker.trackFrame(),this.metrics.cameraFPS=this.cameraFPSTracker.getFPS()}})}cleanupCameraFPSHook(){const e=window;e.__xr_debugger_metrics&&delete e.__xr_debugger_metrics}getMetrics(){return this.updateMetricsFromTrackers(),{...this.metrics}}updateMetricsFromTrackers(){this.isRunning&&(this.metrics.memory=this.memoryTracker.getMemoryUsage(),this.metrics.resolution=this.resolutionTracker.getResolution(),this.updateEffectiveFPS())}updateRenderTime(e){this.metrics.renderTime=e,this.updateEffectiveFPS()}async updateDetectionTime(e){if(!e||!this.isRunning){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}try{const r=Object.values(e).filter(Boolean);if(r.length===0){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}const s=r.map(c=>c&&typeof c.getPerformanceData=="function"?c.getPerformanceData():Promise.resolve({name:"unknown",processingTime:0})),o=await Promise.all(s);this.metrics.modelPerformance=o.map(c=>({name:c.name,processingTime:c.processingTime||0}));const a=o.reduce((c,p)=>c+(p.processingTime||0),0);this.metrics.detectionTime=a,this.updateEffectiveFPS()}catch(r){console.warn("[MetricsCollector] Error updating detection time:",r),this.metrics.detectionTime=0,this.metrics.modelPerformance=[]}}updateEffectiveFPS(){const e=performance.now(),r=this.metrics.detectionTime+this.metrics.renderTime;if(this.frameTimes.push(r),e-this.lastEffectiveFPSUpdate>=1e3){if(this.frameTimes.length>0){const s=this.frameTimes.reduce((o,a)=>o+a,0)/this.frameTimes.length;this.metrics.effectiveFPS=s>0?1e3/s:0}this.frameTimes=[],this.lastEffectiveFPSUpdate=e}}isActive(){return this.isRunning}}const Y=n.lazy(async()=>({default:(await Promise.resolve().then(()=>require("./DebuggerUI-DYT_dk1E.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
|
|
1
|
+
"use strict";var H=Object.defineProperty;var z=(t,e,r)=>e in t?H(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var i=(t,e,r)=>z(t,typeof e!="symbol"?e+"":e,r);const m=require("react/jsx-runtime"),n=require("react"),O=require("./selectors-CZLKT2Iv.cjs"),$=require("./index-DCiMbxC3.cjs"),B=require("@react-three/fiber");require("./hasFullUnitUVBounds-p1Dl0ejX.cjs");require("./renderLayers-lDtL0_43.cjs");const K=({children:t,defaultCollapsed:e=!0,title:r,width:s=320})=>{const[o,a]=n.useState(e);return o?m.jsx("button",{type:"button",onClick:()=>a(!1),"aria-label":`Open ${r}`,title:`Open ${r}`,style:{position:"absolute",right:16,bottom:16,zIndex:40,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",pointerEvents:"auto"},children:"◫"}):m.jsxs("div",{style:{position:"absolute",right:16,bottom:16,zIndex:40,width:s,maxWidth:"calc(100vw - 32px)",padding:14,borderRadius:14,boxShadow:"0 12px 30px rgba(0,0,0,0.26)",backdropFilter:"blur(10px)",pointerEvents:"auto",background:"rgba(15, 23, 42, 0.78)",border:"1px solid rgba(255,255,255,0.12)",color:"#e5eefb"},children:[m.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:10},children:[m.jsx("div",{style:{fontSize:13,fontWeight:700},children:r}),m.jsx("button",{type:"button",onClick:()=>a(!0),"aria-label":`Close ${r}`,title:`Close ${r}`,style:{width:32,height:32,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(255,255,255,0.04)",color:"#e5eefb",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),t]})};class V{constructor(){i(this,"frameTimestamps",[]);i(this,"lastUpdateTime",0);i(this,"currentFPS",0);i(this,"updateInterval",500);this.lastUpdateTime=performance.now()}trackFrame(){const e=performance.now();this.frameTimestamps.push(e);const r=e-this.updateInterval;this.frameTimestamps=this.frameTimestamps.filter(s=>s>r),e-this.lastUpdateTime>=this.updateInterval&&(this.currentFPS=this.frameTimestamps.length*2,this.lastUpdateTime=e)}getFPS(){return this.currentFPS}reset(){this.frameTimestamps=[],this.lastUpdateTime=performance.now(),this.currentFPS=0}}function W(t,e=1){return t.toFixed(e)}function x(t){return t/(1024*1024)}function X(t,e){return e===0?0:t/e*100}class J{constructor(e=1e3){i(this,"intervalId",null);i(this,"memoryUsage",null);i(this,"updateInterval");i(this,"isSupported",!1);this.updateInterval=e,this.checkSupport()}checkSupport(){const e=performance;this.isSupported="memory"in e&&e.memory!==void 0,this.isSupported||console.warn("[MemoryTracker] performance.memory not available (Chrome-only API)")}start(){if(this.intervalId!==null){console.warn("[MemoryTracker] Already running");return}if(!this.isSupported){this.memoryUsage=null;return}this.updateMemory(),this.intervalId=window.setInterval(()=>{this.updateMemory()},this.updateInterval)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}updateMemory(){if(!this.isSupported)return;const e=performance;if(!e.memory)return;const r=e.memory.usedJSHeapSize,s=e.memory.jsHeapSizeLimit;this.memoryUsage={used:x(r),total:x(s),percentage:X(r,s)}}getMemoryUsage(){return this.memoryUsage}isMemorySupported(){return this.isSupported}}class G{constructor(){i(this,"resolution","N/A");i(this,"videoElement",null);i(this,"metadataListener",null)}start(e){if(!e){this.resolution="N/A";return}this.videoElement=e,e.videoWidth>0&&e.videoHeight>0&&this.updateResolution(),this.metadataListener=()=>{this.updateResolution()},e.addEventListener("loadedmetadata",this.metadataListener)}stop(){this.videoElement&&this.metadataListener&&(this.videoElement.removeEventListener("loadedmetadata",this.metadataListener),this.metadataListener=null),this.videoElement=null,this.resolution="N/A"}updateResolution(){if(!this.videoElement){this.resolution="N/A";return}const e=this.videoElement.videoWidth,r=this.videoElement.videoHeight;e>0&&r>0?this.resolution=`${e}x${r}`:this.resolution="N/A"}getResolution(){return this.videoElement&&this.updateResolution(),this.resolution}}class Q{constructor(e={}){i(this,"options");i(this,"isRunning",!1);i(this,"metrics",{cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"});i(this,"cameraFPSTracker");i(this,"memoryTracker");i(this,"resolutionTracker");i(this,"frameTimes",[]);i(this,"lastEffectiveFPSUpdate",0);this.options={enableMemoryTracking:e.enableMemoryTracking??!0,memoryUpdateInterval:e.memoryUpdateInterval??1e3},this.cameraFPSTracker=new V,this.memoryTracker=new J(this.options.memoryUpdateInterval),this.resolutionTracker=new G}start(e){if(this.isRunning){console.warn("[MetricsCollector] Already running");return}this.isRunning=!0,this.lastEffectiveFPSUpdate=performance.now(),this.options.enableMemoryTracking&&this.memoryTracker.start(),e&&this.resolutionTracker.start(e),this.setupCameraFPSHook(),console.info("[MetricsCollector] Started")}stop(){this.isRunning&&(this.isRunning=!1,this.memoryTracker.stop(),this.resolutionTracker.stop(),this.cameraFPSTracker.reset(),this.cleanupCameraFPSHook(),console.info("[MetricsCollector] Stopped"))}setupCameraFPSHook(){const e=window;e.__xr_debugger_metrics||(e.__xr_debugger_metrics={trackCameraFrame:()=>{this.cameraFPSTracker.trackFrame(),this.metrics.cameraFPS=this.cameraFPSTracker.getFPS()}})}cleanupCameraFPSHook(){const e=window;e.__xr_debugger_metrics&&delete e.__xr_debugger_metrics}getMetrics(){return this.updateMetricsFromTrackers(),{...this.metrics}}updateMetricsFromTrackers(){this.isRunning&&(this.metrics.memory=this.memoryTracker.getMemoryUsage(),this.metrics.resolution=this.resolutionTracker.getResolution(),this.updateEffectiveFPS())}updateRenderTime(e){this.metrics.renderTime=e,this.updateEffectiveFPS()}async updateDetectionTime(e){if(!e||!this.isRunning){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}try{const r=Object.values(e).filter(Boolean);if(r.length===0){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}const s=r.map(c=>c&&typeof c.getPerformanceData=="function"?c.getPerformanceData():Promise.resolve({name:"unknown",processingTime:0})),o=await Promise.all(s);this.metrics.modelPerformance=o.map(c=>({name:c.name,processingTime:c.processingTime||0}));const a=o.reduce((c,p)=>c+(p.processingTime||0),0);this.metrics.detectionTime=a,this.updateEffectiveFPS()}catch(r){console.warn("[MetricsCollector] Error updating detection time:",r),this.metrics.detectionTime=0,this.metrics.modelPerformance=[]}}updateEffectiveFPS(){const e=performance.now(),r=this.metrics.detectionTime+this.metrics.renderTime;if(this.frameTimes.push(r),e-this.lastEffectiveFPSUpdate>=1e3){if(this.frameTimes.length>0){const s=this.frameTimes.reduce((o,a)=>o+a,0)/this.frameTimes.length;this.metrics.effectiveFPS=s>0?1e3/s:0}this.frameTimes=[],this.lastEffectiveFPSUpdate=e}}isActive(){return this.isRunning}}const Y=n.lazy(async()=>({default:(await Promise.resolve().then(()=>require("./DebuggerUI-B6bP6P9r.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
|
|
@@ -3,8 +3,8 @@ var O = (t, e, r) => e in t ? K(t, e, { enumerable: !0, configurable: !0, writab
|
|
|
3
3
|
var s = (t, e, r) => O(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import { jsx as f, jsxs as w } from "react/jsx-runtime";
|
|
5
5
|
import W, { useState as b, useRef as h, useEffect as T, useCallback as y, createContext as X, Suspense as V, lazy as q } from "react";
|
|
6
|
-
import { a as J } from "./selectors-
|
|
7
|
-
import { u as G } from "./index-
|
|
6
|
+
import { a as J } from "./selectors-B8H97CKA.js";
|
|
7
|
+
import { u as G } from "./index-9dlAQAhy.js";
|
|
8
8
|
import { useFrame as Q } from "@react-three/fiber";
|
|
9
9
|
import "./hasFullUnitUVBounds-BGvcFsQM.js";
|
|
10
10
|
import "./renderLayers-zrK2pv5O.js";
|
|
@@ -376,7 +376,7 @@ class re {
|
|
|
376
376
|
return this.isRunning;
|
|
377
377
|
}
|
|
378
378
|
}
|
|
379
|
-
const ie = q(async () => ({ default: (await import("./DebuggerUI-
|
|
379
|
+
const ie = q(async () => ({ default: (await import("./DebuggerUI-BjOMr8q_.js")).DebuggerUI })), C = X(null);
|
|
380
380
|
function be({
|
|
381
381
|
children: t,
|
|
382
382
|
keyboardShortcut: e = "ctrl+shift+d",
|
package/dist/internal.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-Cq-TEQ5Y.cjs"),r=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),n=require("./renderLayers-lDtL0_43.cjs");exports.DebuggerOverlay=e.DebuggerOverlay;exports.DebuggerProvider=e.DebuggerProvider;exports.XRDebugView=e.XRDebugView;exports.readCalibrationDebugEvents=e.readCalibrationDebugEvents;exports.recordCalibrationDebugEvent=e.recordCalibrationDebugEvent;exports.useDebugger=e.useDebugger;exports._resetUVBoundsWarnings=r._resetUVBoundsWarnings;exports.logUVBoundsWarningOnce=r.logUVBoundsWarningOnce;exports.RENDER_LAYERS=n.RENDER_LAYERS;
|
package/dist/internal.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a, D as s, X as o, r as g, b as n, u } from "./internal-
|
|
1
|
+
import { a, D as s, X as o, r as g, b as n, u } from "./internal-Dmk1cTXq.js";
|
|
2
2
|
import { _ as i, l as t } from "./hasFullUnitUVBounds-BGvcFsQM.js";
|
|
3
3
|
import { R as d } from "./renderLayers-zrK2pv5O.js";
|
|
4
4
|
export {
|
package/dist/low-level.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("./index-C0-fg1Hk.cjs"),D=require("./index-CxMEeCRP.cjs"),j=require("./selectors-CAwmL9VW.cjs"),f=require("react"),q=require("./getFaceInfo-DEzcL_Ub.cjs"),d=require("react/jsx-runtime"),de=require("@react-three/drei"),B=require("./index-CY7Z8cHV.cjs"),ee=require("./useFaceResults-C3oZkn2Z.cjs"),ue=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),C=require("./contexts-h-9TRH0r.cjs"),he=require("three");function fe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const z=fe(he),A=({children:e,config:t,style:r})=>d.jsx("div",{"data-render-target":t.name,style:{position:"absolute",inset:0,overflow:"hidden",background:t.clearColor,pointerEvents:t.pointerEvents??"none",zIndex:t.zIndex,opacity:t.hidden?0:1,...r},children:e}),U=({canvas:e,layout:t,media:r,mirrored:n,filter:o})=>{const i=Math.round(t.destination.width),a=Math.round(t.destination.height);e.width!==i&&(e.width=i),e.height!==a&&(e.height=a);const s=e.getContext("2d");s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,i,a),n&&(s.translate(i,0),s.scale(-1,1)),o&&(s.filter=o),s.drawImage(r,t.offsetX,t.offsetY,t.drawWidth,t.drawHeight),o&&(s.filter="none"),s.setTransform(1,0,0,1,0,0))},te=({canvasRef:e,enabled:t=!0,fps:r=30,imageRef:n,layout:o,mirrored:i,sourceKind:a,videoRef:s})=>{f.useEffect(()=>{if(!t){const b=e.current,p=b==null?void 0:b.getContext("2d");b&&p&&p.clearRect(0,0,b.width,b.height);return}let l=0,c=0;const u=r>0?1e3/r:0,m=b=>{if(l=requestAnimationFrame(m),u>0&&b-c<u)return;c=b;const p=e.current;if(!p||!o)return;if(a==="image"){const x=n.current;if(!x||!x.complete||x.naturalWidth<=0||x.naturalHeight<=0)return;U({canvas:p,layout:o,media:x,mirrored:i});return}const w=s.current;!w||w.readyState<2||w.videoWidth<=0||w.videoHeight<=0||U({canvas:p,layout:o,media:w,mirrored:i})};return l=requestAnimationFrame(m),()=>{cancelAnimationFrame(l)}},[e,t,r,n,o,i,a,s])},re=({canvasRef:e,imageRef:t,layer:r,layout:n,mirrored:o,sourceKind:i,videoRef:a})=>(te({canvasRef:e,imageRef:t,layout:n,mirrored:o,sourceKind:i,videoRef:a}),d.jsx(A,{config:r,children:d.jsx("canvas",{ref:e,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block",background:"#000"}})})),me=({canvasRef:e,controlInsetTop:t,debugVisible:r,fps:n=15,imageRef:o,layer:i,layout:a,mirrored:s,sourceKind:l,videoRef:c,viewportSize:u})=>{te({canvasRef:e,enabled:r,fps:n,imageRef:o,layout:a,mirrored:s,sourceKind:l,videoRef:c});const m=Math.min(220,Math.max(120,u.width*.22)),b=u.width>0&&u.height>0?u.width/u.height:1,p=Math.min(u.height-24,Math.max(t??16,16));return d.jsx(A,{config:i,children:d.jsx("canvas",{ref:e,style:{position:"absolute",left:16,top:p,width:r?m:1,height:r?"auto":1,aspectRatio:`${b}`,opacity:r?.85:0,borderRadius:10,border:r?"1px solid rgba(255,255,255,0.16)":"none",pointerEvents:"none",objectFit:"contain",background:"#000"}})})},ge={audio:!1,video:{facingMode:"user",frameRate:{ideal:30,max:60}}},pe={name:"viewport-live",clearColor:"#000000",pointerEvents:"none",zIndex:0},xe={name:"viewport-ui",clearColor:"transparent",pointerEvents:"auto",zIndex:5},be={name:"viewport-scene",clearColor:"transparent",pointerEvents:"auto",zIndex:1},k={webcam:{icon:"◉",label:"Webcam"},image:{icon:"▣",label:"Images"},video:{icon:"▶",label:"Videos"}},we=({imageRef:e,selectedSource:t,videoRef:r})=>d.jsxs(d.Fragment,{children:[d.jsx("video",{ref:r,style:{position:"absolute",width:1,height:1,opacity:t==="image"?0:.001,pointerEvents:"none"}}),d.jsx("img",{ref:e,alt:"",style:{position:"absolute",width:1,height:1,opacity:t==="image"?.001:0,pointerEvents:"none"}})]}),Y=({dock:e,label:t,onChange:r,options:n,value:o})=>d.jsx("div",{style:{position:"absolute",top:e==="top-left"?74:void 0,bottom:e==="bottom-left"?74:void 0,left:16,zIndex:5,maxWidth:"calc(100vw - 32px)",padding:10,borderRadius:14,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)"},children:d.jsxs("label",{style:{display:"grid",gap:6,color:"#e5eefb",fontSize:12,fontWeight:700},children:[d.jsx("span",{children:t}),d.jsx("select",{value:o,onChange:i=>r(i.target.value),style:{minWidth:180,maxWidth:"calc(100vw - 52px)",height:36,borderRadius:10,border:"1px solid rgba(255,255,255,0.12)",background:"rgba(255,255,255,0.06)",color:"#e5eefb",padding:"0 10px"},children:n.map(i=>d.jsx("option",{value:i.id,style:{color:"#111827"},children:i.label},i.id))})]})}),Se=({dock:e,imageOptions:t,selectedImageId:r,selectedSource:n,selectedVideoId:o,setSelectedImageId:i,setSelectedSource:a,setSelectedVideoId:s,showMediaControls:l,videoOptions:c})=>{const[u,m]=f.useState(!1),b=["webcam","image","video"].filter(p=>p==="image"?t.length>0:p==="video"?c.length>0:!0);return l?u?d.jsx("button",{type:"button",onClick:()=>m(!1),"aria-label":"Open media controls",title:"Open media controls",style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer"},children:"≡"}):d.jsxs(d.Fragment,{children:[d.jsxs("div",{style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,display:"inline-flex",alignItems:"center",gap:8,maxWidth:"calc(100vw - 32px)"},children:[d.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:8,padding:8,borderRadius:999,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",overflowX:"auto"},children:b.map(p=>{const w=p===n;return d.jsxs("button",{type:"button",onClick:()=>a(p),"aria-pressed":w,title:k[p].label,style:{border:"none",borderRadius:999,minWidth:42,height:42,padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,background:w?"rgba(56, 189, 248, 0.18)":"rgba(255,255,255,0.04)",color:w?"#e0f2fe":"rgba(229,238,251,0.82)",cursor:"pointer",flex:"0 0 auto"},children:[d.jsx("span",{style:{fontSize:14,lineHeight:1},children:k[p].icon}),d.jsx("span",{style:{fontSize:12,fontWeight:700,letterSpacing:"0.01em"},children:k[p].label})]},p)})}),d.jsx("button",{type:"button",onClick:()=>m(!0),"aria-label":"Close media controls",title:"Close media controls",style:{width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),n==="image"&&t.length>0&&d.jsx(Y,{dock:e,label:"Image Asset",options:t,value:r,onChange:i}),n==="video"&&c.length>0&&d.jsx(Y,{dock:e,label:"Video Asset",options:c,value:o,onChange:s})]}):null},ve=({containerRef:e,displayCanvasRef:t,imageOptions:r,imageRef:n,layout:o,managesOwnMedia:i,mediaDock:a,mode:s,overlayContent:l,renderOutputs:c,sceneContent:u,selectedImageId:m,selectedSource:b,selectedVideoId:p,setSceneRenderOutputs:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,showMediaControls:M,style:E,videoOptions:v,videoRef:T,viewportSize:S,mirrored:h})=>d.jsxs("div",{ref:e,style:{position:"fixed",inset:0,overflow:"hidden",background:"#000",...E},children:[d.jsx(we,{imageRef:n,selectedSource:b,videoRef:T}),s==="dom"&&i&&d.jsx(re,{canvasRef:t,imageRef:n,videoRef:T,layer:pe,layout:o,mirrored:h,sourceKind:b==="image"?"image":"video"}),(s==="r3f"||s==="hybrid")&&d.jsx(A,{config:be,children:d.jsx(C.XRScene,{onRenderOutputs:w,renderOutputs:{sceneColor:c.sceneColor||c.finalColor,sceneDepth:c.sceneDepth},renderTargetSize:S,style:{width:"100%",height:"100%"},children:u})}),d.jsxs(A,{config:xe,children:[i&&d.jsx(Se,{dock:a,imageOptions:r,selectedImageId:m,selectedSource:b,selectedVideoId:p,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,showMediaControls:M,videoOptions:v}),l]})]}),Re=5,ye=1,ne=(e,t)=>t,Ce="brightness(2.2) contrast(1.5) saturate(1.25)",oe=({enabled:e,displayMirrored:t,imageRef:r,layout:n,mode:o,numFaces:i,selectedSource:a,sourceStream:s,videoRef:l})=>{const{session:c}=_.useXRContext(),u=f.useRef(null),m=f.useRef(!1),b=f.useRef(document.createElement("canvas")),{ready:p,node:w,error:x}=D.useXRModel(_.XRModel.FACE_TRACKER,{numFaces:i??(o==="head-binding"?ye:Re)}),[g,R]=f.useState("idle"),[M,E]=f.useState(null),v=e&&p&&!!w,T=ee.useFaceResults({node:v?w:null,enabled:v,selectedSource:a,onFrame:f.useCallback(()=>{E(null),R("ready")},[])});return f.useEffect(()=>{if(!e||!n)return;const S=()=>{const y=a==="image"?r.current:l.current;if(y){if(y instanceof HTMLImageElement){if(!y.complete||y.naturalWidth<=0||y.naturalHeight<=0)return}else if(y.readyState<2||y.videoWidth<=0||y.videoHeight<=0)return;U({canvas:b.current,layout:n,media:y,mirrored:t,filter:a==="webcam"?Ce:void 0})}};if(a==="image"){S();return}let h=0;const F=()=>{h=requestAnimationFrame(F),S()};return h=requestAnimationFrame(F),()=>cancelAnimationFrame(h)},[t,e,r,n,a,l]),f.useEffect(()=>{var L;if(!e){R("idle"),E(null),m.current=!1,u.current=null;return}if(!n){R("initializing");return}const S=(s==null?void 0:s.id)??(((L=l.current)==null?void 0:L.srcObject)instanceof MediaStream?l.current.srcObject.id:"none"),F=a==="webcam"?`webcam:${S}`:a;u.current!==F&&(m.current=!1,u.current=F);let y=!1;return(async()=>{try{if(R("initializing"),m.current||(await c.setFrameSource({canvas:b.current,sourceKind:a}),await c.start(),m.current=!0),y)return;E(null),R("initializing")}catch(X){if(y)return;R("error"),E(X instanceof Error?X.message:"Failed to initialize SDK face tracking")}})(),()=>{y=!0}},[e,n,a,c,s,l]),f.useEffect(()=>{!v&&e&&!x&&R("initializing")},[v,e,x]),f.useEffect(()=>{x&&(R("error"),E(x.message))},[x]),f.useEffect(()=>()=>{m.current=!1,c.stop()},[c]),{activeDelegate:"GPU",faces:T,status:g,error:M}},Ee=(e,t)=>e==="auto"?t==="webcam"?"cover":"contain":e,Te=({imageOptions:e,initialImageId:t,initialSource:r,initialVideoId:n,source:o,videoOptions:i})=>{var l,c,u,m;const a=(o==null?void 0:o.kind)??r??"webcam";return{selectedSource:a==="image"&&e.length===0||a==="video"&&i.length===0?"webcam":a,selectedImageId:(o==null?void 0:o.kind)==="image"?o.assetId??((l=e[0])==null?void 0:l.id)??"":t??((c=e[0])==null?void 0:c.id)??"",selectedVideoId:(o==null?void 0:o.kind)==="video"?o.assetId??((u=i[0])==null?void 0:u.id)??"":n??((m=i[0])==null?void 0:m.id)??""}},Fe=(e,t,r)=>{if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return null;const n=r==="contain"?Math.min(t.width/e.width,t.height/e.height):Math.max(t.width/e.width,t.height/e.height),o=e.width*n,i=e.height*n;return{source:e,destination:t,drawWidth:o,drawHeight:i,offsetX:(t.width-o)*.5,offsetY:(t.height-i)*.5,scale:n}},Ie=e=>{if(!e)return{width:0,height:0};const t=e.getBoundingClientRect();return{width:t.width||e.clientWidth,height:t.height||e.clientHeight}},Me=e=>{const[t,r]=f.useState({width:0,height:0});return f.useLayoutEffect(()=>{const n=e.current;if(!n)return;let o=0;const i=()=>{const c=Ie(n);r(u=>u.width===c.width&&u.height===c.height?u:c)},a=()=>{i(),o&&cancelAnimationFrame(o),o=requestAnimationFrame(i)};a();const s=new ResizeObserver(a);s.observe(n);const l=window.visualViewport;return window.addEventListener("resize",a),window.addEventListener("orientationchange",a),l==null||l.addEventListener("resize",a),l==null||l.addEventListener("scroll",a),()=>{o&&cancelAnimationFrame(o),s.disconnect(),window.removeEventListener("resize",a),window.removeEventListener("orientationchange",a),l==null||l.removeEventListener("resize",a),l==null||l.removeEventListener("scroll",a)}},[e]),t},Xe=({enabled:e,selectedSource:t})=>{const r=j.useXRModelNode(_.XRModel.FACE_TRACKER);return{faces:ee.useFaceResults({node:r,enabled:e,selectedSource:t}),trackerStatus:r?"ready":"idle"}},J=e=>{e&&(e.pause(),e.removeAttribute("src"),e.srcObject=null,e.load())},Q=e=>{e&&e.removeAttribute("src")},je=({enabled:e,imageAsset:t,selectedSource:r,videoAsset:n})=>{const o=f.useRef(null),i=f.useRef(null),[a,s]=f.useState(null),[l,c]=f.useState({width:0,height:0}),[u,m]=f.useState("idle"),[b,p]=f.useState(null);return f.useEffect(()=>{if(!e){J(o.current),Q(i.current),s(null),c({width:0,height:0}),m("idle"),p(null);return}let w=!1,x=null;const g=(S,h)=>{w||(c({width:S,height:h}),m("ready"),p(null))},R=()=>{J(o.current),Q(i.current),x==null||x.getTracks().forEach(S=>S.stop()),x=null,s(null)},M=async()=>{m("requesting");const S=await navigator.mediaDevices.getUserMedia(ge);if(w){S.getTracks().forEach(F=>F.stop());return}x=S,s(S);const h=o.current;h&&(h.srcObject=S,h.muted=!0,h.playsInline=!0,h.autoplay=!0,await h.play(),g(h.videoWidth,h.videoHeight))},E=async S=>{m("requesting"),s(null);const h=o.current;h&&(h.src=S,h.muted=!0,h.loop=!0,h.playsInline=!0,h.autoplay=!0,h.crossOrigin="anonymous",await h.play(),g(h.videoWidth,h.videoHeight))},v=async S=>{m("requesting"),s(null);const h=i.current;h&&(await new Promise((F,y)=>{h.onload=()=>F(),h.onerror=()=>y(new Error("Unable to load image")),h.src=S}),g(h.naturalWidth,h.naturalHeight))};return R(),(async()=>{try{if(r==="webcam"){await M();return}if(r==="video"){if(!(n!=null&&n.src))throw new Error("Missing video source");await E(n.src);return}if(!(t!=null&&t.src))throw new Error("Missing image source");await v(t.src)}catch(S){if(w)return;m("error"),p(S instanceof Error?S.message:`Unable to initialize ${r}`)}})(),()=>{w=!0,R()}},[e,t,r,n]),{videoRef:o,imageRef:i,stream:a,mediaSize:l,status:u,error:b}},ke=({enabled:e,imageRef:t,selectedSource:r,status:n,videoRef:o})=>{const[i,a]=f.useState(null);return f.useEffect(()=>{if(!e||n!=="ready"){a(c=>(c==null||c.dispose(),null));return}const s=r==="image"?t.current:o.current;if(!s)return;const l=r==="image"?new z.Texture(s):new z.VideoTexture(s);return l.colorSpace=z.SRGBColorSpace,l.minFilter=z.LinearFilter,l.magFilter=z.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,a(c=>(c==null||c.dispose(),l)),()=>{l.dispose()}},[e,t,r,n,o]),i},ze=({externalTracker:e,imageOptions:t,layout:r,managesOwnMedia:n,mediaError:o,mediaFitMode:i,mediaSize:a,mediaStatus:s,mirrored:l,selectedImage:c,selectedImageId:u,selectedSource:m,selectedVideo:b,selectedVideoId:p,setMirrored:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,setShowMediaControls:M,showMediaControls:E,tracker:v,videoOptions:T,viewportSize:S})=>{const h=m==="image"?`${k.image.label}: ${(c==null?void 0:c.label)??""}`:m==="video"?`${k.video.label}: ${(b==null?void 0:b.label)??""}`:k.webcam.label;return{activeDelegate:n?v.activeDelegate:null,faces:n?v.faces:e.faces,imageOptions:t,layout:r,mediaError:o,mediaFitMode:i,mediaLabel:h,mediaStatus:s,mirrored:l,selectedImageId:u,selectedSource:m,selectedVideoId:p,setMirrored:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,setShowMediaControls:M,showMediaControls:E,trackerError:n?v.error:null,trackerStatus:n?v.status:e.trackerStatus,videoOptions:T,viewportSize:S,mediaSize:a}},Ae=({mediaTexture:e,previewMode:t,renderOutputs:r,sceneRenderOutputs:n})=>f.useMemo(()=>({requested:r,previewMode:t,mediaColorTexture:e,sceneColorTexture:n.sceneColorTexture,finalColorTexture:r.finalColor?n.sceneColorTexture:null,sceneDepthTexture:n.sceneDepthTexture,estimatedDepthTexture:null,available:{mediaColor:e!==null,sceneColor:n.sceneColorTexture!==null,finalColor:!!(r.finalColor&&n.sceneColorTexture),sceneDepth:n.sceneDepthTexture!==null,estimatedDepth:!1}}),[e,t,r,n]),Be=({fitMode:e,imageOptions:t,initialImageId:r,initialMirrored:n,initialSource:o,initialVideoId:i,mediaStrategy:a,previewMode:s,renderOutputs:l,showMediaControlsByDefault:c,source:u,videoOptions:m})=>{const b=f.useRef(null),p=f.useRef(null),w=Me(b),x=f.useMemo(()=>Te({imageOptions:t,initialImageId:r,initialSource:o,initialVideoId:i,source:u,videoOptions:m}),[t,r,o,i,u,m]),[g,R]=f.useState(n),[M,E]=f.useState(c),[v,T]=f.useState(x.selectedSource),[S,h]=f.useState(x.selectedImageId),[F,y]=f.useState(x.selectedVideoId),[G,L]=f.useState({sceneColorTexture:null,sceneDepthTexture:null}),X=a==="internal";f.useEffect(()=>{u&&(T(x.selectedSource),h(x.selectedImageId),y(x.selectedVideoId))},[x,u]);const K=t.find(H=>H.id===S)??t[0],O=m.find(H=>H.id===F)??m[0],I=je({enabled:X,imageAsset:K,selectedSource:v,videoAsset:O}),P=Ee(e,v),V=f.useMemo(()=>Fe(I.mediaSize,w,P),[I.mediaSize,P,w]),ie=ke({enabled:!!(l.mediaColor||l.finalColor),imageRef:I.imageRef,selectedSource:v,status:I.status,videoRef:I.videoRef}),W=ne(v,g),ae=oe({displayMirrored:W,enabled:X&&I.status==="ready"&&V!==null,imageRef:I.imageRef,layout:V,selectedSource:v,sourceStream:I.stream,videoRef:I.videoRef}),se=Xe({enabled:!X,selectedSource:v}),le=ze({externalTracker:se,imageOptions:t,layout:V,managesOwnMedia:X,mediaError:I.error,mediaFitMode:P,mediaSize:I.mediaSize,mediaStatus:I.status,mirrored:W,selectedImage:K,selectedImageId:S,selectedSource:v,selectedVideo:O,selectedVideoId:F,setMirrored:R,setSelectedImageId:h,setSelectedSource:T,setSelectedVideoId:y,setShowMediaControls:E,showMediaControls:M,tracker:ae,videoOptions:m,viewportSize:w}),ce=Ae({mediaTexture:ie,previewMode:s,renderOutputs:l,sceneRenderOutputs:G});return{containerRef:b,displayCanvasRef:p,displayMirrored:W,layout:V,managesOwnMedia:X,media:I,renderOutputState:ce,renderState:le,selectedImageId:S,selectedSource:v,selectedVideoId:F,setSceneRenderOutputs:L,setSelectedImageId:h,setSelectedSource:T,setSelectedVideoId:y,showMediaControls:M,viewportSize:w}},N=({children:e})=>d.jsx(d.Fragment,{children:e});N.displayName="XRViewport.Scene";const $=({children:e})=>d.jsx(d.Fragment,{children:e});$.displayName="XRViewport.Overlay";const Le=(e,t)=>{if(e==="dom")return{sceneContent:null,overlayContent:t};let r=null,n=null;const o=[];return f.Children.forEach(t,i=>{var s;if(!f.isValidElement(i)){i!=null&&o.push(i);return}const a=(s=i.type)==null?void 0:s.displayName;if(a===N.displayName){r=i.props.children;return}if(a===$.displayName){n=i.props.children;return}o.push(i)}),!n&&o.length>0&&(n=o),{sceneContent:r,overlayContent:n}},Z=(e,t)=>typeof e=="function"?e(t):e;function Ve(e){return e.Scene=N,e.Overlay=$,e}const _e=Ve(({children:e,fitMode:t="auto",imageOptions:r=[],initialImageId:n,initialMirrored:o=!0,initialSource:i="webcam",initialVideoId:a,mediaStrategy:s="internal",mediaDock:l="bottom-left",mode:c="dom",previewMode:u="finalColor",renderOutputs:m={},showMediaControlsByDefault:b=!0,source:p,style:w,videoOptions:x=[]})=>{const g=Be({fitMode:t,imageOptions:r,initialImageId:n,initialMirrored:o,initialSource:i,initialVideoId:a,mediaStrategy:s,previewMode:u,renderOutputs:m,showMediaControlsByDefault:b,source:p,videoOptions:x}),R=typeof e=="function"?e(g.renderState):e,{sceneContent:M,overlayContent:E}=Le(c,R),v=Z(M,g.renderState),T=Z(E,g.renderState);return d.jsx(C.XRViewportStateContext.Provider,{value:g.renderState,children:d.jsx(C.XRViewportRenderOutputsContext.Provider,{value:g.renderOutputState,children:d.jsx(ve,{containerRef:g.containerRef,displayCanvasRef:g.displayCanvasRef,imageOptions:r,imageRef:g.media.imageRef,layout:g.layout,managesOwnMedia:g.managesOwnMedia,mediaDock:l,mirrored:g.displayMirrored,mode:c,overlayContent:T,renderOutputs:m,sceneContent:v,selectedImageId:g.selectedImageId,selectedSource:g.selectedSource,selectedVideoId:g.selectedVideoId,setSceneRenderOutputs:g.setSceneRenderOutputs,setSelectedImageId:g.setSelectedImageId,setSelectedSource:g.setSelectedSource,setSelectedVideoId:g.setSelectedVideoId,showMediaControls:g.showMediaControls,style:w,videoOptions:x,videoRef:g.media.videoRef,viewportSize:g.viewportSize})})})}),De={position:"absolute",top:-28,left:0,background:"rgba(34, 197, 94, 0.9)",color:"#04130a",fontFamily:"Menlo, Monaco, Consolas, monospace",fontSize:12,fontWeight:700,padding:"4px 8px",whiteSpace:"nowrap"},qe=({boundingBox:e,label:t="face bounding box",color:r="#22c55e",style:n,labelStyle:o})=>d.jsx("div",{style:{position:"absolute",left:`${e.left*100}%`,top:`${e.top*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,border:`3px solid ${r}`,boxSizing:"border-box",pointerEvents:"none",zIndex:20,...n},children:t!==null&&d.jsx("div",{style:{...De,...o},children:t})}),Pe=e=>{const[t,r]=f.useState(null);return f.useEffect(()=>{let n=0;const o=()=>{var l,c;n=requestAnimationFrame(o);const i=(c=(l=e==null?void 0:e.detectionResults)==null?void 0:l.faceLandmarks)==null?void 0:c[0];if(!i||i.length===0){r(null);return}const a=q.computeLandmarkBounds(i),s={left:a.minX,top:a.minY,width:a.width,height:a.height};r(u=>u&&u.left===s.left&&u.top===s.top&&u.width===s.width&&u.height===s.height?u:s)};return o(),()=>{cancelAnimationFrame(n)}},[e]),t},We=({background:e="#000",children:t,style:r})=>d.jsx("div",{style:{position:"fixed",inset:0,overflow:"hidden",background:e,...r},children:t}),He=e=>{const{makeDefault:t=!0,...r}=e;return d.jsx(de.PerspectiveCamera,{position:[0,0,40],fov:30,near:.1,far:1e3,makeDefault:t,...r})},Ue=["fill","contain"];exports.useXRContext=_.useXRContext;exports.HeadTracker=D.HeadTracker;exports.useTrackerContext=D.useTrackerContext;exports.useXRModel=D.useXRModel;exports.useXRCameraTexture=j.useXRCameraTexture;exports.useXRError=j.useXRError;exports.useXRModelNode=j.useXRModelNode;exports.useXRPipelineSnapshot=j.useXRPipelineSnapshot;exports.useXRReady=j.useXRReady;exports.useXRRenderSize=j.useXRRenderSize;exports.computeLandmarkBounds=q.computeLandmarkBounds;exports.createFaceInfoTarget=q.createFaceInfoTarget;exports.getFaceInfo=q.getFaceInfo;exports.ScreenRectAspectContext=B.ScreenRectAspectContext;exports.getThreeBlending=B.getThreeBlending;exports.getThreeDepthFunction=B.getThreeDepthFunction;exports.getThreeSide=B.getThreeSide;exports.useScreenSpace=B.useScreenSpace;exports.hasFullUnitUVBounds=ue.hasFullUnitUVBounds;exports.BasicAnimatedTextureController=C.BasicAnimatedTextureController;exports.MAX_GIF_BYTES=C.MAX_GIF_BYTES;exports.MAX_GIF_FRAMES=C.MAX_GIF_FRAMES;exports.MAX_GIF_PIXELS=C.MAX_GIF_PIXELS;exports.TextureSourceLoadError=C.TextureSourceLoadError;exports.computeScreenTransform=C.computeScreenTransform;exports.createTextureSourceResolver=C.createTextureSourceResolver;exports.disposeResolvedTextureSource=C.disposeResolvedTextureSource;exports.getPlaybackFrame=C.getPlaybackFrame;exports.getSequenceFrame=C.getSequenceFrame;exports.gifTextureSourceProvider=C.gifTextureSourceProvider;exports.resolveTextureSource=C.resolveTextureSource;exports.throwIfAborted=C.throwIfAborted;exports.useXRViewportRenderOutputs=C.useXRViewportRenderOutputs;exports.useXRViewportState=C.useXRViewportState;exports.BoundingBoxOverlay=qe;exports.PerspectiveCamera=He;exports.TEXTURE_FITS=Ue;exports.XRCompositor=We;exports.XRLayer=A;exports.XRMediaSurface=re;exports.XRTrackingOverlay=me;exports.XRViewport=_e;exports.resolveCalibrationFaceDisplayMirrored=ne;exports.useCalibrationFaceTracker=oe;exports.useFaceBoundingBox=Pe;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("./index-DCiMbxC3.cjs"),D=require("./index-CyUUurQT.cjs"),j=require("./selectors-CZLKT2Iv.cjs"),f=require("react"),q=require("./getFaceInfo-fA1bFBub.cjs"),d=require("react/jsx-runtime"),de=require("@react-three/drei"),L=require("./index-BjmTe9eM.cjs"),ee=require("./useFaceResults-wBJF3zyp.cjs"),ue=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),C=require("./contexts-Dr62It_K.cjs"),he=require("three");function fe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const z=fe(he),B=({children:e,config:t,style:n})=>d.jsx("div",{"data-render-target":t.name,style:{position:"absolute",inset:0,overflow:"hidden",background:t.clearColor,pointerEvents:t.pointerEvents??"none",zIndex:t.zIndex,opacity:t.hidden?0:1,...n},children:e}),U=({canvas:e,layout:t,media:n,mirrored:r,filter:i})=>{const o=Math.round(t.destination.width),a=Math.round(t.destination.height);e.width!==o&&(e.width=o),e.height!==a&&(e.height=a);const s=e.getContext("2d");s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,o,a),r&&(s.translate(o,0),s.scale(-1,1)),i&&(s.filter=i),s.drawImage(n,t.offsetX,t.offsetY,t.drawWidth,t.drawHeight),i&&(s.filter="none"),s.setTransform(1,0,0,1,0,0))},te=({canvasRef:e,enabled:t=!0,fps:n=30,imageRef:r,layout:i,mirrored:o,sourceKind:a,videoRef:s})=>{f.useEffect(()=>{if(!t){const b=e.current,p=b==null?void 0:b.getContext("2d");b&&p&&p.clearRect(0,0,b.width,b.height);return}let l=0,c=0;const u=n>0?1e3/n:0,m=b=>{if(l=requestAnimationFrame(m),u>0&&b-c<u)return;c=b;const p=e.current;if(!p||!i)return;if(a==="image"){const x=r.current;if(!x||!x.complete||x.naturalWidth<=0||x.naturalHeight<=0)return;U({canvas:p,layout:i,media:x,mirrored:o});return}const w=s.current;!w||w.readyState<2||w.videoWidth<=0||w.videoHeight<=0||U({canvas:p,layout:i,media:w,mirrored:o})};return l=requestAnimationFrame(m),()=>{cancelAnimationFrame(l)}},[e,t,n,r,i,o,a,s])},re=({canvasRef:e,imageRef:t,layer:n,layout:r,mirrored:i,onCaptureTarget:o,sourceKind:a,videoRef:s})=>(te({canvasRef:e,imageRef:t,layout:r,mirrored:i,sourceKind:a,videoRef:s}),f.useEffect(()=>{const l=e.current;if(l)return o==null||o(l),()=>o==null?void 0:o(void 0)},[e,o]),d.jsx(B,{config:n,children:d.jsx("canvas",{ref:e,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block",background:"#000"}})})),me=({canvasRef:e,controlInsetTop:t,debugVisible:n,fps:r=15,imageRef:i,layer:o,layout:a,mirrored:s,sourceKind:l,videoRef:c,viewportSize:u})=>{te({canvasRef:e,enabled:n,fps:r,imageRef:i,layout:a,mirrored:s,sourceKind:l,videoRef:c});const m=Math.min(220,Math.max(120,u.width*.22)),b=u.width>0&&u.height>0?u.width/u.height:1,p=Math.min(u.height-24,Math.max(t??16,16));return d.jsx(B,{config:o,children:d.jsx("canvas",{ref:e,style:{position:"absolute",left:16,top:p,width:n?m:1,height:n?"auto":1,aspectRatio:`${b}`,opacity:n?.85:0,borderRadius:10,border:n?"1px solid rgba(255,255,255,0.16)":"none",pointerEvents:"none",objectFit:"contain",background:"#000"}})})},ge={audio:!1,video:{facingMode:"user",frameRate:{ideal:30,max:60}}},pe={name:"viewport-live",clearColor:"#000000",pointerEvents:"none",zIndex:0},xe={name:"viewport-ui",clearColor:"transparent",pointerEvents:"auto",zIndex:5},be={name:"viewport-scene",clearColor:"transparent",pointerEvents:"auto",zIndex:1},k={webcam:{icon:"◉",label:"Webcam"},image:{icon:"▣",label:"Images"},video:{icon:"▶",label:"Videos"}},we=({imageRef:e,selectedSource:t,videoRef:n})=>d.jsxs(d.Fragment,{children:[d.jsx("video",{ref:n,style:{position:"absolute",width:1,height:1,opacity:t==="image"?0:.001,pointerEvents:"none"}}),d.jsx("img",{ref:e,alt:"",style:{position:"absolute",width:1,height:1,opacity:t==="image"?.001:0,pointerEvents:"none"}})]}),Y=({dock:e,label:t,onChange:n,options:r,value:i})=>d.jsx("div",{style:{position:"absolute",top:e==="top-left"?74:void 0,bottom:e==="bottom-left"?74:void 0,left:16,zIndex:5,maxWidth:"calc(100vw - 32px)",padding:10,borderRadius:14,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)"},children:d.jsxs("label",{style:{display:"grid",gap:6,color:"#e5eefb",fontSize:12,fontWeight:700},children:[d.jsx("span",{children:t}),d.jsx("select",{value:i,onChange:o=>n(o.target.value),style:{minWidth:180,maxWidth:"calc(100vw - 52px)",height:36,borderRadius:10,border:"1px solid rgba(255,255,255,0.12)",background:"rgba(255,255,255,0.06)",color:"#e5eefb",padding:"0 10px"},children:r.map(o=>d.jsx("option",{value:o.id,style:{color:"#111827"},children:o.label},o.id))})]})}),Se=({dock:e,imageOptions:t,selectedImageId:n,selectedSource:r,selectedVideoId:i,setSelectedImageId:o,setSelectedSource:a,setSelectedVideoId:s,showMediaControls:l,videoOptions:c})=>{const[u,m]=f.useState(!1),b=["webcam","image","video"].filter(p=>p==="image"?t.length>0:p==="video"?c.length>0:!0);return l?u?d.jsx("button",{type:"button",onClick:()=>m(!1),"aria-label":"Open media controls",title:"Open media controls",style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer"},children:"≡"}):d.jsxs(d.Fragment,{children:[d.jsxs("div",{style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,display:"inline-flex",alignItems:"center",gap:8,maxWidth:"calc(100vw - 32px)"},children:[d.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:8,padding:8,borderRadius:999,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",overflowX:"auto"},children:b.map(p=>{const w=p===r;return d.jsxs("button",{type:"button",onClick:()=>a(p),"aria-pressed":w,title:k[p].label,style:{border:"none",borderRadius:999,minWidth:42,height:42,padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,background:w?"rgba(56, 189, 248, 0.18)":"rgba(255,255,255,0.04)",color:w?"#e0f2fe":"rgba(229,238,251,0.82)",cursor:"pointer",flex:"0 0 auto"},children:[d.jsx("span",{style:{fontSize:14,lineHeight:1},children:k[p].icon}),d.jsx("span",{style:{fontSize:12,fontWeight:700,letterSpacing:"0.01em"},children:k[p].label})]},p)})}),d.jsx("button",{type:"button",onClick:()=>m(!0),"aria-label":"Close media controls",title:"Close media controls",style:{width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),r==="image"&&t.length>0&&d.jsx(Y,{dock:e,label:"Image Asset",options:t,value:n,onChange:o}),r==="video"&&c.length>0&&d.jsx(Y,{dock:e,label:"Video Asset",options:c,value:i,onChange:s})]}):null},ve=({containerRef:e,displayCanvasRef:t,imageOptions:n,imageRef:r,layout:i,managesOwnMedia:o,mediaDock:a,mode:s,overlayContent:l,renderOutputs:c,sceneContent:u,selectedImageId:m,selectedSource:b,selectedVideoId:p,setSceneRenderOutputs:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,showMediaControls:M,style:E,videoOptions:v,videoRef:I,viewportSize:S,mirrored:h})=>{const{session:F}=A.useXRContext();return d.jsxs("div",{ref:e,style:{position:"fixed",inset:0,overflow:"hidden",background:"#000",...E},children:[d.jsx(we,{imageRef:r,selectedSource:b,videoRef:I}),s==="dom"&&o&&d.jsx(re,{canvasRef:t,imageRef:r,videoRef:I,layer:pe,layout:i,mirrored:h,onCaptureTarget:F._setCaptureTarget,sourceKind:b==="image"?"image":"video"}),(s==="r3f"||s==="hybrid")&&d.jsx(B,{config:be,children:d.jsx(C.XRScene,{onRenderOutputs:w,renderOutputs:{sceneColor:c.sceneColor||c.finalColor,sceneDepth:c.sceneDepth},renderTargetSize:S,style:{width:"100%",height:"100%"},children:u})}),d.jsxs(B,{config:xe,children:[o&&d.jsx(Se,{dock:a,imageOptions:n,selectedImageId:m,selectedSource:b,selectedVideoId:p,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,showMediaControls:M,videoOptions:v}),l]})]})},Re=5,ye=1,ne=(e,t)=>t,Ce="brightness(2.2) contrast(1.5) saturate(1.25)",oe=({enabled:e,displayMirrored:t,imageRef:n,layout:r,mode:i,numFaces:o,selectedSource:a,sourceStream:s,videoRef:l})=>{const{session:c}=A.useXRContext(),u=f.useRef(null),m=f.useRef(!1),b=f.useRef(document.createElement("canvas")),{ready:p,node:w,error:x}=D.useXRModel(A.XRModel.FACE_TRACKER,{numFaces:o??(i==="head-binding"?ye:Re)}),[g,R]=f.useState("idle"),[M,E]=f.useState(null),v=e&&p&&!!w,I=ee.useFaceResults({node:v?w:null,enabled:v,selectedSource:a,onFrame:f.useCallback(()=>{E(null),R("ready")},[])});return f.useEffect(()=>{if(!e||!r)return;const S=()=>{const y=a==="image"?n.current:l.current;if(y){if(y instanceof HTMLImageElement){if(!y.complete||y.naturalWidth<=0||y.naturalHeight<=0)return}else if(y.readyState<2||y.videoWidth<=0||y.videoHeight<=0)return;U({canvas:b.current,layout:r,media:y,mirrored:t,filter:a==="webcam"?Ce:void 0})}};if(a==="image"){S();return}let h=0;const F=()=>{h=requestAnimationFrame(F),S()};return h=requestAnimationFrame(F),()=>cancelAnimationFrame(h)},[t,e,n,r,a,l]),f.useEffect(()=>{var _;if(!e){R("idle"),E(null),m.current=!1,u.current=null;return}if(!r){R("initializing");return}const S=(s==null?void 0:s.id)??(((_=l.current)==null?void 0:_.srcObject)instanceof MediaStream?l.current.srcObject.id:"none"),F=a==="webcam"?`webcam:${S}`:a;u.current!==F&&(m.current=!1,u.current=F);let y=!1;return(async()=>{try{R("initializing");const X=!m.current;if(X&&await c.setFrameSource({canvas:b.current,sourceKind:a}),await c._setRenderSize(Math.round(r.destination.width),Math.round(r.destination.height)),X&&(await c.start(),m.current=!0),y)return;E(null),R("initializing")}catch(X){if(y)return;R("error"),E(X instanceof Error?X.message:"Failed to initialize SDK face tracking")}})(),()=>{y=!0}},[e,r,a,c,s,l]),f.useEffect(()=>{!v&&e&&!x&&R("initializing")},[v,e,x]),f.useEffect(()=>{x&&(R("error"),E(x.message))},[x]),f.useEffect(()=>()=>{m.current=!1,c.stop()},[c]),{activeDelegate:"GPU",faces:I,status:g,error:M}},Ee=(e,t)=>e==="auto"?t==="webcam"?"cover":"contain":e,Fe=({imageOptions:e,initialImageId:t,initialSource:n,initialVideoId:r,source:i,videoOptions:o})=>{var l,c,u,m;const a=(i==null?void 0:i.kind)??n??"webcam";return{selectedSource:a==="image"&&e.length===0||a==="video"&&o.length===0?"webcam":a,selectedImageId:(i==null?void 0:i.kind)==="image"?i.assetId??((l=e[0])==null?void 0:l.id)??"":t??((c=e[0])==null?void 0:c.id)??"",selectedVideoId:(i==null?void 0:i.kind)==="video"?i.assetId??((u=o[0])==null?void 0:u.id)??"":r??((m=o[0])==null?void 0:m.id)??""}},Ie=(e,t,n)=>{if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return null;const r=n==="contain"?Math.min(t.width/e.width,t.height/e.height):Math.max(t.width/e.width,t.height/e.height),i=e.width*r,o=e.height*r;return{source:e,destination:t,drawWidth:i,drawHeight:o,offsetX:(t.width-i)*.5,offsetY:(t.height-o)*.5,scale:r}},Te=e=>{if(!e)return{width:0,height:0};const t=e.getBoundingClientRect();return{width:t.width||e.clientWidth,height:t.height||e.clientHeight}},Me=e=>{const[t,n]=f.useState({width:0,height:0});return f.useLayoutEffect(()=>{const r=e.current;if(!r)return;let i=0;const o=()=>{const c=Te(r);n(u=>u.width===c.width&&u.height===c.height?u:c)},a=()=>{o(),i&&cancelAnimationFrame(i),i=requestAnimationFrame(o)};a();const s=new ResizeObserver(a);s.observe(r);const l=window.visualViewport;return window.addEventListener("resize",a),window.addEventListener("orientationchange",a),l==null||l.addEventListener("resize",a),l==null||l.addEventListener("scroll",a),()=>{i&&cancelAnimationFrame(i),s.disconnect(),window.removeEventListener("resize",a),window.removeEventListener("orientationchange",a),l==null||l.removeEventListener("resize",a),l==null||l.removeEventListener("scroll",a)}},[e]),t},Xe=({enabled:e,selectedSource:t})=>{const n=j.useXRModelNode(A.XRModel.FACE_TRACKER);return{faces:ee.useFaceResults({node:n,enabled:e,selectedSource:t}),trackerStatus:n?"ready":"idle"}},J=e=>{e&&(e.pause(),e.removeAttribute("src"),e.srcObject=null,e.load())},Q=e=>{e&&e.removeAttribute("src")},je=({enabled:e,imageAsset:t,selectedSource:n,videoAsset:r})=>{const i=f.useRef(null),o=f.useRef(null),[a,s]=f.useState(null),[l,c]=f.useState({width:0,height:0}),[u,m]=f.useState("idle"),[b,p]=f.useState(null);return f.useEffect(()=>{if(!e){J(i.current),Q(o.current),s(null),c({width:0,height:0}),m("idle"),p(null);return}let w=!1,x=null;const g=(S,h)=>{w||(c({width:S,height:h}),m("ready"),p(null))},R=()=>{J(i.current),Q(o.current),x==null||x.getTracks().forEach(S=>S.stop()),x=null,s(null)},M=async()=>{m("requesting");const S=await navigator.mediaDevices.getUserMedia(ge);if(w){S.getTracks().forEach(F=>F.stop());return}x=S,s(S);const h=i.current;h&&(h.srcObject=S,h.muted=!0,h.playsInline=!0,h.autoplay=!0,await h.play(),g(h.videoWidth,h.videoHeight))},E=async S=>{m("requesting"),s(null);const h=i.current;h&&(h.src=S,h.muted=!0,h.loop=!0,h.playsInline=!0,h.autoplay=!0,h.crossOrigin="anonymous",await h.play(),g(h.videoWidth,h.videoHeight))},v=async S=>{m("requesting"),s(null);const h=o.current;h&&(await new Promise((F,y)=>{h.onload=()=>F(),h.onerror=()=>y(new Error("Unable to load image")),h.src=S}),g(h.naturalWidth,h.naturalHeight))};return R(),(async()=>{try{if(n==="webcam"){await M();return}if(n==="video"){if(!(r!=null&&r.src))throw new Error("Missing video source");await E(r.src);return}if(!(t!=null&&t.src))throw new Error("Missing image source");await v(t.src)}catch(S){if(w)return;m("error"),p(S instanceof Error?S.message:`Unable to initialize ${n}`)}})(),()=>{w=!0,R()}},[e,t,n,r]),{videoRef:i,imageRef:o,stream:a,mediaSize:l,status:u,error:b}},ke=({enabled:e,imageRef:t,selectedSource:n,status:r,videoRef:i})=>{const[o,a]=f.useState(null);return f.useEffect(()=>{if(!e||r!=="ready"){a(c=>(c==null||c.dispose(),null));return}const s=n==="image"?t.current:i.current;if(!s)return;const l=n==="image"?new z.Texture(s):new z.VideoTexture(s);return l.colorSpace=z.SRGBColorSpace,l.minFilter=z.LinearFilter,l.magFilter=z.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,a(c=>(c==null||c.dispose(),l)),()=>{l.dispose()}},[e,t,n,r,i]),o},ze=({externalTracker:e,imageOptions:t,layout:n,managesOwnMedia:r,mediaError:i,mediaFitMode:o,mediaSize:a,mediaStatus:s,mirrored:l,selectedImage:c,selectedImageId:u,selectedSource:m,selectedVideo:b,selectedVideoId:p,setMirrored:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,setShowMediaControls:M,showMediaControls:E,tracker:v,videoOptions:I,viewportSize:S})=>{const h=m==="image"?`${k.image.label}: ${(c==null?void 0:c.label)??""}`:m==="video"?`${k.video.label}: ${(b==null?void 0:b.label)??""}`:k.webcam.label;return{activeDelegate:r?v.activeDelegate:null,faces:r?v.faces:e.faces,imageOptions:t,layout:n,mediaError:i,mediaFitMode:o,mediaLabel:h,mediaStatus:s,mirrored:l,selectedImageId:u,selectedSource:m,selectedVideoId:p,setMirrored:w,setSelectedImageId:x,setSelectedSource:g,setSelectedVideoId:R,setShowMediaControls:M,showMediaControls:E,trackerError:r?v.error:null,trackerStatus:r?v.status:e.trackerStatus,videoOptions:I,viewportSize:S,mediaSize:a}},Ae=({mediaTexture:e,previewMode:t,renderOutputs:n,sceneRenderOutputs:r})=>f.useMemo(()=>({requested:n,previewMode:t,mediaColorTexture:e,sceneColorTexture:r.sceneColorTexture,finalColorTexture:n.finalColor?r.sceneColorTexture:null,sceneDepthTexture:r.sceneDepthTexture,estimatedDepthTexture:null,available:{mediaColor:e!==null,sceneColor:r.sceneColorTexture!==null,finalColor:!!(n.finalColor&&r.sceneColorTexture),sceneDepth:r.sceneDepthTexture!==null,estimatedDepth:!1}}),[e,t,n,r]),Be=({fitMode:e,imageOptions:t,initialImageId:n,initialMirrored:r,initialSource:i,initialVideoId:o,mediaStrategy:a,previewMode:s,renderOutputs:l,showMediaControlsByDefault:c,source:u,videoOptions:m})=>{const b=f.useRef(null),p=f.useRef(null),w=Me(b),x=f.useMemo(()=>Fe({imageOptions:t,initialImageId:n,initialSource:i,initialVideoId:o,source:u,videoOptions:m}),[t,n,i,o,u,m]),[g,R]=f.useState(r),[M,E]=f.useState(c),[v,I]=f.useState(x.selectedSource),[S,h]=f.useState(x.selectedImageId),[F,y]=f.useState(x.selectedVideoId),[G,_]=f.useState({sceneColorTexture:null,sceneDepthTexture:null}),X=a==="internal";f.useEffect(()=>{u&&(I(x.selectedSource),h(x.selectedImageId),y(x.selectedVideoId))},[x,u]);const K=t.find(H=>H.id===S)??t[0],O=m.find(H=>H.id===F)??m[0],T=je({enabled:X,imageAsset:K,selectedSource:v,videoAsset:O}),P=Ee(e,v),V=f.useMemo(()=>Ie(T.mediaSize,w,P),[T.mediaSize,P,w]),ie=ke({enabled:!!(l.mediaColor||l.finalColor),imageRef:T.imageRef,selectedSource:v,status:T.status,videoRef:T.videoRef}),W=ne(v,g),ae=oe({displayMirrored:W,enabled:X&&T.status==="ready"&&V!==null,imageRef:T.imageRef,layout:V,selectedSource:v,sourceStream:T.stream,videoRef:T.videoRef}),se=Xe({enabled:!X,selectedSource:v}),le=ze({externalTracker:se,imageOptions:t,layout:V,managesOwnMedia:X,mediaError:T.error,mediaFitMode:P,mediaSize:T.mediaSize,mediaStatus:T.status,mirrored:W,selectedImage:K,selectedImageId:S,selectedSource:v,selectedVideo:O,selectedVideoId:F,setMirrored:R,setSelectedImageId:h,setSelectedSource:I,setSelectedVideoId:y,setShowMediaControls:E,showMediaControls:M,tracker:ae,videoOptions:m,viewportSize:w}),ce=Ae({mediaTexture:ie,previewMode:s,renderOutputs:l,sceneRenderOutputs:G});return{containerRef:b,displayCanvasRef:p,displayMirrored:W,layout:V,managesOwnMedia:X,media:T,renderOutputState:ce,renderState:le,selectedImageId:S,selectedSource:v,selectedVideoId:F,setSceneRenderOutputs:_,setSelectedImageId:h,setSelectedSource:I,setSelectedVideoId:y,showMediaControls:M,viewportSize:w}},N=({children:e})=>d.jsx(d.Fragment,{children:e});N.displayName="XRViewport.Scene";const $=({children:e})=>d.jsx(d.Fragment,{children:e});$.displayName="XRViewport.Overlay";const Le=(e,t)=>{if(e==="dom")return{sceneContent:null,overlayContent:t};let n=null,r=null;const i=[];return f.Children.forEach(t,o=>{var s;if(!f.isValidElement(o)){o!=null&&i.push(o);return}const a=(s=o.type)==null?void 0:s.displayName;if(a===N.displayName){n=o.props.children;return}if(a===$.displayName){r=o.props.children;return}i.push(o)}),!r&&i.length>0&&(r=i),{sceneContent:n,overlayContent:r}},Z=(e,t)=>typeof e=="function"?e(t):e;function _e(e){return e.Scene=N,e.Overlay=$,e}const Ve=_e(({children:e,fitMode:t="auto",imageOptions:n=[],initialImageId:r,initialMirrored:i=!0,initialSource:o="webcam",initialVideoId:a,mediaStrategy:s="internal",mediaDock:l="bottom-left",mode:c="dom",previewMode:u="finalColor",renderOutputs:m={},showMediaControlsByDefault:b=!0,source:p,style:w,videoOptions:x=[]})=>{const g=Be({fitMode:t,imageOptions:n,initialImageId:r,initialMirrored:i,initialSource:o,initialVideoId:a,mediaStrategy:s,previewMode:u,renderOutputs:m,showMediaControlsByDefault:b,source:p,videoOptions:x}),R=typeof e=="function"?e(g.renderState):e,{sceneContent:M,overlayContent:E}=Le(c,R),v=Z(M,g.renderState),I=Z(E,g.renderState);return d.jsx(C.XRViewportStateContext.Provider,{value:g.renderState,children:d.jsx(C.XRViewportRenderOutputsContext.Provider,{value:g.renderOutputState,children:d.jsx(ve,{containerRef:g.containerRef,displayCanvasRef:g.displayCanvasRef,imageOptions:n,imageRef:g.media.imageRef,layout:g.layout,managesOwnMedia:g.managesOwnMedia,mediaDock:l,mirrored:g.displayMirrored,mode:c,overlayContent:I,renderOutputs:m,sceneContent:v,selectedImageId:g.selectedImageId,selectedSource:g.selectedSource,selectedVideoId:g.selectedVideoId,setSceneRenderOutputs:g.setSceneRenderOutputs,setSelectedImageId:g.setSelectedImageId,setSelectedSource:g.setSelectedSource,setSelectedVideoId:g.setSelectedVideoId,showMediaControls:g.showMediaControls,style:w,videoOptions:x,videoRef:g.media.videoRef,viewportSize:g.viewportSize})})})}),De={position:"absolute",top:-28,left:0,background:"rgba(34, 197, 94, 0.9)",color:"#04130a",fontFamily:"Menlo, Monaco, Consolas, monospace",fontSize:12,fontWeight:700,padding:"4px 8px",whiteSpace:"nowrap"},qe=({boundingBox:e,label:t="face bounding box",color:n="#22c55e",style:r,labelStyle:i})=>d.jsx("div",{style:{position:"absolute",left:`${e.left*100}%`,top:`${e.top*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,border:`3px solid ${n}`,boxSizing:"border-box",pointerEvents:"none",zIndex:20,...r},children:t!==null&&d.jsx("div",{style:{...De,...i},children:t})}),Pe=e=>{const[t,n]=f.useState(null);return f.useEffect(()=>{let r=0;const i=()=>{var l,c;r=requestAnimationFrame(i);const o=(c=(l=e==null?void 0:e.detectionResults)==null?void 0:l.faceLandmarks)==null?void 0:c[0];if(!o||o.length===0){n(null);return}const a=q.computeLandmarkBounds(o),s={left:a.minX,top:a.minY,width:a.width,height:a.height};n(u=>u&&u.left===s.left&&u.top===s.top&&u.width===s.width&&u.height===s.height?u:s)};return i(),()=>{cancelAnimationFrame(r)}},[e]),t},We=({background:e="#000",children:t,style:n})=>d.jsx("div",{style:{position:"fixed",inset:0,overflow:"hidden",background:e,...n},children:t}),He=e=>{const{makeDefault:t=!0,...n}=e;return d.jsx(de.PerspectiveCamera,{position:[0,0,40],fov:30,near:.1,far:1e3,makeDefault:t,...n})},Ue=["fill","contain"];exports.useXRContext=A.useXRContext;exports.HeadTracker=D.HeadTracker;exports.useTrackerContext=D.useTrackerContext;exports.useXRModel=D.useXRModel;exports.useXRCameraTexture=j.useXRCameraTexture;exports.useXRError=j.useXRError;exports.useXRModelNode=j.useXRModelNode;exports.useXRPipelineSnapshot=j.useXRPipelineSnapshot;exports.useXRReady=j.useXRReady;exports.useXRRenderSize=j.useXRRenderSize;exports.computeLandmarkBounds=q.computeLandmarkBounds;exports.createFaceInfoTarget=q.createFaceInfoTarget;exports.getFaceInfo=q.getFaceInfo;exports.ScreenRectAspectContext=L.ScreenRectAspectContext;exports.getThreeBlending=L.getThreeBlending;exports.getThreeDepthFunction=L.getThreeDepthFunction;exports.getThreeSide=L.getThreeSide;exports.useScreenSpace=L.useScreenSpace;exports.hasFullUnitUVBounds=ue.hasFullUnitUVBounds;exports.BasicAnimatedTextureController=C.BasicAnimatedTextureController;exports.MAX_GIF_BYTES=C.MAX_GIF_BYTES;exports.MAX_GIF_FRAMES=C.MAX_GIF_FRAMES;exports.MAX_GIF_PIXELS=C.MAX_GIF_PIXELS;exports.TextureSourceLoadError=C.TextureSourceLoadError;exports.computeScreenTransform=C.computeScreenTransform;exports.createTextureSourceResolver=C.createTextureSourceResolver;exports.disposeResolvedTextureSource=C.disposeResolvedTextureSource;exports.getPlaybackFrame=C.getPlaybackFrame;exports.getSequenceFrame=C.getSequenceFrame;exports.gifTextureSourceProvider=C.gifTextureSourceProvider;exports.resolveTextureSource=C.resolveTextureSource;exports.throwIfAborted=C.throwIfAborted;exports.useXRViewportRenderOutputs=C.useXRViewportRenderOutputs;exports.useXRViewportState=C.useXRViewportState;exports.BoundingBoxOverlay=qe;exports.PerspectiveCamera=He;exports.TEXTURE_FITS=Ue;exports.XRCompositor=We;exports.XRLayer=B;exports.XRMediaSurface=re;exports.XRTrackingOverlay=me;exports.XRViewport=Ve;exports.resolveCalibrationFaceDisplayMirrored=ne;exports.useCalibrationFaceTracker=oe;exports.useFaceBoundingBox=Pe;
|