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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/GROUNDING.md +34 -9
  2. package/dist/{DebuggerUI-Cq28c18s.js → DebuggerUI-xp4bg3gH.js} +1 -1
  3. package/dist/{FaceMeshRenderer-6t8OsQhK.js → FaceMeshRenderer-CALA4k49.js} +2 -2
  4. package/dist/{FaceMeshRenderer-lQLhYIW-.cjs → FaceMeshRenderer-D4PFqsb3.cjs} +1 -1
  5. package/dist/{FaceRetouch-DtNl8-4e.cjs → FaceRetouch-Bq2rtPlV.cjs} +1 -1
  6. package/dist/{FaceRetouch-CDrL0pXg.js → FaceRetouch-DF5UsOsZ.js} +29 -29
  7. package/dist/components/MeshRenderer/index.d.ts +1 -0
  8. package/dist/components/ScreenImage/source.d.ts +3 -0
  9. package/dist/contexts-D5TQcwmv.js +660 -0
  10. package/dist/contexts-Dv1SA0bS.cjs +1 -0
  11. package/dist/debug-ui.cjs +3 -3
  12. package/dist/debug-ui.js +1246 -1205
  13. package/dist/entries/low-level.d.ts +3 -0
  14. package/dist/face-effects.cjs +1 -1
  15. package/dist/face-effects.js +3 -3
  16. package/dist/{getFaceInfo-hUKMLFcr.js → getFaceInfo-Cjcgcc4w.js} +1 -1
  17. package/dist/{getFaceInfo-CyPAKh3h.cjs → getFaceInfo-oQcP40Ha.cjs} +1 -1
  18. package/dist/hooks/useXRModel.d.ts +5 -0
  19. package/dist/{index-DSpzjuqd.cjs → index-Be-S7uSm.cjs} +1 -1
  20. package/dist/index-DdWBnI7A.cjs +17 -0
  21. package/dist/{index-Di70KWuY.js → index-DpVIEBHw.js} +844 -825
  22. package/dist/index-DqhqBi7O.cjs +1 -0
  23. package/dist/{index-UC0Ux38E.js → index-HxT9XEuh.js} +1 -1
  24. package/dist/index-N7C6fNah.js +214 -0
  25. package/dist/index-UU5ODHGU.cjs +1 -0
  26. package/dist/{index-BgQAX8rs.js → index-YMUaJU7U.js} +122 -119
  27. package/dist/{internal-DuMPpcbp.js → internal-D7NxAsc6.js} +2 -2
  28. package/dist/internal.js +1 -1
  29. package/dist/low-level.cjs +1 -1
  30. package/dist/low-level.js +399 -490
  31. package/dist/main.cjs +1 -1
  32. package/dist/main.js +26 -26
  33. package/dist/{renderGroups-C9QJrAXu.js → renderGroups-JEXqSACh.js} +1 -1
  34. package/dist/{renderGroups-Dvm1J4lW.cjs → renderGroups-uXXsFpvw.cjs} +1 -1
  35. package/dist/{renderPasses-CT5iBwtg.cjs → renderPasses-CVWt0t8m.cjs} +2 -2
  36. package/dist/{renderPasses-CjgG_6kQ.js → renderPasses-CdGZeHHL.js} +4 -4
  37. package/dist/scene-object.cjs +1 -1
  38. package/dist/scene-object.js +2 -2
  39. package/dist/{selectors-Dw3C-gSk.js → selectors-twqYByYZ.js} +3 -3
  40. package/dist/texture/animatedTexture.d.ts +2 -0
  41. package/dist/texture/gifReader.d.ts +17 -0
  42. package/dist/texture/gifTextureSource.d.ts +16 -0
  43. package/dist/tracking.cjs +1 -1
  44. package/dist/tracking.js +8 -8
  45. package/dist/{useFaceInfo-CwsHZedC.js → useFaceInfo-DOJCGlDG.js} +2 -2
  46. package/dist/{useFaceInfo-C-WfMlYp.cjs → useFaceInfo-DSUmuzzO.cjs} +1 -1
  47. package/dist/{useFaceResults-VcFdOUFV.cjs → useFaceResults-B1BSGUAW.cjs} +1 -1
  48. package/dist/{useFaceResults-CkFc1egZ.js → useFaceResults-CBmhT5E8.js} +1 -1
  49. package/docs/api/screen-image.mdx +27 -3
  50. package/docs/api/texture-sources.mdx +25 -6
  51. package/docs/texture-api-consumer.md +26 -0
  52. package/package.json +3 -3
  53. package/dist/contexts-BKvTIayr.cjs +0 -1
  54. package/dist/contexts-Bk5zz_VR.js +0 -214
  55. package/dist/index-82aENaRq.cjs +0 -1
  56. package/dist/index-CEc1CAmB.cjs +0 -1
  57. package/dist/index-CTHeBQOs.js +0 -178
  58. package/dist/index-DzEzkBIH.cjs +0 -17
