@vincentt-xr/sdk 2.0.0-alpha.0 → 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 (362) hide show
  1. package/GROUNDING.md +1813 -27
  2. package/dist/{DebuggerUI-CEfdddkZ.cjs → DebuggerUI-B45_Gb9d.cjs} +1 -1
  3. package/dist/{DebuggerUI-Dgop6Q6o.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 +22 -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 +74 -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 +4 -2
  28. package/dist/components/FaceRetouch/Background.d.ts +9 -5
  29. package/dist/components/FaceRetouch/FaceRetouch.d.ts +47 -0
  30. package/dist/components/FaceRetouch/index.d.ts +2 -6
  31. package/dist/components/FaceRetouch/landmarkMask.d.ts +4 -6
  32. package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +4 -7
  33. package/dist/components/FaceTracker/index.d.ts +5 -3
  34. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +15 -0
  35. package/dist/components/FaceWarp3D/defaults.d.ts +37 -0
  36. package/dist/components/FaceWarp3D/index.d.ts +3 -0
  37. package/dist/components/FaceWarp3D/warp.d.ts +13 -0
  38. package/dist/components/HandJoints2D/index.d.ts +6 -0
  39. package/dist/components/HandTracker/index.d.ts +2 -2
  40. package/dist/components/HandTracking2D/HandVisual.d.ts +12 -0
  41. package/dist/components/HandTracking2D/index.d.ts +5 -0
  42. package/dist/components/HandTracking2DController/index.d.ts +5 -0
  43. package/dist/components/HandTracking3D/index.d.ts +6 -0
  44. package/dist/components/LightObject/index.d.ts +20 -0
  45. package/dist/components/LookAt/index.d.ts +23 -0
  46. package/dist/components/MeshRenderer/index.d.ts +58 -0
  47. package/dist/components/PerspectiveCamera/index.d.ts +2 -8
  48. package/dist/components/PinToMesh/index.d.ts +47 -0
  49. package/dist/components/RenderGroupLayer/index.d.ts +6 -0
  50. package/dist/components/SceneObjectRenderer/index.d.ts +16 -0
  51. package/dist/components/Screen2D/ScreenTransformFrame.d.ts +11 -0
  52. package/dist/components/Screen2D/ScreenTransformHelpers.d.ts +19 -0
  53. package/dist/components/Screen2D/ScreenTransformInteraction.d.ts +18 -0
  54. package/dist/components/Screen2D/index.d.ts +5 -0
  55. package/dist/components/ScreenGlass/defaults.d.ts +3 -0
  56. package/dist/components/ScreenGlass/index.d.ts +5 -0
  57. package/dist/components/ScreenGlass/shaders.d.ts +2 -0
  58. package/dist/components/ScreenGlass/types.d.ts +10 -0
  59. package/dist/components/ScreenGradient/defaults.d.ts +5 -0
  60. package/dist/components/ScreenGradient/index.d.ts +5 -0
  61. package/dist/components/ScreenGradient/shaders.d.ts +2 -0
  62. package/dist/components/ScreenGradient/types.d.ts +19 -0
  63. package/dist/components/ScreenImage/ScreenImage.d.ts +4 -0
  64. package/dist/components/ScreenImage/components/DynamicTextureSync.d.ts +9 -0
  65. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +9 -0
  66. package/dist/components/ScreenImage/components/ScreenImageFrame.d.ts +9 -0
  67. package/dist/components/ScreenImage/components/ScreenImageTransformFrame.d.ts +9 -0
  68. package/dist/components/ScreenImage/fit.d.ts +52 -0
  69. package/dist/components/ScreenImage/index.d.ts +8 -0
  70. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +9 -0
  71. package/dist/components/ScreenImage/materials/ScreenImageMatcap.d.ts +3 -0
  72. package/dist/components/ScreenImage/source.d.ts +16 -0
  73. package/dist/components/ScreenImage/types.d.ts +37 -0
  74. package/dist/components/ScreenImage/utils/ScreenImageConstants.d.ts +9 -0
  75. package/dist/components/ScreenImage/utils/ScreenImageHelpers.d.ts +4 -0
  76. package/dist/components/ScreenShape/geometry.d.ts +5 -0
  77. package/dist/components/ScreenShape/index.d.ts +5 -0
  78. package/dist/components/ScreenShape/types.d.ts +41 -0
  79. package/dist/components/ScreenSpaceUI/ScreenTransformGuide.d.ts +15 -0
  80. package/dist/components/ScreenSpaceUI/ScreenTransformOverlayGuide.d.ts +9 -0
  81. package/dist/components/ScreenSpaceUI/index.d.ts +2 -0
  82. package/dist/components/ScreenText/components/ScreenTextBody.d.ts +2 -0
  83. package/dist/components/ScreenText/components/ScreenTextTransformFrame.d.ts +9 -0
  84. package/dist/components/ScreenText/constants.d.ts +5 -0
  85. package/dist/components/ScreenText/index.d.ts +6 -0
  86. package/dist/components/ScreenText/types.d.ts +31 -0
  87. package/dist/components/ScreenText/utils/ScreenTextHelpers.d.ts +14 -0
  88. package/dist/components/ScreenText/utils/ScreenTextMappings.d.ts +17 -0
  89. package/dist/components/SequentialRenderPasses/index.d.ts +6 -0
  90. package/dist/components/TextLabel/TextLabel.d.ts +5 -0
  91. package/dist/components/TextLabel/alignment.d.ts +4 -0
  92. package/dist/components/TextLabel/bend.d.ts +9 -0
  93. package/dist/components/TextLabel/canvas/buildTextLabelTexture.d.ts +4 -0
  94. package/dist/components/TextLabel/canvas/canvasTypography.d.ts +13 -0
  95. package/dist/components/TextLabel/canvas/drawBackground.d.ts +21 -0
  96. package/dist/components/TextLabel/canvas/drawEffects.d.ts +34 -0
  97. package/dist/components/TextLabel/canvas/drawText.d.ts +19 -0
  98. package/dist/components/TextLabel/components/TextLabelMesh.d.ts +13 -0
  99. package/dist/components/TextLabel/constants.d.ts +2 -0
  100. package/dist/components/TextLabel/hooks/useTextLabelTexture.d.ts +7 -0
  101. package/dist/components/TextLabel/index.d.ts +2 -62
  102. package/dist/components/TextLabel/layout/measurement.d.ts +8 -0
  103. package/dist/components/TextLabel/layout/resolveTextLayout.d.ts +25 -0
  104. package/dist/components/TextLabel/layout/wrapText.d.ts +6 -0
  105. package/dist/components/TextLabel/types.d.ts +227 -0
  106. package/dist/components/TrackingAnchor/index.d.ts +18 -2
  107. package/dist/components/Transform3D/index.d.ts +30 -0
  108. package/dist/components/XRMediaSurface/index.d.ts +6 -6
  109. package/dist/components/XRScene/index.d.ts +14 -3
  110. package/dist/components/XRViewport/XRViewport.d.ts +11 -0
  111. package/dist/components/XRViewport/components/HiddenMedia.d.ts +7 -0
  112. package/dist/components/XRViewport/components/MediaAssetPicker.d.ts +8 -0
  113. package/dist/components/XRViewport/components/MediaControlStack.d.ts +13 -0
  114. package/dist/components/XRViewport/components/XRViewportLayers.d.ts +30 -0
  115. package/dist/components/XRViewport/constants.d.ts +24 -0
  116. package/dist/components/XRViewport/contexts.d.ts +6 -0
  117. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +13 -0
  118. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +16 -0
  119. package/dist/components/XRViewport/hooks/useViewportMediaTexture.d.ts +10 -0
  120. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +41 -0
  121. package/dist/components/XRViewport/hooks/useViewportRenderState.d.ts +47 -0
  122. package/dist/components/XRViewport/index.d.ts +3 -101
  123. package/dist/components/XRViewport/layout.d.ts +16 -0
  124. package/dist/components/XRViewport/slots.d.ts +16 -0
  125. package/dist/components/XRViewport/types.d.ts +89 -0
  126. package/dist/components/XRViewport/useViewportSize.d.ts +3 -0
  127. package/dist/components/index.d.ts +19 -0
  128. package/dist/contexts-BKvTIayr.cjs +1 -0
  129. package/dist/contexts-Bk5zz_VR.js +214 -0
  130. package/dist/debug-ui/component-editor/index.d.ts +19 -0
  131. package/dist/debug-ui/default-setting/index.d.ts +37 -0
  132. package/dist/debug-ui/default-setting.cjs +21 -0
  133. package/dist/debug-ui/default-setting.js +777 -0
  134. package/dist/debug-ui/face-mesh-renderer-settings/index.d.ts +8 -0
  135. package/dist/debug-ui/face-retouch/index.d.ts +11 -0
  136. package/dist/debug-ui/face-warp-3d/index.d.ts +6 -0
  137. package/dist/debug-ui/hand-joints-2d/index.d.ts +6 -0
  138. package/dist/debug-ui/hand-tracking-2d/index.d.ts +6 -0
  139. package/dist/debug-ui/hand-tracking-2d-controller/index.d.ts +6 -0
  140. package/dist/debug-ui/hand-tracking-3d/index.d.ts +6 -0
  141. package/dist/debug-ui/hierarchy-panel/index.d.ts +29 -0
  142. package/dist/debug-ui/index.d.ts +46 -0
  143. package/dist/debug-ui/layer-panel/index.d.ts +18 -0
  144. package/dist/debug-ui/media-source/MediaSourceSwitcher.d.ts +10 -0
  145. package/dist/debug-ui/media-source/index.d.ts +6 -0
  146. package/dist/debug-ui/media-source/media-preset.d.ts +9 -0
  147. package/dist/debug-ui/media-source/session.d.ts +12 -0
  148. package/dist/debug-ui/media-source.cjs +1 -0
  149. package/dist/debug-ui/media-source.js +9 -0
  150. package/dist/debug-ui/mesh-renderer-settings/index.d.ts +6 -0
  151. package/dist/debug-ui/object-inspector-panel/index.d.ts +25 -0
  152. package/dist/debug-ui/pin-to-mesh-settings/index.d.ts +10 -0
  153. package/dist/debug-ui/scene-editor/context.d.ts +38 -0
  154. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +9 -0
  155. package/dist/debug-ui/scene-editor/index.d.ts +11 -0
  156. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +7 -0
  157. package/dist/debug-ui/scene-editor/store-utils.d.ts +2 -0
  158. package/dist/debug-ui/scene-editor/viewport-toolbar.d.ts +4 -0
  159. package/dist/debug-ui/scene-editor/viewport.d.ts +21 -0
  160. package/dist/debug-ui/screen-glass-settings/index.d.ts +6 -0
  161. package/dist/debug-ui/screen-gradient-settings/GradientStopsEditor.d.ts +5 -0
  162. package/dist/debug-ui/screen-gradient-settings/index.d.ts +6 -0
  163. package/dist/debug-ui/screen-gradient-settings/styles.d.ts +3 -0
  164. package/dist/debug-ui/screen-image-settings/index.d.ts +9 -0
  165. package/dist/debug-ui/screen-shape-settings/index.d.ts +6 -0
  166. package/dist/debug-ui/screen-text-settings/NumberField.d.ts +9 -0
  167. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +3 -0
  168. package/dist/debug-ui/screen-text-settings/controls/NestedSection.d.ts +7 -0
  169. package/dist/debug-ui/screen-text-settings/controls/Section.d.ts +8 -0
  170. package/dist/debug-ui/screen-text-settings/controls/icons.d.ts +4 -0
  171. package/dist/debug-ui/screen-text-settings/index.d.ts +2 -0
  172. package/dist/debug-ui/screen-text-settings/sections/BackgroundSection.d.ts +8 -0
  173. package/dist/debug-ui/screen-text-settings/sections/ContentSection.d.ts +5 -0
  174. package/dist/debug-ui/screen-text-settings/sections/EffectsSection.d.ts +25 -0
  175. package/dist/debug-ui/screen-text-settings/sections/StyleSection.d.ts +5 -0
  176. package/dist/debug-ui/screen-text-settings/sections/TransformSection.d.ts +5 -0
  177. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundFillControls.d.ts +2 -0
  178. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundSizeControls.d.ts +2 -0
  179. package/dist/debug-ui/screen-text-settings/sections/background/BackgroundStrokeControls.d.ts +2 -0
  180. package/dist/debug-ui/screen-text-settings/sections/background/types.d.ts +7 -0
  181. package/dist/debug-ui/screen-text-settings/sections/effects/BendEffectSection.d.ts +4 -0
  182. package/dist/debug-ui/screen-text-settings/sections/effects/EffectChrome.d.ts +21 -0
  183. package/dist/debug-ui/screen-text-settings/sections/effects/GlowEffectSection.d.ts +4 -0
  184. package/dist/debug-ui/screen-text-settings/sections/effects/InnerShadowEffectSection.d.ts +4 -0
  185. package/dist/debug-ui/screen-text-settings/sections/effects/OutlineEffectSection.d.ts +4 -0
  186. package/dist/debug-ui/screen-text-settings/sections/effects/ShadowEffectSection.d.ts +4 -0
  187. package/dist/debug-ui/screen-text-settings/sections/effects/types.d.ts +14 -0
  188. package/dist/debug-ui/screen-text-settings/settings.d.ts +90 -0
  189. package/dist/debug-ui/screen-text-settings/styles.d.ts +26 -0
  190. package/dist/debug-ui/screen-text-settings/transform.d.ts +6 -0
  191. package/dist/debug-ui/screen-text-settings/types.d.ts +9 -0
  192. package/dist/debug-ui/settings-panel/index.d.ts +38 -0
  193. package/dist/debug-ui/shared/MaterialSection.d.ts +13 -0
  194. package/dist/debug-ui/shared/ScreenTransformSection.d.ts +32 -0
  195. package/dist/debug-ui/transform-3d-settings/index.d.ts +11 -0
  196. package/dist/debug-ui.cjs +10 -0
  197. package/dist/debug-ui.js +8861 -0
  198. package/dist/drawNormalizedCrop-B-7zU-Xw.cjs +1 -0
  199. package/dist/drawNormalizedCrop-CRdIDyl1.js +44 -0
  200. package/dist/entries/all.d.ts +1 -0
  201. package/dist/entries/core.d.ts +55 -4
  202. package/dist/entries/face-effects.d.ts +12 -8
  203. package/dist/entries/internal.d.ts +1 -1
  204. package/dist/entries/low-level.d.ts +21 -4
  205. package/dist/entries/scene-object.d.ts +10 -0
  206. package/dist/entries/tracking.d.ts +25 -2
  207. package/dist/face-action/index.d.ts +34 -0
  208. package/dist/face-attribute-expression/index.d.ts +10 -0
  209. package/dist/face-effects.cjs +1 -252
  210. package/dist/face-effects.js +1404 -2613
  211. package/dist/face-info/blendshapes.d.ts +3 -0
  212. package/dist/face-info/derive.d.ts +8 -0
  213. package/dist/face-info/drawFaceCrop.d.ts +10 -0
  214. package/dist/face-info/getFaceInfo.d.ts +8 -0
  215. package/dist/face-info/index.d.ts +8 -0
  216. package/dist/face-info/landmarks.d.ts +21 -0
  217. package/dist/face-info/types.d.ts +52 -0
  218. package/dist/getFaceInfo-CyPAKh3h.cjs +1 -0
  219. package/dist/getFaceInfo-hUKMLFcr.js +118 -0
  220. package/dist/hand/handJoints2d.d.ts +49 -0
  221. package/dist/hand/handTracking2d.d.ts +33 -0
  222. package/dist/hand/handTracking2dController.d.ts +65 -0
  223. package/dist/hand/handTracking3d.d.ts +52 -0
  224. package/dist/hooks/faceResults.d.ts +1 -1
  225. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  226. package/dist/hooks/useFaceAction.d.ts +3 -0
  227. package/dist/hooks/useFaceAttributeExpression.d.ts +16 -0
  228. package/dist/hooks/useFaceDetection.d.ts +18 -0
  229. package/dist/hooks/useFaceInfo.d.ts +7 -0
  230. package/dist/hooks/useFaceInfos.d.ts +15 -0
  231. package/dist/hooks/useFaceResultReader.d.ts +10 -0
  232. package/dist/hooks/useFrameCapture.d.ts +18 -0
  233. package/dist/hooks/useMediaRecorder.d.ts +14 -2
  234. package/dist/hooks/useOwnedTexture.d.ts +6 -0
  235. package/dist/hooks/useTrackerContext.d.ts +2 -2
  236. package/dist/hooks/useXRSession/facade.d.ts +3 -0
  237. package/dist/hooks/useXRSession/registry.d.ts +9 -0
  238. package/dist/index-82aENaRq.cjs +1 -0
  239. package/dist/{index-BD-JWMjE.js → index-BgQAX8rs.js} +198 -134
  240. package/dist/index-CEc1CAmB.cjs +1 -0
  241. package/dist/index-CTHeBQOs.js +178 -0
  242. package/dist/index-D4bLzBr6.cjs +1 -0
  243. package/dist/index-DSpzjuqd.cjs +1 -0
  244. package/dist/index-Di70KWuY.js +2049 -0
  245. package/dist/index-DzEzkBIH.cjs +17 -0
  246. package/dist/{index-CYMj26Ej.js → index-JygePOwo.js} +565 -498
  247. package/dist/index-UC0Ux38E.js +111 -0
  248. package/dist/{internal-KOKJDxCG.js → internal-DuMPpcbp.js} +86 -80
  249. package/dist/internal-i2JkM85N.cjs +1 -0
  250. package/dist/internal.cjs +1 -1
  251. package/dist/internal.js +2 -2
  252. package/dist/low-level.cjs +1 -1
  253. package/dist/low-level.js +959 -632
  254. package/dist/main.cjs +1 -1
  255. package/dist/main.js +556 -455
  256. package/dist/material/MaterialFill.d.ts +20 -0
  257. package/dist/material/MeshMaterial.d.ts +14 -0
  258. package/dist/material/index.d.ts +2 -0
  259. package/dist/models/Body/index.d.ts +1 -1
  260. package/dist/models/Face/index.d.ts +1 -0
  261. package/dist/models/Face/rotation.d.ts +3 -0
  262. package/dist/models/Hand/HandTracking.d.ts +2 -0
  263. package/dist/render/layerStack.d.ts +29 -0
  264. package/dist/render/renderGroups.d.ts +47 -0
  265. package/dist/render/renderPasses.d.ts +18 -0
  266. package/dist/renderGroups-C9QJrAXu.js +152 -0
  267. package/dist/renderGroups-Dvm1J4lW.cjs +1 -0
  268. package/dist/renderLayers-lDtL0_43.cjs +1 -0
  269. package/dist/renderLayers-zrK2pv5O.js +13 -0
  270. package/dist/renderPasses-CT5iBwtg.cjs +21 -0
  271. package/dist/renderPasses-CjgG_6kQ.js +1500 -0
  272. package/dist/scene-object/index.d.ts +146 -0
  273. package/dist/scene-object/runtimeRegistry.d.ts +14 -0
  274. package/dist/scene-object.cjs +1 -0
  275. package/dist/scene-object.js +40 -0
  276. package/dist/screen-image/screenImagePresets.d.ts +13 -0
  277. package/dist/screen-image/screenImageSettings.d.ts +57 -0
  278. package/dist/screen-text/screenTextPresets.d.ts +6 -0
  279. package/dist/screen-text/screenTextSettings.d.ts +147 -0
  280. package/dist/screen2d/coordinates.d.ts +87 -0
  281. package/dist/screen2d/index.d.ts +7 -0
  282. package/dist/screen2d/material-runtime.d.ts +32 -0
  283. package/dist/screen2d/screenTransform.d.ts +47 -0
  284. package/dist/screen2d/smoothing.d.ts +5 -0
  285. package/dist/screen2d/texture.d.ts +10 -0
  286. package/dist/screen2d/transform.d.ts +25 -0
  287. package/dist/screen2d/types.d.ts +90 -0
  288. package/dist/{selectors-Bub0o3qy.cjs → selectors-2QvO5RYY.cjs} +1 -1
  289. package/dist/{selectors-BHO6TnoC.js → selectors-Dw3C-gSk.js} +5 -5
  290. package/dist/services/MetricsCollector/index.d.ts +7 -1
  291. package/dist/services/MetricsCollector/utils.d.ts +1 -1
  292. package/dist/session-BChR4TgK.cjs +31 -0
  293. package/dist/session-C1StwN0f.js +363 -0
  294. package/dist/texture/animatedTexture.d.ts +61 -0
  295. package/dist/texture/animationMath.d.ts +8 -0
  296. package/dist/texture/sourceResolver.d.ts +30 -0
  297. package/dist/tracking.cjs +1 -1
  298. package/dist/tracking.js +582 -298
  299. package/dist/types/face.d.ts +1 -13
  300. package/dist/types/hand-tracking.d.ts +8 -0
  301. package/dist/types/index.d.ts +0 -1
  302. package/dist/types/nodes.d.ts +4 -1
  303. package/dist/types/session.d.ts +2 -0
  304. package/dist/types/tracking.d.ts +8 -2
  305. package/dist/types/util-types.d.ts +1 -1
  306. package/dist/useFaceInfo-C-WfMlYp.cjs +1 -0
  307. package/dist/useFaceInfo-CwsHZedC.js +62 -0
  308. package/dist/useFaceResults-CkFc1egZ.js +19 -0
  309. package/dist/useFaceResults-VcFdOUFV.cjs +1 -0
  310. package/dist/utils/drawNormalizedCrop.d.ts +22 -0
  311. package/dist/utils/integrity.d.ts +4 -25
  312. package/dist/utils/landmarkBounds.d.ts +1 -1
  313. package/dist/utils/logger.d.ts +2 -2
  314. package/dist/x-Co8jPhP0.js +127 -0
  315. package/dist/x-KC8E4Gaj.cjs +41 -0
  316. package/docs/MIGRATION_GUIDE.md +589 -0
  317. package/docs/SDK_DOCUMENTATION.md +1155 -0
  318. package/docs/api/audio.mdx +36 -0
  319. package/docs/api/behavior-components.mdx +164 -0
  320. package/docs/api/capture-recording.mdx +103 -0
  321. package/docs/api/debug-ui-scene-editor.mdx +249 -0
  322. package/docs/api/face-actions.mdx +104 -0
  323. package/docs/api/face-attribute-expression.mdx +87 -0
  324. package/docs/api/face-binding-anchors.mdx +53 -0
  325. package/docs/api/face-effects.mdx +19 -0
  326. package/docs/api/face-info.mdx +112 -0
  327. package/docs/api/face-mesh.mdx +98 -0
  328. package/docs/api/face-painting.mdx +33 -0
  329. package/docs/api/face-retouching.mdx +73 -0
  330. package/docs/api/material-render-state.mdx +132 -0
  331. package/docs/api/runtime-3d.mdx +311 -0
  332. package/docs/api/scene-object-store.mdx +213 -0
  333. package/docs/api/screen-image.mdx +41 -0
  334. package/docs/api/screen-shape.mdx +64 -0
  335. package/docs/api/screen-space-coordinates.mdx +41 -0
  336. package/docs/api/screen-text.mdx +39 -0
  337. package/docs/api/texture-sources.mdx +55 -0
  338. package/docs/api/trackers.mdx +46 -0
  339. package/docs/docs.json +70 -0
  340. package/docs/examples/scene-object-recipes.mdx +194 -0
  341. package/docs/guides/harness-debug-ui.mdx +139 -0
  342. package/docs/inspector/hierarchy-panel.mdx +51 -0
  343. package/docs/inspector/object-inspector-panel.mdx +51 -0
  344. package/docs/introduction.mdx +121 -0
  345. package/docs/scene-objects/overview.mdx +127 -0
  346. package/docs/scene-objects/render-groups.mdx +77 -0
  347. package/docs/scene-objects/runtime-rendering.mdx +75 -0
  348. package/docs/texture-api-consumer.md +58 -0
  349. package/package.json +55 -7
  350. package/dist/components/FaceRetouch/retouchRegions.d.ts +0 -23
  351. package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +0 -12
  352. package/dist/index-B5J4gzn2.cjs +0 -1
  353. package/dist/index-BVBVg96G.cjs +0 -1
  354. package/dist/index-DtwHElmG.js +0 -157
  355. package/dist/index-PtFmD6B8.cjs +0 -1
  356. package/dist/internal-DH5d1Xnq.cjs +0 -1
  357. package/dist/modules/XRClient/index.d.ts +0 -9
  358. package/dist/modules/index.d.ts +0 -1
  359. package/dist/services/ApiService.d.ts +0 -12
  360. package/dist/types/client.d.ts +0 -3
  361. package/dist/useFaceResults-cpsSmKKc.js +0 -81
  362. package/dist/useFaceResults-hVUJYSEY.cjs +0 -1
@@ -37,7 +37,7 @@ export type FaceRawTrackingData = {
37
37
  transformationMatrix?: Matrix;
38
38
  };
39
39
  /**
40
- * 2D face landmark in normalized image space (0..1 across both axes).
40
+ * 2D face landmark in normalized tracker-input space (0..1 across both axes).
41
41
  */
42
42
  export type FaceLandmark2D = {
43
43
  x: number;
@@ -53,15 +53,3 @@ export type BoundingBox = {
53
53
  width: number;
54
54
  height: number;
55
55
  };
56
- /**
57
- * Elliptical region used by the face-retouch shader. All coordinates are
58
- * in normalized image space (0..1).
59
- */
60
- export type FaceRetouchRegion = {
61
- centerX: number;
62
- centerY: number;
63
- radiusX: number;
64
- radiusY: number;
65
- strength: number;
66
- kind: "face" | "feature";
67
- };
@@ -1,5 +1,13 @@
1
1
  import { Coordinate } from './common';
2
+ export type Handedness = "left" | "right";
2
3
  export type HandData = {
3
4
  coordinates?: Coordinate[];
4
5
  gesture?: "closed_fist" | "open_palm";
6
+ handedness?: Handedness;
7
+ };
8
+ export type HandTrackingData = {
9
+ hands?: HandData[];
10
+ coordinates?: Coordinate[];
11
+ gesture?: HandData["gesture"];
12
+ handedness?: Handedness;
5
13
  };
@@ -1,4 +1,3 @@
1
- export * from './client';
2
1
  export * from './nodes';
3
2
  export * from './session';
4
3
  export * from './body';
@@ -1,5 +1,5 @@
1
1
  import { FaceLandmarkerResult } from '@mediapipe/tasks-vision';
2
- import { Texture } from 'three';
2
+ import { Texture, Camera } from 'three';
3
3
  import { Coordinate } from './common';
4
4
  import { Face, FaceRawTrackingData } from './face';
5
5
  import { GestureData } from './gesture-tracking';
@@ -20,8 +20,10 @@ export type XRModelNodeBodyTracking = {
20
20
  getLandmarks2D: (bodyIndex?: number) => Coordinate[] | undefined;
21
21
  };
22
22
  export type XRModelNodeHandTracking = {
23
+ hands?: HandData[];
23
24
  coordinates?: HandData["coordinates"];
24
25
  gesture?: HandData["gesture"];
26
+ handedness?: HandData["handedness"];
25
27
  };
26
28
  export type XRModelNodeGestureTracking = {
27
29
  coordinates?: GestureData["coordinates"];
@@ -32,4 +34,5 @@ export type XRModelNodeFaceTracking = {
32
34
  getDetectionResults: () => FaceLandmarkerResult | undefined;
33
35
  getFace: (faceIndex?: number) => Face | undefined;
34
36
  getRawFaceTrackingData: (faceIndex?: number) => FaceRawTrackingData | undefined;
37
+ setCamera: (camera: Camera, faceIndex?: number) => void;
35
38
  };
@@ -98,5 +98,7 @@ export type XRSession = {
98
98
  * Throws `XRError` if called before `<XRScene>` has mounted.
99
99
  */
100
100
  captureFrame: () => string;
101
+ /** Current tracker-input frame. Read-only; reused and repainted by the session. */
102
+ getInputFrame: () => OffscreenCanvas | HTMLCanvasElement | null;
101
103
  };
102
104
  export {};
@@ -9,7 +9,13 @@
9
9
  * The lists below are the v1 enumeration. New entries can be added
10
10
  * non-breakingly as additional landmarks/joints become supported.
11
11
  */
12
- export type FaceTarget = "face.forehead" | "face.noseTip" | "face.chin" | "face.leftEyeOuter" | "face.rightEyeOuter" | "face.leftCheek" | "face.rightCheek" | "face.mouthCenter";
12
+ export type FaceTarget = "face.custom" | "face.center" | "face.forehead" | "face.noseTip" | "face.chin" | "face.leftEyeOuter" | "face.rightEyeOuter" | "face.leftCheek" | "face.rightCheek" | "face.mouthCenter" | "face.leftEye" | "face.rightEye" | "face.leftEarlobe" | "face.rightEarlobe";
13
+ /** Face-local point: X/Y are clamped to [-1, 1], origin is face center, and +Z points toward camera. */
14
+ export type FaceCustomAnchorPoint = {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ };
13
19
  export type HandTarget = "hand.wrist" | "hand.thumbTip" | "hand.indexTip" | "hand.middleTip" | "hand.ringTip" | "hand.pinkyTip" | "hand.indexBase" | "hand.middleBase" | "hand.ringBase" | "hand.pinkyBase";
14
20
  export type BodyTarget = "body.head" | "body.neck" | "body.leftShoulder" | "body.rightShoulder" | "body.leftElbow" | "body.rightElbow" | "body.leftWrist" | "body.rightWrist" | "body.leftHip" | "body.rightHip" | "body.leftKnee" | "body.rightKnee" | "body.leftAnkle" | "body.rightAnkle";
15
21
  /**
@@ -20,7 +26,7 @@ export type TrackingTarget = FaceTarget | HandTarget | BodyTarget;
20
26
  * Tracker type identifier exposed via tracker context.
21
27
  */
22
28
  export type TrackerType = "face" | "hand" | "body";
23
- export declare const FACE_TARGETS: readonly ["face.forehead", "face.noseTip", "face.chin", "face.leftEyeOuter", "face.rightEyeOuter", "face.leftCheek", "face.rightCheek", "face.mouthCenter"];
29
+ export declare const FACE_TARGETS: readonly ["face.center", "face.forehead", "face.noseTip", "face.chin", "face.leftEyeOuter", "face.rightEyeOuter", "face.leftCheek", "face.rightCheek", "face.mouthCenter", "face.leftEye", "face.rightEye", "face.leftEarlobe", "face.rightEarlobe", "face.custom"];
24
30
  export declare const HAND_TARGETS: readonly ["hand.wrist", "hand.thumbTip", "hand.indexTip", "hand.middleTip", "hand.ringTip", "hand.pinkyTip", "hand.indexBase", "hand.middleBase", "hand.ringBase", "hand.pinkyBase"];
25
31
  export declare const BODY_TARGETS: readonly ["body.head", "body.neck", "body.leftShoulder", "body.rightShoulder", "body.leftElbow", "body.rightElbow", "body.leftWrist", "body.rightWrist", "body.leftHip", "body.rightHip", "body.leftKnee", "body.rightKnee", "body.leftAnkle", "body.rightAnkle"];
26
32
  /**
@@ -1 +1 @@
1
- export type Class<T> = new (...args: any[]) => T;
1
+ export type Class<T> = new (...args: never[]) => T;
@@ -0,0 +1 @@
1
+ "use strict";const R=require("@react-three/fiber"),m=require("react"),q=require("./index-D4bLzBr6.cjs"),h=require("./getFaceInfo-CyPAKh3h.cjs"),N=require("./index-82aENaRq.cjs"),x=({active:t=!0,holdMs:r=250,numFaces:o=1,targetFps:e,throttleMs:a=16}={})=>{const{camera:d}=R.useThree(),f=Number.isFinite(o)?Math.max(1,Math.round(o)):1,u=e!==void 0&&Number.isFinite(e)&&e>0?e:void 0,c=m.useMemo(()=>({numFaces:f,...u?{targetFps:u}:{}}),[f,u]),{node:n,ready:M}=N.useXRModel(q.XRModel.FACE_TRACKER,c,t);m.useEffect(()=>{if(n)for(let s=0;s<c.numFaces;s+=1)n.setCamera(d,s)},[c.numFaces,d,n]);const b=m.useCallback(s=>{if(!n)return[];const F=[];for(let i=0;i<s.faceLandmarks.length;i+=1){const l=h.getFaceInfoFromResults(n,s,i);l&&F.push(l)}return F},[n]);return h.useFaceResultReader({enabled:t&&M,holdMs:Number.isFinite(r)?Math.max(0,r):250,node:n,prepare:b,throttleMs:Number.isFinite(a)?Math.max(0,a):16})},I=({faceIndex:t=0,numFaces:r,...o}={})=>{const e=Number.isFinite(t)?Math.max(0,Math.round(t)):0;return x({...o,numFaces:Math.max(r??e+1,e+1)})[e]??null};exports.useFaceInfo=I;exports.useFaceInfos=x;
@@ -0,0 +1,62 @@
1
+ import { useThree as M } from "@react-three/fiber";
2
+ import { useMemo as p, useEffect as x, useCallback as b } from "react";
3
+ import { X as R } from "./index-JygePOwo.js";
4
+ import { g as N, u as C } from "./getFaceInfo-hUKMLFcr.js";
5
+ import { u as v } from "./index-BgQAX8rs.js";
6
+ const E = ({
7
+ active: r = !0,
8
+ holdMs: t = 250,
9
+ numFaces: a = 1,
10
+ targetFps: e,
11
+ throttleMs: n = 16
12
+ } = {}) => {
13
+ const { camera: c } = M(), f = Number.isFinite(a) ? Math.max(1, Math.round(a)) : 1, u = e !== void 0 && Number.isFinite(e) && e > 0 ? e : void 0, i = p(
14
+ () => ({
15
+ numFaces: f,
16
+ ...u ? { targetFps: u } : {}
17
+ }),
18
+ [f, u]
19
+ ), { node: s, ready: l } = v(
20
+ R.FACE_TRACKER,
21
+ i,
22
+ r
23
+ );
24
+ x(() => {
25
+ if (s)
26
+ for (let o = 0; o < i.numFaces; o += 1)
27
+ s.setCamera(c, o);
28
+ }, [i.numFaces, c, s]);
29
+ const h = b(
30
+ (o) => {
31
+ if (!s) return [];
32
+ const d = [];
33
+ for (let m = 0; m < o.faceLandmarks.length; m += 1) {
34
+ const F = N(s, o, m);
35
+ F && d.push(F);
36
+ }
37
+ return d;
38
+ },
39
+ [s]
40
+ );
41
+ return C({
42
+ enabled: r && l,
43
+ holdMs: Number.isFinite(t) ? Math.max(0, t) : 250,
44
+ node: s,
45
+ prepare: h,
46
+ throttleMs: Number.isFinite(n) ? Math.max(0, n) : 16
47
+ });
48
+ }, I = ({
49
+ faceIndex: r = 0,
50
+ numFaces: t,
51
+ ...a
52
+ } = {}) => {
53
+ const e = Number.isFinite(r) ? Math.max(0, Math.round(r)) : 0;
54
+ return E({
55
+ ...a,
56
+ numFaces: Math.max(t ?? e + 1, e + 1)
57
+ })[e] ?? null;
58
+ };
59
+ export {
60
+ I as a,
61
+ E as u
62
+ };
@@ -0,0 +1,19 @@
1
+ import { useCallback as c } from "react";
2
+ import { p as l, u as m } from "./getFaceInfo-hUKMLFcr.js";
3
+ const R = ({
4
+ node: e,
5
+ enabled: a,
6
+ selectedSource: r,
7
+ throttleMs: s = 16,
8
+ holdMs: t = 250,
9
+ onFrame: u
10
+ }) => {
11
+ const o = c(
12
+ (p) => l(p.faceLandmarks ?? []),
13
+ [r]
14
+ );
15
+ return m({ enabled: a, holdMs: t, node: e, onFrame: u, prepare: o, throttleMs: s });
16
+ };
17
+ export {
18
+ R as u
19
+ };
@@ -0,0 +1 @@
1
+ "use strict";const o=require("react"),e=require("./getFaceInfo-CyPAKh3h.cjs"),R=({node:s,enabled:a,selectedSource:r,throttleMs:t=16,holdMs:c=250,onFrame:u})=>{const n=o.useCallback(l=>e.prepareCalibrationFaceResults(l.faceLandmarks??[]),[r]);return e.useFaceResultReader({enabled:a,holdMs:c,node:s,onFrame:u,prepare:n,throttleMs:t})};exports.useFaceResults=R;
@@ -0,0 +1,22 @@
1
+ export type NormalizedCropBounds = Readonly<{
2
+ minX: number;
3
+ minY: number;
4
+ maxX: number;
5
+ maxY: number;
6
+ }>;
7
+ export type CropOutputSize = Readonly<{
8
+ width: number;
9
+ height: number;
10
+ }>;
11
+ export type DrawNormalizedCropOptions = {
12
+ source: CanvasImageSource;
13
+ bounds: NormalizedCropBounds;
14
+ canvas: HTMLCanvasElement;
15
+ outputSize: CropOutputSize;
16
+ /** Fraction of the detected width/height added on every side. Default 0. */
17
+ padding?: number;
18
+ };
19
+ /** Resolves a padded, aspect-correct crop in normalized source coordinates. */
20
+ export declare const resolveNormalizedCrop: (bounds: NormalizedCropBounds, sourceSize: CropOutputSize, outputSize: CropOutputSize, padding?: number) => NormalizedCropBounds | null;
21
+ /** Draws a normalized source crop into caller-owned canvas storage. */
22
+ export declare const drawNormalizedCrop: ({ source, bounds, canvas, outputSize, padding, }: DrawNormalizedCropOptions) => boolean;
@@ -1,30 +1,9 @@
1
- /**
2
- * Subresource-integrity verification for CDN-hosted model + mesh assets.
3
- *
4
- * The SDK fetches MediaPipe tracker weights, the canonical face mesh, and
5
- * the head-occluder GLB from `cdn.vincentt.studio`. None of those are
6
- * served with SRI script-attributes (they aren't <script> tags) and the
7
- * S3+CloudFront setup does not sign content, so a CDN/origin compromise
8
- * would silently backdoor ML inference and 3D models for every viewer.
9
- *
10
- * This module verifies fetched bytes against a hash baked into the SDK
11
- * at publish time. The manifest is generated by
12
- * `scripts/generate-integrity-manifest.ts` — when an asset is republished
13
- * on the CDN, re-run the script and commit the new hash with the new SDK
14
- * version. The hash travels with the SDK code, not with the asset.
15
- *
16
- * Consumers: the canonical face OBJ, MediaPipe tracker .task files
17
- * (fed via `modelAssetBuffer`), and the head-occluder GLB (parsed with
18
- * GLTFLoader.parse from the verified buffer). drei's `useGLTF` is
19
- * bypassed because it owns the fetch — we need to own it to verify.
20
- */
21
1
  export type IntegrityHash = `sha384-${string}`;
22
2
  /**
23
3
  * Keys are URL pathnames relative to the asset origin
24
4
  * (e.g. "/assets/xr/canonical_face_model.obj"). Populated by
25
- * `scripts/generate-integrity-manifest.ts`. An empty manifest puts
26
- * fetchAndVerify in best-effort mode — once entries are added, missing
27
- * entries can be promoted to hard errors.
5
+ * `scripts/generate-integrity-manifest.ts`. Missing hashes fail closed for
6
+ * SDK-owned CDN URLs; consumer-owned custom URLs remain best-effort.
28
7
  */
29
8
  export declare const INTEGRITY_MANIFEST: Record<string, IntegrityHash>;
30
9
  /**
@@ -32,8 +11,8 @@ export declare const INTEGRITY_MANIFEST: Record<string, IntegrityHash>;
32
11
  * ArrayBuffer on success. Throws if the fetch fails or the manifest hash
33
12
  * doesn't match the computed SHA-384.
34
13
  *
35
- * URLs with no manifest entry pass through with a warning so the SDK
36
- * stays usable while the manifest is being populated.
14
+ * Consumer-owned URLs with no manifest entry pass through with a warning.
15
+ * SDK-owned CDN URLs with no entry fail closed.
37
16
  */
38
17
  export declare function fetchAndVerify(url: string): Promise<ArrayBuffer>;
39
18
  /**
@@ -8,4 +8,4 @@ import { FaceBounds } from '../types/face';
8
8
  * Empty input yields a zero-size box at the origin rather than the inverted
9
9
  * `min=1,max=0` seed, so downstream width/height stay non-negative.
10
10
  */
11
- export declare const computeLandmarkBounds: (landmarks: NormalizedLandmark[]) => FaceBounds;
11
+ export declare const computeLandmarkBounds: (landmarks: readonly NormalizedLandmark[], target?: FaceBounds) => FaceBounds;
@@ -2,6 +2,6 @@ import { LoggerOptions } from '../types/logger';
2
2
  export declare class Logger {
3
3
  private options;
4
4
  constructor(opts?: Partial<LoggerOptions>);
5
- log(...params: any[]): void;
6
- error(...params: any[]): void;
5
+ log(...params: unknown[]): void;
6
+ error(...params: unknown[]): void;
7
7
  }
@@ -0,0 +1,127 @@
1
+ import { useContext as A, createContext as L, forwardRef as h, createElement as i } from "react";
2
+ /**
3
+ * @license lucide-react v1.17.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */
8
+ const C = (...e) => e.filter((t, o, r) => !!t && t.trim() !== "" && r.indexOf(t) === o).join(" ").trim();
9
+ /**
10
+ * @license lucide-react v1.17.0 - ISC
11
+ *
12
+ * This source code is licensed under the ISC license.
13
+ * See the LICENSE file in the root directory of this source tree.
14
+ */
15
+ const W = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
16
+ /**
17
+ * @license lucide-react v1.17.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */
22
+ const y = (e) => e.replace(
23
+ /^([A-Z])|[\s-_]+(\w)/g,
24
+ (t, o, r) => r ? r.toUpperCase() : o.toLowerCase()
25
+ );
26
+ /**
27
+ * @license lucide-react v1.17.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */
32
+ const d = (e) => {
33
+ const t = y(e);
34
+ return t.charAt(0).toUpperCase() + t.slice(1);
35
+ };
36
+ /**
37
+ * @license lucide-react v1.17.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */
42
+ var c = {
43
+ xmlns: "http://www.w3.org/2000/svg",
44
+ width: 24,
45
+ height: 24,
46
+ viewBox: "0 0 24 24",
47
+ fill: "none",
48
+ stroke: "currentColor",
49
+ strokeWidth: 2,
50
+ strokeLinecap: "round",
51
+ strokeLinejoin: "round"
52
+ };
53
+ /**
54
+ * @license lucide-react v1.17.0 - ISC
55
+ *
56
+ * This source code is licensed under the ISC license.
57
+ * See the LICENSE file in the root directory of this source tree.
58
+ */
59
+ const v = (e) => {
60
+ for (const t in e)
61
+ if (t.startsWith("aria-") || t === "role" || t === "title")
62
+ return !0;
63
+ return !1;
64
+ }, S = L({}), $ = () => A(S), N = h(
65
+ ({ color: e, size: t, strokeWidth: o, absoluteStrokeWidth: r, className: a = "", children: s, iconNode: p, ...l }, m) => {
66
+ const {
67
+ size: n = 24,
68
+ strokeWidth: u = 2,
69
+ absoluteStrokeWidth: x = !1,
70
+ color: k = "currentColor",
71
+ className: f = ""
72
+ } = $() ?? {}, w = r ?? x ? Number(o ?? u) * 24 / Number(t ?? n) : o ?? u;
73
+ return i(
74
+ "svg",
75
+ {
76
+ ref: m,
77
+ ...c,
78
+ width: t ?? n ?? c.width,
79
+ height: t ?? n ?? c.height,
80
+ stroke: e ?? k,
81
+ strokeWidth: w,
82
+ className: C("lucide", f, a),
83
+ ...!s && !v(l) && { "aria-hidden": "true" },
84
+ ...l
85
+ },
86
+ [
87
+ ...p.map(([b, g]) => i(b, g)),
88
+ ...Array.isArray(s) ? s : [s]
89
+ ]
90
+ );
91
+ }
92
+ );
93
+ /**
94
+ * @license lucide-react v1.17.0 - ISC
95
+ *
96
+ * This source code is licensed under the ISC license.
97
+ * See the LICENSE file in the root directory of this source tree.
98
+ */
99
+ const _ = (e, t) => {
100
+ const o = h(
101
+ ({ className: r, ...a }, s) => i(N, {
102
+ ref: s,
103
+ iconNode: t,
104
+ className: C(
105
+ `lucide-${W(d(e))}`,
106
+ `lucide-${e}`,
107
+ r
108
+ ),
109
+ ...a
110
+ })
111
+ );
112
+ return o.displayName = d(e), o;
113
+ };
114
+ /**
115
+ * @license lucide-react v1.17.0 - ISC
116
+ *
117
+ * This source code is licensed under the ISC license.
118
+ * See the LICENSE file in the root directory of this source tree.
119
+ */
120
+ const j = [
121
+ ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
122
+ ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
123
+ ], I = _("x", j);
124
+ export {
125
+ I as X,
126
+ _ as c
127
+ };
@@ -0,0 +1,41 @@
1
+ "use strict";const s=require("react");/**
2
+ * @license lucide-react v1.17.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const h=(...t)=>t.filter((e,o,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===o).join(" ").trim();/**
7
+ * @license lucide-react v1.17.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const A=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
12
+ * @license lucide-react v1.17.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const L=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,o,r)=>r?r.toUpperCase():o.toLowerCase());/**
17
+ * @license lucide-react v1.17.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const d=t=>{const e=L(t);return e.charAt(0).toUpperCase()+e.slice(1)};/**
22
+ * @license lucide-react v1.17.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */var i={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
27
+ * @license lucide-react v1.17.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */const W=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1},y=s.createContext({}),v=()=>s.useContext(y),S=s.forwardRef(({color:t,size:e,strokeWidth:o,absoluteStrokeWidth:r,className:n="",children:a,iconNode:m,...l},p)=>{const{size:c=24,strokeWidth:u=2,absoluteStrokeWidth:f=!1,color:k="currentColor",className:w=""}=v()??{},x=r??f?Number(o??u)*24/Number(e??c):o??u;return s.createElement("svg",{ref:p,...i,width:e??c??i.width,height:e??c??i.height,stroke:t??k,strokeWidth:x,className:h("lucide",w,n),...!a&&!W(l)&&{"aria-hidden":"true"},...l},[...m.map(([b,g])=>s.createElement(b,g)),...Array.isArray(a)?a:[a]])});/**
32
+ * @license lucide-react v1.17.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */const C=(t,e)=>{const o=s.forwardRef(({className:r,...n},a)=>s.createElement(S,{ref:a,iconNode:e,className:h(`lucide-${A(d(t))}`,`lucide-${t}`,r),...n}));return o.displayName=d(t),o};/**
37
+ * @license lucide-react v1.17.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */const $=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],E=C("x",$);exports.X=E;exports.createLucideIcon=C;