@vincentt-xr/sdk 2.0.0-alpha.3 → 2.0.0-alpha.4
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 +33 -0
- package/dist/{DebuggerUI-xp4bg3gH.js → DebuggerUI-DhKTXTY2.js} +1 -1
- package/dist/{DebuggerUI-B45_Gb9d.cjs → DebuggerUI-bnGHSSOb.cjs} +1 -1
- package/dist/{FaceMeshRenderer-CALA4k49.js → FaceMeshRenderer-B2i2NW71.js} +3 -3
- package/dist/{FaceMeshRenderer-D4PFqsb3.cjs → FaceMeshRenderer-BSOq1OnG.cjs} +1 -1
- package/dist/{FaceRetouch-DF5UsOsZ.js → FaceRetouch-Bg-OBU4n.js} +4 -4
- package/dist/{FaceRetouch-Bq2rtPlV.cjs → FaceRetouch-TZeBGIqW.cjs} +1 -1
- package/dist/{contexts-D5TQcwmv.js → contexts-B2_NsTnk.js} +3 -3
- package/dist/{contexts-Dv1SA0bS.cjs → contexts-BgWfyxre.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/low-level.d.ts +2 -0
- package/dist/face-effects.cjs +1 -1
- package/dist/face-effects.js +4 -4
- package/dist/{getFaceInfo-Cjcgcc4w.js → getFaceInfo-4DhcPZDJ.js} +1 -1
- package/dist/{getFaceInfo-oQcP40Ha.cjs → getFaceInfo-QOQ_dc-W.cjs} +1 -1
- package/dist/hooks/selectors.d.ts +2 -4
- package/dist/hooks/useXRSession/reason.d.ts +19 -0
- package/dist/hooks/useXRSession/store.d.ts +12 -4
- package/dist/{index-N7C6fNah.js → index-72Wb15Ca.js} +1 -1
- package/dist/{index-JygePOwo.js → index-BMeBJ0dV.js} +322 -299
- package/dist/{index-UU5ODHGU.cjs → index-C9yQVzAh.cjs} +1 -1
- package/dist/{index-DdWBnI7A.cjs → index-CNGzE49z.cjs} +1 -1
- package/dist/{index-DpVIEBHw.js → index-Cj3fGDtZ.js} +8 -8
- package/dist/{index-YMUaJU7U.js → index-D1kj6uc-.js} +1 -1
- package/dist/{index-D4bLzBr6.cjs → index-Da7uycur.cjs} +1 -1
- package/dist/{index-Be-S7uSm.cjs → index-WPPnlFO1.cjs} +1 -1
- package/dist/{index-DqhqBi7O.cjs → index-ZaDEzDtR.cjs} +1 -1
- package/dist/{index-HxT9XEuh.js → index-g250Tqme.js} +1 -1
- package/dist/{internal-D7NxAsc6.js → internal-34pb7djs.js} +3 -3
- package/dist/{internal-i2JkM85N.cjs → internal-Dtvo4WYo.cjs} +1 -1
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +1 -1
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +11 -11
- package/dist/main.cjs +1 -1
- package/dist/main.js +12 -12
- package/dist/{renderGroups-JEXqSACh.js → renderGroups-CPWUX6z9.js} +1 -1
- package/dist/{renderGroups-uXXsFpvw.cjs → renderGroups-jSUOY1Oq.cjs} +1 -1
- package/dist/{renderPasses-CdGZeHHL.js → renderPasses-CLlYRdMk.js} +4 -4
- package/dist/{renderPasses-CVWt0t8m.cjs → renderPasses-KUJUSevp.cjs} +1 -1
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/{selectors-twqYByYZ.js → selectors-DLxL8Q66.js} +1 -1
- package/dist/{selectors-2QvO5RYY.cjs → selectors-S8g25ke9.cjs} +1 -1
- package/dist/{session-C1StwN0f.js → session-CbtvwiaD.js} +1 -1
- package/dist/{session-BChR4TgK.cjs → session-DP8AF7Rg.cjs} +1 -1
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +9 -9
- package/dist/{useFaceInfo-DSUmuzzO.cjs → useFaceInfo-BvZeUBsL.cjs} +1 -1
- package/dist/{useFaceInfo-DOJCGlDG.js → useFaceInfo-C06EyScd.js} +3 -3
- package/dist/{useFaceResults-CBmhT5E8.js → useFaceResults-C1Ppc8rS.js} +1 -1
- package/dist/{useFaceResults-B1BSGUAW.cjs → useFaceResults-CCNiH7VZ.cjs} +1 -1
- package/package.json +2 -1
|
@@ -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-D1kj6uc-.js";
|
|
7
7
|
const O = [
|
|
8
8
|
"face.center",
|
|
9
9
|
"face.forehead",
|
|
@@ -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-DLxL8Q66.js";
|
|
7
|
+
import { u as G } from "./index-BMeBJ0dV.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-DhKTXTY2.js")).DebuggerUI })), C = X(null);
|
|
380
380
|
function be({
|
|
381
381
|
children: t,
|
|
382
382
|
keyboardShortcut: e = "ctrl+shift+d",
|
|
@@ -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-2QvO5RYY.cjs"),$=require("./index-D4bLzBr6.cjs"),B=require("@react-three/fiber");require("./hasFullUnitUVBounds-p1Dl0ejX.cjs");require("./renderLayers-lDtL0_43.cjs");const K=({children:t,defaultCollapsed:e=!0,title:r,width:s=320})=>{const[o,a]=n.useState(e);return o?m.jsx("button",{type:"button",onClick:()=>a(!1),"aria-label":`Open ${r}`,title:`Open ${r}`,style:{position:"absolute",right:16,bottom:16,zIndex:40,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",pointerEvents:"auto"},children:"◫"}):m.jsxs("div",{style:{position:"absolute",right:16,bottom:16,zIndex:40,width:s,maxWidth:"calc(100vw - 32px)",padding:14,borderRadius:14,boxShadow:"0 12px 30px rgba(0,0,0,0.26)",backdropFilter:"blur(10px)",pointerEvents:"auto",background:"rgba(15, 23, 42, 0.78)",border:"1px solid rgba(255,255,255,0.12)",color:"#e5eefb"},children:[m.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,marginBottom:10},children:[m.jsx("div",{style:{fontSize:13,fontWeight:700},children:r}),m.jsx("button",{type:"button",onClick:()=>a(!0),"aria-label":`Close ${r}`,title:`Close ${r}`,style:{width:32,height:32,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(255,255,255,0.04)",color:"#e5eefb",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),t]})};class V{constructor(){i(this,"frameTimestamps",[]);i(this,"lastUpdateTime",0);i(this,"currentFPS",0);i(this,"updateInterval",500);this.lastUpdateTime=performance.now()}trackFrame(){const e=performance.now();this.frameTimestamps.push(e);const r=e-this.updateInterval;this.frameTimestamps=this.frameTimestamps.filter(s=>s>r),e-this.lastUpdateTime>=this.updateInterval&&(this.currentFPS=this.frameTimestamps.length*2,this.lastUpdateTime=e)}getFPS(){return this.currentFPS}reset(){this.frameTimestamps=[],this.lastUpdateTime=performance.now(),this.currentFPS=0}}function W(t,e=1){return t.toFixed(e)}function x(t){return t/(1024*1024)}function X(t,e){return e===0?0:t/e*100}class J{constructor(e=1e3){i(this,"intervalId",null);i(this,"memoryUsage",null);i(this,"updateInterval");i(this,"isSupported",!1);this.updateInterval=e,this.checkSupport()}checkSupport(){const e=performance;this.isSupported="memory"in e&&e.memory!==void 0,this.isSupported||console.warn("[MemoryTracker] performance.memory not available (Chrome-only API)")}start(){if(this.intervalId!==null){console.warn("[MemoryTracker] Already running");return}if(!this.isSupported){this.memoryUsage=null;return}this.updateMemory(),this.intervalId=window.setInterval(()=>{this.updateMemory()},this.updateInterval)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}updateMemory(){if(!this.isSupported)return;const e=performance;if(!e.memory)return;const r=e.memory.usedJSHeapSize,s=e.memory.jsHeapSizeLimit;this.memoryUsage={used:x(r),total:x(s),percentage:X(r,s)}}getMemoryUsage(){return this.memoryUsage}isMemorySupported(){return this.isSupported}}class G{constructor(){i(this,"resolution","N/A");i(this,"videoElement",null);i(this,"metadataListener",null)}start(e){if(!e){this.resolution="N/A";return}this.videoElement=e,e.videoWidth>0&&e.videoHeight>0&&this.updateResolution(),this.metadataListener=()=>{this.updateResolution()},e.addEventListener("loadedmetadata",this.metadataListener)}stop(){this.videoElement&&this.metadataListener&&(this.videoElement.removeEventListener("loadedmetadata",this.metadataListener),this.metadataListener=null),this.videoElement=null,this.resolution="N/A"}updateResolution(){if(!this.videoElement){this.resolution="N/A";return}const e=this.videoElement.videoWidth,r=this.videoElement.videoHeight;e>0&&r>0?this.resolution=`${e}x${r}`:this.resolution="N/A"}getResolution(){return this.videoElement&&this.updateResolution(),this.resolution}}class Q{constructor(e={}){i(this,"options");i(this,"isRunning",!1);i(this,"metrics",{cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"});i(this,"cameraFPSTracker");i(this,"memoryTracker");i(this,"resolutionTracker");i(this,"frameTimes",[]);i(this,"lastEffectiveFPSUpdate",0);this.options={enableMemoryTracking:e.enableMemoryTracking??!0,memoryUpdateInterval:e.memoryUpdateInterval??1e3},this.cameraFPSTracker=new V,this.memoryTracker=new J(this.options.memoryUpdateInterval),this.resolutionTracker=new G}start(e){if(this.isRunning){console.warn("[MetricsCollector] Already running");return}this.isRunning=!0,this.lastEffectiveFPSUpdate=performance.now(),this.options.enableMemoryTracking&&this.memoryTracker.start(),e&&this.resolutionTracker.start(e),this.setupCameraFPSHook(),console.info("[MetricsCollector] Started")}stop(){this.isRunning&&(this.isRunning=!1,this.memoryTracker.stop(),this.resolutionTracker.stop(),this.cameraFPSTracker.reset(),this.cleanupCameraFPSHook(),console.info("[MetricsCollector] Stopped"))}setupCameraFPSHook(){const e=window;e.__xr_debugger_metrics||(e.__xr_debugger_metrics={trackCameraFrame:()=>{this.cameraFPSTracker.trackFrame(),this.metrics.cameraFPS=this.cameraFPSTracker.getFPS()}})}cleanupCameraFPSHook(){const e=window;e.__xr_debugger_metrics&&delete e.__xr_debugger_metrics}getMetrics(){return this.updateMetricsFromTrackers(),{...this.metrics}}updateMetricsFromTrackers(){this.isRunning&&(this.metrics.memory=this.memoryTracker.getMemoryUsage(),this.metrics.resolution=this.resolutionTracker.getResolution(),this.updateEffectiveFPS())}updateRenderTime(e){this.metrics.renderTime=e,this.updateEffectiveFPS()}async updateDetectionTime(e){if(!e||!this.isRunning){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}try{const r=Object.values(e).filter(Boolean);if(r.length===0){this.metrics.detectionTime=0,this.metrics.modelPerformance=[];return}const s=r.map(c=>c&&typeof c.getPerformanceData=="function"?c.getPerformanceData():Promise.resolve({name:"unknown",processingTime:0})),o=await Promise.all(s);this.metrics.modelPerformance=o.map(c=>({name:c.name,processingTime:c.processingTime||0}));const a=o.reduce((c,p)=>c+(p.processingTime||0),0);this.metrics.detectionTime=a,this.updateEffectiveFPS()}catch(r){console.warn("[MetricsCollector] Error updating detection time:",r),this.metrics.detectionTime=0,this.metrics.modelPerformance=[]}}updateEffectiveFPS(){const e=performance.now(),r=this.metrics.detectionTime+this.metrics.renderTime;if(this.frameTimes.push(r),e-this.lastEffectiveFPSUpdate>=1e3){if(this.frameTimes.length>0){const s=this.frameTimes.reduce((o,a)=>o+a,0)/this.frameTimes.length;this.metrics.effectiveFPS=s>0?1e3/s:0}this.frameTimes=[],this.lastEffectiveFPSUpdate=e}}isActive(){return this.isRunning}}const Y=n.lazy(async()=>({default:(await Promise.resolve().then(()=>require("./DebuggerUI-B45_Gb9d.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
|
|
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-S8g25ke9.cjs"),$=require("./index-Da7uycur.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-bnGHSSOb.cjs"))).DebuggerUI})),k=n.createContext(null);function Z({children:t,keyboardShortcut:e="ctrl+shift+d",initialEnabled:r=!1,position:s="top-left"}){const[o,a]=n.useState(r),[c,p]=n.useState(!1),[y,_]=n.useState({cameraFPS:0,detectionTime:0,modelPerformance:[],renderTime:0,effectiveFPS:0,memory:null,resolution:"N/A"}),f=n.useRef(null),u=n.useRef(null),g=n.useRef(!1),{session:b}=$.useXRContext(),T=O.useXRReady();n.useEffect(()=>(f.current||(f.current=new Q,window.__xr_metrics_collector=f.current),()=>{f.current&&f.current.stop(),u.current&&clearInterval(u.current),window.__xr_metrics_collector&&delete window.__xr_metrics_collector}),[]),n.useEffect(()=>{const l=f.current;if(l){if(o&&T){const d=b._getVideoElement();l.start(d),u.current=window.setInterval(async()=>{if(!g.current){g.current=!0;try{const S=Object.fromEntries(b.store.getSnapshot().pipeline);await l.updateDetectionTime(S),_(l.getMetrics())}finally{g.current=!1}}},100)}else l.stop(),u.current&&(clearInterval(u.current),u.current=null),g.current=!1;return()=>{u.current&&(clearInterval(u.current),u.current=null)}}},[o,T,b]),n.useEffect(()=>{const l=d=>{const h=e.toLowerCase().split("+"),D=h.includes("ctrl")||h.includes("control"),I=h.includes("shift"),M=h.includes("alt"),U=h[h.length-1],j=D?d.ctrlKey||d.metaKey:!0,L=I?d.shiftKey:!0,A=M?d.altKey:!0,q=d.key.toLowerCase()===U;j&&L&&A&&q&&(d.preventDefault(),a(N=>!N))};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[e]);const C=n.useCallback(()=>{a(l=>!l)},[]),R=n.useCallback(()=>{a(!0)},[]),w=n.useCallback(()=>{a(!1)},[]),E={state:{enabled:o,collapsed:c,metrics:y},toggle:C,setCollapsed:p,enable:R,disable:w};return m.jsxs(k.Provider,{value:E,children:[t,o&&m.jsx(n.Suspense,{fallback:null,children:m.jsx(Y,{metrics:y,collapsed:c,onCollapse:p,onClose:w,position:s,keyboardShortcut:e})})]})}function ee(){const t=n.useContext(k);if(!t)throw new Error("useDebuggerContext must be used within a DebuggerProvider");return t}function te({onUpdate:t}){const e=n.useRef(0),r=n.useRef(!0);return B.useFrame(()=>{if(r.current)r.current=!1;else{const o=performance.now()-e.current;t(o)}e.current=performance.now()},-1e3),null}function P(){const t=ee();return{metrics:t.state.metrics,enabled:t.state.enabled,collapsed:t.state.collapsed,toggle:t.toggle,setCollapsed:t.setCollapsed,enable:t.enable,disable:t.disable}}function re(){const{enabled:t}=P(),e=r=>{const s=window;s.__xr_metrics_collector&&s.__xr_metrics_collector.updateRenderTime(r)};return t?m.jsx(te,{onUpdate:e}):null}const v=600;function F(){if(typeof window>"u")return;const t=window;return t.__xrCalibrationDebugState||(t.__xrCalibrationDebugState={events:[]}),t.__xrCalibrationDebugState}function se(t,e,r){const s=F();s&&(s.events.push({source:t,label:e,payload:r,ts:performance.now()}),s.events.length>v&&s.events.splice(0,s.events.length-v))}function ie(t=v){const e=F();return e?e.events.slice(Math.max(0,e.events.length-t)):[]}exports.DebuggerOverlay=re;exports.DebuggerProvider=Z;exports.XRDebugView=K;exports.formatNumber=W;exports.readCalibrationDebugEvents=ie;exports.recordCalibrationDebugEvent=se;exports.useDebugger=P;
|
package/dist/internal.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./internal-Dtvo4WYo.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-34pb7djs.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-D4bLzBr6.cjs"),D=require("./index-DqhqBi7O.cjs"),j=require("./selectors-2QvO5RYY.cjs"),f=require("react"),q=require("./getFaceInfo-oQcP40Ha.cjs"),d=require("react/jsx-runtime"),de=require("@react-three/drei"),B=require("./index-UU5ODHGU.cjs"),ee=require("./useFaceResults-B1BSGUAW.cjs"),ue=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),C=require("./contexts-Dv1SA0bS.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 _=require("./index-Da7uycur.cjs"),D=require("./index-ZaDEzDtR.cjs"),j=require("./selectors-S8g25ke9.cjs"),f=require("react"),q=require("./getFaceInfo-QOQ_dc-W.cjs"),d=require("react/jsx-runtime"),de=require("@react-three/drei"),B=require("./index-C9yQVzAh.cjs"),ee=require("./useFaceResults-CCNiH7VZ.cjs"),ue=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),C=require("./contexts-BgWfyxre.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;
|
package/dist/low-level.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { u as se, X as O } from "./index-
|
|
2
|
-
import { u as le } from "./index-
|
|
3
|
-
import { H as dt, a as ut } from "./index-
|
|
4
|
-
import { c as ce } from "./selectors-
|
|
5
|
-
import { u as mt, b as ft, e as pt, a as gt, d as bt } from "./selectors-
|
|
1
|
+
import { u as se, X as O } from "./index-BMeBJ0dV.js";
|
|
2
|
+
import { u as le } from "./index-D1kj6uc-.js";
|
|
3
|
+
import { H as dt, a as ut } from "./index-D1kj6uc-.js";
|
|
4
|
+
import { c as ce } from "./selectors-DLxL8Q66.js";
|
|
5
|
+
import { u as mt, b as ft, e as pt, a as gt, d as bt } from "./selectors-DLxL8Q66.js";
|
|
6
6
|
import { useEffect as M, useState as S, useRef as X, useCallback as de, useLayoutEffect as ue, useMemo as $, Children as he, isValidElement as me } from "react";
|
|
7
|
-
import { c as fe } from "./getFaceInfo-
|
|
8
|
-
import { d as xt, e as vt } from "./getFaceInfo-
|
|
7
|
+
import { c as fe } from "./getFaceInfo-4DhcPZDJ.js";
|
|
8
|
+
import { d as xt, e as vt } from "./getFaceInfo-4DhcPZDJ.js";
|
|
9
9
|
import { jsx as g, jsxs as k, Fragment as W } from "react/jsx-runtime";
|
|
10
10
|
import { PerspectiveCamera as pe } from "@react-three/drei";
|
|
11
|
-
import { S as Ct, g as St, c as Rt, d as It, u as Et } from "./index-
|
|
12
|
-
import { u as ee } from "./useFaceResults-
|
|
11
|
+
import { S as Ct, g as St, c as Rt, d as It, u as Et } from "./index-72Wb15Ca.js";
|
|
12
|
+
import { u as ee } from "./useFaceResults-C1Ppc8rS.js";
|
|
13
13
|
import { h as Ft } from "./hasFullUnitUVBounds-BGvcFsQM.js";
|
|
14
|
-
import { X as ge, a as be, b as we } from "./contexts-
|
|
15
|
-
import { B as zt, M as Xt, h as kt, i as At, T as Lt, c as Vt, j as Dt, k as Bt, g as Wt, e as _t, f as Ht, r as Pt, t as $t, d as qt, u as Ut } from "./contexts-
|
|
14
|
+
import { X as ge, a as be, b as we } from "./contexts-B2_NsTnk.js";
|
|
15
|
+
import { B as zt, M as Xt, h as kt, i as At, T as Lt, c as Vt, j as Dt, k as Bt, g as Wt, e as _t, f as Ht, r as Pt, t as $t, d as qt, u as Ut } from "./contexts-B2_NsTnk.js";
|
|
16
16
|
import * as L from "three";
|
|
17
17
|
const B = ({
|
|
18
18
|
children: e,
|
package/dist/main.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ae=Object.defineProperty;var ie=(t,e,r)=>e in t?ae(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var C=(t,e,r)=>ie(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("./index-D4bLzBr6.cjs"),V=require("./contexts-Dv1SA0bS.cjs"),T=require("./index-DdWBnI7A.cjs"),m=require("react/jsx-runtime"),i=require("react"),P=require("three"),E=require("./renderPasses-CVWt0t8m.cjs"),J=require("@react-three/fiber"),oe=require("./renderLayers-lDtL0_43.cjs"),$=require("./selectors-2QvO5RYY.cjs"),ce=require("@react-three/drei"),I=require("./index-UU5ODHGU.cjs"),U=require("./FaceMeshRenderer-D4PFqsb3.cjs"),Q=require("./drawNormalizedCrop-B-7zU-Xw.cjs"),ue=require("./index-DqhqBi7O.cjs");function le(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const de=le(P),O=(t,e,r,s)=>P.MathUtils.damp(t,e,Math.max(0,r),Math.max(0,s)),me=(t,e,r,s,n=new P.Vector2)=>n.set(O(t.x,e.x,r,s),O(t.y,e.y,r,s)),pe=(t,e,r,s,n=new P.Vector3)=>n.set(O(t.x,e.x,r,s),O(t.y,e.y,r,s),O(t.z,e.z,r,s)),he="rgba(20,40,110,0.88)",Ee=24,fe=512;function Se({color:t=he,borderColor:e,borderWidth:r=0,borderRadius:s=Ee,resolution:n=fe,aspect:c=1,opacity:o=1,name:u,overlay:a=!0,position:l,rotation:M,scale:p,visible:h}){const S=i.useRef(null),d=i.useRef(null),_=i.useMemo(()=>Te({width:Math.round(n*Math.max(c,.05)),height:Math.round(n),color:t,borderColor:e,borderWidth:r,borderRadius:s}),[t,e,r,s,n,c]);i.useEffect(()=>()=>{_.dispose()},[_]);const y=i.useRef(null),R=i.useRef(o);return R.current!==o&&(R.current=o,y.current=null,d.current&&(d.current.opacity=o)),i.useEffect(()=>{const L=S.current;if(L)return L.userData.setOpacity=D=>{y.current=D,d.current&&(d.current.opacity=D)},()=>{delete L.userData.setOpacity}},[]),m.jsxs("mesh",{ref:S,name:u,position:l,rotation:M,scale:p,visible:h,children:[m.jsx("planeGeometry",{args:[1,1]}),m.jsx("meshBasicMaterial",{ref:d,map:_,transparent:!0,opacity:o,depthTest:!a,depthWrite:!a})]})}function Te(t){const{width:e,height:r,color:s,borderColor:n,borderWidth:c,borderRadius:o}=t,u=typeof OffscreenCanvas<"u"?new OffscreenCanvas(e,r):(()=>{const p=document.createElement("canvas");return p.width=e,p.height=r,p})(),a=u.getContext("2d");a.clearRect(0,0,e,r);const l=Math.min(o,Math.min(e,r)/2);a.beginPath(),a.moveTo(l,0),a.lineTo(e-l,0),a.quadraticCurveTo(e,0,e,l),a.lineTo(e,r-l),a.quadraticCurveTo(e,r,e-l,r),a.lineTo(l,r),a.quadraticCurveTo(0,r,0,r-l),a.lineTo(0,l),a.quadraticCurveTo(0,0,l,0),a.closePath(),a.fillStyle=s,a.fill(),n&&c>0&&(a.lineWidth=c,a.strokeStyle=n,a.stroke());const M=new de.CanvasTexture(u);return M.needsUpdate=!0,M}const Re=({segmentationMask:t,segmentation:e,invert:r=!1,customBackground:s,renderOrder:n=oe.RENDER_LAYERS.BACKGROUND})=>{const{camera:c,size:o}=J.useThree(),u=$.useXRCameraTexture(),a=$.useXRModelNode(j.XRModel.BACKGROUND_SEGMENTATION),l=e?a==null?void 0:a.backgroundSegmentationMask:void 0,M=i.useRef(!1);i.useEffect(()=>{if(!e){M.current=!1;return}a===null&&!M.current&&(console.warn(`[VideoBackground] segmentation="${e}" set but no matching <Segmentation> component is mounted; rendering unmasked.`),M.current=!0)},[e,a]);const p=e?l:t,h=i.useMemo(()=>{if(!c.isPerspectiveCamera)return[10,10];const S=c,y=(S.position.z||5)- -1,R=S.fov*Math.PI/180,L=2*Math.tan(R/2)*y;return[L*(o.width/o.height),L]},[c,o]);return u?m.jsx("group",{position:[0,0,-1],children:r?m.jsxs(m.Fragment,{children:[m.jsxs("mesh",{position:[0,0,-.01],renderOrder:n-1,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:u,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide})]}),s&&p&&m.jsxs("mesh",{position:[0,0,0],renderOrder:n,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:typeof s=="string"?void 0:s,color:typeof s=="string"?s:void 0,alphaMap:p,transparent:!1,alphaTest:.5,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide},"inverted-mask")]})]}):m.jsxs(m.Fragment,{children:[s&&p&&m.jsxs("mesh",{position:[0,0,-.01],renderOrder:n-1,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:typeof s=="string"?void 0:s,color:typeof s=="string"?s:void 0,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide})]}),m.jsxs("mesh",{position:[0,0,0],renderOrder:n,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:u,alphaMap:p,transparent:!1,alphaTest:p?.5:void 0,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide},p?"with-mask":"no-mask")]})]})}):null},W=9,H=16,Me=({children:t})=>{const[e,r]=i.useState({width:0,height:0});return i.useEffect(()=>{const s=()=>{const n=document.documentElement.clientWidth,c=document.documentElement.clientHeight,o=n/c,u=W/H;let a,l;o>u?(l=c,a=l*W/H):(a=n,l=a*H/W),r({width:a,height:l})};return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]),m.jsx("div",{style:{width:"100vw",height:`${window.innerHeight}px`,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#0d0d0d"},children:m.jsx("div",{style:{width:e.width,height:e.height,position:"relative"},children:t})})},_e=({size:t=.25,...e})=>m.jsx("axesHelper",{args:[t],...e}),Ae={left:-1,right:1,top:1,bottom:-1},ge=(t,e,r)=>{const s=t%e,n=Math.floor(t/e);return{x:s/e,y:(r-1-n)/r}},xe=({sheet:t,contentAspect:e,renderOrder:r,name:s})=>{const n=ce.useTexture(t.url),c=i.useRef(0),o=i.useRef(-1),u=I.useScreenRectAspect(),[a,l]=e!=null?T.computeContainScale(u,e):[1,1];return J.useFrame((M,p)=>{n.wrapS=P.RepeatWrapping,n.wrapT=P.RepeatWrapping,n.magFilter=P.LinearFilter,n.minFilter=P.LinearFilter,n.generateMipmaps=!1,n.repeat.set(1/t.cols,1/t.rows),c.current+=p;const h=Math.floor(c.current*t.fps)%t.frames;if(h===o.current)return;o.current=h;const{x:S,y:d}=ge(h,t.cols,t.rows);n.offset.set(S,d)}),m.jsxs("mesh",{name:s,renderOrder:r,scale:[a,l,1],children:[m.jsx("planeGeometry",{args:[1,1]}),m.jsx("meshBasicMaterial",{map:n,transparent:!0,toneMapped:!1,depthWrite:!1})]})},ye=({sheet:t,anchors:e=Ae,contentAspect:r,renderOrder:s=10,name:n="spriteAnimation"})=>m.jsx(i.Suspense,{fallback:null,children:m.jsx(V.ScreenTransform,{anchors:e,children:m.jsx(xe,{sheet:t,contentAspect:r,renderOrder:s,name:n})})}),F=t=>{switch(t){case"start":return"starting";case"started":case"resume":return"recording";case"pause":return"paused";case"stop":return"stopping";case"complete":return"completed";case"fail":return"error";case"clear":return"idle"}},Ce=["video/mp4","video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Pe(t={}){const{audio:e=!1,mimeType:r,bitsPerSecond:s,onData:n,onStop:c,onRecordingStart:o,onRecordingPause:u,onRecordingResume:a,onRecordingStop:l,onRecordingComplete:M,onError:p,passThroughStream:h}=t,S=i.useRef(null),d=i.useRef(null),_=i.useRef([]),[y,R]=i.useState("idle"),[L,D]=i.useState(null),[X,g]=i.useState(null),b=i.useCallback(()=>{var x;const f=[r,...Ce].filter(Boolean);for(const A of f)if((x=MediaRecorder.isTypeSupported)!=null&&x.call(MediaRecorder,A))return A},[r]),G=i.useCallback(async f=>{const x=new MediaStream;if(f.getTracks().forEach(A=>x.addTrack(A)),e){let A;if(e instanceof MediaStream)A=e;else{const w=typeof e=="object"?{audio:e}:{audio:!0,video:!1};A=await navigator.mediaDevices.getUserMedia(w)}A.getAudioTracks().forEach(w=>x.addTrack(w))}if(!x.getTracks().length)throw new Error("No tracks available in combined stream.");return d.current=x,x},[e]),te=i.useCallback(async(f,x)=>{R(F("start")),g(null),D(null);try{let A;if(h)A=h,d.current=A;else{if(!f)throw new Error("start(stream) requires a MediaStream.");A=await G(f)}const w=b(),q={};w&&(q.mimeType=w),s&&(q.bitsPerSecond=s);const k=new MediaRecorder(A,q);k.ondataavailable=v=>{var Y;((Y=v.data)==null?void 0:Y.size)>0&&(_.current.push(v.data),n==null||n(v.data))},k.onstop=()=>{const v=new Blob(_.current,{type:w??"video/webm"});D(v),c==null||c(v),M==null||M(v),_.current=[],R(F("complete"))},S.current=k,k.start(x),R(F("started")),o==null||o()}catch(A){const w=A instanceof Error?A:new Error(String(A));console.error("start(stream) failed",w),g(w),R(F("fail")),p==null||p(w)}},[G,b,s,n,c,M,o,p,h]),re=i.useCallback(()=>{const f=S.current;!f||f.state==="inactive"||(R(F("stop")),f.stop(),l==null||l())},[l]),se=i.useCallback(()=>{const f=S.current;(f==null?void 0:f.state)==="recording"&&(f.pause(),R(F("pause")),u==null||u())},[u]),ne=i.useCallback(()=>{const f=S.current;(f==null?void 0:f.state)==="paused"&&(f.resume(),R(F("resume")),a==null||a())},[a]),B=i.useCallback(()=>{var f;try{S.current&&(S.current.onstop=null,S.current.state!=="inactive"&&S.current.stop()),S.current=null,(f=d.current)==null||f.getTracks().forEach(x=>x.stop()),d.current=null,D(null),R(F("clear")),_.current=[],g(null)}catch(x){console.error("clear failed",x)}},[]);return i.useEffect(()=>()=>B(),[]),{status:y,start:te,stop:re,pause:se,resume:ne,clear:B,isRecording:y==="recording"||y==="paused",isPaused:y==="paused",recordedBlob:L,error:X,getActiveStream:()=>d.current}}const Ne=async(t,e={})=>{var r,s,n;(r=e.onCaptureStart)==null||r.call(e),await Promise.resolve();try{const c=t();return(s=e.onCaptureComplete)==null||s.call(e,c),c}catch(c){const o=c instanceof Error?c:new Error(String(c));throw(n=e.onError)==null||n.call(e,o),o}},Le=(t={})=>{const{session:e}=j.useXRContext(),{captureFrame:r=e.captureFrame,onCaptureStart:s,onCaptureComplete:n,onError:c}=t,[o,u]=i.useState("idle"),[a,l]=i.useState(null),[M,p]=i.useState(null),h=i.useCallback(async()=>{u("capturing"),l(null),p(null);try{const d=await Ne(r,{onCaptureStart:s,onCaptureComplete:n,onError:c});return l(d),u("completed"),d}catch(d){const _=d instanceof Error?d:new Error(String(d));return p(_),u("error"),null}},[r,s,n,c]),S=i.useCallback(()=>{u("idle"),l(null),p(null)},[]);return{status:o,capturePhoto:h,clear:S,dataUrl:a,error:M}},we=(t,e)=>{const r=t.split(","),s=r[0].match(/:(.*?);/),n=s?s[1]:"application/octet-stream",c=atob(r[r.length-1]);let o=c.length;const u=new Uint8Array(o);for(;o--;)u[o]=c.charCodeAt(o);return new File([u],e,{type:n})},De=4,be=50,Fe=5e3,z=t=>Math.min(1,Math.max(0,t)),Z=t=>new Promise(e=>{if(t.readyState>=4){e();return}let r=!1;const s=()=>{r||(r=!0,e())};t.addEventListener("canplaythrough",s,{once:!0}),t.addEventListener("error",s,{once:!0}),setTimeout(s,Fe)}),K=(t,e)=>{const r=document.createElement("audio");return r.src=t,r.loop=e,r.preload="auto",r.setAttribute("playsinline",""),r.setAttribute("webkit-playsinline",""),r.load(),r},Ue=t=>{t.muted=!0,t.play().then(()=>{t.pause(),t.currentTime=0,t.muted=!1}).catch(()=>{t.muted=!1})};class ee{constructor(e={}){C(this,"sfxPoolSize");C(this,"coalesceMs");C(this,"muted",!0);C(this,"listeners",new Set);C(this,"music",null);C(this,"musicUrl",null);C(this,"musicReady",null);C(this,"musicWanted",null);C(this,"pools",new Map);C(this,"lastPlayed",new Map);C(this,"ready",new Map);this.sfxPoolSize=e.sfxPoolSize??De,this.coalesceMs=e.coalesceMs??be}prefetchMusic(e,r=.4){const s=z(r);if(this.musicWanted={url:e,volume:s},this.musicUrl===e&&this.musicReady)return this.music&&(this.music.volume=s),this.musicReady;this.music&&(this.music.pause(),this.music.currentTime=0,this.music.removeAttribute("src"),this.music.load()),this.music=K(e,!0),this.musicUrl=e,this.music.volume=s;const n=Z(this.music);return this.musicReady=n,n}registerSound(e,r=1){const s=this.ready.get(e);if(s)return s;const n=z(r),c=[];for(let u=0;u<this.sfxPoolSize;u+=1){const a=K(e,!1);a.volume=n,a.addEventListener("ended",()=>{a.currentTime=0}),c.push(a)}this.pools.set(e,{els:c,next:0,volume:n});const o=Z(c[0]);return this.ready.set(e,o),o}onMuteChange(e){return this.listeners.add(e),e(this.muted),()=>this.listeners.delete(e)}isMuted(){return this.muted}setMuted(e){e!==this.muted&&(this.muted=e,this.muted||this.pools.forEach(r=>r.els.forEach(Ue)),this.applyMusic(),this.listeners.forEach(r=>r(this.muted)))}toggleMuted(){this.setMuted(!this.muted)}playOneShot(e,r){if(this.muted)return;const s=this.pools.get(e);if(!s)return;const n=performance.now();if(n-(this.lastPlayed.get(e)??-1/0)<this.coalesceMs)return;this.lastPlayed.set(e,n);const c=s.els.length;let o;for(let u=0;u<c;u+=1){const a=s.els[(s.next+u)%c];if(a.paused){o=a,s.next=(s.next+u+1)%c;break}}o||(o=s.els[s.next],s.next=(s.next+1)%c),o.muted=!1,o.volume=z(r??s.volume),o.currentTime!==0&&(o.currentTime=0),o.play().catch(()=>{})}startMusic(e,r=.4){const s=z(r);this.musicUrl!==e&&this.prefetchMusic(e,s),this.musicWanted={url:e,volume:s},this.applyMusic()}stopMusic(){this.musicWanted=null,this.music&&(this.music.pause(),this.music.currentTime=0)}applyMusic(){!this.music||!this.musicWanted||(this.music.volume=this.musicWanted.volume,!this.muted&&this.music.paused&&this.music.play().catch(()=>{}),this.muted&&!this.music.paused&&this.music.pause())}}const ve=(t,e,r)=>t==="infinite"||t==="loop"&&e<Math.max(1,Math.floor(r))?"replay":"ended",Oe=(t,e,r)=>t&&e!==r,Ie=t=>Math.min(100,Math.max(0,t))/100,Ge=i.forwardRef(function({src:e,playMode:r="once",loopCount:s=1,autoplay:n=!1,muted:c=!1,volume:o=100,preload:u="auto",onReady:a,onPlay:l,onPause:M,onEnded:p,onError:h},S){const d=i.useRef(null),_=i.useRef(0),y=i.useRef(null),R=i.useCallback(async()=>{const g=d.current;if(g)try{await g.play()}catch(b){const G=b instanceof Error?b:new Error(String(b));throw h==null||h(G),G}},[h]),L=i.useCallback(()=>{var g;return(g=d.current)==null?void 0:g.pause()},[]),D=i.useCallback(()=>{const g=d.current;g&&(g.pause(),g.currentTime=0,_.current=0)},[]);i.useImperativeHandle(S,()=>({play:R,pause:L,stop:D,get current(){return d.current}}),[L,R,D]),i.useEffect(()=>{_.current=0,y.current=null},[e]),i.useEffect(()=>{d.current&&(d.current.volume=Ie(o))},[o]),i.useEffect(()=>{Oe(n,y.current,e)&&(y.current=e,R().catch(()=>{}))},[n,e]);const X=i.useCallback(()=>{_.current+=1;const g=Math.max(1,Math.floor(s));if(ve(r,_.current,g)==="replay"){const b=d.current;b&&(b.currentTime=0,R().catch(()=>{}));return}_.current=0,p==null||p()},[s,p,R,r]);return m.jsx("audio",{ref:d,src:e,preload:u,autoPlay:!1,muted:c,loop:!1,playsInline:!0,style:{display:"none"},onCanPlayThrough:a,onPlay:l,onPause:M,onEnded:X,onError:()=>h==null?void 0:h(new Error(`Unable to load audio: ${e}`))})}),N=new ee,je=(t,e)=>N.prefetchMusic(t,e),ke=(t,e)=>N.registerSound(t,e),ze=(t,e)=>N.startMusic(t,e),Xe=()=>N.stopMusic(),qe=(t,e)=>N.playOneShot(t,e),We=t=>N.setMuted(t),He=()=>N.toggleMuted(),Ve=()=>N.isMuted(),Be=t=>N.onMuteChange(t),Ye=()=>{const[t,e]=i.useState(N.isMuted());return i.useEffect(()=>N.onMuteChange(e),[]),t};exports.XRMediaSource=j.XRMediaSource;exports.XRModel=j.XRModel;exports.XRProvider=j.XRProvider;exports.ScreenTransform=V.ScreenTransform;exports.XRScene=V.XRScene;exports.LightObject=T.LightObject;exports.LookAt=T.LookAt;exports.RenderGroupLayer=T.RenderGroupLayer;exports.SceneObjectRenderer=T.SceneObjectRenderer;exports.ScreenImage=T.ScreenImage;exports.ScreenSpaceUI=T.ScreenSpaceUI;exports.ScreenText=T.ScreenText;exports.SequentialRenderPasses=T.SequentialRenderPasses;exports.TextLabel=T.TextLabel;exports.clientToScreenPixels=T.clientToScreenPixels;exports.computeContainScale=T.computeContainScale;exports.mediaToScreenPixels=T.mediaToScreenPixels;exports.normalizedToScreenPixels=T.normalizedToScreenPixels;exports.screenPixelsToClient=T.screenPixelsToClient;exports.screenPixelsToMedia=T.screenPixelsToMedia;exports.screenPixelsToNormalized=T.screenPixelsToNormalized;exports.screenPixelsToUnits=T.screenPixelsToUnits;exports.screenPointToRay=T.screenPointToRay;exports.screenUnitsToPixels=T.screenUnitsToPixels;exports.worldToScreenPixels=T.worldToScreenPixels;exports.DEFAULT_PIXEL_SNAP_INCREMENT=E.DEFAULT_PIXEL_SNAP_INCREMENT;exports.DEFAULT_REFERENCE_PIXELS_PER_UNIT=E.DEFAULT_REFERENCE_PIXELS_PER_UNIT;exports.DEFAULT_SCREEN_GLASS=E.DEFAULT_SCREEN_GLASS;exports.DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS=E.DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS;exports.DEFAULT_SCREEN_IMAGE_SETTINGS=E.DEFAULT_SCREEN_IMAGE_SETTINGS;exports.DEFAULT_SCREEN_SHAPE_SETTINGS=E.DEFAULT_SCREEN_SHAPE_SETTINGS;exports.DEFAULT_SCREEN_TEXT_SCENE_SETTINGS=E.DEFAULT_SCREEN_TEXT_SCENE_SETTINGS;exports.DEFAULT_SCREEN_TEXT_SHADOW_LAYER=E.DEFAULT_SCREEN_TEXT_SHADOW_LAYER;exports.DEFAULT_SCREEN_TRANSFORM_2D=E.DEFAULT_SCREEN_TRANSFORM_2D;exports.DEFAULT_SCREEN_TRANSFORM_ROOT=E.DEFAULT_SCREEN_TRANSFORM_ROOT;exports.EXTERNAL_BACKGROUND_RENDER_LAYER=E.EXTERNAL_BACKGROUND_RENDER_LAYER;exports.MAX_RENDER_GROUP_PASSES=E.MAX_RENDER_GROUP_PASSES;exports.PinToMesh=E.PinToMesh;exports.ScreenGlassMaterial=E.ScreenGlassMaterial;exports.ScreenShape=E.ScreenShape;exports.getRenderGroupLayer=E.getRenderGroupLayer;exports.mapScreenImageSettingsToProps=E.mapScreenImageSettingsToProps;exports.mapScreenTextInnerShadowToProps=E.mapScreenTextInnerShadowToProps;exports.mapScreenTextSettingsToProps=E.mapScreenTextSettingsToProps;exports.mergeScreenShapeSettings=E.mergeScreenShapeSettings;exports.mergeScreenTransform2D=E.mergeScreenTransform2D;exports.normalizeScreenGlass=E.normalizeScreenGlass;exports.renderSequentialPasses=E.renderSequentialPasses;exports.resolveScreenTransform2D=E.resolveScreenTransform2D;exports.DEFAULT_MESH_RENDERER=I.DEFAULT_MESH_RENDERER;exports.DEFAULT_MESH_RENDERER_RENDER_STATE=I.DEFAULT_MESH_RENDERER_RENDER_STATE;exports.MeshRenderer=I.MeshRenderer;exports.normalizeMeshRendererRenderState=I.normalizeMeshRendererRenderState;exports.useScreenRectAspect=I.useScreenRectAspect;exports.DEFAULT_MATERIAL_FILL=U.DEFAULT_MATERIAL_FILL;exports.DEFAULT_SCREEN_GRADIENT=U.DEFAULT_SCREEN_GRADIENT;exports.DEFAULT_TRANSFORM_3D=U.DEFAULT_TRANSFORM_3D;exports.MaterialFill=U.MaterialFill;exports.ScreenGradientMaterial=U.ScreenGradientMaterial;exports.Transform3D=U.Transform3D;exports.createTwoStopGradient=U.createTwoStopGradient;exports.normalizeScreenGradient=U.normalizeScreenGradient;exports.drawNormalizedCrop=Q.drawNormalizedCrop;exports.resolveNormalizedCrop=Q.resolveNormalizedCrop;exports.MeshMaterial=ue.MeshMaterial;exports.AspectRatioContainer=Me;exports.AudioEngine=ee;exports.AudioPlayer=Ge;exports.Axes=_e;exports.Panel=Se;exports.SpriteAnimation=ye;exports.VideoBackground=Re;exports.audio=N;exports.dataURLtoFile=we;exports.isMuted=Ve;exports.onMuteChange=Be;exports.playOneShot=qe;exports.prefetchMusic=je;exports.registerSound=ke;exports.setMuted=We;exports.smoothNumber=O;exports.smoothVector2=me;exports.smoothVector3=pe;exports.startMusic=ze;exports.stopMusic=Xe;exports.toggleMuted=He;exports.useFrameCapture=Le;exports.useMediaRecorder=Pe;exports.useMuted=Ye;
|
|
1
|
+
"use strict";var ae=Object.defineProperty;var ie=(t,e,r)=>e in t?ae(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var C=(t,e,r)=>ie(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("./index-Da7uycur.cjs"),V=require("./contexts-BgWfyxre.cjs"),T=require("./index-CNGzE49z.cjs"),m=require("react/jsx-runtime"),i=require("react"),P=require("three"),E=require("./renderPasses-KUJUSevp.cjs"),J=require("@react-three/fiber"),oe=require("./renderLayers-lDtL0_43.cjs"),$=require("./selectors-S8g25ke9.cjs"),ce=require("@react-three/drei"),I=require("./index-C9yQVzAh.cjs"),U=require("./FaceMeshRenderer-BSOq1OnG.cjs"),Q=require("./drawNormalizedCrop-B-7zU-Xw.cjs"),ue=require("./index-ZaDEzDtR.cjs");function le(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,s.get?s:{enumerable:!0,get:()=>t[r]})}}return e.default=t,Object.freeze(e)}const de=le(P),O=(t,e,r,s)=>P.MathUtils.damp(t,e,Math.max(0,r),Math.max(0,s)),me=(t,e,r,s,n=new P.Vector2)=>n.set(O(t.x,e.x,r,s),O(t.y,e.y,r,s)),pe=(t,e,r,s,n=new P.Vector3)=>n.set(O(t.x,e.x,r,s),O(t.y,e.y,r,s),O(t.z,e.z,r,s)),he="rgba(20,40,110,0.88)",Ee=24,fe=512;function Se({color:t=he,borderColor:e,borderWidth:r=0,borderRadius:s=Ee,resolution:n=fe,aspect:c=1,opacity:o=1,name:u,overlay:a=!0,position:l,rotation:M,scale:p,visible:h}){const S=i.useRef(null),d=i.useRef(null),_=i.useMemo(()=>Te({width:Math.round(n*Math.max(c,.05)),height:Math.round(n),color:t,borderColor:e,borderWidth:r,borderRadius:s}),[t,e,r,s,n,c]);i.useEffect(()=>()=>{_.dispose()},[_]);const y=i.useRef(null),R=i.useRef(o);return R.current!==o&&(R.current=o,y.current=null,d.current&&(d.current.opacity=o)),i.useEffect(()=>{const L=S.current;if(L)return L.userData.setOpacity=D=>{y.current=D,d.current&&(d.current.opacity=D)},()=>{delete L.userData.setOpacity}},[]),m.jsxs("mesh",{ref:S,name:u,position:l,rotation:M,scale:p,visible:h,children:[m.jsx("planeGeometry",{args:[1,1]}),m.jsx("meshBasicMaterial",{ref:d,map:_,transparent:!0,opacity:o,depthTest:!a,depthWrite:!a})]})}function Te(t){const{width:e,height:r,color:s,borderColor:n,borderWidth:c,borderRadius:o}=t,u=typeof OffscreenCanvas<"u"?new OffscreenCanvas(e,r):(()=>{const p=document.createElement("canvas");return p.width=e,p.height=r,p})(),a=u.getContext("2d");a.clearRect(0,0,e,r);const l=Math.min(o,Math.min(e,r)/2);a.beginPath(),a.moveTo(l,0),a.lineTo(e-l,0),a.quadraticCurveTo(e,0,e,l),a.lineTo(e,r-l),a.quadraticCurveTo(e,r,e-l,r),a.lineTo(l,r),a.quadraticCurveTo(0,r,0,r-l),a.lineTo(0,l),a.quadraticCurveTo(0,0,l,0),a.closePath(),a.fillStyle=s,a.fill(),n&&c>0&&(a.lineWidth=c,a.strokeStyle=n,a.stroke());const M=new de.CanvasTexture(u);return M.needsUpdate=!0,M}const Re=({segmentationMask:t,segmentation:e,invert:r=!1,customBackground:s,renderOrder:n=oe.RENDER_LAYERS.BACKGROUND})=>{const{camera:c,size:o}=J.useThree(),u=$.useXRCameraTexture(),a=$.useXRModelNode(j.XRModel.BACKGROUND_SEGMENTATION),l=e?a==null?void 0:a.backgroundSegmentationMask:void 0,M=i.useRef(!1);i.useEffect(()=>{if(!e){M.current=!1;return}a===null&&!M.current&&(console.warn(`[VideoBackground] segmentation="${e}" set but no matching <Segmentation> component is mounted; rendering unmasked.`),M.current=!0)},[e,a]);const p=e?l:t,h=i.useMemo(()=>{if(!c.isPerspectiveCamera)return[10,10];const S=c,y=(S.position.z||5)- -1,R=S.fov*Math.PI/180,L=2*Math.tan(R/2)*y;return[L*(o.width/o.height),L]},[c,o]);return u?m.jsx("group",{position:[0,0,-1],children:r?m.jsxs(m.Fragment,{children:[m.jsxs("mesh",{position:[0,0,-.01],renderOrder:n-1,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:u,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide})]}),s&&p&&m.jsxs("mesh",{position:[0,0,0],renderOrder:n,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:typeof s=="string"?void 0:s,color:typeof s=="string"?s:void 0,alphaMap:p,transparent:!1,alphaTest:.5,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide},"inverted-mask")]})]}):m.jsxs(m.Fragment,{children:[s&&p&&m.jsxs("mesh",{position:[0,0,-.01],renderOrder:n-1,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:typeof s=="string"?void 0:s,color:typeof s=="string"?s:void 0,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide})]}),m.jsxs("mesh",{position:[0,0,0],renderOrder:n,children:[m.jsx("planeGeometry",{args:h}),m.jsx("meshBasicMaterial",{map:u,alphaMap:p,transparent:!1,alphaTest:p?.5:void 0,depthTest:!1,depthWrite:!1,toneMapped:!1,side:P.DoubleSide},p?"with-mask":"no-mask")]})]})}):null},W=9,H=16,Me=({children:t})=>{const[e,r]=i.useState({width:0,height:0});return i.useEffect(()=>{const s=()=>{const n=document.documentElement.clientWidth,c=document.documentElement.clientHeight,o=n/c,u=W/H;let a,l;o>u?(l=c,a=l*W/H):(a=n,l=a*H/W),r({width:a,height:l})};return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]),m.jsx("div",{style:{width:"100vw",height:`${window.innerHeight}px`,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#0d0d0d"},children:m.jsx("div",{style:{width:e.width,height:e.height,position:"relative"},children:t})})},_e=({size:t=.25,...e})=>m.jsx("axesHelper",{args:[t],...e}),Ae={left:-1,right:1,top:1,bottom:-1},ge=(t,e,r)=>{const s=t%e,n=Math.floor(t/e);return{x:s/e,y:(r-1-n)/r}},xe=({sheet:t,contentAspect:e,renderOrder:r,name:s})=>{const n=ce.useTexture(t.url),c=i.useRef(0),o=i.useRef(-1),u=I.useScreenRectAspect(),[a,l]=e!=null?T.computeContainScale(u,e):[1,1];return J.useFrame((M,p)=>{n.wrapS=P.RepeatWrapping,n.wrapT=P.RepeatWrapping,n.magFilter=P.LinearFilter,n.minFilter=P.LinearFilter,n.generateMipmaps=!1,n.repeat.set(1/t.cols,1/t.rows),c.current+=p;const h=Math.floor(c.current*t.fps)%t.frames;if(h===o.current)return;o.current=h;const{x:S,y:d}=ge(h,t.cols,t.rows);n.offset.set(S,d)}),m.jsxs("mesh",{name:s,renderOrder:r,scale:[a,l,1],children:[m.jsx("planeGeometry",{args:[1,1]}),m.jsx("meshBasicMaterial",{map:n,transparent:!0,toneMapped:!1,depthWrite:!1})]})},ye=({sheet:t,anchors:e=Ae,contentAspect:r,renderOrder:s=10,name:n="spriteAnimation"})=>m.jsx(i.Suspense,{fallback:null,children:m.jsx(V.ScreenTransform,{anchors:e,children:m.jsx(xe,{sheet:t,contentAspect:r,renderOrder:s,name:n})})}),F=t=>{switch(t){case"start":return"starting";case"started":case"resume":return"recording";case"pause":return"paused";case"stop":return"stopping";case"complete":return"completed";case"fail":return"error";case"clear":return"idle"}},Ce=["video/mp4","video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Pe(t={}){const{audio:e=!1,mimeType:r,bitsPerSecond:s,onData:n,onStop:c,onRecordingStart:o,onRecordingPause:u,onRecordingResume:a,onRecordingStop:l,onRecordingComplete:M,onError:p,passThroughStream:h}=t,S=i.useRef(null),d=i.useRef(null),_=i.useRef([]),[y,R]=i.useState("idle"),[L,D]=i.useState(null),[X,g]=i.useState(null),b=i.useCallback(()=>{var x;const f=[r,...Ce].filter(Boolean);for(const A of f)if((x=MediaRecorder.isTypeSupported)!=null&&x.call(MediaRecorder,A))return A},[r]),G=i.useCallback(async f=>{const x=new MediaStream;if(f.getTracks().forEach(A=>x.addTrack(A)),e){let A;if(e instanceof MediaStream)A=e;else{const w=typeof e=="object"?{audio:e}:{audio:!0,video:!1};A=await navigator.mediaDevices.getUserMedia(w)}A.getAudioTracks().forEach(w=>x.addTrack(w))}if(!x.getTracks().length)throw new Error("No tracks available in combined stream.");return d.current=x,x},[e]),te=i.useCallback(async(f,x)=>{R(F("start")),g(null),D(null);try{let A;if(h)A=h,d.current=A;else{if(!f)throw new Error("start(stream) requires a MediaStream.");A=await G(f)}const w=b(),q={};w&&(q.mimeType=w),s&&(q.bitsPerSecond=s);const k=new MediaRecorder(A,q);k.ondataavailable=v=>{var Y;((Y=v.data)==null?void 0:Y.size)>0&&(_.current.push(v.data),n==null||n(v.data))},k.onstop=()=>{const v=new Blob(_.current,{type:w??"video/webm"});D(v),c==null||c(v),M==null||M(v),_.current=[],R(F("complete"))},S.current=k,k.start(x),R(F("started")),o==null||o()}catch(A){const w=A instanceof Error?A:new Error(String(A));console.error("start(stream) failed",w),g(w),R(F("fail")),p==null||p(w)}},[G,b,s,n,c,M,o,p,h]),re=i.useCallback(()=>{const f=S.current;!f||f.state==="inactive"||(R(F("stop")),f.stop(),l==null||l())},[l]),se=i.useCallback(()=>{const f=S.current;(f==null?void 0:f.state)==="recording"&&(f.pause(),R(F("pause")),u==null||u())},[u]),ne=i.useCallback(()=>{const f=S.current;(f==null?void 0:f.state)==="paused"&&(f.resume(),R(F("resume")),a==null||a())},[a]),B=i.useCallback(()=>{var f;try{S.current&&(S.current.onstop=null,S.current.state!=="inactive"&&S.current.stop()),S.current=null,(f=d.current)==null||f.getTracks().forEach(x=>x.stop()),d.current=null,D(null),R(F("clear")),_.current=[],g(null)}catch(x){console.error("clear failed",x)}},[]);return i.useEffect(()=>()=>B(),[]),{status:y,start:te,stop:re,pause:se,resume:ne,clear:B,isRecording:y==="recording"||y==="paused",isPaused:y==="paused",recordedBlob:L,error:X,getActiveStream:()=>d.current}}const Ne=async(t,e={})=>{var r,s,n;(r=e.onCaptureStart)==null||r.call(e),await Promise.resolve();try{const c=t();return(s=e.onCaptureComplete)==null||s.call(e,c),c}catch(c){const o=c instanceof Error?c:new Error(String(c));throw(n=e.onError)==null||n.call(e,o),o}},Le=(t={})=>{const{session:e}=j.useXRContext(),{captureFrame:r=e.captureFrame,onCaptureStart:s,onCaptureComplete:n,onError:c}=t,[o,u]=i.useState("idle"),[a,l]=i.useState(null),[M,p]=i.useState(null),h=i.useCallback(async()=>{u("capturing"),l(null),p(null);try{const d=await Ne(r,{onCaptureStart:s,onCaptureComplete:n,onError:c});return l(d),u("completed"),d}catch(d){const _=d instanceof Error?d:new Error(String(d));return p(_),u("error"),null}},[r,s,n,c]),S=i.useCallback(()=>{u("idle"),l(null),p(null)},[]);return{status:o,capturePhoto:h,clear:S,dataUrl:a,error:M}},we=(t,e)=>{const r=t.split(","),s=r[0].match(/:(.*?);/),n=s?s[1]:"application/octet-stream",c=atob(r[r.length-1]);let o=c.length;const u=new Uint8Array(o);for(;o--;)u[o]=c.charCodeAt(o);return new File([u],e,{type:n})},De=4,be=50,Fe=5e3,z=t=>Math.min(1,Math.max(0,t)),Z=t=>new Promise(e=>{if(t.readyState>=4){e();return}let r=!1;const s=()=>{r||(r=!0,e())};t.addEventListener("canplaythrough",s,{once:!0}),t.addEventListener("error",s,{once:!0}),setTimeout(s,Fe)}),K=(t,e)=>{const r=document.createElement("audio");return r.src=t,r.loop=e,r.preload="auto",r.setAttribute("playsinline",""),r.setAttribute("webkit-playsinline",""),r.load(),r},Ue=t=>{t.muted=!0,t.play().then(()=>{t.pause(),t.currentTime=0,t.muted=!1}).catch(()=>{t.muted=!1})};class ee{constructor(e={}){C(this,"sfxPoolSize");C(this,"coalesceMs");C(this,"muted",!0);C(this,"listeners",new Set);C(this,"music",null);C(this,"musicUrl",null);C(this,"musicReady",null);C(this,"musicWanted",null);C(this,"pools",new Map);C(this,"lastPlayed",new Map);C(this,"ready",new Map);this.sfxPoolSize=e.sfxPoolSize??De,this.coalesceMs=e.coalesceMs??be}prefetchMusic(e,r=.4){const s=z(r);if(this.musicWanted={url:e,volume:s},this.musicUrl===e&&this.musicReady)return this.music&&(this.music.volume=s),this.musicReady;this.music&&(this.music.pause(),this.music.currentTime=0,this.music.removeAttribute("src"),this.music.load()),this.music=K(e,!0),this.musicUrl=e,this.music.volume=s;const n=Z(this.music);return this.musicReady=n,n}registerSound(e,r=1){const s=this.ready.get(e);if(s)return s;const n=z(r),c=[];for(let u=0;u<this.sfxPoolSize;u+=1){const a=K(e,!1);a.volume=n,a.addEventListener("ended",()=>{a.currentTime=0}),c.push(a)}this.pools.set(e,{els:c,next:0,volume:n});const o=Z(c[0]);return this.ready.set(e,o),o}onMuteChange(e){return this.listeners.add(e),e(this.muted),()=>this.listeners.delete(e)}isMuted(){return this.muted}setMuted(e){e!==this.muted&&(this.muted=e,this.muted||this.pools.forEach(r=>r.els.forEach(Ue)),this.applyMusic(),this.listeners.forEach(r=>r(this.muted)))}toggleMuted(){this.setMuted(!this.muted)}playOneShot(e,r){if(this.muted)return;const s=this.pools.get(e);if(!s)return;const n=performance.now();if(n-(this.lastPlayed.get(e)??-1/0)<this.coalesceMs)return;this.lastPlayed.set(e,n);const c=s.els.length;let o;for(let u=0;u<c;u+=1){const a=s.els[(s.next+u)%c];if(a.paused){o=a,s.next=(s.next+u+1)%c;break}}o||(o=s.els[s.next],s.next=(s.next+1)%c),o.muted=!1,o.volume=z(r??s.volume),o.currentTime!==0&&(o.currentTime=0),o.play().catch(()=>{})}startMusic(e,r=.4){const s=z(r);this.musicUrl!==e&&this.prefetchMusic(e,s),this.musicWanted={url:e,volume:s},this.applyMusic()}stopMusic(){this.musicWanted=null,this.music&&(this.music.pause(),this.music.currentTime=0)}applyMusic(){!this.music||!this.musicWanted||(this.music.volume=this.musicWanted.volume,!this.muted&&this.music.paused&&this.music.play().catch(()=>{}),this.muted&&!this.music.paused&&this.music.pause())}}const ve=(t,e,r)=>t==="infinite"||t==="loop"&&e<Math.max(1,Math.floor(r))?"replay":"ended",Oe=(t,e,r)=>t&&e!==r,Ie=t=>Math.min(100,Math.max(0,t))/100,Ge=i.forwardRef(function({src:e,playMode:r="once",loopCount:s=1,autoplay:n=!1,muted:c=!1,volume:o=100,preload:u="auto",onReady:a,onPlay:l,onPause:M,onEnded:p,onError:h},S){const d=i.useRef(null),_=i.useRef(0),y=i.useRef(null),R=i.useCallback(async()=>{const g=d.current;if(g)try{await g.play()}catch(b){const G=b instanceof Error?b:new Error(String(b));throw h==null||h(G),G}},[h]),L=i.useCallback(()=>{var g;return(g=d.current)==null?void 0:g.pause()},[]),D=i.useCallback(()=>{const g=d.current;g&&(g.pause(),g.currentTime=0,_.current=0)},[]);i.useImperativeHandle(S,()=>({play:R,pause:L,stop:D,get current(){return d.current}}),[L,R,D]),i.useEffect(()=>{_.current=0,y.current=null},[e]),i.useEffect(()=>{d.current&&(d.current.volume=Ie(o))},[o]),i.useEffect(()=>{Oe(n,y.current,e)&&(y.current=e,R().catch(()=>{}))},[n,e]);const X=i.useCallback(()=>{_.current+=1;const g=Math.max(1,Math.floor(s));if(ve(r,_.current,g)==="replay"){const b=d.current;b&&(b.currentTime=0,R().catch(()=>{}));return}_.current=0,p==null||p()},[s,p,R,r]);return m.jsx("audio",{ref:d,src:e,preload:u,autoPlay:!1,muted:c,loop:!1,playsInline:!0,style:{display:"none"},onCanPlayThrough:a,onPlay:l,onPause:M,onEnded:X,onError:()=>h==null?void 0:h(new Error(`Unable to load audio: ${e}`))})}),N=new ee,je=(t,e)=>N.prefetchMusic(t,e),ke=(t,e)=>N.registerSound(t,e),ze=(t,e)=>N.startMusic(t,e),Xe=()=>N.stopMusic(),qe=(t,e)=>N.playOneShot(t,e),We=t=>N.setMuted(t),He=()=>N.toggleMuted(),Ve=()=>N.isMuted(),Be=t=>N.onMuteChange(t),Ye=()=>{const[t,e]=i.useState(N.isMuted());return i.useEffect(()=>N.onMuteChange(e),[]),t};exports.XRMediaSource=j.XRMediaSource;exports.XRModel=j.XRModel;exports.XRProvider=j.XRProvider;exports.ScreenTransform=V.ScreenTransform;exports.XRScene=V.XRScene;exports.LightObject=T.LightObject;exports.LookAt=T.LookAt;exports.RenderGroupLayer=T.RenderGroupLayer;exports.SceneObjectRenderer=T.SceneObjectRenderer;exports.ScreenImage=T.ScreenImage;exports.ScreenSpaceUI=T.ScreenSpaceUI;exports.ScreenText=T.ScreenText;exports.SequentialRenderPasses=T.SequentialRenderPasses;exports.TextLabel=T.TextLabel;exports.clientToScreenPixels=T.clientToScreenPixels;exports.computeContainScale=T.computeContainScale;exports.mediaToScreenPixels=T.mediaToScreenPixels;exports.normalizedToScreenPixels=T.normalizedToScreenPixels;exports.screenPixelsToClient=T.screenPixelsToClient;exports.screenPixelsToMedia=T.screenPixelsToMedia;exports.screenPixelsToNormalized=T.screenPixelsToNormalized;exports.screenPixelsToUnits=T.screenPixelsToUnits;exports.screenPointToRay=T.screenPointToRay;exports.screenUnitsToPixels=T.screenUnitsToPixels;exports.worldToScreenPixels=T.worldToScreenPixels;exports.DEFAULT_PIXEL_SNAP_INCREMENT=E.DEFAULT_PIXEL_SNAP_INCREMENT;exports.DEFAULT_REFERENCE_PIXELS_PER_UNIT=E.DEFAULT_REFERENCE_PIXELS_PER_UNIT;exports.DEFAULT_SCREEN_GLASS=E.DEFAULT_SCREEN_GLASS;exports.DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS=E.DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS;exports.DEFAULT_SCREEN_IMAGE_SETTINGS=E.DEFAULT_SCREEN_IMAGE_SETTINGS;exports.DEFAULT_SCREEN_SHAPE_SETTINGS=E.DEFAULT_SCREEN_SHAPE_SETTINGS;exports.DEFAULT_SCREEN_TEXT_SCENE_SETTINGS=E.DEFAULT_SCREEN_TEXT_SCENE_SETTINGS;exports.DEFAULT_SCREEN_TEXT_SHADOW_LAYER=E.DEFAULT_SCREEN_TEXT_SHADOW_LAYER;exports.DEFAULT_SCREEN_TRANSFORM_2D=E.DEFAULT_SCREEN_TRANSFORM_2D;exports.DEFAULT_SCREEN_TRANSFORM_ROOT=E.DEFAULT_SCREEN_TRANSFORM_ROOT;exports.EXTERNAL_BACKGROUND_RENDER_LAYER=E.EXTERNAL_BACKGROUND_RENDER_LAYER;exports.MAX_RENDER_GROUP_PASSES=E.MAX_RENDER_GROUP_PASSES;exports.PinToMesh=E.PinToMesh;exports.ScreenGlassMaterial=E.ScreenGlassMaterial;exports.ScreenShape=E.ScreenShape;exports.getRenderGroupLayer=E.getRenderGroupLayer;exports.mapScreenImageSettingsToProps=E.mapScreenImageSettingsToProps;exports.mapScreenTextInnerShadowToProps=E.mapScreenTextInnerShadowToProps;exports.mapScreenTextSettingsToProps=E.mapScreenTextSettingsToProps;exports.mergeScreenShapeSettings=E.mergeScreenShapeSettings;exports.mergeScreenTransform2D=E.mergeScreenTransform2D;exports.normalizeScreenGlass=E.normalizeScreenGlass;exports.renderSequentialPasses=E.renderSequentialPasses;exports.resolveScreenTransform2D=E.resolveScreenTransform2D;exports.DEFAULT_MESH_RENDERER=I.DEFAULT_MESH_RENDERER;exports.DEFAULT_MESH_RENDERER_RENDER_STATE=I.DEFAULT_MESH_RENDERER_RENDER_STATE;exports.MeshRenderer=I.MeshRenderer;exports.normalizeMeshRendererRenderState=I.normalizeMeshRendererRenderState;exports.useScreenRectAspect=I.useScreenRectAspect;exports.DEFAULT_MATERIAL_FILL=U.DEFAULT_MATERIAL_FILL;exports.DEFAULT_SCREEN_GRADIENT=U.DEFAULT_SCREEN_GRADIENT;exports.DEFAULT_TRANSFORM_3D=U.DEFAULT_TRANSFORM_3D;exports.MaterialFill=U.MaterialFill;exports.ScreenGradientMaterial=U.ScreenGradientMaterial;exports.Transform3D=U.Transform3D;exports.createTwoStopGradient=U.createTwoStopGradient;exports.normalizeScreenGradient=U.normalizeScreenGradient;exports.drawNormalizedCrop=Q.drawNormalizedCrop;exports.resolveNormalizedCrop=Q.resolveNormalizedCrop;exports.MeshMaterial=ue.MeshMaterial;exports.AspectRatioContainer=Me;exports.AudioEngine=ee;exports.AudioPlayer=Ge;exports.Axes=_e;exports.Panel=Se;exports.SpriteAnimation=ye;exports.VideoBackground=Re;exports.audio=N;exports.dataURLtoFile=we;exports.isMuted=Ve;exports.onMuteChange=Be;exports.playOneShot=qe;exports.prefetchMusic=je;exports.registerSound=ke;exports.setMuted=We;exports.smoothNumber=O;exports.smoothVector2=me;exports.smoothVector3=pe;exports.startMusic=ze;exports.stopMusic=Xe;exports.toggleMuted=He;exports.useFrameCapture=Le;exports.useMediaRecorder=Pe;exports.useMuted=Ye;
|
package/dist/main.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
var re = Object.defineProperty;
|
|
2
2
|
var ae = (t, e, s) => e in t ? re(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
|
|
3
3
|
var _ = (t, e, s) => ae(t, typeof e != "symbol" ? e + "" : e, s);
|
|
4
|
-
import { X as ne, u as oe } from "./index-
|
|
5
|
-
import { c as yt, d as gt } from "./index-
|
|
6
|
-
import { S as ie } from "./contexts-
|
|
7
|
-
import { X as At } from "./contexts-
|
|
8
|
-
import { c as ce } from "./index-
|
|
9
|
-
import { L as xt, d as vt, R as Ct, e as Pt, a as Lt, S as Ut, b as Dt, f as Nt, T as Ft, g as bt, m as Ot, n as It, h as Gt, i as kt, j as zt, s as Wt, k as Xt, l as Vt, w as Ht } from "./index-
|
|
4
|
+
import { X as ne, u as oe } from "./index-BMeBJ0dV.js";
|
|
5
|
+
import { c as yt, d as gt } from "./index-BMeBJ0dV.js";
|
|
6
|
+
import { S as ie } from "./contexts-B2_NsTnk.js";
|
|
7
|
+
import { X as At } from "./contexts-B2_NsTnk.js";
|
|
8
|
+
import { c as ce } from "./index-Cj3fGDtZ.js";
|
|
9
|
+
import { L as xt, d as vt, R as Ct, e as Pt, a as Lt, S as Ut, b as Dt, f as Nt, T as Ft, g as bt, m as Ot, n as It, h as Gt, i as kt, j as zt, s as Wt, k as Xt, l as Vt, w as Ht } from "./index-Cj3fGDtZ.js";
|
|
10
10
|
import { jsxs as N, jsx as f, Fragment as q } from "react/jsx-runtime";
|
|
11
11
|
import { useRef as A, useMemo as J, useEffect as U, useState as F, Suspense as ue, useCallback as w, forwardRef as le, useImperativeHandle as de } from "react";
|
|
12
12
|
import * as me from "three";
|
|
13
13
|
import { MathUtils as pe, Vector2 as he, Vector3 as fe, DoubleSide as k, RepeatWrapping as Y, LinearFilter as Z } from "three";
|
|
14
|
-
import { T as jt, U as qt, D as Yt, K as Zt, J as Kt, F as $t, N as Jt, O as Qt, V as es, W as ts, H as ss, M as rs, P as as, S as ns, E as os, B as is, L as cs, Q as us, R as ls, G as ds, X as ms, C as ps, I as hs, Y as fs } from "./renderPasses-
|
|
14
|
+
import { T as jt, U as qt, D as Yt, K as Zt, J as Kt, F as $t, N as Jt, O as Qt, V as es, W as ts, H as ss, M as rs, P as as, S as ns, E as os, B as is, L as cs, Q as us, R as ls, G as ds, X as ms, C as ps, I as hs, Y as fs } from "./renderPasses-CLlYRdMk.js";
|
|
15
15
|
import { useThree as Ee, useFrame as Se } from "@react-three/fiber";
|
|
16
16
|
import { R as Te } from "./renderLayers-zrK2pv5O.js";
|
|
17
|
-
import { u as Me, c as Re } from "./selectors-
|
|
17
|
+
import { u as Me, c as Re } from "./selectors-DLxL8Q66.js";
|
|
18
18
|
import { useTexture as ye } from "@react-three/drei";
|
|
19
|
-
import { a as ge } from "./index-
|
|
20
|
-
import { D as Ss, b as Ts, M as Ms, n as Rs } from "./index-
|
|
21
|
-
import { y as gs, w as ws, A as As, M as _s, S as xs, T as vs, z as Cs, x as Ps } from "./FaceMeshRenderer-
|
|
19
|
+
import { a as ge } from "./index-72Wb15Ca.js";
|
|
20
|
+
import { D as Ss, b as Ts, M as Ms, n as Rs } from "./index-72Wb15Ca.js";
|
|
21
|
+
import { y as gs, w as ws, A as As, M as _s, S as xs, T as vs, z as Cs, x as Ps } from "./FaceMeshRenderer-B2i2NW71.js";
|
|
22
22
|
import { d as Us, r as Ds } from "./drawNormalizedCrop-CRdIDyl1.js";
|
|
23
|
-
import { M as Fs } from "./index-
|
|
23
|
+
import { M as Fs } from "./index-D1kj6uc-.js";
|
|
24
24
|
const I = (t, e, s, r) => pe.damp(t, e, Math.max(0, s), Math.max(0, r)), Je = (t, e, s, r, a = new he()) => a.set(
|
|
25
25
|
I(t.x, e.x, s, r),
|
|
26
26
|
I(t.y, e.y, s, r)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const E=require("./renderPasses-
|
|
1
|
+
"use strict";const E=require("./renderPasses-KUJUSevp.cjs"),p={background:"background",scene3d:"general",tracking:"ar-tracking",screen2d:"2d-foreground",post:"post-effects"},u=(e,...r)=>{const t=new Set(e.map(c=>c.type));return r.every(c=>t.has(c))},b=e=>u(e,"ScreenTransform")&&(u(e,"ScreenText")||u(e,"ScreenImage")||u(e,"ScreenShape")||e.every(r=>["ScreenTransform","TrackingAnchor"].includes(r.type))),h=e=>(u(e,"Transform")||u(e,"FaceMeshRenderer"))&&!b(e),l={background:{domain:"background",accepts:()=>!1,defaultFor:()=>!1,renderMode:"background"},scene3d:{domain:"scene3d",accepts:h,defaultFor:h,renderMode:"depth3d"},tracking:{domain:"tracking",accepts:()=>!1,defaultFor:()=>!1,renderMode:"tracking"},screen2d:{domain:"screen2d",accepts:b,defaultFor:b,renderMode:"screenOverlay"},post:{domain:"post",accepts:()=>!1,defaultFor:()=>!1,renderMode:"post"}},y={background:"Background",scene3d:"General / 3D Scene",tracking:"AR Tracking",screen2d:"2D Foreground",post:"Post Effects"},D=e=>({id:p[e],name:y[e],domain:e,enabled:!0,objectIds:[]}),G=(e,r)=>r.componentIds.map(t=>e.components[t]).filter(t=>!!t),I=e=>{var r;return p[((r=Object.values(l).find(t=>t.defaultFor(e)))==null?void 0:r.domain)??"scene3d"]},S=(e,r,t)=>{const c=e.objects[r],n=e.renderGroups[t];return!c||!n?!1:l[n.domain].accepts(G(e,c))},k=(e,r,t)=>{if(r<0||r>=e.length)return e;const c=Math.max(0,Math.min(t,e.length-1));if(r===c)return e;const n=[...e],[s]=n.splice(r,1);return n.splice(c,0,s),n},T=(e,r,t)=>{const c=e.renderGroupOrder.indexOf(r),n=k(e.renderGroupOrder,c,t);return n===e.renderGroupOrder?e:{...e,renderGroupOrder:n}},P=(e,r,t,c)=>{const n=e.renderGroups[r];if(!n)return e;const s=n.objectIds.indexOf(t),o=k(n.objectIds,s,c);return o===n.objectIds?e:{...e,renderGroups:{...e.renderGroups,[r]:{...n,objectIds:o}}}},v=(e,r,t,c)=>{if(!S(e,r,t))return e;const n=Object.fromEntries(Object.entries(e.renderGroups).map(([o,d])=>[o,{...d,objectIds:d.objectIds.filter(a=>a!==r)}])),s=n[t].objectIds;return s.splice(Math.max(0,Math.min(c??s.length,s.length)),0,r),{...e,objects:{...e.objects,[r]:{...e.objects[r],renderGroupId:t}},renderGroups:n}},F=(e,r=Object.keys(e.objects))=>{const t={},c=[],n={...e.objects};return[...r,...Object.keys(n).filter(o=>!r.includes(o))].forEach(o=>{var g,m;const d=n[o];if(!d)return;const a=d.renderGroupId??d.layerId,M=I(G(e,d)),_=(g=Object.entries(p).find(([,f])=>f===a))==null?void 0:g[0],O=(m=Object.entries(p).find(([,f])=>f===M))==null?void 0:m[0],R=D(_??O),j=l[R.domain].accepts(G(e,d))?R:D(O),i=j.id;t[i]||(t[i]=j,c.push(i)),t[i].objectIds.push(o),n[o]={...d,renderGroupId:i}}),{...e,objects:n,renderGroups:t,renderGroupOrder:c}},U=(e,r=1e3)=>e.renderGroupOrder.flatMap((t,c)=>{if(c>=E.MAX_RENDER_GROUP_PASSES)return[];const n=e.renderGroups[t];if(!n||!n.enabled)return[];const s=l[n.domain];return n.objectIds.flatMap((o,d)=>{const a=e.objects[o];return!a||!a.enabled?[]:a.parentObjectId&&e.objects[a.parentObjectId]?[]:[{groupId:t,groupIndex:c,objectId:o,objectIndex:d,renderMode:s.renderMode,renderOrder:c*r+d,renderLayer:E.getRenderGroupLayer(c)}]})});exports.DEFAULT_RENDER_GROUP_IDS=p;exports.RENDER_GROUP_POLICIES=l;exports.createRenderPlan=U;exports.getDefaultRenderGroupId=I;exports.migrateToRenderGroups=F;exports.moveObjectToGroup=v;exports.reorderObjectWithinGroup=P;exports.reorderRenderGroup=T;exports.validateGroupCompatibility=S;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { u as Ee, S as ze, a as Pe, D as Re } from "./index-
|
|
1
|
+
import { u as Ee, S as ze, a as Pe, D as Re } from "./index-72Wb15Ca.js";
|
|
2
2
|
import { useThree as xe, useFrame as Oe } from "@react-three/fiber";
|
|
3
3
|
import { useRef as W, useState as De, useCallback as U, useEffect as k, useMemo as G, createElement as Le } from "react";
|
|
4
4
|
import * as ce from "three";
|
|
5
5
|
import { Vector2 as K, Vector3 as z, Box3 as Ae, Matrix4 as B, Quaternion as Y, Euler as H, MathUtils as L, Color as Ce } from "three";
|
|
6
|
-
import { e as Fe } from "./index-
|
|
7
|
-
import { D as _e } from "./index-
|
|
8
|
-
import { w as Ie, x as je, M as We, a as Ge, A as Ne } from "./FaceMeshRenderer-
|
|
6
|
+
import { e as Fe } from "./index-BMeBJ0dV.js";
|
|
7
|
+
import { D as _e } from "./index-g250Tqme.js";
|
|
8
|
+
import { w as Ie, x as je, M as We, a as Ge, A as Ne } from "./FaceMeshRenderer-B2i2NW71.js";
|
|
9
9
|
import { jsxs as O, jsx as u } from "react/jsx-runtime";
|
|
10
10
|
import { Line as Ue } from "@react-three/drei";
|
|
11
11
|
const he = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const $=require("./index-UU5ODHGU.cjs"),ae=require("@react-three/fiber"),m=require("react"),d=require("three"),ke=require("./index-D4bLzBr6.cjs"),Xe=require("./index-Be-S7uSm.cjs"),k=require("./FaceMeshRenderer-D4PFqsb3.cjs"),p=require("react/jsx-runtime"),Be=require("@react-three/drei");function Ye(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const ne=Ye(d),de={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},Ve=({color:e="#22d3ee",controlScale:t=[1,1,1],handleColor:o="#ffffff",onHandlePointerDown:n,opacity:s=.9,pivot:r=[.5,.5],pivotScale:a=t,renderOrder:i,showSideHandles:l=!0,thickness:f=.004})=>{const h=p.jsx("meshBasicMaterial",{color:e,transparent:!0,opacity:s,depthTest:!1,depthWrite:!1,toneMapped:!1}),g=p.jsx("meshBasicMaterial",{color:o,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1}),w=Math.max(f*7,.028),y=Math.max(f*7,.03),R=Math.max(f*8,.032),S=.04,c=.06,E=.08,T=.1,u=i??0,_=[["topLeft",-.5,.5],["topRight",.5,.5],["bottomLeft",-.5,-.5],["bottomRight",.5,-.5],...l?[["top",0,.5],["bottom",0,-.5],["left",-.5,0],["right",.5,0]]:[]],D=[["rotateTopLeft",-.56,.56,0],["rotateTopRight",.56,.56,-Math.PI/2],["rotateBottomRight",.56,-.56,Math.PI],["rotateBottomLeft",-.56,-.56,Math.PI/2]],b=x=>n?P=>{P.stopPropagation(),document.body.style.cursor=x==="move"?"grabbing":de[x],n(x,P)}:void 0,v=x=>{n&&(document.body.style.cursor=de[x])},O=()=>{n&&(document.body.style.cursor="")},M=[r[0]-.5,r[1]-.5,T];return p.jsxs("group",{renderOrder:u,children:[p.jsxs("mesh",{position:[0,.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[0,-.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[-.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[0,0,c],renderOrder:u+1,onPointerDown:b("move"),onPointerOver:()=>v("move"),onPointerOut:O,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),_.map(([x,P,C])=>p.jsxs("mesh",{position:[P,C,E],scale:[w*t[0],w*t[1],t[2]],renderOrder:u+2,onPointerDown:b(x),onPointerOver:()=>v(x),onPointerOut:O,children:[p.jsx("planeGeometry",{args:[1,1]}),g]},x)),D.map(([x,P,C,B])=>p.jsx("group",{position:[P,C,E+.01],rotation:[0,0,B],scale:[R*t[0],R*t[1],t[2]],renderOrder:u+3,onPointerDown:b(x),onPointerOver:()=>v(x),onPointerOut:O,children:p.jsxs("mesh",{renderOrder:u+3,children:[p.jsx("planeGeometry",{args:[1.9,1.9]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]})},x)),p.jsx("group",{position:M,scale:[y*a[0],y*a[1],a[2]],renderOrder:u+5,onPointerDown:b("pivot"),onPointerOver:()=>v("pivot"),onPointerOut:O,children:p.jsxs("group",{rotation:[0,0,Math.PI/4],children:[p.jsxs("mesh",{scale:[1.8,1.8,1],renderOrder:u+5,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),p.jsxs("mesh",{position:[0,0,.002],renderOrder:u+6,children:[p.jsx("planeGeometry",{args:[1,1]}),g]}),p.jsxs("mesh",{scale:[.62,.62,1],position:[0,0,.004],renderOrder:u+7,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{color:"#111827",transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1})]})]})})]})},j={width:720,height:1280},G=32,Se=.5,F={enabled:!0,position:{x:0,y:0},size:{width:680,height:1230},pivot:[.5,.5],rotation:0,scale2D:{x:1,y:1},referencePixelsPerUnit:G,renderOrder:999,overlay:!0,visible:!0,showTransformGuides:!1},$e=Math.PI/180,fe=(e,t)=>t<=0?e:Math.round(e/t)*t,H=({transform:e,parentSize:t,root:o=j,snapIncrement:n=Se})=>{const r=Math.min(t.width/o.width,t.height/o.height)*(G/e.referencePixelsPerUnit),a=e.size.width*e.scale2D.x*r,i=e.size.height*e.scale2D.y*r,l=fe(e.position.x,n)*r,f=fe(e.position.y,n)*r,h=(e.pivot[0]-.5)*a,g=(e.pivot[1]-.5)*i;return{center:[l-h,f-g,0],size:[a,i,1],rotation:[0,0,e.rotation*$e],pivotOffset:[h/Math.max(a,1e-6),g/Math.max(i,1e-6),0],aspect:a>0&&i>0?Math.abs(a/i):1}},xe=e=>({...F,...e,position:{...F.position,...e==null?void 0:e.position},size:{...F.size,...e==null?void 0:e.size},scale2D:{...F.scale2D,...e==null?void 0:e.scale2D}}),L=e=>Math.round(e*2)/2,pe=e=>Math.min(1,Math.max(0,e)),Q={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},He=[["topLeft",0,0],["top",.5,0],["topRight",1,0],["right",1,.5],["bottomRight",1,1],["bottom",.5,1],["bottomLeft",0,1],["left",0,.5]],qe=[["rotateTopLeft",-.03,-.03],["rotateTopRight",1.03,-.03],["rotateBottomRight",1.03,1.03],["rotateBottomLeft",-.03,1.03]],Qe=(e,t)=>{const o=H({transform:t,parentSize:{width:e.width,height:e.height}}),n=Math.min(e.width/j.width,e.height/j.height)*(G/Math.max(t.referencePixelsPerUnit,1e-6))||1,s=j.width*n,r=j.height*n,a=e.left+(e.width-s)/2,i=e.top+(e.height-r)/2,l=a+s/2,f=i+r/2,h=o.size[0],g=o.size[1],w=l+o.center[0],y=f-o.center[1];return{centerX:w,centerY:y,height:g,left:w-h/2,scale:n,top:y-g/2,width:h}},Ke=(e,t,o,n)=>{const s=j.width*n,r=j.height*n,a=o.left+(o.width-s)/2,i=o.top+(o.height-r)/2;return{x:(e-(a+s/2))/n,y:(i+r/2-t)/n}},Ze=({color:e="#38bdf8",handleColor:t="#ffffff",onChange:o,transform:n})=>{const s=m.useRef(o);s.current=o;const{gl:r}=ae.useThree(),[a,i]=m.useState(null),l=m.useRef(null),f=m.useRef(null),h=m.useCallback(()=>{i(r.domElement.getBoundingClientRect())},[r.domElement]);m.useEffect(()=>(h(),window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0)}),[h]);const g=m.useMemo(()=>a?Qe(a,n):null,[a,n]),w=m.useCallback(S=>{const c=l.current,E=s.current;if(!c||!E)return;const T=(S.clientX-c.startX)/c.scale,u=-(S.clientY-c.startY)/c.scale,_={x:c.startPointerDesign.x+T,y:c.startPointerDesign.y+u},D={...c.startTransform,position:{...c.startTransform.position},size:{...c.startTransform.size},pivot:[...c.startTransform.pivot]};if(c.handle==="move")D.position={x:L(c.startTransform.position.x+T),y:L(c.startTransform.position.y+u)};else if(c.handle==="pivot"){const b=Math.max(1,c.startTransform.size.width*c.startTransform.scale2D.x),v=Math.max(1,c.startTransform.size.height*c.startTransform.scale2D.y),O=pe(c.startTransform.pivot[0]+T/b),M=pe(c.startTransform.pivot[1]+u/v);D.pivot=[L(O*1e3)/1e3,L(M*1e3)/1e3],D.position={x:L(c.startTransform.position.x+(D.pivot[0]-c.startTransform.pivot[0])*b),y:L(c.startTransform.position.y+(D.pivot[1]-c.startTransform.pivot[1])*v)}}else if(c.handle.startsWith("rotate")){const b=Math.atan2(c.startPointerDesign.y-c.startTransform.position.y,c.startPointerDesign.x-c.startTransform.position.x),v=Math.atan2(_.y-c.startTransform.position.y,_.x-c.startTransform.position.x);D.rotation=L(c.startTransform.rotation+(v-b)*180/Math.PI)}else{const b=c.handle==="left"||c.handle.endsWith("Left"),v=c.handle==="right"||c.handle.endsWith("Right"),O=c.handle==="top"||c.handle.startsWith("top"),M=c.handle==="bottom"||c.handle.startsWith("bottom"),x=v?T*2:b?-T*2:0,P=O?u*2:M?-u*2:0;D.size={width:Math.max(1,L(c.startTransform.size.width+x)),height:Math.max(1,L(c.startTransform.size.height+P))}}E(D)},[]),y=m.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",y)},[w]);m.useEffect(()=>y,[y]);const R=m.useCallback((S,c)=>{!a||!g||!o||(c.preventDefault(),document.body.style.cursor=S==="move"?"grabbing":Q[S],l.current={handle:S,startX:c.clientX,startY:c.clientY,startPointerDesign:Ke(c.clientX,c.clientY,a,g.scale),startTransform:n,scale:g.scale},window.addEventListener("pointermove",w),window.addEventListener("pointerup",y))},[a,g,o,y,n,w]);return m.useEffect(()=>{if(typeof document>"u")return;const S=document.createElement("div");return document.body.appendChild(S),f.current=S,()=>{S.remove(),f.current=null}},[]),m.useEffect(()=>{const S=f.current;if(!S||(S.replaceChildren(),!g))return;const c=12,E=12,T=document.createElement("div");Object.assign(T.style,{position:"fixed",inset:"0",zIndex:"19999",pointerEvents:"none"});const u=document.createElement("div");Object.assign(u.style,{position:"absolute",left:`${g.left}px`,top:`${g.top}px`,width:`${g.width}px`,height:`${g.height}px`,border:`1px solid ${e}`,boxSizing:"border-box",transform:`rotate(${-n.rotation}deg)`,transformOrigin:`${n.pivot[0]*100}% ${(1-n.pivot[1])*100}%`,pointerEvents:o?"auto":"none",cursor:Q.move}),u.addEventListener("pointerdown",b=>R("move",b));const _=(b,v,O,M,x="translate(-50%, -50%)")=>{const P=document.createElement("div");return Object.assign(P.style,{position:"absolute",left:`${v*100}%`,top:`${O*100}%`,width:`${M}px`,height:`${M}px`,cursor:Q[b],transform:x,pointerEvents:"auto"}),P.addEventListener("pointerdown",C=>{C.stopPropagation(),R(b,C)}),P};for(const[b,v,O]of He){const M=_(b,v,O,c);M.style.background=t,u.appendChild(M)}for(const[b,v,O]of qe)u.appendChild(_(b,v,O,26));const D=_("pivot",n.pivot[0],1-n.pivot[1],E,"translate(-50%, -50%) rotate(45deg)");return Object.assign(D.style,{border:"2px solid #ffffff",background:"#111827",boxSizing:"border-box"}),u.appendChild(D),T.appendChild(u),S.appendChild(T),()=>{S.replaceChildren()}},[e,t,g,o,R,n]),null},Y={enabled:!1,targetObjectId:null,orientation:"none",uv:{x:.5,y:.5},vertexNormal:!1,offsetSpace:"local",offsetPosition:{x:0,y:0,z:0},offsetRotation:{x:0,y:0,z:0}},Je=(e,t,o,n)=>{const s=o.clone().sub(t),r=n.clone().sub(t),a=e.clone().sub(t),i=s.x*r.y-r.x*s.y;if(Math.abs(i)<1e-8)return null;const l=(a.x*r.y-r.x*a.y)/i,f=(s.x*a.y-a.x*s.y)/i,h=1-l-f;return h>=-1e-5&&l>=-1e-5&&f>=-1e-5?[h,l,f]:null},et=(e,t,o=!1)=>{const n=new d.Vector2(t.x,t.y),s=new d.Vector2,r=new d.Vector2,a=new d.Vector2,i=new d.Vector3,l=new d.Vector3,f=new d.Vector3,h=new d.Vector3,g=new d.Vector3,w=new d.Vector3;let y=null;if(e.traverse(S=>{var v,O;if(y||!S.isMesh)return;const c=S,E=c.geometry,T=(v=E==null?void 0:E.attributes)==null?void 0:v.position,u=(O=E==null?void 0:E.attributes)==null?void 0:O.uv;if(!T||!u)return;const _=E.attributes.normal,D=E.index,b=M=>(D==null?void 0:D.getX(M))??M;for(let M=0;M<(D?D.count:T.count);M+=3){const x=[b(M),b(M+1),b(M+2)];s.set(u.getX(x[0]),u.getY(x[0])),r.set(u.getX(x[1]),u.getY(x[1])),a.set(u.getX(x[2]),u.getY(x[2]));const P=Je(n,s,r,a);if(P){i.set(0,0,0),l.set(0,0,0),x.forEach((C,B)=>{f.fromBufferAttribute(T,C),i.addScaledVector(f,P[B]),_&&o&&l.addScaledVector(f.fromBufferAttribute(_,C),P[B])}),o||(h.fromBufferAttribute(T,x[0]),g.fromBufferAttribute(T,x[1]),w.fromBufferAttribute(T,x[2]),l.copy(g.sub(h).cross(w.sub(h)).normalize())),y={mesh:c,localPosition:i.clone(),localNormal:l.clone().normalize()};break}}}),y)return y;const R=new d.Box3().setFromObject(e);return{mesh:e,localPosition:e.worldToLocal(R.getCenter(new d.Vector3)),localNormal:new d.Vector3(0,1,0)}},tt=e=>({position:e.mesh.localToWorld(e.localPosition.clone()),normal:e.localNormal.clone().transformDirection(e.mesh.matrixWorld).normalize()}),N=(e,t=0)=>Number.isFinite(e)?e:t,K=new d.Vector3,Z=new d.Vector3,ue=new d.Matrix4,J=new d.Quaternion,ee=new d.Quaternion,ot=new d.Vector3(0,1,0),nt=e=>{e.position.set(0,0,0),e.quaternion.identity()},rt=({settings:e,source:t,surface:o})=>{e.orientation==="positionAndDirection"?(ue.lookAt(o.position,o.position.clone().add(o.normal),ot),J.setFromRotationMatrix(ue)):J.identity(),t.quaternion.copy(J),Z.set(N(e.offsetPosition.x),N(e.offsetPosition.y),N(e.offsetPosition.z)),e.offsetSpace==="local"&&Z.applyQuaternion(t.quaternion),K.copy(o.position).add(Z),t.parent&&t.parent.worldToLocal(K),t.position.copy(K),ee.setFromEuler(new d.Euler(N(e.offsetRotation.x)*Math.PI/180,N(e.offsetRotation.y)*Math.PI/180,N(e.offsetRotation.z)*Math.PI/180)),e.offsetSpace==="local"?t.quaternion.multiply(ee):t.quaternion.premultiply(ee)},st=({target:e,settings:t,children:o})=>{const n=ke.useResolveRuntimeObject(),s=m.useRef(null),r=m.useRef(null),a=()=>{s.current&&nt(s.current)};return m.useEffect(()=>{r.current=null},[t.targetObjectId]),m.useEffect(()=>{t.enabled||a()},[t.enabled]),ae.useFrame(()=>{const i=e??n(t.targetObjectId);if(!t.enabled||!i||!s.current){(!t.enabled||!i)&&a();return}const l=`${t.uv.x}:${t.uv.y}:${t.vertexNormal?"vertex":"face"}`;(!r.current||r.current.target!==i||r.current.key!==l)&&(r.current={key:l,target:i,surface:et(i,t.uv,t.vertexNormal)}),i.updateWorldMatrix(!0,!0);const f=tt(r.current.surface);rt({source:s.current,surface:f,settings:t})}),m.createElement("group",{ref:s},o)},A=e=>Math.round(e*2)/2,he=e=>Math.min(1,Math.max(0,e));function it(e){return Math.min(e.width/j.width,e.height/j.height)||1}function at({resolved:e,transform:t}){return e.size[0]/Math.max(Math.abs(t.size.width*t.scale2D.x),1e-6)||1}function ct({parent:e,resolved:t,transform:o}){const r=16*((Math.min(e.width/j.width,e.height/j.height)||1)*(G/Math.max(o.referencePixelsPerUnit,1e-6))),a=.028;return[r/Math.max(Math.abs(t.size[0])*a,1e-6),r/Math.max(Math.abs(t.size[1])*a,1e-6),1]}function lt({drag:e,clientX:t,clientY:o,designScale:n}){const s=(t-e.startX)/n,r=-(o-e.startY)/n,a={x:e.startPointerDesign.x+s,y:e.startPointerDesign.y+r},i={...e.startTransform,position:{...e.startTransform.position},size:{...e.startTransform.size},pivot:[...e.startTransform.pivot]};if(e.handle==="move")return i.position={x:A(e.startTransform.position.x+s),y:A(e.startTransform.position.y+r)},i;if(e.handle==="pivot"){const R=Math.max(1,e.startTransform.size.width*e.startTransform.scale2D.x),S=Math.max(1,e.startTransform.size.height*e.startTransform.scale2D.y),c=he(e.startTransform.pivot[0]+s/R),E=he(e.startTransform.pivot[1]+r/S);return i.pivot=[A(c*1e3)/1e3,A(E*1e3)/1e3],i.position={x:A(e.startTransform.position.x+(i.pivot[0]-e.startTransform.pivot[0])*R),y:A(e.startTransform.position.y+(i.pivot[1]-e.startTransform.pivot[1])*S)},i}if(e.handle.startsWith("rotate")){const R=Math.atan2(e.startPointerDesign.y-e.startTransform.position.y,e.startPointerDesign.x-e.startTransform.position.x),S=Math.atan2(a.y-e.startTransform.position.y,a.x-e.startTransform.position.x);return i.rotation=A(e.startTransform.rotation+(S-R)*180/Math.PI),i}const l=e.handle==="left"||e.handle.endsWith("Left"),f=e.handle==="right"||e.handle.endsWith("Right"),h=e.handle==="top"||e.handle.startsWith("top"),g=e.handle==="bottom"||e.handle.startsWith("bottom"),w=f?s*2:l?-s*2:0,y=h?r*2:g?-r*2:0;return i.size={width:Math.max(1,A(e.startTransform.size.width+w)),height:Math.max(1,A(e.startTransform.size.height+y))},i}function ge({transform:e,guideLayer:t,guideColor:o,onChange:n,children:s}){const r=$.useScreenSpace(),{size:a}=ae.useThree(),i=m.useRef(n);i.current=n;const l=m.useRef(null),f=m.useMemo(()=>H({transform:e,parentSize:r}),[r,e]),h=it(a),g=m.useRef(h);g.current=h;const w=at({resolved:f,transform:e}),y=m.useCallback(E=>{const T=l.current,u=i.current;!T||!u||u(lt({drag:T,clientX:E.clientX,clientY:E.clientY,designScale:g.current}))},[]),R=m.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",R)},[y]);m.useEffect(()=>R,[R]);const S=m.useCallback((E,T)=>{n&&(l.current={handle:E,startX:T.nativeEvent.clientX,startY:T.nativeEvent.clientY,startPointerDesign:{x:T.point.x/w,y:T.point.y/w},startTransform:e},window.addEventListener("pointermove",y),window.addEventListener("pointerup",R))},[n,R,e,w,y]),c=m.useMemo(()=>ct({parent:r,resolved:f,transform:e}),[r,f,e]);return p.jsx("group",{position:[f.center[0]+(e.pivot[0]-.5)*f.size[0],f.center[1]+(e.pivot[1]-.5)*f.size[1],0],rotation:f.rotation,children:p.jsx("group",{position:[(.5-e.pivot[0])*f.size[0],(.5-e.pivot[1])*f.size[1],0],scale:f.size,children:p.jsxs($.ScreenRectAspectContext.Provider,{value:f.aspect,children:[s,e.showTransformGuides&&t==="scene"?p.jsx(Ve,{color:o,controlScale:c,onHandlePointerDown:n?S:void 0,pivot:e.pivot,pivotScale:c,renderOrder:e.renderOrder+1}):null,e.showTransformGuides&&t==="overlay"?p.jsx(Ze,{color:o,onChange:n,transform:e}):null]})})})}const U={tint:"#dff6ff",opacity:.28,frost:.35,highlight:.55},ce=e=>({...U,...e,opacity:d.MathUtils.clamp((e==null?void 0:e.opacity)??U.opacity,0,1),frost:d.MathUtils.clamp((e==null?void 0:e.frost)??U.frost,0,1),highlight:d.MathUtils.clamp((e==null?void 0:e.highlight)??U.highlight,0,1)}),dt=`
|
|
1
|
+
"use strict";const $=require("./index-C9yQVzAh.cjs"),ae=require("@react-three/fiber"),m=require("react"),d=require("three"),ke=require("./index-Da7uycur.cjs"),Xe=require("./index-WPPnlFO1.cjs"),k=require("./FaceMeshRenderer-BSOq1OnG.cjs"),p=require("react/jsx-runtime"),Be=require("@react-three/drei");function Ye(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const ne=Ye(d),de={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},Ve=({color:e="#22d3ee",controlScale:t=[1,1,1],handleColor:o="#ffffff",onHandlePointerDown:n,opacity:s=.9,pivot:r=[.5,.5],pivotScale:a=t,renderOrder:i,showSideHandles:l=!0,thickness:f=.004})=>{const h=p.jsx("meshBasicMaterial",{color:e,transparent:!0,opacity:s,depthTest:!1,depthWrite:!1,toneMapped:!1}),g=p.jsx("meshBasicMaterial",{color:o,transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1}),w=Math.max(f*7,.028),y=Math.max(f*7,.03),R=Math.max(f*8,.032),S=.04,c=.06,E=.08,T=.1,u=i??0,_=[["topLeft",-.5,.5],["topRight",.5,.5],["bottomLeft",-.5,-.5],["bottomRight",.5,-.5],...l?[["top",0,.5],["bottom",0,-.5],["left",-.5,0],["right",.5,0]]:[]],D=[["rotateTopLeft",-.56,.56,0],["rotateTopRight",.56,.56,-Math.PI/2],["rotateBottomRight",.56,-.56,Math.PI],["rotateBottomLeft",-.56,-.56,Math.PI/2]],b=x=>n?P=>{P.stopPropagation(),document.body.style.cursor=x==="move"?"grabbing":de[x],n(x,P)}:void 0,v=x=>{n&&(document.body.style.cursor=de[x])},O=()=>{n&&(document.body.style.cursor="")},M=[r[0]-.5,r[1]-.5,T];return p.jsxs("group",{renderOrder:u,children:[p.jsxs("mesh",{position:[0,.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[0,-.5,S],scale:[1,f,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[-.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[.5,0,S],scale:[f,1,1],renderOrder:u,children:[p.jsx("planeGeometry",{args:[1,1]}),h]}),p.jsxs("mesh",{position:[0,0,c],renderOrder:u+1,onPointerDown:b("move"),onPointerOver:()=>v("move"),onPointerOut:O,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),_.map(([x,P,C])=>p.jsxs("mesh",{position:[P,C,E],scale:[w*t[0],w*t[1],t[2]],renderOrder:u+2,onPointerDown:b(x),onPointerOver:()=>v(x),onPointerOut:O,children:[p.jsx("planeGeometry",{args:[1,1]}),g]},x)),D.map(([x,P,C,B])=>p.jsx("group",{position:[P,C,E+.01],rotation:[0,0,B],scale:[R*t[0],R*t[1],t[2]],renderOrder:u+3,onPointerDown:b(x),onPointerOver:()=>v(x),onPointerOut:O,children:p.jsxs("mesh",{renderOrder:u+3,children:[p.jsx("planeGeometry",{args:[1.9,1.9]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]})},x)),p.jsx("group",{position:M,scale:[y*a[0],y*a[1],a[2]],renderOrder:u+5,onPointerDown:b("pivot"),onPointerOver:()=>v("pivot"),onPointerOut:O,children:p.jsxs("group",{rotation:[0,0,Math.PI/4],children:[p.jsxs("mesh",{scale:[1.8,1.8,1],renderOrder:u+5,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{transparent:!0,opacity:0,depthTest:!1,depthWrite:!1})]}),p.jsxs("mesh",{position:[0,0,.002],renderOrder:u+6,children:[p.jsx("planeGeometry",{args:[1,1]}),g]}),p.jsxs("mesh",{scale:[.62,.62,1],position:[0,0,.004],renderOrder:u+7,children:[p.jsx("planeGeometry",{args:[1,1]}),p.jsx("meshBasicMaterial",{color:"#111827",transparent:!0,opacity:1,depthTest:!1,depthWrite:!1,toneMapped:!1})]})]})})]})},j={width:720,height:1280},G=32,Se=.5,F={enabled:!0,position:{x:0,y:0},size:{width:680,height:1230},pivot:[.5,.5],rotation:0,scale2D:{x:1,y:1},referencePixelsPerUnit:G,renderOrder:999,overlay:!0,visible:!0,showTransformGuides:!1},$e=Math.PI/180,fe=(e,t)=>t<=0?e:Math.round(e/t)*t,H=({transform:e,parentSize:t,root:o=j,snapIncrement:n=Se})=>{const r=Math.min(t.width/o.width,t.height/o.height)*(G/e.referencePixelsPerUnit),a=e.size.width*e.scale2D.x*r,i=e.size.height*e.scale2D.y*r,l=fe(e.position.x,n)*r,f=fe(e.position.y,n)*r,h=(e.pivot[0]-.5)*a,g=(e.pivot[1]-.5)*i;return{center:[l-h,f-g,0],size:[a,i,1],rotation:[0,0,e.rotation*$e],pivotOffset:[h/Math.max(a,1e-6),g/Math.max(i,1e-6),0],aspect:a>0&&i>0?Math.abs(a/i):1}},xe=e=>({...F,...e,position:{...F.position,...e==null?void 0:e.position},size:{...F.size,...e==null?void 0:e.size},scale2D:{...F.scale2D,...e==null?void 0:e.scale2D}}),L=e=>Math.round(e*2)/2,pe=e=>Math.min(1,Math.max(0,e)),Q={move:"grab",pivot:"all-scroll",rotateTopLeft:"alias",rotateTopRight:"alias",rotateBottomLeft:"alias",rotateBottomRight:"alias",top:"ns-resize",bottom:"ns-resize",left:"ew-resize",right:"ew-resize",topLeft:"nwse-resize",bottomRight:"nwse-resize",topRight:"nesw-resize",bottomLeft:"nesw-resize"},He=[["topLeft",0,0],["top",.5,0],["topRight",1,0],["right",1,.5],["bottomRight",1,1],["bottom",.5,1],["bottomLeft",0,1],["left",0,.5]],qe=[["rotateTopLeft",-.03,-.03],["rotateTopRight",1.03,-.03],["rotateBottomRight",1.03,1.03],["rotateBottomLeft",-.03,1.03]],Qe=(e,t)=>{const o=H({transform:t,parentSize:{width:e.width,height:e.height}}),n=Math.min(e.width/j.width,e.height/j.height)*(G/Math.max(t.referencePixelsPerUnit,1e-6))||1,s=j.width*n,r=j.height*n,a=e.left+(e.width-s)/2,i=e.top+(e.height-r)/2,l=a+s/2,f=i+r/2,h=o.size[0],g=o.size[1],w=l+o.center[0],y=f-o.center[1];return{centerX:w,centerY:y,height:g,left:w-h/2,scale:n,top:y-g/2,width:h}},Ke=(e,t,o,n)=>{const s=j.width*n,r=j.height*n,a=o.left+(o.width-s)/2,i=o.top+(o.height-r)/2;return{x:(e-(a+s/2))/n,y:(i+r/2-t)/n}},Ze=({color:e="#38bdf8",handleColor:t="#ffffff",onChange:o,transform:n})=>{const s=m.useRef(o);s.current=o;const{gl:r}=ae.useThree(),[a,i]=m.useState(null),l=m.useRef(null),f=m.useRef(null),h=m.useCallback(()=>{i(r.domElement.getBoundingClientRect())},[r.domElement]);m.useEffect(()=>(h(),window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0)}),[h]);const g=m.useMemo(()=>a?Qe(a,n):null,[a,n]),w=m.useCallback(S=>{const c=l.current,E=s.current;if(!c||!E)return;const T=(S.clientX-c.startX)/c.scale,u=-(S.clientY-c.startY)/c.scale,_={x:c.startPointerDesign.x+T,y:c.startPointerDesign.y+u},D={...c.startTransform,position:{...c.startTransform.position},size:{...c.startTransform.size},pivot:[...c.startTransform.pivot]};if(c.handle==="move")D.position={x:L(c.startTransform.position.x+T),y:L(c.startTransform.position.y+u)};else if(c.handle==="pivot"){const b=Math.max(1,c.startTransform.size.width*c.startTransform.scale2D.x),v=Math.max(1,c.startTransform.size.height*c.startTransform.scale2D.y),O=pe(c.startTransform.pivot[0]+T/b),M=pe(c.startTransform.pivot[1]+u/v);D.pivot=[L(O*1e3)/1e3,L(M*1e3)/1e3],D.position={x:L(c.startTransform.position.x+(D.pivot[0]-c.startTransform.pivot[0])*b),y:L(c.startTransform.position.y+(D.pivot[1]-c.startTransform.pivot[1])*v)}}else if(c.handle.startsWith("rotate")){const b=Math.atan2(c.startPointerDesign.y-c.startTransform.position.y,c.startPointerDesign.x-c.startTransform.position.x),v=Math.atan2(_.y-c.startTransform.position.y,_.x-c.startTransform.position.x);D.rotation=L(c.startTransform.rotation+(v-b)*180/Math.PI)}else{const b=c.handle==="left"||c.handle.endsWith("Left"),v=c.handle==="right"||c.handle.endsWith("Right"),O=c.handle==="top"||c.handle.startsWith("top"),M=c.handle==="bottom"||c.handle.startsWith("bottom"),x=v?T*2:b?-T*2:0,P=O?u*2:M?-u*2:0;D.size={width:Math.max(1,L(c.startTransform.size.width+x)),height:Math.max(1,L(c.startTransform.size.height+P))}}E(D)},[]),y=m.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",y)},[w]);m.useEffect(()=>y,[y]);const R=m.useCallback((S,c)=>{!a||!g||!o||(c.preventDefault(),document.body.style.cursor=S==="move"?"grabbing":Q[S],l.current={handle:S,startX:c.clientX,startY:c.clientY,startPointerDesign:Ke(c.clientX,c.clientY,a,g.scale),startTransform:n,scale:g.scale},window.addEventListener("pointermove",w),window.addEventListener("pointerup",y))},[a,g,o,y,n,w]);return m.useEffect(()=>{if(typeof document>"u")return;const S=document.createElement("div");return document.body.appendChild(S),f.current=S,()=>{S.remove(),f.current=null}},[]),m.useEffect(()=>{const S=f.current;if(!S||(S.replaceChildren(),!g))return;const c=12,E=12,T=document.createElement("div");Object.assign(T.style,{position:"fixed",inset:"0",zIndex:"19999",pointerEvents:"none"});const u=document.createElement("div");Object.assign(u.style,{position:"absolute",left:`${g.left}px`,top:`${g.top}px`,width:`${g.width}px`,height:`${g.height}px`,border:`1px solid ${e}`,boxSizing:"border-box",transform:`rotate(${-n.rotation}deg)`,transformOrigin:`${n.pivot[0]*100}% ${(1-n.pivot[1])*100}%`,pointerEvents:o?"auto":"none",cursor:Q.move}),u.addEventListener("pointerdown",b=>R("move",b));const _=(b,v,O,M,x="translate(-50%, -50%)")=>{const P=document.createElement("div");return Object.assign(P.style,{position:"absolute",left:`${v*100}%`,top:`${O*100}%`,width:`${M}px`,height:`${M}px`,cursor:Q[b],transform:x,pointerEvents:"auto"}),P.addEventListener("pointerdown",C=>{C.stopPropagation(),R(b,C)}),P};for(const[b,v,O]of He){const M=_(b,v,O,c);M.style.background=t,u.appendChild(M)}for(const[b,v,O]of qe)u.appendChild(_(b,v,O,26));const D=_("pivot",n.pivot[0],1-n.pivot[1],E,"translate(-50%, -50%) rotate(45deg)");return Object.assign(D.style,{border:"2px solid #ffffff",background:"#111827",boxSizing:"border-box"}),u.appendChild(D),T.appendChild(u),S.appendChild(T),()=>{S.replaceChildren()}},[e,t,g,o,R,n]),null},Y={enabled:!1,targetObjectId:null,orientation:"none",uv:{x:.5,y:.5},vertexNormal:!1,offsetSpace:"local",offsetPosition:{x:0,y:0,z:0},offsetRotation:{x:0,y:0,z:0}},Je=(e,t,o,n)=>{const s=o.clone().sub(t),r=n.clone().sub(t),a=e.clone().sub(t),i=s.x*r.y-r.x*s.y;if(Math.abs(i)<1e-8)return null;const l=(a.x*r.y-r.x*a.y)/i,f=(s.x*a.y-a.x*s.y)/i,h=1-l-f;return h>=-1e-5&&l>=-1e-5&&f>=-1e-5?[h,l,f]:null},et=(e,t,o=!1)=>{const n=new d.Vector2(t.x,t.y),s=new d.Vector2,r=new d.Vector2,a=new d.Vector2,i=new d.Vector3,l=new d.Vector3,f=new d.Vector3,h=new d.Vector3,g=new d.Vector3,w=new d.Vector3;let y=null;if(e.traverse(S=>{var v,O;if(y||!S.isMesh)return;const c=S,E=c.geometry,T=(v=E==null?void 0:E.attributes)==null?void 0:v.position,u=(O=E==null?void 0:E.attributes)==null?void 0:O.uv;if(!T||!u)return;const _=E.attributes.normal,D=E.index,b=M=>(D==null?void 0:D.getX(M))??M;for(let M=0;M<(D?D.count:T.count);M+=3){const x=[b(M),b(M+1),b(M+2)];s.set(u.getX(x[0]),u.getY(x[0])),r.set(u.getX(x[1]),u.getY(x[1])),a.set(u.getX(x[2]),u.getY(x[2]));const P=Je(n,s,r,a);if(P){i.set(0,0,0),l.set(0,0,0),x.forEach((C,B)=>{f.fromBufferAttribute(T,C),i.addScaledVector(f,P[B]),_&&o&&l.addScaledVector(f.fromBufferAttribute(_,C),P[B])}),o||(h.fromBufferAttribute(T,x[0]),g.fromBufferAttribute(T,x[1]),w.fromBufferAttribute(T,x[2]),l.copy(g.sub(h).cross(w.sub(h)).normalize())),y={mesh:c,localPosition:i.clone(),localNormal:l.clone().normalize()};break}}}),y)return y;const R=new d.Box3().setFromObject(e);return{mesh:e,localPosition:e.worldToLocal(R.getCenter(new d.Vector3)),localNormal:new d.Vector3(0,1,0)}},tt=e=>({position:e.mesh.localToWorld(e.localPosition.clone()),normal:e.localNormal.clone().transformDirection(e.mesh.matrixWorld).normalize()}),N=(e,t=0)=>Number.isFinite(e)?e:t,K=new d.Vector3,Z=new d.Vector3,ue=new d.Matrix4,J=new d.Quaternion,ee=new d.Quaternion,ot=new d.Vector3(0,1,0),nt=e=>{e.position.set(0,0,0),e.quaternion.identity()},rt=({settings:e,source:t,surface:o})=>{e.orientation==="positionAndDirection"?(ue.lookAt(o.position,o.position.clone().add(o.normal),ot),J.setFromRotationMatrix(ue)):J.identity(),t.quaternion.copy(J),Z.set(N(e.offsetPosition.x),N(e.offsetPosition.y),N(e.offsetPosition.z)),e.offsetSpace==="local"&&Z.applyQuaternion(t.quaternion),K.copy(o.position).add(Z),t.parent&&t.parent.worldToLocal(K),t.position.copy(K),ee.setFromEuler(new d.Euler(N(e.offsetRotation.x)*Math.PI/180,N(e.offsetRotation.y)*Math.PI/180,N(e.offsetRotation.z)*Math.PI/180)),e.offsetSpace==="local"?t.quaternion.multiply(ee):t.quaternion.premultiply(ee)},st=({target:e,settings:t,children:o})=>{const n=ke.useResolveRuntimeObject(),s=m.useRef(null),r=m.useRef(null),a=()=>{s.current&&nt(s.current)};return m.useEffect(()=>{r.current=null},[t.targetObjectId]),m.useEffect(()=>{t.enabled||a()},[t.enabled]),ae.useFrame(()=>{const i=e??n(t.targetObjectId);if(!t.enabled||!i||!s.current){(!t.enabled||!i)&&a();return}const l=`${t.uv.x}:${t.uv.y}:${t.vertexNormal?"vertex":"face"}`;(!r.current||r.current.target!==i||r.current.key!==l)&&(r.current={key:l,target:i,surface:et(i,t.uv,t.vertexNormal)}),i.updateWorldMatrix(!0,!0);const f=tt(r.current.surface);rt({source:s.current,surface:f,settings:t})}),m.createElement("group",{ref:s},o)},A=e=>Math.round(e*2)/2,he=e=>Math.min(1,Math.max(0,e));function it(e){return Math.min(e.width/j.width,e.height/j.height)||1}function at({resolved:e,transform:t}){return e.size[0]/Math.max(Math.abs(t.size.width*t.scale2D.x),1e-6)||1}function ct({parent:e,resolved:t,transform:o}){const r=16*((Math.min(e.width/j.width,e.height/j.height)||1)*(G/Math.max(o.referencePixelsPerUnit,1e-6))),a=.028;return[r/Math.max(Math.abs(t.size[0])*a,1e-6),r/Math.max(Math.abs(t.size[1])*a,1e-6),1]}function lt({drag:e,clientX:t,clientY:o,designScale:n}){const s=(t-e.startX)/n,r=-(o-e.startY)/n,a={x:e.startPointerDesign.x+s,y:e.startPointerDesign.y+r},i={...e.startTransform,position:{...e.startTransform.position},size:{...e.startTransform.size},pivot:[...e.startTransform.pivot]};if(e.handle==="move")return i.position={x:A(e.startTransform.position.x+s),y:A(e.startTransform.position.y+r)},i;if(e.handle==="pivot"){const R=Math.max(1,e.startTransform.size.width*e.startTransform.scale2D.x),S=Math.max(1,e.startTransform.size.height*e.startTransform.scale2D.y),c=he(e.startTransform.pivot[0]+s/R),E=he(e.startTransform.pivot[1]+r/S);return i.pivot=[A(c*1e3)/1e3,A(E*1e3)/1e3],i.position={x:A(e.startTransform.position.x+(i.pivot[0]-e.startTransform.pivot[0])*R),y:A(e.startTransform.position.y+(i.pivot[1]-e.startTransform.pivot[1])*S)},i}if(e.handle.startsWith("rotate")){const R=Math.atan2(e.startPointerDesign.y-e.startTransform.position.y,e.startPointerDesign.x-e.startTransform.position.x),S=Math.atan2(a.y-e.startTransform.position.y,a.x-e.startTransform.position.x);return i.rotation=A(e.startTransform.rotation+(S-R)*180/Math.PI),i}const l=e.handle==="left"||e.handle.endsWith("Left"),f=e.handle==="right"||e.handle.endsWith("Right"),h=e.handle==="top"||e.handle.startsWith("top"),g=e.handle==="bottom"||e.handle.startsWith("bottom"),w=f?s*2:l?-s*2:0,y=h?r*2:g?-r*2:0;return i.size={width:Math.max(1,A(e.startTransform.size.width+w)),height:Math.max(1,A(e.startTransform.size.height+y))},i}function ge({transform:e,guideLayer:t,guideColor:o,onChange:n,children:s}){const r=$.useScreenSpace(),{size:a}=ae.useThree(),i=m.useRef(n);i.current=n;const l=m.useRef(null),f=m.useMemo(()=>H({transform:e,parentSize:r}),[r,e]),h=it(a),g=m.useRef(h);g.current=h;const w=at({resolved:f,transform:e}),y=m.useCallback(E=>{const T=l.current,u=i.current;!T||!u||u(lt({drag:T,clientX:E.clientX,clientY:E.clientY,designScale:g.current}))},[]),R=m.useCallback(()=>{l.current=null,document.body.style.cursor="",window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",R)},[y]);m.useEffect(()=>R,[R]);const S=m.useCallback((E,T)=>{n&&(l.current={handle:E,startX:T.nativeEvent.clientX,startY:T.nativeEvent.clientY,startPointerDesign:{x:T.point.x/w,y:T.point.y/w},startTransform:e},window.addEventListener("pointermove",y),window.addEventListener("pointerup",R))},[n,R,e,w,y]),c=m.useMemo(()=>ct({parent:r,resolved:f,transform:e}),[r,f,e]);return p.jsx("group",{position:[f.center[0]+(e.pivot[0]-.5)*f.size[0],f.center[1]+(e.pivot[1]-.5)*f.size[1],0],rotation:f.rotation,children:p.jsx("group",{position:[(.5-e.pivot[0])*f.size[0],(.5-e.pivot[1])*f.size[1],0],scale:f.size,children:p.jsxs($.ScreenRectAspectContext.Provider,{value:f.aspect,children:[s,e.showTransformGuides&&t==="scene"?p.jsx(Ve,{color:o,controlScale:c,onHandlePointerDown:n?S:void 0,pivot:e.pivot,pivotScale:c,renderOrder:e.renderOrder+1}):null,e.showTransformGuides&&t==="overlay"?p.jsx(Ze,{color:o,onChange:n,transform:e}):null]})})})}const U={tint:"#dff6ff",opacity:.28,frost:.35,highlight:.55},ce=e=>({...U,...e,opacity:d.MathUtils.clamp((e==null?void 0:e.opacity)??U.opacity,0,1),frost:d.MathUtils.clamp((e==null?void 0:e.frost)??U.frost,0,1),highlight:d.MathUtils.clamp((e==null?void 0:e.highlight)??U.highlight,0,1)}),dt=`
|
|
2
2
|
varying vec2 vPosition;
|
|
3
3
|
void main() {
|
|
4
4
|
vPosition = position.xy;
|
package/dist/scene-object.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./renderPasses-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./renderPasses-KUJUSevp.cjs"),t=require("./renderGroups-jSUOY1Oq.cjs");exports.addComponentToObject=e.addComponentToObject;exports.componentDefaults=e.componentDefaults;exports.createDefaultComponent=e.createDefaultComponent;exports.createDefaultFaceMeshRendererSettings=e.createDefaultFaceMeshRendererSettings;exports.createDefaultMaterialSettings=e.createDefaultMaterialSettings;exports.createDefaultMeshRendererSettings=e.createDefaultMeshRendererSettings;exports.createDefaultScreenImageSettings=e.createDefaultScreenImageSettings;exports.createDefaultScreenShapeSettings=e.createDefaultScreenShapeSettings;exports.createDefaultScreenTextSettings=e.createDefaultScreenTextSettings;exports.createDefaultScreenTransformSettings=e.createDefaultScreenTransformSettings;exports.createDefaultTextureSettings=e.createDefaultTextureSettings;exports.createDefaultTransformSettings=e.createDefaultTransformSettings;exports.createOrderedComponentsSelector=e.createOrderedComponentsSelector;exports.createSceneComponentId=e.createSceneComponentId;exports.createSceneId=e.createSceneId;exports.createSceneObject=e.createSceneObject;exports.createSceneObjectId=e.createSceneObjectId;exports.deleteSceneObject=e.deleteSceneObject;exports.getOrderedComponents=e.getOrderedComponents;exports.getSceneObjectChildren=e.getSceneObjectChildren;exports.moveComponent=e.moveComponent;exports.removeComponent=e.removeComponent;exports.replaceSceneComponent=e.replaceSceneComponent;exports.replaceSceneObject=e.replaceSceneObject;exports.setSceneObjectParent=e.setSceneObjectParent;exports.setSceneObjectParentPreserveWorldTransform=e.setSceneObjectParentPreserveWorldTransform;exports.setSceneObjectVisible=e.setSceneObjectVisible;exports.DEFAULT_RENDER_GROUP_IDS=t.DEFAULT_RENDER_GROUP_IDS;exports.RENDER_GROUP_POLICIES=t.RENDER_GROUP_POLICIES;exports.createRenderPlan=t.createRenderPlan;exports.getDefaultRenderGroupId=t.getDefaultRenderGroupId;exports.migrateToRenderGroups=t.migrateToRenderGroups;exports.moveObjectToGroup=t.moveObjectToGroup;exports.reorderObjectWithinGroup=t.reorderObjectWithinGroup;exports.reorderRenderGroup=t.reorderRenderGroup;exports.validateGroupCompatibility=t.validateGroupCompatibility;
|
package/dist/scene-object.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a, c as r, b as s, d as n, e as c, f as o, g as S, i as l, h as d, j as m, k as p, l as i, q as u, m as f, n as D, o as g, p as O, r as b, s as R, t as j, u as C, v as T, w as G, x as I, y as v, z as P, A as h } from "./renderPasses-
|
|
2
|
-
import { D as x, R as _, c as M, g as U, m as y, a as A, r as F, b as L, v as N } from "./renderGroups-
|
|
1
|
+
import { a, c as r, b as s, d as n, e as c, f as o, g as S, i as l, h as d, j as m, k as p, l as i, q as u, m as f, n as D, o as g, p as O, r as b, s as R, t as j, u as C, v as T, w as G, x as I, y as v, z as P, A as h } from "./renderPasses-CLlYRdMk.js";
|
|
2
|
+
import { D as x, R as _, c as M, g as U, m as y, a as A, r as F, b as L, v as N } from "./renderGroups-CPWUX6z9.js";
|
|
3
3
|
export {
|
|
4
4
|
x as DEFAULT_RENDER_GROUP_IDS,
|
|
5
5
|
_ as RENDER_GROUP_POLICIES,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const s=require("react"),u=require("./index-
|
|
1
|
+
"use strict";const s=require("react"),u=require("./index-Da7uycur.cjs"),o=()=>u.useXRContext().session.store,n=e=>t=>e.subscribe(t),c=()=>{const e=o();return s.useSyncExternalStore(n(e),()=>e.getSnapshot().ready,()=>!1)},a=()=>{const e=o();return s.useSyncExternalStore(n(e),()=>e.getSnapshot().error,()=>{})},i=()=>{const e=o();return s.useSyncExternalStore(n(e),()=>e.getSnapshot().cameraTexture,()=>{})},S=()=>{const e=o(),t=s.useSyncExternalStore(n(e),()=>e.getSnapshot().renderWidth,()=>0),r=s.useSyncExternalStore(n(e),()=>e.getSnapshot().renderHeight,()=>0);return s.useMemo(()=>({width:t,height:r}),[t,r])},l=e=>{const t=o(),r=s.useSyncExternalStore(n(t),()=>t.getSnapshot().pipeline.get(e)??null,()=>null);return s.useMemo(()=>r?r.getModelNode():null,[r])},p=()=>{const e=o(),t=s.useSyncExternalStore(n(e),()=>e.getSnapshot().pipeline,()=>e.getSnapshot().pipeline);return s.useMemo(()=>Array.from(t.keys()),[t])};exports.useXRCameraTexture=i;exports.useXRError=a;exports.useXRModelNode=l;exports.useXRPipelineSnapshot=p;exports.useXRReady=c;exports.useXRRenderSize=S;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as j, u as z, c as v, X as L } from "./index-
|
|
1
|
+
import { l as j, u as z, c as v, X as L } from "./index-BMeBJ0dV.js";
|
|
2
2
|
import { jsx as n, jsxs as u } from "react/jsx-runtime";
|
|
3
3
|
import { createPortal as W } from "react-dom";
|
|
4
4
|
import { useState as y, useRef as $, useMemo as F, useEffect as f } from "react";
|