@vincentt-xr/sdk 2.0.0-alpha.0

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 (159) hide show
  1. package/GROUNDING.md +537 -0
  2. package/LICENSE +7 -0
  3. package/README.md +85 -0
  4. package/dist/DebuggerUI-CEfdddkZ.cjs +1 -0
  5. package/dist/DebuggerUI-Dgop6Q6o.js +269 -0
  6. package/dist/audio/AudioEngine.d.ts +98 -0
  7. package/dist/audio/index.d.ts +34 -0
  8. package/dist/components/AspectRatioContainer/index.d.ts +10 -0
  9. package/dist/components/BodyTracker/index.d.ts +15 -0
  10. package/dist/components/Debugger/DebuggerProvider.d.ts +22 -0
  11. package/dist/components/Debugger/DebuggerUI.d.ts +13 -0
  12. package/dist/components/Debugger/index.d.ts +38 -0
  13. package/dist/components/Debugger/styles.d.ts +19 -0
  14. package/dist/components/FaceMesh/FaceMesh.d.ts +26 -0
  15. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +34 -0
  16. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +16 -0
  17. package/dist/components/FaceMesh/canonical/useCanonicalFaceMesh.d.ts +15 -0
  18. package/dist/components/FaceMesh/deform.d.ts +36 -0
  19. package/dist/components/FaceMesh/index.d.ts +6 -0
  20. package/dist/components/FaceMesh/indices.d.ts +1 -0
  21. package/dist/components/FaceMesh/material/blendModes.d.ts +2 -0
  22. package/dist/components/FaceMesh/material/defaults.d.ts +3 -0
  23. package/dist/components/FaceMesh/material/index.d.ts +5 -0
  24. package/dist/components/FaceMesh/material/options.d.ts +25 -0
  25. package/dist/components/FaceMesh/material/support.d.ts +3 -0
  26. package/dist/components/FaceMesh/material/types.d.ts +23 -0
  27. package/dist/components/FaceMesh/uv.d.ts +1 -0
  28. package/dist/components/FaceRetouch/Background.d.ts +16 -0
  29. package/dist/components/FaceRetouch/index.d.ts +6 -0
  30. package/dist/components/FaceRetouch/landmarkMask.d.ts +23 -0
  31. package/dist/components/FaceRetouch/retouchRegions.d.ts +23 -0
  32. package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +14 -0
  33. package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +12 -0
  34. package/dist/components/FaceTracker/BoundingBoxOverlay.d.ts +20 -0
  35. package/dist/components/FaceTracker/index.d.ts +54 -0
  36. package/dist/components/GestureTracker/index.d.ts +31 -0
  37. package/dist/components/GestureTrigger/index.d.ts +3 -0
  38. package/dist/components/HandTracker/index.d.ts +24 -0
  39. package/dist/components/HeadBinding/index.d.ts +31 -0
  40. package/dist/components/HeadBindingOccluder/index.d.ts +36 -0
  41. package/dist/components/HeadOccluder/index.d.ts +13 -0
  42. package/dist/components/Panel/index.d.ts +71 -0
  43. package/dist/components/PerspectiveCamera/index.d.ts +14 -0
  44. package/dist/components/ScreenSpaceUI/ScreenTransform.d.ts +54 -0
  45. package/dist/components/ScreenSpaceUI/context.d.ts +29 -0
  46. package/dist/components/ScreenSpaceUI/index.d.ts +40 -0
  47. package/dist/components/Segmentation/index.d.ts +44 -0
  48. package/dist/components/SpriteAnimation/index.d.ts +52 -0
  49. package/dist/components/TextLabel/index.d.ts +62 -0
  50. package/dist/components/TrackingAnchor/index.d.ts +74 -0
  51. package/dist/components/VideoBackground/index.d.ts +38 -0
  52. package/dist/components/XRCompositor/index.d.ts +5 -0
  53. package/dist/components/XRDebugView/index.d.ts +6 -0
  54. package/dist/components/XRLayer/index.d.ts +6 -0
  55. package/dist/components/XRMediaSurface/index.d.ts +27 -0
  56. package/dist/components/XRProvider/index.d.ts +13 -0
  57. package/dist/components/XRScene/defaults.d.ts +4 -0
  58. package/dist/components/XRScene/index.d.ts +15 -0
  59. package/dist/components/XRViewport/index.d.ts +101 -0
  60. package/dist/components/index.d.ts +26 -0
  61. package/dist/config/index.d.ts +8 -0
  62. package/dist/constants/index.d.ts +25 -0
  63. package/dist/constants/renderLayers.d.ts +25 -0
  64. package/dist/entries/all.d.ts +15 -0
  65. package/dist/entries/core.d.ts +21 -0
  66. package/dist/entries/face-effects.d.ts +19 -0
  67. package/dist/entries/internal.d.ts +16 -0
  68. package/dist/entries/low-level.d.ts +30 -0
  69. package/dist/entries/tracking.d.ts +15 -0
  70. package/dist/face-effects.cjs +252 -0
  71. package/dist/face-effects.js +3542 -0
  72. package/dist/hasFullUnitUVBounds-BGvcFsQM.js +26 -0
  73. package/dist/hasFullUnitUVBounds-p1Dl0ejX.cjs +1 -0
  74. package/dist/hooks/faceResults.d.ts +39 -0
  75. package/dist/hooks/selectors.d.ts +33 -0
  76. package/dist/hooks/useCalibrationFaceTracker.d.ts +23 -0
  77. package/dist/hooks/useDebugger/index.d.ts +25 -0
  78. package/dist/hooks/useDebugger/types.d.ts +20 -0
  79. package/dist/hooks/useFaceBoundingBox.d.ts +11 -0
  80. package/dist/hooks/useFaceResults.d.ts +31 -0
  81. package/dist/hooks/useGestureEdge.d.ts +53 -0
  82. package/dist/hooks/useMediaRecorder.d.ts +40 -0
  83. package/dist/hooks/useTrackerContext.d.ts +35 -0
  84. package/dist/hooks/useXRModel.d.ts +15 -0
  85. package/dist/hooks/useXRSession/constants.d.ts +4 -0
  86. package/dist/hooks/useXRSession/facade.d.ts +39 -0
  87. package/dist/hooks/useXRSession/fns.d.ts +5 -0
  88. package/dist/hooks/useXRSession/index.d.ts +4 -0
  89. package/dist/hooks/useXRSession/registry.d.ts +52 -0
  90. package/dist/hooks/useXRSession/store.d.ts +40 -0
  91. package/dist/index-B5J4gzn2.cjs +1 -0
  92. package/dist/index-BD-JWMjE.js +1991 -0
  93. package/dist/index-BVBVg96G.cjs +1 -0
  94. package/dist/index-CYMj26Ej.js +1331 -0
  95. package/dist/index-DtwHElmG.js +157 -0
  96. package/dist/index-PtFmD6B8.cjs +1 -0
  97. package/dist/internal-DH5d1Xnq.cjs +1 -0
  98. package/dist/internal-KOKJDxCG.js +519 -0
  99. package/dist/internal.cjs +1 -0
  100. package/dist/internal.js +14 -0
  101. package/dist/low-level.cjs +1 -0
  102. package/dist/low-level.js +941 -0
  103. package/dist/main.cjs +1 -0
  104. package/dist/main.js +612 -0
  105. package/dist/models/Base/index.d.ts +25 -0
  106. package/dist/models/Body/index.d.ts +22 -0
  107. package/dist/models/Face/constants.d.ts +2 -0
  108. package/dist/models/Face/index.d.ts +45 -0
  109. package/dist/models/Face/landmarksData.d.ts +2 -0
  110. package/dist/models/Hand/GestureTracking.d.ts +21 -0
  111. package/dist/models/Hand/HandTracking.d.ts +21 -0
  112. package/dist/models/Segmentation/index.d.ts +75 -0
  113. package/dist/models/index.d.ts +5 -0
  114. package/dist/modules/XRClient/index.d.ts +9 -0
  115. package/dist/modules/index.d.ts +1 -0
  116. package/dist/selectors-BHO6TnoC.js +59 -0
  117. package/dist/selectors-Bub0o3qy.cjs +1 -0
  118. package/dist/services/ApiService.d.ts +12 -0
  119. package/dist/services/MetricsCollector/CameraFPSTracker.d.ts +25 -0
  120. package/dist/services/MetricsCollector/MemoryTracker.d.ts +43 -0
  121. package/dist/services/MetricsCollector/RenderTimeTracker.d.ts +10 -0
  122. package/dist/services/MetricsCollector/ResolutionTracker.d.ts +26 -0
  123. package/dist/services/MetricsCollector/index.d.ts +59 -0
  124. package/dist/services/MetricsCollector/types.d.ts +47 -0
  125. package/dist/services/MetricsCollector/utils.d.ts +65 -0
  126. package/dist/texture/computeContainScale.d.ts +25 -0
  127. package/dist/texture/hasFullUnitUVBounds.d.ts +37 -0
  128. package/dist/texture/types.d.ts +20 -0
  129. package/dist/tracking.cjs +1 -0
  130. package/dist/tracking.js +344 -0
  131. package/dist/types/body.d.ts +3 -0
  132. package/dist/types/client.d.ts +3 -0
  133. package/dist/types/common.d.ts +9 -0
  134. package/dist/types/compositor.d.ts +23 -0
  135. package/dist/types/debugger.d.ts +83 -0
  136. package/dist/types/face.d.ts +67 -0
  137. package/dist/types/gesture-tracking.d.ts +15 -0
  138. package/dist/types/hand-tracking.d.ts +5 -0
  139. package/dist/types/headBinding.d.ts +67 -0
  140. package/dist/types/index.d.ts +12 -0
  141. package/dist/types/logger.d.ts +4 -0
  142. package/dist/types/model.d.ts +46 -0
  143. package/dist/types/nodes.d.ts +35 -0
  144. package/dist/types/segmentation.d.ts +31 -0
  145. package/dist/types/session.d.ts +102 -0
  146. package/dist/types/tracking.d.ts +30 -0
  147. package/dist/types/util-types.d.ts +1 -0
  148. package/dist/useFaceResults-cpsSmKKc.js +81 -0
  149. package/dist/useFaceResults-hVUJYSEY.cjs +1 -0
  150. package/dist/utils/calibrationDebug.d.ts +9 -0
  151. package/dist/utils/dataURL.d.ts +6 -0
  152. package/dist/utils/drawMediaCover.d.ts +18 -0
  153. package/dist/utils/errors.d.ts +3 -0
  154. package/dist/utils/fns.d.ts +48 -0
  155. package/dist/utils/headBinding.d.ts +85 -0
  156. package/dist/utils/integrity.d.ts +43 -0
  157. package/dist/utils/landmarkBounds.d.ts +11 -0
  158. package/dist/utils/logger.d.ts +7 -0
  159. package/package.json +113 -0
