@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.
- package/GROUNDING.md +34 -9
- package/dist/{DebuggerUI-Cq28c18s.js → DebuggerUI-xp4bg3gH.js} +1 -1
- package/dist/{FaceMeshRenderer-6t8OsQhK.js → FaceMeshRenderer-CALA4k49.js} +2 -2
- package/dist/{FaceMeshRenderer-lQLhYIW-.cjs → FaceMeshRenderer-D4PFqsb3.cjs} +1 -1
- package/dist/{FaceRetouch-DtNl8-4e.cjs → FaceRetouch-Bq2rtPlV.cjs} +1 -1
- package/dist/{FaceRetouch-CDrL0pXg.js → FaceRetouch-DF5UsOsZ.js} +29 -29
- package/dist/components/MeshRenderer/index.d.ts +1 -0
- package/dist/components/ScreenImage/source.d.ts +3 -0
- package/dist/contexts-D5TQcwmv.js +660 -0
- package/dist/contexts-Dv1SA0bS.cjs +1 -0
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +1246 -1205
- package/dist/entries/low-level.d.ts +3 -0
- package/dist/face-effects.cjs +1 -1
- package/dist/face-effects.js +3 -3
- package/dist/{getFaceInfo-hUKMLFcr.js → getFaceInfo-Cjcgcc4w.js} +1 -1
- package/dist/{getFaceInfo-CyPAKh3h.cjs → getFaceInfo-oQcP40Ha.cjs} +1 -1
- package/dist/hooks/useXRModel.d.ts +5 -0
- package/dist/{index-DSpzjuqd.cjs → index-Be-S7uSm.cjs} +1 -1
- package/dist/index-DdWBnI7A.cjs +17 -0
- package/dist/{index-Di70KWuY.js → index-DpVIEBHw.js} +844 -825
- package/dist/index-DqhqBi7O.cjs +1 -0
- package/dist/{index-UC0Ux38E.js → index-HxT9XEuh.js} +1 -1
- package/dist/index-N7C6fNah.js +214 -0
- package/dist/index-UU5ODHGU.cjs +1 -0
- package/dist/{index-BgQAX8rs.js → index-YMUaJU7U.js} +122 -119
- package/dist/{internal-DuMPpcbp.js → internal-D7NxAsc6.js} +2 -2
- package/dist/internal.js +1 -1
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +399 -490
- package/dist/main.cjs +1 -1
- package/dist/main.js +26 -26
- package/dist/{renderGroups-C9QJrAXu.js → renderGroups-JEXqSACh.js} +1 -1
- package/dist/{renderGroups-Dvm1J4lW.cjs → renderGroups-uXXsFpvw.cjs} +1 -1
- package/dist/{renderPasses-CT5iBwtg.cjs → renderPasses-CVWt0t8m.cjs} +2 -2
- package/dist/{renderPasses-CjgG_6kQ.js → renderPasses-CdGZeHHL.js} +4 -4
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/{selectors-Dw3C-gSk.js → selectors-twqYByYZ.js} +3 -3
- package/dist/texture/animatedTexture.d.ts +2 -0
- package/dist/texture/gifReader.d.ts +17 -0
- package/dist/texture/gifTextureSource.d.ts +16 -0
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +8 -8
- package/dist/{useFaceInfo-CwsHZedC.js → useFaceInfo-DOJCGlDG.js} +2 -2
- package/dist/{useFaceInfo-C-WfMlYp.cjs → useFaceInfo-DSUmuzzO.cjs} +1 -1
- package/dist/{useFaceResults-VcFdOUFV.cjs → useFaceResults-B1BSGUAW.cjs} +1 -1
- package/dist/{useFaceResults-CkFc1egZ.js → useFaceResults-CBmhT5E8.js} +1 -1
- package/docs/api/screen-image.mdx +27 -3
- package/docs/api/texture-sources.mdx +25 -6
- package/docs/texture-api-consumer.md +26 -0
- package/package.json +3 -3
- package/dist/contexts-BKvTIayr.cjs +0 -1
- package/dist/contexts-Bk5zz_VR.js +0 -214
- package/dist/index-82aENaRq.cjs +0 -1
- package/dist/index-CEc1CAmB.cjs +0 -1
- package/dist/index-CTHeBQOs.js +0 -178
- package/dist/index-DzEzkBIH.cjs +0 -17
|
@@ -1,58 +1,61 @@
|
|
|
1
1
|
import { jsx as _, jsxs as w } from "react/jsx-runtime";
|
|
2
2
|
import { useThree as k, useFrame as U } from "@react-three/fiber";
|
|
3
|
-
import
|
|
3
|
+
import z, { useId as B, useState as W, useRef as A, useEffect as F, useSyncExternalStore as q, useMemo as v, useContext as G, createContext as J, useCallback as Q } from "react";
|
|
4
4
|
import { u as $, a as e0, X as P, b as t0 } from "./index-JygePOwo.js";
|
|
5
|
-
import { R as
|
|
5
|
+
import { R as n0 } from "./renderLayers-zrK2pv5O.js";
|
|
6
6
|
import * as T from "three";
|
|
7
|
-
function
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
function r0(e) {
|
|
8
|
+
return JSON.stringify(e ?? {});
|
|
9
|
+
}
|
|
10
|
+
function j(e, t, r = !0) {
|
|
11
|
+
const { session: n } = $(), s = B(), [i, f] = W(null), u = r0(t), o = A(t);
|
|
12
|
+
o.current = t, F(() => {
|
|
13
|
+
let c = !1;
|
|
14
|
+
return f(null), n.registry.acquire(e, s, o.current).catch((l) => {
|
|
15
|
+
c || f(l instanceof Error ? l : new Error(String(l)));
|
|
13
16
|
}), () => {
|
|
14
|
-
|
|
17
|
+
c = !0, n.registry.release(e, s);
|
|
15
18
|
};
|
|
16
|
-
}, [
|
|
17
|
-
|
|
18
|
-
}, [
|
|
19
|
-
const
|
|
20
|
-
(
|
|
21
|
-
() =>
|
|
19
|
+
}, [n, e, s, u]), F(() => {
|
|
20
|
+
n.registry.setActive(e, s, r);
|
|
21
|
+
}, [n, e, s, r]);
|
|
22
|
+
const d = n.store, h = q(
|
|
23
|
+
(c) => d.subscribe(c),
|
|
24
|
+
() => d.getSnapshot().pipeline.get(e) ?? null,
|
|
22
25
|
() => null
|
|
23
|
-
),
|
|
26
|
+
), p = v(() => h ? h.getModelNode() : null, [h]);
|
|
24
27
|
return {
|
|
25
|
-
ready:
|
|
26
|
-
node:
|
|
28
|
+
ready: h !== null && i === null,
|
|
29
|
+
node: p,
|
|
27
30
|
error: i
|
|
28
31
|
};
|
|
29
32
|
}
|
|
30
|
-
const
|
|
33
|
+
const s0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PURE__ */ _("meshBasicMaterial", { ...e }) : /* @__PURE__ */ _(
|
|
31
34
|
"meshStandardMaterial",
|
|
32
35
|
{
|
|
33
36
|
...e,
|
|
34
37
|
roughness: t.roughness,
|
|
35
38
|
metalness: t.metalness
|
|
36
39
|
}
|
|
37
|
-
), g = 1e-6,
|
|
38
|
-
const { x: t, y:
|
|
39
|
-
return Math.abs(t -
|
|
40
|
-
},
|
|
41
|
-
if (!
|
|
42
|
-
const s =
|
|
43
|
-
return
|
|
44
|
-
},
|
|
45
|
-
const
|
|
46
|
-
return
|
|
47
|
-
},
|
|
40
|
+
), g = 1e-6, o0 = (e) => {
|
|
41
|
+
const { x: t, y: r, z: n } = e.scale;
|
|
42
|
+
return Math.abs(t - r) <= g && Math.abs(t - n) <= g ? t : 1;
|
|
43
|
+
}, R0 = (e, t, r, n) => {
|
|
44
|
+
if (!r.enabled) return e;
|
|
45
|
+
const s = o0(r);
|
|
46
|
+
return n.x = t.x + (e.x - t.x) * s + r.position.x, n.y = t.y + (e.y - t.y) * s - r.position.y, n.z = t.z + (e.z - t.z) * s + r.position.z, n;
|
|
47
|
+
}, c0 = (e, t, r) => e0(e, t, r), b0 = (e, t, r) => {
|
|
48
|
+
const n = (e.x - 0.5) * 2, s = (0.5 - e.y) * 2, i = T.MathUtils.clamp(e.z * 2, -1, 1);
|
|
49
|
+
return r.set(n, s, i).unproject(t);
|
|
50
|
+
}, i0 = (e, t, r, n, s, i) => {
|
|
48
51
|
const f = Math.min(t, e.length);
|
|
49
52
|
for (let u = 0; u < f; u++) {
|
|
50
|
-
s(e[u],
|
|
53
|
+
s(e[u], n, i);
|
|
51
54
|
const o = u * 3;
|
|
52
|
-
|
|
55
|
+
r[o] = i.x, r[o + 1] = i.y, r[o + 2] = i.z;
|
|
53
56
|
}
|
|
54
57
|
return f;
|
|
55
|
-
},
|
|
58
|
+
}, a0 = [
|
|
56
59
|
[127, 34, 139],
|
|
57
60
|
[11, 0, 37],
|
|
58
61
|
[232, 231, 120],
|
|
@@ -906,7 +909,7 @@ const n0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
906
909
|
[390, 339, 249],
|
|
907
910
|
[339, 448, 255],
|
|
908
911
|
[255, 339, 448]
|
|
909
|
-
].flat(),
|
|
912
|
+
].flat(), u0 = [
|
|
910
913
|
0.5104879319667817,
|
|
911
914
|
0.33515610277652746,
|
|
912
915
|
0.5174233198165894,
|
|
@@ -1863,7 +1866,7 @@ const n0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
1863
1866
|
0.618020570576191,
|
|
1864
1867
|
0.33353258967399596,
|
|
1865
1868
|
0.5936576622724534
|
|
1866
|
-
], H = 468,
|
|
1869
|
+
], H = 468, l0 = H * 3, f0 = {
|
|
1867
1870
|
type: "standard",
|
|
1868
1871
|
color: "#ffffff",
|
|
1869
1872
|
opacity: 1,
|
|
@@ -1873,51 +1876,51 @@ const n0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
1873
1876
|
}, K = ({
|
|
1874
1877
|
material: e,
|
|
1875
1878
|
faceIndex: t = 0,
|
|
1876
|
-
numFaces:
|
|
1877
|
-
visible:
|
|
1879
|
+
numFaces: r,
|
|
1880
|
+
visible: n = !0,
|
|
1878
1881
|
children: s
|
|
1879
1882
|
}) => {
|
|
1880
1883
|
const { ready: i, node: f } = j(
|
|
1881
1884
|
P.FACE_TRACKER,
|
|
1882
|
-
|
|
1883
|
-
), { camera: u } = k(), o =
|
|
1884
|
-
const
|
|
1885
|
-
return a.setUsage(T.DynamicDrawUsage), { indexAttr:
|
|
1885
|
+
r === void 0 ? void 0 : { numFaces: r }
|
|
1886
|
+
), { camera: u } = k(), o = A(null), d = A(null), h = A(null), p = A(null), c = A(null), l = A(new T.Vector3()), E = v(() => {
|
|
1887
|
+
const m = new Uint16Array(a0), x = new T.BufferAttribute(m, 1), y = new T.Float32BufferAttribute(u0, 2), R = new Float32Array(l0), a = new T.Float32BufferAttribute(R, 3);
|
|
1888
|
+
return a.setUsage(T.DynamicDrawUsage), { indexAttr: x, uvAttr: y, positionAttr: a, positions: R };
|
|
1886
1889
|
}, []);
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
const
|
|
1890
|
-
if (
|
|
1891
|
-
const
|
|
1892
|
-
|
|
1890
|
+
F(() => {
|
|
1891
|
+
p.current = E.indexAttr, c.current = E.uvAttr, h.current = E.positionAttr, d.current = E.positions;
|
|
1892
|
+
const m = o.current;
|
|
1893
|
+
if (m) {
|
|
1894
|
+
const x = m.geometry;
|
|
1895
|
+
x.setAttribute("position", E.positionAttr), x.setAttribute("uv", E.uvAttr), x.setIndex(E.indexAttr);
|
|
1893
1896
|
}
|
|
1894
1897
|
return () => {
|
|
1895
|
-
|
|
1898
|
+
p.current = null, c.current = null, h.current = null, d.current = null;
|
|
1896
1899
|
};
|
|
1897
|
-
}, [
|
|
1898
|
-
var
|
|
1900
|
+
}, [E]), U(() => {
|
|
1901
|
+
var M;
|
|
1899
1902
|
if (!i || !f || !o.current) return;
|
|
1900
|
-
const { detectionResults:
|
|
1901
|
-
if (!
|
|
1902
|
-
|
|
1903
|
+
const { detectionResults: m } = f, x = (M = m == null ? void 0 : m.faceLandmarks) == null ? void 0 : M[t], y = o.current.geometry, R = d.current, a = h.current;
|
|
1904
|
+
if (!x || x.length === 0 || !R || !a) {
|
|
1905
|
+
y.drawRange.count !== 0 && y.setDrawRange(0, 0);
|
|
1903
1906
|
return;
|
|
1904
1907
|
}
|
|
1905
|
-
|
|
1906
|
-
|
|
1908
|
+
y.getAttribute("position") !== a && (y.setAttribute("position", a), y.setAttribute("uv", c.current), y.setIndex(p.current)), y.drawRange.count === 0 && y.setDrawRange(0, 1 / 0), i0(
|
|
1909
|
+
x,
|
|
1907
1910
|
H,
|
|
1908
1911
|
R,
|
|
1909
1912
|
u,
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
), a.needsUpdate = !0,
|
|
1913
|
+
c0,
|
|
1914
|
+
l.current
|
|
1915
|
+
), a.needsUpdate = !0, y.computeVertexNormals();
|
|
1913
1916
|
});
|
|
1914
|
-
const
|
|
1915
|
-
return /* @__PURE__ */ w("mesh", { material: e, ref: o, visible:
|
|
1917
|
+
const S = s != null && s !== !1;
|
|
1918
|
+
return /* @__PURE__ */ w("mesh", { material: e, ref: o, visible: n, children: [
|
|
1916
1919
|
/* @__PURE__ */ _("bufferGeometry", {}),
|
|
1917
|
-
!e && !
|
|
1918
|
-
|
|
1920
|
+
!e && !S && /* @__PURE__ */ _(
|
|
1921
|
+
s0,
|
|
1919
1922
|
{
|
|
1920
|
-
settings:
|
|
1923
|
+
settings: f0,
|
|
1921
1924
|
materialProps: {
|
|
1922
1925
|
attach: "material",
|
|
1923
1926
|
transparent: !0,
|
|
@@ -1927,7 +1930,7 @@ const n0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
1927
1930
|
}
|
|
1928
1931
|
}
|
|
1929
1932
|
),
|
|
1930
|
-
!e &&
|
|
1933
|
+
!e && S ? s : null
|
|
1931
1934
|
] });
|
|
1932
1935
|
};
|
|
1933
1936
|
K.displayName = "FaceMesh";
|
|
@@ -1942,114 +1945,114 @@ const L = {
|
|
|
1942
1945
|
"face.mouthCenter": 13,
|
|
1943
1946
|
"face.leftEarlobe": 454,
|
|
1944
1947
|
"face.rightEarlobe": 234
|
|
1945
|
-
},
|
|
1948
|
+
}, y0 = {
|
|
1946
1949
|
"face.center": [10, 152, 234, 454],
|
|
1947
1950
|
"face.leftEye": [263, 362, 387, 373],
|
|
1948
1951
|
"face.rightEye": [33, 133, 158, 145]
|
|
1949
|
-
}, V = (e, t = 0) => Number.isFinite(e) ? e : t, D = (e) => Math.max(-1, Math.min(1, V(e))),
|
|
1952
|
+
}, V = (e, t = 0) => Number.isFinite(e) ? e : t, D = (e) => Math.max(-1, Math.min(1, V(e))), d0 = { x: 0, y: 0, z: 0 }, h0 = (e, t, r = d0, n = { x: 0, y: 0, z: 0, visibility: 0 }) => {
|
|
1950
1953
|
const s = L[e];
|
|
1951
1954
|
if (s !== void 0) {
|
|
1952
1955
|
const c = t[s];
|
|
1953
|
-
return c ? Object.assign(
|
|
1956
|
+
return c ? Object.assign(n, c) : null;
|
|
1954
1957
|
}
|
|
1955
|
-
const i =
|
|
1958
|
+
const i = y0[e];
|
|
1956
1959
|
if (i) {
|
|
1957
|
-
|
|
1960
|
+
n.x = 0, n.y = 0, n.z = 0;
|
|
1958
1961
|
for (const c of i) {
|
|
1959
|
-
const
|
|
1960
|
-
if (!
|
|
1961
|
-
|
|
1962
|
+
const l = t[c];
|
|
1963
|
+
if (!l) return null;
|
|
1964
|
+
n.x += l.x, n.y += l.y, n.z += l.z;
|
|
1962
1965
|
}
|
|
1963
|
-
return
|
|
1966
|
+
return n.x /= i.length, n.y /= i.length, n.z /= i.length, n.visibility = 1, n;
|
|
1964
1967
|
}
|
|
1965
1968
|
if (e !== "face.custom" || t.length === 0) return null;
|
|
1966
|
-
let f = 1 / 0, u = 1 / 0, o = -1 / 0,
|
|
1969
|
+
let f = 1 / 0, u = 1 / 0, o = -1 / 0, d = -1 / 0, h = 0;
|
|
1967
1970
|
for (const c of t)
|
|
1968
|
-
f = Math.min(f, c.x), u = Math.min(u, c.y), o = Math.max(o, c.x),
|
|
1969
|
-
const
|
|
1970
|
-
return
|
|
1971
|
-
},
|
|
1971
|
+
f = Math.min(f, c.x), u = Math.min(u, c.y), o = Math.max(o, c.x), d = Math.max(d, c.y), h += c.z;
|
|
1972
|
+
const p = o - f;
|
|
1973
|
+
return n.x = (f + o) * 0.5 - D(r.x) * p * 0.5, n.y = (u + d) * 0.5 - D(r.y) * (d - u) * 0.5, n.z = h / t.length - V(r.z) * p, n.visibility = 1, n;
|
|
1974
|
+
}, T0 = {
|
|
1972
1975
|
left: L["face.leftEyeOuter"],
|
|
1973
1976
|
right: L["face.rightEyeOuter"]
|
|
1974
|
-
}, X = J(null),
|
|
1977
|
+
}, X = J(null), _0 = () => G(X), p0 = ({
|
|
1975
1978
|
faceIndex: e = 0,
|
|
1976
1979
|
numFaces: t,
|
|
1977
|
-
scaleWithFace:
|
|
1978
|
-
followFaceRoll:
|
|
1980
|
+
scaleWithFace: r = !1,
|
|
1981
|
+
followFaceRoll: n = !0,
|
|
1979
1982
|
targetFps: s,
|
|
1980
1983
|
active: i = !0,
|
|
1981
1984
|
children: f
|
|
1982
1985
|
}) => {
|
|
1983
|
-
const u =
|
|
1986
|
+
const u = A(!1), o = A(null), d = v(() => {
|
|
1984
1987
|
if (!(t === void 0 && s === void 0))
|
|
1985
1988
|
return {
|
|
1986
1989
|
...t === void 0 ? {} : { numFaces: t },
|
|
1987
1990
|
...s === void 0 ? {} : { targetFps: s }
|
|
1988
1991
|
};
|
|
1989
|
-
}, [t, s]), { ready:
|
|
1992
|
+
}, [t, s]), { ready: h, node: p } = j(
|
|
1990
1993
|
P.FACE_TRACKER,
|
|
1991
|
-
|
|
1994
|
+
d,
|
|
1992
1995
|
i
|
|
1993
|
-
), { camera: c } = k(),
|
|
1994
|
-
|
|
1995
|
-
const
|
|
1996
|
+
), { camera: c } = k(), l = A(c);
|
|
1997
|
+
l.current !== c && (l.current = c, u.current = !1);
|
|
1998
|
+
const E = A(null), S = A({ x: 0, y: 0, z: 0, visibility: 0 });
|
|
1996
1999
|
U(() => {
|
|
1997
|
-
if (!
|
|
1998
|
-
|
|
1999
|
-
const a =
|
|
2000
|
+
if (!h || !p || !o.current) return;
|
|
2001
|
+
E.current = p, !u.current && l.current && (p.setCamera(l.current, e), u.current = !0);
|
|
2002
|
+
const a = p.getFace(e);
|
|
2000
2003
|
if (!a) {
|
|
2001
2004
|
o.current.visible = !1;
|
|
2002
2005
|
return;
|
|
2003
2006
|
}
|
|
2004
2007
|
o.current.visible = !0;
|
|
2005
|
-
const { position:
|
|
2006
|
-
o.current.position.set(
|
|
2008
|
+
const { position: M, rotation: C, scale: b } = a.transform;
|
|
2009
|
+
o.current.position.set(M.x, M.y, M.z), o.current.rotation.set(C.x, C.y, n ? C.z : 0), r ? o.current.scale.set(b.x, b.y, b.z) : o.current.scale.set(1, 1, 1);
|
|
2007
2010
|
});
|
|
2008
|
-
const
|
|
2009
|
-
(a,
|
|
2010
|
-
var
|
|
2011
|
-
const C =
|
|
2011
|
+
const m = Q(
|
|
2012
|
+
(a, M) => {
|
|
2013
|
+
var O, I;
|
|
2014
|
+
const C = E.current, b = (I = (O = C == null ? void 0 : C.detectionResults) == null ? void 0 : O.faceLandmarks) == null ? void 0 : I[e];
|
|
2012
2015
|
if (!b || b.length === 0) return null;
|
|
2013
2016
|
const N = h0(
|
|
2014
2017
|
a,
|
|
2015
2018
|
b,
|
|
2016
|
-
|
|
2017
|
-
|
|
2019
|
+
M,
|
|
2020
|
+
S.current
|
|
2018
2021
|
);
|
|
2019
|
-
return N ? { position: t0(N,
|
|
2022
|
+
return N ? { position: t0(N, l.current) } : null;
|
|
2020
2023
|
},
|
|
2021
2024
|
[e]
|
|
2022
|
-
),
|
|
2023
|
-
() => ({ type: "face", resolveLandmark:
|
|
2024
|
-
[
|
|
2025
|
+
), x = v(
|
|
2026
|
+
() => ({ type: "face", resolveLandmark: m }),
|
|
2027
|
+
[m]
|
|
2025
2028
|
);
|
|
2026
|
-
let
|
|
2029
|
+
let y;
|
|
2027
2030
|
const R = [];
|
|
2028
|
-
return
|
|
2029
|
-
var
|
|
2030
|
-
|
|
2031
|
-
(((
|
|
2032
|
-
((C = a.type) == null ? void 0 : C.displayName) === "FaceMesh") ?
|
|
2033
|
-
}), /* @__PURE__ */ w(X.Provider, { value:
|
|
2034
|
-
/* @__PURE__ */ _("group", { ref: o, renderOrder:
|
|
2035
|
-
|
|
2031
|
+
return z.Children.forEach(f, (a) => {
|
|
2032
|
+
var M, C;
|
|
2033
|
+
z.isValidElement(a) && // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2034
|
+
(((M = a.type) == null ? void 0 : M.displayName) === "FaceTracker.Mesh" || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2035
|
+
((C = a.type) == null ? void 0 : C.displayName) === "FaceMesh") ? y = z.cloneElement(a, { faceIndex: e, numFaces: t }) : R.push(a);
|
|
2036
|
+
}), /* @__PURE__ */ w(X.Provider, { value: x, children: [
|
|
2037
|
+
/* @__PURE__ */ _("group", { ref: o, renderOrder: n0.TRACKED, children: R }),
|
|
2038
|
+
y
|
|
2036
2039
|
] });
|
|
2037
2040
|
}, Z = (e) => /* @__PURE__ */ _(K, { ...e });
|
|
2038
2041
|
Z.displayName = "FaceTracker.Mesh";
|
|
2039
|
-
const Y =
|
|
2042
|
+
const Y = p0;
|
|
2040
2043
|
Y.Mesh = Z;
|
|
2041
|
-
const
|
|
2044
|
+
const S0 = Y;
|
|
2042
2045
|
export {
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
+
T0 as F,
|
|
2047
|
+
S0 as H,
|
|
2048
|
+
s0 as M,
|
|
2046
2049
|
X as T,
|
|
2047
|
-
|
|
2050
|
+
_0 as a,
|
|
2048
2051
|
Y as b,
|
|
2049
2052
|
K as c,
|
|
2050
2053
|
L as d,
|
|
2051
|
-
|
|
2054
|
+
b0 as p,
|
|
2052
2055
|
h0 as r,
|
|
2053
|
-
|
|
2056
|
+
R0 as t,
|
|
2054
2057
|
j as u
|
|
2055
2058
|
};
|
|
@@ -3,7 +3,7 @@ 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 {
|
|
6
|
+
import { a as J } from "./selectors-twqYByYZ.js";
|
|
7
7
|
import { u as G } from "./index-JygePOwo.js";
|
|
8
8
|
import { useFrame as Q } from "@react-three/fiber";
|
|
9
9
|
import "./hasFullUnitUVBounds-BGvcFsQM.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-xp4bg3gH.js")).DebuggerUI })), C = X(null);
|
|
380
380
|
function be({
|
|
381
381
|
children: t,
|
|
382
382
|
keyboardShortcut: e = "ctrl+shift+d",
|
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-D7NxAsc6.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";var pe=Object.defineProperty;var me=(e,t,r)=>t in e?pe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var X=(e,t,r)=>me(e,typeof t!="symbol"?t+"":t,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const q=require("./index-D4bLzBr6.cjs"),P=require("./index-82aENaRq.cjs"),j=require("./selectors-2QvO5RYY.cjs"),f=require("react"),W=require("./getFaceInfo-CyPAKh3h.cjs"),u=require("react/jsx-runtime"),ge=require("@react-three/drei"),V=require("./index-CEc1CAmB.cjs"),re=require("./useFaceResults-VcFdOUFV.cjs"),xe=require("./hasFullUnitUVBounds-p1Dl0ejX.cjs"),L=require("./contexts-BKvTIayr.cjs"),be=require("three");function we(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const z=we(be),B=({children:e,config:t,style:r})=>u.jsx("div",{"data-render-target":t.name,style:{position:"absolute",inset:0,overflow:"hidden",background:t.clearColor,pointerEvents:t.pointerEvents??"none",zIndex:t.zIndex,opacity:t.hidden?0:1,...r},children:e}),N=({canvas:e,layout:t,media:r,mirrored:n,filter:o})=>{const i=Math.round(t.destination.width),a=Math.round(t.destination.height);e.width!==i&&(e.width=i),e.height!==a&&(e.height=a);const s=e.getContext("2d");s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,i,a),n&&(s.translate(i,0),s.scale(-1,1)),o&&(s.filter=o),s.drawImage(r,t.offsetX,t.offsetY,t.drawWidth,t.drawHeight),o&&(s.filter="none"),s.setTransform(1,0,0,1,0,0))},ne=({canvasRef:e,enabled:t=!0,fps:r=30,imageRef:n,layout:o,mirrored:i,sourceKind:a,videoRef:s})=>{f.useEffect(()=>{if(!t){const b=e.current,g=b==null?void 0:b.getContext("2d");b&&g&&g.clearRect(0,0,b.width,b.height);return}let l=0,c=0;const d=r>0?1e3/r:0,p=b=>{if(l=requestAnimationFrame(p),d>0&&b-c<d)return;c=b;const g=e.current;if(!g||!o)return;if(a==="image"){const x=n.current;if(!x||!x.complete||x.naturalWidth<=0||x.naturalHeight<=0)return;N({canvas:g,layout:o,media:x,mirrored:i});return}const w=s.current;!w||w.readyState<2||w.videoWidth<=0||w.videoHeight<=0||N({canvas:g,layout:o,media:w,mirrored:i})};return l=requestAnimationFrame(p),()=>{cancelAnimationFrame(l)}},[e,t,r,n,o,i,a,s])},oe=({canvasRef:e,imageRef:t,layer:r,layout:n,mirrored:o,sourceKind:i,videoRef:a})=>(ne({canvasRef:e,imageRef:t,layout:n,mirrored:o,sourceKind:i,videoRef:a}),u.jsx(B,{config:r,children:u.jsx("canvas",{ref:e,style:{position:"absolute",inset:0,width:"100%",height:"100%",display:"block",background:"#000"}})})),ve=({canvasRef:e,controlInsetTop:t,debugVisible:r,fps:n=15,imageRef:o,layer:i,layout:a,mirrored:s,sourceKind:l,videoRef:c,viewportSize:d})=>{ne({canvasRef:e,enabled:r,fps:n,imageRef:o,layout:a,mirrored:s,sourceKind:l,videoRef:c});const p=Math.min(220,Math.max(120,d.width*.22)),b=d.width>0&&d.height>0?d.width/d.height:1,g=Math.min(d.height-24,Math.max(t??16,16));return u.jsx(B,{config:i,children:u.jsx("canvas",{ref:e,style:{position:"absolute",left:16,top:g,width:r?p:1,height:r?"auto":1,aspectRatio:`${b}`,opacity:r?.85:0,borderRadius:10,border:r?"1px solid rgba(255,255,255,0.16)":"none",pointerEvents:"none",objectFit:"contain",background:"#000"}})})},Se={audio:!1,video:{facingMode:"user",frameRate:{ideal:30,max:60}}},ye={name:"viewport-live",clearColor:"#000000",pointerEvents:"none",zIndex:0},Re={name:"viewport-ui",clearColor:"transparent",pointerEvents:"auto",zIndex:5},Ce={name:"viewport-scene",clearColor:"transparent",pointerEvents:"auto",zIndex:1},k={webcam:{icon:"◉",label:"Webcam"},image:{icon:"▣",label:"Images"},video:{icon:"▶",label:"Videos"}},Ee=({imageRef:e,selectedSource:t,videoRef:r})=>u.jsxs(u.Fragment,{children:[u.jsx("video",{ref:r,style:{position:"absolute",width:1,height:1,opacity:t==="image"?0:.001,pointerEvents:"none"}}),u.jsx("img",{ref:e,alt:"",style:{position:"absolute",width:1,height:1,opacity:t==="image"?.001:0,pointerEvents:"none"}})]}),Q=({dock:e,label:t,onChange:r,options:n,value:o})=>u.jsx("div",{style:{position:"absolute",top:e==="top-left"?74:void 0,bottom:e==="bottom-left"?74:void 0,left:16,zIndex:5,maxWidth:"calc(100vw - 32px)",padding:10,borderRadius:14,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)"},children:u.jsxs("label",{style:{display:"grid",gap:6,color:"#e5eefb",fontSize:12,fontWeight:700},children:[u.jsx("span",{children:t}),u.jsx("select",{value:o,onChange:i=>r(i.target.value),style:{minWidth:180,maxWidth:"calc(100vw - 52px)",height:36,borderRadius:10,border:"1px solid rgba(255,255,255,0.12)",background:"rgba(255,255,255,0.06)",color:"#e5eefb",padding:"0 10px"},children:n.map(i=>u.jsx("option",{value:i.id,style:{color:"#111827"},children:i.label},i.id))})]})}),Te=({dock:e,imageOptions:t,selectedImageId:r,selectedSource:n,selectedVideoId:o,setSelectedImageId:i,setSelectedSource:a,setSelectedVideoId:s,showMediaControls:l,videoOptions:c})=>{const[d,p]=f.useState(!1),b=["webcam","image","video"].filter(g=>g==="image"?t.length>0:g==="video"?c.length>0:!0);return l?d?u.jsx("button",{type:"button",onClick:()=>p(!1),"aria-label":"Open media controls",title:"Open media controls",style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer"},children:"≡"}):u.jsxs(u.Fragment,{children:[u.jsxs("div",{style:{position:"absolute",top:e==="top-left"?16:void 0,bottom:e==="bottom-left"?16:void 0,left:16,zIndex:5,display:"inline-flex",alignItems:"center",gap:8,maxWidth:"calc(100vw - 32px)"},children:[u.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:8,padding:8,borderRadius:999,background:"rgba(15, 23, 42, 0.72)",border:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",overflowX:"auto"},children:b.map(g=>{const w=g===n;return u.jsxs("button",{type:"button",onClick:()=>a(g),"aria-pressed":w,title:k[g].label,style:{border:"none",borderRadius:999,minWidth:42,height:42,padding:"0 12px",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:8,background:w?"rgba(56, 189, 248, 0.18)":"rgba(255,255,255,0.04)",color:w?"#e0f2fe":"rgba(229,238,251,0.82)",cursor:"pointer",flex:"0 0 auto"},children:[u.jsx("span",{style:{fontSize:14,lineHeight:1},children:k[g].icon}),u.jsx("span",{style:{fontSize:12,fontWeight:700,letterSpacing:"0.01em"},children:k[g].label})]},g)})}),u.jsx("button",{type:"button",onClick:()=>p(!0),"aria-label":"Close media controls",title:"Close media controls",style:{width:40,height:40,border:"1px solid rgba(255,255,255,0.12)",borderRadius:999,background:"rgba(15, 23, 42, 0.72)",color:"#e5eefb",boxShadow:"0 12px 30px rgba(0,0,0,0.18)",backdropFilter:"blur(10px)",cursor:"pointer",flex:"0 0 auto"},children:"×"})]}),n==="image"&&t.length>0&&u.jsx(Q,{dock:e,label:"Image Asset",options:t,value:r,onChange:i}),n==="video"&&c.length>0&&u.jsx(Q,{dock:e,label:"Video Asset",options:c,value:o,onChange:s})]}):null},Me=({containerRef:e,displayCanvasRef:t,imageOptions:r,imageRef:n,layout:o,managesOwnMedia:i,mediaDock:a,mode:s,overlayContent:l,renderOutputs:c,sceneContent:d,selectedImageId:p,selectedSource:b,selectedVideoId:g,setSceneRenderOutputs:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,showMediaControls:F,style:C,videoOptions:S,videoRef:E,viewportSize:v,mirrored:h})=>u.jsxs("div",{ref:e,style:{position:"fixed",inset:0,overflow:"hidden",background:"#000",...C},children:[u.jsx(Ee,{imageRef:n,selectedSource:b,videoRef:E}),s==="dom"&&i&&u.jsx(oe,{canvasRef:t,imageRef:n,videoRef:E,layer:ye,layout:o,mirrored:h,sourceKind:b==="image"?"image":"video"}),(s==="r3f"||s==="hybrid")&&u.jsx(B,{config:Ce,children:u.jsx(L.XRScene,{onRenderOutputs:w,renderOutputs:{sceneColor:c.sceneColor||c.finalColor,sceneDepth:c.sceneDepth},renderTargetSize:v,style:{width:"100%",height:"100%"},children:d})}),u.jsxs(B,{config:Re,children:[i&&u.jsx(Te,{dock:a,imageOptions:r,selectedImageId:p,selectedSource:b,selectedVideoId:g,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,showMediaControls:F,videoOptions:S}),l]})]}),Fe=5,Ie=1,ie=(e,t)=>t,je="brightness(2.2) contrast(1.5) saturate(1.25)",ae=({enabled:e,displayMirrored:t,imageRef:r,layout:n,mode:o,numFaces:i,selectedSource:a,sourceStream:s,videoRef:l})=>{const{session:c}=q.useXRContext(),d=f.useRef(null),p=f.useRef(!1),b=f.useRef(document.createElement("canvas")),{ready:g,node:w,error:x}=P.useXRModel(q.XRModel.FACE_TRACKER,{numFaces:i??(o==="head-binding"?Ie:Fe)}),[m,y]=f.useState("idle"),[F,C]=f.useState(null),S=e&&g&&!!w,E=re.useFaceResults({node:S?w:null,enabled:S,selectedSource:a,onFrame:f.useCallback(()=>{C(null),y("ready")},[])});return f.useEffect(()=>{if(!e||!n)return;const v=()=>{const R=a==="image"?r.current:l.current;if(R){if(R instanceof HTMLImageElement){if(!R.complete||R.naturalWidth<=0||R.naturalHeight<=0)return}else if(R.readyState<2||R.videoWidth<=0||R.videoHeight<=0)return;N({canvas:b.current,layout:n,media:R,mirrored:t,filter:a==="webcam"?je:void 0})}};if(a==="image"){v();return}let h=0;const T=()=>{h=requestAnimationFrame(T),v()};return h=requestAnimationFrame(T),()=>cancelAnimationFrame(h)},[t,e,r,n,a,l]),f.useEffect(()=>{var D;if(!e){y("idle"),C(null),p.current=!1,d.current=null;return}if(!n){y("initializing");return}const v=(s==null?void 0:s.id)??(((D=l.current)==null?void 0:D.srcObject)instanceof MediaStream?l.current.srcObject.id:"none"),T=a==="webcam"?`webcam:${v}`:a;d.current!==T&&(p.current=!1,d.current=T);let R=!1;return(async()=>{try{if(y("initializing"),p.current||(await c.setFrameSource({canvas:b.current,sourceKind:a}),await c.start(),p.current=!0),R)return;C(null),y("initializing")}catch(I){if(R)return;y("error"),C(I instanceof Error?I.message:"Failed to initialize SDK face tracking")}})(),()=>{R=!0}},[e,n,a,c,s,l]),f.useEffect(()=>{!S&&e&&!x&&y("initializing")},[S,e,x]),f.useEffect(()=>{x&&(y("error"),C(x.message))},[x]),f.useEffect(()=>()=>{p.current=!1,c.stop()},[c]),{activeDelegate:"GPU",faces:E,status:m,error:F}},Xe=(e,t)=>e==="auto"?t==="webcam"?"cover":"contain":e,ke=({imageOptions:e,initialImageId:t,initialSource:r,initialVideoId:n,source:o,videoOptions:i})=>{var l,c,d,p;const a=(o==null?void 0:o.kind)??r??"webcam";return{selectedSource:a==="image"&&e.length===0||a==="video"&&i.length===0?"webcam":a,selectedImageId:(o==null?void 0:o.kind)==="image"?o.assetId??((l=e[0])==null?void 0:l.id)??"":t??((c=e[0])==null?void 0:c.id)??"",selectedVideoId:(o==null?void 0:o.kind)==="video"?o.assetId??((d=i[0])==null?void 0:d.id)??"":n??((p=i[0])==null?void 0:p.id)??""}},Le=(e,t,r)=>{if(e.width<=0||e.height<=0||t.width<=0||t.height<=0)return null;const n=r==="contain"?Math.min(t.width/e.width,t.height/e.height):Math.max(t.width/e.width,t.height/e.height),o=e.width*n,i=e.height*n;return{source:e,destination:t,drawWidth:o,drawHeight:i,offsetX:(t.width-o)*.5,offsetY:(t.height-i)*.5,scale:n}},ze=e=>{if(!e)return{width:0,height:0};const t=e.getBoundingClientRect();return{width:t.width||e.clientWidth,height:t.height||e.clientHeight}},Be=e=>{const[t,r]=f.useState({width:0,height:0});return f.useLayoutEffect(()=>{const n=e.current;if(!n)return;let o=0;const i=()=>{const c=ze(n);r(d=>d.width===c.width&&d.height===c.height?d:c)},a=()=>{i(),o&&cancelAnimationFrame(o),o=requestAnimationFrame(i)};a();const s=new ResizeObserver(a);s.observe(n);const l=window.visualViewport;return window.addEventListener("resize",a),window.addEventListener("orientationchange",a),l==null||l.addEventListener("resize",a),l==null||l.addEventListener("scroll",a),()=>{o&&cancelAnimationFrame(o),s.disconnect(),window.removeEventListener("resize",a),window.removeEventListener("orientationchange",a),l==null||l.removeEventListener("resize",a),l==null||l.removeEventListener("scroll",a)}},[e]),t},Ve=({enabled:e,selectedSource:t})=>{const r=j.useXRModelNode(q.XRModel.FACE_TRACKER);return{faces:re.useFaceResults({node:r,enabled:e,selectedSource:t}),trackerStatus:r?"ready":"idle"}},Z=e=>{e&&(e.pause(),e.removeAttribute("src"),e.srcObject=null,e.load())},ee=e=>{e&&e.removeAttribute("src")},De=({enabled:e,imageAsset:t,selectedSource:r,videoAsset:n})=>{const o=f.useRef(null),i=f.useRef(null),[a,s]=f.useState(null),[l,c]=f.useState({width:0,height:0}),[d,p]=f.useState("idle"),[b,g]=f.useState(null);return f.useEffect(()=>{if(!e){Z(o.current),ee(i.current),s(null),c({width:0,height:0}),p("idle"),g(null);return}let w=!1,x=null;const m=(v,h)=>{w||(c({width:v,height:h}),p("ready"),g(null))},y=()=>{Z(o.current),ee(i.current),x==null||x.getTracks().forEach(v=>v.stop()),x=null,s(null)},F=async()=>{p("requesting");const v=await navigator.mediaDevices.getUserMedia(Se);if(w){v.getTracks().forEach(T=>T.stop());return}x=v,s(v);const h=o.current;h&&(h.srcObject=v,h.muted=!0,h.playsInline=!0,h.autoplay=!0,await h.play(),m(h.videoWidth,h.videoHeight))},C=async v=>{p("requesting"),s(null);const h=o.current;h&&(h.src=v,h.muted=!0,h.loop=!0,h.playsInline=!0,h.autoplay=!0,h.crossOrigin="anonymous",await h.play(),m(h.videoWidth,h.videoHeight))},S=async v=>{p("requesting"),s(null);const h=i.current;h&&(await new Promise((T,R)=>{h.onload=()=>T(),h.onerror=()=>R(new Error("Unable to load image")),h.src=v}),m(h.naturalWidth,h.naturalHeight))};return y(),(async()=>{try{if(r==="webcam"){await F();return}if(r==="video"){if(!(n!=null&&n.src))throw new Error("Missing video source");await C(n.src);return}if(!(t!=null&&t.src))throw new Error("Missing image source");await S(t.src)}catch(v){if(w)return;p("error"),g(v instanceof Error?v.message:`Unable to initialize ${r}`)}})(),()=>{w=!0,y()}},[e,t,r,n]),{videoRef:o,imageRef:i,stream:a,mediaSize:l,status:d,error:b}},Ae=({enabled:e,imageRef:t,selectedSource:r,status:n,videoRef:o})=>{const[i,a]=f.useState(null);return f.useEffect(()=>{if(!e||n!=="ready"){a(c=>(c==null||c.dispose(),null));return}const s=r==="image"?t.current:o.current;if(!s)return;const l=r==="image"?new z.Texture(s):new z.VideoTexture(s);return l.colorSpace=z.SRGBColorSpace,l.minFilter=z.LinearFilter,l.magFilter=z.LinearFilter,l.generateMipmaps=!1,l.needsUpdate=!0,a(c=>(c==null||c.dispose(),l)),()=>{l.dispose()}},[e,t,r,n,o]),i},qe=({externalTracker:e,imageOptions:t,layout:r,managesOwnMedia:n,mediaError:o,mediaFitMode:i,mediaSize:a,mediaStatus:s,mirrored:l,selectedImage:c,selectedImageId:d,selectedSource:p,selectedVideo:b,selectedVideoId:g,setMirrored:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,setShowMediaControls:F,showMediaControls:C,tracker:S,videoOptions:E,viewportSize:v})=>{const h=p==="image"?`${k.image.label}: ${(c==null?void 0:c.label)??""}`:p==="video"?`${k.video.label}: ${(b==null?void 0:b.label)??""}`:k.webcam.label;return{activeDelegate:n?S.activeDelegate:null,faces:n?S.faces:e.faces,imageOptions:t,layout:r,mediaError:o,mediaFitMode:i,mediaLabel:h,mediaStatus:s,mirrored:l,selectedImageId:d,selectedSource:p,selectedVideoId:g,setMirrored:w,setSelectedImageId:x,setSelectedSource:m,setSelectedVideoId:y,setShowMediaControls:F,showMediaControls:C,trackerError:n?S.error:null,trackerStatus:n?S.status:e.trackerStatus,videoOptions:E,viewportSize:v,mediaSize:a}},Pe=({mediaTexture:e,previewMode:t,renderOutputs:r,sceneRenderOutputs:n})=>f.useMemo(()=>({requested:r,previewMode:t,mediaColorTexture:e,sceneColorTexture:n.sceneColorTexture,finalColorTexture:r.finalColor?n.sceneColorTexture:null,sceneDepthTexture:n.sceneDepthTexture,estimatedDepthTexture:null,available:{mediaColor:e!==null,sceneColor:n.sceneColorTexture!==null,finalColor:!!(r.finalColor&&n.sceneColorTexture),sceneDepth:n.sceneDepthTexture!==null,estimatedDepth:!1}}),[e,t,r,n]),We=({fitMode:e,imageOptions:t,initialImageId:r,initialMirrored:n,initialSource:o,initialVideoId:i,mediaStrategy:a,previewMode:s,renderOutputs:l,showMediaControlsByDefault:c,source:d,videoOptions:p})=>{const b=f.useRef(null),g=f.useRef(null),w=Be(b),x=f.useMemo(()=>ke({imageOptions:t,initialImageId:r,initialSource:o,initialVideoId:i,source:d,videoOptions:p}),[t,r,o,i,d,p]),[m,y]=f.useState(n),[F,C]=f.useState(c),[S,E]=f.useState(x.selectedSource),[v,h]=f.useState(x.selectedImageId),[T,R]=f.useState(x.selectedVideoId),[G,D]=f.useState({sceneColorTexture:null,sceneDepthTexture:null}),I=a==="internal";f.useEffect(()=>{d&&(E(x.selectedSource),h(x.selectedImageId),R(x.selectedVideoId))},[x,d]);const Y=t.find(U=>U.id===v)??t[0],J=p.find(U=>U.id===T)??p[0],M=De({enabled:I,imageAsset:Y,selectedSource:S,videoAsset:J}),_=Xe(e,S),A=f.useMemo(()=>Le(M.mediaSize,w,_),[M.mediaSize,_,w]),ce=Ae({enabled:!!(l.mediaColor||l.finalColor),imageRef:M.imageRef,selectedSource:S,status:M.status,videoRef:M.videoRef}),H=ie(S,m),de=ae({displayMirrored:H,enabled:I&&M.status==="ready"&&A!==null,imageRef:M.imageRef,layout:A,selectedSource:S,sourceStream:M.stream,videoRef:M.videoRef}),ue=Ve({enabled:!I,selectedSource:S}),he=qe({externalTracker:ue,imageOptions:t,layout:A,managesOwnMedia:I,mediaError:M.error,mediaFitMode:_,mediaSize:M.mediaSize,mediaStatus:M.status,mirrored:H,selectedImage:Y,selectedImageId:v,selectedSource:S,selectedVideo:J,selectedVideoId:T,setMirrored:y,setSelectedImageId:h,setSelectedSource:E,setSelectedVideoId:R,setShowMediaControls:C,showMediaControls:F,tracker:de,videoOptions:p,viewportSize:w}),fe=Pe({mediaTexture:ce,previewMode:s,renderOutputs:l,sceneRenderOutputs:G});return{containerRef:b,displayCanvasRef:g,displayMirrored:H,layout:A,managesOwnMedia:I,media:M,renderOutputState:fe,renderState:he,selectedImageId:v,selectedSource:S,selectedVideoId:T,setSceneRenderOutputs:D,setSelectedImageId:h,setSelectedSource:E,setSelectedVideoId:R,showMediaControls:F,viewportSize:w}},O=({children:e})=>u.jsx(u.Fragment,{children:e});O.displayName="XRViewport.Scene";const K=({children:e})=>u.jsx(u.Fragment,{children:e});K.displayName="XRViewport.Overlay";const _e=(e,t)=>{if(e==="dom")return{sceneContent:null,overlayContent:t};let r=null,n=null;const o=[];return f.Children.forEach(t,i=>{var s;if(!f.isValidElement(i)){i!=null&&o.push(i);return}const a=(s=i.type)==null?void 0:s.displayName;if(a===O.displayName){r=i.props.children;return}if(a===K.displayName){n=i.props.children;return}o.push(i)}),!n&&o.length>0&&(n=o),{sceneContent:r,overlayContent:n}},te=(e,t)=>typeof e=="function"?e(t):e;function He(e){return e.Scene=O,e.Overlay=K,e}const Ue=He(({children:e,fitMode:t="auto",imageOptions:r=[],initialImageId:n,initialMirrored:o=!0,initialSource:i="webcam",initialVideoId:a,mediaStrategy:s="internal",mediaDock:l="bottom-left",mode:c="dom",previewMode:d="finalColor",renderOutputs:p={},showMediaControlsByDefault:b=!0,source:g,style:w,videoOptions:x=[]})=>{const m=We({fitMode:t,imageOptions:r,initialImageId:n,initialMirrored:o,initialSource:i,initialVideoId:a,mediaStrategy:s,previewMode:d,renderOutputs:p,showMediaControlsByDefault:b,source:g,videoOptions:x}),y=typeof e=="function"?e(m.renderState):e,{sceneContent:F,overlayContent:C}=_e(c,y),S=te(F,m.renderState),E=te(C,m.renderState);return u.jsx(L.XRViewportStateContext.Provider,{value:m.renderState,children:u.jsx(L.XRViewportRenderOutputsContext.Provider,{value:m.renderOutputState,children:u.jsx(Me,{containerRef:m.containerRef,displayCanvasRef:m.displayCanvasRef,imageOptions:r,imageRef:m.media.imageRef,layout:m.layout,managesOwnMedia:m.managesOwnMedia,mediaDock:l,mirrored:m.displayMirrored,mode:c,overlayContent:E,renderOutputs:p,sceneContent:S,selectedImageId:m.selectedImageId,selectedSource:m.selectedSource,selectedVideoId:m.selectedVideoId,setSceneRenderOutputs:m.setSceneRenderOutputs,setSelectedImageId:m.setSelectedImageId,setSelectedSource:m.setSelectedSource,setSelectedVideoId:m.setSelectedVideoId,showMediaControls:m.showMediaControls,style:w,videoOptions:x,videoRef:m.media.videoRef,viewportSize:m.viewportSize})})})}),Ne={position:"absolute",top:-28,left:0,background:"rgba(34, 197, 94, 0.9)",color:"#04130a",fontFamily:"Menlo, Monaco, Consolas, monospace",fontSize:12,fontWeight:700,padding:"4px 8px",whiteSpace:"nowrap"},$e=({boundingBox:e,label:t="face bounding box",color:r="#22c55e",style:n,labelStyle:o})=>u.jsx("div",{style:{position:"absolute",left:`${e.left*100}%`,top:`${e.top*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,border:`3px solid ${r}`,boxSizing:"border-box",pointerEvents:"none",zIndex:20,...n},children:t!==null&&u.jsx("div",{style:{...Ne,...o},children:t})}),Oe=e=>{const[t,r]=f.useState(null);return f.useEffect(()=>{let n=0;const o=()=>{var l,c;n=requestAnimationFrame(o);const i=(c=(l=e==null?void 0:e.detectionResults)==null?void 0:l.faceLandmarks)==null?void 0:c[0];if(!i||i.length===0){r(null);return}const a=W.computeLandmarkBounds(i),s={left:a.minX,top:a.minY,width:a.width,height:a.height};r(d=>d&&d.left===s.left&&d.top===s.top&&d.width===s.width&&d.height===s.height?d:s)};return o(),()=>{cancelAnimationFrame(n)}},[e]),t},Ke=({background:e="#000",children:t,style:r})=>u.jsx("div",{style:{position:"fixed",inset:0,overflow:"hidden",background:e,...r},children:t}),Ge=e=>{const{makeDefault:t=!0,...r}=e;return u.jsx(ge.PerspectiveCamera,{position:[0,0,40],fov:30,near:.1,far:1e3,makeDefault:t,...r})},Ye=["fill","contain"],Je=(e,t,r,n,o)=>{const i=Math.max(1,Math.floor(t)),a=Math.max(0,Math.floor(e)),s=r==="ping-pong"&&i>1?i*2-2:i,l=Math.floor(a/s),c=o>0?l>=o:!n&&a>=s,d=c?s-1:a%s;return{frame:r==="reverse"?i-1-d%i:r==="random"?d*7919%i:r==="ping-pong"&&d>=i?s-d:d,ended:c,loop:l}},Qe=(e,t,r)=>{const n=Math.max(1,Math.floor(r));return Math.floor(Math.max(0,e)*Math.max(0,t))%n};class Ze{constructor(t,r){X(this,"capabilities");X(this,"snapshot");X(this,"listeners",new Set);X(this,"eventListeners",new Map);this.capabilities=t,this.snapshot={state:"idle",frame:0,time:0,playMode:"forward",loop:!0,loopCount:0,...r}}play(){const t=this.snapshot.state==="paused";this.update({state:"playing"}),this.emit(t?"Resume":"PlayBegin")}pause(){this.update({state:"paused"}),this.emit("Pause")}restart(){this.update({state:"playing",frame:0,time:0}),this.emit("PlayBegin")}setPlayMode(t){this.update({playMode:t})}setLoop(t,r=0){this.update({loop:t,loopCount:r})}seek(t){this.capabilities.canSeek&&this.update({frame:Math.max(0,Math.floor(t)),time:Math.max(0,t)})}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}on(t,r){const n=this.eventListeners.get(t)??new Set;return n.add(r),this.eventListeners.set(t,n),()=>this.off(t,r)}off(t,r){var n;(n=this.eventListeners.get(t))==null||n.delete(r)}getSnapshot(){return this.snapshot}dispose(){this.listeners.clear(),this.eventListeners.clear(),this.snapshot={...this.snapshot,state:"idle"}}emit(t){var r;(r=this.eventListeners.get(t))==null||r.forEach(n=>n({type:t,snapshot:this.snapshot}))}update(t){this.snapshot={...this.snapshot,...t},this.listeners.forEach(r=>r(this.snapshot))}}function et(e){return async(t,r)=>{const n=e.find(o=>o.canResolve(t));if(!n)throw new se("No texture provider matched source",t);return le(n.resolve.bind(n),t,r)}}class se extends Error{constructor(r,n){super(r);X(this,"source");this.name="TextureSourceLoadError",this.source=n}}function $(e){if(e.aborted)throw new DOMException("Texture source load aborted","AbortError")}async function le(e,t,r){$(r);const n=await e(t,r);return r.aborted&&(n.dispose(),$(r)),n}function tt(e){e==null||e.dispose()}exports.useXRContext=q.useXRContext;exports.HeadTracker=P.HeadTracker;exports.useTrackerContext=P.useTrackerContext;exports.useXRModel=P.useXRModel;exports.useXRCameraTexture=j.useXRCameraTexture;exports.useXRError=j.useXRError;exports.useXRModelNode=j.useXRModelNode;exports.useXRPipelineSnapshot=j.useXRPipelineSnapshot;exports.useXRReady=j.useXRReady;exports.useXRRenderSize=j.useXRRenderSize;exports.computeLandmarkBounds=W.computeLandmarkBounds;exports.createFaceInfoTarget=W.createFaceInfoTarget;exports.getFaceInfo=W.getFaceInfo;exports.ScreenRectAspectContext=V.ScreenRectAspectContext;exports.getThreeBlending=V.getThreeBlending;exports.getThreeDepthFunction=V.getThreeDepthFunction;exports.getThreeSide=V.getThreeSide;exports.useScreenSpace=V.useScreenSpace;exports.hasFullUnitUVBounds=xe.hasFullUnitUVBounds;exports.computeScreenTransform=L.computeScreenTransform;exports.useXRViewportRenderOutputs=L.useXRViewportRenderOutputs;exports.useXRViewportState=L.useXRViewportState;exports.BasicAnimatedTextureController=Ze;exports.BoundingBoxOverlay=$e;exports.PerspectiveCamera=Ge;exports.TEXTURE_FITS=Ye;exports.TextureSourceLoadError=se;exports.XRCompositor=Ke;exports.XRLayer=B;exports.XRMediaSurface=oe;exports.XRTrackingOverlay=ve;exports.XRViewport=Ue;exports.createTextureSourceResolver=et;exports.disposeResolvedTextureSource=tt;exports.getPlaybackFrame=Je;exports.getSequenceFrame=Qe;exports.resolveCalibrationFaceDisplayMirrored=ie;exports.resolveTextureSource=le;exports.throwIfAborted=$;exports.useCalibrationFaceTracker=ae;exports.useFaceBoundingBox=Oe;
|
|
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;
|