@@ -1,178 +0,0 @@
1
- import { createContext as k, useContext as R, Suspense as C, useMemo as _ } from "react";
2
- import { jsx as i, jsxs as b } from "react/jsx-runtime";
3
- import { useGLTF as x } from "@react-three/drei";
4
- import { AdditiveBlending as T, SubtractiveBlending as B, MultiplyBlending as N, NoBlending as P, NormalBlending as U, NeverDepth as W, LessDepth as q, EqualDepth as v, GreaterDepth as L, NotEqualDepth as G, GreaterEqualDepth as I, AlwaysDepth as K, LessEqualDepth as z, BackSide as F, DoubleSide as H, FrontSide as V } from "three";
5
- import { M as Y } from "./index-BgQAX8rs.js";
6
- const J = k(null), ce = () => {
7
- const e = R(J);
8
- if (!e)
9
- throw new Error("useScreenSpace must be used within ScreenSpaceUI");
10
- return e;
11
- }, Q = k(null), ie = () => R(Q) ?? 1, fe = {
12
- enabled: !0,
13
- mesh: "cube",
14
- material: {
15
- type: "standard",
16
- color: "#ffffff",
17
- opacity: 1,
18
- wireframe: !1,
19
- roughness: 0.42,
20
- metalness: 0.08
21
- },
22
- shadowMode: "off",
23
- visible: !0
24
- }, h = {
25
- depthTest: !0,
26
- depthWrite: !0,
27
- depthFunc: "lessEqual",
28
- colorWrite: !0,
29
- colorMask: {
30
- r: !0,
31
- g: !0,
32
- b: !0,
33
- a: !0
34
- },
35
- cullMode: "back",
36
- blendMode: "normal",
37
- polygonOffset: {
38
- enabled: !1,
39
- factor: 0,
40
- units: 0
41
- }
42
- }, M = (e) => ({
43
- ...h,
44
- ...e,
45
- colorMask: {
46
- ...h.colorMask,
47
- ...e == null ? void 0 : e.colorMask
48
- },
49
- polygonOffset: {
50
- ...h.polygonOffset,
51
- ...e == null ? void 0 : e.polygonOffset
52
- }
53
- }), X = (e) => e === "never" ? W : e === "less" ? q : e === "equal" ? v : e === "greater" ? L : e === "notEqual" ? G : e === "greaterEqual" ? I : e === "always" ? K : z, Z = (e) => e === "front" ? F : e === "off" ? H : V, $ = (e) => e === "additive" ? T : e === "subtractive" ? B : e === "multiply" ? N : e === "none" ? P : U, E = (e) => {
54
- const r = M(e), o = r.colorWrite && (r.colorMask.r || r.colorMask.g || r.colorMask.b || r.colorMask.a);
55
- return {
56
- depthTest: r.depthTest,
57
- depthWrite: r.depthWrite,
58
- depthFunc: X(r.depthFunc),
59
- colorWrite: o,
60
- side: Z(r.cullMode),
61
- blending: $(r.blendMode),
62
- polygonOffset: r.polygonOffset.enabled,
63
- polygonOffsetFactor: r.polygonOffset.factor,
64
- polygonOffsetUnits: r.polygonOffset.units
65
- };
66
- }, S = (e, r) => {
67
- const o = M(r);
68
- return e < 1 || o.blendMode !== "normal" && o.blendMode !== "none";
69
- }, D = (e) => e.colorWrite && (!e.colorMask.r || !e.colorMask.g || !e.colorMask.b || !e.colorMask.a), d = "__vincenttPreviousColorMask", j = (e, r) => {
70
- const o = e.onBeforeRender.bind(e), p = e.onAfterRender.bind(e);
71
- if (!D(r)) {
72
- e.onBeforeRender = o, e.onAfterRender = p;
73
- return;
74
- }
75
- e.onBeforeRender = (a, c, m, f, l, t) => {
76
- o(a, c, m, f, l, t);
77
- const s = a.getContext();
78
- e.userData[d] = s.getParameter(s.COLOR_WRITEMASK), s.colorMask(
79
- r.colorMask.r,
80
- r.colorMask.g,
81
- r.colorMask.b,
82
- r.colorMask.a
83
- );
84
- }, e.onAfterRender = (a, c, m, f, l, t) => {
85
- const s = e.userData[d];
86
- s && (a.getContext().colorMask(...s), delete e.userData[d]), p(a, c, m, f, l, t);
87
- };
88
- }, w = (e) => ({
89
- castShadow: e === "cast" || e === "castReceive",
90
- receiveShadow: e === "receive" || e === "castReceive"
91
- }), ee = ({ mesh: e }) => e === "sphere" ? /* @__PURE__ */ i("sphereGeometry", { args: [0.85, 48, 32] }) : e === "plane" ? /* @__PURE__ */ i("planeGeometry", { args: [1.6, 1.6] }) : /* @__PURE__ */ i("boxGeometry", { args: [1.4, 1.4, 1.4] }), re = ({
92
- url: e,
93
- nodeName: r,
94
- settings: o,
95
- renderOrder: p
96
- }) => {
97
- const { scene: a } = x(e), c = _(() => {
98
- const f = a.clone(!0), l = w(o.shadowMode), t = Math.min(1, Math.max(0, o.material.opacity)), s = E(o.material.renderState), A = S(t, o.material.renderState);
99
- return f.traverse((O) => {
100
- const n = O;
101
- if (!n.isMesh || !n.material) return;
102
- n.material = Array.isArray(n.material) ? n.material.map((u) => u.clone()) : n.material.clone(), n.castShadow = l.castShadow, n.receiveShadow = l.receiveShadow, (Array.isArray(n.material) ? n.material : [n.material]).forEach((u) => {
103
- var y;
104
- if (!u) return;
105
- const g = u;
106
- g.wireframe = o.material.wireframe, u.opacity = t, u.transparent = A, Object.assign(u, s), (y = g.color) == null || y.set(o.material.color), u.needsUpdate = !0;
107
- }), j(n, M(o.material.renderState));
108
- }), f;
109
- }, [
110
- a,
111
- o.material.color,
112
- o.material.opacity,
113
- o.material.renderState,
114
- o.material.wireframe,
115
- o.shadowMode
116
- ]), m = r ? c.getObjectByName(r) : c;
117
- return /* @__PURE__ */ i("group", { renderOrder: p, children: /* @__PURE__ */ i("primitive", { object: m ?? c }) });
118
- }, ue = ({ renderOrder: e, value: r }) => {
119
- if (!r.enabled || !r.visible) return null;
120
- if (r.assetUrl)
121
- return /* @__PURE__ */ i(C, { fallback: null, children: /* @__PURE__ */ i(
122
- re,
123
- {
124
- url: r.assetUrl,
125
- nodeName: r.assetNodeName,
126
- settings: r,
127
- renderOrder: e
128
- }
129
- ) });
130
- const o = Math.min(1, Math.max(0, r.material.opacity)), p = {
131
- color: r.material.color,
132
- transparent: S(o, r.material.renderState),
133
- opacity: o,
134
- wireframe: r.material.wireframe,
135
- ...E(r.material.renderState)
136
- };
137
- return /* @__PURE__ */ b(
138
- "mesh",
139
- {
140
- ...w(r.shadowMode),
141
- onBeforeRender: (a, c, m, f, l) => {
142
- const t = M(r.material.renderState);
143
- if (!D(t)) return;
144
- const s = a.getContext();
145
- l.userData[d] = s.getParameter(
146
- s.COLOR_WRITEMASK
147
- ), s.colorMask(
148
- t.colorMask.r,
149
- t.colorMask.g,
150
- t.colorMask.b,
151
- t.colorMask.a
152
- );
153
- },
154
- onAfterRender: (a, c, m, f, l) => {
155
- const t = l.userData[d];
156
- t && (a.getContext().colorMask(...t), delete l.userData[d]);
157
- },
158
- renderOrder: e,
159
- children: [
160
- /* @__PURE__ */ i(ee, { mesh: r.mesh }),
161
- /* @__PURE__ */ i(Y, { settings: r.material, materialProps: p })
162
- ]
163
- }
164
- );
165
- };
166
- export {
167
- fe as D,
168
- ue as M,
169
- Q as S,
170
- ie as a,
171
- h as b,
172
- X as c,
173
- Z as d,
174
- J as e,
175
- $ as g,
176
- M as n,
177
- ce as u
178
- };
@@ -1,17 +0,0 @@
1
- "use strict";const l=require("react/jsx-runtime"),J=require("@react-three/fiber"),C=require("react"),D=require("three"),K=require("./index-CEc1CAmB.cjs"),te=require("./FaceMeshRenderer-lQLhYIW-.cjs"),T=require("./renderPasses-CT5iBwtg.cjs"),Ee=require("./contexts-BKvTIayr.cjs"),Xe=require("./index-82aENaRq.cjs"),Pe=require("./index-DSpzjuqd.cjs"),rt=require("./useFaceInfo-C-WfMlYp.cjs"),ce=require("./index-D4bLzBr6.cjs"),it=require("@react-three/drei");function st(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const p=st(D),Z={width:720,height:1280},at=(t=[.5,.5])=>[t[0]*2-1,t[1]*2-1],Ae=({position:t=[0,0],size:e=[1,1]})=>{const n=e[0]/2,r=e[1]/2;return{left:t[0]-n,right:t[0]+n,top:t[1]+r,bottom:t[1]-r}},ot=({position:t=[0,0],size:e=[Z.width,Z.width],canvasSize:n=Z})=>{const r=n.width/2||Z.width/2,i=n.height/2||Z.height/2;return Ae({position:[t[0]/r,t[1]/i],size:[e[0]/r,e[1]/i]})},je=({coordinateSpace:t="normalized",canvasSize:e=Z,position:n,size:r,fallbackAnchors:i})=>i||(!n&&!r?Ae({}):t==="canvas"?ot({position:n,size:r,canvasSize:e}):Ae({position:n,size:r})),he=(t,e)=>{if(!Number.isFinite(t)||t<=0)throw new RangeError(`${e} must be positive`);return t},ie=(t,e)=>{const n=he(e.width,"root.width"),r=he(e.height,"root.height");return!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<=0||t.height<=0?0:Math.min(t.width/n,t.height/r)},Ce=(t,e,n,r)=>{const i=ie(e,n);return i===0?Object.assign(r,{x:0,y:0}):(r.x=(t.x-e.width*.5)/i,r.y=(e.height*.5-t.y)/i,r)},me=(t,e,n,r)=>{const i=ie(e,n);return r.x=t.x*i+e.width*.5,r.y=e.height*.5-t.y*i,r},Ge=({parentSize:t,referencePixelsPerUnit:e=T.DEFAULT_REFERENCE_PIXELS_PER_UNIT,root:n=T.DEFAULT_SCREEN_TRANSFORM_ROOT})=>ie(t,n)*(T.DEFAULT_REFERENCE_PIXELS_PER_UNIT/he(e,"referencePixelsPerUnit")),lt=(t,e)=>t*Ge(e),ct=(t,e)=>{const n=Ge(e);return n===0?0:t/n},At=({point:t,rect:e,root:n=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0}})=>Ce({x:t.x-e.left,y:t.y-e.top},e,n,r),ht=({point:t,rect:e,root:n=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0}})=>(me(t,e,n,r),r.x+=e.left,r.y+=e.top,r),He=({point:t,root:e=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:n={x:0,y:0},viewportSize:r})=>Ce({x:t.x*r.width,y:t.y*r.height},r,e,n),dt=({point:t,root:e=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:n={x:0,y:0},viewportSize:r})=>r.width<=0||r.height<=0?Object.assign(n,{x:0,y:0}):(me(t,r,e,n),n.x/=r.width,n.y/=r.height,n),gt=({layout:t,mirrored:e=!1,point:n,root:r=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:i={x:0,y:0}})=>{if(t.scale<=0)return Object.assign(i,{x:0,y:0});const s=t.offsetX+n.x*t.scale;return Ce({x:e?t.destination.width-s:s,y:t.offsetY+n.y*t.scale},t.destination,r,i)},ft=({layout:t,mirrored:e=!1,point:n,root:r=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:i={x:0,y:0}})=>{if(t.scale<=0)return Object.assign(i,{x:0,y:0});me(n,t.destination,r,i);const s=e?t.destination.width-i.x:i.x;return i.x=(s-t.offsetX)/t.scale,i.y=(i.y-t.offsetY)/t.scale,i},ae=new D.Vector3,we=new D.Vector2,ke=new D.Raycaster,ut=({camera:t,point:e,root:n=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r={x:0,y:0,depth:0},viewportSize:i})=>{const s=ie(i,n);return ae.set(e.x,e.y,e.z).project(t),r.x=s===0?0:ae.x*i.width/(2*s),r.y=s===0?0:ae.y*i.height/(2*s),r.depth=ae.z,r},St=({camera:t,point:e,root:n=T.DEFAULT_SCREEN_TRANSFORM_ROOT,target:r=new D.Ray,viewportSize:i})=>{const s=ie(i,n);return we.set(i.width<=0?0:e.x*s*2/i.width,i.height<=0?0:e.y*s*2/i.height),ke.setFromCamera(we,t),r.copy(ke.ray)},Je=({children:t,depth:e=0})=>{const{camera:n,size:r}=J.useThree(),i=C.useMemo(()=>{if(!n.isPerspectiveCamera)return{width:10,height:10};const s=n,a=Math.abs(s.position.z-e),c=s.fov*Math.PI/180,o=2*Math.tan(c/2)*a;return{width:o*(r.width/r.height),height:o}},[n,r,e]);return l.jsx(K.ScreenSpaceContext.Provider,{value:i,children:l.jsx("group",{position:[0,0,e],children:t})})},Ne=C.forwardRef(({texture:t,name:e,overlay:n,opacity:r,position:i,rotation:s,scale:a,visible:c,renderOrder:o},h)=>l.jsxs("mesh",{ref:h,name:e,position:i,rotation:s,scale:a,visible:c,renderOrder:o,children:[l.jsx("planeGeometry",{args:[1,1]}),l.jsx("meshBasicMaterial",{map:t,transparent:!0,opacity:r,depthTest:!n,depthWrite:!n})]}));Ne.displayName="TextLabelMesh";const Et={color:"#ffffff",strokeWidth:0,strokeOpacity:1,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowOpacity:1,fontWeight:"bold",fontStyle:"normal",fontFamily:"Arial, sans-serif",fontSize:48,textAlign:"center",verticalAlign:"center",minFontSize:12,letterSpacing:0,lineSpacing:.3,bgColor:"rgba(20,40,110,0.88)",bgFillMode:"solid",bgOpacity:1,bgFit:"full",bgTextureFit:"cover",bgTextureFlipX:!1,bgTextureFlipY:!1,borderWidth:0,borderRadius:24,padding:32,aspect:2.5,resolution:512,opacity:1,underline:!1,strikethrough:!1,bendPreset:"arc",bendStrength:0},de=t=>{C.useEffect(()=>()=>{t==null||t.dispose()},[t])};function Ct(t,e,n){return n==="left"?e:n==="right"?t-e:t/2}function mt(t,e,n,r,i){return i==="top"?e+n/2:i==="bottom"?t-e-r+n/2:t/2-(r-n)/2}function vt(t,e,n,r){return r==="full"||n==="left"?0:n==="right"?t-e:(t-e)/2}function ze(t,e,n,r){return`${t} ${e} ${n}px ${r}`}function re(t,e){const n=Math.max(0,Math.min(e,1));return t*n*.08}function Ue(t,e){const n=Math.max(0,Math.min(e,1));return t*(1.2+n*.6)}function Ke(t,e){"letterSpacing"in t&&(t.letterSpacing=`${e}px`)}function Ve(t){"letterSpacing"in t&&(t.letterSpacing="0px")}function ee(t,e,n){Ke(t,n);const r=t.measureText(e).width;return Ve(t),r}function ge(t,e,n,r){return Math.max(1,Math.floor((t-e*2)/Ue(n,r)))}function bt(t,e,n,r,i){return e.length<=r&&e.every(s=>ee(t,s,i)<=n)}function fe(t,e,n,r,i,s,a,c){t.font=ze(r,i,s,a);const o=e.split(" "),h=[];let A="";for(const g of o){const f=A?`${A} ${g}`:g;ee(t,f,c)>n&&A?(h.push(A),A=g):A=f}return A&&h.push(A),h}function Fe(t,e,n,r,i,s,a,c){const h=e.split(/\r?\n/).flatMap(A=>A.trim().length===0?[""]:fe(t,A,n,r,i,s,a,c));return h.length>0?h:[e]}function qe(t,e,n,r,i){const s=r?"...":"";let a=e.trimEnd();for(;a.length>0&&ee(t,`${a}${s}`,i)>n;)a=a.slice(0,-1).trimEnd();return`${a}${s}`}function ue(t,e,n,r,i){return e.map((s,a)=>{if(ee(t,s,i)<=n)return s;const c=a===e.length-1;return qe(t,s,n,r==="ellipsis"&&c,i)})}function Le(t,e,n,r,i,s){if(e.length<=n)return ue(t,e,r,i?"ellipsis":"clip",s);const a=e.slice(0,n),c=a[n-1];return a[n-1]=qe(t,c,r,i,s),ue(t,a,r,i?"ellipsis":"clip",s)}function It(t){const{ctx:e,text:n,explicitLines:r,maxWidth:i,maxHeight:s,padding:a,fontStyle:c,fontWeight:o,fontSize:h,fontFamily:A,letterSpacing:g,lineSpacing:f,overflow:S,resizeToFit:m,minFontSize:E}=t;let u=h,v=re(u,g),I=r??Fe(e,n,i,c,o,u,A,v),b=ge(s,a,u,f);const B=m===!0||S==="shrink";for(;B&&!bt(e,I,i,b,v)&&u>E&&(u=Math.max(E,u-4),v=re(u,g),I=r??Fe(e,n,i,c,o,u,A,v),b=ge(s,a,u,f),u!==E););return S==="ellipsis"?I=Le(e,I,b,i,!0,v):S==="clamp"||S==="shrink"?I=Le(e,I,b,i,!1,v):S!=="clip"&&(I=ue(e,I,i,void 0,v)),{fontSize:u,lines:I}}function Tt(t){const{ctx:e,text:n,maxWidth:r,maxHeight:i,padding:s,fontStyle:a,fontWeight:c,fontSize:o,fontFamily:h,letterSpacing:A,lineSpacing:g}=t;let f=o,S=fe(e,n,r,a,c,f,h,re(f,A));const m=ge(i,s,f,g);return S.length>m&&(f=Math.max(12,Math.round(f*.75)),S=fe(e,n,r,a,c,f,h,re(f,A))),{fontSize:f,lines:S}}function Se(t,e){return typeof OffscreenCanvas<"u"?new OffscreenCanvas(t,e):(()=>{const n=document.createElement("canvas");return n.width=t,n.height=e,n})()}function xt(t,e){const n=e.width-e.padding*2,i=Array.isArray(e.lines)||e.text.includes(`
2
- `)||e.overflow!==void 0||e.resizeToFit!==void 0?It({ctx:t,text:e.text,explicitLines:e.lines,maxWidth:n,maxHeight:e.height,padding:e.padding,fontStyle:e.fontStyle,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFamily:e.fontFamily,overflow:e.overflow,resizeToFit:e.resizeToFit,minFontSize:e.minFontSize,letterSpacing:e.letterSpacing,lineSpacing:e.lineSpacing}):Tt({ctx:t,text:e.text,maxWidth:n,maxHeight:e.height,padding:e.padding,fontStyle:e.fontStyle,fontWeight:e.fontWeight,fontSize:e.fontSize,fontFamily:e.fontFamily,letterSpacing:e.letterSpacing,lineSpacing:e.lineSpacing}),s=i.fontSize,a=i.lines;t.font=ze(e.fontStyle,e.fontWeight,s,e.fontFamily);const c=re(s,e.letterSpacing),o=Ue(s,e.lineSpacing),h=Math.max(s,s+(a.length-1)*o),A=mt(e.height,e.padding,s,h,e.verticalAlign),g=a.map(f=>ee(t,f,c));return{fontSize:s,resolvedLines:a,letterSpacingPx:c,lineHeight:o,startY:A,textBlockWidth:Math.min(e.width,Math.max(0,Math.max(...g,0))+e.padding*2),textBlockHeight:Math.min(e.height,h+e.padding*2),textX:Ct(e.width,e.padding,e.textAlign)}}function yt(t,e,n,r,i,s){t.beginPath(),t.moveTo(e+s,n),t.lineTo(e+r-s,n),t.quadraticCurveTo(e+r,n,e+r,n+s),t.lineTo(e+r,n+i-s),t.quadraticCurveTo(e+r,n+i,e+r-s,n+i),t.lineTo(e+s,n+i),t.quadraticCurveTo(e,n+i,e,n+i-s),t.lineTo(e,n+s),t.quadraticCurveTo(e,n,e+s,n),t.closePath()}function Re(t,e,n){return typeof t!="number"||Number.isNaN(t)||t<=0?e:Math.min(t,n)}function Mt(t,e){const n=vt(e.canvasWidth,e.panelWidth,e.textAlign,e.bgFit),r=(e.canvasHeight-e.panelHeight)/2,i=Math.min(e.borderRadius,Math.min(e.panelWidth,e.panelHeight)/2);yt(t,n,r,e.panelWidth,e.panelHeight,i),Bt(t,{panelX:n,panelY:r,panelWidth:e.panelWidth,panelHeight:e.panelHeight,bgColor:e.bgColor,bgFillMode:e.bgFillMode,bgOpacity:e.bgOpacity,bgGradientStops:e.bgGradientStops,bgTextureImage:e.bgTextureImage,bgTextureFit:e.bgTextureFit,bgTextureFlipX:e.bgTextureFlipX,bgTextureFlipY:e.bgTextureFlipY}),e.borderColor&&e.borderWidth>0&&(t.lineWidth=e.borderWidth,t.strokeStyle=e.borderColor,t.stroke())}function Bt(t,e){if(t.save(),t.globalAlpha=Math.max(0,Math.min(e.bgOpacity,1)),e.bgFillMode==="gradient"&&e.bgGradientStops&&e.bgGradientStops.length>1){const n=t.createLinearGradient(e.panelX,e.panelY,e.panelX+e.panelWidth,e.panelY+e.panelHeight);[...e.bgGradientStops].sort((r,i)=>r.position-i.position).forEach(r=>n.addColorStop(Math.max(0,Math.min(r.position,1)),r.color)),t.fillStyle=n,t.fill(),t.restore();return}if(e.bgTextureImage){t.clip(),pt(t,{image:e.bgTextureImage,x:e.panelX,y:e.panelY,width:e.panelWidth,height:e.panelHeight,fit:e.bgTextureFit,flipX:e.bgTextureFlipX,flipY:e.bgTextureFlipY}),t.restore();return}t.fillStyle=e.bgColor,t.fill(),t.restore()}function pt(t,e){const{image:n,x:r,y:i,width:s,height:a,fit:c,flipX:o,flipY:h}=e,A="naturalWidth"in n?n.naturalWidth:"videoWidth"in n?n.videoWidth:n.width,g="naturalHeight"in n?n.naturalHeight:"videoHeight"in n?n.videoHeight:n.height;let f=s,S=a,m=r,E=i;if(c!=="stretch"&&A>0&&g>0){const u=c==="cover"?Math.max(s/A,a/g):Math.min(s/A,a/g);f=A*u,S=g*u,m=r+(s-f)/2,E=i+(a-S)/2}t.save(),(o||h)&&(t.translate(o?r+s:0,h?i+a:0),t.scale(o?-1:1,h?-1:1),m=o?-(m-r)-f+r:m,E=h?-(E-i)-S+i:E),t.drawImage(n,m,E,f,S),t.restore()}function Qt(t,e,n,r,i,s){const a=i/72,c=Math.abs(a),o=1-Math.min(1,Math.abs(e)),h=Math.min(1,Math.abs(e)),A=r<=1?.5:n/(r-1),g=Math.sin(A*Math.PI*2-Math.PI/2),f=Math.sin(A*Math.PI*2.7-Math.PI/2)*(.65+A*.35),S=i*e*e,m=2*i*e/s,E={xOffset:0,yOffset:0,rotation:0,scaleX:1,scaleY:1};switch(t){case"arc":return{...E,yOffset:S,rotation:Math.atan(m)};case"arc-lower":return{...E,yOffset:S*.55,scaleY:Math.max(.2,1+a*e*e*.45)};case"arc-upper":return{...E,yOffset:-S*.55,scaleY:Math.max(.2,1-a*e*e*.45)};case"arch":return{...E,yOffset:S};case"bulge":return{...E,scaleY:Math.max(.2,1+a*o*.75)};case"shell-lower":return{...E,yOffset:i*.45*A*o,scaleY:Math.max(.2,1+a*A*o)};case"shell-upper":return{...E,yOffset:-i*.45*(1-A)*o,scaleY:Math.max(.2,1+a*(1-A)*o)};case"flag":return{...E,yOffset:i*.65*f,rotation:Math.atan(i/Math.max(s,1)*Math.cos(A*Math.PI*2.7)*1.6)};case"wave":return{...E,yOffset:i*.6*g,rotation:Math.atan(i/Math.max(s,1)*Math.cos(A*Math.PI*2)*1.4)};case"fish":return{...E,scaleX:Math.max(.25,1-c*h*.55),scaleY:Math.max(.2,1+a*o)};case"rise":return{...E,yOffset:i*e};case"fisheye":return{...E,yOffset:i*.18*e*o,scaleX:Math.max(.25,1+a*o*.7),scaleY:Math.max(.2,1+a*o*.7)};case"inflate":return{...E,scaleX:Math.max(.25,1+a*o*.6),scaleY:Math.max(.2,1+a*o*.6)};case"squeeze":return{...E,scaleY:Math.max(.2,1-a*o*.8)};case"twist":return{...E,yOffset:i*e,rotation:a*e*.45,scaleY:Math.max(.2,1+a*e*.25)};default:return E}}function _(t,e,n,r,i,s,a="arc",c=0){if(c!==0){wt(t,e,n,r,i,s,a,c);return}Ke(t,i),s==="fill"?t.fillText(e,n,r):t.strokeText(e,n,r),Ve(t)}function wt(t,e,n,r,i,s,a,c){const o=Array.from(e);if(o.length===0)return;const h=o.map(v=>t.measureText(v).width),A=h.reduce((v,I)=>v+I,0)+i*Math.max(0,o.length-1),g=t.textAlign,f=g==="right"?n-A:g==="center"?n-A/2:n,m=Math.max(-100,Math.min(c,100))/100*72,E=Math.max(A/2,1);let u=f;for(let v=0;v<o.length;v++){const I=o[v],b=h[v],B=u+b/2,w=(B-f-A/2)/E,y=Qt(a,w,v,o.length,m,E);t.save(),t.translate(B+y.xOffset,r+y.yOffset),t.rotate(y.rotation),t.scale(y.scaleX,y.scaleY),t.textAlign="center",s==="fill"?t.fillText(I,0,0):t.strokeText(I,0,0),t.restore(),u+=b+i}}function De(t,e,n,r,i,s,a,c,o){const h=ee(t,e,c),A=i==="center"?n-h/2:i==="right"?n-h:n,g=o==="underline"?a*.42:-a*.08,f=r+g;t.save(),t.strokeStyle=s,t.lineWidth=Math.max(2,a*.06),t.lineCap="round",t.beginPath(),t.moveTo(A,f),t.lineTo(A+h,f),t.stroke(),t.restore()}function kt(t,e){for(let n=0;n<e.lines.length;n++){const r=e.lines[n],i=e.startY+n*e.lineHeight;for(const s of e.shadowLayers)t.save(),t.shadowColor=s.color,t.shadowBlur=s.blur,t.shadowOffsetX=s.offsetX??0,t.shadowOffsetY=s.offsetY??0,t.globalAlpha=s.opacity??1,t.fillStyle=e.color,_(t,r,e.textX,i,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength),t.restore();for(const s of e.strokeLayers)t.save(),t.lineJoin="round",t.miterLimit=2,t.lineWidth=s.width,t.strokeStyle=s.color,t.globalAlpha=s.opacity??1,_(t,r,e.textX,i,e.letterSpacingPx,"stroke",e.bendPreset,e.bendStrength),t.restore();t.save(),t.fillStyle=e.color,t.globalAlpha=1,_(t,r,e.textX,i,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength),t.restore(),e.underline&&De(t,r,e.textX,i,e.textAlign,e.color,e.fontSize,e.letterSpacingPx,"underline"),e.strikethrough&&De(t,r,e.textX,i,e.textAlign,e.color,e.fontSize,e.letterSpacingPx,"strikethrough")}}function Ft(t,e){const n=Math.max(0,Math.min(e.intensity,1));if(n<=0)return;const r=Math.max(0,Math.min(e.range,1)),i=r*72,s=Math.max(-.5,Math.min(e.horizontalAngle,.5))*80,a=Math.max(-.5,Math.min(e.verticalAngle,.5))*80;for(let c=0;c<e.lines.length;c++){const o=e.startY+c*e.lineHeight;t.save(),t.globalAlpha=n,t.shadowColor=e.color,t.shadowBlur=i,t.shadowOffsetX=s,t.shadowOffsetY=a,e.style==="contoured"?(t.lineJoin="round",t.miterLimit=2,t.lineWidth=Math.max(2,r*42),t.strokeStyle=e.color,_(t,e.lines[c],e.textX,o,e.letterSpacingPx,"stroke",e.bendPreset,e.bendStrength)):(t.fillStyle=e.color,_(t,e.lines[c],e.textX,o,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength)),t.restore()}}function Lt(t,e){const n=Se(e.width,e.height),r=n.getContext("2d");r.clearRect(0,0,e.width,e.height),r.font=e.font,r.fillStyle="#ffffff",r.textAlign=e.textAlign,r.textBaseline="middle";for(let a=0;a<e.lines.length;a++)_(r,e.lines[a],e.textX,e.startY+a*e.lineHeight,e.letterSpacingPx,"fill",e.bendPreset,e.bendStrength);const i=Se(e.width,e.height),s=i.getContext("2d");s.clearRect(0,0,e.width,e.height),s.save(),s.globalAlpha=e.opacity,s.filter=e.blur>0?`blur(${e.blur}px)`:"none",s.drawImage(n,e.offsetX,e.offsetY),s.restore(),s.globalCompositeOperation="destination-in",s.drawImage(n,0,0),s.globalCompositeOperation="source-in",s.globalAlpha=e.opacity,s.fillStyle=e.color,s.fillRect(0,0,e.width,e.height),t.drawImage(i,0,0)}function Rt(t){const{width:e,height:n,color:r,strokeLayers:i,strokeColor:s,strokeWidth:a,strokeOpacity:c,shadowLayers:o,innerShadow:h,glow:A,shadowColor:g,shadowBlur:f,shadowOffsetX:S,shadowOffsetY:m,shadowOpacity:E,textAlign:u,bgFillMode:v,bgOpacity:I,bgFit:b,bgAutoSize:B,bgWidth:w,bgHeight:y,bgGradientStops:x,bgTextureImage:d,bgTextureFit:F,bgTextureFlipX:H,bgTextureFlipY:P,underline:V,strikethrough:q,bendPreset:R,bendStrength:N}=t;let{fontSize:z,bgColor:U}=t;const Y=[...i??[],...s&&a>0?[{color:s,width:a,opacity:c}]:[]].filter(L=>L.width>0),W=[...o??[],...g&&(f>0||S!==0||m!==0)?[{color:g,blur:f,offsetX:S,offsetY:m,opacity:E}]:[]].filter(L=>L.blur>0||(L.offsetX??0)!==0||(L.offsetY??0)!==0);let j;const G=Se(e,n),k=G.getContext("2d");k.clearRect(0,0,e,n),k.fillStyle=r,k.textAlign=u,k.textBaseline="middle";const M=xt(k,t);if(z=M.fontSize,U!=="transparent"){const L=B===!0,O=Re(L?void 0:w,b==="text"||L?M.textBlockWidth:e,e),se=Re(L?void 0:y,b==="text"||L?M.textBlockHeight:n,n);Mt(k,{canvasWidth:e,canvasHeight:n,textAlign:u,bgFit:b,panelWidth:O,panelHeight:se,bgColor:U,bgFillMode:v,bgOpacity:I,bgGradientStops:x,bgTextureImage:d,bgTextureFit:F,bgTextureFlipX:H,bgTextureFlipY:P,borderColor:t.borderColor,borderWidth:t.borderWidth,borderRadius:t.borderRadius})}return A&&Ft(k,{lines:M.resolvedLines,textX:M.textX,startY:M.startY,lineHeight:M.lineHeight,letterSpacingPx:M.letterSpacingPx,bendPreset:R,bendStrength:N,color:A.color,style:A.style,intensity:A.intensity??.5,range:A.range??.5,horizontalAngle:A.horizontalAngle??0,verticalAngle:A.verticalAngle??0}),kt(k,{lines:M.resolvedLines,textX:M.textX,startY:M.startY,lineHeight:M.lineHeight,textAlign:u,color:r,fontSize:z,letterSpacingPx:M.letterSpacingPx,bendPreset:R,bendStrength:N,shadowLayers:W,strokeLayers:Y,underline:V,strikethrough:q}),h&&Lt(k,{width:e,height:n,font:k.font,lines:M.resolvedLines,textX:M.textX,startY:M.startY,lineHeight:M.lineHeight,letterSpacingPx:M.letterSpacingPx,bendPreset:R,bendStrength:N,textAlign:u,color:h.color,opacity:h.opacity??1,blur:h.blur,offsetX:h.offsetX??0,offsetY:h.offsetY??0}),j=new p.CanvasTexture(G),j.needsUpdate=!0,j}function Dt(t,e){const{lines:n,color:r,strokeLayers:i,outlineEnabled:s,strokeColor:a,strokeWidth:c,strokeOpacity:o,shadowLayers:h,shadowEnabled:A,innerShadow:g,glow:f,shadowColor:S,shadowBlur:m,shadowOffsetX:E,shadowOffsetY:u,shadowOpacity:v,fontWeight:I,fontStyle:b,fontFamily:B,fontSize:w,textAlign:y,verticalAlign:x,overflow:d,resizeToFit:F,minFontSize:H,letterSpacing:P,lineSpacing:V,bgFillMode:q,bgOpacity:R,bgFit:N,bgAutoSize:z,bgWidth:U,bgHeight:Y,bgGradientStops:W,bgTextureFit:j,bgTextureFlipX:G,bgTextureFlipY:k,borderColor:M,borderWidth:L,borderRadius:O,padding:se,aspect:ve,resolution:le,underline:be,strikethrough:Ie,bendPreset:Te,bendStrength:xe}=t,ye=C.useMemo(()=>s===!1?[]:i,[s,i]),Me=C.useMemo(()=>A===!1?[]:h,[A,h]),Be=void 0,pe=C.useMemo(()=>({text:e.text,lines:n,color:r,strokeLayers:ye,strokeColor:s===!1?void 0:a,strokeWidth:s===!1?0:c,strokeOpacity:o,shadowLayers:Me,innerShadow:g,glow:f,shadowColor:A===!1?void 0:S,shadowBlur:A===!1?0:m,shadowOffsetX:A===!1?0:E,shadowOffsetY:A===!1?0:u,shadowOpacity:v,fontWeight:I,fontStyle:b,fontFamily:B,fontSize:w,textAlign:y,verticalAlign:x,overflow:d,resizeToFit:F,minFontSize:H,letterSpacing:P,lineSpacing:V,bgColor:e.bgColor,bgFillMode:q,bgOpacity:R,bgFit:N,bgAutoSize:z,bgWidth:U,bgHeight:Y,bgGradientStops:W,bgTextureImage:Be,bgTextureFit:j,bgTextureFlipX:G,bgTextureFlipY:k,borderColor:M,borderWidth:L,borderRadius:O,padding:se,height:le,width:Math.round(le*Math.max(ve,.1)),underline:be,strikethrough:Ie,bendPreset:Te,bendStrength:xe}),[e.text,e.bgColor,n,r,ye,s,a,c,o,Me,g,f,A,S,m,E,u,v,I,b,B,w,y,x,d,F,H,P,V,q,R,N,z,U,Y,W,Be,j,G,k,M,L,O,se,ve,le,be,Ie,Te,xe]),Qe=C.useMemo(()=>Rt(pe),[pe]);return de(Qe),Qe}function Ze(t){const e={...Et,...t},{text:n,bgColor:r,opacity:i,name:s,overlay:a=!0,position:c,rotation:o,scale:h,visible:A,renderOrder:g}=e,[f,S]=C.useState(null),[m,E]=C.useState(null),u=C.useRef(n);u.current!==n&&(u.current=n,f!==null&&S(null));const v=C.useRef(r);v.current!==r&&(v.current=r,m!==null&&E(null));const I=C.useRef(null),w=Dt(e,{text:f??n,bgColor:m??r});return C.useEffect(()=>{const y=I.current;if(y)return y.userData.setText=x=>S(x),y.userData.setBgColor=x=>E(x),()=>{delete y.userData.setText,delete y.userData.setBgColor}},[]),l.jsx(Ne,{ref:I,name:s,texture:w,overlay:a,opacity:i,position:c,rotation:o,scale:h,visible:A,renderOrder:g})}function oe(t,e){return!Number.isFinite(t)||!Number.isFinite(e)||t<=0||e<=0?[1,1,1]:Math.abs(t-e)<1e-6?[1,1,1]:t>e?[e/t,1,1]:[1,t/e,1]}const Yt="data:image/png;base64,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",Wt=(t,e)=>t||(e==="cover"?"fill":e==="stretch"?"stretch":"fit"),Ye=(t,e)=>{const[n,r]=oe(t,e);return n===1&&r===1?[1,1,1]:n<1?[1,1/n,1]:[1/r,1,1]},Ot=(t,e,n,r,i,s,a)=>{let c=[1,1,1],o=[1,1,1],h=[1,1],A=[0,0];switch(t){case"fit":c=oe(e,n),o=c;break;case"fitWidth":c=[1,e>0&&n>0?e/n:1,1],o=c;break;case"fitHeight":c=[e>0&&n>0?n/e:1,1,1],o=c;break;case"center":c=s&&a&&s.width>0&&s.height>0&&a.width>0&&a.height>0?[a.width/s.width,a.height/s.height,1]:oe(e,n),o=c;break;case"fill":c=Ye(e,n),o=c;break;case"fillAndCut":if(o=Ye(e,n),n>e){const g=e/n;h=[g,1],A=[(1-g)/2,0]}else if(n<e){const g=n/e;h=[1,g],A=[0,(1-g)/2]}break}return{meshScale:[c[0]*(r?-1:1),c[1]*(i?-1:1),1],guideScale:o,repeat:h,offset:A}},Xt=(t,e)=>t??(e?{kind:"image",src:e}:{kind:"default"}),$=t=>{const e=t.image;return{width:(e==null?void 0:e.videoWidth)??(e==null?void 0:e.width)??1,height:(e==null?void 0:e.videoHeight)??(e==null?void 0:e.height)??1}},Pt=t=>{const{width:e,height:n}=$(t);return e>0&&n>0?e/n:1},jt=new Set(["overlay","softLight","hardLight","difference","exclusion"]),Gt={overlay:0,softLight:1,hardLight:2,difference:3,exclusion:4},Ht=t=>{switch(t){case"add":return{blending:p.AdditiveBlending};case"subtract":return{blending:p.SubtractiveBlending};case"multiply":return{blending:p.MultiplyBlending};case"screen":return{blending:p.CustomBlending,blendSrc:p.OneFactor,blendDst:p.OneMinusSrcColorFactor,blendEquation:p.AddEquation};case"lighten":return{blending:p.CustomBlending,blendSrc:p.OneFactor,blendDst:p.OneFactor,blendEquation:p.MaxEquation};case"darken":return{blending:p.CustomBlending,blendSrc:p.OneFactor,blendDst:p.OneFactor,blendEquation:p.MinEquation};default:return{blending:p.NormalBlending}}},Jt=`
3
- varying vec2 vUv;
4
- void main(){vUv=uv;gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);}`,Nt=`
5
- uniform sampler2D imageMap;uniform sampler2D backdropMap;uniform vec2 resolution;
6
- uniform vec3 tint;uniform float opacity;uniform float alphaTest;uniform int blendMode;varying vec2 vUv;
7
- float overlayChannel(float b,float s){return b<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
8
- float hardLightChannel(float b,float s){return s<.5?2.*b*s:1.-2.*(1.-b)*(1.-s);}
9
- float softLightChannel(float b,float s){return s<.5?b-(1.-2.*s)*b*(1.-b):b+(2.*s-1.)*(sqrt(max(b,0.))-b);}
10
- vec3 applyAdvancedBlend(vec3 b,vec3 s){
11
- if(blendMode==0)return vec3(overlayChannel(b.r,s.r),overlayChannel(b.g,s.g),overlayChannel(b.b,s.b));
12
- if(blendMode==1)return vec3(softLightChannel(b.r,s.r),softLightChannel(b.g,s.g),softLightChannel(b.b,s.b));
13
- if(blendMode==2)return vec3(hardLightChannel(b.r,s.r),hardLightChannel(b.g,s.g),hardLightChannel(b.b,s.b));
14
- if(blendMode==3)return abs(b-s);return b+s-2.*b*s;}
15
- void main(){vec4 image=texture2D(imageMap,vUv)*vec4(tint,opacity);if(image.a<=alphaTest)discard;
16
- vec2 uv=gl_FragCoord.xy/max(resolution,vec2(1.));vec3 base=texture2D(backdropMap,uv).rgb;
17
- vec3 mixed=applyAdvancedBlend(base,image.rgb);gl_FragColor=vec4(mix(base,mixed,image.a),1.);}`,zt=()=>{const t=document.createElement("canvas");t.width=256,t.height=256;const e=t.getContext("2d");if(!e)return new p.CanvasTexture(t);const n=e.createRadialGradient(96,80,10,128,128,128);n.addColorStop(0,"#ffffff"),n.addColorStop(.18,"#f8fafc"),n.addColorStop(.44,"#cbd5e1"),n.addColorStop(.72,"#475569"),n.addColorStop(1,"#0f172a"),e.fillStyle=n,e.fillRect(0,0,t.width,t.height);const r=new p.CanvasTexture(t);return r.needsUpdate=!0,r};function Ut({materialTexture:t,sourceTexture:e,onSourceSizeChange:n}){const r=C.useRef($(e));return J.useFrame(()=>{t.needsUpdate=!0;const i=$(e);(i.width!==r.current.width||i.height!==r.current.height)&&(r.current=i,n(i))}),null}const Kt=999,Vt=Math.PI/180;function We({name:t,source:e,src:n,fit:r,stretchMode:i,materialType:s="unlit",blendMode:a="normal",backdropTexture:c=null,rotation:o=0,opacity:h=1,color:A="#ffffff",flipX:g=!1,flipY:f=!1,renderOrder:S=Kt,transparent:m=!0,alphaTest:E=0,overlay:u=!0,visible:v,layoutSize:I}){const{size:b}=J.useThree(),B=Ee.useXRViewportRenderOutputs(),w=Xt(e,n),y=w.kind==="image"?w.src:Yt,x=it.useTexture(y),d=w.kind==="texture"?w.texture:x,F=K.useScreenRectAspect(),H=Wt(i,r),[P,V]=C.useState(()=>$(d));C.useEffect(()=>{V($(d))},[d]);const q=d instanceof p.VideoTexture||typeof HTMLCanvasElement<"u"&&d.image instanceof HTMLCanvasElement,R=q?P:$(d),N=C.useCallback(O=>V(O),[]),z=R.width>0&&R.height>0?R.width/R.height:Pt(d),U=C.useMemo(()=>zt(),[]),Y=C.useMemo(()=>Ot(H,F,z,g,f,I,R),[H,F,z,g,f,I,R]),W=C.useMemo(()=>{const O=d.clone();return O.needsUpdate=!0,O.repeat.set(Y.repeat[0],Y.repeat[1]),O.offset.set(Y.offset[0],Y.offset[1]),O},[d,Y.repeat,Y.offset]);de(W),de(U);const j=C.useMemo(()=>Ht(a),[a]),G=jt.has(a)?a:null,k=c??(B==null?void 0:B.finalColorTexture)??(B==null?void 0:B.sceneColorTexture)??null,M=G!==null&&k!==null,L=C.useMemo(()=>({imageMap:{value:W},backdropMap:{value:k},resolution:{value:new p.Vector2(b.width,b.height)},tint:{value:new p.Color(A)},opacity:{value:h},alphaTest:{value:E},blendMode:{value:G===null?0:Gt[G]}}),[G,E,k,b.height,b.width,A,W,h]);return l.jsxs("group",{visible:v,children:[q?l.jsx(Ut,{materialTexture:W,sourceTexture:d,onSourceSizeChange:N}):null,l.jsxs("mesh",{name:t,scale:Y.meshScale,rotation:[0,0,o*Vt],renderOrder:S,children:[l.jsx("planeGeometry",{args:[1,1]}),M?l.jsx("shaderMaterial",{uniforms:L,vertexShader:Jt,fragmentShader:Nt,transparent:!1,depthTest:!u,depthWrite:!u,toneMapped:!1}):s==="standardPBR"?l.jsx("meshStandardMaterial",{map:W,transparent:m||h<1,opacity:h,color:A,alphaTest:E,depthTest:!u,depthWrite:!u,toneMapped:!1,roughness:.72,metalness:.08,emissive:A,emissiveIntensity:.18,...j}):s==="matcap"?l.jsx("meshMatcapMaterial",{map:W,matcap:U,transparent:m||h<1,opacity:h,color:A,alphaTest:E,depthTest:!u,depthWrite:!u,toneMapped:!1,...j}):l.jsx("meshBasicMaterial",{map:W,transparent:m||h<1,opacity:h,color:A,alphaTest:E,depthTest:!u,depthWrite:!u,toneMapped:!1,...j})]})]})}const qt={left:0,right:0,top:0,bottom:0},Zt=Math.PI/180;function _t({anchors:t,offsets:e,pivot:n,rotation:r,children:i}){const{width:s,height:a}=K.useScreenSpace(),c=C.useMemo(()=>({left:-1,right:1,top:1,bottom:-1,...t}),[t]),o=C.useMemo(()=>({...qt,...e}),[e]),h=C.useMemo(()=>Ee.computeScreenTransform(s,a,c,o,n),[a,n,c,o,s]),A=h.width>0&&h.height>0?h.width/h.height:null;return l.jsx("group",{position:[h.centerX-h.pivotX,h.centerY-h.pivotY,0],rotation:[0,0,r*Zt],scale:[h.width,h.height,1],children:l.jsx(K.ScreenRectAspectContext.Provider,{value:A,children:i})})}function $t({transform:t,guideLayer:e,onChange:n,children:r}){return l.jsx(T.ScreenTransformFrame,{guideColor:"#22d3ee",guideLayer:e,transform:t,onChange:n,children:r})}const en={left:-1,right:1,top:1,bottom:-1},tn={},nn=[.5,.5];[["Normal","normal"],["Add","add"],["Subtract","subtract"],["Multiply","multiply"],["Screen","screen"],["Lighten","lighten"],["Darken","darken"],["Overlay","overlay"],["Soft Light","softLight"],["Hard Light","hardLight"],["Difference","difference"],["Exclusion","exclusion"]].map(([t,e])=>({label:t,value:e}));const rn=t=>[t[0]*2-1,t[1]*2-1],sn=(t,e,n,r,i)=>t||(!r&&!i?en:je({coordinateSpace:e,canvasSize:n??Z,position:r,size:i}));function _e({anchors:t,coordinateSpace:e,canvasSize:n,position:r,size:i,offsets:s=tn,pivot:a=nn,rotation:c=0,transform:o,onScreenTransformChange:h,transformGuideLayer:A="scene",...g}){const f=C.useMemo(()=>sn(t,e,n,r,i),[t,n,e,r,i]),S=C.useMemo(()=>rn(a),[a]);if(o){const m=T.mergeScreenTransform2D(o);return m.enabled?l.jsx($t,{guideLayer:A,transform:m,onChange:h,children:l.jsx(We,{...g,layoutSize:m.size,renderOrder:g.renderOrder??m.renderOrder,overlay:g.overlay??m.overlay,visible:g.visible??m.visible,rotation:0})}):null}return l.jsx(_t,{anchors:f,offsets:s,pivot:S,rotation:c,children:l.jsx(We,{...g,layoutSize:i?{width:i[0],height:i[1]}:void 0,rotation:0})})}const an=2.5,on="#38bdf8",ln={top:{left:-.92,right:.92,top:.92,bottom:.56},center:{left:-.92,right:.92,top:.18,bottom:-.18},bottom:{left:-.92,right:.92,top:-.56,bottom:-.92}};function cn({bend:t,bendPreset:e,bendStrength:n}){return{bendPreset:(t==null?void 0:t.preset)??e,bendStrength:(t==null?void 0:t.strength)??n}}function An({width:t,height:e}){const n=Math.max(1,t),r=Math.max(1,e);return{aspect:n/r,resolution:r}}function Oe(t){const e=K.useScreenRectAspect(),{bend:n,layoutSize:r,renderOrder:i,overlay:s=!0,...a}=t,c=r?An(r):void 0,o=Math.max((c==null?void 0:c.aspect)??e??an,.1),h=cn({bend:n,bendPreset:a.bendPreset,bendStrength:a.bendStrength});return l.jsx(Ze,{...a,aspect:o,resolution:(c==null?void 0:c.resolution)??a.resolution,...h,overlay:s,renderOrder:i})}function hn({transform:t,guideLayer:e,onChange:n,children:r}){return l.jsx(T.ScreenTransformFrame,{guideColor:on,guideLayer:e,transform:t,onChange:n,children:r})}function dn(t="center"){return ln[t]}function gn({anchors:t,coordinateSpace:e,canvasSize:n,position:r,size:i,transform:s,pivot:a,verticalAlign:c}){return{resolvedAnchors:s!=null&&s.anchors?s.anchors:t||(s!=null&&s.position||s!=null&&s.size||r||i?je({coordinateSpace:(s==null?void 0:s.coordinateSpace)??e,canvasSize:(s==null?void 0:s.canvasSize)??n,position:(s==null?void 0:s.position)??r,size:(s==null?void 0:s.size)??i}):dn(c)),resolvedOffsets:s==null?void 0:s.offsets,resolvedPivot:at((s==null?void 0:s.pivot)??a??[.5,.5])}}function $e({anchors:t,coordinateSpace:e,canvasSize:n,offsets:r,pivot:i,position:s,rotation:a=0,size:c,transform:o,screenTransform:h,onScreenTransformChange:A,transformGuideLayer:g="scene",verticalAlign:f="center",...S}){const{resolvedAnchors:m,resolvedOffsets:E,resolvedPivot:u}=C.useMemo(()=>gn({anchors:t,coordinateSpace:e,canvasSize:n,position:s,size:c,transform:o,pivot:i,verticalAlign:f}),[t,n,e,i,s,c,o,f]),v=(o==null?void 0:o.offsets)??r??E,I=(o==null?void 0:o.rotation)??a;if(h){const b=T.mergeScreenTransform2D(h);return b.enabled?l.jsx(hn,{guideLayer:g,transform:b,onChange:A,children:l.jsx(Oe,{...S,layoutSize:b.size,verticalAlign:f,renderOrder:S.renderOrder??b.renderOrder,overlay:S.overlay??b.overlay,visible:S.visible??b.visible})}):null}return l.jsx(Ee.ScreenTransform,{anchors:m,offsets:v,pivot:u,children:l.jsx("group",{rotation:[0,0,I*Math.PI/180],children:l.jsx(Oe,{...S,verticalAlign:f})})})}const et=({settings:t,transform:e})=>{const n=C.useMemo(()=>l.jsxs("group",{name:"LightEditorGizmo",visible:t.showHelper,children:[l.jsxs("mesh",{renderOrder:1e3,children:[l.jsx("sphereGeometry",{args:[.12,12,8]}),l.jsx("meshBasicMaterial",{color:"#facc15",wireframe:!0,depthTest:!1,depthWrite:!1})]}),l.jsxs("mesh",{position:[0,0,-.35],rotation:[Math.PI/2,0,0],renderOrder:1e3,children:[l.jsx("coneGeometry",{args:[.08,.45,12]}),l.jsx("meshBasicMaterial",{color:"#fde047",wireframe:!0,depthTest:!1,depthWrite:!1})]})]}),[t.showHelper]);return t.enabled?l.jsxs(te.Transform3D,{value:e,children:[n,t.type==="ambient"?l.jsx("ambientLight",{color:t.color,intensity:t.intensity}):null,t.type==="directional"?l.jsx("directionalLight",{color:t.color,intensity:t.intensity,castShadow:t.castShadow}):null,t.type==="point"?l.jsx("pointLight",{color:t.color,intensity:t.intensity,distance:t.distance,decay:t.decay,castShadow:t.castShadow}):null,t.type==="spot"?l.jsx("spotLight",{color:t.color,intensity:t.intensity,distance:t.distance,angle:t.angle,penumbra:t.penumbra,decay:t.decay,castShadow:t.castShadow}):null]}):null},fn=({source:t,target:e,settings:n})=>{if(!n.enabled||!e)return!1;const r=new D.Quaternion;if(n.mode==="point"){const s=new D.Vector3;e.getWorldPosition(s),t.lookAt(s),r.copy(t.quaternion)}else e.getWorldQuaternion(r);const i=new D.Quaternion().setFromEuler(new D.Euler(n.offsetRotation.x*Math.PI/180,n.offsetRotation.y*Math.PI/180,n.offsetRotation.z*Math.PI/180));return t.quaternion.copy(r).multiply(i),!0},tt=({target:t,settings:e,children:n})=>{const r=C.useRef(null);return J.useFrame(()=>{r.current&&fn({source:r.current,target:t,settings:e})}),l.jsx("group",{ref:r,children:n})},un=(t,e)=>{let n=t;for(;n&&n!==e;){if("isTransformControls"in n&&n.isTransformControls===!0)return!0;n=n.parent}return!1},X=({children:t,layer:e})=>{const n=C.useRef(null),r=C.useRef(0),i=C.useCallback(()=>{e===void 0||!n.current||n.current.traverse(s=>{un(s,n.current)||s.layers.set(e)})},[e]);return C.useLayoutEffect(()=>{i(),r.current=2},[i,t]),J.useFrame(()=>{r.current<=0||(i(),r.current-=1)},-1e3),l.jsx("group",{ref:n,children:t})},Q=(t,e)=>(t==null?void 0:t.type)===e,Sn=t=>null,ne=({children:t,inside:e})=>e?l.jsx(l.Fragment,{children:t}):l.jsx(Je,{children:t}),En=({children:t,insideScreenSpaceUI:e,objectRef:n,renderOrder:r,settings:i})=>l.jsx(ne,{inside:e,children:l.jsx(Cn,{settings:i,renderOrder:r,objectRef:n,children:t})}),Cn=({children:t,objectRef:e,renderOrder:n,settings:r})=>{const i=K.useScreenSpace();if(!r.enabled||!r.visible)return null;const s=T.resolveScreenTransform2D({transform:r,parentSize:i});return l.jsx("group",{ref:e,position:s.center,rotation:s.rotation,scale:s.size,renderOrder:n??r.renderOrder,children:t})},mn=({anchor:t,children:e,insideScreenSpaceUI:n,objectRef:r,renderOrder:i,settings:s})=>l.jsx(ne,{inside:n,children:l.jsx(vn,{anchor:t,settings:s,renderOrder:i,objectRef:r,children:e})}),vn=({anchor:t,children:e,objectRef:n,renderOrder:r,settings:i})=>{const s=rt.useFaceInfo({targetFps:24}),{size:a}=J.useThree(),c=K.useScreenSpace(),o=C.useRef(null),h=C.useRef(new D.Vector3),A=C.useRef({pos:new D.Vector3,prevRaw:new D.Vector3,dxHat:new D.Vector3,initialized:!1}),g=C.useRef(!1),f=C.useRef({x:0,y:0,z:0,visibility:0}),S=C.useRef({x:0,y:0}),m=s?Xe.resolveFaceAnchorPoint(t.target,s.landmarks,t.customAnchorPoint,f.current):null,E=m?He({point:m,viewportSize:a,target:S.current}):null,u=E?T.resolveScreenTransform2D({transform:{...i,position:{x:E.x+i.position.x+t.offset.x,y:E.y+i.position.y+t.offset.y}},parentSize:c}):null;return J.useFrame((v,I)=>{const b=o.current;if(b){if(b.visible=!!(u&&i.enabled&&i.visible),!u){g.current=!1,A.current.initialized=!1;return}h.current.set(u.center[0],u.center[1],t.offset.z),t.smoothing>0?(Pe.stepTrackingSmoothing(A.current,h.current,g.current?I:0,t.smoothing),b.position.copy(A.current.pos)):b.position.copy(h.current),g.current=!0}}),l.jsx("group",{ref:v=>{o.current=v,n==null||n(v)},rotation:[(u==null?void 0:u.rotation[0])??0,(u==null?void 0:u.rotation[1])??0,((u==null?void 0:u.rotation[2])??0)+(t.followFaceRoll?(s==null?void 0:s.pose.rotation.z)??0:0)],scale:[i.size.width/100*i.scale2D.x,i.size.height/100*i.scale2D.y,1],renderOrder:r??i.renderOrder,children:e})},nt=({editorMode:t=!1,fallback:e=Sn,insideScreenSpaceUI:n=!1,objectId:r,onComponentChange:i,renderLayer:s,renderOrder:a,store:c})=>{const o=ce.useRegisterRuntimeObject(),h=ce.useResolveRuntimeObject(),A=c.objects[r];if(!A||!A.enabled)return null;const g=T.getOrderedComponents(c,r).filter(d=>d.enabled),f=g.find(d=>d.type==="Transform"),S=g.find(d=>d.type==="ScreenTransform"),m=g.find(d=>d.type==="ScreenImage"),E=g.find(d=>d.type==="ScreenText"),u=g.find(d=>d.type==="ScreenShape"),v=g.find(d=>d.type==="MeshRenderer"),I=g.find(d=>d.type==="FaceMeshRenderer"),b=g.find(d=>d.type==="Light"),B=g.find(d=>d.type==="LookAt"),w=g.find(d=>d.type==="PinToMesh"),y=g.find(d=>d.type==="TrackingAnchor"),x=T.getSceneObjectChildren(c,r).map(d=>l.jsx(nt,{objectId:d.id,store:c,editorMode:t,renderOrder:a,renderLayer:s,onComponentChange:i,fallback:e,insideScreenSpaceUI:n||!!S},d.id));if(Q(f,"Transform")&&Q(b,"Light"))return l.jsx(X,{layer:s,children:l.jsxs("group",{ref:d=>o(r,d),children:[l.jsx(et,{settings:b.settings,transform:f.settings}),x]})});if(Q(f,"Transform")&&Q(v,"MeshRenderer")){const d=Q(B,"LookAt")?B.settings:T.createDefaultComponent("LookAt",r).settings,F=d.inheritChildren?x:null,H=d.inheritChildren?null:x;return l.jsx(X,{layer:s,children:l.jsx("group",{ref:P=>o(r,P),children:l.jsx(T.PinToMesh,{target:Q(w,"PinToMesh")?h(w.settings.targetObjectId):null,settings:Q(w,"PinToMesh")?w.settings:T.createDefaultComponent("PinToMesh",r).settings,children:l.jsxs(te.Transform3D,{value:f.settings,onChange:i?P=>i({...f,settings:P}):void 0,children:[l.jsxs(tt,{target:Q(B,"LookAt")?h(B.settings.targetObjectId):null,settings:d,children:[l.jsx(K.MeshRenderer,{value:v.settings,renderOrder:a}),F]}),H]})})})})}if(Q(I,"FaceMeshRenderer"))return l.jsx(X,{layer:s,children:l.jsxs("group",{ref:d=>o(r,d),children:[l.jsx(te.FaceMeshRenderer,{value:I.settings,transform:Q(f,"Transform")?f.settings:void 0}),x]})});if(Q(f,"Transform")){if(Q(y,"TrackingAnchor")){const d=y.settings;return l.jsx(X,{layer:s,children:l.jsx(Xe.FaceTracker,{followFaceRoll:d.followFaceRoll,children:l.jsx(Pe.TrackingAnchor,{target:d.target,customAnchorPoint:d.customAnchorPoint,offset:[d.offset.x,d.offset.y,d.offset.z],smoothing:d.smoothing,children:l.jsx(te.Transform3D,{objectRef:F=>o(r,F),value:f.settings,children:x})})})})}return l.jsx(X,{layer:s,children:l.jsx("group",{children:l.jsx(te.Transform3D,{objectRef:d=>o(r,d),value:f.settings,onChange:i?d=>i({...f,settings:d}):void 0,children:x})})})}if(Q(S,"ScreenTransform")&&Q(m,"ScreenImage")){const d=T.mapScreenImageSettingsToProps({screenSpaceUI:{enabled:!0},screenImage:{...m.settings,screenTransform:S.settings}});return d.shouldRender?l.jsx(X,{layer:s,children:l.jsx("group",{renderOrder:a,children:l.jsxs(ne,{inside:n,children:[l.jsx(_e,{...d.props,renderOrder:a??d.props.renderOrder,onScreenTransformChange:i?F=>i({...S,settings:F}):void 0}),x]})})}):null}if(Q(S,"ScreenTransform")&&Q(E,"ScreenText")){const d=T.mapScreenTextSettingsToProps({screenSpaceUI:{enabled:!0},screenText:{...E.settings,screenTransform:S.settings}});return d.shouldRender?l.jsx(X,{layer:s,children:l.jsx("group",{renderOrder:a,children:l.jsxs(ne,{inside:n,children:[l.jsx($e,{...d.props,renderOrder:a??d.props.renderOrder,onScreenTransformChange:i?F=>i({...S,settings:F}):void 0}),x]})})}):null}return Q(S,"ScreenTransform")&&Q(u,"ScreenShape")?l.jsx(X,{layer:s,children:l.jsx("group",{ref:d=>o(r,d),renderOrder:a,children:l.jsxs(ne,{inside:n,children:[l.jsx(T.ScreenShape,{name:A.name,settings:u.settings,transform:S.settings,renderOrder:a,onScreenTransformChange:i?d=>i({...S,settings:d}):void 0}),x]})})}):Q(S,"ScreenTransform")?Q(y,"TrackingAnchor")?l.jsx(X,{layer:s,children:l.jsx("group",{children:l.jsx(mn,{anchor:y.settings,settings:S.settings,renderOrder:a,insideScreenSpaceUI:n,objectRef:d=>o(r,d),children:x})})}):l.jsx(X,{layer:s,children:l.jsx("group",{children:l.jsx(En,{settings:S.settings,renderOrder:a,insideScreenSpaceUI:n,objectRef:d=>o(r,d),children:x})})}):t?l.jsxs(l.Fragment,{children:[x,e(`Object "${A.name}" has unsupported components: ${g.map(d=>d.type).join(", ")}`)]}):x.length?l.jsx(l.Fragment,{children:x}):null},bn=({layers:t})=>{const{camera:e,gl:n,raycaster:r,scene:i}=J.useThree(),{session:s}=ce.useXRContext(),a=C.useCallback(()=>T.renderSequentialPasses({renderer:n,scene:i,camera:e,layers:t}),[e,n,t,i]);return J.useFrame(a,1),C.useEffect(()=>{const c=r.layers.mask;return t.forEach(o=>r.layers.enable(o)),()=>{r.layers.mask=c}},[t,r]),C.useEffect(()=>(s._setR3FState({renderer:n,scene:i,camera:e,renderFrame:a}),()=>s._setR3FState({renderer:n,scene:i,camera:e})),[e,n,a,i,s]),null};exports.LightObject=et;exports.LookAt=tt;exports.RenderGroupLayer=X;exports.SceneObjectRenderer=nt;exports.ScreenImage=_e;exports.ScreenSpaceUI=Je;exports.ScreenText=$e;exports.SequentialRenderPasses=bn;exports.TextLabel=Ze;exports.clientToScreenPixels=At;exports.computeContainScale=oe;exports.mediaToScreenPixels=gt;exports.normalizedToScreenPixels=He;exports.screenPixelsToClient=ht;exports.screenPixelsToMedia=ft;exports.screenPixelsToNormalized=dt;exports.screenPixelsToUnits=lt;exports.screenPointToRay=St;exports.screenUnitsToPixels=ct;exports.worldToScreenPixels=ut;