@vincentt-xr/sdk 2.0.0-alpha.7 → 2.0.0-alpha.8

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 (275) hide show
  1. package/GROUNDING.md +1109 -13
  2. package/dist/{DebuggerUI-BjOMr8q_.js → DebuggerUI-C-ldiozL.js} +1 -1
  3. package/dist/{DebuggerUI-B6bP6P9r.cjs → DebuggerUI-CWX5EtQv.cjs} +1 -1
  4. package/dist/FaceMeshRenderer-BEEXZwS6.cjs +158 -0
  5. package/dist/FaceMeshRenderer-UuH5sTXG.js +1322 -0
  6. package/dist/FaceRetouch-C7h7x9kd.js +683 -0
  7. package/dist/FaceRetouch-DqftT26Y.cjs +134 -0
  8. package/dist/GLTFLoader-C5q63sKO.js +1633 -0
  9. package/dist/GLTFLoader-Cb_CRwmG.cjs +1 -0
  10. package/dist/SegmentationOverlay-DQuW3dsc.js +133 -0
  11. package/dist/SegmentationOverlay-aWVod8Kl.cjs +1 -0
  12. package/dist/assets/cache.d.ts +99 -0
  13. package/dist/assets/estimate.d.ts +11 -0
  14. package/dist/assets/index.d.ts +7 -0
  15. package/dist/assets/loaders.d.ts +28 -0
  16. package/dist/assets/react.d.ts +33 -0
  17. package/dist/calibration/calibration.d.ts +70 -0
  18. package/dist/calibration/index.d.ts +6 -0
  19. package/dist/calibration/storage.d.ts +13 -0
  20. package/dist/calibration/types.d.ts +53 -0
  21. package/dist/calibration/useXRCalibration.d.ts +46 -0
  22. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  23. package/dist/camera/devices.d.ts +26 -0
  24. package/dist/camera/index.d.ts +8 -0
  25. package/dist/camera/permission.d.ts +86 -0
  26. package/dist/camera/useCameraPermission.d.ts +35 -0
  27. package/dist/capabilities/detect.d.ts +45 -0
  28. package/dist/capabilities/index.d.ts +5 -0
  29. package/dist/capabilities/types.d.ts +120 -0
  30. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  31. package/dist/compat/environment.d.ts +5 -0
  32. package/dist/compat/index.d.ts +4 -0
  33. package/dist/compat/run.d.ts +18 -0
  34. package/dist/compat/scenarios.d.ts +10 -0
  35. package/dist/compat/types.d.ts +101 -0
  36. package/dist/components/BodyTracker/index.d.ts +9 -0
  37. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +33 -3
  38. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +12 -0
  39. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  40. package/dist/components/FaceMesh/index.d.ts +1 -1
  41. package/dist/components/GestureListener/index.d.ts +11 -0
  42. package/dist/components/HandTracker/index.d.ts +10 -0
  43. package/dist/components/HolisticTracker/index.d.ts +69 -0
  44. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  45. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  46. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  47. package/dist/components/IrisEffect/index.d.ts +51 -0
  48. package/dist/components/IrisEffect/settings.d.ts +117 -0
  49. package/dist/components/LipEffect/LipEffect.d.ts +7 -1
  50. package/dist/components/LipEffect/LipEffectMaterial.d.ts +43 -7
  51. package/dist/components/LipEffect/LipEffects.d.ts +9 -0
  52. package/dist/components/LipEffect/defaults.d.ts +27 -4
  53. package/dist/components/LipEffect/index.d.ts +11 -3
  54. package/dist/components/LipEffect/settings.d.ts +271 -0
  55. package/dist/components/LipEffect/types.d.ts +56 -9
  56. package/dist/components/LipEffect/useLipDesignTextures.d.ts +11 -0
  57. package/dist/components/LipEffect/uvGuide.d.ts +59 -0
  58. package/dist/components/PersonCutout/index.d.ts +50 -0
  59. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  60. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  61. package/dist/components/ScreenImage/index.d.ts +3 -1
  62. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  63. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  64. package/dist/components/ScreenImage/source.d.ts +6 -0
  65. package/dist/components/ScreenImage/types.d.ts +18 -0
  66. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  67. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  68. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  69. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  70. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  71. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  72. package/dist/components/XRProvider/index.d.ts +16 -2
  73. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  74. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  75. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  76. package/dist/components/index.d.ts +3 -0
  77. package/dist/constants/index.d.ts +4 -1
  78. package/dist/contexts-CO0sd4JQ.cjs +1 -0
  79. package/dist/{contexts-ByhzppYl.js → contexts-FzlnnMYD.js} +252 -246
  80. package/dist/coordinates/feed.d.ts +52 -0
  81. package/dist/coordinates/index.d.ts +5 -0
  82. package/dist/coordinates/spaces.d.ts +49 -0
  83. package/dist/coordinates/viewport.d.ts +22 -0
  84. package/dist/coordinates/world.d.ts +15 -0
  85. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  86. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  87. package/dist/debug-ui/index.d.ts +14 -0
  88. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  89. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  90. package/dist/debug-ui/media-source.cjs +1 -1
  91. package/dist/debug-ui/media-source.js +1 -1
  92. package/dist/debug-ui/product-hotspots/index.d.ts +24 -0
  93. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  94. package/dist/debug-ui/xr-diagnostics/index.d.ts +25 -0
  95. package/dist/debug-ui.cjs +3 -3
  96. package/dist/debug-ui.js +2057 -1687
  97. package/dist/detector-K8aej4MB.js +59 -0
  98. package/dist/detector-ijypGtse.cjs +1 -0
  99. package/dist/entries/core.d.ts +18 -1
  100. package/dist/entries/face-effects.d.ts +11 -3
  101. package/dist/entries/low-level.d.ts +22 -3
  102. package/dist/entries/product.d.ts +11 -0
  103. package/dist/entries/tracking.d.ts +24 -1
  104. package/dist/face-effects.cjs +155 -1
  105. package/dist/face-effects.js +1134 -2197
  106. package/dist/gestures/definitions.d.ts +85 -0
  107. package/dist/gestures/detector.d.ts +87 -0
  108. package/dist/gestures/index.d.ts +8 -0
  109. package/dist/gestures/measures.d.ts +101 -0
  110. package/dist/gestures/settings.d.ts +49 -0
  111. package/dist/{getFaceInfo-C4QpCQIY.js → getFaceInfo-BkZfaQs-.js} +5 -5
  112. package/dist/{getFaceInfo-fA1bFBub.cjs → getFaceInfo-ahPxQFGu.cjs} +1 -1
  113. package/dist/hooks/selectors.d.ts +68 -1
  114. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  115. package/dist/hooks/useFaceInfo.d.ts +13 -1
  116. package/dist/hooks/useFaceInfos.d.ts +1 -1
  117. package/dist/hooks/useGesture.d.ts +32 -0
  118. package/dist/hooks/useIrisTracking.d.ts +45 -0
  119. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  120. package/dist/hooks/useXRModel.d.ts +7 -0
  121. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  122. package/dist/hooks/useXRSession/index.d.ts +2 -2
  123. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  124. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  125. package/dist/hooks/useXRSession/store.d.ts +52 -3
  126. package/dist/index--RgGzZ6X.cjs +47 -0
  127. package/dist/{index-VJ0SJwmG.js → index-CHVbH0hz.js} +4 -4
  128. package/dist/index-CeVkgsag.cjs +1 -0
  129. package/dist/index-CnGox6Xr.js +3054 -0
  130. package/dist/{index-ByoNj0QP.js → index-CsUdQ-pn.js} +113 -111
  131. package/dist/{index-BjmTe9eM.cjs → index-DKBAh6hV.cjs} +1 -1
  132. package/dist/index-DsZwTfG0.cjs +1 -0
  133. package/dist/index-Dw6tj2Mi.js +144 -0
  134. package/dist/index-OCPjOaeP.cjs +1 -0
  135. package/dist/{index-DXT3WccE.js → index-s9pF4zkG.js} +1065 -1101
  136. package/dist/internal-BYza1h8_.cjs +1 -0
  137. package/dist/{internal-Dmk1cTXq.js → internal-vsfNQycj.js} +15 -16
  138. package/dist/internal.cjs +1 -1
  139. package/dist/internal.js +2 -2
  140. package/dist/iris/compute.d.ts +25 -0
  141. package/dist/iris/index.d.ts +4 -0
  142. package/dist/iris/lead.d.ts +19 -0
  143. package/dist/iris/types.d.ts +87 -0
  144. package/dist/landmarkMask-CbTFzBYG.js +224 -0
  145. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  146. package/dist/low-level.cjs +1 -1
  147. package/dist/low-level.js +1085 -634
  148. package/dist/main.cjs +1 -1
  149. package/dist/main.js +1519 -465
  150. package/dist/measures-9dQPdw96.js +154 -0
  151. package/dist/measures-KfJzpvod.cjs +1 -0
  152. package/dist/models/Base/index.d.ts +49 -0
  153. package/dist/models/Body/index.d.ts +1 -1
  154. package/dist/models/Face/index.d.ts +1 -1
  155. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  156. package/dist/models/Hand/HandTracking.d.ts +1 -1
  157. package/dist/models/Holistic/index.d.ts +49 -0
  158. package/dist/models/Holistic/result.d.ts +68 -0
  159. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  160. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  161. package/dist/models/index.d.ts +2 -0
  162. package/dist/product/ProductDimensions.d.ts +16 -0
  163. package/dist/product/ProductHotspot.d.ts +16 -0
  164. package/dist/product/ProductViewer.d.ts +9 -0
  165. package/dist/product/details.d.ts +53 -0
  166. package/dist/product/index.d.ts +14 -0
  167. package/dist/product/loadModelViewer.d.ts +4 -0
  168. package/dist/product/types.d.ts +71 -0
  169. package/dist/product/useProductAr.d.ts +37 -0
  170. package/dist/product/useProductDetails.d.ts +60 -0
  171. package/dist/product.cjs +1 -0
  172. package/dist/product.js +414 -0
  173. package/dist/providers-C0Dlhh9Z.js +365 -0
  174. package/dist/providers-YNwkmNeK.cjs +62 -0
  175. package/dist/quality/XRQualityController.d.ts +25 -0
  176. package/dist/quality/controller.d.ts +33 -0
  177. package/dist/quality/index.d.ts +6 -0
  178. package/dist/quality/types.d.ts +100 -0
  179. package/dist/quality/useXRQuality.d.ts +28 -0
  180. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-CN1cGFUo.js} +1 -1
  181. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-O4KmaMl9.cjs} +1 -1
  182. package/dist/renderPasses-Cg-zqmEz.cjs +21 -0
  183. package/dist/renderPasses-NnKZVfBy.js +1460 -0
  184. package/dist/scene-object.cjs +1 -1
  185. package/dist/scene-object.js +2 -2
  186. package/dist/screenTransform-BenfCtZt.js +44 -0
  187. package/dist/screenTransform-BiXdpVf0.cjs +1 -0
  188. package/dist/segmentation-9PhSvc-R.cjs +1 -0
  189. package/dist/segmentation-CeOTKemr.js +5 -0
  190. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  191. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  192. package/dist/segmentation2d/index.d.ts +9 -0
  193. package/dist/segmentation2d/maskUv.d.ts +23 -0
  194. package/dist/segmentation2d/rasterize.d.ts +14 -0
  195. package/dist/segmentation2d/types.d.ts +46 -0
  196. package/dist/selectors-C5G1PMYL.js +195 -0
  197. package/dist/selectors-Du_PsVnW.cjs +1 -0
  198. package/dist/{session-CpkiK5YA.cjs → session-BBr0yN8h.cjs} +7 -7
  199. package/dist/{session-DLFN_VII.js → session-Cy0m7l7-.js} +76 -76
  200. package/dist/settings-DRR7-snV.cjs +1 -0
  201. package/dist/settings-aQk845NJ.js +73 -0
  202. package/dist/subjects/index.d.ts +2 -0
  203. package/dist/subjects/select.d.ts +62 -0
  204. package/dist/subjects/types.d.ts +55 -0
  205. package/dist/tracking-config/apply.d.ts +57 -0
  206. package/dist/tracking-config/index.d.ts +7 -0
  207. package/dist/tracking-config/resolve.d.ts +25 -0
  208. package/dist/tracking-config/storage.d.ts +8 -0
  209. package/dist/tracking-config/types.d.ts +106 -0
  210. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  211. package/dist/tracking.cjs +1 -1
  212. package/dist/tracking.js +1056 -383
  213. package/dist/types/compositor.d.ts +21 -0
  214. package/dist/types/holistic.d.ts +121 -0
  215. package/dist/types/index.d.ts +1 -0
  216. package/dist/types/model.d.ts +22 -2
  217. package/dist/types/nodes.d.ts +27 -2
  218. package/dist/types/segmentation.d.ts +19 -0
  219. package/dist/types/session.d.ts +41 -3
  220. package/dist/useFaceInfo-Blf7FCu3.js +303 -0
  221. package/dist/useFaceInfo-C5mO8NQY.cjs +1 -0
  222. package/dist/useXRCapabilities-B1R2ghy-.cjs +1 -0
  223. package/dist/useXRCapabilities-C68v__wB.js +30 -0
  224. package/dist/utils/fns.d.ts +6 -3
  225. package/dist/utils/integrity.d.ts +4 -1
  226. package/dist/utils/updateThrottle.d.ts +2 -0
  227. package/dist/utils/useStableUniforms.d.ts +18 -0
  228. package/docs/api/adaptive-quality.mdx +104 -0
  229. package/docs/api/asset-lifecycle.mdx +78 -0
  230. package/docs/api/camera-permission.mdx +142 -0
  231. package/docs/api/coordinate-spaces.mdx +165 -0
  232. package/docs/api/cross-camera.mdx +88 -0
  233. package/docs/api/diagnostics-calibration.mdx +97 -0
  234. package/docs/api/face-effects.mdx +6 -0
  235. package/docs/api/face-mesh.mdx +4 -2
  236. package/docs/api/gestures.mdx +173 -0
  237. package/docs/api/holistic-tracker.mdx +159 -0
  238. package/docs/api/iris-tracking.mdx +242 -0
  239. package/docs/api/multi-subject.mdx +95 -0
  240. package/docs/api/person-cutout.mdx +136 -0
  241. package/docs/api/product-ar.mdx +111 -0
  242. package/docs/api/product-details.mdx +78 -0
  243. package/docs/api/screen-space-coordinates.mdx +4 -1
  244. package/docs/api/segmentation-overlay.mdx +301 -0
  245. package/docs/api/session-lifecycle.mdx +136 -0
  246. package/docs/api/trackers.mdx +5 -0
  247. package/docs/api/tracking-config.mdx +108 -0
  248. package/docs/docs.json +23 -1
  249. package/docs/examples/lip-shaders.mdx +224 -0
  250. package/docs/guides/lip-effect-textures.mdx +292 -0
  251. package/docs/guides/lip-uv-template.png +0 -0
  252. package/docs/guides/lip-uv-template.svg +1 -0
  253. package/package.json +13 -1
  254. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  255. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  256. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  257. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  258. package/dist/contexts-Dr62It_K.cjs +0 -1
  259. package/dist/index-9dlAQAhy.js +0 -1462
  260. package/dist/index-BpEf2BBb.cjs +0 -1
  261. package/dist/index-CyUUurQT.cjs +0 -1
  262. package/dist/index-DCiMbxC3.cjs +0 -1
  263. package/dist/index-DpI-qo5X.cjs +0 -17
  264. package/dist/index-DyVF4vEW.js +0 -111
  265. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  266. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  267. package/dist/renderLayers-zrK2pv5O.js +0 -13
  268. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  269. package/dist/renderPasses-BcquyVtu.js +0 -1500
  270. package/dist/selectors-B8H97CKA.js +0 -59
  271. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  272. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  273. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  274. package/dist/useFaceResults-CtetsO9M.js +0 -19
  275. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -0,0 +1,1460 @@
