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

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 (352) hide show
  1. package/GROUNDING.md +1588 -20
  2. package/dist/{DebuggerUI-CatYc-RG.cjs → DebuggerUI-B45_Gb9d.cjs} +1 -1
  3. package/dist/{DebuggerUI-gLMKiVwJ.js → DebuggerUI-Cq28c18s.js} +1 -1
  4. package/dist/FaceMeshRenderer-6t8OsQhK.js +1195 -0
  5. package/dist/FaceMeshRenderer-lQLhYIW-.cjs +155 -0
  6. package/dist/FaceRetouch-CDrL0pXg.js +551 -0
  7. package/dist/FaceRetouch-DtNl8-4e.cjs +134 -0
  8. package/dist/audio/AudioEngine.d.ts +3 -1
  9. package/dist/audio/AudioPlayer.d.ts +29 -0
  10. package/dist/audio/AudioPlayerLogic.d.ts +4 -0
  11. package/dist/audio/index.d.ts +2 -0
  12. package/dist/components/Axes/index.d.ts +6 -0
  13. package/dist/components/FaceMesh/FaceMeshRenderer.d.ts +17 -0
  14. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +17 -1
  15. package/dist/components/FaceMesh/canonical/FaceMeshMaterial.d.ts +25 -0
  16. package/dist/components/FaceMesh/canonical/assets.d.ts +3 -0
  17. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +9 -0
  18. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +2 -0
  19. package/dist/components/FaceMesh/canonical/shaders.d.ts +2 -0
  20. package/dist/components/FaceMesh/deform.d.ts +3 -0
  21. package/dist/components/FaceMesh/index.d.ts +5 -0
  22. package/dist/components/FaceMesh/material/defaults.d.ts +70 -0
  23. package/dist/components/FaceMesh/material/index.d.ts +1 -0
  24. package/dist/components/FaceMesh/material/options.d.ts +5 -1
  25. package/dist/components/FaceMesh/material/support.d.ts +7 -2
  26. package/dist/components/FaceMesh/material/textures.d.ts +4 -0
  27. package/dist/components/FaceMesh/material/types.d.ts +2 -2
  28. package/dist/components/FaceRetouch/Background.d.ts +5 -6
  29. package/dist/components/FaceRetouch/FaceRetouch.d.ts +47 -0
  30. package/dist/components/FaceRetouch/index.d.ts +2 -8
  31. package/dist/components/FaceRetouch/landmarkMask.d.ts +0 -5
  32. package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +3 -7
  33. package/dist/components/FaceTracker/index.d.ts +5 -3
  34. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +1 -1
  35. package/dist/components/HandJoints2D/index.d.ts +1 -1
  36. package/dist/components/HandTracking2D/HandVisual.d.ts +1 -1
  37. package/dist/components/HandTracking2D/index.d.ts +1 -1
  38. package/dist/components/HandTracking2DController/index.d.ts +1 -1
  39. package/dist/components/HandTracking3D/index.d.ts +1 -1
  40. package/dist/components/LightObject/index.d.ts +20 -0
  41. package/dist/components/LookAt/index.d.ts +23 -0
  42. package/dist/components/MeshRenderer/index.d.ts +58 -0
  43. package/dist/components/PerspectiveCamera/index.d.ts +2 -8
  44. package/dist/components/PinToMesh/index.d.ts +47 -0
  45. package/dist/components/RenderGroupLayer/index.d.ts +6 -0
  46. package/dist/components/SceneObjectRenderer/index.d.ts +16 -0
  47. package/dist/components/Screen2D/ScreenTransformFrame.d.ts +11 -0
  48. package/dist/components/Screen2D/ScreenTransformHelpers.d.ts +19 -0
  49. package/dist/components/Screen2D/ScreenTransformInteraction.d.ts +18 -0
  50. package/dist/components/Screen2D/index.d.ts +5 -0
  51. package/dist/components/ScreenGlass/defaults.d.ts +3 -0
  52. package/dist/components/ScreenGlass/index.d.ts +5 -0
  53. package/dist/components/ScreenGlass/shaders.d.ts +2 -0
  54. package/dist/components/ScreenGlass/types.d.ts +10 -0
  55. package/dist/components/ScreenGradient/defaults.d.ts +5 -0
  56. package/dist/components/ScreenGradient/index.d.ts +5 -0
  57. package/dist/components/ScreenGradient/shaders.d.ts +2 -0
  58. package/dist/components/ScreenGradient/types.d.ts +19 -0
  59. package/dist/components/ScreenImage/ScreenImage.d.ts +4 -0
  60. package/dist/components/ScreenImage/components/DynamicTextureSync.d.ts +9 -0
  61. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +9 -0
  62. package/dist/components/ScreenImage/components/ScreenImageFrame.d.ts +9 -0
  63. package/dist/components/ScreenImage/components/ScreenImageTransformFrame.d.ts +9 -0
  64. package/dist/components/ScreenImage/fit.d.ts +52 -0
  65. package/dist/components/ScreenImage/index.d.ts +8 -87
  66. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +9 -0
  67. package/dist/components/ScreenImage/materials/ScreenImageMatcap.d.ts +3 -0
  68. package/dist/components/ScreenImage/source.d.ts +16 -0
  69. package/dist/components/ScreenImage/types.d.ts +37 -0
  70. package/dist/components/ScreenImage/utils/ScreenImageConstants.d.ts +9 -0
  71. package/dist/components/ScreenImage/utils/ScreenImageHelpers.d.ts +4 -0
  72. package/dist/components/ScreenShape/geometry.d.ts +5 -0
  73. package/dist/components/ScreenShape/index.d.ts +5 -0
  74. package/dist/components/ScreenShape/types.d.ts +41 -0
  75. package/dist/components/ScreenSpaceUI/ScreenTransformGuide.d.ts +15 -0
  76. package/dist/components/ScreenSpaceUI/ScreenTransformOverlayGuide.d.ts +9 -0
  77. package/dist/components/ScreenSpaceUI/index.d.ts +2 -0
  78. package/dist/components/ScreenText/components/ScreenTextBody.d.ts +2 -0
  79. package/dist/components/ScreenText/components/ScreenTextTransformFrame.d.ts +9 -0
  80. package/dist/components/ScreenText/constants.d.ts +5 -0
  81. package/dist/components/ScreenText/index.d.ts +6 -20
  82. package/dist/components/ScreenText/types.d.ts +31 -0
  83. package/dist/components/ScreenText/utils/ScreenTextHelpers.d.ts +14 -0
  84. package/dist/components/ScreenText/utils/ScreenTextMappings.d.ts +17 -0
  85. package/dist/components/SequentialRenderPasses/index.d.ts +6 -0
  86. package/dist/components/TextLabel/TextLabel.d.ts +5 -0
  87. package/dist/components/TextLabel/alignment.d.ts +4 -0
  88. package/dist/components/TextLabel/bend.d.ts +9 -0
  89. package/dist/components/TextLabel/canvas/buildTextLabelTexture.d.ts +4 -0
  90. package/dist/components/TextLabel/canvas/canvasTypography.d.ts +13 -0
  91. package/dist/components/TextLabel/canvas/drawBackground.d.ts +21 -0
  92. package/dist/components/TextLabel/canvas/drawEffects.d.ts +34 -0
  93. package/dist/components/TextLabel/canvas/drawText.d.ts +19 -0
  94. package/dist/components/TextLabel/components/TextLabelMesh.d.ts +13 -0
  95. package/dist/components/TextLabel/constants.d.ts +2 -0
  96. package/dist/components/TextLabel/hooks/useTextLabelTexture.d.ts +7 -0
  97. package/dist/components/TextLabel/index.d.ts +2 -161
  98. package/dist/components/TextLabel/layout/measurement.d.ts +8 -0
  99. package/dist/components/TextLabel/layout/resolveTextLayout.d.ts +25 -0
  100. package/dist/components/TextLabel/layout/wrapText.d.ts +6 -0
  101. package/dist/components/TextLabel/types.d.ts +227 -0
  102. package/dist/components/TrackingAnchor/index.d.ts +18 -2
  103. package/dist/components/Transform3D/index.d.ts +30 -0
  104. package/dist/components/XRMediaSurface/index.d.ts +6 -6
  105. package/dist/components/XRViewport/XRViewport.d.ts +11 -0
  106. package/dist/components/XRViewport/components/HiddenMedia.d.ts +7 -0
  107. package/dist/components/XRViewport/components/MediaAssetPicker.d.ts +8 -0
  108. package/dist/components/XRViewport/components/MediaControlStack.d.ts +13 -0
  109. package/dist/components/XRViewport/components/XRViewportLayers.d.ts +30 -0
  110. package/dist/components/XRViewport/constants.d.ts +24 -0
  111. package/dist/components/XRViewport/contexts.d.ts +6 -0
  112. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +13 -0
  113. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +16 -0
  114. package/dist/components/XRViewport/hooks/useViewportMediaTexture.d.ts +10 -0
  115. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +41 -0
  116. package/dist/components/XRViewport/hooks/useViewportRenderState.d.ts +47 -0
  117. package/dist/components/XRViewport/index.d.ts +3 -118
  118. package/dist/components/XRViewport/layout.d.ts +16 -0
  119. package/dist/components/XRViewport/slots.d.ts +16 -0
  120. package/dist/components/XRViewport/types.d.ts +89 -0
  121. package/dist/components/XRViewport/useViewportSize.d.ts +3 -0
  122. package/dist/components/index.d.ts +12 -0
  123. package/dist/contexts-BKvTIayr.cjs +1 -0
  124. package/dist/contexts-Bk5zz_VR.js +214 -0
  125. package/dist/debug-ui/component-editor/index.d.ts +19 -0
  126. package/dist/debug-ui/face-mesh-renderer-settings/index.d.ts +8 -0
  127. package/dist/debug-ui/face-retouch/index.d.ts +11 -0
  128. package/dist/debug-ui/hand-joints-2d/index.d.ts +1 -1
  129. package/dist/debug-ui/hand-tracking-2d/index.d.ts +1 -1
  130. package/dist/debug-ui/hand-tracking-2d-controller/index.d.ts +1 -1
  131. package/dist/debug-ui/hand-tracking-3d/index.d.ts +1 -1
  132. package/dist/debug-ui/hierarchy-panel/index.d.ts +29 -0
  133. package/dist/debug-ui/index.d.ts +25 -2
  134. package/dist/debug-ui/layer-panel/index.d.ts +3 -2
  135. package/dist/debug-ui/media-source/index.d.ts +2 -0
  136. package/dist/debug-ui/media-source/session.d.ts +12 -0
  137. package/dist/debug-ui/media-source.cjs +1 -1
  138. package/dist/debug-ui/media-source.js +6 -4
  139. package/dist/debug-ui/mesh-renderer-settings/index.d.ts +6 -0
  140. package/dist/debug-ui/object-inspector-panel/index.d.ts +25 -0
  141. package/dist/debug-ui/pin-to-mesh-settings/index.d.ts +10 -0
  142. package/dist/debug-ui/scene-editor/context.d.ts +38 -0
  143. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +9 -0
  144. package/dist/debug-ui/scene-editor/index.d.ts +11 -0
  145. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +7 -0
  146. package/dist/debug-ui/scene-editor/store-utils.d.ts +2 -0
  147. package/dist/debug-ui/scene-editor/viewport-toolbar.d.ts +4 -0
  148. package/dist/debug-ui/scene-editor/viewport.d.ts +21 -0
  149. package/dist/debug-ui/screen-glass-settings/index.d.ts +6 -0
  150. package/dist/debug-ui/screen-gradient-settings/GradientStopsEditor.d.ts +5 -0
  151. package/dist/debug-ui/screen-gradient-settings/index.d.ts +6 -0
  152. package/dist/debug-ui/screen-gradient-settings/styles.d.ts +3 -0
  153. package/dist/debug-ui/screen-image-settings/index.d.ts +4 -2
  154. package/dist/debug-ui/screen-shape-settings/index.d.ts +6 -0
  155. package/dist/debug-ui/screen-text-settings/NumberField.d.ts +9 -0
  156. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +3 -0
  157. package/dist/debug-ui/screen-text-settings/controls/NestedSection.d.ts +7 -0
  158. package/dist/debug-ui/screen-text-settings/controls/Section.d.ts +8 -0
  159. package/dist/debug-ui/screen-text-settings/controls/icons.d.ts +4 -0
  160. package/dist/debug-ui/screen-text-settings/index.d.ts +2 -122
  161. package/dist/debug-ui/screen-text-settings/sections/BackgroundSection.d.ts +8 -0
  162. package/dist/debug-ui/screen-text-settings/sections/ContentSection.d.ts +5 -0
  163. package/dist/debug-ui/screen-text-settings/sections/EffectsSection.d.ts +25 -0
  164. package/dist/debug-ui/screen-text-settings/sections/StyleSection.d.ts +5 -0
  165. package/dist/debug-ui/screen-text-settings/sections/TransformSection.d.ts +5 -0
  166. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundFillControls.d.ts +2 -0
  167. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundSizeControls.d.ts +2 -0
  168. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundStrokeControls.d.ts +2 -0
  169. package/dist/debug-ui/screen-text-settings/sections/background/types.d.ts +7 -0
  170. package/dist/debug-ui/screen-text-settings/sections/effects/BendEffectSection.d.ts +4 -0
  171. package/dist/debug-ui/screen-text-settings/sections/effects/EffectChrome.d.ts +21 -0
  172. package/dist/debug-ui/screen-text-settings/sections/effects/GlowEffectSection.d.ts +4 -0
  173. package/dist/debug-ui/screen-text-settings/sections/effects/InnerShadowEffectSection.d.ts +4 -0
  174. package/dist/debug-ui/screen-text-settings/sections/effects/OutlineEffectSection.d.ts +4 -0
  175. package/dist/debug-ui/screen-text-settings/sections/effects/ShadowEffectSection.d.ts +4 -0
  176. package/dist/debug-ui/screen-text-settings/sections/effects/types.d.ts +14 -0
  177. package/dist/debug-ui/screen-text-settings/settings.d.ts +90 -0
  178. package/dist/debug-ui/screen-text-settings/styles.d.ts +26 -0
  179. package/dist/debug-ui/screen-text-settings/transform.d.ts +6 -0
  180. package/dist/debug-ui/screen-text-settings/types.d.ts +9 -0
  181. package/dist/debug-ui/shared/ScreenTransformSection.d.ts +6 -3
  182. package/dist/debug-ui/transform-3d-settings/index.d.ts +11 -0
  183. package/dist/debug-ui.cjs +3 -13
  184. package/dist/debug-ui.js +7896 -5098
  185. package/dist/drawNormalizedCrop-B-7zU-Xw.cjs +1 -0
  186. package/dist/drawNormalizedCrop-CRdIDyl1.js +44 -0
  187. package/dist/entries/all.d.ts +1 -0
  188. package/dist/entries/core.d.ts +53 -6
  189. package/dist/entries/face-effects.d.ts +10 -8
  190. package/dist/entries/internal.d.ts +1 -1
  191. package/dist/entries/low-level.d.ts +18 -4
  192. package/dist/entries/scene-object.d.ts +10 -0
  193. package/dist/entries/tracking.d.ts +25 -2
  194. package/dist/face-action/index.d.ts +34 -0
  195. package/dist/face-attribute-expression/index.d.ts +10 -0
  196. package/dist/face-effects.cjs +1 -342
  197. package/dist/face-effects.js +1391 -2767
  198. package/dist/face-info/blendshapes.d.ts +3 -0
  199. package/dist/face-info/derive.d.ts +8 -0
  200. package/dist/face-info/drawFaceCrop.d.ts +10 -0
  201. package/dist/face-info/getFaceInfo.d.ts +8 -0
  202. package/dist/face-info/index.d.ts +8 -0
  203. package/dist/face-info/landmarks.d.ts +21 -0
  204. package/dist/face-info/types.d.ts +52 -0
  205. package/dist/getFaceInfo-CyPAKh3h.cjs +1 -0
  206. package/dist/getFaceInfo-hUKMLFcr.js +118 -0
  207. package/dist/{handJoints2d.d.ts → hand/handJoints2d.d.ts} +1 -1
  208. package/dist/{handTracking2d.d.ts → hand/handTracking2d.d.ts} +1 -1
  209. package/dist/{handTracking2dController.d.ts → hand/handTracking2dController.d.ts} +1 -1
  210. package/dist/{handTracking3d.d.ts → hand/handTracking3d.d.ts} +1 -1
  211. package/dist/hooks/faceResults.d.ts +1 -1
  212. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  213. package/dist/hooks/useFaceAction.d.ts +3 -0
  214. package/dist/hooks/useFaceAttributeExpression.d.ts +16 -0
  215. package/dist/hooks/useFaceDetection.d.ts +18 -0
  216. package/dist/hooks/useFaceInfo.d.ts +7 -0
  217. package/dist/hooks/useFaceInfos.d.ts +15 -0
  218. package/dist/hooks/useFaceResultReader.d.ts +10 -0
  219. package/dist/hooks/useFrameCapture.d.ts +18 -0
  220. package/dist/hooks/useMediaRecorder.d.ts +14 -2
  221. package/dist/hooks/useOwnedTexture.d.ts +6 -0
  222. package/dist/hooks/useTrackerContext.d.ts +2 -2
  223. package/dist/hooks/useXRSession/facade.d.ts +3 -0
  224. package/dist/hooks/useXRSession/registry.d.ts +9 -0
  225. package/dist/index-82aENaRq.cjs +1 -0
  226. package/dist/{index-BGNbrc4C.js → index-BgQAX8rs.js} +213 -125
  227. package/dist/index-CEc1CAmB.cjs +1 -0
  228. package/dist/index-CTHeBQOs.js +178 -0
  229. package/dist/index-D4bLzBr6.cjs +1 -0
  230. package/dist/index-DSpzjuqd.cjs +1 -0
  231. package/dist/index-Di70KWuY.js +2049 -0
  232. package/dist/index-DzEzkBIH.cjs +17 -0
  233. package/dist/{index-safCs_af.js → index-JygePOwo.js} +565 -508
  234. package/dist/index-UC0Ux38E.js +111 -0
  235. package/dist/{internal-Cae1ps15.js → internal-DuMPpcbp.js} +86 -80
  236. package/dist/internal-i2JkM85N.cjs +1 -0
  237. package/dist/internal.cjs +1 -1
  238. package/dist/internal.js +2 -2
  239. package/dist/low-level.cjs +1 -1
  240. package/dist/low-level.js +1229 -86
  241. package/dist/main.cjs +1 -73
  242. package/dist/main.js +545 -1693
  243. package/dist/material/MaterialFill.d.ts +20 -0
  244. package/dist/material/MeshMaterial.d.ts +14 -0
  245. package/dist/material/index.d.ts +2 -0
  246. package/dist/models/Body/index.d.ts +1 -1
  247. package/dist/models/Face/index.d.ts +1 -0
  248. package/dist/models/Face/rotation.d.ts +3 -0
  249. package/dist/render/renderGroups.d.ts +47 -0
  250. package/dist/render/renderPasses.d.ts +18 -0
  251. package/dist/renderGroups-C9QJrAXu.js +152 -0
  252. package/dist/renderGroups-Dvm1J4lW.cjs +1 -0
  253. package/dist/renderLayers-lDtL0_43.cjs +1 -0
  254. package/dist/renderLayers-zrK2pv5O.js +13 -0
  255. package/dist/renderPasses-CT5iBwtg.cjs +21 -0
  256. package/dist/renderPasses-CjgG_6kQ.js +1500 -0
  257. package/dist/scene-object/index.d.ts +146 -0
  258. package/dist/scene-object/runtimeRegistry.d.ts +14 -0
  259. package/dist/scene-object.cjs +1 -0
  260. package/dist/scene-object.js +40 -0
  261. package/dist/{screenImageSettings.d.ts → screen-image/screenImageSettings.d.ts} +9 -2
  262. package/dist/{screenTextSettings.d.ts → screen-text/screenTextSettings.d.ts} +18 -2
  263. package/dist/screen2d/coordinates.d.ts +87 -0
  264. package/dist/screen2d/index.d.ts +3 -0
  265. package/dist/screen2d/screenTransform.d.ts +47 -0
  266. package/dist/screen2d/smoothing.d.ts +5 -0
  267. package/dist/{selectors-BLl2JUWW.cjs → selectors-2QvO5RYY.cjs} +1 -1
  268. package/dist/{selectors-CXd_x-6t.js → selectors-Dw3C-gSk.js} +3 -3
  269. package/dist/services/MetricsCollector/index.d.ts +7 -1
  270. package/dist/services/MetricsCollector/utils.d.ts +1 -1
  271. package/dist/session-BChR4TgK.cjs +31 -0
  272. package/dist/session-C1StwN0f.js +363 -0
  273. package/dist/texture/animatedTexture.d.ts +61 -0
  274. package/dist/texture/animationMath.d.ts +8 -0
  275. package/dist/texture/sourceResolver.d.ts +30 -0
  276. package/dist/tracking.cjs +1 -1
  277. package/dist/tracking.js +580 -321
  278. package/dist/types/face.d.ts +1 -13
  279. package/dist/types/index.d.ts +0 -1
  280. package/dist/types/nodes.d.ts +2 -1
  281. package/dist/types/session.d.ts +2 -0
  282. package/dist/types/tracking.d.ts +8 -2
  283. package/dist/types/util-types.d.ts +1 -1
  284. package/dist/useFaceInfo-C-WfMlYp.cjs +1 -0
  285. package/dist/useFaceInfo-CwsHZedC.js +62 -0
  286. package/dist/useFaceResults-CkFc1egZ.js +19 -0
  287. package/dist/useFaceResults-VcFdOUFV.cjs +1 -0
  288. package/dist/utils/drawNormalizedCrop.d.ts +22 -0
  289. package/dist/utils/integrity.d.ts +4 -25
  290. package/dist/utils/landmarkBounds.d.ts +1 -1
  291. package/dist/utils/logger.d.ts +2 -2
  292. package/docs/MIGRATION_GUIDE.md +589 -0
  293. package/docs/SDK_DOCUMENTATION.md +1155 -0
  294. package/docs/api/audio.mdx +36 -0
  295. package/docs/api/behavior-components.mdx +164 -0
  296. package/docs/api/capture-recording.mdx +103 -0
  297. package/docs/api/debug-ui-scene-editor.mdx +249 -0
  298. package/docs/api/face-actions.mdx +104 -0
  299. package/docs/api/face-attribute-expression.mdx +87 -0
  300. package/docs/api/face-binding-anchors.mdx +53 -0
  301. package/docs/api/face-effects.mdx +19 -0
  302. package/docs/api/face-info.mdx +112 -0
  303. package/docs/api/face-mesh.mdx +98 -0
  304. package/docs/api/face-painting.mdx +33 -0
  305. package/docs/api/face-retouching.mdx +73 -0
  306. package/docs/api/material-render-state.mdx +132 -0
  307. package/docs/api/runtime-3d.mdx +311 -0
  308. package/docs/api/scene-object-store.mdx +213 -0
  309. package/docs/api/screen-image.mdx +41 -0
  310. package/docs/api/screen-shape.mdx +64 -0
  311. package/docs/api/screen-space-coordinates.mdx +41 -0
  312. package/docs/api/screen-text.mdx +39 -0
  313. package/docs/api/texture-sources.mdx +55 -0
  314. package/docs/api/trackers.mdx +46 -0
  315. package/docs/docs.json +70 -0
  316. package/docs/examples/scene-object-recipes.mdx +194 -0
  317. package/docs/guides/harness-debug-ui.mdx +139 -0
  318. package/docs/inspector/hierarchy-panel.mdx +51 -0
  319. package/docs/inspector/object-inspector-panel.mdx +51 -0
  320. package/docs/introduction.mdx +121 -0
  321. package/docs/scene-objects/overview.mdx +127 -0
  322. package/docs/scene-objects/render-groups.mdx +77 -0
  323. package/docs/scene-objects/runtime-rendering.mdx +75 -0
  324. package/docs/texture-api-consumer.md +58 -0
  325. package/package.json +37 -7
  326. package/dist/MediaSourceSwitcher-C-xYg0nQ.js +0 -317
  327. package/dist/MediaSourceSwitcher-Cq3g4IKw.cjs +0 -31
  328. package/dist/components/FaceRetouch/defaults.d.ts +0 -13
  329. package/dist/components/FaceRetouch/retouchRegions.d.ts +0 -23
  330. package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +0 -12
  331. package/dist/defaults-BLpcN3pG.cjs +0 -1
  332. package/dist/defaults-LtY4M7dg.js +0 -55
  333. package/dist/index-BXyObVHF.cjs +0 -1
  334. package/dist/index-CY3bUAcW.js +0 -12
  335. package/dist/index-C_Duh13c.cjs +0 -1
  336. package/dist/index-D8fpPQkC.cjs +0 -1
  337. package/dist/index-DxshgBu0.cjs +0 -1
  338. package/dist/index-O-2crZ3M.js +0 -1102
  339. package/dist/internal-BjyhBP8i.cjs +0 -1
  340. package/dist/modules/XRClient/index.d.ts +0 -9
  341. package/dist/modules/index.d.ts +0 -1
  342. package/dist/screenImageSettings-6NRg4cx9.js +0 -39
  343. package/dist/screenImageSettings-y_B4_767.cjs +0 -1
  344. package/dist/services/ApiService.d.ts +0 -12
  345. package/dist/types/client.d.ts +0 -3
  346. package/dist/useFaceResults-cpsSmKKc.js +0 -81
  347. package/dist/useFaceResults-hVUJYSEY.cjs +0 -1
  348. package/dist/useXRModel-3DcUa28n.cjs +0 -1
  349. package/dist/useXRModel-BMJE1hrk.js +0 -28
  350. /package/dist/{layerStack.d.ts → render/layerStack.d.ts} +0 -0
  351. /package/dist/{screenImagePresets.d.ts → screen-image/screenImagePresets.d.ts} +0 -0
  352. /package/dist/{screenTextPresets.d.ts → screen-text/screenTextPresets.d.ts} +0 -0