@@ -0,0 +1,344 @@
1
+ import { u as pr } from "./useFaceResults-cpsSmKKc.js";
2
+ import { u as g, T as z, a as K } from "./index-BD-JWMjE.js";
3
+ import { b as yr, F as mr } from "./index-BD-JWMjE.js";
4
+ import { jsx as E, Fragment as G } from "react/jsx-runtime";
5
+ import { useThree as N, useFrame as v } from "@react-three/fiber";
6
+ import { useRef as T, useCallback as C, useMemo as k, useEffect as x } from "react";
7
+ import * as R from "three";
8
+ import { X as S, R as w } from "./index-CYMj26Ej.js";
9
+ const L = {
10
+ "body.head": 0,
11
+ "body.leftShoulder": 11,
12
+ "body.rightShoulder": 12,
13
+ "body.leftElbow": 13,
14
+ "body.rightElbow": 14,
15
+ "body.leftWrist": 15,
16
+ "body.rightWrist": 16,
17
+ "body.leftHip": 23,
18
+ "body.rightHip": 24,
19
+ "body.leftKnee": 25,
20
+ "body.rightKnee": 26,
21
+ "body.leftAnkle": 27,
22
+ "body.rightAnkle": 28
23
+ }, er = ({ bodyIndex: r = 0, active: n = !0, children: t }) => {
24
+ const e = T(null), { ready: o, node: a } = g(
25
+ S.BODY_TRACKER,
26
+ void 0,
27
+ n
28
+ ), { camera: s } = N(), d = T(s);
29
+ d.current !== s && (d.current = s);
30
+ const i = T(null);
31
+ v(() => {
32
+ if (!o || !a || !e.current) return;
33
+ const f = a;
34
+ i.current = f;
35
+ const c = f.getLandmarks2D(r), u = c == null ? void 0 : c[0];
36
+ if (!u) {
37
+ e.current.visible = !1;
38
+ return;
39
+ }
40
+ const p = D(u, d.current);
41
+ e.current.visible = !0, e.current.position.copy(p);
42
+ });
43
+ const l = C(
44
+ (f) => {
45
+ const c = i.current;
46
+ if (!c) return null;
47
+ const u = c.getLandmarks2D(r);
48
+ if (!u) return null;
49
+ if (f === "body.neck") {
50
+ const h = u[11], b = u[12];
51
+ if (!h || !b) return null;
52
+ const A = {
53
+ x: (h.x + b.x) / 2,
54
+ y: (h.y + b.y) / 2,
55
+ z: (h.z + b.z) / 2
56
+ };
57
+ return { position: D(A, d.current) };
58
+ }
59
+ const p = L[f];
60
+ if (p === void 0) return null;
61
+ const m = u[p];
62
+ return m ? { position: D(m, d.current) } : null;
63
+ },
64
+ [r]
65
+ ), y = k(
66
+ () => ({ type: "body", resolveLandmark: l }),
67
+ [l]
68
+ );
69
+ return /* @__PURE__ */ E(z.Provider, { value: y, children: /* @__PURE__ */ E("group", { ref: e, renderOrder: w.TRACKED, children: t }) });
70
+ }, D = (r, n) => {
71
+ const t = new R.Vector3(r.x, r.y, r.z);
72
+ t.unproject(n);
73
+ const e = t.sub(n.position).normalize(), o = -n.position.z / e.z;
74
+ return n.position.clone().add(e.multiplyScalar(o));
75
+ }, W = {
76
+ "hand.wrist": 0,
77
+ "hand.thumbTip": 4,
78
+ "hand.indexTip": 8,
79
+ "hand.middleTip": 12,
80
+ "hand.ringTip": 16,
81
+ "hand.pinkyTip": 20,
82
+ "hand.indexBase": 5,
83
+ "hand.middleBase": 9,
84
+ "hand.ringBase": 13,
85
+ "hand.pinkyBase": 17
86
+ }, tr = ({ children: r, targetFps: n, active: t = !0 }) => {
87
+ const e = T(null), o = k(
88
+ () => n === void 0 ? void 0 : { targetFps: n },
89
+ [n]
90
+ ), { ready: a, node: s } = g(
91
+ S.GESTURE_TRACKER,
92
+ o,
93
+ t
94
+ ), { camera: d } = N(), i = T(d);
95
+ i.current !== d && (i.current = d);
96
+ const l = T(null);
97
+ v(() => {
98
+ var p;
99
+ if (!a || !s || !e.current) return;
100
+ l.current = s;
101
+ const c = (p = s == null ? void 0 : s.coordinates) == null ? void 0 : p[0];
102
+ if (!c) {
103
+ e.current.visible = !1;
104
+ return;
105
+ }
106
+ const u = _(c, i.current);
107
+ e.current.visible = !0, e.current.position.copy(u);
108
+ });
109
+ const y = C((c) => {
110
+ var m, h;
111
+ const u = W[c];
112
+ if (u === void 0) return null;
113
+ const p = (h = (m = l.current) == null ? void 0 : m.coordinates) == null ? void 0 : h[u];
114
+ return p ? { position: _(p, i.current) } : null;
115
+ }, []), f = k(
116
+ () => ({ type: "hand", resolveLandmark: y }),
117
+ [y]
118
+ );
119
+ return /* @__PURE__ */ E(z.Provider, { value: f, children: /* @__PURE__ */ E("group", { ref: e, renderOrder: w.TRACKED, children: r }) });
120
+ }, _ = (r, n) => {
121
+ const t = new R.Vector3(r.x, r.y, r.z);
122
+ t.unproject(n);
123
+ const e = t.sub(n.position).normalize(), o = -n.position.z / e.z;
124
+ return n.position.clone().add(e.multiplyScalar(o));
125
+ }, P = 800, V = 200, $ = () => ({
126
+ armed: !1,
127
+ armStart: null,
128
+ holdStart: null,
129
+ fired: !1
130
+ }), j = (r, {
131
+ isTrigger: n,
132
+ gesture: t,
133
+ now: e,
134
+ mode: o,
135
+ debounceMs: a,
136
+ holdMs: s
137
+ }) => {
138
+ if (r.fired) return null;
139
+ if (o === "hold") {
140
+ if (n && t) {
141
+ if (r.holdStart === null && (r.holdStart = e), e - r.holdStart >= s)
142
+ return r.fired = !0, t;
143
+ } else
144
+ r.holdStart = null;
145
+ return null;
146
+ }
147
+ return r.armed ? n && t ? (r.fired = !0, t) : null : (n ? r.armStart = null : (r.armStart === null && (r.armStart = e), e - r.armStart >= a && (r.armed = !0)), null);
148
+ };
149
+ function F({
150
+ gestures: r,
151
+ mode: n = "arm",
152
+ debounceMs: t = P,
153
+ holdMs: e = V,
154
+ onTrigger: o,
155
+ enabled: a = !0
156
+ }) {
157
+ const { ready: s, node: d } = g(S.GESTURE_TRACKER), i = T(o);
158
+ x(() => {
159
+ i.current = o;
160
+ }, [o]);
161
+ const l = T(/* @__PURE__ */ new Set());
162
+ x(() => {
163
+ l.current = new Set(Array.isArray(r) ? r : [r]);
164
+ }, [r]);
165
+ const y = T($());
166
+ v(() => {
167
+ if (!a || !s || !d) return;
168
+ const f = d.gesture, c = !!(f && l.current.has(f)), u = j(y.current, {
169
+ isTrigger: c,
170
+ gesture: f,
171
+ now: performance.now(),
172
+ mode: n,
173
+ debounceMs: t,
174
+ holdMs: e
175
+ });
176
+ u && i.current(u);
177
+ });
178
+ }
179
+ const or = (r) => (F(r), null), q = {
180
+ "hand.wrist": 0,
181
+ "hand.thumbTip": 4,
182
+ "hand.indexTip": 8,
183
+ "hand.middleTip": 12,
184
+ "hand.ringTip": 16,
185
+ "hand.pinkyTip": 20,
186
+ "hand.indexBase": 5,
187
+ "hand.middleBase": 9,
188
+ "hand.ringBase": 13,
189
+ "hand.pinkyBase": 17
190
+ }, ir = ({ children: r, targetFps: n, active: t = !0 }) => {
191
+ const e = T(null), o = k(
192
+ () => n === void 0 ? void 0 : { targetFps: n },
193
+ [n]
194
+ ), { ready: a, node: s } = g(
195
+ S.HAND_TRACKER,
196
+ o,
197
+ t
198
+ ), { camera: d } = N(), i = T(d);
199
+ i.current !== d && (i.current = d);
200
+ const l = T(null);
201
+ v(() => {
202
+ var m;
203
+ if (!a || !s || !e.current) return;
204
+ const c = s;
205
+ l.current = c;
206
+ const u = (m = c == null ? void 0 : c.coordinates) == null ? void 0 : m[0];
207
+ if (!u) {
208
+ e.current.visible = !1;
209
+ return;
210
+ }
211
+ const p = B(u, i.current);
212
+ e.current.visible = !0, e.current.position.copy(p);
213
+ });
214
+ const y = C((c) => {
215
+ var m, h;
216
+ const u = q[c];
217
+ if (u === void 0) return null;
218
+ const p = (h = (m = l.current) == null ? void 0 : m.coordinates) == null ? void 0 : h[u];
219
+ return p ? { position: B(p, i.current) } : null;
220
+ }, []), f = k(
221
+ () => ({ type: "hand", resolveLandmark: y }),
222
+ [y]
223
+ );
224
+ return /* @__PURE__ */ E(z.Provider, { value: f, children: /* @__PURE__ */ E("group", { ref: e, renderOrder: w.TRACKED, children: r }) });
225
+ }, B = (r, n) => {
226
+ const t = new R.Vector3(r.x, r.y, r.z);
227
+ t.unproject(n);
228
+ const e = t.sub(n.position).normalize(), o = -n.position.z / e.z;
229
+ return n.position.clone().add(e.multiplyScalar(o));
230
+ }, H = ["portrait"], cr = ({ type: r, active: n = !0, children: t }) => (g(S.BACKGROUND_SEGMENTATION, { type: r }, n), x(() => {
231
+ H.includes(r) || console.warn(
232
+ `[Segmentation] unsupported type "${r}"; valid values: ${H.join(", ")}`
233
+ );
234
+ }, [r]), /* @__PURE__ */ E(G, { children: t })), sr = [
235
+ "face.forehead",
236
+ "face.noseTip",
237
+ "face.chin",
238
+ "face.leftEyeOuter",
239
+ "face.rightEyeOuter",
240
+ "face.leftCheek",
241
+ "face.rightCheek",
242
+ "face.mouthCenter"
243
+ ], ur = [
244
+ "hand.wrist",
245
+ "hand.thumbTip",
246
+ "hand.indexTip",
247
+ "hand.middleTip",
248
+ "hand.ringTip",
249
+ "hand.pinkyTip",
250
+ "hand.indexBase",
251
+ "hand.middleBase",
252
+ "hand.ringBase",
253
+ "hand.pinkyBase"
254
+ ], ar = [
255
+ "body.head",
256
+ "body.neck",
257
+ "body.leftShoulder",
258
+ "body.rightShoulder",
259
+ "body.leftElbow",
260
+ "body.rightElbow",
261
+ "body.leftWrist",
262
+ "body.rightWrist",
263
+ "body.leftHip",
264
+ "body.rightHip",
265
+ "body.leftKnee",
266
+ "body.rightKnee",
267
+ "body.leftAnkle",
268
+ "body.rightAnkle"
269
+ ], U = (r) => r.startsWith("face.") ? "face" : r.startsWith("hand.") ? "hand" : r.startsWith("body.") ? "body" : null, M = (r, n, t) => n + t * (r - n), O = (r, n) => 1 / (1 + 1 / (2 * Math.PI * r) / n), X = (r, n, t, e, o, a) => {
270
+ if (!r.initialized || t <= 0)
271
+ return r.pos.copy(n), r.prevRaw.copy(n), r.dxHat.set(0, 0, 0), r.initialized = !0, r;
272
+ const s = O(a, t), d = ["x", "y", "z"];
273
+ for (const i of d) {
274
+ const l = (n[i] - r.prevRaw[i]) / t, y = M(l, r.dxHat[i], s);
275
+ r.dxHat[i] = y;
276
+ const f = e + o * Math.abs(y), c = O(f, t);
277
+ r.pos[i] = M(n[i], r.pos[i], c), r.prevRaw[i] = n[i];
278
+ }
279
+ return r;
280
+ }, dr = ({
281
+ target: r,
282
+ offset: n,
283
+ smoothing: t = 0,
284
+ children: e
285
+ }) => {
286
+ const o = K(), a = T(null), s = T(!1), d = T(new R.Vector3()), i = T({
287
+ pos: new R.Vector3(),
288
+ prevRaw: new R.Vector3(),
289
+ dxHat: new R.Vector3(),
290
+ initialized: !1
291
+ }), l = U(r), y = o !== null && l !== null && o.type !== l, f = o === null, c = f || y || l === null;
292
+ return x(() => {
293
+ f ? console.warn(
294
+ `[TrackingAnchor] target "${r}" requires a FaceTracker / HandTracker / BodyTracker ancestor; rendering null.`
295
+ ) : y ? console.warn(
296
+ `[TrackingAnchor] target "${r}" namespace does not match parent tracker type "${o == null ? void 0 : o.type}"; rendering null.`
297
+ ) : l === null && console.warn(
298
+ `[TrackingAnchor] target "${r}" is not a recognized face/hand/body landmark; rendering null.`
299
+ );
300
+ }, [r, l, f, y, o == null ? void 0 : o.type]), v((u, p) => {
301
+ if (c || !a.current || !o) return;
302
+ const m = o.resolveLandmark(r);
303
+ if (!m) {
304
+ a.current.visible = !1, s.current = !1, i.current.initialized = !1;
305
+ return;
306
+ }
307
+ a.current.visible = !0;
308
+ const h = d.current.copy(m.position), b = a.current.parent;
309
+ if (b) {
310
+ b.updateMatrixWorld();
311
+ const A = new R.Matrix4().copy(b.matrixWorld).invert();
312
+ h.applyMatrix4(A);
313
+ }
314
+ if (n && (h.x += n[0], h.y += n[1], h.z += n[2]), t > 0) {
315
+ const A = t * 0.1;
316
+ X(
317
+ i.current,
318
+ h,
319
+ s.current ? p : 0,
320
+ A,
321
+ 0.5,
322
+ 1
323
+ ), a.current.position.copy(i.current.pos);
324
+ } else
325
+ a.current.position.copy(h);
326
+ s.current = !0, m.quaternion && a.current.quaternion.copy(m.quaternion);
327
+ }), c ? null : /* @__PURE__ */ E("group", { ref: a, renderOrder: w.TRACKED, children: e });
328
+ };
329
+ export {
330
+ ar as BODY_TARGETS,
331
+ er as BodyTracker,
332
+ sr as FACE_TARGETS,
333
+ yr as FaceMesh,
334
+ mr as FaceTracker,
335
+ tr as GestureTracker,
336
+ or as GestureTrigger,
337
+ ur as HAND_TARGETS,
338
+ ir as HandTracker,
339
+ H as SEGMENTATION_TYPES,
340
+ cr as Segmentation,
341
+ dr as TrackingAnchor,
342
+ U as getTargetNamespace,
343
+ pr as useFaceResults
344
+ };
@@ -0,0 +1,3 @@
1
+ export type BodyModelOptions = {
2
+ numPoses?: number;
3
+ };
@@ -0,0 +1,3 @@
1
+ export type XRClientConfig = {
2
+ apiKey: string;
3
+ };
@@ -0,0 +1,9 @@
1
+ export type Coordinate = {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ };
6
+ export type PerformanceData = {
7
+ name: string;
8
+ processingTime: number | null;
9
+ };
@@ -0,0 +1,23 @@
1
+ export type XRLayerConfig = {
2
+ name: string;
3
+ clearColor: string;
4
+ hidden?: boolean;
5
+ pointerEvents?: "none" | "auto";
6
+ zIndex: number;
7
+ };
8
+ export type XRMediaSourceKind = "image" | "video";
9
+ export type XRMediaLayout = {
10
+ source: {
11
+ width: number;
12
+ height: number;
13
+ };
14
+ destination: {
15
+ width: number;
16
+ height: number;
17
+ };
18
+ drawWidth: number;
19
+ drawHeight: number;
20
+ offsetX: number;
21
+ offsetY: number;
22
+ scale: number;
23
+ };
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Debugger type definitions for the XR SDK
3
+ * Provides real-time performance insights for WebAR experiences
4
+ */
5
+ /**
6
+ * Per-model performance data
7
+ */
8
+ export interface ModelPerformanceData {
9
+ /** Model name */
10
+ name: string;
11
+ /** Processing time in milliseconds */
12
+ processingTime: number;
13
+ }
14
+ /**
15
+ * Core metrics collected by the debugger
16
+ */
17
+ export interface DebuggerMetrics {
18
+ /** Camera frames per second (updated every 500ms) */
19
+ cameraFPS: number;
20
+ /** Total detection time across all models in milliseconds (per frame) */
21
+ detectionTime: number;
22
+ /** Per-model detection times */
23
+ modelPerformance: ModelPerformanceData[];
24
+ /** Rendering time per frame in milliseconds */
25
+ renderTime: number;
26
+ /** Effective FPS combining detection + render (updated every 1s) */
27
+ effectiveFPS: number;
28
+ /** Memory usage information */
29
+ memory: {
30
+ /** Used heap size in MB */
31
+ used: number;
32
+ /** Total heap size in MB */
33
+ total: number;
34
+ /** Usage percentage (0-100) */
35
+ percentage: number;
36
+ } | null;
37
+ /** Camera resolution as "widthxheight" string (e.g., "1280x720") */
38
+ resolution: string;
39
+ }
40
+ /**
41
+ * Debugger state managed by DebuggerProvider
42
+ */
43
+ export interface DebuggerState {
44
+ /** Whether the debugger is enabled (visible) */
45
+ enabled: boolean;
46
+ /** Whether the debugger UI is collapsed */
47
+ collapsed: boolean;
48
+ /** Current metrics */
49
+ metrics: DebuggerMetrics;
50
+ }
51
+ /**
52
+ * Configuration options for the DebuggerOverlay component
53
+ */
54
+ export interface DebuggerConfig {
55
+ /** Starting state: collapsed or expanded */
56
+ defaultCollapsed?: boolean;
57
+ /** Keyboard shortcut to toggle debugger (default: "ctrl+shift+d") */
58
+ keyboardShortcut?: string;
59
+ /** Position of the overlay (default: "top-left") */
60
+ position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
61
+ }
62
+ /**
63
+ * Context value provided by DebuggerProvider
64
+ */
65
+ export interface DebuggerContextValue {
66
+ /** Current debugger state */
67
+ state: DebuggerState;
68
+ /** Toggle debugger visibility */
69
+ toggle: () => void;
70
+ /** Set collapsed state */
71
+ setCollapsed: (collapsed: boolean) => void;
72
+ /** Enable debugger */
73
+ enable: () => void;
74
+ /** Disable debugger */
75
+ disable: () => void;
76
+ }
77
+ /**
78
+ * Props for DebuggerOverlay component
79
+ */
80
+ export interface DebuggerOverlayProps extends DebuggerConfig {
81
+ /** Optional className for custom styling */
82
+ className?: string;
83
+ }
@@ -0,0 +1,67 @@
1
+ import { Category, Matrix, NormalizedLandmark } from '@mediapipe/tasks-vision';
2
+ import { Vector3 } from 'three';
3
+ export type FaceModelOptions = {
4
+ numFaces?: number;
5
+ };
6
+ export type Face = {
7
+ transform: {
8
+ position: Vector3;
9
+ rotation: Vector3;
10
+ scale: Vector3;
11
+ };
12
+ gestures: Record<string, number>;
13
+ };
14
+ export type FaceBounds = {
15
+ minX: number;
16
+ minY: number;
17
+ maxX: number;
18
+ maxY: number;
19
+ width: number;
20
+ height: number;
21
+ centerX: number;
22
+ centerY: number;
23
+ };
24
+ export type FaceTrackingResult = {
25
+ landmarks: NormalizedLandmark[];
26
+ bounds: FaceBounds;
27
+ };
28
+ /**
29
+ * Raw MediaPipe face-tracking payload for one detected face. This stays
30
+ * close to the upstream output so custom effects and AI-assisted tooling
31
+ * can inspect low-level tracking data without reconstructing it from the
32
+ * higher-level `Face` transform abstraction.
33
+ */
34
+ export type FaceRawTrackingData = {
35
+ landmarks?: NormalizedLandmark[];
36
+ blendshapes?: Category[];
37
+ transformationMatrix?: Matrix;
38
+ };
39
+ /**
40
+ * 2D face landmark in normalized image space (0..1 across both axes).
41
+ */
42
+ export type FaceLandmark2D = {
43
+ x: number;
44
+ y: number;
45
+ };
46
+ /**
47
+ * Normalized bounding box (0..1 across both axes). Multiply by container
48
+ * dimensions to position in CSS or screen space.
49
+ */
50
+ export type BoundingBox = {
51
+ left: number;
52
+ top: number;
53
+ width: number;
54
+ height: number;
55
+ };
56
+ /**
57
+ * Elliptical region used by the face-retouch shader. All coordinates are
58
+ * in normalized image space (0..1).
59
+ */
60
+ export type FaceRetouchRegion = {
61
+ centerX: number;
62
+ centerY: number;
63
+ radiusX: number;
64
+ radiusY: number;
65
+ strength: number;
66
+ kind: "face" | "feature";
67
+ };
@@ -0,0 +1,15 @@
1
+ import { Coordinate } from './common';
2
+ export type GestureData = {
3
+ coordinates?: Coordinate[];
4
+ gesture?: "closed_fist" | "open_palm" | "pointing_up" | "thumb_down" | "thumb_up" | "victory" | "i_love_you" | "none";
5
+ };
6
+ export declare enum Gestures {
7
+ ClosedFist = "closed_fist",
8
+ OpenPalm = "open_palm",
9
+ PointingUp = "pointing_up",
10
+ ThumbDown = "thumb_down",
11
+ ThumbUp = "thumb_up",
12
+ Victory = "victory",
13
+ ILoveYou = "i_love_you",
14
+ None = "none"
15
+ }
@@ -0,0 +1,5 @@
1
+ import { Coordinate } from './common';
2
+ export type HandData = {
3
+ coordinates?: Coordinate[];
4
+ gesture?: "closed_fist" | "open_palm";
5
+ };
@@ -0,0 +1,67 @@
1
+ export type HeadBindingShape = {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ centerX: number;
7
+ centerY: number;
8
+ };
9
+ export type HeadBindingAdaptiveValues = {
10
+ aspectRatio: number;
11
+ normalizedAspect: number;
12
+ scaleY: number;
13
+ offsetY: number;
14
+ };
15
+ export type HeadBindingCubePose = {
16
+ boxCenterZ: number;
17
+ centerX: number;
18
+ centerY: number;
19
+ depth: number;
20
+ height: number;
21
+ rotationX: number;
22
+ rotationY: number;
23
+ rotationZ: number;
24
+ width: number;
25
+ };
26
+ export type HeadBindingCubeModel = "v1" | "v2";
27
+ export type HeadBindingDebugMetrics = {
28
+ center: {
29
+ x: number;
30
+ y: number;
31
+ z: number;
32
+ };
33
+ depthPx: number;
34
+ face: {
35
+ centerX: number;
36
+ centerY: number;
37
+ height: number;
38
+ width: number;
39
+ };
40
+ normalized: {
41
+ rawPitch: number;
42
+ rawPitchFromBalance: number;
43
+ rawPitchFromCenter: number;
44
+ rawYaw: number;
45
+ roll: number;
46
+ verticalBalance: number;
47
+ };
48
+ pose: {
49
+ pitch: number;
50
+ rotationX: number;
51
+ rotationY: number;
52
+ rotationZ: number;
53
+ yaw: number;
54
+ };
55
+ screen: {
56
+ heightPx: number;
57
+ widthPx: number;
58
+ };
59
+ skullAnchor: {
60
+ x: number;
61
+ y: number;
62
+ };
63
+ };
64
+ export type HeadBindingSolveResult = {
65
+ pose: HeadBindingCubePose;
66
+ debugMetrics: HeadBindingDebugMetrics;
67
+ };
@@ -0,0 +1,12 @@
1
+ export * from './client';
2
+ export * from './nodes';
3
+ export * from './session';
4
+ export * from './body';
5
+ export * from './face';
6
+ export * from './headBinding';
7
+ export * from './model';
8
+ export * from './segmentation';
9
+ export * from './common';
10
+ export * from './compositor';
11
+ export * from './logger';
12
+ export * from './util-types';
@@ -0,0 +1,4 @@
1
+ export type LoggerOptions = {
2
+ verbose: boolean;
3
+ prefix: string;
4
+ };
@@ -0,0 +1,46 @@
1
+ import { XRMediaSourceKind } from './compositor';
2
+ /**
3
+ * Session-level performance config, set via `<XRProvider perf={...}>`. Trades
4
+ * tracking fidelity for lower GPU/CPU load and heat. Every field is optional;
5
+ * omitted fields keep the SDK's built-in behavior.
6
+ */
7
+ export type XRPerfConfig = {
8
+ /**
9
+ * Default inference-rate cap (fps) applied to every tracker model that does
10
+ * not set its own `targetFps` prop. Undefined / <= 0 → uncapped for Face and
11
+ * Hand (Gesture keeps its own 15fps default). A per-tracker `targetFps` prop
12
+ * overrides this for that tracker.
13
+ */
14
+ targetFps?: number;
15
+ /**
16
+ * Target width (px) for the camera-inference source canvas — the image the
17
+ * ML models analyze, NOT the visible camera background the user sees. Lower
18
+ * = less ML work. Undefined keeps the SDK default. This does not change the
19
+ * displayed feed quality.
20
+ */
21
+ camRes?: number;
22
+ /**
23
+ * Camera framing zoom applied when cover-cropping the webcam into the
24
+ * viewport. `1` = the full native frame (widest field of view); `> 1` crops
25
+ * in and enlarges the subject (a `1.2` fills the frame like a native selfie /
26
+ * Instagram front camera). This is a FRAMING control, not a perf one — it
27
+ * changes the visible feed (and the captured photo and what the trackers see,
28
+ * since all three read the same cover-cropped source). Default `1.2` to match
29
+ * the tight native-selfie framing users expect; set `1` for the widest FOV.
30
+ */
31
+ cameraZoom?: number;
32
+ };
33
+ export type RunModelParams = {
34
+ sourceCanvas: OffscreenCanvas | HTMLCanvasElement;
35
+ renderWidth: number;
36
+ renderHeight: number;
37
+ getSource?: () => "webcam" | XRMediaSourceKind | undefined;
38
+ /**
39
+ * Cap the model's inference rate to this many frames per second. The model's
40
+ * RAF loop still runs at display rate, but the (expensive) MediaPipe detect
41
+ * call is skipped between intervals. Undefined / <= 0 means uncapped (detect
42
+ * every frame). Lower values cut GPU/CPU load and heat at the cost of tracking
43
+ * smoothness. See `session.perf.targetFps` and the per-tracker `targetFps`.
44
+ */
45
+ targetFps?: number;
46
+ };