1
+ import { u as Me, S as Ee, a as ze, D as Re } from "./index-CHVbH0hz.js";
2
+ import { useThree as be, useFrame as Oe } from "@react-three/fiber";
3
+ import { useRef as j, useState as Pe, useCallback as N, useEffect as U, useMemo as W, createElement as De } from "react";
4
+ import * as ae from "three";
5
+ import { Vector2 as q, Vector3 as z, Box3 as Le, Matrix4 as B, Quaternion as X, Euler as $, MathUtils as L, Color as Ae } from "three";
6
+ import { q as Ce } from "./index-CnGox6Xr.js";
7
+ import { D as Fe } from "./index-Dw6tj2Mi.js";
8
+ import { z as _e, A as Ie, B as je, M as We, j as Ge, E as Ne } from "./FaceMeshRenderer-UuH5sTXG.js";
9
+ import { r as de, D as C, a as fe, m as Ue, b as Z } from "./screenTransform-BenfCtZt.js";
10
+ import { jsxs as P, jsx as u } from "react/jsx-runtime";
11
+ import { Line as ke } from "@react-three/drei";
12
+ const he = {
13
+ move: "grab",
14
+ pivot: "all-scroll",
15
+ rotateTopLeft: "alias",
16
+ rotateTopRight: "alias",
17
+ rotateBottomLeft: "alias",
18
+ rotateBottomRight: "alias",
19
+ top: "ns-resize",
20
+ bottom: "ns-resize",
21
+ left: "ew-resize",
22
+ right: "ew-resize",
23
+ topLeft: "nwse-resize",
24
+ bottomRight: "nwse-resize",
25
+ topRight: "nesw-resize",
26
+ bottomLeft: "nesw-resize"
27
+ }, Be = ({
28
+ color: e = "#22d3ee",
29
+ controlScale: t = [1, 1, 1],
30
+ handleColor: o = "#ffffff",
31
+ onHandlePointerDown: n,
32
+ opacity: r = 0.9,
33
+ pivot: s = [0.5, 0.5],
34
+ pivotScale: a = t,
35
+ renderOrder: i,
36
+ showSideHandles: l = !0,
37
+ thickness: d = 4e-3
38
+ }) => {
39
+ const p = /* @__PURE__ */ u(
40
+ "meshBasicMaterial",
41
+ {
42
+ color: e,
43
+ transparent: !0,
44
+ opacity: r,
45
+ depthTest: !1,
46
+ depthWrite: !1,
47
+ toneMapped: !1
48
+ }
49
+ ), S = /* @__PURE__ */ u(
50
+ "meshBasicMaterial",
51
+ {
52
+ color: o,
53
+ transparent: !0,
54
+ opacity: 1,
55
+ depthTest: !1,
56
+ depthWrite: !1,
57
+ toneMapped: !1
58
+ }
59
+ ), w = Math.max(d * 7, 0.028), b = Math.max(d * 7, 0.03), M = Math.max(d * 8, 0.032), h = 0.04, c = 0.06, T = 0.08, y = 0.1, f = i ?? 0, A = [
60
+ ["topLeft", -0.5, 0.5],
61
+ ["topRight", 0.5, 0.5],
62
+ ["bottomLeft", -0.5, -0.5],
63
+ ["bottomRight", 0.5, -0.5],
64
+ ...l ? [
65
+ ["top", 0, 0.5],
66
+ ["bottom", 0, -0.5],
67
+ ["left", -0.5, 0],
68
+ ["right", 0.5, 0]
69
+ ] : []
70
+ ], E = [
71
+ ["rotateTopLeft", -0.56, 0.56, 0],
72
+ ["rotateTopRight", 0.56, 0.56, -Math.PI / 2],
73
+ ["rotateBottomRight", 0.56, -0.56, Math.PI],
74
+ ["rotateBottomLeft", -0.56, -0.56, Math.PI / 2]
75
+ ], g = (m) => n ? (O) => {
76
+ O.stopPropagation(), document.body.style.cursor = m === "move" ? "grabbing" : he[m], n(m, O);
77
+ } : void 0, x = (m) => {
78
+ n && (document.body.style.cursor = he[m]);
79
+ }, R = () => {
80
+ n && (document.body.style.cursor = "");
81
+ }, v = [s[0] - 0.5, s[1] - 0.5, y];
82
+ return /* @__PURE__ */ P("group", { renderOrder: f, children: [
83
+ /* @__PURE__ */ P("mesh", { position: [0, 0.5, h], scale: [1, d, 1], renderOrder: f, children: [
84
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
85
+ p
86
+ ] }),
87
+ /* @__PURE__ */ P("mesh", { position: [0, -0.5, h], scale: [1, d, 1], renderOrder: f, children: [
88
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
89
+ p
90
+ ] }),
91
+ /* @__PURE__ */ P("mesh", { position: [-0.5, 0, h], scale: [d, 1, 1], renderOrder: f, children: [
92
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
93
+ p
94
+ ] }),
95
+ /* @__PURE__ */ P("mesh", { position: [0.5, 0, h], scale: [d, 1, 1], renderOrder: f, children: [
96
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
97
+ p
98
+ ] }),
99
+ /* @__PURE__ */ P(
100
+ "mesh",
101
+ {
102
+ position: [0, 0, c],
103
+ renderOrder: f + 1,
104
+ onPointerDown: g("move"),
105
+ onPointerOver: () => x("move"),
106
+ onPointerOut: R,
107
+ children: [
108
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
109
+ /* @__PURE__ */ u("meshBasicMaterial", { transparent: !0, opacity: 0, depthTest: !1, depthWrite: !1 })
110
+ ]
111
+ }
112
+ ),
113
+ A.map(([m, O, F]) => /* @__PURE__ */ P(
114
+ "mesh",
115
+ {
116
+ position: [O, F, T],
117
+ scale: [w * t[0], w * t[1], t[2]],
118
+ renderOrder: f + 2,
119
+ onPointerDown: g(m),
120
+ onPointerOver: () => x(m),
121
+ onPointerOut: R,
122
+ children: [
123
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
124
+ S
125
+ ]
126
+ },
127
+ m
128
+ )),
129
+ E.map(([m, O, F, H]) => /* @__PURE__ */ u(
130
+ "group",
131
+ {
132
+ position: [O, F, T + 0.01],
133
+ rotation: [0, 0, H],
134
+ scale: [M * t[0], M * t[1], t[2]],
135
+ renderOrder: f + 3,
136
+ onPointerDown: g(m),
137
+ onPointerOver: () => x(m),
138
+ onPointerOut: R,
139
+ children: /* @__PURE__ */ P("mesh", { renderOrder: f + 3, children: [
140
+ /* @__PURE__ */ u("planeGeometry", { args: [1.9, 1.9] }),
141
+ /* @__PURE__ */ u("meshBasicMaterial", { transparent: !0, opacity: 0, depthTest: !1, depthWrite: !1 })
142
+ ] })
143
+ },
144
+ m
145
+ )),
146
+ /* @__PURE__ */ u(
147
+ "group",
148
+ {
149
+ position: v,
150
+ scale: [b * a[0], b * a[1], a[2]],
151
+ renderOrder: f + 5,
152
+ onPointerDown: g("pivot"),
153
+ onPointerOver: () => x("pivot"),
154
+ onPointerOut: R,
155
+ children: /* @__PURE__ */ P("group", { rotation: [0, 0, Math.PI / 4], children: [
156
+ /* @__PURE__ */ P("mesh", { scale: [1.8, 1.8, 1], renderOrder: f + 5, children: [
157
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
158
+ /* @__PURE__ */ u("meshBasicMaterial", { transparent: !0, opacity: 0, depthTest: !1, depthWrite: !1 })
159
+ ] }),
160
+ /* @__PURE__ */ P("mesh", { position: [0, 0, 2e-3], renderOrder: f + 6, children: [
161
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
162
+ S
163
+ ] }),
164
+ /* @__PURE__ */ P("mesh", { scale: [0.62, 0.62, 1], position: [0, 0, 4e-3], renderOrder: f + 7, children: [
165
+ /* @__PURE__ */ u("planeGeometry", { args: [1, 1] }),
166
+ /* @__PURE__ */ u(
167
+ "meshBasicMaterial",
168
+ {
169
+ color: "#111827",
170
+ transparent: !0,
171
+ opacity: 1,
172
+ depthTest: !1,
173
+ depthWrite: !1,
174
+ toneMapped: !1
175
+ }
176
+ )
177
+ ] })
178
+ ] })
179
+ }
180
+ )
181
+ ] });
182
+ }, _ = (e) => Math.round(e * 2) / 2, ue = (e) => Math.min(1, Math.max(0, e)), ee = {
183
+ move: "grab",
184
+ pivot: "all-scroll",
185
+ rotateTopLeft: "alias",
186
+ rotateTopRight: "alias",
187
+ rotateBottomLeft: "alias",
188
+ rotateBottomRight: "alias",
189
+ top: "ns-resize",
190
+ bottom: "ns-resize",
191
+ left: "ew-resize",
192
+ right: "ew-resize",
193
+ topLeft: "nwse-resize",
194
+ bottomRight: "nwse-resize",
195
+ topRight: "nesw-resize",
196
+ bottomLeft: "nesw-resize"
197
+ }, Xe = [
198
+ ["topLeft", 0, 0],
199
+ ["top", 0.5, 0],
200
+ ["topRight", 1, 0],
201
+ ["right", 1, 0.5],
202
+ ["bottomRight", 1, 1],
203
+ ["bottom", 0.5, 1],
204
+ ["bottomLeft", 0, 1],
205
+ ["left", 0, 0.5]
206
+ ], Ye = [
207
+ ["rotateTopLeft", -0.03, -0.03],
208
+ ["rotateTopRight", 1.03, -0.03],
209
+ ["rotateBottomRight", 1.03, 1.03],
210
+ ["rotateBottomLeft", -0.03, 1.03]
211
+ ], $e = (e, t) => {
212
+ const o = de({
213
+ transform: t,
214
+ parentSize: { width: e.width, height: e.height }
215
+ }), n = Math.min(
216
+ e.width / C.width,
217
+ e.height / C.height
218
+ ) * (fe / Math.max(t.referencePixelsPerUnit, 1e-6)) || 1, r = C.width * n, s = C.height * n, a = e.left + (e.width - r) / 2, i = e.top + (e.height - s) / 2, l = a + r / 2, d = i + s / 2, p = o.size[0], S = o.size[1], w = l + o.center[0], b = d - o.center[1];
219
+ return {
220
+ centerX: w,
221
+ centerY: b,
222
+ height: S,
223
+ left: w - p / 2,
224
+ scale: n,
225
+ top: b - S / 2,
226
+ width: p
227
+ };
228
+ }, He = (e, t, o, n) => {
229
+ const r = C.width * n, s = C.height * n, a = o.left + (o.width - r) / 2, i = o.top + (o.height - s) / 2;
230
+ return {
231
+ x: (e - (a + r / 2)) / n,
232
+ y: (i + s / 2 - t) / n
233
+ };
234
+ }, qe = ({
235
+ color: e = "#38bdf8",
236
+ handleColor: t = "#ffffff",
237
+ onChange: o,
238
+ transform: n
239
+ }) => {
240
+ const r = j(o);
241
+ r.current = o;
242
+ const { gl: s } = be(), [a, i] = Pe(null), l = j(null), d = j(null), p = N(() => {
243
+ i(s.domElement.getBoundingClientRect());
244
+ }, [s.domElement]);
245
+ U(() => (p(), window.addEventListener("resize", p), window.addEventListener("scroll", p, !0), () => {
246
+ window.removeEventListener("resize", p), window.removeEventListener("scroll", p, !0);
247
+ }), [p]);
248
+ const S = W(
249
+ () => a ? $e(a, n) : null,
250
+ [a, n]
251
+ ), w = N((h) => {
252
+ const c = l.current, T = r.current;
253
+ if (!c || !T) return;
254
+ const y = (h.clientX - c.startX) / c.scale, f = -(h.clientY - c.startY) / c.scale, A = {
255
+ x: c.startPointerDesign.x + y,
256
+ y: c.startPointerDesign.y + f
257
+ }, E = {
258
+ ...c.startTransform,
259
+ position: { ...c.startTransform.position },
260
+ size: { ...c.startTransform.size },
261
+ pivot: [...c.startTransform.pivot]
262
+ };
263
+ if (c.handle === "move")
264
+ E.position = {
265
+ x: _(c.startTransform.position.x + y),
266
+ y: _(c.startTransform.position.y + f)
267
+ };
268
+ else if (c.handle === "pivot") {
269
+ const g = Math.max(
270
+ 1,
271
+ c.startTransform.size.width * c.startTransform.scale2D.x
272
+ ), x = Math.max(
273
+ 1,
274
+ c.startTransform.size.height * c.startTransform.scale2D.y
275
+ ), R = ue(c.startTransform.pivot[0] + y / g), v = ue(c.startTransform.pivot[1] + f / x);
276
+ E.pivot = [_(R * 1e3) / 1e3, _(v * 1e3) / 1e3], E.position = {
277
+ x: _(
278
+ c.startTransform.position.x + (E.pivot[0] - c.startTransform.pivot[0]) * g
279
+ ),
280
+ y: _(
281
+ c.startTransform.position.y + (E.pivot[1] - c.startTransform.pivot[1]) * x
282
+ )
283
+ };
284
+ } else if (c.handle.startsWith("rotate")) {
285
+ const g = Math.atan2(
286
+ c.startPointerDesign.y - c.startTransform.position.y,
287
+ c.startPointerDesign.x - c.startTransform.position.x
288
+ ), x = Math.atan2(
289
+ A.y - c.startTransform.position.y,
290
+ A.x - c.startTransform.position.x
291
+ );
292
+ E.rotation = _(
293
+ c.startTransform.rotation + (x - g) * 180 / Math.PI
294
+ );
295
+ } else {
296
+ const g = c.handle === "left" || c.handle.endsWith("Left"), x = c.handle === "right" || c.handle.endsWith("Right"), R = c.handle === "top" || c.handle.startsWith("top"), v = c.handle === "bottom" || c.handle.startsWith("bottom"), m = x ? y * 2 : g ? -y * 2 : 0, O = R ? f * 2 : v ? -f * 2 : 0;
297
+ E.size = {
298
+ width: Math.max(1, _(c.startTransform.size.width + m)),
299
+ height: Math.max(1, _(c.startTransform.size.height + O))
300
+ };
301
+ }
302
+ T(E);
303
+ }, []), b = N(() => {
304
+ l.current = null, document.body.style.cursor = "", window.removeEventListener("pointermove", w), window.removeEventListener("pointerup", b);
305
+ }, [w]);
306
+ U(() => b, [b]);
307
+ const M = N(
308
+ (h, c) => {
309
+ !a || !S || !o || (c.preventDefault(), document.body.style.cursor = h === "move" ? "grabbing" : ee[h], l.current = {
310
+ handle: h,
311
+ startX: c.clientX,
312
+ startY: c.clientY,
313
+ startPointerDesign: He(c.clientX, c.clientY, a, S.scale),
314
+ startTransform: n,
315
+ scale: S.scale
316
+ }, window.addEventListener("pointermove", w), window.addEventListener("pointerup", b));
317
+ },
318
+ [a, S, o, b, n, w]
319
+ );
320
+ return U(() => {
321
+ if (typeof document > "u") return;
322
+ const h = document.createElement("div");
323
+ return document.body.appendChild(h), d.current = h, () => {
324
+ h.remove(), d.current = null;
325
+ };
326
+ }, []), U(() => {
327
+ const h = d.current;
328
+ if (!h || (h.replaceChildren(), !S))
329
+ return;
330
+ const c = 12, T = 12, y = document.createElement("div");
331
+ Object.assign(y.style, {
332
+ position: "fixed",
333
+ inset: "0",
334
+ zIndex: "19999",
335
+ pointerEvents: "none"
336
+ });
337
+ const f = document.createElement("div");
338
+ Object.assign(f.style, {
339
+ position: "absolute",
340
+ left: `${S.left}px`,
341
+ top: `${S.top}px`,
342
+ width: `${S.width}px`,
343
+ height: `${S.height}px`,
344
+ border: `1px solid ${e}`,
345
+ boxSizing: "border-box",
346
+ transform: `rotate(${-n.rotation}deg)`,
347
+ transformOrigin: `${n.pivot[0] * 100}% ${(1 - n.pivot[1]) * 100}%`,
348
+ pointerEvents: o ? "auto" : "none",
349
+ cursor: ee.move
350
+ }), f.addEventListener("pointerdown", (g) => M("move", g));
351
+ const A = (g, x, R, v, m = "translate(-50%, -50%)") => {
352
+ const O = document.createElement("div");
353
+ return Object.assign(O.style, {
354
+ position: "absolute",
355
+ left: `${x * 100}%`,
356
+ top: `${R * 100}%`,
357
+ width: `${v}px`,
358
+ height: `${v}px`,
359
+ cursor: ee[g],
360
+ transform: m,
361
+ pointerEvents: "auto"
362
+ }), O.addEventListener("pointerdown", (F) => {
363
+ F.stopPropagation(), M(g, F);
364
+ }), O;
365
+ };
366
+ for (const [g, x, R] of Xe) {
367
+ const v = A(g, x, R, c);
368
+ v.style.background = t, f.appendChild(v);
369
+ }
370
+ for (const [g, x, R] of Ye)
371
+ f.appendChild(A(g, x, R, 26));
372
+ const E = A(
373
+ "pivot",
374
+ n.pivot[0],
375
+ 1 - n.pivot[1],
376
+ T,
377
+ "translate(-50%, -50%) rotate(45deg)"
378
+ );
379
+ return Object.assign(E.style, {
380
+ border: "2px solid #ffffff",
381
+ background: "#111827",
382
+ boxSizing: "border-box"
383
+ }), f.appendChild(E), y.appendChild(f), h.appendChild(y), () => {
384
+ h.replaceChildren();
385
+ };
386
+ }, [e, t, S, o, M, n]), null;
387
+ }, V = {
388
+ // Pinning is opt-in. A serialized scene must never move an object until
389
+ // the author explicitly enables the component and chooses a target.
390
+ enabled: !1,
391
+ targetObjectId: null,
392
+ orientation: "none",
393
+ uv: { x: 0.5, y: 0.5 },
394
+ vertexNormal: !1,
395
+ offsetSpace: "local",
396
+ offsetPosition: { x: 0, y: 0, z: 0 },
397
+ offsetRotation: { x: 0, y: 0, z: 0 }
398
+ }, Ve = (e, t, o, n) => {
399
+ const r = o.clone().sub(t), s = n.clone().sub(t), a = e.clone().sub(t), i = r.x * s.y - s.x * r.y;
400
+ if (Math.abs(i) < 1e-8) return null;
401
+ const l = (a.x * s.y - s.x * a.y) / i, d = (r.x * a.y - a.x * r.y) / i, p = 1 - l - d;
402
+ return p >= -1e-5 && l >= -1e-5 && d >= -1e-5 ? [p, l, d] : null;
403
+ }, Ke = (e, t, o = !1) => {
404
+ const n = new q(t.x, t.y), r = new q(), s = new q(), a = new q(), i = new z(), l = new z(), d = new z(), p = new z(), S = new z(), w = new z();
405
+ let b = null;
406
+ if (e.traverse((h) => {
407
+ var x, R;
408
+ if (b || !h.isMesh) return;
409
+ const c = h, T = c.geometry, y = (x = T == null ? void 0 : T.attributes) == null ? void 0 : x.position, f = (R = T == null ? void 0 : T.attributes) == null ? void 0 : R.uv;
410
+ if (!y || !f) return;
411
+ const A = T.attributes.normal, E = T.index, g = (v) => (E == null ? void 0 : E.getX(v)) ?? v;
412
+ for (let v = 0; v < (E ? E.count : y.count); v += 3) {
413
+ const m = [g(v), g(v + 1), g(v + 2)];
414
+ r.set(f.getX(m[0]), f.getY(m[0])), s.set(f.getX(m[1]), f.getY(m[1])), a.set(f.getX(m[2]), f.getY(m[2]));
415
+ const O = Ve(n, r, s, a);
416
+ if (O) {
417
+ i.set(0, 0, 0), l.set(0, 0, 0), m.forEach((F, H) => {
418
+ d.fromBufferAttribute(y, F), i.addScaledVector(d, O[H]), A && o && l.addScaledVector(d.fromBufferAttribute(A, F), O[H]);
419
+ }), o || (p.fromBufferAttribute(y, m[0]), S.fromBufferAttribute(y, m[1]), w.fromBufferAttribute(y, m[2]), l.copy(S.sub(p).cross(w.sub(p)).normalize())), b = {
420
+ mesh: c,
421
+ localPosition: i.clone(),
422
+ localNormal: l.clone().normalize()
423
+ };
424
+ break;
425
+ }
426
+ }
427
+ }), b) return b;
428
+ const M = new Le().setFromObject(e);
429
+ return {
430
+ mesh: e,
431
+ localPosition: e.worldToLocal(M.getCenter(new z())),
432
+ localNormal: new z(0, 1, 0)
433
+ };
434
+ }, Qe = (e) => ({
435
+ position: e.mesh.localToWorld(e.localPosition.clone()),
436
+ normal: e.localNormal.clone().transformDirection(e.mesh.matrixWorld).normalize()
437
+ }), k = (e, t = 0) => Number.isFinite(e) ? e : t, te = new z(), oe = new z(), me = new B(), ne = new X(), re = new X(), Ze = new z(0, 1, 0), Je = (e) => {
438
+ e.position.set(0, 0, 0), e.quaternion.identity();
439
+ }, et = ({ settings: e, source: t, surface: o }) => {
440
+ e.orientation === "positionAndDirection" ? (me.lookAt(o.position, o.position.clone().add(o.normal), Ze), ne.setFromRotationMatrix(me)) : ne.identity(), t.quaternion.copy(ne), oe.set(
441
+ k(e.offsetPosition.x),
442
+ k(e.offsetPosition.y),
443
+ k(e.offsetPosition.z)
444
+ ), e.offsetSpace === "local" && oe.applyQuaternion(t.quaternion), te.copy(o.position).add(oe), t.parent && t.parent.worldToLocal(te), t.position.copy(te), re.setFromEuler(
445
+ new $(
446
+ k(e.offsetRotation.x) * Math.PI / 180,
447
+ k(e.offsetRotation.y) * Math.PI / 180,
448
+ k(e.offsetRotation.z) * Math.PI / 180
449
+ )
450
+ ), e.offsetSpace === "local" ? t.quaternion.multiply(re) : t.quaternion.premultiply(re);
451
+ }, to = ({ target: e, settings: t, children: o }) => {
452
+ const n = Ce(), r = j(null), s = j(null), a = () => {
453
+ r.current && Je(r.current);
454
+ };
455
+ return U(() => {
456
+ s.current = null;
457
+ }, [t.targetObjectId]), U(() => {
458
+ t.enabled || a();
459
+ }, [t.enabled]), Oe(() => {
460
+ const i = e ?? n(t.targetObjectId);
461
+ if (!t.enabled || !i || !r.current) {
462
+ (!t.enabled || !i) && a();
463
+ return;
464
+ }
465
+ const l = `${t.uv.x}:${t.uv.y}:${t.vertexNormal ? "vertex" : "face"}`;
466
+ (!s.current || s.current.target !== i || s.current.key !== l) && (s.current = {
467
+ key: l,
468
+ target: i,
469
+ surface: Ke(i, t.uv, t.vertexNormal)
470
+ }), i.updateWorldMatrix(!0, !0);
471
+ const d = Qe(s.current.surface);
472
+ et({ source: r.current, surface: d, settings: t });
473
+ }), De("group", { ref: r }, o);
474
+ }, I = (e) => Math.round(e * 2) / 2, ye = (e) => Math.min(1, Math.max(0, e));
475
+ function tt(e) {
476
+ return Math.min(
477
+ e.width / C.width,
478
+ e.height / C.height
479
+ ) || 1;
480
+ }
481
+ function ot({
482
+ resolved: e,
483
+ transform: t
484
+ }) {
485
+ return e.size[0] / Math.max(Math.abs(t.size.width * t.scale2D.x), 1e-6) || 1;
486
+ }
487
+ function nt({
488
+ parent: e,
489
+ resolved: t,
490
+ transform: o
491
+ }) {
492
+ const s = 16 * ((Math.min(
493
+ e.width / C.width,
494
+ e.height / C.height
495
+ ) || 1) * (fe / Math.max(o.referencePixelsPerUnit, 1e-6))), a = 0.028;
496
+ return [
497
+ s / Math.max(Math.abs(t.size[0]) * a, 1e-6),
498
+ s / Math.max(Math.abs(t.size[1]) * a, 1e-6),
499
+ 1
500
+ ];
501
+ }
502
+ function rt({
503
+ drag: e,
504
+ clientX: t,
505
+ clientY: o,
506
+ designScale: n
507
+ }) {
508
+ const r = (t - e.startX) / n, s = -(o - e.startY) / n, a = {
509
+ x: e.startPointerDesign.x + r,
510
+ y: e.startPointerDesign.y + s
511
+ }, i = {
512
+ ...e.startTransform,
513
+ position: { ...e.startTransform.position },
514
+ size: { ...e.startTransform.size },
515
+ pivot: [...e.startTransform.pivot]
516
+ };
517
+ if (e.handle === "move")
518
+ return i.position = {
519
+ x: I(e.startTransform.position.x + r),
520
+ y: I(e.startTransform.position.y + s)
521
+ }, i;
522
+ if (e.handle === "pivot") {
523
+ const M = Math.max(
524
+ 1,
525
+ e.startTransform.size.width * e.startTransform.scale2D.x
526
+ ), h = Math.max(
527
+ 1,
528
+ e.startTransform.size.height * e.startTransform.scale2D.y
529
+ ), c = ye(e.startTransform.pivot[0] + r / M), T = ye(e.startTransform.pivot[1] + s / h);
530
+ return i.pivot = [I(c * 1e3) / 1e3, I(T * 1e3) / 1e3], i.position = {
531
+ x: I(
532
+ e.startTransform.position.x + (i.pivot[0] - e.startTransform.pivot[0]) * M
533
+ ),
534
+ y: I(
535
+ e.startTransform.position.y + (i.pivot[1] - e.startTransform.pivot[1]) * h
536
+ )
537
+ }, i;
538
+ }
539
+ if (e.handle.startsWith("rotate")) {
540
+ const M = Math.atan2(
541
+ e.startPointerDesign.y - e.startTransform.position.y,
542
+ e.startPointerDesign.x - e.startTransform.position.x
543
+ ), h = Math.atan2(
544
+ a.y - e.startTransform.position.y,
545
+ a.x - e.startTransform.position.x
546
+ );
547
+ return i.rotation = I(
548
+ e.startTransform.rotation + (h - M) * 180 / Math.PI
549
+ ), i;
550
+ }
551
+ const l = e.handle === "left" || e.handle.endsWith("Left"), d = e.handle === "right" || e.handle.endsWith("Right"), p = e.handle === "top" || e.handle.startsWith("top"), S = e.handle === "bottom" || e.handle.startsWith("bottom"), w = d ? r * 2 : l ? -r * 2 : 0, b = p ? s * 2 : S ? -s * 2 : 0;
552
+ return i.size = {
553
+ width: Math.max(1, I(e.startTransform.size.width + w)),
554
+ height: Math.max(1, I(e.startTransform.size.height + b))
555
+ }, i;
556
+ }
557
+ function st({
558
+ transform: e,
559
+ guideLayer: t,
560
+ guideColor: o,
561
+ onChange: n,
562
+ children: r
563
+ }) {
564
+ const s = Me(), { size: a } = be(), i = j(n);
565
+ i.current = n;
566
+ const l = j(null), d = W(
567
+ () => de({ transform: e, parentSize: s }),
568
+ [s, e]
569
+ ), p = tt(a), S = j(p);
570
+ S.current = p;
571
+ const w = ot({ resolved: d, transform: e }), b = N((T) => {
572
+ const y = l.current, f = i.current;
573
+ !y || !f || f(
574
+ rt({
575
+ drag: y,
576
+ clientX: T.clientX,
577
+ clientY: T.clientY,
578
+ designScale: S.current
579
+ })
580
+ );
581
+ }, []), M = N(() => {
582
+ l.current = null, document.body.style.cursor = "", window.removeEventListener("pointermove", b), window.removeEventListener("pointerup", M);
583
+ }, [b]);
584
+ U(() => M, [M]);
585
+ const h = N(
586
+ (T, y) => {
587
+ n && (l.current = {
588
+ handle: T,
589
+ startX: y.nativeEvent.clientX,
590
+ startY: y.nativeEvent.clientY,
591
+ startPointerDesign: {
592
+ x: y.point.x / w,
593
+ y: y.point.y / w
594
+ },
595
+ startTransform: e
596
+ }, window.addEventListener("pointermove", b), window.addEventListener("pointerup", M));
597
+ },
598
+ [n, M, e, w, b]
599
+ ), c = W(
600
+ () => nt({ parent: s, resolved: d, transform: e }),
601
+ [s, d, e]
602
+ );
603
+ return /* @__PURE__ */ u(
604
+ "group",
605
+ {
606
+ position: [
607
+ d.center[0] + (e.pivot[0] - 0.5) * d.size[0],
608
+ d.center[1] + (e.pivot[1] - 0.5) * d.size[1],
609
+ 0
610
+ ],
611
+ rotation: d.rotation,
612
+ children: /* @__PURE__ */ u(
613
+ "group",
614
+ {
615
+ position: [
616
+ (0.5 - e.pivot[0]) * d.size[0],
617
+ (0.5 - e.pivot[1]) * d.size[1],
618
+ 0
619
+ ],
620
+ scale: d.size,
621
+ children: /* @__PURE__ */ P(Ee.Provider, { value: d.aspect, children: [
622
+ r,
623
+ e.showTransformGuides && t === "scene" ? /* @__PURE__ */ u(
624
+ Be,
625
+ {
626
+ color: o,
627
+ controlScale: c,
628
+ onHandlePointerDown: n ? h : void 0,
629
+ pivot: e.pivot,
630
+ pivotScale: c,
631
+ renderOrder: e.renderOrder + 1
632
+ }
633
+ ) : null,
634
+ e.showTransformGuides && t === "overlay" ? /* @__PURE__ */ u(
635
+ qe,
636
+ {
637
+ color: o,
638
+ onChange: n,
639
+ transform: e
640
+ }
641
+ ) : null
642
+ ] })
643
+ }
644
+ )
645
+ }
646
+ );
647
+ }
648
+ const Y = {
649
+ tint: "#dff6ff",
650
+ opacity: 0.28,
651
+ frost: 0.35,
652
+ highlight: 0.55
653
+ }, Te = (e) => ({
654
+ ...Y,
655
+ ...e,
656
+ opacity: L.clamp((e == null ? void 0 : e.opacity) ?? Y.opacity, 0, 1),
657
+ frost: L.clamp((e == null ? void 0 : e.frost) ?? Y.frost, 0, 1),
658
+ highlight: L.clamp((e == null ? void 0 : e.highlight) ?? Y.highlight, 0, 1)
659
+ }), it = `
660
+ varying vec2 vPosition;
661
+ void main() {
662
+ vPosition = position.xy;
663
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
664
+ }
665
+ `, at = `
666
+ uniform vec3 tint;
667
+ uniform float opacity;
668
+ uniform float frost;
669
+ uniform float highlight;
670
+ varying vec2 vPosition;
671
+
672
+ void main() {
673
+ float grain = fract(sin(dot(vPosition * 997.0, vec2(12.9898, 78.233))) * 43758.5453);
674
+ float sheen = smoothstep(0.15, 0.85, 1.0 - (vPosition.x + vPosition.y + 1.0) * 0.5);
675
+ vec3 frosted = mix(tint, vec3(1.0), frost * (0.18 + grain * 0.08));
676
+ vec3 color = mix(frosted, vec3(1.0), sheen * highlight * 0.32);
677
+ gl_FragColor = vec4(color, opacity);
678
+ }
679
+ `, ct = ({ opacity: e = 1, value: t }) => {
680
+ const o = W(() => {
681
+ const r = Te(t);
682
+ return {
683
+ tint: new Ae(r.tint),
684
+ opacity: r.opacity * e,
685
+ frost: r.frost,
686
+ highlight: r.highlight
687
+ };
688
+ }, [e, t]), n = _e(o);
689
+ return /* @__PURE__ */ u(
690
+ "shaderMaterial",
691
+ {
692
+ uniforms: n,
693
+ vertexShader: it,
694
+ fragmentShader: at,
695
+ transparent: !0,
696
+ depthTest: !1,
697
+ depthWrite: !1,
698
+ toneMapped: !1
699
+ }
700
+ );
701
+ }, se = (e, t = 1) => Array.from({ length: e }, (o, n) => {
702
+ const r = n % 2 ? t * 0.5 : 0.5, s = -Math.PI / 2 + n / e * Math.PI * 2;
703
+ return [Math.cos(s) * r, Math.sin(s) * r, 0];
704
+ }), lt = (e) => {
705
+ switch (e.kind) {
706
+ case "line":
707
+ return [
708
+ [e.lineStart.x - 0.5, 0.5 - e.lineStart.y, 0],
709
+ [e.lineEnd.x - 0.5, 0.5 - e.lineEnd.y, 0]
710
+ ];
711
+ case "polygon":
712
+ return se(Math.max(3, Math.round(e.sides)));
713
+ case "star":
714
+ return se(
715
+ Math.max(3, Math.round(e.sides)) * 2,
716
+ ae.MathUtils.clamp(e.innerRadiusRatio, 0.05, 0.95)
717
+ );
718
+ case "rectangle":
719
+ return [
720
+ [-0.5, -0.5, 0],
721
+ [0.5, -0.5, 0],
722
+ [0.5, 0.5, 0],
723
+ [-0.5, 0.5, 0]
724
+ ];
725
+ case "roundedRectangle": {
726
+ const t = ae.MathUtils.clamp(e.cornerRadius, 0, 0.5), o = [];
727
+ return [
728
+ [0.5 - t, 0.5 - t, 0],
729
+ [-0.5 + t, 0.5 - t, Math.PI / 2],
730
+ [-0.5 + t, -0.5 + t, Math.PI],
731
+ [0.5 - t, -0.5 + t, Math.PI * 1.5]
732
+ ].forEach(([r, s, a]) => {
733
+ for (let i = 0; i <= 6; i += 1) {
734
+ const l = a + i / 6 * (Math.PI / 2);
735
+ o.push([r + Math.cos(l) * t, s + Math.sin(l) * t, 0]);
736
+ }
737
+ }), o;
738
+ }
739
+ case "circle":
740
+ case "ellipse":
741
+ default:
742
+ return se(64);
743
+ }
744
+ }, dt = (e) => {
745
+ const t = new ae.Shape();
746
+ return e.forEach(([o, n], r) => r ? t.lineTo(o, n) : t.moveTo(o, n)), t.closePath(), t;
747
+ }, K = {
748
+ kind: "rectangle",
749
+ fillColor: "#38bdf8",
750
+ fillOpacity: 1,
751
+ fillMode: "solid",
752
+ gradient: Ie,
753
+ glass: Y,
754
+ strokeColor: "#ffffff",
755
+ strokeOpacity: 1,
756
+ strokeWidth: 3,
757
+ cornerRadius: 0.15,
758
+ sides: 5,
759
+ innerRadiusRatio: 0.45,
760
+ dashed: !1,
761
+ lineStart: { x: 0.1, y: 0.5 },
762
+ lineEnd: { x: 0.9, y: 0.5 }
763
+ }, ft = (e) => {
764
+ const t = {
765
+ ...K,
766
+ ...e,
767
+ lineStart: { ...K.lineStart, ...e == null ? void 0 : e.lineStart },
768
+ lineEnd: { ...K.lineEnd, ...e == null ? void 0 : e.lineEnd },
769
+ gradient: je(e == null ? void 0 : e.gradient),
770
+ glass: Te(e == null ? void 0 : e.glass)
771
+ }, o = (n, r) => Number.isFinite(n) ? n : r;
772
+ return {
773
+ ...t,
774
+ fillOpacity: L.clamp(o(t.fillOpacity, 1), 0, 1),
775
+ strokeOpacity: L.clamp(o(t.strokeOpacity, 1), 0, 1),
776
+ strokeWidth: Math.max(0, o(t.strokeWidth, 0)),
777
+ cornerRadius: L.clamp(o(t.cornerRadius, 0), 0, 0.5),
778
+ sides: L.clamp(Math.round(o(t.sides, 5)), 3, 12),
779
+ innerRadiusRatio: L.clamp(o(t.innerRadiusRatio, 0.45), 0.05, 0.95),
780
+ lineStart: {
781
+ x: L.clamp(o(t.lineStart.x, 0.1), 0, 1),
782
+ y: L.clamp(o(t.lineStart.y, 0.5), 0, 1)
783
+ },
784
+ lineEnd: {
785
+ x: L.clamp(o(t.lineEnd.x, 0.9), 0, 1),
786
+ y: L.clamp(o(t.lineEnd.y, 0.5), 0, 1)
787
+ }
788
+ };
789
+ }, pt = ({
790
+ name: e,
791
+ renderOrder: t,
792
+ settings: o,
793
+ visible: n
794
+ }) => {
795
+ const r = ze(), s = W(() => lt(o), [o]), a = W(() => dt(s), [s]), l = ["circle", "polygon", "star"].includes(o.kind) ? [Math.min(1, 1 / r), Math.min(1, r), 1] : [1, 1, 1], p = o.kind !== "line" ? [...s, s[0]] : s;
796
+ return /* @__PURE__ */ P("group", { name: e, visible: n, scale: l, children: [
797
+ o.kind !== "line" && o.fillOpacity > 0 ? /* @__PURE__ */ P("mesh", { renderOrder: t, children: [
798
+ /* @__PURE__ */ u("shapeGeometry", { args: [a] }),
799
+ o.fillMode === "glass" ? /* @__PURE__ */ u(ct, { value: o.glass, opacity: o.fillOpacity }) : /* @__PURE__ */ u(
800
+ We,
801
+ {
802
+ settings: {
803
+ source: o.fillMode,
804
+ color: o.fillColor,
805
+ opacity: o.fillOpacity,
806
+ gradient: o.gradient
807
+ }
808
+ }
809
+ )
810
+ ] }) : null,
811
+ o.strokeWidth > 0 && o.strokeOpacity > 0 ? /* @__PURE__ */ u(
812
+ ke,
813
+ {
814
+ points: p,
815
+ color: o.strokeColor,
816
+ lineWidth: o.strokeWidth,
817
+ opacity: o.strokeOpacity,
818
+ transparent: o.strokeOpacity < 1,
819
+ dashed: o.dashed,
820
+ dashSize: 0.05,
821
+ gapSize: 0.03,
822
+ depthTest: !1,
823
+ depthWrite: !1,
824
+ renderOrder: t + 1
825
+ }
826
+ ) : null
827
+ ] });
828
+ }, oo = ({
829
+ name: e,
830
+ onScreenTransformChange: t,
831
+ renderOrder: o,
832
+ settings: n,
833
+ transform: r,
834
+ transformGuideLayer: s = "scene",
835
+ visible: a = !0
836
+ }) => {
837
+ const i = W(() => ft(n), [n]), l = W(
838
+ () => Ue(r ?? Z),
839
+ [r]
840
+ );
841
+ return l.enabled ? /* @__PURE__ */ u(
842
+ st,
843
+ {
844
+ transform: l,
845
+ guideLayer: s,
846
+ guideColor: "#38bdf8",
847
+ onChange: t,
848
+ children: /* @__PURE__ */ u(
849
+ pt,
850
+ {
851
+ name: e,
852
+ settings: i,
853
+ visible: a && l.visible,
854
+ renderOrder: o ?? l.renderOrder
855
+ }
856
+ )
857
+ }
858
+ ) : null;
859
+ };
860
+ function no(e) {
861
+ const { screenSpaceUI: t, screenImage: o } = e, { image: n, transformation: r } = o, s = n.src.trim();
862
+ return {
863
+ shouldRender: t.enabled && o.enabled && r.enabled,
864
+ props: {
865
+ source: n.sourceKind === "image" && s.length > 0 ? { kind: "image", src: s } : n.sourceKind === "gif" && s.length > 0 ? { kind: "gif", src: s } : { kind: "default" },
866
+ transform: o.screenTransform,
867
+ coordinateSpace: r.coordinateSpace,
868
+ canvasSize: r.canvasSize,
869
+ position: [r.position.x, r.position.y],
870
+ size: [r.size.width, r.size.height],
871
+ rotation: r.rotation,
872
+ pivot: r.pivot,
873
+ stretchMode: n.stretchMode,
874
+ materialType: n.materialType,
875
+ blendMode: n.blendMode,
876
+ opacity: n.opacity,
877
+ color: n.color,
878
+ flipX: n.flipX,
879
+ flipY: n.flipY,
880
+ renderOrder: r.renderOrder,
881
+ transparent: n.transparent,
882
+ alphaTest: n.alphaTest,
883
+ overlay: r.overlay,
884
+ visible: r.visible
885
+ }
886
+ };
887
+ }
888
+ const pe = {
889
+ enabled: !0,
890
+ preset: "placeholder",
891
+ transformation: {
892
+ enabled: !0,
893
+ showFitGuides: !1,
894
+ coordinateSpace: "canvas",
895
+ canvasSize: { width: 720, height: 1280 },
896
+ position: { x: 0, y: 0 },
897
+ size: { width: 680, height: 1230 },
898
+ rotation: 0,
899
+ pivot: [0.5, 0.5],
900
+ renderOrder: 999,
901
+ overlay: !0,
902
+ visible: !0
903
+ },
904
+ screenTransform: {
905
+ ...Z,
906
+ renderOrder: 999
907
+ },
908
+ image: {
909
+ sourceKind: "default",
910
+ src: "",
911
+ stretchMode: "fit",
912
+ materialType: "unlit",
913
+ blendMode: "normal",
914
+ opacity: 1,
915
+ color: "#ffffff",
916
+ flipX: !1,
917
+ flipY: !1,
918
+ transparent: !0,
919
+ alphaTest: 0
920
+ }
921
+ }, ro = {
922
+ screenImage: pe,
923
+ screenSpaceUI: {
924
+ enabled: !0
925
+ }
926
+ }, ht = (e) => e * Math.PI / 180;
927
+ function ut(e) {
928
+ if (!e) return;
929
+ const t = e.offset ?? 0, o = ht(e.angle ?? -45);
930
+ return {
931
+ color: e.color,
932
+ opacity: e.opacity,
933
+ blur: (e.feather ?? 0) * 100,
934
+ offsetX: Math.cos(o) * t,
935
+ offsetY: Math.sin(o) * t
936
+ };
937
+ }
938
+ function so(e) {
939
+ const { screenSpaceUI: t, screenText: o } = e, { content: n, layout: r, style: s, transformation: a } = o, i = s.background;
940
+ return {
941
+ shouldRender: t.enabled && o.enabled && a.enabled,
942
+ props: {
943
+ text: n.text,
944
+ screenTransform: o.screenTransform,
945
+ coordinateSpace: a.coordinateSpace,
946
+ canvasSize: a.canvasSize,
947
+ position: [a.position.x, a.position.y],
948
+ size: [a.size.width, a.size.height],
949
+ rotation: a.rotation,
950
+ pivot: a.pivot,
951
+ renderOrder: a.renderOrder,
952
+ overlay: a.overlay,
953
+ visible: a.visible,
954
+ showTransformGuides: a.showTransformGuides,
955
+ fontSize: s.fontSize,
956
+ fontFamily: s.fontFamily,
957
+ fontWeight: s.fontWeight,
958
+ fontStyle: s.fontStyle,
959
+ underline: s.underline,
960
+ strikethrough: s.strikethrough,
961
+ letterSpacing: s.letterSpacing,
962
+ lineSpacing: s.lineSpacing,
963
+ color: s.color,
964
+ opacity: s.opacity,
965
+ outlineEnabled: s.outlineEnabled,
966
+ strokeLayers: s.strokeLayers,
967
+ shadowEnabled: s.shadowEnabled,
968
+ shadowLayers: s.shadowLayers,
969
+ innerShadow: s.innerShadowEnabled ? ut(s.innerShadow) : void 0,
970
+ glow: s.glowEnabled ? s.glow : void 0,
971
+ bend: s.bendEnabled ? s.bend : void 0,
972
+ bgColor: i.enabled ? i.color : "transparent",
973
+ bgOpacity: i.opacity,
974
+ bgFit: i.fit,
975
+ bgAutoSize: i.autoSize,
976
+ bgFillMode: i.fillMode,
977
+ bgWidth: i.width,
978
+ bgHeight: i.height,
979
+ bgGradientStops: i.gradientStops,
980
+ bgTextureUrl: i.textureUrl,
981
+ bgTextureFit: i.textureFit,
982
+ bgTextureFlipX: i.textureFlipX,
983
+ bgTextureFlipY: i.textureFlipY,
984
+ padding: i.padding,
985
+ borderColor: i.borderEnabled ? i.borderColor : void 0,
986
+ borderWidth: i.borderEnabled ? i.borderWidth : 0,
987
+ borderRadius: i.borderRadius,
988
+ textAlign: r.textAlign,
989
+ verticalAlign: r.verticalAlign,
990
+ overflow: r.overflow,
991
+ resizeToFit: r.resizeToFit,
992
+ minFontSize: r.minFontSize
993
+ }
994
+ };
995
+ }
996
+ const mt = {
997
+ color: "#000000",
998
+ blur: 0,
999
+ offsetX: 7.071,
1000
+ offsetY: -7.071,
1001
+ opacity: 1,
1002
+ offset: 10,
1003
+ angle: -45,
1004
+ feather: 0
1005
+ }, yt = {
1006
+ screenText: {
1007
+ enabled: !0,
1008
+ content: {
1009
+ text: "Hello from Vincentt"
1010
+ },
1011
+ layout: {
1012
+ textAlign: "center",
1013
+ verticalAlign: "center",
1014
+ overflow: "clip",
1015
+ resizeToFit: !1,
1016
+ minFontSize: 32
1017
+ },
1018
+ style: {
1019
+ fontSize: 72,
1020
+ fontFamily: '"Space Grotesk", sans-serif',
1021
+ fontWeight: 400,
1022
+ bold: !1,
1023
+ fontStyle: "normal",
1024
+ underline: !1,
1025
+ strikethrough: !1,
1026
+ letterSpacing: 0,
1027
+ lineSpacing: 0.3,
1028
+ color: "#ffffff",
1029
+ opacity: 1,
1030
+ aspect: 3,
1031
+ outlineEnabled: !0,
1032
+ shadowEnabled: !1,
1033
+ innerShadowEnabled: !1,
1034
+ innerShadow: {
1035
+ color: "#000000",
1036
+ opacity: 1,
1037
+ offset: 10,
1038
+ angle: -45,
1039
+ feather: 0
1040
+ },
1041
+ glowEnabled: !1,
1042
+ glow: {
1043
+ color: "#ffffff",
1044
+ style: "outward",
1045
+ intensity: 0.5,
1046
+ range: 0.5,
1047
+ horizontalAngle: 0,
1048
+ verticalAngle: 0
1049
+ },
1050
+ bendEnabled: !1,
1051
+ bend: {
1052
+ preset: "arc",
1053
+ strength: 100
1054
+ },
1055
+ background: {
1056
+ enabled: !1,
1057
+ autoSize: !0,
1058
+ fit: "text",
1059
+ fillMode: "solid",
1060
+ color: "#14286e",
1061
+ opacity: 1,
1062
+ borderRadius: 32,
1063
+ padding: 0,
1064
+ width: 540,
1065
+ height: 220,
1066
+ borderEnabled: !1,
1067
+ borderWidth: 0,
1068
+ borderColor: "#ffffff",
1069
+ gradientStops: [
1070
+ { color: "#14286e", position: 0 },
1071
+ { color: "#3657d6", position: 0.5 },
1072
+ { color: "#8ab4ff", position: 1 }
1073
+ ],
1074
+ textureUrl: "",
1075
+ textureFit: "cover",
1076
+ textureFlipX: !1,
1077
+ textureFlipY: !1
1078
+ },
1079
+ strokeLayers: [{ color: "#0f172a", width: 12, opacity: 1 }],
1080
+ shadowLayers: [mt]
1081
+ },
1082
+ screenTransform: {
1083
+ ...Z,
1084
+ renderOrder: 1e3
1085
+ },
1086
+ transformation: {
1087
+ enabled: !0,
1088
+ showTransformGuides: !1,
1089
+ coordinateSpace: "canvas",
1090
+ canvasSize: { width: 720, height: 1280 },
1091
+ position: { x: 0, y: 0 },
1092
+ size: { width: 680, height: 1230 },
1093
+ rotation: 0,
1094
+ pivot: [0.5, 0.5],
1095
+ renderOrder: 1e3,
1096
+ overlay: !0,
1097
+ visible: !0
1098
+ },
1099
+ textArtPreset: "clean"
1100
+ },
1101
+ screenImage: pe,
1102
+ screenSpaceUI: {
1103
+ enabled: !0
1104
+ }
1105
+ }, xe = (e) => {
1106
+ const t = typeof crypto < "u" && "randomUUID" in crypto ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
1107
+ return `${e}_${t}`;
1108
+ }, St = () => xe("obj"), gt = () => xe("cmp"), G = (e) => typeof structuredClone == "function" ? structuredClone(e) : JSON.parse(JSON.stringify(e)), bt = () => G(Ne), Tt = () => G(Z), xt = () => G(pe), vt = () => G(yt.screenText), wt = () => G(K), Mt = () => G(Re), Et = () => G(Ge), zt = () => ({
1109
+ type: "standard",
1110
+ color: "#ffffff",
1111
+ opacity: 1,
1112
+ wireframe: !1,
1113
+ roughness: 0.42,
1114
+ metalness: 0.08
1115
+ }), Rt = () => ({
1116
+ flipX: !1,
1117
+ flipY: !1
1118
+ }), Ot = () => ({
1119
+ enabled: !0,
1120
+ type: "directional",
1121
+ color: "#ffffff",
1122
+ intensity: 2.2,
1123
+ castShadow: !0,
1124
+ distance: 10,
1125
+ angle: Math.PI / 6,
1126
+ penumbra: 0.2,
1127
+ decay: 2,
1128
+ showHelper: !1
1129
+ }), Pt = () => ({
1130
+ enabled: !1,
1131
+ targetObjectId: null,
1132
+ mode: "point",
1133
+ inheritChildren: !1,
1134
+ offsetRotation: { x: 0, y: 0, z: 0 }
1135
+ }), Dt = () => ({
1136
+ ...V,
1137
+ uv: { ...V.uv },
1138
+ offsetPosition: { ...V.offsetPosition },
1139
+ offsetRotation: { ...V.offsetRotation }
1140
+ }), Lt = () => G(Fe), At = {
1141
+ Transform: bt,
1142
+ ScreenTransform: Tt,
1143
+ ScreenImage: xt,
1144
+ ScreenText: vt,
1145
+ ScreenShape: wt,
1146
+ MeshRenderer: Mt,
1147
+ FaceMeshRenderer: Et,
1148
+ Material: zt,
1149
+ Texture: Rt,
1150
+ Light: Ot,
1151
+ LookAt: Pt,
1152
+ PinToMesh: Dt,
1153
+ TrackingAnchor: Lt
1154
+ }, io = ({
1155
+ componentIds: e = [],
1156
+ enabled: t = !0,
1157
+ id: o = St(),
1158
+ parentObjectId: n = null,
1159
+ childObjectIds: r = [],
1160
+ renderGroupId: s,
1161
+ layerId: a,
1162
+ name: i
1163
+ }) => ({
1164
+ id: o,
1165
+ name: i,
1166
+ enabled: t,
1167
+ parentObjectId: n,
1168
+ childObjectIds: r,
1169
+ layerId: a,
1170
+ renderGroupId: s ?? a,
1171
+ componentIds: e
1172
+ }), ao = (e, t) => ({
1173
+ id: gt(),
1174
+ objectId: t,
1175
+ type: e,
1176
+ enabled: !0,
1177
+ settings: At[e]()
1178
+ }), J = (e, t) => {
1179
+ const o = e.objects[t];
1180
+ return o ? o.componentIds.map((n) => e.components[n]).filter((n) => !!n) : [];
1181
+ }, co = () => {
1182
+ let e = null, t = null, o = null, n = [];
1183
+ return (r, s) => {
1184
+ const a = r.objects[s];
1185
+ if (!a)
1186
+ return e = r, t = s, o = null, n = [], n;
1187
+ const i = a.componentIds;
1188
+ return e === r && t === s && o === i && n.length === i.length && n.every((d) => r.components[d.id] === d) || (e = r, t = s, o = i, n = J(r, s)), n;
1189
+ };
1190
+ }, lo = (e, t) => {
1191
+ const o = e.objects[t.objectId];
1192
+ return o ? {
1193
+ ...e,
1194
+ objects: {
1195
+ ...e.objects,
1196
+ [o.id]: {
1197
+ ...o,
1198
+ componentIds: [...o.componentIds, t.id]
1199
+ }
1200
+ },
1201
+ components: {
1202
+ ...e.components,
1203
+ [t.id]: t
1204
+ }
1205
+ } : e;
1206
+ }, fo = (e, t, o, n) => {
1207
+ const r = e.objects[t];
1208
+ if (!r || r.componentIds.indexOf(o) < 0) return e;
1209
+ const a = r.componentIds.filter((i) => i !== o);
1210
+ return a.splice(Math.max(0, Math.min(n, a.length)), 0, o), {
1211
+ ...e,
1212
+ objects: {
1213
+ ...e.objects,
1214
+ [t]: { ...r, componentIds: a }
1215
+ }
1216
+ };
1217
+ }, po = (e, t, o) => {
1218
+ const n = e.objects[t];
1219
+ if (!n) return e;
1220
+ const r = { ...e.components };
1221
+ return delete r[o], {
1222
+ ...e,
1223
+ objects: {
1224
+ ...e.objects,
1225
+ [t]: {
1226
+ ...n,
1227
+ componentIds: n.componentIds.filter((s) => s !== o)
1228
+ }
1229
+ },
1230
+ components: r
1231
+ };
1232
+ }, Se = (e, t) => e.components[t.id] ? {
1233
+ ...e,
1234
+ components: {
1235
+ ...e.components,
1236
+ [t.id]: t
1237
+ }
1238
+ } : e, Ct = (e, t) => e.objects[t.id] ? {
1239
+ ...e,
1240
+ objects: {
1241
+ ...e.objects,
1242
+ [t.id]: t
1243
+ }
1244
+ } : e, Ft = (e, t) => {
1245
+ const o = e.objects[t], n = (o == null ? void 0 : o.childObjectIds) ?? [], r = Object.values(e.objects).filter((a) => a.parentObjectId === t).map((a) => a.id);
1246
+ return [.../* @__PURE__ */ new Set([...n, ...r])].map((a) => e.objects[a]).filter((a) => !!a);
1247
+ }, _t = (e, t, o) => {
1248
+ var s;
1249
+ let n = o;
1250
+ const r = /* @__PURE__ */ new Set();
1251
+ for (; n; ) {
1252
+ if (n === t || r.has(n)) return !0;
1253
+ r.add(n), n = ((s = e.objects[n]) == null ? void 0 : s.parentObjectId) ?? null;
1254
+ }
1255
+ return !1;
1256
+ }, ge = (e, t) => {
1257
+ const o = new Set(J(e, t).map((n) => n.type));
1258
+ return o.has("Transform") ? "3d" : o.has("ScreenTransform") ? "2d" : null;
1259
+ }, It = (e, t, o, n) => {
1260
+ const r = e.objects[t];
1261
+ if (!r || o !== null && !e.objects[o]) return e;
1262
+ if (o !== null) {
1263
+ const i = ge(e, t), l = ge(e, o);
1264
+ if (i && l && i !== l) return e;
1265
+ }
1266
+ if (_t(e, t, o)) return e;
1267
+ const s = r.parentObjectId ?? null;
1268
+ if (s === o && o === null) return e;
1269
+ const a = { ...e.objects };
1270
+ if (s && a[s]) {
1271
+ const i = a[s];
1272
+ a[s] = {
1273
+ ...i,
1274
+ childObjectIds: (i.childObjectIds ?? []).filter((l) => l !== t)
1275
+ };
1276
+ }
1277
+ if (a[t] = { ...r, parentObjectId: o }, o) {
1278
+ const i = a[o], l = (i.childObjectIds ?? []).filter((d) => d !== t);
1279
+ l.splice(
1280
+ Math.max(0, Math.min(n ?? l.length, l.length)),
1281
+ 0,
1282
+ t
1283
+ ), a[o] = { ...i, childObjectIds: l };
1284
+ }
1285
+ return { ...e, objects: a };
1286
+ }, ie = Math.PI / 180, Q = 180 / Math.PI, D = (e) => Number(e.toFixed(4)), jt = (e) => (e == null ? void 0 : e.type) === "Transform", ve = (e, t) => J(e, t).find(jt) ?? null, Wt = (e) => (e == null ? void 0 : e.type) === "ScreenTransform", we = (e, t) => J(e, t).find(Wt) ?? null, Gt = (e) => new B().compose(
1287
+ new z(e.position.x, e.position.y, e.position.z),
1288
+ new X().setFromEuler(
1289
+ new $(
1290
+ e.rotation.x * ie,
1291
+ e.rotation.y * ie,
1292
+ e.rotation.z * ie
1293
+ )
1294
+ ),
1295
+ new z(e.scale.x, e.scale.y, e.scale.z)
1296
+ ), Nt = (e, t) => {
1297
+ const o = ve(e, t);
1298
+ return o ? Gt(o.settings) : new B();
1299
+ }, ce = (e, t) => {
1300
+ const o = e.objects[t], n = Nt(e, t);
1301
+ return !(o != null && o.parentObjectId) || !e.objects[o.parentObjectId] ? n : ce(e, o.parentObjectId).multiply(n);
1302
+ }, Ut = (e) => {
1303
+ const t = de({
1304
+ transform: e,
1305
+ parentSize: C,
1306
+ snapIncrement: 0
1307
+ });
1308
+ return new B().compose(
1309
+ new z(...t.center),
1310
+ new X().setFromEuler(new $(...t.rotation)),
1311
+ new z(...t.size)
1312
+ );
1313
+ }, le = (e, t) => {
1314
+ var s;
1315
+ const o = we(e, t), n = o ? Ut(o.settings) : new B(), r = (s = e.objects[t]) == null ? void 0 : s.parentObjectId;
1316
+ return !r || !e.objects[r] ? n : le(e, r).multiply(n);
1317
+ }, kt = (e, t) => {
1318
+ const o = new z(), n = new X(), r = new z();
1319
+ e.decompose(o, n, r);
1320
+ const s = new $().setFromQuaternion(n);
1321
+ return {
1322
+ ...t,
1323
+ position: {
1324
+ x: D(o.x),
1325
+ y: D(o.y),
1326
+ z: D(o.z)
1327
+ },
1328
+ rotation: {
1329
+ x: D(s.x * Q),
1330
+ y: D(s.y * Q),
1331
+ z: D(s.z * Q)
1332
+ },
1333
+ scale: {
1334
+ x: D(r.x),
1335
+ y: D(r.y),
1336
+ z: D(r.z)
1337
+ }
1338
+ };
1339
+ }, Bt = (e, t) => {
1340
+ const o = new z(), n = new X(), r = new z();
1341
+ e.decompose(o, n, r);
1342
+ const s = new $().setFromQuaternion(n), a = fe / t.referencePixelsPerUnit, i = Math.abs(r.x), l = Math.abs(r.y), d = (t.pivot[0] - 0.5) * i, p = (t.pivot[1] - 0.5) * l;
1343
+ return {
1344
+ ...t,
1345
+ position: {
1346
+ x: D((o.x + d) / a),
1347
+ y: D((o.y + p) / a)
1348
+ },
1349
+ rotation: D(s.z * Q),
1350
+ scale2D: {
1351
+ x: D(i / (t.size.width * a)),
1352
+ y: D(l / (t.size.height * a))
1353
+ }
1354
+ };
1355
+ }, ho = (e, t, o, n) => {
1356
+ const r = ve(e, t), s = we(e, t), a = r ? ce(e, t) : s ? le(e, t) : null, i = It(e, t, o, n);
1357
+ if (i === e || !a) return i;
1358
+ const d = (o ? r ? ce(i, o) : le(i, o) : new B()).clone().invert().multiply(a);
1359
+ return s ? Se(i, {
1360
+ ...s,
1361
+ settings: Bt(d, s.settings)
1362
+ }) : r ? Se(i, {
1363
+ ...r,
1364
+ settings: kt(d, r.settings)
1365
+ }) : i;
1366
+ }, uo = (e, t, o) => {
1367
+ const n = e.objects[t];
1368
+ return n ? Ct(e, { ...n, enabled: o }) : e;
1369
+ }, mo = (e, t) => {
1370
+ const o = e.objects[t];
1371
+ if (!o) return e;
1372
+ const n = Ft(e, t).map((i) => i.id), r = { ...e.objects };
1373
+ delete r[t];
1374
+ const s = Object.fromEntries(
1375
+ Object.entries(r).map(([i, l]) => [
1376
+ i,
1377
+ n.includes(i) || l.parentObjectId === t ? { ...l, parentObjectId: null } : {
1378
+ ...l,
1379
+ childObjectIds: (l.childObjectIds ?? []).filter(
1380
+ (d) => d !== t
1381
+ )
1382
+ }
1383
+ ])
1384
+ ), a = { ...e.components };
1385
+ for (const i of o.componentIds)
1386
+ delete a[i];
1387
+ return { ...e, objects: s, components: a };
1388
+ }, Xt = 30, yo = 31, So = (e, t = 1) => {
1389
+ const o = t + e;
1390
+ if (o < 1 || o > Xt)
1391
+ throw new RangeError(`Render-group layer ${o} is outside the supported range 1-30.`);
1392
+ return o;
1393
+ }, go = ({
1394
+ renderer: e,
1395
+ scene: t,
1396
+ camera: o,
1397
+ layers: n,
1398
+ includeDefaultLayer: r = !0
1399
+ }) => {
1400
+ const s = o.layers.mask, a = e.autoClear;
1401
+ try {
1402
+ if (e.autoClear = !1, e.clear(!0, !0, !0), n.length === 0) {
1403
+ o.layers.set(0), e.render(t, o);
1404
+ return;
1405
+ }
1406
+ n.forEach((i, l) => {
1407
+ o.layers.set(i), r && i !== 0 && o.layers.enable(0), l > 0 && e.clearDepth(), e.render(t, o);
1408
+ });
1409
+ } finally {
1410
+ o.layers.mask = s, e.autoClear = a;
1411
+ }
1412
+ };
1413
+ export {
1414
+ uo as A,
1415
+ So as B,
1416
+ Te as C,
1417
+ Y as D,
1418
+ oo as E,
1419
+ K as F,
1420
+ ft as G,
1421
+ yo as H,
1422
+ go as I,
1423
+ pe as J,
1424
+ ro as K,
1425
+ no as L,
1426
+ Xt as M,
1427
+ yt as N,
1428
+ mt as O,
1429
+ to as P,
1430
+ ut as Q,
1431
+ so as R,
1432
+ ct as S,
1433
+ st as T,
1434
+ lo as a,
1435
+ ao as b,
1436
+ At as c,
1437
+ Et as d,
1438
+ zt as e,
1439
+ Mt as f,
1440
+ xt as g,
1441
+ vt as h,
1442
+ wt as i,
1443
+ Tt as j,
1444
+ Rt as k,
1445
+ bt as l,
1446
+ gt as m,
1447
+ xe as n,
1448
+ io as o,
1449
+ St as p,
1450
+ co as q,
1451
+ mo as r,
1452
+ J as s,
1453
+ Ft as t,
1454
+ fo as u,
1455
+ po as v,
1456
+ Se as w,
1457
+ Ct as x,
1458
+ It as y,
1459
+ ho as z
1460
+ };