package/dist/main.js CHANGED
@@ -1,1768 +1,483 @@
1
- var nt = Object.defineProperty;
2
- var rt = (t, e, n) => e in t ? nt(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
- var U = (t, e, n) => rt(t, typeof e != "symbol" ? e + "" : e, n);
4
- import { a as Vn, D as Zn } from "./screenImageSettings-6NRg4cx9.js";
5
- import { useState as _, useEffect as $, useMemo as x, useRef as X, Suspense as st, useCallback as te } from "react";
6
- import { X as it, R as at } from "./index-safCs_af.js";
7
- import { d as qn, c as _n } from "./index-safCs_af.js";
8
- import { h as ot, u as lt, c as At, S as ct, f as dt, i as De, j as Ne } from "./index-O-2crZ3M.js";
9
- import { k as er } from "./index-O-2crZ3M.js";
10
- import { jsx as v, jsxs as W, Fragment as Te } from "react/jsx-runtime";
11
- import { useThree as Ye, useFrame as ut } from "@react-three/fiber";
12
- import * as T from "three";
13
- import { RepeatWrapping as Re, LinearFilter as Oe } from "three";
14
- import { b as ht, d as ft } from "./selectors-CXd_x-6t.js";
15
- import { useTexture as Ve } from "@react-three/drei";
16
- const Qe = 9, we = 16, Qn = ({ children: t }) => {
17
- const [e, n] = _({ width: 0, height: 0 });
18
- return $(() => {
19
- const r = () => {
20
- const i = document.documentElement.clientWidth, a = document.documentElement.clientHeight, o = i / a, A = Qe / we;
21
- let s, l;
22
- o > A ? (l = a, s = l * Qe / we) : (s = i, l = s * we / Qe), n({ width: s, height: l });
23
- };
24
- return r(), window.addEventListener("resize", r), () => window.removeEventListener("resize", r);
25
- }, []), /* @__PURE__ */ v(
26
- "div",
27
- {
28
- style: {
29
- width: "100vw",
30
- height: `${window.innerHeight}px`,
31
- display: "flex",
32
- alignItems: "center",
33
- justifyContent: "center",
34
- backgroundColor: "#0d0d0d"
35
- },
36
- children: /* @__PURE__ */ v("div", { style: { width: e.width, height: e.height, position: "relative" }, children: t })
37
- }
38
- );
39
- }, wn = ({ children: t, depth: e = 0 }) => {
40
- const { camera: n, size: r } = Ye(), i = x(() => {
41
- if (!n.isPerspectiveCamera)
42
- return { width: 10, height: 10 };
43
- const a = n, o = Math.abs(a.position.z - e), A = a.fov * Math.PI / 180, s = 2 * Math.tan(A / 2) * o;
44
- return { width: s * (r.width / r.height), height: s };
45
- }, [n, r, e]);
46
- return /* @__PURE__ */ v(ot.Provider, { value: i, children: /* @__PURE__ */ v("group", { position: [0, 0, e], children: t }) });
47
- };
48
- function Xe(t, e) {
49
- return !Number.isFinite(t) || !Number.isFinite(e) || t <= 0 || e <= 0 ? [1, 1, 1] : Math.abs(t - e) < 1e-6 ? [1, 1, 1] : t > e ? [e / t, 1, 1] : [1, t / e, 1];
50
- }
51
- const ne = {
52
- width: 720,
53
- height: 1280
54
- }, gt = (t = [0.5, 0.5]) => [
55
- t[0] * 2 - 1,
56
- t[1] * 2 - 1
57
- ], ke = ({
58
- position: t = [0, 0],
59
- size: e = [1, 1]
60
- }) => {
61
- const n = e[0] / 2, r = e[1] / 2;
62
- return {
63
- left: t[0] - n,
64
- right: t[0] + n,
65
- top: t[1] + r,
66
- bottom: t[1] - r
67
- };
68
- }, pt = ({
69
- position: t = [0, 0],
70
- size: e = [ne.width, ne.width],
71
- canvasSize: n = ne
72
- }) => {
73
- const r = n.width / 2 || ne.width / 2, i = n.height / 2 || ne.height / 2;
74
- return ke({
75
- position: [t[0] / r, t[1] / i],
76
- size: [e[0] / r, e[1] / i]
77
- });
78
- }, Ze = ({
79
- coordinateSpace: t = "normalized",
80
- canvasSize: e = ne,
81
- position: n,
82
- size: r,
83
- fallbackAnchors: i
84
- }) => i || (!n && !r ? ke({}) : t === "canvas" ? pt({ position: n, size: r, canvasSize: e }) : ke({ position: n, size: r })), vt = "data:image/png;base64,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", je = {
85
- left: -0.35,
86
- right: 0.35,
87
- top: 0.35,
88
- bottom: -0.35
89
- }, mt = {}, Et = {
90
- left: 0,
91
- right: 0,
92
- top: 0,
93
- bottom: 0
94
- }, Ct = [0.5, 0.5], It = 999, Le = Math.PI / 180, bt = () => {
95
- const t = document.createElement("canvas");
96
- t.width = 256, t.height = 256;
97
- const e = t.getContext("2d");
98
- if (!e)
99
- return new T.CanvasTexture(t);
100
- const n = e.createRadialGradient(96, 80, 10, 128, 128, 128);
101
- n.addColorStop(0, "#ffffff"), n.addColorStop(0.18, "#f8fafc"), n.addColorStop(0.44, "#cbd5e1"), n.addColorStop(0.72, "#475569"), n.addColorStop(1, "#0f172a"), e.fillStyle = n, e.fillRect(0, 0, t.width, t.height);
102
- const r = new T.CanvasTexture(t);
103
- return r.needsUpdate = !0, r;
104
- }, St = /* @__PURE__ */ new Set([
105
- "overlay",
106
- "softLight",
107
- "hardLight",
108
- "difference",
109
- "exclusion"
110
- ]), Mt = (t) => {
111
- switch (t) {
112
- case "add":
113
- return { blending: T.AdditiveBlending };
114
- case "subtract":
115
- return { blending: T.SubtractiveBlending };
116
- case "multiply":
117
- return { blending: T.MultiplyBlending };
118
- case "screen":
119
- return {
120
- blending: T.CustomBlending,
121
- blendSrc: T.OneFactor,
122
- blendDst: T.OneMinusSrcColorFactor,
123
- blendEquation: T.AddEquation
124
- };
125
- case "lighten":
126
- return {
127
- blending: T.CustomBlending,
128
- blendSrc: T.OneFactor,
129
- blendDst: T.OneFactor,
130
- blendEquation: T.MaxEquation
131
- };
132
- case "darken":
133
- return {
134
- blending: T.CustomBlending,
135
- blendSrc: T.OneFactor,
136
- blendDst: T.OneFactor,
137
- blendEquation: T.MinEquation
138
- };
139
- case "normal":
140
- default:
141
- return { blending: T.NormalBlending };
142
- }
143
- }, Bt = {
144
- overlay: 0,
145
- softLight: 1,
146
- hardLight: 2,
147
- difference: 3,
148
- exclusion: 4
149
- }, yt = `
150
- varying vec2 vUv;
151
-
152
- void main() {
153
- vUv = uv;
154
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
155
- }
156
- `, Qt = `
157
- uniform sampler2D imageMap;
158
- uniform sampler2D backdropMap;
159
- uniform vec2 resolution;
160
- uniform vec3 tint;
161
- uniform float opacity;
162
- uniform float alphaTest;
163
- uniform int blendMode;
164
- varying vec2 vUv;
165
-
166
- float overlayChannel(float base, float blend) {
167
- return base < 0.5 ? 2.0 * base * blend : 1.0 - 2.0 * (1.0 - base) * (1.0 - blend);
168
- }
169
-
170
- float hardLightChannel(float base, float blend) {
171
- return blend < 0.5 ? 2.0 * base * blend : 1.0 - 2.0 * (1.0 - base) * (1.0 - blend);
172
- }
173
-
174
- float softLightChannel(float base, float blend) {
175
- return blend < 0.5
176
- ? base - (1.0 - 2.0 * blend) * base * (1.0 - base)
177
- : base + (2.0 * blend - 1.0) * (sqrt(max(base, 0.0)) - base);
178
- }
179
-
180
- vec3 applyAdvancedBlend(vec3 base, vec3 blend) {
181
- if (blendMode == 0) {
182
- return vec3(
183
- overlayChannel(base.r, blend.r),
184
- overlayChannel(base.g, blend.g),
185
- overlayChannel(base.b, blend.b)
186
- );
187
- }
188
- if (blendMode == 1) {
189
- return vec3(
190
- softLightChannel(base.r, blend.r),
191
- softLightChannel(base.g, blend.g),
192
- softLightChannel(base.b, blend.b)
193
- );
194
- }
195
- if (blendMode == 2) {
196
- return vec3(
197
- hardLightChannel(base.r, blend.r),
198
- hardLightChannel(base.g, blend.g),
199
- hardLightChannel(base.b, blend.b)
200
- );
201
- }
202
- if (blendMode == 3) {
203
- return abs(base - blend);
204
- }
205
- return base + blend - 2.0 * base * blend;
206
- }
207
-
208
- void main() {
209
- vec4 image = texture2D(imageMap, vUv) * vec4(tint, opacity);
210
- if (image.a <= alphaTest) {
211
- discard;
212
- }
213
-
214
- vec2 backdropUv = gl_FragCoord.xy / max(resolution, vec2(1.0));
215
- vec3 backdrop = texture2D(backdropMap, backdropUv).rgb;
216
- vec3 blended = applyAdvancedBlend(backdrop, image.rgb);
217
- vec3 composited = mix(backdrop, blended, image.a);
218
- gl_FragColor = vec4(composited, 1.0);
219
- }
220
- `, wt = (t, e) => t || (e ? { kind: "image", src: e } : { kind: "default" }), Tt = (t) => {
221
- const e = t.image, n = (e == null ? void 0 : e.videoWidth) ?? (e == null ? void 0 : e.width) ?? 1, r = (e == null ? void 0 : e.videoHeight) ?? (e == null ? void 0 : e.height) ?? 1;
222
- return n > 0 && r > 0 ? n / r : 1;
223
- }, Pe = (t, e) => {
224
- const [n, r] = Xe(t, e);
225
- return n === 1 && r === 1 ? [1, 1, 1] : n < 1 ? [1, 1 / n, 1] : [1 / r, 1, 1];
226
- }, kt = (t, e) => t <= 0 || e <= 0 ? [1, 1, 1] : [1, t / e, 1], Lt = (t, e) => t <= 0 || e <= 0 ? [1, 1, 1] : [e / t, 1, 1], Ft = (t) => [
227
- t[0] * 2 - 1,
228
- t[1] * 2 - 1
229
- ], Wt = (t, e) => t || (e === "cover" ? "fill" : e === "stretch" ? "stretch" : "fit"), xt = (t, e, n, r, i) => t || (!r && !i ? je : Ze({
230
- coordinateSpace: e,
231
- canvasSize: n ?? ne,
232
- position: r,
233
- size: i
234
- })), Dt = (t, e, n, r, i) => {
235
- let a = [1, 1, 1], o = [1, 1, 1], A = [1, 1], s = [0, 0];
236
- switch (t) {
237
- case "fit":
238
- a = Xe(e, n), o = a;
239
- break;
240
- case "fitWidth":
241
- a = kt(e, n), o = a;
242
- break;
243
- case "fitHeight":
244
- a = Lt(e, n), o = a;
245
- break;
246
- case "stretch":
247
- break;
248
- case "fill":
249
- a = Pe(e, n), o = a;
250
- break;
251
- case "fillAndCut": {
252
- if (o = Pe(e, n), n > e) {
253
- const c = e / n;
254
- A = [c, 1], s = [(1 - c) / 2, 0];
255
- } else if (n < e) {
256
- const c = n / e;
257
- A = [1, c], s = [0, (1 - c) / 2];
258
- }
259
- break;
260
- }
261
- }
262
- return {
263
- meshScale: [a[0] * (r ? -1 : 1), a[1] * (i ? -1 : 1), 1],
264
- guideScale: o,
265
- repeat: A,
266
- offset: s
267
- };
268
- };
269
- function Yt({
270
- name: t,
271
- source: e,
272
- src: n,
273
- fit: r,
274
- stretchMode: i,
275
- materialType: a = "unlit",
276
- blendMode: o = "normal",
277
- backdropTexture: A = null,
278
- rotation: s = 0,
279
- opacity: l = 1,
280
- color: c = "#ffffff",
281
- flipX: h = !1,
282
- flipY: u = !1,
283
- renderOrder: f = It,
284
- transparent: p = !0,
285
- alphaTest: d = 0,
286
- overlay: g = !0,
287
- visible: C,
288
- showFitGuides: m = !1
289
- }) {
290
- const { size: I } = Ye(), y = dt(), S = wt(e, n), M = S.kind === "image" ? S.src : vt, H = Ve(M), G = S.kind === "texture" ? S.texture : H, B = De(), w = Wt(i, r), b = Tt(G), Y = x(() => bt(), []), k = x(
291
- () => Dt(w, B, b, h, u),
292
- [w, B, b, h, u]
293
- ), L = x(() => {
294
- const K = G.clone();
295
- return K.needsUpdate = !0, K.repeat.set(k.repeat[0], k.repeat[1]), K.offset.set(k.offset[0], k.offset[1]), K;
296
- }, [G, k.repeat, k.offset]), D = x(() => Mt(o), [o]), R = St.has(o) ? o : null, Z = A ?? (y == null ? void 0 : y.finalColorTexture) ?? (y == null ? void 0 : y.sceneColorTexture) ?? null, re = R !== null && Z !== null, se = x(
297
- () => ({
298
- imageMap: { value: L },
299
- backdropMap: { value: Z },
300
- resolution: { value: new T.Vector2(I.width, I.height) },
301
- tint: { value: new T.Color(c) },
302
- opacity: { value: l },
303
- alphaTest: { value: d },
304
- blendMode: {
305
- value: R === null ? 0 : Bt[R]
306
- }
307
- }),
308
- [
309
- R,
310
- d,
311
- Z,
312
- I.height,
313
- I.width,
314
- c,
315
- L,
316
- l
317
- ]
318
- );
319
- return /* @__PURE__ */ W("group", { visible: C, children: [
320
- /* @__PURE__ */ W(
321
- "mesh",
322
- {
323
- name: t,
324
- scale: k.meshScale,
325
- rotation: [0, 0, s * Le],
326
- renderOrder: f,
327
- children: [
328
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
329
- re ? /* @__PURE__ */ v(
330
- "shaderMaterial",
331
- {
332
- uniforms: se,
333
- vertexShader: yt,
334
- fragmentShader: Qt,
335
- transparent: !1,
336
- depthTest: !g,
337
- depthWrite: !g,
338
- toneMapped: !1
339
- }
340
- ) : a === "standardPBR" ? /* @__PURE__ */ v(
341
- "meshStandardMaterial",
342
- {
343
- map: L,
344
- transparent: p || l < 1,
345
- opacity: l,
346
- color: c,
347
- alphaTest: d,
348
- depthTest: !g,
349
- depthWrite: !g,
350
- toneMapped: !1,
351
- roughness: 0.72,
352
- metalness: 0.08,
353
- emissive: c,
354
- emissiveIntensity: 0.18,
355
- ...D
356
- }
357
- ) : a === "matcap" ? /* @__PURE__ */ v(
358
- "meshMatcapMaterial",
359
- {
360
- map: L,
361
- matcap: Y,
362
- transparent: p || l < 1,
363
- opacity: l,
364
- color: c,
365
- alphaTest: d,
366
- depthTest: !g,
367
- depthWrite: !g,
368
- toneMapped: !1,
369
- ...D
370
- }
371
- ) : /* @__PURE__ */ v(
372
- "meshBasicMaterial",
373
- {
374
- map: L,
375
- transparent: p || l < 1,
376
- opacity: l,
377
- color: c,
378
- alphaTest: d,
379
- depthTest: !g,
380
- depthWrite: !g,
381
- toneMapped: !1,
382
- ...D
383
- }
384
- )
385
- ]
386
- }
387
- ),
388
- m ? /* @__PURE__ */ W("group", { renderOrder: f + 1, children: [
389
- /* @__PURE__ */ W("mesh", { position: [0, 0, 2e-3], children: [
390
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
391
- /* @__PURE__ */ v(
392
- "meshBasicMaterial",
393
- {
394
- color: "#22d3ee",
395
- wireframe: !0,
396
- transparent: !0,
397
- opacity: 0.9,
398
- depthTest: !1,
399
- depthWrite: !1,
400
- toneMapped: !1
401
- }
402
- )
403
- ] }),
404
- /* @__PURE__ */ W(
405
- "mesh",
406
- {
407
- position: [0, 0, 4e-3],
408
- scale: k.guideScale,
409
- rotation: [0, 0, s * Le],
410
- children: [
411
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
412
- /* @__PURE__ */ v(
413
- "meshBasicMaterial",
414
- {
415
- color: "#f59e0b",
416
- wireframe: !0,
417
- transparent: !0,
418
- opacity: 0.9,
419
- depthTest: !1,
420
- depthWrite: !1,
421
- toneMapped: !1
422
- }
423
- )
424
- ]
425
- }
426
- )
427
- ] }) : null
428
- ] });
429
- }
430
- function Xt({
431
- anchors: t,
432
- offsets: e,
433
- pivot: n,
434
- rotation: r,
435
- children: i
436
- }) {
437
- const { width: a, height: o } = lt(), A = x(() => ({ ...je, ...t }), [t]), s = x(() => ({ ...Et, ...e }), [e]), l = x(
438
- () => At(a, o, A, s, n),
439
- [o, a, A, s, n]
440
- ), c = l.width > 0 && l.height > 0 ? l.width / l.height : null;
441
- return /* @__PURE__ */ v(
442
- "group",
443
- {
444
- position: [l.centerX - l.pivotX, l.centerY - l.pivotY, 0],
445
- rotation: [0, 0, r * Le],
446
- scale: [l.width, l.height, 1],
447
- children: /* @__PURE__ */ v(ct.Provider, { value: c, children: i })
448
- }
449
- );
450
- }
451
- function Tn({
452
- anchors: t,
453
- coordinateSpace: e,
454
- canvasSize: n,
455
- position: r,
456
- size: i,
457
- offsets: a = mt,
458
- pivot: o = Ct,
459
- rotation: A = 0,
460
- ...s
461
- }) {
462
- const l = x(
463
- () => xt(t, e, n, r, i),
464
- [t, n, e, r, i]
465
- ), c = x(() => Ft(o), [o]);
466
- return /* @__PURE__ */ v(
467
- Xt,
468
- {
469
- anchors: l,
470
- offsets: a,
471
- pivot: c,
472
- rotation: A,
473
- children: /* @__PURE__ */ v(Yt, { ...s, rotation: 0 })
474
- }
475
- );
476
- }
477
- const Gt = {
478
- color: "#ffffff",
479
- strokeWidth: 0,
480
- strokeOpacity: 1,
481
- shadowBlur: 0,
482
- shadowOffsetX: 0,
483
- shadowOffsetY: 0,
484
- shadowOpacity: 1,
485
- fontWeight: "bold",
486
- fontStyle: "normal",
487
- fontFamily: "Arial, sans-serif",
488
- fontSize: 48,
489
- textAlign: "center",
490
- minFontSize: 12,
491
- letterSpacing: 0,
492
- lineSpacing: 0.3,
493
- bgColor: "rgba(20,40,110,0.88)",
494
- bgFillMode: "solid",
495
- bgOpacity: 1,
496
- bgFit: "full",
497
- bgTextureFit: "cover",
498
- bgTextureFlipX: !1,
499
- bgTextureFlipY: !1,
500
- borderWidth: 0,
501
- borderRadius: 24,
502
- padding: 32,
503
- aspect: 2.5,
504
- resolution: 512,
505
- opacity: 1,
506
- underline: !1,
507
- bendPreset: "arc",
508
- bendStrength: 0
509
- };
510
- function Rt(t) {
511
- const e = { ...Gt, ...t }, {
512
- text: n,
513
- lines: r,
514
- color: i,
515
- strokeLayers: a,
516
- strokeColor: o,
517
- strokeWidth: A,
518
- strokeOpacity: s,
519
- shadowLayers: l,
520
- innerShadow: c,
521
- glow: h,
522
- shadowColor: u,
523
- shadowBlur: f,
524
- shadowOffsetX: p,
525
- shadowOffsetY: d,
526
- shadowOpacity: g,
527
- fontWeight: C,
528
- fontStyle: m,
529
- fontFamily: I,
530
- fontSize: y,
531
- textAlign: S,
532
- overflow: M,
533
- resizeToFit: H,
534
- minFontSize: G,
535
- letterSpacing: B,
536
- lineSpacing: w,
537
- bgColor: b,
538
- bgFillMode: Y,
539
- bgOpacity: k,
540
- bgFit: L,
541
- bgAutoSize: D,
542
- bgWidth: R,
543
- bgHeight: Z,
544
- bgGradientStops: re,
545
- bgTextureFit: se,
546
- bgTextureFlipX: K,
547
- bgTextureFlipY: ve,
548
- borderColor: me,
549
- borderWidth: Ee,
550
- borderRadius: j,
551
- padding: q,
552
- aspect: O,
553
- resolution: ie,
554
- opacity: Be,
555
- underline: Ce,
556
- bendPreset: ae,
557
- bendStrength: ce,
558
- name: E,
559
- overlay: de = !0,
560
- position: Ge,
561
- rotation: Ie,
562
- scale: P,
563
- visible: N,
564
- renderOrder: ee
565
- } = e, [oe, be] = _(null), [Se, Me] = _(null), V = X(n);
566
- V.current !== n && (V.current = n, oe !== null && be(null));
567
- const Q = X(b);
568
- Q.current !== b && (Q.current = b, Se !== null && Me(null));
569
- const J = X(null), F = oe ?? n, ue = Se ?? b, he = void 0, fe = x(
570
- () => Ot({
571
- text: F,
572
- lines: r,
573
- color: i,
574
- strokeLayers: a,
575
- strokeColor: o,
576
- strokeWidth: A,
577
- strokeOpacity: s,
578
- shadowLayers: l,
579
- innerShadow: c,
580
- glow: h,
581
- shadowColor: u,
582
- shadowBlur: f,
583
- shadowOffsetX: p,
584
- shadowOffsetY: d,
585
- shadowOpacity: g,
586
- fontWeight: C,
587
- fontStyle: m,
588
- fontFamily: I,
589
- fontSize: y,
590
- textAlign: S,
591
- overflow: M,
592
- resizeToFit: H,
593
- minFontSize: G,
594
- letterSpacing: B,
595
- lineSpacing: w,
596
- bgColor: ue,
597
- bgFillMode: Y,
598
- bgOpacity: k,
599
- bgFit: L,
600
- bgAutoSize: D,
601
- bgWidth: R,
602
- bgHeight: Z,
603
- bgGradientStops: re,
604
- bgTextureImage: he,
605
- bgTextureFit: se,
606
- bgTextureFlipX: K,
607
- bgTextureFlipY: ve,
608
- borderColor: me,
609
- borderWidth: Ee,
610
- borderRadius: j,
611
- padding: q,
612
- height: ie,
613
- width: Math.round(ie * Math.max(O, 0.1)),
614
- underline: Ce,
615
- bendPreset: ae,
616
- bendStrength: ce
617
- }),
618
- [
619
- F,
620
- r,
621
- i,
622
- a,
623
- o,
624
- A,
625
- s,
626
- l,
627
- c,
628
- h,
629
- u,
630
- f,
631
- p,
632
- d,
633
- g,
634
- C,
635
- m,
636
- I,
637
- y,
638
- S,
639
- M,
640
- H,
641
- G,
642
- B,
643
- w,
644
- ue,
645
- Y,
646
- k,
647
- L,
648
- D,
649
- R,
650
- Z,
651
- re,
652
- he,
653
- se,
654
- K,
655
- ve,
656
- me,
657
- Ee,
658
- j,
659
- q,
660
- O,
661
- ie,
662
- Ce,
663
- ae,
664
- ce
665
- ]
666
- );
667
- return $(() => {
668
- const ge = J.current;
669
- if (ge)
670
- return ge.userData.setText = (ye) => be(ye), ge.userData.setBgColor = (ye) => Me(ye), () => {
671
- delete ge.userData.setText, delete ge.userData.setBgColor;
672
- };
673
- }, []), $(() => () => {
674
- fe.dispose();
675
- }, [fe]), /* @__PURE__ */ W(
676
- "mesh",
677
- {
678
- ref: J,
679
- name: E,
680
- position: Ge,
681
- rotation: Ie,
682
- scale: P,
683
- visible: N,
684
- renderOrder: ee,
685
- children: [
686
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
687
- /* @__PURE__ */ v(
688
- "meshBasicMaterial",
689
- {
690
- map: fe,
691
- transparent: !0,
692
- opacity: Be,
693
- depthTest: !de,
694
- depthWrite: !de
695
- }
696
- )
697
- ]
698
- }
699
- );
700
- }
701
- function Ot(t) {
702
- const {
703
- width: e,
704
- height: n,
705
- text: r,
706
- lines: i,
707
- color: a,
708
- strokeLayers: o,
709
- strokeColor: A,
710
- strokeWidth: s,
711
- strokeOpacity: l,
712
- shadowLayers: c,
713
- innerShadow: h,
714
- glow: u,
715
- shadowColor: f,
716
- shadowBlur: p,
717
- shadowOffsetX: d,
718
- shadowOffsetY: g,
719
- shadowOpacity: C,
720
- fontStyle: m,
721
- fontFamily: I,
722
- fontWeight: y,
723
- textAlign: S,
724
- padding: M,
725
- overflow: H,
726
- resizeToFit: G,
727
- minFontSize: B,
728
- letterSpacing: w,
729
- lineSpacing: b,
730
- bgFillMode: Y,
731
- bgOpacity: k,
732
- bgFit: L,
733
- bgAutoSize: D,
734
- bgWidth: R,
735
- bgHeight: Z,
736
- bgGradientStops: re,
737
- bgTextureImage: se,
738
- bgTextureFit: K,
739
- bgTextureFlipX: ve,
740
- bgTextureFlipY: me,
741
- underline: Ee,
742
- bendPreset: j,
743
- bendStrength: q
744
- } = t;
745
- let { fontSize: O, bgColor: ie } = t;
746
- const Be = [
747
- ...o ?? [],
748
- ...A && s > 0 ? [{ color: A, width: s, opacity: l }] : []
749
- ].filter((Q) => Q.width > 0), Ce = [
750
- ...c ?? [],
751
- ...f && (p > 0 || d !== 0 || g !== 0) ? [
752
- {
753
- color: f,
754
- blur: p,
755
- offsetX: d,
756
- offsetY: g,
757
- opacity: C
758
- }
759
- ] : []
760
- ].filter((Q) => Q.blur > 0 || (Q.offsetX ?? 0) !== 0 || (Q.offsetY ?? 0) !== 0);
761
- let ae;
762
- const ce = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(e, n) : (() => {
763
- const Q = document.createElement("canvas");
764
- return Q.width = e, Q.height = n, Q;
765
- })(), E = ce.getContext("2d");
766
- E.clearRect(0, 0, e, n), E.fillStyle = a, E.textAlign = S, E.textBaseline = "middle";
767
- const de = e - M * 2, Ie = Array.isArray(i) || r.includes(`
768
- `) || H !== void 0 || G !== void 0 ? _t({
769
- ctx: E,
770
- text: r,
771
- explicitLines: i,
772
- maxWidth: de,
773
- maxHeight: n,
774
- padding: M,
775
- fontStyle: m,
776
- fontWeight: y,
777
- fontSize: O,
778
- fontFamily: I,
779
- overflow: H,
780
- resizeToFit: G,
781
- minFontSize: B,
782
- letterSpacing: w,
783
- lineSpacing: b
784
- }) : $t({
785
- ctx: E,
786
- text: r,
787
- maxWidth: de,
788
- maxHeight: n,
789
- padding: M,
790
- fontStyle: m,
791
- fontWeight: y,
792
- fontSize: O,
793
- fontFamily: I,
794
- letterSpacing: w,
795
- lineSpacing: b
796
- });
797
- O = Ie.fontSize;
798
- const P = Ie.lines;
799
- E.font = qe(m, y, O, I);
800
- const N = pe(O, w), ee = _e(O, b), oe = n / 2 - (P.length - 1) * ee / 2, be = P.map(
801
- (Q) => Ae(E, Q, N)
802
- ), Se = Math.min(
803
- e,
804
- Math.max(0, Math.max(...be, 0)) + M * 2
805
- ), Me = Math.min(
806
- n,
807
- Math.max(O, O + (P.length - 1) * ee) + M * 2
808
- ), V = Pt(e, M, S);
809
- if (ie !== "transparent") {
810
- const Q = D === !0, J = Je(
811
- Q ? void 0 : R,
812
- L === "text" || Q ? Se : e,
813
- e
814
- ), F = Je(
815
- Q ? void 0 : Z,
816
- L === "text" || Q ? Me : n,
817
- n
818
- ), ue = Jt(e, J, S, L), he = (n - F) / 2, fe = Math.min(t.borderRadius, Math.min(J, F) / 2);
819
- Ht(E, ue, he, J, F, fe), Kt(E, {
820
- panelX: ue,
821
- panelY: he,
822
- panelWidth: J,
823
- panelHeight: F,
824
- bgColor: ie,
825
- bgFillMode: Y,
826
- bgOpacity: k,
827
- bgGradientStops: re,
828
- bgTextureImage: se,
829
- bgTextureFit: K,
830
- bgTextureFlipX: ve,
831
- bgTextureFlipY: me
832
- }), t.borderColor && t.borderWidth > 0 && (E.lineWidth = t.borderWidth, E.strokeStyle = t.borderColor, E.stroke());
833
- }
834
- u && Vt(E, {
835
- lines: P,
836
- textX: V,
837
- startY: oe,
838
- lineHeight: ee,
839
- letterSpacingPx: N,
840
- bendPreset: j,
841
- bendStrength: q,
842
- color: u.color,
843
- style: u.style,
844
- intensity: u.intensity ?? 0.5,
845
- range: u.range ?? 0.5,
846
- horizontalAngle: u.horizontalAngle ?? 0,
847
- verticalAngle: u.verticalAngle ?? 0
848
- });
849
- for (let Q = 0; Q < P.length; Q++) {
850
- const J = oe + Q * ee;
851
- for (const F of Ce)
852
- E.save(), E.shadowColor = F.color, E.shadowBlur = F.blur, E.shadowOffsetX = F.offsetX ?? 0, E.shadowOffsetY = F.offsetY ?? 0, E.globalAlpha = F.opacity ?? 1, E.fillStyle = a, le(
853
- E,
854
- P[Q],
855
- V,
856
- J,
857
- N,
858
- "fill",
859
- j,
860
- q
861
- ), E.restore();
862
- for (const F of Be)
863
- E.save(), E.lineJoin = "round", E.miterLimit = 2, E.lineWidth = F.width, E.strokeStyle = F.color, E.globalAlpha = F.opacity ?? 1, le(
864
- E,
865
- P[Q],
866
- V,
867
- J,
868
- N,
869
- "stroke",
870
- j,
871
- q
872
- ), E.restore();
873
- E.save(), E.fillStyle = a, E.globalAlpha = 1, le(
874
- E,
875
- P[Q],
876
- V,
877
- J,
878
- N,
879
- "fill",
880
- j,
881
- q
882
- ), E.restore(), Ee && jt(
883
- E,
884
- P[Q],
885
- V,
886
- J,
887
- S,
888
- a,
889
- O,
890
- N
891
- );
892
- }
893
- return h && Zt(E, {
894
- width: e,
895
- height: n,
896
- font: E.font,
897
- lines: P,
898
- textX: V,
899
- startY: oe,
900
- lineHeight: ee,
901
- letterSpacingPx: N,
902
- bendPreset: j,
903
- bendStrength: q,
904
- textAlign: S,
905
- color: h.color,
906
- opacity: h.opacity ?? 1,
907
- blur: h.blur,
908
- offsetX: h.offsetX ?? 0,
909
- offsetY: h.offsetY ?? 0
910
- }), ae = new T.CanvasTexture(ce), ae.needsUpdate = !0, ae;
911
- }
912
- function Pt(t, e, n) {
913
- return n === "left" ? e : n === "right" ? t - e : t / 2;
914
- }
915
- function Jt(t, e, n, r) {
916
- return r === "full" || n === "left" ? 0 : n === "right" ? t - e : (t - e) / 2;
917
- }
918
- function qe(t, e, n, r) {
919
- return `${t} ${e} ${n}px ${r}`;
920
- }
921
- function pe(t, e) {
922
- const n = Math.max(0, Math.min(e, 1));
923
- return t * n * 0.08;
924
- }
925
- function _e(t, e) {
926
- const n = Math.max(0, Math.min(e, 1));
927
- return t * (1.2 + n * 0.6);
928
- }
929
- function Ae(t, e, n) {
930
- $e(t, n);
931
- const r = t.measureText(e).width;
932
- return et(t), r;
933
- }
934
- function le(t, e, n, r, i, a, o = "arc", A = 0) {
935
- if (A !== 0) {
936
- zt(t, e, n, r, i, a, o, A);
937
- return;
938
- }
939
- $e(t, i), a === "fill" ? t.fillText(e, n, r) : t.strokeText(e, n, r), et(t);
940
- }
941
- function zt(t, e, n, r, i, a, o, A) {
942
- const s = Array.from(e);
943
- if (s.length === 0) return;
944
- const l = s.map((C) => t.measureText(C).width), c = l.reduce((C, m) => C + m, 0) + i * Math.max(0, s.length - 1), h = t.textAlign, u = h === "right" ? n - c : h === "center" ? n - c / 2 : n, p = Math.max(-100, Math.min(A, 100)) / 100 * 72, d = Math.max(c / 2, 1);
945
- let g = u;
946
- for (let C = 0; C < s.length; C++) {
947
- const m = s[C], I = l[C], y = g + I / 2, S = (y - u - c / 2) / d, M = Ut(
948
- o,
949
- S,
950
- C,
951
- s.length,
952
- p,
953
- d
954
- );
955
- t.save(), t.translate(y + M.xOffset, r + M.yOffset), t.rotate(M.rotation), t.scale(M.scaleX, M.scaleY), t.textAlign = "center", a === "fill" ? t.fillText(m, 0, 0) : t.strokeText(m, 0, 0), t.restore(), g += I + i;
956
- }
957
- }
958
- function Ut(t, e, n, r, i, a) {
959
- const o = i / 72, A = Math.abs(o), s = 1 - Math.min(1, Math.abs(e)), l = Math.min(1, Math.abs(e)), c = r <= 1 ? 0.5 : n / (r - 1), h = Math.sin(c * Math.PI * 2 - Math.PI / 2), u = Math.sin(c * Math.PI * 2.7 - Math.PI / 2) * (0.65 + c * 0.35), f = i * e * e, p = 2 * i * e / a, d = {
960
- xOffset: 0,
961
- yOffset: 0,
962
- rotation: 0,
963
- scaleX: 1,
964
- scaleY: 1
965
- };
966
- switch (t) {
967
- case "arc":
968
- return {
969
- ...d,
970
- yOffset: f,
971
- rotation: Math.atan(p)
972
- };
973
- case "arc-lower":
974
- return {
975
- ...d,
976
- yOffset: f * 0.55,
977
- scaleY: Math.max(0.2, 1 + o * e * e * 0.45)
978
- };
979
- case "arc-upper":
980
- return {
981
- ...d,
982
- yOffset: -f * 0.55,
983
- scaleY: Math.max(0.2, 1 - o * e * e * 0.45)
984
- };
985
- case "arch":
986
- return {
987
- ...d,
988
- yOffset: f
989
- };
990
- case "bulge":
991
- return {
992
- ...d,
993
- scaleY: Math.max(0.2, 1 + o * s * 0.75)
994
- };
995
- case "shell-lower":
996
- return {
997
- ...d,
998
- yOffset: i * 0.45 * c * s,
999
- scaleY: Math.max(0.2, 1 + o * c * s)
1000
- };
1001
- case "shell-upper":
1002
- return {
1003
- ...d,
1004
- yOffset: -i * 0.45 * (1 - c) * s,
1005
- scaleY: Math.max(0.2, 1 + o * (1 - c) * s)
1006
- };
1007
- case "flag":
1008
- return {
1009
- ...d,
1010
- yOffset: i * 0.65 * u,
1011
- rotation: Math.atan(
1012
- i / Math.max(a, 1) * Math.cos(c * Math.PI * 2.7) * 1.6
1013
- )
1014
- };
1015
- case "wave":
1016
- return {
1017
- ...d,
1018
- yOffset: i * 0.6 * h,
1019
- rotation: Math.atan(i / Math.max(a, 1) * Math.cos(c * Math.PI * 2) * 1.4)
1020
- };
1021
- case "fish":
1022
- return {
1023
- ...d,
1024
- scaleX: Math.max(0.25, 1 - A * l * 0.55),
1025
- scaleY: Math.max(0.2, 1 + o * s)
1026
- };
1027
- case "rise":
1028
- return {
1029
- ...d,
1030
- yOffset: i * e
1031
- };
1032
- case "fisheye":
1033
- return {
1034
- ...d,
1035
- yOffset: i * 0.18 * e * s,
1036
- scaleX: Math.max(0.25, 1 + o * s * 0.7),
1037
- scaleY: Math.max(0.2, 1 + o * s * 0.7)
1038
- };
1039
- case "inflate":
1040
- return {
1041
- ...d,
1042
- scaleX: Math.max(0.25, 1 + o * s * 0.6),
1043
- scaleY: Math.max(0.2, 1 + o * s * 0.6)
1044
- };
1045
- case "squeeze":
1046
- return {
1047
- ...d,
1048
- scaleY: Math.max(0.2, 1 - o * s * 0.8)
1049
- };
1050
- case "twist":
1051
- return {
1052
- ...d,
1053
- yOffset: i * e,
1054
- rotation: o * e * 0.45,
1055
- scaleY: Math.max(0.2, 1 + o * e * 0.25)
1056
- };
1057
- default:
1058
- return d;
1059
- }
1060
- }
1061
- function $e(t, e) {
1062
- "letterSpacing" in t && (t.letterSpacing = `${e}px`);
1063
- }
1064
- function et(t) {
1065
- "letterSpacing" in t && (t.letterSpacing = "0px");
1066
- }
1067
- function Je(t, e, n) {
1068
- return typeof t != "number" || Number.isNaN(t) || t <= 0 ? e : Math.min(t, n);
1069
- }
1070
- function Ht(t, e, n, r, i, a) {
1071
- t.beginPath(), t.moveTo(e + a, n), t.lineTo(e + r - a, n), t.quadraticCurveTo(e + r, n, e + r, n + a), t.lineTo(e + r, n + i - a), t.quadraticCurveTo(e + r, n + i, e + r - a, n + i), t.lineTo(e + a, n + i), t.quadraticCurveTo(e, n + i, e, n + i - a), t.lineTo(e, n + a), t.quadraticCurveTo(e, n, e + a, n), t.closePath();
1072
- }
1073
- function Kt(t, e) {
1074
- const {
1075
- panelX: n,
1076
- panelY: r,
1077
- panelWidth: i,
1078
- panelHeight: a,
1079
- bgColor: o,
1080
- bgFillMode: A,
1081
- bgOpacity: s,
1082
- bgGradientStops: l,
1083
- bgTextureImage: c,
1084
- bgTextureFit: h,
1085
- bgTextureFlipX: u,
1086
- bgTextureFlipY: f
1087
- } = e;
1088
- if (t.save(), t.globalAlpha = Math.max(0, Math.min(s, 1)), A === "gradient" && l && l.length > 1) {
1089
- const p = t.createLinearGradient(
1090
- n,
1091
- r,
1092
- n + i,
1093
- r + a
1094
- );
1095
- [...l].sort((d, g) => d.position - g.position).forEach(
1096
- (d) => p.addColorStop(Math.max(0, Math.min(d.position, 1)), d.color)
1097
- ), t.fillStyle = p, t.fill(), t.restore();
1098
- return;
1099
- }
1100
- if (c) {
1101
- t.clip(), Nt(t, {
1102
- image: c,
1103
- x: n,
1104
- y: r,
1105
- width: i,
1106
- height: a,
1107
- fit: h,
1108
- flipX: u,
1109
- flipY: f
1110
- }), t.restore();
1111
- return;
1112
- }
1113
- t.fillStyle = o, t.fill(), t.restore();
1114
- }
1115
- function Nt(t, e) {
1116
- const { image: n, x: r, y: i, width: a, height: o, fit: A, flipX: s, flipY: l } = e, c = "naturalWidth" in n ? n.naturalWidth : "videoWidth" in n ? n.videoWidth : n.width, h = "naturalHeight" in n ? n.naturalHeight : "videoHeight" in n ? n.videoHeight : n.height;
1117
- let u = a, f = o, p = r, d = i;
1118
- if (A !== "stretch" && c > 0 && h > 0) {
1119
- const g = A === "cover" ? Math.max(a / c, o / h) : Math.min(a / c, o / h);
1120
- u = c * g, f = h * g, p = r + (a - u) / 2, d = i + (o - f) / 2;
1121
- }
1122
- t.save(), (s || l) && (t.translate(s ? r + a : 0, l ? i + o : 0), t.scale(s ? -1 : 1, l ? -1 : 1), p = s ? -(p - r) - u + r : p, d = l ? -(d - i) - f + i : d), t.drawImage(n, p, d, u, f), t.restore();
1123
- }
1124
- function Vt(t, e) {
1125
- const {
1126
- lines: n,
1127
- textX: r,
1128
- startY: i,
1129
- lineHeight: a,
1130
- letterSpacingPx: o,
1131
- bendPreset: A,
1132
- bendStrength: s,
1133
- color: l,
1134
- style: c,
1135
- intensity: h,
1136
- range: u,
1137
- horizontalAngle: f,
1138
- verticalAngle: p
1139
- } = e, d = Math.max(0, Math.min(h, 1));
1140
- if (d <= 0) return;
1141
- const g = Math.max(0, Math.min(u, 1)), C = g * 72, m = Math.max(-0.5, Math.min(f, 0.5)) * 80, I = Math.max(-0.5, Math.min(p, 0.5)) * 80;
1142
- for (let y = 0; y < n.length; y++) {
1143
- const S = i + y * a;
1144
- t.save(), t.globalAlpha = d, t.shadowColor = l, t.shadowBlur = C, t.shadowOffsetX = m, t.shadowOffsetY = I, c === "contoured" ? (t.lineJoin = "round", t.miterLimit = 2, t.lineWidth = Math.max(2, g * 42), t.strokeStyle = l, le(
1145
- t,
1146
- n[y],
1147
- r,
1148
- S,
1149
- o,
1150
- "stroke",
1151
- A,
1152
- s
1153
- )) : (t.fillStyle = l, le(t, n[y], r, S, o, "fill", A, s)), t.restore();
1154
- }
1155
- }
1156
- function Zt(t, e) {
1157
- const {
1158
- width: n,
1159
- height: r,
1160
- font: i,
1161
- lines: a,
1162
- textX: o,
1163
- startY: A,
1164
- lineHeight: s,
1165
- letterSpacingPx: l,
1166
- bendPreset: c,
1167
- bendStrength: h,
1168
- textAlign: u,
1169
- color: f,
1170
- opacity: p,
1171
- blur: d,
1172
- offsetX: g,
1173
- offsetY: C
1174
- } = e, m = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(n, r) : (() => {
1175
- const M = document.createElement("canvas");
1176
- return M.width = n, M.height = r, M;
1177
- })(), I = m.getContext("2d");
1178
- I.clearRect(0, 0, n, r), I.font = i, I.fillStyle = "#ffffff", I.textAlign = u, I.textBaseline = "middle";
1179
- for (let M = 0; M < a.length; M++)
1180
- le(
1181
- I,
1182
- a[M],
1183
- o,
1184
- A + M * s,
1185
- l,
1186
- "fill",
1187
- c,
1188
- h
1189
- );
1190
- const y = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(n, r) : (() => {
1191
- const M = document.createElement("canvas");
1192
- return M.width = n, M.height = r, M;
1193
- })(), S = y.getContext("2d");
1194
- S.clearRect(0, 0, n, r), S.save(), S.globalAlpha = p, S.filter = d > 0 ? `blur(${d}px)` : "none", S.drawImage(m, g, C), S.restore(), S.globalCompositeOperation = "destination-in", S.drawImage(m, 0, 0), S.globalCompositeOperation = "source-in", S.globalAlpha = p, S.fillStyle = f, S.fillRect(0, 0, n, r), t.drawImage(y, 0, 0);
1195
- }
1196
- function jt(t, e, n, r, i, a, o, A) {
1197
- const s = Ae(t, e, A), l = i === "center" ? n - s / 2 : i === "right" ? n - s : n, c = r + o * 0.42;
1198
- t.save(), t.strokeStyle = a, t.lineWidth = Math.max(2, o * 0.06), t.lineCap = "round", t.beginPath(), t.moveTo(l, c), t.lineTo(l + s, c), t.stroke(), t.restore();
1199
- }
1200
- function Fe(t, e, n, r, i, a, o, A) {
1201
- t.font = qe(r, i, a, o);
1202
- const s = e.split(" "), l = [];
1203
- let c = "";
1204
- for (const h of s) {
1205
- const u = c ? `${c} ${h}` : h;
1206
- Ae(t, u, A) > n && c ? (l.push(c), c = h) : c = u;
1207
- }
1208
- return c && l.push(c), l;
1209
- }
1210
- function ze(t, e, n, r, i, a, o, A) {
1211
- const l = e.split(/\r?\n/).flatMap((c) => c.trim().length === 0 ? [""] : Fe(
1212
- t,
1213
- c,
1214
- n,
1215
- r,
1216
- i,
1217
- a,
1218
- o,
1219
- A
1220
- ));
1221
- return l.length > 0 ? l : [e];
1222
- }
1223
- function We(t, e, n, r) {
1224
- return Math.max(1, Math.floor((t - e * 2) / _e(n, r)));
1225
- }
1226
- function tt(t, e, n, r, i) {
1227
- const a = r ? "..." : "";
1228
- let o = e.trimEnd();
1229
- for (; o.length > 0 && Ae(t, `${o}${a}`, i) > n; )
1230
- o = o.slice(0, -1).trimEnd();
1231
- return `${o}${a}`;
1232
- }
1233
- function xe(t, e, n, r, i) {
1234
- return e.map((a, o) => {
1235
- if (Ae(t, a, i) <= n)
1236
- return a;
1237
- const A = o === e.length - 1;
1238
- return tt(
1239
- t,
1240
- a,
1241
- n,
1242
- r === "ellipsis" && A,
1243
- i
1244
- );
1245
- });
1246
- }
1247
- function Ue(t, e, n, r, i, a) {
1248
- if (e.length <= n)
1249
- return xe(
1250
- t,
1251
- e,
1252
- r,
1253
- i ? "ellipsis" : "clip",
1254
- a
1255
- );
1256
- const o = e.slice(0, n), A = o[n - 1];
1257
- return o[n - 1] = tt(
1258
- t,
1259
- A,
1260
- r,
1261
- i,
1262
- a
1263
- ), xe(
1264
- t,
1265
- o,
1266
- r,
1267
- i ? "ellipsis" : "clip",
1268
- a
1269
- );
1270
- }
1271
- function qt(t, e, n, r, i) {
1272
- return e.length <= r && e.every((a) => Ae(t, a, i) <= n);
1273
- }
1274
- function _t(t) {
1275
- const {
1276
- ctx: e,
1277
- text: n,
1278
- explicitLines: r,
1279
- maxWidth: i,
1280
- maxHeight: a,
1281
- padding: o,
1282
- fontStyle: A,
1283
- fontWeight: s,
1284
- fontSize: l,
1285
- fontFamily: c,
1286
- letterSpacing: h,
1287
- lineSpacing: u,
1288
- overflow: f,
1289
- resizeToFit: p,
1290
- minFontSize: d
1291
- } = t;
1292
- let g = l, C = pe(g, h), m = r ?? ze(
1293
- e,
1294
- n,
1295
- i,
1296
- A,
1297
- s,
1298
- g,
1299
- c,
1300
- C
1301
- ), I = We(a, o, g, u);
1302
- const y = p === !0 || f === "shrink";
1303
- for (; y && !qt(e, m, i, I, C) && g > d && (g = Math.max(d, g - 4), C = pe(g, h), m = r ?? ze(
1304
- e,
1305
- n,
1306
- i,
1307
- A,
1308
- s,
1309
- g,
1310
- c,
1311
- C
1312
- ), I = We(a, o, g, u), g !== d); )
1313
- ;
1314
- return f === "ellipsis" ? m = Ue(
1315
- e,
1316
- m,
1317
- I,
1318
- i,
1319
- !0,
1320
- C
1321
- ) : f === "clamp" || f === "shrink" ? m = Ue(
1322
- e,
1323
- m,
1324
- I,
1325
- i,
1326
- !1,
1327
- C
1328
- ) : f === "clip" ? m = m : m = xe(e, m, i, void 0, C), { fontSize: g, lines: m };
1329
- }
1330
- function $t(t) {
1331
- const {
1332
- ctx: e,
1333
- text: n,
1334
- maxWidth: r,
1335
- maxHeight: i,
1336
- padding: a,
1337
- fontStyle: o,
1338
- fontWeight: A,
1339
- fontSize: s,
1340
- fontFamily: l,
1341
- letterSpacing: c,
1342
- lineSpacing: h
1343
- } = t;
1344
- let u = s, f = Fe(
1345
- e,
1346
- n,
1347
- r,
1348
- o,
1349
- A,
1350
- u,
1351
- l,
1352
- pe(u, c)
1353
- );
1354
- const p = We(i, a, u, h);
1355
- return f.length > p && (u = Math.max(12, Math.round(u * 0.75)), f = Fe(
1356
- e,
1357
- n,
1358
- r,
1359
- o,
1360
- A,
1361
- u,
1362
- l,
1363
- pe(u, c)
1364
- )), { fontSize: u, lines: f };
1365
- }
1366
- const en = "rgba(20,40,110,0.88)", tn = 24, nn = 512;
1367
- function kn({
1368
- color: t = en,
1
+ var re = Object.defineProperty;
2
+ var ae = (t, e, s) => e in t ? re(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
3
+ var _ = (t, e, s) => ae(t, typeof e != "symbol" ? e + "" : e, s);
4
+ import { X as ne, u as oe } from "./index-JygePOwo.js";
5
+ import { c as yt, d as gt } from "./index-JygePOwo.js";
6
+ import { S as ie } from "./contexts-Bk5zz_VR.js";
7
+ import { X as At } from "./contexts-Bk5zz_VR.js";
8
+ import { c as ce } from "./index-Di70KWuY.js";
9
+ import { L as xt, d as vt, R as Ct, e as Pt, a as Lt, S as Ut, b as Dt, f as Nt, T as bt, g as Ft, m as Ot, n as It, h as Gt, i as kt, j as zt, s as Wt, k as Xt, l as Vt, w as Ht } from "./index-Di70KWuY.js";
10
+ import { jsxs as N, jsx as f, Fragment as q } from "react/jsx-runtime";
11
+ import { useRef as A, useMemo as J, useEffect as U, useState as b, Suspense as ue, useCallback as w, forwardRef as le, useImperativeHandle as de } from "react";
12
+ import * as me from "three";
13
+ import { MathUtils as pe, Vector2 as he, Vector3 as fe, DoubleSide as k, RepeatWrapping as Y, LinearFilter as Z } from "three";
14
+ import { T as jt, U as qt, D as Yt, K as Zt, J as Kt, F as $t, N as Jt, O as Qt, V as es, W as ts, H as ss, M as rs, P as as, S as ns, E as os, B as is, L as cs, Q as us, R as ls, G as ds, X as ms, C as ps, I as hs, Y as fs } from "./renderPasses-CjgG_6kQ.js";
15
+ import { useThree as Ee, useFrame as Se } from "@react-three/fiber";
16
+ import { R as Te } from "./renderLayers-zrK2pv5O.js";
17
+ import { b as Me, c as Re } from "./selectors-Dw3C-gSk.js";
18
+ import { useTexture as ye } from "@react-three/drei";
19
+ import { a as ge } from "./index-CTHeBQOs.js";
20
+ import { D as Ss, b as Ts, M as Ms, n as Rs } from "./index-CTHeBQOs.js";
21
+ import { y as gs, w as ws, A as As, M as _s, S as xs, T as vs, z as Cs, x as Ps } from "./FaceMeshRenderer-6t8OsQhK.js";
22
+ import { d as Us, r as Ds } from "./drawNormalizedCrop-CRdIDyl1.js";
23
+ import { M as bs } from "./index-BgQAX8rs.js";
24
+ const I = (t, e, s, r) => pe.damp(t, e, Math.max(0, s), Math.max(0, r)), Je = (t, e, s, r, a = new he()) => a.set(
25
+ I(t.x, e.x, s, r),
26
+ I(t.y, e.y, s, r)
27
+ ), Qe = (t, e, s, r, a = new fe()) => a.set(
28
+ I(t.x, e.x, s, r),
29
+ I(t.y, e.y, s, r),
30
+ I(t.z, e.z, s, r)
31
+ ), we = "rgba(20,40,110,0.88)", Ae = 24, _e = 512;
32
+ function et({
33
+ color: t = we,
1369
34
  borderColor: e,
1370
- borderWidth: n = 0,
1371
- borderRadius: r = tn,
1372
- resolution: i = nn,
1373
- aspect: a = 1,
35
+ borderWidth: s = 0,
36
+ borderRadius: r = Ae,
37
+ resolution: a = _e,
38
+ aspect: i = 1,
1374
39
  opacity: o = 1,
1375
- name: A,
1376
- overlay: s = !0,
1377
- position: l,
1378
- rotation: c,
1379
- scale: h,
1380
- visible: u
40
+ name: c,
41
+ overlay: n = !0,
42
+ position: u,
43
+ rotation: S,
44
+ scale: d,
45
+ visible: m
1381
46
  }) {
1382
- const f = X(null), p = X(null), d = x(() => rn({
1383
- width: Math.round(i * Math.max(a, 0.05)),
1384
- height: Math.round(i),
47
+ const h = A(null), l = A(null), T = J(() => xe({
48
+ width: Math.round(a * Math.max(i, 0.05)),
49
+ height: Math.round(a),
1385
50
  color: t,
1386
51
  borderColor: e,
1387
- borderWidth: n,
52
+ borderWidth: s,
1388
53
  borderRadius: r
1389
- }), [t, e, n, r, i, a]);
1390
- $(() => () => {
1391
- d.dispose();
1392
- }, [d]);
1393
- const g = X(null), C = X(o);
1394
- return C.current !== o && (C.current = o, g.current = null, p.current && (p.current.opacity = o)), $(() => {
1395
- const m = f.current;
1396
- if (m)
1397
- return m.userData.setOpacity = (I) => {
1398
- g.current = I, p.current && (p.current.opacity = I);
54
+ }), [t, e, s, r, a, i]);
55
+ U(() => () => {
56
+ T.dispose();
57
+ }, [T]);
58
+ const g = A(null), E = A(o);
59
+ return E.current !== o && (E.current = o, g.current = null, l.current && (l.current.opacity = o)), U(() => {
60
+ const x = h.current;
61
+ if (x)
62
+ return x.userData.setOpacity = (P) => {
63
+ g.current = P, l.current && (l.current.opacity = P);
1399
64
  }, () => {
1400
- delete m.userData.setOpacity;
65
+ delete x.userData.setOpacity;
1401
66
  };
1402
- }, []), /* @__PURE__ */ W(
67
+ }, []), /* @__PURE__ */ N(
1403
68
  "mesh",
1404
69
  {
1405
- ref: f,
1406
- name: A,
1407
- position: l,
1408
- rotation: c,
1409
- scale: h,
1410
- visible: u,
70
+ ref: h,
71
+ name: c,
72
+ position: u,
73
+ rotation: S,
74
+ scale: d,
75
+ visible: m,
1411
76
  children: [
1412
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
1413
- /* @__PURE__ */ v(
77
+ /* @__PURE__ */ f("planeGeometry", { args: [1, 1] }),
78
+ /* @__PURE__ */ f(
1414
79
  "meshBasicMaterial",
1415
80
  {
1416
- ref: p,
1417
- map: d,
81
+ ref: l,
82
+ map: T,
1418
83
  transparent: !0,
1419
84
  opacity: o,
1420
- depthTest: !s,
1421
- depthWrite: !s
85
+ depthTest: !n,
86
+ depthWrite: !n
1422
87
  }
1423
88
  )
1424
89
  ]
1425
90
  }
1426
91
  );
1427
92
  }
1428
- function rn(t) {
1429
- const { width: e, height: n, color: r, borderColor: i, borderWidth: a, borderRadius: o } = t, A = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(e, n) : (() => {
1430
- const h = document.createElement("canvas");
1431
- return h.width = e, h.height = n, h;
1432
- })(), s = A.getContext("2d");
1433
- s.clearRect(0, 0, e, n);
1434
- const l = Math.min(o, Math.min(e, n) / 2);
1435
- s.beginPath(), s.moveTo(l, 0), s.lineTo(e - l, 0), s.quadraticCurveTo(e, 0, e, l), s.lineTo(e, n - l), s.quadraticCurveTo(e, n, e - l, n), s.lineTo(l, n), s.quadraticCurveTo(0, n, 0, n - l), s.lineTo(0, l), s.quadraticCurveTo(0, 0, l, 0), s.closePath(), s.fillStyle = r, s.fill(), i && a > 0 && (s.lineWidth = a, s.strokeStyle = i, s.stroke());
1436
- const c = new T.CanvasTexture(A);
1437
- return c.needsUpdate = !0, c;
1438
- }
1439
- const sn = 2.5, an = {
1440
- top: { left: -0.92, right: 0.92, top: 0.92, bottom: 0.56 },
1441
- center: { left: -0.92, right: 0.92, top: 0.18, bottom: -0.18 },
1442
- bottom: { left: -0.92, right: 0.92, top: -0.56, bottom: -0.92 }
1443
- };
1444
- function on(t = "center") {
1445
- return an[t];
1446
- }
1447
- function ln(t) {
1448
- const e = De(), n = Math.max(e || sn, 0.1), { showTransformGuides: r = !1, renderOrder: i, overlay: a = !0, ...o } = t;
1449
- return /* @__PURE__ */ W(Te, { children: [
1450
- /* @__PURE__ */ v(
1451
- Rt,
1452
- {
1453
- ...o,
1454
- aspect: n,
1455
- overlay: a,
1456
- renderOrder: i
1457
- }
1458
- ),
1459
- r ? /* @__PURE__ */ v("group", { renderOrder: (i ?? 0) + 1, children: /* @__PURE__ */ W("mesh", { position: [0, 0, 4e-3], children: [
1460
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
1461
- /* @__PURE__ */ v(
1462
- "meshBasicMaterial",
1463
- {
1464
- color: "#38bdf8",
1465
- wireframe: !0,
1466
- transparent: !0,
1467
- opacity: 0.9,
1468
- depthTest: !1,
1469
- depthWrite: !1,
1470
- toneMapped: !1
1471
- }
1472
- )
1473
- ] }) }) : null
1474
- ] });
1475
- }
1476
- function Ln({
1477
- anchors: t,
1478
- coordinateSpace: e,
1479
- canvasSize: n,
1480
- offsets: r,
1481
- pivot: i,
1482
- position: a,
1483
- rotation: o = 0,
1484
- size: A,
1485
- transform: s,
1486
- verticalAlign: l = "center",
1487
- ...c
1488
- }) {
1489
- const h = x(() => s != null && s.anchors ? s.anchors : t || (s != null && s.position || s != null && s.size || a || A ? Ze({
1490
- coordinateSpace: (s == null ? void 0 : s.coordinateSpace) ?? e,
1491
- canvasSize: (s == null ? void 0 : s.canvasSize) ?? n,
1492
- position: (s == null ? void 0 : s.position) ?? a,
1493
- size: (s == null ? void 0 : s.size) ?? A
1494
- }) : on(l)), [t, n, e, a, A, s, l]), u = (s == null ? void 0 : s.offsets) ?? r, f = x(
1495
- () => gt((s == null ? void 0 : s.pivot) ?? i ?? [0.5, 0.5]),
1496
- [i, s == null ? void 0 : s.pivot]
1497
- ), p = (s == null ? void 0 : s.rotation) ?? o;
1498
- return /* @__PURE__ */ v(Ne, { anchors: h, offsets: u, pivot: f, children: /* @__PURE__ */ v("group", { rotation: [0, 0, p * Math.PI / 180], children: /* @__PURE__ */ v(ln, { ...c }) }) });
1499
- }
1500
- const An = { left: -1, right: 1, top: 1, bottom: -1 }, cn = (t, e, n) => {
1501
- const r = t % e, i = Math.floor(t / e);
1502
- return { x: r / e, y: (n - 1 - i) / n };
1503
- }, dn = ({
1504
- sheet: t,
1505
- contentAspect: e,
1506
- renderOrder: n,
1507
- name: r
1508
- }) => {
1509
- const i = Ve(t.url), a = X(0), o = X(-1), A = De(), [s, l] = e != null ? Xe(A, e) : [1, 1];
1510
- return ut((c, h) => {
1511
- i.wrapS = Re, i.wrapT = Re, i.magFilter = Oe, i.minFilter = Oe, i.generateMipmaps = !1, i.repeat.set(1 / t.cols, 1 / t.rows), a.current += h;
1512
- const u = Math.floor(a.current * t.fps) % t.frames;
1513
- if (u === o.current) return;
1514
- o.current = u;
1515
- const { x: f, y: p } = cn(u, t.cols, t.rows);
1516
- i.offset.set(f, p);
1517
- }), /* @__PURE__ */ W("mesh", { name: r, renderOrder: n, scale: [s, l, 1], children: [
1518
- /* @__PURE__ */ v("planeGeometry", { args: [1, 1] }),
1519
- /* @__PURE__ */ v("meshBasicMaterial", { map: i, transparent: !0, toneMapped: !1, depthWrite: !1 })
1520
- ] });
1521
- }, Fn = ({
1522
- sheet: t,
1523
- anchors: e = An,
1524
- contentAspect: n,
1525
- renderOrder: r = 10,
1526
- name: i = "spriteAnimation"
1527
- }) => /* @__PURE__ */ v(st, { fallback: null, children: /* @__PURE__ */ v(Ne, { anchors: e, children: /* @__PURE__ */ v(dn, { sheet: t, contentAspect: n, renderOrder: r, name: i }) }) }), Wn = ({
93
+ function xe(t) {
94
+ const { width: e, height: s, color: r, borderColor: a, borderWidth: i, borderRadius: o } = t, c = typeof OffscreenCanvas < "u" ? new OffscreenCanvas(e, s) : (() => {
95
+ const d = document.createElement("canvas");
96
+ return d.width = e, d.height = s, d;
97
+ })(), n = c.getContext("2d");
98
+ n.clearRect(0, 0, e, s);
99
+ const u = Math.min(o, Math.min(e, s) / 2);
100
+ n.beginPath(), n.moveTo(u, 0), n.lineTo(e - u, 0), n.quadraticCurveTo(e, 0, e, u), n.lineTo(e, s - u), n.quadraticCurveTo(e, s, e - u, s), n.lineTo(u, s), n.quadraticCurveTo(0, s, 0, s - u), n.lineTo(0, u), n.quadraticCurveTo(0, 0, u, 0), n.closePath(), n.fillStyle = r, n.fill(), a && i > 0 && (n.lineWidth = i, n.strokeStyle = a, n.stroke());
101
+ const S = new me.CanvasTexture(c);
102
+ return S.needsUpdate = !0, S;
103
+ }
104
+ const tt = ({
1528
105
  segmentationMask: t,
1529
106
  segmentation: e,
1530
- invert: n = !1,
107
+ invert: s = !1,
1531
108
  customBackground: r,
1532
- renderOrder: i = at.BACKGROUND
109
+ renderOrder: a = Te.BACKGROUND
1533
110
  }) => {
1534
- const { camera: a, size: o } = Ye(), A = ht(), s = ft(it.BACKGROUND_SEGMENTATION), l = e ? s == null ? void 0 : s.backgroundSegmentationMask : void 0, c = X(!1);
1535
- $(() => {
111
+ const { camera: i, size: o } = Ee(), c = Me(), n = Re(ne.BACKGROUND_SEGMENTATION), u = e ? n == null ? void 0 : n.backgroundSegmentationMask : void 0, S = A(!1);
112
+ U(() => {
1536
113
  if (!e) {
1537
- c.current = !1;
114
+ S.current = !1;
1538
115
  return;
1539
116
  }
1540
- s === null && !c.current && (console.warn(
117
+ n === null && !S.current && (console.warn(
1541
118
  `[VideoBackground] segmentation="${e}" set but no matching <Segmentation> component is mounted; rendering unmasked.`
1542
- ), c.current = !0);
1543
- }, [e, s]);
1544
- const h = e ? l : t, u = x(() => {
1545
- if (!a.isPerspectiveCamera)
119
+ ), S.current = !0);
120
+ }, [e, n]);
121
+ const d = e ? u : t, m = J(() => {
122
+ if (!i.isPerspectiveCamera)
1546
123
  return [10, 10];
1547
- const f = a, g = (f.position.z || 5) - -1, C = f.fov * Math.PI / 180, m = 2 * Math.tan(C / 2) * g;
1548
- return [m * (o.width / o.height), m];
1549
- }, [a, o]);
1550
- return A ? /* @__PURE__ */ v("group", { position: [0, 0, -1], children: n ? /* @__PURE__ */ W(Te, { children: [
1551
- /* @__PURE__ */ W("mesh", { position: [0, 0, -0.01], renderOrder: i - 1, children: [
1552
- /* @__PURE__ */ v("planeGeometry", { args: u }),
1553
- /* @__PURE__ */ v(
124
+ const h = i, g = (h.position.z || 5) - -1, E = h.fov * Math.PI / 180, x = 2 * Math.tan(E / 2) * g;
125
+ return [x * (o.width / o.height), x];
126
+ }, [i, o]);
127
+ return c ? /* @__PURE__ */ f("group", { position: [0, 0, -1], children: s ? /* @__PURE__ */ N(q, { children: [
128
+ /* @__PURE__ */ N("mesh", { position: [0, 0, -0.01], renderOrder: a - 1, children: [
129
+ /* @__PURE__ */ f("planeGeometry", { args: m }),
130
+ /* @__PURE__ */ f(
1554
131
  "meshBasicMaterial",
1555
132
  {
1556
- map: A,
133
+ map: c,
1557
134
  depthTest: !1,
1558
135
  depthWrite: !1,
1559
- toneMapped: !1
136
+ toneMapped: !1,
137
+ side: k
1560
138
  }
1561
139
  )
1562
140
  ] }),
1563
- r && h && /* @__PURE__ */ W("mesh", { position: [0, 0, 0], renderOrder: i, children: [
1564
- /* @__PURE__ */ v("planeGeometry", { args: u }),
1565
- /* @__PURE__ */ v(
141
+ r && d && /* @__PURE__ */ N("mesh", { position: [0, 0, 0], renderOrder: a, children: [
142
+ /* @__PURE__ */ f("planeGeometry", { args: m }),
143
+ /* @__PURE__ */ f(
1566
144
  "meshBasicMaterial",
1567
145
  {
1568
146
  map: typeof r == "string" ? void 0 : r,
1569
147
  color: typeof r == "string" ? r : void 0,
1570
- alphaMap: h,
148
+ alphaMap: d,
1571
149
  transparent: !1,
1572
150
  alphaTest: 0.5,
1573
151
  depthTest: !1,
1574
152
  depthWrite: !1,
1575
- toneMapped: !1
153
+ toneMapped: !1,
154
+ side: k
1576
155
  },
1577
156
  "inverted-mask"
1578
157
  )
1579
158
  ] })
1580
- ] }) : /* @__PURE__ */ W(Te, { children: [
1581
- r && h && /* @__PURE__ */ W("mesh", { position: [0, 0, -0.01], renderOrder: i - 1, children: [
1582
- /* @__PURE__ */ v("planeGeometry", { args: u }),
1583
- /* @__PURE__ */ v(
159
+ ] }) : /* @__PURE__ */ N(q, { children: [
160
+ r && d && /* @__PURE__ */ N("mesh", { position: [0, 0, -0.01], renderOrder: a - 1, children: [
161
+ /* @__PURE__ */ f("planeGeometry", { args: m }),
162
+ /* @__PURE__ */ f(
1584
163
  "meshBasicMaterial",
1585
164
  {
1586
165
  map: typeof r == "string" ? void 0 : r,
1587
166
  color: typeof r == "string" ? r : void 0,
1588
167
  depthTest: !1,
1589
168
  depthWrite: !1,
1590
- toneMapped: !1
169
+ toneMapped: !1,
170
+ side: k
1591
171
  }
1592
172
  )
1593
173
  ] }),
1594
- /* @__PURE__ */ W("mesh", { position: [0, 0, 0], renderOrder: i, children: [
1595
- /* @__PURE__ */ v("planeGeometry", { args: u }),
1596
- /* @__PURE__ */ v(
174
+ /* @__PURE__ */ N("mesh", { position: [0, 0, 0], renderOrder: a, children: [
175
+ /* @__PURE__ */ f("planeGeometry", { args: m }),
176
+ /* @__PURE__ */ f(
1597
177
  "meshBasicMaterial",
1598
178
  {
1599
- map: A,
1600
- alphaMap: h,
179
+ map: c,
180
+ alphaMap: d,
1601
181
  transparent: !1,
1602
- alphaTest: h ? 0.5 : void 0,
182
+ alphaTest: d ? 0.5 : void 0,
1603
183
  depthTest: !1,
1604
184
  depthWrite: !1,
1605
- toneMapped: !1
185
+ toneMapped: !1,
186
+ side: k
1606
187
  },
1607
- h ? "with-mask" : "no-mask"
188
+ d ? "with-mask" : "no-mask"
1608
189
  )
1609
190
  ] })
1610
191
  ] }) }) : null;
1611
- }, un = [
192
+ }, V = 9, H = 16, st = ({ children: t }) => {
193
+ const [e, s] = b({ width: 0, height: 0 });
194
+ return U(() => {
195
+ const r = () => {
196
+ const a = document.documentElement.clientWidth, i = document.documentElement.clientHeight, o = a / i, c = V / H;
197
+ let n, u;
198
+ o > c ? (u = i, n = u * V / H) : (n = a, u = n * H / V), s({ width: n, height: u });
199
+ };
200
+ return r(), window.addEventListener("resize", r), () => window.removeEventListener("resize", r);
201
+ }, []), /* @__PURE__ */ f(
202
+ "div",
203
+ {
204
+ style: {
205
+ width: "100vw",
206
+ height: `${window.innerHeight}px`,
207
+ display: "flex",
208
+ alignItems: "center",
209
+ justifyContent: "center",
210
+ backgroundColor: "#0d0d0d"
211
+ },
212
+ children: /* @__PURE__ */ f("div", { style: { width: e.width, height: e.height, position: "relative" }, children: t })
213
+ }
214
+ );
215
+ }, rt = ({ size: t = 0.25, ...e }) => /* @__PURE__ */ f("axesHelper", { args: [t], ...e }), ve = { left: -1, right: 1, top: 1, bottom: -1 }, Ce = (t, e, s) => {
216
+ const r = t % e, a = Math.floor(t / e);
217
+ return { x: r / e, y: (s - 1 - a) / s };
218
+ }, Pe = ({
219
+ sheet: t,
220
+ contentAspect: e,
221
+ renderOrder: s,
222
+ name: r
223
+ }) => {
224
+ const a = ye(t.url), i = A(0), o = A(-1), c = ge(), [n, u] = e != null ? ce(c, e) : [1, 1];
225
+ return Se((S, d) => {
226
+ a.wrapS = Y, a.wrapT = Y, a.magFilter = Z, a.minFilter = Z, a.generateMipmaps = !1, a.repeat.set(1 / t.cols, 1 / t.rows), i.current += d;
227
+ const m = Math.floor(i.current * t.fps) % t.frames;
228
+ if (m === o.current) return;
229
+ o.current = m;
230
+ const { x: h, y: l } = Ce(m, t.cols, t.rows);
231
+ a.offset.set(h, l);
232
+ }), /* @__PURE__ */ N("mesh", { name: r, renderOrder: s, scale: [n, u, 1], children: [
233
+ /* @__PURE__ */ f("planeGeometry", { args: [1, 1] }),
234
+ /* @__PURE__ */ f("meshBasicMaterial", { map: a, transparent: !0, toneMapped: !1, depthWrite: !1 })
235
+ ] });
236
+ }, at = ({
237
+ sheet: t,
238
+ anchors: e = ve,
239
+ contentAspect: s,
240
+ renderOrder: r = 10,
241
+ name: a = "spriteAnimation"
242
+ }) => /* @__PURE__ */ f(ue, { fallback: null, children: /* @__PURE__ */ f(ie, { anchors: e, children: /* @__PURE__ */ f(Pe, { sheet: t, contentAspect: s, renderOrder: r, name: a }) }) }), D = (t) => {
243
+ switch (t) {
244
+ case "start":
245
+ return "starting";
246
+ case "started":
247
+ case "resume":
248
+ return "recording";
249
+ case "pause":
250
+ return "paused";
251
+ case "stop":
252
+ return "stopping";
253
+ case "complete":
254
+ return "completed";
255
+ case "fail":
256
+ return "error";
257
+ case "clear":
258
+ return "idle";
259
+ }
260
+ }, Le = [
1612
261
  "video/mp4",
1613
262
  "video/webm;codecs=vp9",
1614
263
  "video/webm;codecs=vp8",
1615
264
  "video/webm"
1616
265
  ];
1617
- function xn(t = {}) {
1618
- const { audio: e = !1, mimeType: n, bitsPerSecond: r, onData: i, onStop: a, passThroughStream: o } = t, A = X(null), s = X(null), l = X([]), [c, h] = _(!1), [u, f] = _(!1), [p, d] = _(null), [g, C] = _(null), m = te(() => {
1619
- var w;
1620
- const B = [n, ...un].filter(Boolean);
1621
- for (const b of B)
1622
- if ((w = MediaRecorder.isTypeSupported) != null && w.call(MediaRecorder, b)) return b;
1623
- }, [n]), I = te(
1624
- async (B) => {
1625
- const w = new MediaStream();
1626
- if (B.getTracks().forEach((b) => w.addTrack(b)), e) {
1627
- let b;
266
+ function nt(t = {}) {
267
+ const {
268
+ audio: e = !1,
269
+ mimeType: s,
270
+ bitsPerSecond: r,
271
+ onData: a,
272
+ onStop: i,
273
+ onRecordingStart: o,
274
+ onRecordingPause: c,
275
+ onRecordingResume: n,
276
+ onRecordingStop: u,
277
+ onRecordingComplete: S,
278
+ onError: d,
279
+ passThroughStream: m
280
+ } = t, h = A(null), l = A(null), T = A([]), [g, E] = b("idle"), [x, P] = b(null), [W, R] = b(null), L = w(() => {
281
+ var y;
282
+ const p = [s, ...Le].filter(Boolean);
283
+ for (const M of p)
284
+ if ((y = MediaRecorder.isTypeSupported) != null && y.call(MediaRecorder, M)) return M;
285
+ }, [s]), O = w(
286
+ async (p) => {
287
+ const y = new MediaStream();
288
+ if (p.getTracks().forEach((M) => y.addTrack(M)), e) {
289
+ let M;
1628
290
  if (e instanceof MediaStream)
1629
- b = e;
291
+ M = e;
1630
292
  else {
1631
- const Y = typeof e == "object" ? { audio: e } : { audio: !0, video: !1 };
1632
- b = await navigator.mediaDevices.getUserMedia(Y);
293
+ const v = typeof e == "object" ? { audio: e } : { audio: !0, video: !1 };
294
+ M = await navigator.mediaDevices.getUserMedia(v);
1633
295
  }
1634
- b.getAudioTracks().forEach((Y) => w.addTrack(Y));
296
+ M.getAudioTracks().forEach((v) => y.addTrack(v));
1635
297
  }
1636
- if (!w.getTracks().length)
298
+ if (!y.getTracks().length)
1637
299
  throw new Error("No tracks available in combined stream.");
1638
- return s.current = w, w;
300
+ return l.current = y, y;
1639
301
  },
1640
302
  [e]
1641
- ), y = te(
1642
- async (B, w) => {
303
+ ), Q = w(
304
+ async (p, y) => {
305
+ E(D("start")), R(null), P(null);
1643
306
  try {
1644
- let b;
1645
- o ? (b = B, s.current = b) : b = await I(B);
1646
- const Y = m(), k = {};
1647
- Y && (k.mimeType = Y), r && (k.bitsPerSecond = r);
1648
- const L = new MediaRecorder(b, k);
1649
- L.ondataavailable = (D) => {
1650
- var R;
1651
- ((R = D.data) == null ? void 0 : R.size) > 0 && (l.current.push(D.data), i == null || i(D.data));
1652
- }, L.onstop = () => {
1653
- const D = new Blob(l.current, {
1654
- type: Y ?? "video/webm"
307
+ let M;
308
+ if (m)
309
+ M = m, l.current = M;
310
+ else {
311
+ if (!p) throw new Error("start(stream) requires a MediaStream.");
312
+ M = await O(p);
313
+ }
314
+ const v = L(), X = {};
315
+ v && (X.mimeType = v), r && (X.bitsPerSecond = r);
316
+ const G = new MediaRecorder(M, X);
317
+ G.ondataavailable = (F) => {
318
+ var j;
319
+ ((j = F.data) == null ? void 0 : j.size) > 0 && (T.current.push(F.data), a == null || a(F.data));
320
+ }, G.onstop = () => {
321
+ const F = new Blob(T.current, {
322
+ type: v ?? "video/webm"
1655
323
  });
1656
- d(D), a == null || a(D), l.current = [];
1657
- }, A.current = L, L.start(w), h(!0), f(!1);
1658
- } catch (b) {
1659
- console.error("start(stream) failed", b), C(b instanceof Error ? b : new Error(String(b)));
324
+ P(F), i == null || i(F), S == null || S(F), T.current = [], E(D("complete"));
325
+ }, h.current = G, G.start(y), E(D("started")), o == null || o();
326
+ } catch (M) {
327
+ const v = M instanceof Error ? M : new Error(String(M));
328
+ console.error("start(stream) failed", v), R(v), E(D("fail")), d == null || d(v);
1660
329
  }
1661
330
  },
1662
- [I, m, r, i, a, o]
1663
- ), S = te(() => {
1664
- const B = A.current;
1665
- B && B.state !== "inactive" && B.stop(), h(!1), f(!1);
1666
- }, []), M = te(() => {
1667
- const B = A.current;
1668
- (B == null ? void 0 : B.state) === "recording" && (B.pause(), f(!0));
1669
- }, []), H = te(() => {
1670
- const B = A.current;
1671
- (B == null ? void 0 : B.state) === "paused" && (B.resume(), f(!1));
1672
- }, []), G = te(() => {
1673
- var B, w;
331
+ [
332
+ O,
333
+ L,
334
+ r,
335
+ a,
336
+ i,
337
+ S,
338
+ o,
339
+ d,
340
+ m
341
+ ]
342
+ ), ee = w(() => {
343
+ const p = h.current;
344
+ !p || p.state === "inactive" || (E(D("stop")), p.stop(), u == null || u());
345
+ }, [u]), te = w(() => {
346
+ const p = h.current;
347
+ (p == null ? void 0 : p.state) === "recording" && (p.pause(), E(D("pause")), c == null || c());
348
+ }, [c]), se = w(() => {
349
+ const p = h.current;
350
+ (p == null ? void 0 : p.state) === "paused" && (p.resume(), E(D("resume")), n == null || n());
351
+ }, [n]), B = w(() => {
352
+ var p;
1674
353
  try {
1675
- (B = A.current) == null || B.stop(), A.current = null, (w = s.current) == null || w.getTracks().forEach((b) => b.stop()), s.current = null, d(null), h(!1), f(!1), l.current = [], C(null);
1676
- } catch (b) {
1677
- console.error("clear failed", b);
354
+ h.current && (h.current.onstop = null, h.current.state !== "inactive" && h.current.stop()), h.current = null, (p = l.current) == null || p.getTracks().forEach((y) => y.stop()), l.current = null, P(null), E(D("clear")), T.current = [], R(null);
355
+ } catch (y) {
356
+ console.error("clear failed", y);
1678
357
  }
1679
358
  }, []);
1680
- return $(() => () => G(), []), {
1681
- start: y,
1682
- stop: S,
1683
- pause: M,
1684
- resume: H,
1685
- clear: G,
1686
- isRecording: c,
1687
- isPaused: u,
1688
- recordedBlob: p,
1689
- error: g,
1690
- getActiveStream: () => s.current
359
+ return U(() => () => B(), []), {
360
+ status: g,
361
+ start: Q,
362
+ stop: ee,
363
+ pause: te,
364
+ resume: se,
365
+ clear: B,
366
+ isRecording: g === "recording" || g === "paused",
367
+ isPaused: g === "paused",
368
+ recordedBlob: x,
369
+ error: W,
370
+ getActiveStream: () => l.current
1691
371
  };
1692
372
  }
1693
- const Dn = (t, e) => {
1694
- const n = t.split(","), r = n[0].match(/:(.*?);/), i = r ? r[1] : "application/octet-stream", a = atob(n[n.length - 1]);
1695
- let o = a.length;
1696
- const A = new Uint8Array(o);
373
+ const Ue = async (t, e = {}) => {
374
+ var s, r, a;
375
+ (s = e.onCaptureStart) == null || s.call(e), await Promise.resolve();
376
+ try {
377
+ const i = t();
378
+ return (r = e.onCaptureComplete) == null || r.call(e, i), i;
379
+ } catch (i) {
380
+ const o = i instanceof Error ? i : new Error(String(i));
381
+ throw (a = e.onError) == null || a.call(e, o), o;
382
+ }
383
+ }, ot = (t = {}) => {
384
+ const { session: e } = oe(), {
385
+ captureFrame: s = e.captureFrame,
386
+ onCaptureStart: r,
387
+ onCaptureComplete: a,
388
+ onError: i
389
+ } = t, [o, c] = b("idle"), [n, u] = b(null), [S, d] = b(null), m = w(async () => {
390
+ c("capturing"), u(null), d(null);
391
+ try {
392
+ const l = await Ue(s, {
393
+ onCaptureStart: r,
394
+ onCaptureComplete: a,
395
+ onError: i
396
+ });
397
+ return u(l), c("completed"), l;
398
+ } catch (l) {
399
+ const T = l instanceof Error ? l : new Error(String(l));
400
+ return d(T), c("error"), null;
401
+ }
402
+ }, [s, r, a, i]), h = w(() => {
403
+ c("idle"), u(null), d(null);
404
+ }, []);
405
+ return { status: o, capturePhoto: m, clear: h, dataUrl: n, error: S };
406
+ }, it = (t, e) => {
407
+ const s = t.split(","), r = s[0].match(/:(.*?);/), a = r ? r[1] : "application/octet-stream", i = atob(s[s.length - 1]);
408
+ let o = i.length;
409
+ const c = new Uint8Array(o);
1697
410
  for (; o--; )
1698
- A[o] = a.charCodeAt(o);
1699
- return new File([A], e, { type: i });
1700
- }, hn = 4, fn = 50, gn = 5e3, He = (t) => new Promise((e) => {
411
+ c[o] = i.charCodeAt(o);
412
+ return new File([c], e, { type: a });
413
+ }, De = 4, Ne = 50, be = 5e3, z = (t) => Math.min(1, Math.max(0, t)), K = (t) => new Promise((e) => {
1701
414
  if (t.readyState >= 4) {
1702
415
  e();
1703
416
  return;
1704
417
  }
1705
- let n = !1;
418
+ let s = !1;
1706
419
  const r = () => {
1707
- n || (n = !0, e());
420
+ s || (s = !0, e());
1708
421
  };
1709
- t.addEventListener("canplaythrough", r, { once: !0 }), t.addEventListener("error", r, { once: !0 }), setTimeout(r, gn);
1710
- }), Ke = (t, e) => {
1711
- const n = document.createElement("audio");
1712
- return n.src = t, n.loop = e, n.preload = "auto", n.setAttribute("playsinline", ""), n.setAttribute("webkit-playsinline", ""), n.load(), n;
1713
- }, pn = (t) => {
422
+ t.addEventListener("canplaythrough", r, { once: !0 }), t.addEventListener("error", r, { once: !0 }), setTimeout(r, be);
423
+ }), $ = (t, e) => {
424
+ const s = document.createElement("audio");
425
+ return s.src = t, s.loop = e, s.preload = "auto", s.setAttribute("playsinline", ""), s.setAttribute("webkit-playsinline", ""), s.load(), s;
426
+ }, Fe = (t) => {
1714
427
  t.muted = !0, t.play().then(() => {
1715
428
  t.pause(), t.currentTime = 0, t.muted = !1;
1716
429
  }).catch(() => {
1717
430
  t.muted = !1;
1718
431
  });
1719
432
  };
1720
- class vn {
433
+ class Oe {
1721
434
  constructor(e = {}) {
1722
- U(this, "sfxPoolSize");
1723
- U(this, "coalesceMs");
1724
- U(this, "muted", !0);
1725
- U(this, "listeners", /* @__PURE__ */ new Set());
1726
- U(this, "music", null);
1727
- U(this, "musicWanted", null);
1728
- U(this, "pools", /* @__PURE__ */ new Map());
435
+ _(this, "sfxPoolSize");
436
+ _(this, "coalesceMs");
437
+ _(this, "muted", !0);
438
+ _(this, "listeners", /* @__PURE__ */ new Set());
439
+ _(this, "music", null);
440
+ _(this, "musicUrl", null);
441
+ _(this, "musicReady", null);
442
+ _(this, "musicWanted", null);
443
+ _(this, "pools", /* @__PURE__ */ new Map());
1729
444
  /** Last play time per SFX URL, for the coalesce window. */
1730
- U(this, "lastPlayed", /* @__PURE__ */ new Map());
445
+ _(this, "lastPlayed", /* @__PURE__ */ new Map());
1731
446
  /** Readiness promises so a loading gate can await decode/buffer. */
1732
- U(this, "ready", /* @__PURE__ */ new Map());
1733
- this.sfxPoolSize = e.sfxPoolSize ?? hn, this.coalesceMs = e.coalesceMs ?? fn;
447
+ _(this, "ready", /* @__PURE__ */ new Map());
448
+ this.sfxPoolSize = e.sfxPoolSize ?? De, this.coalesceMs = e.coalesceMs ?? Ne;
1734
449
  }
1735
450
  /**
1736
451
  * Create + buffer the looping music element. Await in the loading gate so the
1737
452
  * unmute tap is instant. Idempotent per URL (re-requesting the same track is
1738
453
  * a no-op that returns the in-flight promise).
1739
454
  */
1740
- prefetchMusic(e, n = 0.4) {
1741
- this.musicWanted = { url: e, volume: n };
1742
- const r = `music:${e}`, i = this.ready.get(r);
1743
- if (i) return i;
1744
- this.music = Ke(e, !0), this.music.volume = n;
1745
- const a = He(this.music);
1746
- return this.ready.set(r, a), a;
455
+ prefetchMusic(e, s = 0.4) {
456
+ const r = z(s);
457
+ if (this.musicWanted = { url: e, volume: r }, this.musicUrl === e && this.musicReady)
458
+ return this.music && (this.music.volume = r), this.musicReady;
459
+ this.music && (this.music.pause(), this.music.currentTime = 0, this.music.removeAttribute("src"), this.music.load()), this.music = $(e, !0), this.musicUrl = e, this.music.volume = r;
460
+ const a = K(this.music);
461
+ return this.musicReady = a, a;
1747
462
  }
1748
463
  /**
1749
464
  * Create + buffer an SFX voice pool (round-robin so overlapping plays don't
1750
465
  * cut each other off). Returns a promise that resolves when the first element
1751
466
  * buffers. Idempotent per URL.
1752
467
  */
1753
- registerSound(e, n = 1) {
468
+ registerSound(e, s = 1) {
1754
469
  const r = this.ready.get(e);
1755
470
  if (r) return r;
1756
- const i = [];
1757
- for (let o = 0; o < this.sfxPoolSize; o += 1) {
1758
- const A = Ke(e, !1);
1759
- A.volume = n, A.addEventListener("ended", () => {
1760
- A.currentTime = 0;
1761
- }), i.push(A);
471
+ const a = z(s), i = [];
472
+ for (let c = 0; c < this.sfxPoolSize; c += 1) {
473
+ const n = $(e, !1);
474
+ n.volume = a, n.addEventListener("ended", () => {
475
+ n.currentTime = 0;
476
+ }), i.push(n);
1762
477
  }
1763
- this.pools.set(e, { els: i, next: 0, volume: n });
1764
- const a = He(i[0]);
1765
- return this.ready.set(e, a), a;
478
+ this.pools.set(e, { els: i, next: 0, volume: a });
479
+ const o = K(i[0]);
480
+ return this.ready.set(e, o), o;
1766
481
  }
1767
482
  /** Subscribe to mute-state changes (for a toggle UI). Fires immediately with
1768
483
  * the current state. Returns an unsubscribe. */
@@ -1779,7 +494,7 @@ class vn {
1779
494
  * then start the music. All elements are already buffered, so this is instant.
1780
495
  */
1781
496
  setMuted(e) {
1782
- e !== this.muted && (this.muted = e, this.muted || this.pools.forEach((n) => n.els.forEach(pn)), this.applyMusic(), this.listeners.forEach((n) => n(this.muted)));
497
+ e !== this.muted && (this.muted = e, this.muted || this.pools.forEach((s) => s.els.forEach(Fe)), this.applyMusic(), this.listeners.forEach((s) => s(this.muted)));
1783
498
  }
1784
499
  toggleMuted() {
1785
500
  this.setMuted(!this.muted);
@@ -1790,29 +505,30 @@ class vn {
1790
505
  * same sound into one play, and does NO synchronous `currentTime` seek on a
1791
506
  * ready element (the pool rewinds on `ended`, off the hot path).
1792
507
  */
1793
- playOneShot(e, n) {
508
+ playOneShot(e, s) {
1794
509
  if (this.muted) return;
1795
510
  const r = this.pools.get(e);
1796
511
  if (!r) return;
1797
- const i = performance.now();
1798
- if (i - (this.lastPlayed.get(e) ?? -1 / 0) < this.coalesceMs) return;
1799
- this.lastPlayed.set(e, i);
1800
- const a = r.els.length;
512
+ const a = performance.now();
513
+ if (a - (this.lastPlayed.get(e) ?? -1 / 0) < this.coalesceMs) return;
514
+ this.lastPlayed.set(e, a);
515
+ const i = r.els.length;
1801
516
  let o;
1802
- for (let A = 0; A < a; A += 1) {
1803
- const s = r.els[(r.next + A) % a];
1804
- if (s.paused) {
1805
- o = s, r.next = (r.next + A + 1) % a;
517
+ for (let c = 0; c < i; c += 1) {
518
+ const n = r.els[(r.next + c) % i];
519
+ if (n.paused) {
520
+ o = n, r.next = (r.next + c + 1) % i;
1806
521
  break;
1807
522
  }
1808
523
  }
1809
- o || (o = r.els[r.next], r.next = (r.next + 1) % a), o.muted = !1, o.volume = n ?? r.volume, o.currentTime !== 0 && (o.currentTime = 0), o.play().catch(() => {
524
+ o || (o = r.els[r.next], r.next = (r.next + 1) % i), o.muted = !1, o.volume = z(s ?? r.volume), o.currentTime !== 0 && (o.currentTime = 0), o.play().catch(() => {
1810
525
  });
1811
526
  }
1812
527
  /** Request the looping background track (buffer it with prefetchMusic, which
1813
528
  * a loading gate awaits). Remembered while muted; starts on unmute. */
1814
- startMusic(e, n = 0.4) {
1815
- this.musicWanted = { url: e, volume: n }, this.applyMusic();
529
+ startMusic(e, s = 0.4) {
530
+ const r = z(s);
531
+ this.musicUrl !== e && this.prefetchMusic(e, r), this.musicWanted = { url: e, volume: r }, this.applyMusic();
1816
532
  }
1817
533
  stopMusic() {
1818
534
  this.musicWanted = null, this.music && (this.music.pause(), this.music.currentTime = 0);
@@ -1822,40 +538,176 @@ class vn {
1822
538
  }), this.muted && !this.music.paused && this.music.pause());
1823
539
  }
1824
540
  }
1825
- const z = new vn(), Yn = (t, e) => z.prefetchMusic(t, e), Xn = (t, e) => z.registerSound(t, e), Gn = (t, e) => z.startMusic(t, e), Rn = () => z.stopMusic(), On = (t, e) => z.playOneShot(t, e), Pn = (t) => z.setMuted(t), Jn = () => z.toggleMuted(), zn = () => z.isMuted(), Un = (t) => z.onMuteChange(t), Hn = () => {
1826
- const [t, e] = _(z.isMuted());
1827
- return $(() => z.onMuteChange(e), []), t;
541
+ const Ie = (t, e, s) => t === "infinite" || t === "loop" && e < Math.max(1, Math.floor(s)) ? "replay" : "ended", Ge = (t, e, s) => t && e !== s, ke = (t) => Math.min(100, Math.max(0, t)) / 100, ct = le(function({
542
+ src: e,
543
+ playMode: s = "once",
544
+ loopCount: r = 1,
545
+ autoplay: a = !1,
546
+ muted: i = !1,
547
+ volume: o = 100,
548
+ preload: c = "auto",
549
+ onReady: n,
550
+ onPlay: u,
551
+ onPause: S,
552
+ onEnded: d,
553
+ onError: m
554
+ }, h) {
555
+ const l = A(null), T = A(0), g = A(null), E = w(async () => {
556
+ const R = l.current;
557
+ if (R)
558
+ try {
559
+ await R.play();
560
+ } catch (L) {
561
+ const O = L instanceof Error ? L : new Error(String(L));
562
+ throw m == null || m(O), O;
563
+ }
564
+ }, [m]), x = w(() => {
565
+ var R;
566
+ return (R = l.current) == null ? void 0 : R.pause();
567
+ }, []), P = w(() => {
568
+ const R = l.current;
569
+ R && (R.pause(), R.currentTime = 0, T.current = 0);
570
+ }, []);
571
+ de(
572
+ h,
573
+ () => ({
574
+ play: E,
575
+ pause: x,
576
+ stop: P,
577
+ get current() {
578
+ return l.current;
579
+ }
580
+ }),
581
+ [x, E, P]
582
+ ), U(() => {
583
+ T.current = 0, g.current = null;
584
+ }, [e]), U(() => {
585
+ l.current && (l.current.volume = ke(o));
586
+ }, [o]), U(() => {
587
+ Ge(a, g.current, e) && (g.current = e, E().catch(() => {
588
+ }));
589
+ }, [a, e]);
590
+ const W = w(() => {
591
+ T.current += 1;
592
+ const R = Math.max(1, Math.floor(r));
593
+ if (Ie(s, T.current, R) === "replay") {
594
+ const L = l.current;
595
+ L && (L.currentTime = 0, E().catch(() => {
596
+ }));
597
+ return;
598
+ }
599
+ T.current = 0, d == null || d();
600
+ }, [r, d, E, s]);
601
+ return /* @__PURE__ */ f(
602
+ "audio",
603
+ {
604
+ ref: l,
605
+ src: e,
606
+ preload: c,
607
+ autoPlay: !1,
608
+ muted: i,
609
+ loop: !1,
610
+ playsInline: !0,
611
+ style: { display: "none" },
612
+ onCanPlayThrough: n,
613
+ onPlay: u,
614
+ onPause: S,
615
+ onEnded: W,
616
+ onError: () => m == null ? void 0 : m(new Error(`Unable to load audio: ${e}`))
617
+ }
618
+ );
619
+ }), C = new Oe(), ut = (t, e) => C.prefetchMusic(t, e), lt = (t, e) => C.registerSound(t, e), dt = (t, e) => C.startMusic(t, e), mt = () => C.stopMusic(), pt = (t, e) => C.playOneShot(t, e), ht = (t) => C.setMuted(t), ft = () => C.toggleMuted(), Et = () => C.isMuted(), St = (t) => C.onMuteChange(t), Tt = () => {
620
+ const [t, e] = b(C.isMuted());
621
+ return U(() => C.onMuteChange(e), []), t;
1828
622
  };
1829
623
  export {
1830
- Qn as AspectRatioContainer,
1831
- vn as AudioEngine,
1832
- Vn as DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS,
1833
- Zn as DEFAULT_SCREEN_IMAGE_SETTINGS,
1834
- kn as Panel,
1835
- Tn as ScreenImage,
1836
- wn as ScreenSpaceUI,
1837
- Ln as ScreenText,
1838
- Ne as ScreenTransform,
1839
- Fn as SpriteAnimation,
1840
- Rt as TextLabel,
1841
- Wn as VideoBackground,
1842
- qn as XRMediaSource,
1843
- it as XRModel,
1844
- _n as XRProvider,
1845
- er as XRScene,
1846
- z as audio,
1847
- Xe as computeContainScale,
1848
- Dn as dataURLtoFile,
1849
- zn as isMuted,
1850
- Un as onMuteChange,
1851
- On as playOneShot,
1852
- Yn as prefetchMusic,
1853
- Xn as registerSound,
1854
- Pn as setMuted,
1855
- Gn as startMusic,
1856
- Rn as stopMusic,
1857
- Jn as toggleMuted,
1858
- xn as useMediaRecorder,
1859
- Hn as useMuted,
1860
- De as useScreenRectAspect
624
+ st as AspectRatioContainer,
625
+ Oe as AudioEngine,
626
+ ct as AudioPlayer,
627
+ rt as Axes,
628
+ gs as DEFAULT_MATERIAL_FILL,
629
+ Ss as DEFAULT_MESH_RENDERER,
630
+ Ts as DEFAULT_MESH_RENDERER_RENDER_STATE,
631
+ jt as DEFAULT_PIXEL_SNAP_INCREMENT,
632
+ qt as DEFAULT_REFERENCE_PIXELS_PER_UNIT,
633
+ Yt as DEFAULT_SCREEN_GLASS,
634
+ ws as DEFAULT_SCREEN_GRADIENT,
635
+ Zt as DEFAULT_SCREEN_IMAGE_SCENE_SETTINGS,
636
+ Kt as DEFAULT_SCREEN_IMAGE_SETTINGS,
637
+ $t as DEFAULT_SCREEN_SHAPE_SETTINGS,
638
+ Jt as DEFAULT_SCREEN_TEXT_SCENE_SETTINGS,
639
+ Qt as DEFAULT_SCREEN_TEXT_SHADOW_LAYER,
640
+ es as DEFAULT_SCREEN_TRANSFORM_2D,
641
+ ts as DEFAULT_SCREEN_TRANSFORM_ROOT,
642
+ As as DEFAULT_TRANSFORM_3D,
643
+ ss as EXTERNAL_BACKGROUND_RENDER_LAYER,
644
+ xt as LightObject,
645
+ vt as LookAt,
646
+ rs as MAX_RENDER_GROUP_PASSES,
647
+ _s as MaterialFill,
648
+ bs as MeshMaterial,
649
+ Ms as MeshRenderer,
650
+ et as Panel,
651
+ as as PinToMesh,
652
+ Ct as RenderGroupLayer,
653
+ Pt as SceneObjectRenderer,
654
+ ns as ScreenGlassMaterial,
655
+ xs as ScreenGradientMaterial,
656
+ Lt as ScreenImage,
657
+ os as ScreenShape,
658
+ Ut as ScreenSpaceUI,
659
+ Dt as ScreenText,
660
+ ie as ScreenTransform,
661
+ Nt as SequentialRenderPasses,
662
+ at as SpriteAnimation,
663
+ bt as TextLabel,
664
+ vs as Transform3D,
665
+ tt as VideoBackground,
666
+ yt as XRMediaSource,
667
+ ne as XRModel,
668
+ gt as XRProvider,
669
+ At as XRScene,
670
+ C as audio,
671
+ Ft as clientToScreenPixels,
672
+ ce as computeContainScale,
673
+ Cs as createTwoStopGradient,
674
+ it as dataURLtoFile,
675
+ Us as drawNormalizedCrop,
676
+ is as getRenderGroupLayer,
677
+ Et as isMuted,
678
+ cs as mapScreenImageSettingsToProps,
679
+ us as mapScreenTextInnerShadowToProps,
680
+ ls as mapScreenTextSettingsToProps,
681
+ Ot as mediaToScreenPixels,
682
+ ds as mergeScreenShapeSettings,
683
+ ms as mergeScreenTransform2D,
684
+ Rs as normalizeMeshRendererRenderState,
685
+ ps as normalizeScreenGlass,
686
+ Ps as normalizeScreenGradient,
687
+ It as normalizedToScreenPixels,
688
+ St as onMuteChange,
689
+ pt as playOneShot,
690
+ ut as prefetchMusic,
691
+ lt as registerSound,
692
+ hs as renderSequentialPasses,
693
+ Ds as resolveNormalizedCrop,
694
+ fs as resolveScreenTransform2D,
695
+ Gt as screenPixelsToClient,
696
+ kt as screenPixelsToMedia,
697
+ zt as screenPixelsToNormalized,
698
+ Wt as screenPixelsToUnits,
699
+ Xt as screenPointToRay,
700
+ Vt as screenUnitsToPixels,
701
+ ht as setMuted,
702
+ I as smoothNumber,
703
+ Je as smoothVector2,
704
+ Qe as smoothVector3,
705
+ dt as startMusic,
706
+ mt as stopMusic,
707
+ ft as toggleMuted,
708
+ ot as useFrameCapture,
709
+ nt as useMediaRecorder,
710
+ Tt as useMuted,
711
+ ge as useScreenRectAspect,
712
+ Ht as worldToScreenPixels
1861
713
  };