@volter/game-editor 0.5.65 → 0.5.66

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 (544) hide show
  1. package/BUNDLED_NOTICES +1962 -363
  2. package/catalog/entries/bake.json +0 -1
  3. package/catalog/entries/blender.json +2 -2
  4. package/catalog/entries/reflections.json +2 -4
  5. package/catalog/project-source/src/lib/bake/asset-seed.ts +1 -2
  6. package/catalog/project-source/src/lib/bake/clip-layering.ts +3 -4
  7. package/catalog/project-source/src/lib/bake/gltf-bake.ts +1 -1
  8. package/catalog/project-source/src/lib/bake/params.ts +3 -5
  9. package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +2 -3
  10. package/dist/.vite/manifest.json +2406 -2182
  11. package/dist/assets/{AssetBudgetPanel-J9--TZPU.js → AssetBudgetPanel-csYWK2H4.js} +8 -8
  12. package/dist/assets/{AudioViewer-CR7333fe.js → AudioViewer-BH_LUYs5.js} +1 -1
  13. package/dist/assets/{BVHLoader-6bQIXhMX.js → BVHLoader-Jkzh8hMf.js} +1 -1
  14. package/dist/assets/BufferGeometryUtils-CAbuTPOA.js +1 -0
  15. package/dist/assets/{CCDIKSolver-CD7vLpsK.js → CCDIKSolver-D4NvkJ8d.js} +1 -1
  16. package/dist/assets/{CSS3DRenderer-CL7ABLVK.js → CSS3DRenderer-CAS2WZZy.js} +1 -1
  17. package/dist/assets/CanvasSceneViewport-BlsRTk-X.js +1 -0
  18. package/dist/assets/ColladaLoader-DxYB89DA.js +3 -0
  19. package/dist/assets/{ColorInput-DQBNrW-K.js → ColorInput-CPQNsDf1.js} +1 -1
  20. package/dist/assets/{ConvexGeometry-CAzXlPVG.js → ConvexGeometry-Dinf-sev.js} +1 -1
  21. package/dist/assets/{ConvexHull-BINCESFp.js → ConvexHull-CrJ8FY-w.js} +1 -1
  22. package/dist/assets/{DecalGeometry-160KRdfg.js → DecalGeometry-owkbefLa.js} +1 -1
  23. package/dist/assets/EffectComposer-BHDH-NLz.js +1 -0
  24. package/dist/assets/EntityModelDocument-DuQivdvc.js +1 -0
  25. package/dist/assets/EnvironmentAssetDocument-CnTEMn3A.js +1 -0
  26. package/dist/assets/FBXLoader-BMUbIhtE.js +1 -0
  27. package/dist/assets/Fbo-DrK7CWlB.js +1 -0
  28. package/dist/assets/{FontLoader-CvGoVI5a.js → FontLoader-BR_K6Baw.js} +2 -2
  29. package/dist/assets/GLTFExporter-BZqAQJbw.js +1 -0
  30. package/dist/assets/{GameplaySessionTimeline-B52W3FVZ.js → GameplaySessionTimeline-Crqwv2fP.js} +1 -1
  31. package/dist/assets/Gltf-7cVbZUzT.js +2 -0
  32. package/dist/assets/ImageViewer-BkFie7Hm.js +1 -0
  33. package/dist/assets/InspectorObjectPreview-Dl3tyJBn.js +1 -0
  34. package/dist/assets/JsonAssetDocument-BUFzubHM.js +2 -0
  35. package/dist/assets/{LineSegments2-CsOpKSiM.js → LineSegments2-Cicm_Hu1.js} +2 -2
  36. package/dist/assets/LiveModuleDocument-C3OQxiba.js +1 -0
  37. package/dist/assets/LutAssetDocument-DVzd1RZ9.js +1 -0
  38. package/dist/assets/{MTLLoader-_Xzd4_0p.js → MTLLoader-Bg_grNiT.js} +2 -2
  39. package/dist/assets/{MarchingCubes-Bsp4wrzd.js → MarchingCubes-a78AL3HB.js} +1 -1
  40. package/dist/assets/MeshBVH-BCSLNEeP.js +1 -0
  41. package/dist/assets/ModelAssetDocument-pN84goRT.js +1 -0
  42. package/dist/assets/{NonThreeAuthoringBootstrap-C3woOMxX.js → NonThreeAuthoringBootstrap-BKNejRiW.js} +1 -1
  43. package/dist/assets/{OBJLoader-BhIC6Hwo.js → OBJLoader-BiwzVj5b.js} +2 -2
  44. package/dist/assets/Object3DDocumentToolbar-D5Bg5FEf.js +1 -0
  45. package/dist/assets/Object3DDocumentViewport-DFHqru3a.js +2 -0
  46. package/dist/assets/Object3DPreview-BTtZ-41z.js +2 -0
  47. package/dist/assets/OnlineAssetDetail-BAqozdAp.js +1 -0
  48. package/dist/assets/{OrbitControls-DLpayAaK.js → OrbitControls-CzKVCORl.js} +1 -1
  49. package/dist/assets/{OrbitControls-CM3bPray.js → OrbitControls-CzTRRI7x.js} +1 -1
  50. package/dist/assets/{OrthographicCamera-bQozawrh.js → OrthographicCamera-CSDDsvu7.js} +1 -1
  51. package/dist/assets/{PLYLoader-DYQqs5Ik.js → PLYLoader-QxrxxMpE.js} +2 -2
  52. package/dist/assets/{PerspectiveCamera-CQ2lh01o.js → PerspectiveCamera-DzD_NfVh.js} +1 -1
  53. package/dist/assets/PlayBar-qVJpgwJt.js +2 -0
  54. package/dist/assets/QuarksAssetDocument-B4vBlUsS.js +2 -0
  55. package/dist/assets/RGBELoader-WQ7xZofE.js +1 -0
  56. package/dist/assets/RectAreaLightUniformsLib-CwcuoVqt.js +1 -0
  57. package/dist/assets/{RenderPass-DPrn-Uky.js → RenderPass-C_CeQNdh.js} +1 -1
  58. package/dist/assets/{ResolutionPicker-C67vs1F3.js → ResolutionPicker-DpHVJxn5.js} +1 -1
  59. package/dist/assets/RootSelectionOverlay-BxvsunO4.js +1 -0
  60. package/dist/assets/{RoundedBox-BDGBg6QZ.js → RoundedBox-B_cZ0NFy.js} +1 -1
  61. package/dist/assets/{RoundedBoxGeometry-CyUuYPfW.js → RoundedBoxGeometry-Y4rcSIvX.js} +1 -1
  62. package/dist/assets/STLLoader-Bej_Nkpr.js +1 -0
  63. package/dist/assets/{SelectionBox-D_75KrNW.js → SelectionBox-Cn9vm7f9.js} +1 -1
  64. package/dist/assets/ShaderAssetDocument-Dx2x8CLr.js +12 -0
  65. package/dist/assets/{ShaderPass-QYRpPuFJ.js → ShaderPass-qtkA7CQ8.js} +1 -1
  66. package/dist/assets/{ShadowEditor-DkImwu1Y.js → ShadowEditor-BEIUkrHL.js} +1 -1
  67. package/dist/assets/SimplifyModifier-D2EesGr2.js +1 -0
  68. package/dist/assets/{SkeletonUtils-Cps8GOC6.js → SkeletonUtils-C8ayciDc.js} +1 -1
  69. package/dist/assets/{Sky-CQKCgYDs.js → Sky-BBpnAJZV.js} +1 -1
  70. package/dist/assets/SourceAssetViewer-BpMbbuy6.js +1 -0
  71. package/dist/assets/StageHost-lB8f---y.js +2 -0
  72. package/dist/assets/{StoryPreviewMount-DjyxRCXu.js → StoryPreviewMount-BIfxmkYh.js} +1 -1
  73. package/dist/assets/{TDSLoader-D_T8XJ81.js → TDSLoader-rHl5Uwc0.js} +1 -1
  74. package/dist/assets/{TextGeometry-DOWAEUV0.js → TextGeometry-BRHSufuM.js} +1 -1
  75. package/dist/assets/ThreeBoardDocument-BHV92Ia3.js +2 -0
  76. package/dist/assets/{ThreeIsolationSceneContent-C8C8whSF.js → ThreeIsolationSceneContent-BqtgDHBK.js} +1 -1
  77. package/dist/assets/{ToolObject3DPreview-BRoDWe4Q.js → ToolObject3DPreview-CcaPJTyH.js} +1 -1
  78. package/dist/assets/Toolbar-keHcSvDD.js +1 -0
  79. package/dist/assets/{TrackballControls-DfznuQTh.js → TrackballControls-Cce-6Ff5.js} +1 -1
  80. package/dist/assets/{TransientHint-BB1fwrvK.js → TransientHint-Dlslh3oX.js} +1 -1
  81. package/dist/assets/{UnrealBloomPass-CR-cS_K5.js → UnrealBloomPass-DiseEiFK.js} +2 -2
  82. package/dist/assets/{VideoViewer-C6kocgIU.js → VideoViewer-naGSXHd6.js} +1 -1
  83. package/dist/assets/ViewportShadingMenu-C7Hdhtca.js +1 -0
  84. package/dist/assets/{active-ingest-CT6jSGhr.js → active-ingest-DEgq9JiA.js} +3 -3
  85. package/dist/assets/{animation-clock-CnjZqfJp.js → animation-clock-lTIb6nk3.js} +1 -1
  86. package/dist/assets/animation-mixers.service-2O2rVwQf.js +1 -0
  87. package/dist/assets/asset-budget-asset.menu-9NhdHAC9.js +1 -0
  88. package/dist/assets/asset-budget.action-yg6-luUJ.js +1 -0
  89. package/dist/assets/asset-budget.document-B46_VFqa.js +1 -0
  90. package/dist/assets/asset-budget.menu-DuH07N-e.js +1 -0
  91. package/dist/assets/{asset-editor-persistence-BBaONOJt.js → asset-editor-persistence-BVtzjadu.js} +1 -1
  92. package/dist/assets/{asset-loaders-BOy5Ss8k.js → asset-loaders-BxG1LykH.js} +2 -2
  93. package/dist/assets/{assets-BuSoGjBX.js → assets-Do88ZdV_.js} +1 -1
  94. package/dist/assets/{audio-unlock.service-CfUgUQVy.js → audio-unlock.service-BJH0mWvX.js} +1 -1
  95. package/dist/assets/{audio.utility-C6K6jem8.js → audio.utility-Cp4aVYFU.js} +1 -1
  96. package/dist/assets/autoplay.service-FxpRy7Ev.js +1 -0
  97. package/dist/assets/{babylon-authoring-adapter-CL02gWDn.js → babylon-authoring-adapter-B_8iE8fK.js} +1 -1
  98. package/dist/assets/{binding-resolver-Dsh-6Vor.js → binding-resolver-BWwG10zJ.js} +2 -2
  99. package/dist/assets/blender-emscripten-engine-CEsWgnR7.js +2 -0
  100. package/dist/assets/{blender-node-editor.document-iIDkB9sI.js → blender-node-editor.document-DTgwy8KC.js} +1 -1
  101. package/dist/assets/blender-properties-tab-DWSJpkxq.js +3 -0
  102. package/dist/assets/blender-runtime-host-OGjPjTrG.js +4 -0
  103. package/dist/assets/{blender-runtime-skin-DyQ9B6CR.js → blender-runtime-skin-DymtXlpt.js} +37 -39
  104. package/dist/assets/blender-runtime.document-CzH2ohHR.js +8 -0
  105. package/dist/assets/{blender-timeline.document-77fx96N7.js → blender-timeline.document-BRy_QPHt.js} +1 -1
  106. package/dist/assets/{blender-uv-editor.document-fsT7B4gV.js → blender-uv-editor.document-D-AbUCqz.js} +1 -1
  107. package/dist/assets/{blender-version.status-o6dBm3n6.js → blender-version.status-B7flzX_7.js} +1 -1
  108. package/dist/assets/{blender-wali-engine-wTOcrOMC.js → blender-wali-engine-D3iKpzn9.js} +1 -1
  109. package/dist/assets/blender.command-BVHtgTQy.js +1 -0
  110. package/dist/assets/blender.environment-CG-pC7sk.js +1 -0
  111. package/dist/assets/{blender.style-Dcem5f_T.js → blender.style-CxfbTFcE.js} +1 -1
  112. package/dist/assets/{board-guides-DziKSTss.js → board-guides-C3usUZZk.js} +1 -1
  113. package/dist/assets/body-marks-D8iaje6y.js +1 -0
  114. package/dist/assets/bridge.command-BF9u6r0A.js +3 -0
  115. package/dist/assets/browserAll-38aBu-cf.js +1 -0
  116. package/dist/assets/{build-profiles.document-kW8iw8Xj.js → build-profiles.document-DO7oNRuo.js} +2 -2
  117. package/dist/assets/{build-progress.status-BNRLytg2.js → build-progress.status-COeNVhYd.js} +1 -1
  118. package/dist/assets/{build-session-C_sg3CEn.js → build-session-IWIriS5P.js} +1 -1
  119. package/dist/assets/{build.action-lYjTLb7K.js → build.action-DlkFvZf6.js} +1 -1
  120. package/dist/assets/{build.command-DIGgUPU_.js → build.command-DPqQIYj_.js} +1 -1
  121. package/dist/assets/{build.header-CKajx5U3.js → build.header-CNLG-pV8.js} +1 -1
  122. package/dist/assets/{build.menu-BdU0QXny.js → build.menu-hUlH6loi.js} +1 -1
  123. package/dist/assets/{build.service-CbBAyeu3.js → build.service-C86Td3_9.js} +1 -1
  124. package/dist/assets/{camera-KEsKvOL7.js → camera-CKbyBXMe.js} +1 -1
  125. package/dist/assets/camera-authoring-Ci3KnE-W.js +1 -0
  126. package/dist/assets/{camera-runtime.inspector-B7unX4g1.js → camera-runtime.inspector-DdR3P2BF.js} +1 -1
  127. package/dist/assets/canvas-entry-runtime-E5YjSgre.js +2 -0
  128. package/dist/assets/canvas-preview-frames-CiAx7dpV.js +1 -0
  129. package/dist/assets/{capability-coverage-Czas4C18.js → capability-coverage-CfUeULDN.js} +5 -5
  130. package/dist/assets/city-EkhAOo5s.exr +0 -0
  131. package/dist/assets/{collaboration-presence-DLoZ7EA3.js → collaboration-presence-CSLFNT7m.js} +1 -1
  132. package/dist/assets/{collider-Bw0mXlsW.js → collider-DRSaLRM9.js} +1 -1
  133. package/dist/assets/{component-board.service-DCwcUssB.js → component-board.service-B7Sv8b7m.js} +2 -2
  134. package/dist/assets/component-board.service-B8UHw8dn.js +2 -0
  135. package/dist/assets/component-contracts.service-LFGekycZ.js +1 -0
  136. package/dist/assets/{component-verbs.command-7xzfjGMZ.js → component-verbs.command-D4SvFjfG.js} +1 -1
  137. package/dist/assets/component-verbs.service-TGvWxf2b.js +1 -0
  138. package/dist/assets/{config-CEZk921y.js → config-DB_RH-hO.js} +3 -3
  139. package/dist/assets/{configurations-DTBMdaTL.js → configurations-C2qgJNnW.js} +1 -1
  140. package/dist/assets/{connection.status-BifnQdOs.js → connection.status-CG7X2brL.js} +1 -1
  141. package/dist/assets/{console-bridge-CHcb-xk5.js → console-bridge-B5Ltae37.js} +1 -1
  142. package/dist/assets/{constraint-De8f1Uiq.js → constraint-C_Jj7dXy.js} +1 -1
  143. package/dist/assets/constraints.inspector-D6QZJS4b.js +1 -0
  144. package/dist/assets/courtyard-DqlebbpC.exr +0 -0
  145. package/dist/assets/coverage.service-Clo86874.js +3 -0
  146. package/dist/assets/{create-runtime-CVCc1BDx.js → create-runtime-lmA910XT.js} +1 -1
  147. package/dist/assets/{curve-7Q79VgU4.js → curve-6-TR6dNb.js} +1 -1
  148. package/dist/assets/{data-asset-4hjS642k.js → data-asset-BNbd309U.js} +1 -1
  149. package/dist/assets/{data-ref-CQI28C0D.js → data-ref-Dvmd7eb1.js} +1 -1
  150. package/dist/assets/{debug-bridge-CCohG-d-.js → debug-bridge-BUNhgyY6.js} +1 -1
  151. package/dist/assets/{debug-registry-Dgvitx8M.js → debug-registry-B3Cnne3x.js} +1 -1
  152. package/dist/assets/deferred-ingest-play-7V8OrW3e.js +2 -0
  153. package/dist/assets/design-time-layers-g9VS6amb.js +1 -0
  154. package/dist/assets/design-time-mount.service-HtMr_vBd.js +2 -0
  155. package/dist/assets/design-time-react-mount-Dx6fJ-Hg.js +1 -0
  156. package/dist/assets/{directional-shadow-fit-BVkOKAv2.js → directional-shadow-fit-Cjz_Eg2b.js} +1 -1
  157. package/dist/assets/{document-preview-three-Kbg2GCLm.js → document-preview-three-C3y0syYQ.js} +1 -1
  158. package/dist/assets/{dom-authoring-adapter-CY8C7f4T.js → dom-authoring-adapter-CEeFyatF.js} +1 -1
  159. package/dist/assets/{draco3d-BBUTcNkz.js → draco3d-FKy0apkb.js} +1 -1
  160. package/dist/assets/drei-asset-caches-jJoHXbTj.js +2 -0
  161. package/dist/assets/{edit-mode-audio.service-Bzetwd5B.js → edit-mode-audio.service-DZTnrW6t.js} +1 -1
  162. package/dist/assets/edit-mode-authoring-D_BiHCQj.js +1 -0
  163. package/dist/assets/{edit-mode-networking.service-YCX6RRb_.js → edit-mode-networking.service-BzMI2VxO.js} +1 -1
  164. package/dist/assets/editor-api-Bzmo0o8_.js +1 -0
  165. package/dist/assets/{entry-adjudication-Cq8Yeb74.js → entry-adjudication-BYy7TXOB.js} +1 -1
  166. package/dist/assets/{events-156d8d12.esm-ErOhDXXB.js → events-156d8d12.esm-C734MYnx.js} +7 -7
  167. package/dist/assets/{extend-B-eOccUm.js → extend-CLG0ymiX.js} +1 -1
  168. package/dist/assets/forest-P_CQY3b_.exr +0 -0
  169. package/dist/assets/fork-menu-De7HU6_H.js +1 -0
  170. package/dist/assets/{frame-debugger-store-D1Mf_5up.js → frame-debugger-store-BZgIOlU6.js} +1 -1
  171. package/dist/assets/{game-DHOZVb-7.js → game-D5EJoILQ.js} +1 -1
  172. package/dist/assets/{game-contract-seams-a5YXejOu.js → game-contract-seams-TCpIMmHP.js} +1 -1
  173. package/dist/assets/{game-css-scope-transform-Eng4wS8E.js → game-css-scope-transform-NbpajQr-.js} +1 -1
  174. package/dist/assets/game-document.service-6eRlrI-d.js +1 -0
  175. package/dist/assets/game-eval.command-hKnSMlX0.js +2 -0
  176. package/dist/assets/{game-input-seams-CIQdetRw.js → game-input-seams-BC6xhZy3.js} +1 -1
  177. package/dist/assets/{game-module-access-B2mFxv-i.js → game-module-access-ry3xb1Ix.js} +1 -1
  178. package/dist/assets/{gameplay-export-BoKXm51x.js → gameplay-export-DiLQuPpn.js} +1 -1
  179. package/dist/assets/gameplay-replay-Bsre-1K8.js +1 -0
  180. package/dist/assets/{gameplay-rng-trap-CTNhm-UW.js → gameplay-rng-trap-BhRx_CtU.js} +1 -1
  181. package/dist/assets/gameplay.command-BqiyGn-I.js +1 -0
  182. package/dist/assets/{generation-jobs-BQrXbGp_.js → generation-jobs-BYcpgeGk.js} +1 -1
  183. package/dist/assets/generation.service-O81IqA-6.js +1 -0
  184. package/dist/assets/{generations-DzUogZsM.js → generations-CsGQ3twi.js} +1 -1
  185. package/dist/assets/{generations.status-CgOUBCum.js → generations.status-C3YU0_ml.js} +1 -1
  186. package/dist/assets/godot.style-DxJaFWOP.js +1 -0
  187. package/dist/assets/godot.view-BFsHk8b2.js +1 -0
  188. package/dist/assets/{hosted-asset-materialization-CiIvWkGU.js → hosted-asset-materialization-Bk-plQF6.js} +2 -2
  189. package/dist/assets/{ibl-override-material-BlmCxFKq.js → ibl-override-material-BhbGwgS1.js} +1 -1
  190. package/dist/assets/{index-mjWQmGhM.js → index-0n9eSzwT.js} +1 -1
  191. package/dist/assets/index-B4bmKkgY.css +1 -0
  192. package/dist/assets/index-BLo2LE8C.js +3404 -0
  193. package/dist/assets/index-BWW4-DBH.js +1 -0
  194. package/dist/assets/index-CLcsjKUs.js +1 -0
  195. package/dist/assets/index-CU5YUq-x.js +134 -0
  196. package/dist/assets/{index-DUpHH6JR.js → index-Cb6o_Td_.js} +1 -1
  197. package/dist/assets/index-Ckxb31Yz.js +1500 -0
  198. package/dist/assets/index-CnpsJMao.js +1 -0
  199. package/dist/assets/index-Cr23XhNm.js +1 -0
  200. package/dist/assets/index-DO1rWQ_r.js +487 -0
  201. package/dist/assets/{index-BcCBqgM_.js → index-DUh02lTr.js} +1 -1
  202. package/dist/assets/index-DXEHfb0b.js +1 -0
  203. package/dist/assets/{index-V1R-e5Bd.js → index-wRCvCebM.js} +1 -1
  204. package/dist/assets/{inference-diagnostics-Dhmtfbq_.js → inference-diagnostics-YW0yJkKx.js} +1 -1
  205. package/dist/assets/{ingest-BbYMC2vQ.js → ingest-BlQnR7s3.js} +1 -1
  206. package/dist/assets/ingest-boot-viewport-uG9jQ1zm.js +1 -0
  207. package/dist/assets/ingest-siblings-DRQXSWax.js +1 -0
  208. package/dist/assets/{ingest-source-persistence-C_6Hiyra.js → ingest-source-persistence-DH6ioCOu.js} +1 -1
  209. package/dist/assets/{ingest.service-BTDnQfM1.js → ingest.service-GeaWMaZX.js} +1 -1
  210. package/dist/assets/{input-manager-DH_hGW6d.js → input-manager-Cxx3RJgG.js} +1 -1
  211. package/dist/assets/{input-router-BNQvtIqw.js → input-router-FzxO5ld6.js} +1 -1
  212. package/dist/assets/{inspect-BZfi3mmo.js → inspect-BRgDdtVk.js} +1 -1
  213. package/dist/assets/instances.command-CFOMPSj3.js +1 -0
  214. package/dist/assets/{instruments-CKR02Y8I.js → instruments-IKn-vvNb.js} +1 -1
  215. package/dist/assets/interior-Bo_lba15.exr +0 -0
  216. package/dist/assets/{json-history-resource-BbxllWfV.js → json-history-resource-r-9q_hxP.js} +1 -1
  217. package/dist/assets/{light-D-_wsKTq.js → light-CFAor97k.js} +1 -1
  218. package/dist/assets/light-camera-factory-D1sgz3YB.js +1 -0
  219. package/dist/assets/live-mixers-BRkRHd6g.js +1 -0
  220. package/dist/assets/{loader-CaF_I7Yt.js → loader-BbMsvIxP.js} +1 -1
  221. package/dist/assets/machine.document-CgmsOh-s.js +24 -0
  222. package/dist/assets/machines.finder-nxiCgQc2.js +1 -0
  223. package/dist/assets/matcap-texture-Dh65bX5V.js +1 -0
  224. package/dist/assets/{material-CpAdjDxn.js → material-D5kXEZWQ.js} +1 -1
  225. package/dist/assets/{material-factory-Bz6h__6g.js → material-factory-0Qb0VuZ5.js} +1 -1
  226. package/dist/assets/material-preview.view-DqNcpd_b.js +1 -0
  227. package/dist/assets/{mesh-B3WPtNKO.js → mesh-BKPgNTwh.js} +1 -1
  228. package/dist/assets/{mesh-shadow-CZnXrw_l.js → mesh-shadow-BDQP4mHs.js} +1 -1
  229. package/dist/assets/model-asset-sections.service-DWPLmkqa.js +1 -0
  230. package/dist/assets/model-inspection-Cxfg_Fei.js +1 -0
  231. package/dist/assets/model.layout-BpZE1W9V.js +1 -0
  232. package/dist/assets/{models.finder-G2jQgIRu.js → models.finder-DHW17ZEa.js} +1 -1
  233. package/dist/assets/module-mode-CRfHyIMS.js +2 -0
  234. package/dist/assets/mount-canvas-ingest-root-BZZ8M3Lu.js +2 -0
  235. package/dist/assets/mount-dom-ingest-root-D1GV6Jjt.js +2 -0
  236. package/dist/assets/{mount-game-6t9cKNo4.js → mount-game-F9e76auh.js} +1 -1
  237. package/dist/assets/mount-ingest-root-B5D-Lmmk.js +2 -0
  238. package/dist/assets/{mount-manifest-CGVxhmAw.js → mount-manifest-cYRhgHfo.js} +1 -1
  239. package/dist/assets/mount-three-ingest-root-BNnouaBn.js +1 -0
  240. package/dist/assets/{mounted-authoring-Dmg5xmhP.js → mounted-authoring-TIN5EnCb.js} +1 -1
  241. package/dist/assets/{mounted-story-viewport-source-DjP6RA9U.js → mounted-story-viewport-source-CAlEmE0_.js} +1 -1
  242. package/dist/assets/{native-debug-module-CWicoSGD.js → native-debug-module-j-MekcLS.js} +1 -1
  243. package/dist/assets/{navigation-CIiCx-SM.js → navigation-DmR1BDVo.js} +1 -1
  244. package/dist/assets/{navmesh.menu-CAKiH8PW.js → navmesh.menu-FhL1pGx1.js} +1 -1
  245. package/dist/assets/{navmesh.service-jgDWlgj1.js → navmesh.service-usyDeJlm.js} +1 -1
  246. package/dist/assets/{network.utility-CEu5nHf7.js → network.utility-BPh4hTmh.js} +1 -1
  247. package/dist/assets/night-CvV4Gybt.exr +0 -0
  248. package/dist/assets/{object3d-authoring-subject-CH5sI2oP.js → object3d-authoring-subject-CyE4rQ2A.js} +1 -1
  249. package/dist/assets/oid-transform-BOqL6YH6.js +2 -0
  250. package/dist/assets/{particles-Y626p22p.js → particles-C47L-dda.js} +1 -1
  251. package/dist/assets/particles-factory-CRqPLdS7.js +1 -0
  252. package/dist/assets/pixi-authoring-adapter-C5Ikqj5-.js +1 -0
  253. package/dist/assets/{pixi-live-write-target-DuWydlWb.js → pixi-live-write-target-OWBk79dp.js} +1 -1
  254. package/dist/assets/pixi-primitive-D5igywJ_.js +1 -0
  255. package/dist/assets/pixi-react-root-factory-9lZ0Yz-n.js +1 -0
  256. package/dist/assets/play-mode-DomOvQie.js +22 -0
  257. package/dist/assets/play.command-DoqjH-Pp.js +2 -0
  258. package/dist/assets/{playtest-BXIL1JEF.js → playtest-BnFenMBW.js} +1 -1
  259. package/dist/assets/{pose-guard-6Osb2cFu.js → pose-guard-Bb3gZOzk.js} +1 -1
  260. package/dist/assets/{product-DFhyARJj.js → product-CTDJoVo5.js} +1 -1
  261. package/dist/assets/{profiler.action-CaXJDp3t.js → profiler.action-C_OFGkDw.js} +1 -1
  262. package/dist/assets/{profiler.menu-BIMF6Bi4.js → profiler.menu-BJbnVoo4.js} +1 -1
  263. package/dist/assets/{profiler.utility-BExw9wBO.js → profiler.utility-qpfhuwRw.js} +1 -1
  264. package/dist/assets/project-authoring-session-BV-MM8Fl.js +2 -0
  265. package/dist/assets/{project-provenance-BoP3nrle.js → project-provenance-4ldz-EOG.js} +1 -1
  266. package/dist/assets/{properties-bone-constraints.inspector-ByT6p7S-.js → properties-bone-constraints.inspector-C-ByIdg1.js} +1 -1
  267. package/dist/assets/{properties-bone.inspector-z4qJwKO5.js → properties-bone.inspector-CXY0xCQB.js} +1 -1
  268. package/dist/assets/{properties-collection.inspector-D0_3ijWU.js → properties-collection.inspector-DIfkZAel.js} +1 -1
  269. package/dist/assets/{properties-constraints.inspector-CESzjuls.js → properties-constraints.inspector-BaunL5nT.js} +1 -1
  270. package/dist/assets/{properties-data.inspector-hG8Wgyzb.js → properties-data.inspector-DQD-jfO2.js} +1 -1
  271. package/dist/assets/{properties-material.inspector-CzY0JCQ6.js → properties-material.inspector-A0HZ4SX6.js} +1 -1
  272. package/dist/assets/{properties-modifiers.inspector-3dDhwf7g.js → properties-modifiers.inspector-GUnVhVwZ.js} +1 -1
  273. package/dist/assets/{properties-object.inspector-CiarfxkT.js → properties-object.inspector-Chsfa4Xa.js} +1 -1
  274. package/dist/assets/{properties-output.inspector-DKJxmKSD.js → properties-output.inspector-U7ZmD0Me.js} +1 -1
  275. package/dist/assets/{properties-particles.inspector-CCEdYWGm.js → properties-particles.inspector-umkW-OlI.js} +1 -1
  276. package/dist/assets/{properties-physics.inspector-B2c0KUyA.js → properties-physics.inspector-CLVBlWwL.js} +1 -1
  277. package/dist/assets/{properties-render.inspector-Bcm0HLRW.js → properties-render.inspector-D0u9taKy.js} +1 -1
  278. package/dist/assets/{properties-scene.inspector-PIM_eTb_.js → properties-scene.inspector-JwGCZQAx.js} +1 -1
  279. package/dist/assets/{properties-texture.inspector-CgFlnyr8.js → properties-texture.inspector-B1vC28pw.js} +1 -1
  280. package/dist/assets/{properties-view-layer.inspector-DGjF_Aqo.js → properties-view-layer.inspector-BuUKyBFp.js} +1 -1
  281. package/dist/assets/{properties-world.inspector-CrMvaRvB.js → properties-world.inspector-VXUj4dT4.js} +1 -1
  282. package/dist/assets/r3f-design-session-qJ2v5SrB.js +2 -0
  283. package/dist/assets/r3f-physics-binding-C8OqNRG2.js +1 -0
  284. package/dist/assets/{r3f-root-factory-z9llD1OU.js → r3f-root-factory-DjGnbU4n.js} +1 -1
  285. package/dist/assets/r3f-source-authoring-adapter-CG9heazM.js +12 -0
  286. package/dist/assets/{rapier-physics-bridge-CMoeVo3Y.js → rapier-physics-bridge-B-EK7KYV.js} +1 -1
  287. package/dist/assets/react-inspector.service-DWeXDHJq.js +1 -0
  288. package/dist/assets/{react-root-CEz5NTck.js → react-root-DGLRLr-F.js} +1 -1
  289. package/dist/assets/react-story-board-CSqHY0Cg.js +1 -0
  290. package/dist/assets/{react-three-fiber.esm-CycrbDlA.js → react-three-fiber.esm-BxIoqVh1.js} +1 -1
  291. package/dist/assets/{react-three-rapier.esm-CEfKpvxT.js → react-three-rapier.esm-BYzLhdSV.js} +1 -1
  292. package/dist/assets/react-world-authoring-adapter-BMT9kLWU.js +1 -0
  293. package/dist/assets/{realm-services-CobQsq_X.js → realm-services-D25JHoqD.js} +1 -1
  294. package/dist/assets/{reflection-probe-Don-M3Fj.js → reflection-probe-CqXWlicu.js} +1 -1
  295. package/dist/assets/{reflection-probe-capture.inspector-CmFUoJCx.js → reflection-probe-capture.inspector-B7Qa30vB.js} +1 -1
  296. package/dist/assets/regions-DWeEBnE2.js +1 -0
  297. package/dist/assets/{register-render-vitals-BiZk29b2.js → register-render-vitals-BO7x64kR.js} +1 -1
  298. package/dist/assets/{registry-02YZjMNp.js → registry-DlTluc4x.js} +1 -1
  299. package/dist/assets/{render-audio-control-vMRlePWb.js → render-audio-control-DCa_bOBI.js} +1 -1
  300. package/dist/assets/{render-batch-system-0vq7p0VC.js → render-batch-system-CzCp9YKM.js} +1 -1
  301. package/dist/assets/{render-control-Df3yTiyr.js → render-control-BNQr1eNO.js} +1 -1
  302. package/dist/assets/{render-env-D2IV2x5k.js → render-env-emvlfeTG.js} +1 -1
  303. package/dist/assets/{render-features-CPQ_e568.js → render-features-COF7MSQ9.js} +1 -1
  304. package/dist/assets/{render-settings-Bw4W9SYF.js → render-settings-C_kIMq8Y.js} +1 -1
  305. package/dist/assets/{resolve-three-SZE_WWUM.js → resolve-three-C-nx-QdA.js} +13 -13
  306. package/dist/assets/{root-seam-contract-Z0VWX3Bk.js → root-seam-contract-C7GOxf5x.js} +1 -1
  307. package/dist/assets/{run-ticks-settled-C4ksViyA.js → run-ticks-settled-B0cTtmhQ.js} +1 -1
  308. package/dist/assets/{scene-capture-CGYF-Viw.js → scene-capture-CLOc7GXc.js} +1 -1
  309. package/dist/assets/{scene-capture-BQKzU0NT.js → scene-capture-D10Nxkvp.js} +1 -1
  310. package/dist/assets/scene-document.service-B7kAVTko.js +2 -0
  311. package/dist/assets/{scene-framing-Cat0GtyJ.js → scene-framing-50N7SKuX.js} +1 -1
  312. package/dist/assets/{scene-index-B6BZOHMk.js → scene-index-Bce459yu.js} +1 -1
  313. package/dist/assets/{scene-query-C7_N-TpI.js → scene-query-IUZhw6pA.js} +1 -1
  314. package/dist/assets/{schema-kl9-2B_J.js → schema-Iy-mbzll.js} +1 -1
  315. package/dist/assets/sculpt.layout-D-K5cLw6.js +1 -0
  316. package/dist/assets/{seeded-random-i3mtgBKZ.js → seeded-random-CN0scLZj.js} +1 -1
  317. package/dist/assets/{session-CZ5JPg-z.js → session-CsR0lApe.js} +24 -15
  318. package/dist/assets/{setup-audio-S8GQF91f.js → setup-audio-BJ18gvXZ.js} +1 -1
  319. package/dist/assets/setup-particles-B6H-GbAA.js +1 -0
  320. package/dist/assets/{setup-physics-BeZ7-LKD.js → setup-physics-GugbTT0J.js} +1 -1
  321. package/dist/assets/{setup-renderer-DVXaSGin.js → setup-renderer-wt_a-p8r.js} +20 -20
  322. package/dist/assets/shading.layout-CZZHKBer.js +1 -0
  323. package/dist/assets/{sim-clock-CLflx7kg.js → sim-clock-DEfbb_-P.js} +1 -1
  324. package/dist/assets/{soft-particle-depth-DGvfQDi1.js → soft-particle-depth-CKUS1j0Y.js} +1 -1
  325. package/dist/assets/source-object3d-authoring-adapter-CfHQLFAL.js +1 -0
  326. package/dist/assets/{source-persistence-backend-C-aR-B_Y.js → source-persistence-backend-_-JMEXxE.js} +1 -1
  327. package/dist/assets/{spark-renderer-lifecycle-ynWESJcv.js → spark-renderer-lifecycle-9mnMW3Z4.js} +1 -1
  328. package/dist/assets/{spark.module-4pXQoz5d.js → spark.module-CXth-y_a.js} +1 -1
  329. package/dist/assets/stage-keyboard-C0FdDLOQ.js +1 -0
  330. package/dist/assets/stage-overlay-set-CwhCzbOy.js +1 -0
  331. package/dist/assets/stage-presence-markers-DVMDKiB-.js +1 -0
  332. package/dist/assets/stage-transform-tools-B09Z7v0o.js +1 -0
  333. package/dist/assets/standard-viewport-dressing-GUUr6GuK.js +20 -0
  334. package/dist/assets/{state-watch.action-BOvQR2qt.js → state-watch.action-CgF8qoFC.js} +1 -1
  335. package/dist/assets/{state-watch.menu-CNLvDeeY.js → state-watch.menu-CIMncESW.js} +1 -1
  336. package/dist/assets/{state-watch.utility-Bg1tTTQU.js → state-watch.utility-zTHkUALC.js} +1 -1
  337. package/dist/assets/static-batch-advisor-DqfXWRUq.js +1 -0
  338. package/dist/assets/story-capture-COQgezzl.js +1 -0
  339. package/dist/assets/story-documents-DQ0KORmd.js +3 -0
  340. package/dist/assets/story-documents.service-DOSaqPqv.js +1 -0
  341. package/dist/assets/story-documents.service-Gb7oUkbg.js +1 -0
  342. package/dist/assets/{story-media-presence-BHzk2IV5.js → story-media-presence-nW3zJqKv.js} +1 -1
  343. package/dist/assets/story-pixi-preview-COPTEsHo.js +1 -0
  344. package/dist/assets/story-presentation-CxADj5oz.js +1 -0
  345. package/dist/assets/{story-three-preview-BHEDZzcl.js → story-three-preview-C9W__8Or.js} +2 -2
  346. package/dist/assets/{structural-ids-Dc-7rEwi.js → structural-ids-CblajJQK.js} +1 -1
  347. package/dist/assets/studio-CysTBGIb.exr +0 -0
  348. package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
  349. package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
  350. package/dist/assets/{surface-state-DaxyruCj.js → surface-state-BAUJu6GY.js} +1 -1
  351. package/dist/assets/{system-runner-DkOjxEBt.js → system-runner-D_DtVrer.js} +1 -1
  352. package/dist/assets/team-playtest.service--79O6xkx.js +1 -0
  353. package/dist/assets/{three-CDSueJyJ.js → three-DSsr_Lvp.js} +1 -1
  354. package/dist/assets/{three-authoring-adapter-CmSQ3Vui.js → three-authoring-adapter-Yqsank46.js} +1 -1
  355. package/dist/assets/three-authoring.service-BDos-bRt.js +2 -0
  356. package/dist/assets/{three-ingest-runtime-QzDYk6tU.js → three-ingest-runtime-DWijtqQ8.js} +1 -1
  357. package/dist/assets/{three-projection-core-BmKMZ-nf.js → three-projection-core-kubBTx0s.js} +1 -1
  358. package/dist/assets/three-story-model-BraQFA9h.js +1 -0
  359. package/dist/assets/three-viewport-presentation-BL7Uc2i6.js +1 -0
  360. package/dist/assets/{three.module-D396a9Mn.js → three.module-IFn-4i31.js} +1 -1
  361. package/dist/assets/three.quarks.esm-CRKGjKAH.js +1039 -0
  362. package/dist/assets/transform-mode-request-Cu7ewbtr.js +1 -0
  363. package/dist/assets/{transform-writer-BhBBTx33.js → transform-writer-DXxrI4t7.js} +1 -1
  364. package/dist/assets/transport.header-CeND8Vzh.js +1 -0
  365. package/dist/assets/{trigger-volume-BNK2XzPL.js → trigger-volume-BCVRS3NM.js} +1 -1
  366. package/dist/assets/{tuples-CIQ4Bn1U.js → tuples-DKDGrN1t.js} +1 -1
  367. package/dist/assets/ui-board-document-DD2CAEAo.js +2 -0
  368. package/dist/assets/unity.style-vCmLw4gI.js +1 -0
  369. package/dist/assets/unity.view-DIn2S6Do.js +1 -0
  370. package/dist/assets/unreal.style-BQn-HhOX.js +1 -0
  371. package/dist/assets/unreal.view-adNBETZK.js +1 -0
  372. package/dist/assets/user-data-CZqsJDk-.js +1 -0
  373. package/dist/assets/{utility-view-state-BHypxA33.js → utility-view-state-DYJY8V8O.js} +1 -1
  374. package/dist/assets/uv-editing.layout-A8RA-cbM.js +1 -0
  375. package/dist/assets/{vgai-shared-three-Bc5PvpLM.js → vgai-shared-three-D_RAEumG.js} +1 -1
  376. package/dist/assets/{viewport-root-presentation-CWsE56K6.js → viewport-root-presentation-C9M98VNM.js} +1 -1
  377. package/dist/assets/{viewport-shading-BuA88e_A.js → viewport-shading-BzcvgJhK.js} +1 -1
  378. package/dist/assets/viewport-shading-boundary-CBvvzS-p.js +84 -0
  379. package/dist/assets/{viewport-surface-status-B3om4Kcf.js → viewport-surface-status-BFmnWp7z.js} +1 -1
  380. package/dist/assets/voxel-surface-ROWYug7H.js +1 -0
  381. package/dist/assets/webgl-frame-capture-CRKX73E9.js +1 -0
  382. package/dist/assets/webworkerAll-CehoCtFb.js +1 -0
  383. package/dist/assets/{worker-UrMcrc5_.js → worker-B7zhIsFh.js} +2 -2
  384. package/dist/assets/world-documents-DErHq15h.js +1 -0
  385. package/dist/assets/world-root-stage-binding-BIymcQ4K.js +1 -0
  386. package/dist/assets/{world-state-BWG-IcOd.js → world-state-ZGDGY_Xl.js} +1 -1
  387. package/dist/assets/{writer-B-KovzkA.js → writer-BPbm4_my.js} +5 -5
  388. package/dist/assets/xstate-animation-binding-Cvd4JbEY.js +1 -0
  389. package/dist/assets/{xstate-animation-meta-Q3u9zh_m.js → xstate-animation-meta-B3OZR8Q2.js} +1 -1
  390. package/dist/vgai-shared-three.json +1 -1
  391. package/dist-node/cli.js +317 -73
  392. package/dist-node/create.js +59 -19
  393. package/package.json +16 -13
  394. package/src/index.ts +6 -0
  395. package/template/.agents/skills/vgai-3d-models/SKILL.md +3 -3
  396. package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +4 -9
  397. package/template/.claude/skills/vgai-3d-models/SKILL.md +3 -3
  398. package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +4 -9
  399. package/template/.github/skills/vgai-3d-models/SKILL.md +3 -3
  400. package/template/.github/skills/vgai-threejs-authoring/SKILL.md +4 -9
  401. package/template/AGENTS.md +1 -1
  402. package/template/check-idioms.ts +4 -5
  403. package/template/package.json +9 -9
  404. package/template/tsconfig.json +1 -0
  405. package/template/vgai.adapter.ts +1 -0
  406. package/template-dotfiles/gitignore +2 -0
  407. package/workbench/src/media/game-cover.css +1 -1
  408. package/catalog/project-source/src/lib/bake/mesh-slice.ts +0 -157
  409. package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +0 -1
  410. package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +0 -1
  411. package/dist/assets/ColladaLoader-aVOPIsCh.js +0 -3
  412. package/dist/assets/EXRLoader-Cdans_oJ.js +0 -1
  413. package/dist/assets/EffectComposer-DQxfsXBZ.js +0 -1
  414. package/dist/assets/EntityModelDocument-Ccvw66N9.js +0 -1
  415. package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +0 -1
  416. package/dist/assets/FBXLoader-B4MoUtAn.js +0 -1
  417. package/dist/assets/Fbo-Dz-Soul3.js +0 -1
  418. package/dist/assets/GLTFExporter-HgrCle4L.js +0 -1
  419. package/dist/assets/Gltf-UHVWKz65.js +0 -2
  420. package/dist/assets/HDRLoader-THU88oVD.js +0 -5
  421. package/dist/assets/ImageViewer-Tn7s_MnW.js +0 -1
  422. package/dist/assets/InspectorObjectPreview-CVejvLRg.js +0 -1
  423. package/dist/assets/JsonAssetDocument-C7VGcLhu.js +0 -3
  424. package/dist/assets/MeshBVH-BiDHDcu-.js +0 -1
  425. package/dist/assets/ModelAssetDocument-F5GACirk.js +0 -1
  426. package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +0 -2
  427. package/dist/assets/Object3DPreview-DL8oi7Xs.js +0 -2
  428. package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +0 -2
  429. package/dist/assets/PlayBar-BR-Vg3Jb.js +0 -2
  430. package/dist/assets/RGBELoader-BgBcQv8j.js +0 -1
  431. package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +0 -1
  432. package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +0 -1
  433. package/dist/assets/STLLoader-Dyv3lsxY.js +0 -1
  434. package/dist/assets/SimplifyModifier-C8ayvRzd.js +0 -1
  435. package/dist/assets/SourceAssetViewer-2SWQoUut.js +0 -12
  436. package/dist/assets/StageHost-BN-IoTef.js +0 -2
  437. package/dist/assets/ThreeBoardDocument-CVncZyIq.js +0 -2
  438. package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +0 -1
  439. package/dist/assets/asset-budget.action-DCzzcuTh.js +0 -1
  440. package/dist/assets/asset-budget.document-BWU8wnVW.js +0 -1
  441. package/dist/assets/asset-budget.menu-BGZpT_31.js +0 -1
  442. package/dist/assets/autoplay.service-BZBGNSvt.js +0 -1
  443. package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +0 -2
  444. package/dist/assets/blender-properties-tab-C5CyPydi.js +0 -3
  445. package/dist/assets/blender-runtime-host-BpBwGv7r.js +0 -4
  446. package/dist/assets/blender-runtime.document-lIYhhPtv.js +0 -8
  447. package/dist/assets/blender.command-BtJeWk-A.js +0 -1
  448. package/dist/assets/body-marks-h_xDxiDE.js +0 -1
  449. package/dist/assets/bridge.command-o5gDNEwa.js +0 -3
  450. package/dist/assets/browserAll-DeWblVez.js +0 -1
  451. package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +0 -2
  452. package/dist/assets/component-board.service-DidCyM4O.js +0 -2
  453. package/dist/assets/component-verbs.service-Bv9jId3q.js +0 -1
  454. package/dist/assets/constraints.inspector-B9U9Yj-u.js +0 -1
  455. package/dist/assets/coverage.service-VTX5Mcsx.js +0 -3
  456. package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +0 -2
  457. package/dist/assets/design-time-layers-wYgOTgni.js +0 -1
  458. package/dist/assets/design-time-mount.service-BzY21e1F.js +0 -2
  459. package/dist/assets/design-time-react-mount-DM9WLrF2.js +0 -1
  460. package/dist/assets/edit-mode-authoring-B47TfLqu.js +0 -1
  461. package/dist/assets/editor-api-BoJIcyZG.js +0 -1
  462. package/dist/assets/fflate.module-DPuTF8aG.js +0 -6
  463. package/dist/assets/fork-menu-BoVyw2Wu.js +0 -1
  464. package/dist/assets/game-document.service-DbRfx2V0.js +0 -1
  465. package/dist/assets/game-eval.command-D-7Dxbj_.js +0 -2
  466. package/dist/assets/gameplay-replay-e5umMlXv.js +0 -1
  467. package/dist/assets/gameplay.command-DxcVYX6F.js +0 -1
  468. package/dist/assets/generation.service-CDIgObuw.js +0 -1
  469. package/dist/assets/index-96FBF1Oj.js +0 -1
  470. package/dist/assets/index-BAWkB0dv.js +0 -1
  471. package/dist/assets/index-BDnS2b6S.js +0 -1
  472. package/dist/assets/index-BjTCPEQ7.js +0 -134
  473. package/dist/assets/index-CVCb_ImQ.js +0 -1
  474. package/dist/assets/index-CZd9o7Lu.js +0 -1
  475. package/dist/assets/index-D2fNXpHa.css +0 -1
  476. package/dist/assets/index-GIL7oGEO.js +0 -4894
  477. package/dist/assets/index-OrYXPk3Z.js +0 -487
  478. package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +0 -1
  479. package/dist/assets/ingest-siblings-Bop2kqVl.js +0 -1
  480. package/dist/assets/instances.command-D6UkZNO8.js +0 -1
  481. package/dist/assets/light-camera-factory-CWbbe9gI.js +0 -1
  482. package/dist/assets/live-behaviors-Bxq49Maz.js +0 -1
  483. package/dist/assets/matcap-texture-CVfalpWT.js +0 -1
  484. package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +0 -1
  485. package/dist/assets/model.layout-BJUEQYUI.js +0 -1
  486. package/dist/assets/module-mode-DVBLT9d-.js +0 -2
  487. package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +0 -2
  488. package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +0 -2
  489. package/dist/assets/mount-ingest-root-glv2SSWf.js +0 -2
  490. package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +0 -1
  491. package/dist/assets/particles-factory-DnLOHXT8.js +0 -1
  492. package/dist/assets/pasteboard-materialize-BqSS4QzV.js +0 -20
  493. package/dist/assets/pasteboard.action-DU3UHtJG.js +0 -2
  494. package/dist/assets/pixi-authoring-adapter-CjibysC3.js +0 -1
  495. package/dist/assets/pixi-primitive-DlWbUPN9.js +0 -1
  496. package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +0 -1
  497. package/dist/assets/play-mode-BFU2PCkG.js +0 -22
  498. package/dist/assets/play.command-BpqqLqkq.js +0 -2
  499. package/dist/assets/project-authoring-session-Bnt6icLr.js +0 -2
  500. package/dist/assets/r3f-design-session-D-4yyDO9.js +0 -2
  501. package/dist/assets/r3f-physics-binding-BBo8oma9.js +0 -1
  502. package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +0 -13
  503. package/dist/assets/react-inspector.service-B_neRnSK.js +0 -1
  504. package/dist/assets/react-story-board-BDDwiE2H.js +0 -1
  505. package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +0 -1
  506. package/dist/assets/runtime-inspection-l2iFQSsg.js +0 -1
  507. package/dist/assets/scene-document.service-qkDjUrlP.js +0 -2
  508. package/dist/assets/sculpt.layout-zJF55yCR.js +0 -1
  509. package/dist/assets/setup-particles-GCXlnkj_.js +0 -1
  510. package/dist/assets/shading.layout-DULYZV6M.js +0 -1
  511. package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +0 -1
  512. package/dist/assets/stage-invalidation-DBg3C3Ta.js +0 -1
  513. package/dist/assets/stage-keyboard-n-5kKH-m.js +0 -1
  514. package/dist/assets/stage-overlay-set-B9zp2sLB.js +0 -1
  515. package/dist/assets/stage-presence-markers-DiGI6A45.js +0 -1
  516. package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +0 -7
  517. package/dist/assets/static-batch-advisor-B13QEH7d.js +0 -1
  518. package/dist/assets/story-capture-_gC8dXV-.js +0 -1
  519. package/dist/assets/story-documents--TDLaPeL.js +0 -3
  520. package/dist/assets/story-documents.service-BiS_YbNQ.js +0 -1
  521. package/dist/assets/story-documents.service-CxOPYJ2j.js +0 -1
  522. package/dist/assets/story-pixi-preview-BUrOJZXS.js +0 -1
  523. package/dist/assets/story-presentation-j2AVN-mK.js +0 -1
  524. package/dist/assets/team-playtest.service-DqOinFVA.js +0 -1
  525. package/dist/assets/three-authoring.service-iuHLwtf1.js +0 -2
  526. package/dist/assets/three-viewport-presentation-QBQpSdMh.js +0 -1
  527. package/dist/assets/three.quarks.esm-B1C61jGo.js +0 -1039
  528. package/dist/assets/transport.header-B-6HQlU2.js +0 -1
  529. package/dist/assets/ui-board-document-Bwtt--xp.js +0 -2
  530. package/dist/assets/use-live-actor-state-DErbWQWF.js +0 -1
  531. package/dist/assets/user-data-BB2Of6Ht.js +0 -1
  532. package/dist/assets/uv-editing.layout-BEKHxmHw.js +0 -1
  533. package/dist/assets/viewport-shading-boundary-B_-_gABg.js +0 -82
  534. package/dist/assets/voxel-surface-DtcsSWRL.js +0 -1
  535. package/dist/assets/webgl-frame-capture-FlF9zQmW.js +0 -1
  536. package/dist/assets/webworkerAll-CM2o_dnz.js +0 -1
  537. package/dist/assets/world-documents-147tiFZe.js +0 -1
  538. package/dist/assets/world-root-stage-binding-vwTrtBz6.js +0 -1
  539. package/dist/assets/xstate-animation-binding-Brd0NST6.js +0 -1
  540. package/dist/assets/xstate-behavior.action-B8UluFBK.js +0 -1
  541. package/dist/assets/xstate-behavior.document-CKAsE45I.js +0 -1
  542. package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +0 -1
  543. package/dist/assets/xstate-behavior.menu-BXbPICIh.js +0 -1
  544. package/dist/assets/xstate-inspection-BsZv8LS9.js +0 -1
@@ -0,0 +1 @@
1
+ import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{hr as $e,dG as Fe,dT as yt,hs as _t,ht as Nt,hu as Kt,bV as Vt,a6 as Wt,hv as Ae,gG as Ye,hw as He,hx as _e,hy as Ne,hz as D,fd as Ke,bq as Ve,br as We,aH as Ue,hA as Ze,hB as Qe,g6 as qe,hC as Pt,hD as Je,hE as E,hF as Lt,hG as nt,hH as tn,hI as en,hJ as nn,hK as on,hL as rn,hM as Ut,hN as sn,hO as an,hP as ln,hQ as cn,hR as dn,hS as un,hT as pn,f9 as le,hU as fn,hV as hn,ap as ot,hW as xn,hX as gn,eb as bn,hY as yn,hZ as vn,f6 as ce,h_ as mn,h$ as wn,i0 as En,i1 as Sn,i2 as Rn,i3 as Cn,g3 as kn,ac as Pn,e9 as zn,g8 as Ln}from"./index-Ckxb31Yz.js";import{r as c}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as Dn,i as In,r as Zt}from"./eyedropper-session-bjPXnfeX.js";import{z as jn,j as Tn}from"./react-story-board-CSqHY0Cg.js";import{g as Dt}from"./viewport-pick-context-DkawXbEi.js";import{l as On}from"./inspect-BRgDdtVk.js";const Qt=new WeakMap;let qt=0;function Q(e){let o=Qt.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Qt.set(e,o)),o}function It(e){e.revision+=1;for(const o of e.listeners)o()}function Bn(e){return Q(e).guides}function Gn(e){return Q(e).revision}function Mn(e,o){const i=Q(e);return i.listeners.add(o),()=>i.listeners.delete(o)}function Ho(e,o,i){qt+=1;const r=Q(e),u=`canvas-guide-${qt}`;return r.guides=[...r.guides,{id:u,axis:o,value:i}],It(r),u}function _o(e,o,i){const r=Q(e),u=r.guides.map(s=>s.id===o?{...s,value:i}:s);u.every((s,p)=>s===r.guides[p])||(r.guides=u,It(r))}function No(e,o){const i=Q(e),r=i.guides.filter(u=>u.id!==o);r.length!==i.guides.length&&(i.guides=r,It(i))}function Jt(e,o){for(const i of o){const r=D(e,i.id);if(!r)continue;const u={};i.x!==void 0&&(u.x=i.x),i.y!==void 0&&(u.y=i.y),Object.keys(u).length!==0&&(r.begin(i.id),r.apply(i.id,u),r.end(i.id))}}const Xn=[{op:"left",testId:"align-left",label:"Align left",icon:_t},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:Nt},{op:"right",testId:"align-right",label:"Align right",icon:Kt},{op:"top",testId:"align-top",label:"Align top",icon:_t,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:Nt,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Kt,rotate:!0}],$n=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:He},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:_e}];function Fn(e){const r=e.y-30-8;return{left:e.x,top:r<0?e.y+e.height+8:r}}function An({adapter:e,entries:o}){if(o.length<2)return null;const i=$e(o.map(p=>p.rect));if(!i)return null;const{left:r,top:u}=Fn(i),s=o.length>=3;return d.jsxs(Fe,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:r,top:u,zIndex:yt.overlayLow,gap:2,padding:3},children:[Xn.map(({op:p,testId:b,label:y,icon:x,rotate:v})=>d.jsx(Vt,{"data-testid":b,title:y,"aria-label":y,variant:"ghost",size:"compact",onClick:()=>Jt(e,Ae(o,p)),children:d.jsx(Wt,{icon:x,"aria-hidden":"true",style:v?{transform:"rotate(90deg)"}:void 0})},p)),s&&d.jsxs(d.Fragment,{children:[d.jsx(Ye,{}),$n.map(({axis:p,testId:b,label:y,icon:x})=>d.jsx(Vt,{"data-testid":b,title:y,"aria-label":y,variant:"ghost",size:"compact",onClick:()=>Jt(e,Ne(o,p)),children:d.jsx(Wt,{icon:x,"aria-hidden":"true"})},p))]})]})}function Yn({rect:e,initialText:o,onCommit:i,onCancel:r}){const[u,s]=c.useState(o),p=c.useRef(null),b=c.useRef(!1);c.useEffect(()=>{const v=p.current;v&&(v.focus(),v.select())},[]);const y=()=>{b.current||(b.current=!0,i(u))},x=()=>{b.current||(b.current=!0,r())};return d.jsx(Ke,{ref:p,"data-testid":"world-text-editor",value:u,onChange:v=>s(v.target.value),onBlur:y,onKeyDown:v=>{v.key==="Escape"?(v.stopPropagation(),x()):v.key==="Enter"&&!v.shiftKey&&(v.preventDefault(),y())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:yt.overlayLow,pointerEvents:"auto",resize:"none"}})}const C=ot.accent.default,Hn=yt.overlayLow,bt=5;function _n(e,o,i){return e?!1:Dt()?.editorControls?.activate(o,i)??!1}function Nn(e,o,i,r,u,s){const p=e?null:Dt()?.editorControls?.hover(o,i)??null;u(p),s(p?null:r(o,i))}function Kn(e,o){const i=e.hierarchy.node(o);return i?`${i.label}·${i.kind}`:o}function Vn(e){return e instanceof ce?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function Wn(e){const o=e instanceof ce?e.childAdapters():[{worldId:"",adapter:e}],i=[];for(const{worldId:r,adapter:u}of o)if(u.rects&&!(r&&zn(r)))for(const s of Ln(u)){if(u.inspector?.get(s,"locked")===!0)continue;const p=u.rects.rect(s);p&&i.push({id:s,rect:p})}return i}function Un(e,o){return e.x<o.x+o.width&&e.x+e.width>o.x&&e.y<o.y+o.height&&e.y+e.height>o.y}function Zn(e,o,i){if(!i)return[o];const r=new Set(e);return r.has(o)?r.delete(o):r.add(o),[...r]}function Qn(e,o,i,r){return o&&!!i&&(i.width>bt||i.height>bt)&&i?Wn(e).filter(p=>Un(i,p.rect)).map(p=>p.id):r?null:[]}function qn(e,o,i,r){return e?"grabbing":o?"grab":i||r?"crosshair":"default"}function F(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function zt(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function Jn(e,o){if(o!==null)return!1;const i=e.currentTarget.parentElement?.parentElement??null;return Tn(i,e.clientX,e.clientY)}function te(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`${o?2:1}px solid ${C}`,background:o?`color-mix(in srgb, ${C} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function to(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:C,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const xt=10,ee=48;function ne(e,o){return{position:"absolute",left:e.x-xt/2,top:e.y-xt/2,width:xt,height:xt,background:"#fff",border:`1px solid ${C}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const Z=12,eo=24;function no(e){return{position:"absolute",left:e.x+e.width/2-Z/2,top:e.y-eo-Z/2,width:Z,height:Z,borderRadius:"50%",background:"#fff",border:`1px solid ${C}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const oe=12;function oo(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:oe,height:oe,borderRadius:"50%",background:e.writable?e.color:"transparent",border:`2px solid ${e.color}`,boxSizing:"border-box",cursor:e.writable?"grab":"not-allowed",padding:0,pointerEvents:e.writable?"auto":"none",touchAction:"none"}}function io(e){return{position:"absolute",left:e.x-8,top:e.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:e.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${C}`,boxSizing:"border-box",color:C,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function ro(e){return{position:"absolute",left:e.x,top:e.y+e.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:C,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const so="rgba(46, 204, 113, 0.25)",ao="rgba(230, 126, 34, 0.25)";function lo(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?so:ao,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function co(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:e.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function uo(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${C}`,background:`color-mix(in srgb, ${C} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function po(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const jt="#ff2d92",gt=6;function fo(e){const o=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:o?Math.abs(e.x2-e.x1):1,height:o?1:Math.abs(e.y2-e.y1),background:jt,pointerEvents:"none"}}function ie(e,o,i){return{position:"absolute",left:i?e:e-gt/2,top:i?o-gt/2:o,width:i?1:gt,height:i?gt:1,background:jt,pointerEvents:"none"}}function ho(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:jt,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const re="#f24822";function xo(e){const o=e.orientation==="vertical";return{position:"absolute",left:o?e.at:e.start,top:o?e.start:e.at,width:o?1:e.end-e.start,height:o?e.end-e.start:1,borderLeft:o?`1px dashed ${re}`:void 0,borderTop:o?void 0:`1px dashed ${re}`,pointerEvents:"none"}}function go(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const se={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:ot.content.onAccent,background:`color-mix(in srgb, ${C} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function bo(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${C} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function ae(e,o,i){return o&&i>0?Math.round(e/i)*i:e}function yo(e,o,i,r,u,s){const p=e.nativeHandleSpan??1,b=e.nativeScaleAxis??"both";let y,x;if(b==="x")y=1+o/p,x=1;else if(b==="y")y=1,x=1+i/p;else{const v=1+(o+i)/(Math.SQRT2*p);y=v,x=v}return{...b!=="y"?{scaleXFactor:y}:{},...b!=="x"?{scaleYFactor:x}:{},...r&&!u?{scaleStep:s}:{}}}function vo(e,o,i,r,u,s){const p=e.nativeOrigin;if(!p)return{};const b=r&&!u;return{...e.moveAxis!=="y"?{originX:ae(p.x+o,b,s)}:{},...e.moveAxis!=="x"?{originY:ae(p.y+i,b,s)}:{}}}function mo(e,o,i){return e==="x"?{x:o.x+i,y:o.y}:e==="y"?{x:o.x,y:o.y+i}:{x:o.x+i/Math.SQRT2,y:o.y+i/Math.SQRT2}}function wo(e,o,i){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:i}:{dx:o,dy:i}}function Eo(e,o){e.ownerBoxEdit.begin(e.id);for(const i of e.peers)i.ownerBoxEdit.begin(i.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:o,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function So(e,o,i){let r=o;for(let u=0;r!==null&&u<256;u++){if(i.has(r))return r;r=e.hierarchy.node(r)?.parentId??null}return null}function Ro(e,o,i){const r=D(e,o);if(!r)return null;const u=e.inspector?.get(o,"style.position"),s=Lt(e,o)==="2d";if(u!=="absolute"&&u!=="fixed"&&!s)return null;const p=E(e,o);if(!p)return null;const b=s?r.gizmoOrigin?.(o)??void 0:void 0,y=[];for(const x of i){if(x===o)continue;const v=D(e,x),it=E(e,x);if(!v||!it)continue;const _=e.inspector?.get(x,"style.position"),B=Lt(e,x)==="2d";if(_!=="absolute"&&_!=="fixed"&&!B)continue;const rt=B?v.gizmoOrigin?.(x)??void 0:void 0;y.push({id:x,ownerBoxEdit:v,origRect:it,...rt?{nativeOrigin:rt}:{}})}return{id:o,ownerBoxEdit:r,origRect:p,context:nt(e,o),...b?{nativeOrigin:b}:{},peers:y}}function Co(e,o){if(!yn(e,o)?.reorder)return null;const r=vn(e,o);if(!r||r.length<3)return null;const u=E(e,o);if(!u)return null;const s=[];for(const p of r){if(p===o)continue;const b=E(e,p);b&&s.push({id:p,rect:b})}return s.length===0?null:{id:o,adapter:e,origRect:u,siblingRects:s}}function ko(){return mn()}function Po(e,o){if(o.size!==1)return null;const i=[...o][0],r=D(e,i);if(!r)return null;const u=E(e,i);if(!u)return null;const s=wn(u,En(e,i));return{id:i,rect:u,ownerBoxEdit:r,spacingBands:s}}function zo(e,o){if(o.size<2)return null;const i=[];for(const r of o){const u=E(e,r);if(!u||!D(e,r))return null;i.push({id:r,rect:u})}return i}function Lo(e,o,i){const r=o.size===1?[...o][0]:null,u=r?E(e,r):null,s=u&&i?Sn(u,i):[],p=r?Rn(e,r):null,b=!!(p&&(p.position||p.parentLayout)),y=r?nt(e,r)?.parent??null:null;return{selectedSingleRect:u,measureLines:s,positionBadge:p,showPositionBadge:b,parentRect:y}}function Do({state:e,adapter:o,onClose:i}){const r=c.useRef(null);return c.useEffect(()=>{const u=p=>{r.current?.contains(p.target)||i()},s=p=>{p.key==="Escape"&&i()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",s),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",s)}},[i]),d.jsx(Cn,{children:d.jsx(kn,{ref:r,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:yt.dropdown},children:e.ids.map(u=>{const s=o.hierarchy.node(u);return d.jsxs(Pn,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{le(o,[u]),i()},style:{justifyContent:"space-between",gap:20},children:[d.jsx("span",{children:s?.label??u}),d.jsx("span",{style:{color:ot.content.muted,fontSize:11},children:s?.kind??""})]},u)})})})}function Ko({adapter:e,view:o,transformModeAware:i=!1}={}){const r=Ve(We()),u=c.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Ue(r),p=c.useCallback((t,n)=>e?e.pickable?.pick(t,n)??null:Ze(r,t,n),[e,r]),b=c.useRef(null),y=c.useRef(null),x=c.useRef(null),[v,it]=c.useState(null),[_,B]=c.useState(null),[rt,Tt]=c.useState(null),[Ot,vt]=c.useState(null),st=c.useRef(null),Bt=c.useCallback((t,n)=>{const l=Qe(r,t,n,{...e?{adapter:e}:{}});if(l.length===0){vt(null);return}vt({x:t,y:n,ids:l})},[e,r]);c.useEffect(()=>{const t=l=>{const a=st.current;!a||a.pointerId!==l.pointerId||a.moved||Math.hypot(l.clientX-a.startClientX,l.clientY-a.startClientY)>bt&&(a.moved=!0)},n=l=>{const a=st.current;!a||a.pointerId!==l.pointerId||(st.current=null,l.type==="pointerup"&&!a.moved&&Bt(l.clientX,l.clientY))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",n),window.addEventListener("pointercancel",n),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n),window.removeEventListener("pointercancel",n)}},[Bt]);const de=c.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),P=o??qe,g=c.useSyncExternalStore(P.subscribe,P.get,P.get);c.useSyncExternalStore(c.useCallback(t=>Mn(P,t),[P]),c.useCallback(()=>Gn(P),[P]));const mt=i?Bn(P):[],N=i?1/g.zoom:1,wt=c.useRef(!1),[ue,Gt]=c.useState(!1),G=c.useRef(null),[pe,at]=c.useState(!1),R=c.useRef(null);c.useEffect(()=>()=>{const t=R.current;if(R.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const n of t.movePeers??[])n.ownerBoxEdit.end(n.id)}},[]);const[,fe]=c.useState(0),[he,q]=c.useState(null),[xe,K]=c.useState([]),Et=c.useRef(null),[ge,be]=c.useState(null),V=c.useCallback(t=>{Et.current=t,be(t)},[]),Mt=c.useRef(null),[ye,ve]=c.useState(null),[lt,J]=c.useState(null),A=c.useCallback(t=>{Mt.current=t,ve(t)},[]),St=c.useRef(null),Xt=c.useRef(null);c.useEffect(()=>{const t=St.current;if(!t)return;St.current=null;const n=Pt(s,t.id);n&&n.get(t.id)===null&&J({id:t.id,rect:t.rect})},[u]);const $t=c.useRef("");c.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==$t.current&&($t.current=t,lt&&J(null))}),c.useEffect(()=>{if(!lt)return;const t=window.setTimeout(()=>J(null),4e3);return()=>window.clearTimeout(t)},[lt]);const M=c.useSyncExternalStore(Dn,In),[me,Ft]=c.useState(null),I=c.useCallback(t=>{x.current=t,it(t)},[]),m=c.useCallback((t,n)=>{const l=b.current?.getBoundingClientRect();return{x:(t-(l?.left??0)-g.x)/g.zoom,y:(n-(l?.top??0)-g.y)/g.zoom}},[g.x,g.y,g.zoom]),we=c.useCallback(t=>{!o||!i||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,i]),Ee=c.useCallback(t=>{if(!o||!i||!s.assetDrop)return;const n=t.dataTransfer.getData("application/x-editor-asset");if(!n)return;let l;try{l=JSON.parse(n)}catch{return}const a=m(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:l.component??{kind:"file",name:l.name??l.path.split("/").pop()??l.path}};s.assetDrop.accepts("",l.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",l.path,f))},[s.assetDrop,o,m,i]),X=c.useCallback(()=>fe(t=>t+1),[]),ct=c.useCallback(()=>{const t=R.current;if(!t)return!1;R.current=null,t.ownerBoxEdit.end(t.id);for(const n of t.movePeers??[])n.ownerBoxEdit.end(n.id);return q(null),K([]),X(),!0},[X]),Se=c.useCallback((t,n)=>{if(n.stopPropagation(),n.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=D(s,a),h=E(s,a);if(!f||!h)return;const w=s.inspector?.get(a,"style.position"),O=Lt(s,a)==="2d";F(n),f.begin(a),R.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:m(n.clientX,n.clientY),origRect:h,pos:t,isPositioned:w==="absolute"||w==="fixed"||O,context:nt(s,a)}},[s,r,m]),Re=c.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const n=r.selectedEntityIds;if(n.size!==1)return;const l=[...n][0],a=D(s,l),f=E(s,l);if(!a||!f)return;const h=i?a.gizmoOrigin?.(l):null;F(t),a.begin(l),R.current={kind:"rotate",id:l,ownerBoxEdit:a,startLocal:m(t.clientX,t.clientY),origRect:f,center:h??{x:f.x+f.width/2,y:f.y+f.height/2},...h?{nativeOrigin:h}:{}}},[s,r,m,i]),Rt=c.useCallback((t,n)=>{if(n.stopPropagation(),n.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=D(s,a),h=E(s,a);if(!f||!h)return;const w=f.gizmoOrigin?.(a)??{x:h.x+h.width/2,y:h.y+h.height/2};F(n),f.begin(a),R.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:m(n.clientX,n.clientY),origRect:h,context:nt(s,a),moveAxis:t,nativeOrigin:w}},[s,r,m]),Ce=c.useCallback((t,n)=>{if(n.stopPropagation(),n.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=D(s,a),h=E(s,a);if(!f||!h)return;const w=f.gizmoOrigin?.(a)??{x:h.x+h.width/2,y:h.y+h.height/2};F(n),f.begin(a),R.current={kind:"native-scale",id:a,ownerBoxEdit:f,startLocal:m(n.clientX,n.clientY),origRect:h,nativeOrigin:w,nativeScaleAxis:t,nativeHandleSpan:ee/g.zoom}},[s,g.zoom,r,m]),ke=c.useCallback((t,n)=>{if(n.stopPropagation(),n.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=D(s,a),h=E(s,a);!f||!h||f.referencePoint?.(a)?.id!==t.id||(F(n),f.begin(a),R.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:m(n.clientX,n.clientY),origRect:h,context:nt(s,a),pointerId:n.pointerId,referencePoint:t})},[s,r,m]),dt=c.useRef(null),Pe=c.useCallback((t,n,l,a)=>{a.stopPropagation(),!(a.button!==0||!l.writable)&&(F(a),dt.current={id:t,handleId:l.id,provider:n})},[]),ze=c.useCallback(t=>{const n=dt.current;if(!n)return;const l=m(t.clientX,t.clientY);n.provider.preview(n.id,n.handleId,[l.x,l.y,0]),X()},[X,m]),Ct=c.useCallback(t=>{const n=dt.current;if(dt.current=null,!n)return;zt(t);const l=m(t.clientX,t.clientY);n.provider.commit(n.id,n.handleId,[l.x,l.y,0]),X()},[X,m]),Le=c.useCallback((t,n)=>{if(n.stopPropagation(),n.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=D(s,a),h=E(s,a);!f||!h||(F(n),f.begin(a),R.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:m(n.clientX,n.clientY),origRect:h,side:t.side,origValue:t.value})},[s,r,m]),ut=c.useCallback((t,n)=>{if(t.pointerId!==void 0&&n.pointerId!==t.pointerId)return;const l=m(n.clientX,n.clientY),a=l.x-t.startLocal.x,f=l.y-t.startLocal.y;let h;if(t.kind==="resize")h=tn(t.pos,a,f,t.origRect,!!t.isPositioned,n.altKey,t.context),K(en(t.pos,a,f,t.origRect,n.altKey,t.context));else if(t.kind==="native-scale")h=yo(t,a,f,r.snapEnabled,n.altKey,r.snapValues.scale),K([]);else if(t.kind==="move"){const{dx:w,dy:O}=wo(t.moveAxis,a,f);if(t.nativeOrigin){h=vo(t,w,O,r.snapEnabled,n.altKey,r.snapValues.translate);const L=nn({x:h.originX??t.nativeOrigin.x,y:h.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,!r.snapEnabled||n.altKey,on/Math.max(g.zoom,.01),{x:mt.filter(H=>H.axis==="x").map(H=>H.value),y:mt.filter(H=>H.axis==="y").map(H=>H.value)});h.originX!==void 0&&(h.originX=L.position.x),h.originY!==void 0&&(h.originY=L.position.y),K(L.guides)}else h=rn(w,O,t.origRect,n.altKey,t.context);q(Ut(t.origRect,w,O)),t.nativeOrigin||K(sn(w,O,t.origRect,n.altKey,t.context))}else if(t.kind==="reference"){const w=an(l,t.origRect,n.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});h={referenceX:w.position.x,referenceY:w.position.y},K(w.guides)}else t.kind==="rotate"?h=ln(t.center,t.startLocal,l,t.nativeOrigin&&!r.snapEnabled||n.altKey,t.nativeOrigin?r.snapValues.rotate:15):h=cn(t.side,a,f,t.origValue??0);if(t.ownerBoxEdit.apply(t.id,h),t.kind==="move"&&t.movePeers){const w=t.nativeOrigin?(h.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(h.x??t.origRect.x)-t.origRect.x,O=t.nativeOrigin?(h.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(h.y??t.origRect.y)-t.origRect.y;for(const L of t.movePeers)L.ownerBoxEdit.apply(L.id,L.nativeOrigin?{originX:L.nativeOrigin.x+w,originY:L.nativeOrigin.y+O}:{x:L.origRect.x+w,y:L.origRect.y+O})}X()},[m,X,r,mt,g.zoom]),pt=c.useCallback((t,n)=>{const l=p(t,n);if(!l)return null;const a=dn(s,l)?.backgroundChainAt(t,n)??null;return a?On(a):null},[s,p]);c.useEffect(()=>{if(!M)return;const t=n=>{n.key==="Escape"&&Zt(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[M]),c.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,n=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),wt.current=!0,Gt(!0))},l=a=>{a.code==="Space"&&(wt.current=!1,Gt(!1),G.current&&(G.current=null,at(!1)))};return window.addEventListener("keydown",n),window.addEventListener("keyup",l),()=>{window.removeEventListener("keydown",n),window.removeEventListener("keyup",l)}},[]);const At=c.useCallback(t=>{if(t.stopPropagation(),F(t),wt.current){G.current={startClientX:t.clientX,startClientY:t.clientY,startPan:P.get()},at(!0);return}if(M){Zt(pt(t.clientX,t.clientY)),Ft(null);return}if(_n(e,t.clientX,t.clientY)){y.current=null,B(null),I(null);return}const n=p(t.clientX,t.clientY);if(Jn(t,n)){y.current=null,B(null),I(null);return}const l=n!==null?So(s,n,r.selectedEntityIds):null,a=(!i||r.transformMode==="translate")&&l!==null?Ro(s,l,r.selectedEntityIds):null,f=!a&&l!==null?Co(s,l):null;y.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:m(t.clientX,t.clientY),hitAtDown:n,moved:!1,moveCandidate:a,reorderCandidate:f},B(null),I(null)},[s,r,P,i,m,I,M,pt,p,e]),De=c.useCallback(t=>{if(t.button===2){st.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&At(t)},[At]),Yt=c.useCallback((t,n)=>{const l=n.clientX-t.downClientX,a=n.clientY-t.downClientY;if(!t.moved&&Math.hypot(l,a)>bt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Eo(t.moveCandidate,t.downLocal);R.current=f,ut(f,n);return}if(t.reorderCandidate){const f=m(n.clientX,n.clientY),h=un(t.reorderCandidate.siblingRects,f);h&&(V({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:h}),q(Ut(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=m(n.clientX,n.clientY);I({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[m,I,ut,V]),j=c.useCallback(t=>{const n=G.current;if(n){P.setPan(n.startPan.x+(t.clientX-n.startClientX),n.startPan.y+(t.clientY-n.startClientY));return}if(M){const f=m(t.clientX,t.clientY);Ft({...f,color:pt(t.clientX,t.clientY)});return}const l=R.current;if(l){ut(l,t);return}if((t.buttons&1)===0){Nn(e,t.clientX,t.clientY,p,Tt,B);return}const a=y.current;a&&Yt(a,t)},[r,P,m,ut,M,pt,Yt,p,e]),T=c.useCallback(t=>{if(zt(t),G.current){G.current=null,at(!1);return}const n=R.current;if(n?.pointerId!==void 0&&t.pointerId!==n.pointerId||ct())return;const l=Et.current;if(l){V(null),q(null),y.current=null,pn(l.adapter,l.id,l.gap.beforeSiblingId);return}const a=y.current;if(y.current=null,!a)return;const f=a.hitAtDown!==null?Zn(r.selectedEntityIds,a.hitAtDown,t.shiftKey):Qn(s,a.moved,x.current,t.shiftKey);f!==null&&le(s,f),I(null)},[s,r,I,ct,V]),z=c.useCallback(t=>{if(zt(t),G.current){G.current=null,at(!1);return}const n=R.current;n?.pointerId!==void 0&&t.pointerId!==n.pointerId||ct()||(Et.current&&(V(null),q(null)),y.current=null,I(null))},[ct,I,V]),Ie=c.useCallback(()=>{e||Dt()?.editorControls?.clearHover(),Tt(null),B(null)},[e]),je=c.useCallback(t=>{const n=b.current?.parentElement??null;if(jn(n,t.clientX,t.clientY))return;const l=p(t.clientX,t.clientY);if(!l)return;const a=Pt(s,l);if(!a)return;const f=E(s,l);if(!f)return;const h=a.get(l);if(h===null){console.warn(`[RootSelectionOverlay] text edit refused for "${l}": dynamic body or has child elements — not inline-editable.`),A(null),J({id:l,rect:f});return}J(null),A({id:l,rect:f,initialText:h})},[s,p,A]),Te=c.useCallback(t=>{const n=Mt.current;if(!n)return;const l=Pt(s,n.id);l&&(St.current={id:n.id,rect:n.rect},l.set(n.id,t)),A(null)},[s,A]),Oe=c.useCallback(()=>A(null),[A]);if(!Vn(s)||ko())return null;const Y=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),kt=_!==null&&!Y.has(_)?E(s,_):null,k=Po(s,Y),W=k?.rect??null,Be=k?.ownerBoxEdit??null,S=i&&k?k.ownerBoxEdit.gizmoOrigin?.(k.id)??{x:k.rect.x+k.rect.width/2,y:k.rect.y+k.rect.height/2}:null,tt=ee/g.zoom,$=k?k.ownerBoxEdit.referencePoint?.(k.id):null,Ge=k?.spacingBands??[],U=Y.size===1?[...Y][0]:null,ft=U?fn(s,U):null,Me=U&&ft&&r.showHelpers?ft.layers(U).filter(t=>r.helperVisibility[t.category]??!0):[],et=i?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Lo(s,Y,kt),Ht=i?null:zo(s,Y),ht=Xt.current,Xe=i?[]:ht&&ht.adapter===s&&ht.version===u?ht.hints:(()=>{const t=hn(s);return Xt.current={adapter:s,version:u,hints:t},t})();return d.jsxs("div",{style:{position:"absolute",inset:0,zIndex:Hn,pointerEvents:"none"},children:[d.jsx("div",{ref:b,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:rt??qn(pe,ue,M,!!v)},onPointerDownCapture:De,onPointerMove:j,onPointerUp:T,onPointerCancel:z,onLostPointerCapture:z,onPointerLeave:Ie,onDoubleClick:je,onContextMenu:de,onDragOver:we,onDrop:Ee}),Ot?d.jsx(Do,{state:Ot,adapter:s,onClose:()=>vt(null)}):null,d.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:bn(g),transformOrigin:"0 0"},children:[!i&&Xe.map(t=>d.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,border:"1px dashed rgba(154, 160, 166, 0.7)",borderWidth:i?1/g.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),kt&&d.jsx("div",{"data-testid":"world-selection-hover",style:{...te(kt,!1),...i?{borderWidth:1/g.zoom}:{}}}),[...Y].map(t=>{const n=E(s,t);return n?d.jsxs("div",{children:[d.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,style:{...te(n,!0),...i?{borderWidth:1/g.zoom,background:"transparent"}:{}}}),!i&&d.jsx("div",{"data-testid":"world-selection-label",style:to(n),children:Kn(s,t)})]},t):null}),v&&d.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:v.x,top:v.y,width:v.width,height:v.height,border:`1px solid ${C}`,background:`color-mix(in srgb, ${C} 10%, transparent)`,pointerEvents:"none"}}),!i&&d.jsx(Io,{measureLines:et.measureLines,snapGuides:xe,positionBadge:et.positionBadge,showPositionBadge:et.showPositionBadge,badgeAnchorRect:et.selectedSingleRect,parentRect:et.parentRect,screenScale:N,screenZoom:1}),!i&&d.jsx(jo,{dragGhost:he,reorderPreview:ge}),!i&&Ht&&d.jsx(An,{adapter:s,entries:Ht}),W&&Be&&d.jsxs(d.Fragment,{children:[!i&&Ge.map(t=>d.jsxs("div",{children:[d.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Oo(t.side)}`,style:lo(t),onPointerDown:n=>Le(t,n),onPointerMove:j,onPointerUp:T,onPointerCancel:z}),!t.isZero&&d.jsx("div",{style:{...co(t),...i?{transform:`translate(-50%, -50%) scale(${N})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),$&&d.jsx("div",{"aria-label":`Edit ${$.label}`,"data-reference-kind":$.kind,"data-testid":"world-reference-point-handle",title:`${$.label} (${$.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...io($),...i?{transform:`scale(${N})`,transformOrigin:"center"}:{}},onPointerDown:t=>ke($,t),onPointerMove:j,onPointerUp:T,onPointerCancel:z,onLostPointerCapture:z,role:"button",tabIndex:0,children:$.kind==="anchor"?"A":"P"}),U&&ft&&Me.flatMap(t=>t.handles.map(n=>d.jsx("div",{"aria-label":n.label,"data-testid":"world-spatial-handle","data-handle-id":n.id,"data-writable":n.writable,role:"button",tabIndex:0,title:n.writable?n.label:`${n.label} — ${n.reason}`,style:{...oo(n),transform:`translate(-50%, -50%) scale(${N})`},onPointerDown:l=>Pe(U,ft,n,l),onPointerMove:ze,onPointerUp:Ct,onPointerCancel:Ct,onLostPointerCapture:Ct},`${t.id}:${n.id}`))),i&&r.transformMode==="translate"&&d.jsxs(d.Fragment,{children:[d.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:S.x,top:S.y-5/g.zoom,width:tt,height:10/g.zoom,borderTop:`${2/g.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>Rt("x",t),onPointerMove:j,onPointerUp:T,onPointerCancel:z}),d.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:S.x-5/g.zoom,top:S.y,width:10/g.zoom,height:tt,borderLeft:`${2/g.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>Rt("y",t),onPointerMove:j,onPointerUp:T,onPointerCancel:z}),d.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:S.x-5/g.zoom,top:S.y-5/g.zoom,width:10/g.zoom,height:10/g.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>Rt("both",t),onPointerMove:j,onPointerUp:T,onPointerCancel:z})]}),(!i||r.transformMode==="scale")&&(i?d.jsxs(d.Fragment,{children:[d.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:S.x,top:S.y,width:tt,borderTop:`${2/g.zoom}px solid #ef5350`,pointerEvents:"none"}}),d.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:S.x,top:S.y,height:tt,borderLeft:`${2/g.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,n])=>{const l=mo(t,S,tt),a=t==="x"?"e":t==="y"?"s":"se";return d.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ne(l,n),transform:`scale(${N})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Ce(t,f),onPointerMove:j,onPointerUp:T,onPointerCancel:z},t)})]}):d.jsxs(d.Fragment,{children:[xn.map(({pos:t,cursor:n})=>d.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:ne(gn(W,t),n),onPointerDown:l=>Se(t,l),onPointerMove:j,onPointerUp:T,onPointerCancel:z},t)),d.jsx("div",{"data-testid":"world-resize-dimension-label",style:ro(W),children:`${Math.round(W.width)}×${Math.round(W.height)}`})]})),(!i||r.transformMode==="rotate")&&d.jsxs(d.Fragment,{children:[i&&d.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:S.x-40/g.zoom,top:S.y-40/g.zoom,width:80/g.zoom,height:80/g.zoom,border:`${1/g.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),d.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:"Rotate selection (15° snap, Alt for free rotation)",style:{...no(W),...i?{left:S.x-Z/2,top:S.y-40/g.zoom-Z/2,transform:`scale(${N})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Re,onPointerMove:j,onPointerUp:T,onPointerCancel:z,role:"button",tabIndex:0})]})]}),!i&&d.jsx(To,{textEdit:ye,onCommitTextEdit:Te,onCancelTextEdit:Oe,textEditRefused:lt,eyedropperActive:M,eyedropperPreview:me})]})]})}function Io(e){const{measureLines:o,snapGuides:i,positionBadge:r,showPositionBadge:u,badgeAnchorRect:s,parentRect:p,screenScale:b,screenZoom:y}=e;return d.jsxs(d.Fragment,{children:[p&&d.jsx("div",{"data-testid":"world-parent-outline",style:bo(p)}),o.map(x=>d.jsxs("div",{"data-testid":"world-measure-line",children:[d.jsx("div",{style:fo(x)}),d.jsx("div",{style:ie(x.x1,x.y1,x.orientation==="horizontal")}),d.jsx("div",{style:ie(x.x2,x.y2,x.orientation==="horizontal")}),d.jsx("div",{"data-testid":"world-measure-line-label",style:{...ho(x),...b!==1?{transform:`translate(-50%, -50%) scale(${b})`,transformOrigin:"center"}:{}},children:x.distance})]},x.orientation)),i.map(x=>d.jsx("div",{"data-testid":"world-snap-guide",style:xo(x)},x.orientation)),u&&s&&r&&d.jsxs("div",{"data-testid":"world-position-badge",style:{...go(s),...b!==1?{top:s.y-36/y,transform:`scale(${b})`,transformOrigin:"top left"}:{}},children:[r.position&&d.jsx("span",{"data-testid":"world-position-badge-mode",style:se,children:r.position}),r.parentLayout&&d.jsx("span",{"data-testid":"world-position-badge-layout",style:se,children:r.parentLayout})]})]})}function jo(e){const{dragGhost:o,reorderPreview:i}=e;return d.jsxs(d.Fragment,{children:[o&&d.jsx("div",{"data-testid":"world-drag-ghost",style:uo(o)}),i&&d.jsx("div",{"data-testid":"world-reorder-preview",style:po(i.gap.marker)})]})}function To(e){const{textEdit:o,onCommitTextEdit:i,onCancelTextEdit:r,textEditRefused:u,eyedropperActive:s,eyedropperPreview:p}=e;return d.jsxs(d.Fragment,{children:[o&&d.jsx("div",{style:{pointerEvents:"auto"},children:d.jsx(Yn,{rect:o.rect,initialText:o.initialText,onCommit:i,onCancel:r})}),u&&d.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:u.rect.x,top:u.rect.y,width:Math.max(u.rect.width,40),height:Math.max(u.rect.height,20),border:`2px dashed ${ot.semantic.danger}`,boxSizing:"border-box",background:ot.semantic.dangerMuted,pointerEvents:"none"}}),s&&p&&d.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":p.color?"resolved":"unknown",style:{position:"absolute",left:p.x+12,top:p.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:p.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Oo(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{Ko as R,Bn as a,Ho as b,Gn as c,_o as m,No as r,Mn as s};
@@ -1 +1 @@
1
- import{_ as M}from"./extends-CF3RwP-h.js";import{r as o}from"./index-nmcBqr7Y.js";import{t as R}from"./BufferGeometryUtils-Nz37EVXf.js";import{b8 as I}from"./three.module-D396a9Mn.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";const t=1e-5;function h(c,a,n){const r=new I,e=n-t;return r.absarc(t,t,t,-Math.PI/2,-Math.PI,!0),r.absarc(t,a-e*2,t,Math.PI,Math.PI/2,!0),r.absarc(c-e*2,a-e*2,t,Math.PI/2,0,!0),r.absarc(c-e*2,t,t,0,-Math.PI/2,!0),r}const B=o.forwardRef(function({args:[a=1,n=1,r=1]=[],radius:e=.05,steps:m=1,smoothness:u=4,bevelSegments:f=4,creaseAngle:p=.4,children:b,...d},l){return o.createElement("mesh",M({ref:l},d),o.createElement(i,{args:[a,n,r],radius:e,steps:m,smoothness:u,bevelSegments:f,creaseAngle:p}),b)}),i=o.forwardRef(function({args:[a=1,n=1,r=1]=[],radius:e=.05,steps:m=1,smoothness:u=4,bevelSegments:f=4,creaseAngle:p=.4,...b},d){const l=o.useMemo(()=>h(a,n,e),[a,n,e]),x=o.useMemo(()=>({depth:r-e*2,bevelEnabled:!0,bevelSegments:f*2,steps:m,bevelSize:e-t,bevelThickness:e,curveSegments:u}),[r,e,u,f,m]),s=o.useRef(null);return o.useLayoutEffect(()=>{s.current&&(s.current.center(),R(s.current,p))},[l,x,p]),o.useImperativeHandle(d,()=>s.current),o.createElement("extrudeGeometry",M({ref:s,args:[l,x]},b))});export{B as RoundedBox,i as RoundedBoxGeometry};
1
+ import{_ as M}from"./extends-CF3RwP-h.js";import{r as o}from"./index-nmcBqr7Y.js";import{t as R}from"./BufferGeometryUtils-CAbuTPOA.js";import{b5 as I}from"./three.module-IFn-4i31.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";const t=1e-5;function h(c,a,n){const r=new I,e=n-t;return r.absarc(t,t,t,-Math.PI/2,-Math.PI,!0),r.absarc(t,a-e*2,t,Math.PI,Math.PI/2,!0),r.absarc(c-e*2,a-e*2,t,Math.PI/2,0,!0),r.absarc(c-e*2,t,t,0,-Math.PI/2,!0),r}const B=o.forwardRef(function({args:[a=1,n=1,r=1]=[],radius:e=.05,steps:m=1,smoothness:u=4,bevelSegments:f=4,creaseAngle:p=.4,children:b,...d},l){return o.createElement("mesh",M({ref:l},d),o.createElement(i,{args:[a,n,r],radius:e,steps:m,smoothness:u,bevelSegments:f,creaseAngle:p}),b)}),i=o.forwardRef(function({args:[a=1,n=1,r=1]=[],radius:e=.05,steps:m=1,smoothness:u=4,bevelSegments:f=4,creaseAngle:p=.4,...b},d){const l=o.useMemo(()=>h(a,n,e),[a,n,e]),x=o.useMemo(()=>({depth:r-e*2,bevelEnabled:!0,bevelSegments:f*2,steps:m,bevelSize:e-t,bevelThickness:e,curveSegments:u}),[r,e,u,f,m]),s=o.useRef(null);return o.useLayoutEffect(()=>{s.current&&(s.current.center(),R(s.current,p))},[l,x,p]),o.useImperativeHandle(d,()=>s.current),o.createElement("extrudeGeometry",M({ref:s,args:[l,x]},b))});export{B as RoundedBox,i as RoundedBoxGeometry};
@@ -1 +1 @@
1
- import{B as S,V as f}from"./three.module-D396a9Mn.js";const h=new f;function a(k,o,i,l,g,e){const y=2*Math.PI*g/4,m=Math.max(e-2*g,0),x=Math.PI/4;h.copy(o),h[l]=0,h.normalize();const t=.5*y/(y+m),z=1-h.angleTo(k)/x;return Math.sign(h[i])===1?z*t:m/(y+m)+t+t*(1-z)}class v extends S{constructor(o=1,i=1,l=1,g=2,e=.1){const y=g*2+1;if(e=Math.min(o/2,i/2,l/2,e),super(1,1,1,y,y,y),this.type="RoundedBoxGeometry",this.parameters={width:o,height:i,depth:l,segments:g,radius:e},y===1)return;const m=this.toNonIndexed();this.index=null,this.attributes.position=m.attributes.position,this.attributes.normal=m.attributes.normal,this.attributes.uv=m.attributes.uv;const x=new f,t=new f,z=new f(o,i,l).divideScalar(2).subScalar(e),b=this.attributes.position.array,M=this.attributes.normal.array,r=this.attributes.uv.array,u=b.length/6,n=new f,p=.5/y;for(let c=0,s=0;c<b.length;c+=3,s+=2)switch(x.fromArray(b,c),t.copy(x),t.x-=Math.sign(t.x)*p,t.y-=Math.sign(t.y)*p,t.z-=Math.sign(t.z)*p,t.normalize(),b[c+0]=z.x*Math.sign(x.x)+t.x*e,b[c+1]=z.y*Math.sign(x.y)+t.y*e,b[c+2]=z.z*Math.sign(x.z)+t.z*e,M[c+0]=t.x,M[c+1]=t.y,M[c+2]=t.z,Math.floor(c/u)){case 0:n.set(1,0,0),r[s+0]=a(n,t,"z","y",e,l),r[s+1]=1-a(n,t,"y","z",e,i);break;case 1:n.set(-1,0,0),r[s+0]=1-a(n,t,"z","y",e,l),r[s+1]=1-a(n,t,"y","z",e,i);break;case 2:n.set(0,1,0),r[s+0]=1-a(n,t,"x","z",e,o),r[s+1]=a(n,t,"z","x",e,l);break;case 3:n.set(0,-1,0),r[s+0]=1-a(n,t,"x","z",e,o),r[s+1]=1-a(n,t,"z","x",e,l);break;case 4:n.set(0,0,1),r[s+0]=1-a(n,t,"x","y",e,o),r[s+1]=1-a(n,t,"y","x",e,i);break;case 5:n.set(0,0,-1),r[s+0]=a(n,t,"x","y",e,o),r[s+1]=1-a(n,t,"y","x",e,i);break}}static fromJSON(o){return new v(o.width,o.height,o.depth,o.segments,o.radius)}}export{v as RoundedBoxGeometry};
1
+ import{B as S,V as f}from"./three.module-IFn-4i31.js";const h=new f;function a(k,o,i,l,g,e){const y=2*Math.PI*g/4,m=Math.max(e-2*g,0),x=Math.PI/4;h.copy(o),h[l]=0,h.normalize();const t=.5*y/(y+m),z=1-h.angleTo(k)/x;return Math.sign(h[i])===1?z*t:m/(y+m)+t+t*(1-z)}class v extends S{constructor(o=1,i=1,l=1,g=2,e=.1){const y=g*2+1;if(e=Math.min(o/2,i/2,l/2,e),super(1,1,1,y,y,y),this.type="RoundedBoxGeometry",this.parameters={width:o,height:i,depth:l,segments:g,radius:e},y===1)return;const m=this.toNonIndexed();this.index=null,this.attributes.position=m.attributes.position,this.attributes.normal=m.attributes.normal,this.attributes.uv=m.attributes.uv;const x=new f,t=new f,z=new f(o,i,l).divideScalar(2).subScalar(e),b=this.attributes.position.array,M=this.attributes.normal.array,r=this.attributes.uv.array,u=b.length/6,n=new f,p=.5/y;for(let c=0,s=0;c<b.length;c+=3,s+=2)switch(x.fromArray(b,c),t.copy(x),t.x-=Math.sign(t.x)*p,t.y-=Math.sign(t.y)*p,t.z-=Math.sign(t.z)*p,t.normalize(),b[c+0]=z.x*Math.sign(x.x)+t.x*e,b[c+1]=z.y*Math.sign(x.y)+t.y*e,b[c+2]=z.z*Math.sign(x.z)+t.z*e,M[c+0]=t.x,M[c+1]=t.y,M[c+2]=t.z,Math.floor(c/u)){case 0:n.set(1,0,0),r[s+0]=a(n,t,"z","y",e,l),r[s+1]=1-a(n,t,"y","z",e,i);break;case 1:n.set(-1,0,0),r[s+0]=1-a(n,t,"z","y",e,l),r[s+1]=1-a(n,t,"y","z",e,i);break;case 2:n.set(0,1,0),r[s+0]=1-a(n,t,"x","z",e,o),r[s+1]=a(n,t,"z","x",e,l);break;case 3:n.set(0,-1,0),r[s+0]=1-a(n,t,"x","z",e,o),r[s+1]=1-a(n,t,"z","x",e,l);break;case 4:n.set(0,0,1),r[s+0]=1-a(n,t,"x","y",e,o),r[s+1]=1-a(n,t,"y","x",e,i);break;case 5:n.set(0,0,-1),r[s+0]=a(n,t,"x","y",e,o),r[s+1]=1-a(n,t,"y","x",e,i);break}}static fromJSON(o){return new v(o.width,o.height,o.depth,o.segments,o.radius)}}export{v as RoundedBoxGeometry};
@@ -0,0 +1 @@
1
+ import{ae as z,af as I,ax as H,v as P,r as _,ay as G,V as k,aV as N}from"./three.module-IFn-4i31.js";class W extends z{constructor(h){super(h)}load(h,V,v,y){const b=this,x=new I(this.manager);x.setPath(this.path),x.setResponseType("arraybuffer"),x.setRequestHeader(this.requestHeader),x.setWithCredentials(this.withCredentials),x.load(h,function(D){try{V(b.parse(D))}catch(A){y?y(A):console.error(A),b.manager.itemError(h)}},v,y)}parse(h){function V(t){const e=new DataView(t),o=32/8*3+32/8*3*3+16/8,s=e.getUint32(80,!0);if(80+32/8+s*o===e.byteLength)return!0;const i=[115,111,108,105,100];for(let a=0;a<5;a++)if(v(i,e,a))return!1;return!0}function v(t,e,o){for(let s=0,f=t.length;s<f;s++)if(t[s]!==e.getUint8(o+s))return!1;return!0}function y(t){const e=new DataView(t),o=e.getUint32(80,!0);let s,f,i,a=!1,m,L,C,S,U;for(let n=0;n<70;n++)e.getUint32(n,!1)==1129270351&&e.getUint8(n+4)==82&&e.getUint8(n+5)==61&&(a=!0,m=new Float32Array(o*3*3),L=e.getUint8(n+6)/255,C=e.getUint8(n+7)/255,S=e.getUint8(n+8)/255,U=e.getUint8(n+9)/255);const g=84,r=50,c=new H,p=new Float32Array(o*3*3),d=new Float32Array(o*3*3),w=new P;for(let n=0;n<o;n++){const F=g+n*r,T=e.getFloat32(F,!0),B=e.getFloat32(F+4,!0),R=e.getFloat32(F+8,!0);if(a){const l=e.getUint16(F+48,!0);(l&32768)===0?(s=(l&31)/31,f=(l>>5&31)/31,i=(l>>10&31)/31):(s=L,f=C,i=S)}for(let l=1;l<=3;l++){const E=F+l*12,u=n*3*3+(l-1)*3;p[u]=e.getFloat32(E,!0),p[u+1]=e.getFloat32(E+4,!0),p[u+2]=e.getFloat32(E+8,!0),d[u]=T,d[u+1]=B,d[u+2]=R,a&&(w.setRGB(s,f,i,_),m[u]=w.r,m[u+1]=w.g,m[u+2]=w.b)}}return c.setAttribute("position",new G(p,3)),c.setAttribute("normal",new G(d,3)),a&&(c.setAttribute("color",new G(m,3)),c.hasColors=!0,c.alpha=U),c}function b(t){const e=new H,o=/solid([\s\S]*?)endsolid/g,s=/facet([\s\S]*?)endfacet/g,f=/solid\s(.+)/;let i=0;const a=/[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source,m=new RegExp("vertex"+a+a+a,"g"),L=new RegExp("normal"+a+a+a,"g"),C=[],S=[],U=[],g=new k;let r,c=0,p=0,d=0;for(;(r=o.exec(t))!==null;){p=d;const w=r[0],n=(r=f.exec(w))!==null?r[1]:"";for(U.push(n);(r=s.exec(w))!==null;){let B=0,R=0;const l=r[0];for(;(r=L.exec(l))!==null;)g.x=parseFloat(r[1]),g.y=parseFloat(r[2]),g.z=parseFloat(r[3]),R++;for(;(r=m.exec(l))!==null;)C.push(parseFloat(r[1]),parseFloat(r[2]),parseFloat(r[3])),S.push(g.x,g.y,g.z),B++,d++;R!==1&&console.error("THREE.STLLoader: Something isn't right with the normal of face number "+i),B!==3&&console.error("THREE.STLLoader: Something isn't right with the vertices of face number "+i),i++}const F=p,T=d-p;e.userData.groupNames=U,e.addGroup(F,T,c),c++}return e.setAttribute("position",new N(C,3)),e.setAttribute("normal",new N(S,3)),e}function x(t){return typeof t!="string"?new TextDecoder().decode(t):t}function D(t){if(typeof t=="string"){const e=new Uint8Array(t.length);for(let o=0;o<t.length;o++)e[o]=t.charCodeAt(o)&255;return e.buffer||e}else return t}const A=D(h);return V(A)?y(A):b(x(h))}}export{W as STLLoader};
@@ -1 +1 @@
1
- import{V as a,bk as v,a as S,Q as L}from"./three.module-D396a9Mn.js";const C=new v,m=new a,p=new a,r=new a,i=new a,n=new a,o=new a,c=new a,l=new a,u=new a,x=new a,f=new a,y=new a,w=new a,_=new a,g=new S,I=new L,N=new a;class T{constructor(s,e,t=Number.MAX_VALUE){this.camera=s,this.scene=e,this.startPoint=new a,this.endPoint=new a,this.collection=[],this.instances={},this.deep=t}select(s,e){return this.startPoint=s||this.startPoint,this.endPoint=e||this.endPoint,this.collection=[],this._updateFrustum(this.startPoint,this.endPoint),this._searchChildInFrustum(C,this.scene),this.collection}_updateFrustum(s,e){if(s=s||this.startPoint,e=e||this.endPoint,s.x===e.x&&(e.x+=Number.EPSILON),s.y===e.y&&(e.y+=Number.EPSILON),this.camera.updateProjectionMatrix(),this.camera.updateMatrixWorld(),this.camera.isPerspectiveCamera){p.copy(s),p.x=Math.min(s.x,e.x),p.y=Math.max(s.y,e.y),e.x=Math.max(s.x,e.x),e.y=Math.min(s.y,e.y),r.setFromMatrixPosition(this.camera.matrixWorld),i.copy(p),n.set(e.x,p.y,0),o.copy(e),c.set(p.x,e.y,0),i.unproject(this.camera),n.unproject(this.camera),o.unproject(this.camera),c.unproject(this.camera),y.copy(i).sub(r),w.copy(n).sub(r),_.copy(o).sub(r),y.normalize(),w.normalize(),_.normalize(),y.multiplyScalar(this.deep),w.multiplyScalar(this.deep),_.multiplyScalar(this.deep),y.add(r),w.add(r),_.add(r);const t=C.planes;t[0].setFromCoplanarPoints(r,i,n),t[1].setFromCoplanarPoints(r,n,o),t[2].setFromCoplanarPoints(o,c,r),t[3].setFromCoplanarPoints(c,i,r),t[4].setFromCoplanarPoints(n,o,c),t[5].setFromCoplanarPoints(_,w,y),t[5].normal.multiplyScalar(-1)}else if(this.camera.isOrthographicCamera){const t=Math.min(s.x,e.x),F=Math.max(s.y,e.y),d=Math.max(s.x,e.x),M=Math.min(s.y,e.y);i.set(t,F,-1),n.set(d,F,-1),o.set(d,M,-1),c.set(t,M,-1),l.set(t,F,1),u.set(d,F,1),x.set(d,M,1),f.set(t,M,1),i.unproject(this.camera),n.unproject(this.camera),o.unproject(this.camera),c.unproject(this.camera),l.unproject(this.camera),u.unproject(this.camera),x.unproject(this.camera),f.unproject(this.camera);const h=C.planes;h[0].setFromCoplanarPoints(i,l,u),h[1].setFromCoplanarPoints(n,u,x),h[2].setFromCoplanarPoints(x,f,c),h[3].setFromCoplanarPoints(f,l,i),h[4].setFromCoplanarPoints(n,o,c),h[5].setFromCoplanarPoints(x,u,l),h[5].normal.multiplyScalar(-1)}else console.error("THREE.SelectionBox: Unsupported camera type.")}_searchChildInFrustum(s,e){if(e.isMesh||e.isLine||e.isPoints)if(e.isInstancedMesh){this.instances[e.uuid]=[];for(let t=0;t<e.count;t++)e.getMatrixAt(t,g),g.decompose(m,I,N),m.applyMatrix4(e.matrixWorld),s.containsPoint(m)&&this.instances[e.uuid].push(t)}else e.geometry.boundingSphere===null&&e.geometry.computeBoundingSphere(),m.copy(e.geometry.boundingSphere.center),m.applyMatrix4(e.matrixWorld),s.containsPoint(m)&&this.collection.push(e);if(e.children.length>0)for(let t=0;t<e.children.length;t++)this._searchChildInFrustum(s,e.children[t])}}export{T as SelectionBox};
1
+ import{V as a,bh as v,a as S,Q as L}from"./three.module-IFn-4i31.js";const C=new v,m=new a,p=new a,r=new a,i=new a,n=new a,o=new a,c=new a,l=new a,u=new a,x=new a,f=new a,y=new a,w=new a,_=new a,g=new S,I=new L,N=new a;class T{constructor(s,e,t=Number.MAX_VALUE){this.camera=s,this.scene=e,this.startPoint=new a,this.endPoint=new a,this.collection=[],this.instances={},this.deep=t}select(s,e){return this.startPoint=s||this.startPoint,this.endPoint=e||this.endPoint,this.collection=[],this._updateFrustum(this.startPoint,this.endPoint),this._searchChildInFrustum(C,this.scene),this.collection}_updateFrustum(s,e){if(s=s||this.startPoint,e=e||this.endPoint,s.x===e.x&&(e.x+=Number.EPSILON),s.y===e.y&&(e.y+=Number.EPSILON),this.camera.updateProjectionMatrix(),this.camera.updateMatrixWorld(),this.camera.isPerspectiveCamera){p.copy(s),p.x=Math.min(s.x,e.x),p.y=Math.max(s.y,e.y),e.x=Math.max(s.x,e.x),e.y=Math.min(s.y,e.y),r.setFromMatrixPosition(this.camera.matrixWorld),i.copy(p),n.set(e.x,p.y,0),o.copy(e),c.set(p.x,e.y,0),i.unproject(this.camera),n.unproject(this.camera),o.unproject(this.camera),c.unproject(this.camera),y.copy(i).sub(r),w.copy(n).sub(r),_.copy(o).sub(r),y.normalize(),w.normalize(),_.normalize(),y.multiplyScalar(this.deep),w.multiplyScalar(this.deep),_.multiplyScalar(this.deep),y.add(r),w.add(r),_.add(r);const t=C.planes;t[0].setFromCoplanarPoints(r,i,n),t[1].setFromCoplanarPoints(r,n,o),t[2].setFromCoplanarPoints(o,c,r),t[3].setFromCoplanarPoints(c,i,r),t[4].setFromCoplanarPoints(n,o,c),t[5].setFromCoplanarPoints(_,w,y),t[5].normal.multiplyScalar(-1)}else if(this.camera.isOrthographicCamera){const t=Math.min(s.x,e.x),F=Math.max(s.y,e.y),d=Math.max(s.x,e.x),M=Math.min(s.y,e.y);i.set(t,F,-1),n.set(d,F,-1),o.set(d,M,-1),c.set(t,M,-1),l.set(t,F,1),u.set(d,F,1),x.set(d,M,1),f.set(t,M,1),i.unproject(this.camera),n.unproject(this.camera),o.unproject(this.camera),c.unproject(this.camera),l.unproject(this.camera),u.unproject(this.camera),x.unproject(this.camera),f.unproject(this.camera);const h=C.planes;h[0].setFromCoplanarPoints(i,l,u),h[1].setFromCoplanarPoints(n,u,x),h[2].setFromCoplanarPoints(x,f,c),h[3].setFromCoplanarPoints(f,l,i),h[4].setFromCoplanarPoints(n,o,c),h[5].setFromCoplanarPoints(x,u,l),h[5].normal.multiplyScalar(-1)}else console.error("THREE.SelectionBox: Unsupported camera type.")}_searchChildInFrustum(s,e){if(e.isMesh||e.isLine||e.isPoints)if(e.isInstancedMesh){this.instances[e.uuid]=[];for(let t=0;t<e.count;t++)e.getMatrixAt(t,g),g.decompose(m,I,N),m.applyMatrix4(e.matrixWorld),s.containsPoint(m)&&this.instances[e.uuid].push(t)}else e.geometry.boundingSphere===null&&e.geometry.computeBoundingSphere(),m.copy(e.geometry.boundingSphere.center),m.applyMatrix4(e.matrixWorld),s.containsPoint(m)&&this.collection.push(e);if(e.children.length>0)for(let t=0;t<e.children.length;t++)this._searchChildInFrustum(s,e.children[t])}}export{T as SelectionBox};
@@ -0,0 +1,12 @@
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{bv as ne,f0 as D,bx as N,by as se,fX as ie,ap as m,b4 as M,c2 as oe,di as G,bB as _,aR as ae}from"./index-Ckxb31Yz.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-CPQNsDf1.js";import{W as ce,r as H,t as ue,u as de,h as fe,al as me,M as pe,aC as he,a as ge,v as X,g as W,V as K,G as q,B as ve,w as ye,z as xe,aB as be,ah as Se,ab as we,K as je}from"./three.module-IFn-4i31.js";import{s as P}from"./asset-editor-persistence-BVtzjadu.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const Ee=[".vert",".vert.glsl"],$e=[".frag",".frag.glsl"];function Ce(e){return e.split(/[?#]/,1)[0].toLowerCase()}function Re(e,t=""){const r=Ce(e);return Ee.some(n=>r.endsWith(n))?"vertex":$e.some(n=>r.endsWith(n))?"fragment":/\bgl_Position\b/.test(t)?"vertex":"fragment"}function Z(e){const t=e.split(/[?#]/,1)[0];return/\.vert\.glsl$/i.test(t)?t.replace(/\.vert\.glsl$/i,".frag.glsl"):/\.frag\.glsl$/i.test(t)?t.replace(/\.frag\.glsl$/i,".vert.glsl"):/\.vert$/i.test(t)?t.replace(/\.vert$/i,".frag"):/\.frag$/i.test(t)?t.replace(/\.frag$/i,".vert"):null}function Ae(e){return e.replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\n]/g," ")).replace(/\/\/[^\n]*/g,"")}function B(e,t){const r=[],n=/\buniform\s+(?:(?:lowp|mediump|highp)\s+)?([A-Za-z_]\w*)\s+([A-Za-z_]\w*)\s*(?:\[\s*(\d+)\s*\])?\s*;/g;for(const s of Ae(e).matchAll(n)){const o=s[1],l=s[2];if(!o||!l)continue;const p=s[3]?Number.parseInt(s[3],10):void 0;r.push({name:l,type:o,...p?{arraySize:p}:{},stages:[t]})}return r}function Le(e,t){const r=new Map;for(const n of[...B(e,"vertex"),...B(t,"fragment")]){const s=r.get(n.name);if(!s){r.set(n.name,n);continue}r.set(n.name,{...s,stages:[...new Set([...s.stages,...n.stages])]})}return[...r.values()]}function T(e,t){const r=e.split(`
2
+ `).map(n=>Fe(n.trim(),t)).filter(n=>n!==null);return r.length===0&&e.trim()&&r.push({stage:t,severity:"error",message:e.trim()}),r}function Fe(e,t){if(!e)return null;const r=e.match(/^(ERROR|WARNING):\s*\d+:(\d+)(?::|\((\d+)\):)\s*(.*)$/i);if(r)return{stage:t,severity:r[1].toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(r[2],10),...r[3]?{column:Number.parseInt(r[3],10)}:{},message:r[4]||e};const n=e.match(/^\d+:(\d+)\((\d+)\):\s*(?:(error|warning)\s*:?)?\s*(.*)$/i);return n?{stage:t,severity:n[3]?.toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(n[1],10),column:Number.parseInt(n[2],10),message:n[4]||e}:null}function V(e){return`#line 1
3
+ ${e}`}const Me=`varying vec2 vUv;
4
+
5
+ void main() {
6
+ vUv = uv;
7
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
8
+ }`,Te=`varying vec2 vUv;
9
+
10
+ void main() {
11
+ gl_FragColor = vec4(vUv, 0.55, 1.0);
12
+ }`;function z(e,t=null){return{path:t,source:e==="vertex"?Me:Te,available:!1}}function $(e){return e?.split("/").pop()??"Preview fallback"}function I(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function J(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function F(e){if(I(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function ze(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new Se(e,2,2,we);return t.colorSpace=H,t.magFilter=je,t.needsUpdate=!0,t}function Q(e,t,r){if(e.arraySize){const{arraySize:s,...o}=e;return Array.from({length:s},()=>Q(o,t,r))}if(/^sampler2D/.test(e.type)){const s=ze();return r.push(s),s}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new he;if(e.type==="mat4")return new ge;if(I(e))return new X(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const s=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new W(s[0]??0,s[1]??0):o===3?new K(s[0]??0,s[1]??0,s[2]??0):new q(s[0]??0,s[1]??0,s[2]??0,s[3]??0)}return t}function Ie(e,t,r,n,s){const o=J(t);if(o==="time"){e.value=n;return}if(e.value instanceof X&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof W){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0);return}if(e.value instanceof K){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof q){e.value.set(o==="resolution"?s.width:l[0]??0,o==="resolution"?s.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function Ue(e){return e==="box"?new ve(1.35,1.35,1.35,48,48,48):e==="plane"?new ye(2.2,2.2,96,96):new xe(.95,96,64)}function ke({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:s,onDiagnostics:o}){const l=h.useRef(null);return h.useEffect(()=>{const p=l.current;if(!p)return;let w=!1,u=0;const x=document.createElement("canvas");x.setAttribute("aria-label","Live shader preview"),x.style.width="100%",x.style.height="100%",x.style.display="block",p.replaceChildren(x);let d;try{d=new ce({canvas:x,antialias:!0,alpha:!1})}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}]);return}d.outputColorSpace=H,d.setClearColor(1119261,1),d.debug.checkShaderErrors=!0;const S=new ue,v=new de(38,1,.01,100);v.position.set(0,0,3.4);const C=[],g={};for(const a of r)g[a.name]={value:Q(a,n.current[a.name]??F(a),C)};const R=new fe({vertexShader:V(e),fragmentShader:V(t),uniforms:g,side:me,toneMapped:!1}),L=Ue(s),c=new pe(L,R);S.add(c);const f=[];d.debug.onShaderError=(a,b,E,A)=>{const ee=b,te=E,re=A;f.push(...T(a.getProgramInfoLog(ee)??"","program"),...T(a.getShaderInfoLog(te)??"","vertex"),...T(a.getShaderInfoLog(re)??"","fragment"))};const y={width:1,height:1},j=()=>{const a=p.getBoundingClientRect();y.width=Math.max(1,Math.floor(a.width)),y.height=Math.max(1,Math.floor(a.height)),d.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),d.setSize(y.width,y.height,!1),v.aspect=y.width/y.height,v.position.z=3.4/Math.min(1,v.aspect),v.updateProjectionMatrix()};j();const U=new ResizeObserver(j);U.observe(p);const Y=new be;try{d.compile(S,v),d.render(S,v),o(f.filter((a,b,E)=>E.findIndex(A=>A.stage===a.stage&&A.line===a.line&&A.message===a.message)===b))}catch(a){o([{stage:"program",severity:"error",message:a instanceof Error?a.message:String(a)}])}const k=()=>{if(w)return;const a=Y.getElapsedTime();for(const b of r){const E=g[b.name];E&&Ie(E,b,n.current[b.name]??F(b),a,y)}s!=="plane"&&(c.rotation.y=a*.18,c.rotation.x=Math.sin(a*.22)*.08),d.render(S,v),u=requestAnimationFrame(k)};return u=requestAnimationFrame(k),()=>{w=!0,cancelAnimationFrame(u),U.disconnect(),d.debug.onShaderError=null,L.dispose(),R.dispose();for(const a of C)a.dispose();d.dispose(),x.remove()}},[r,t,s,o,n,e]),i.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function De({descriptors:e,values:t,onChange:r}){return e.length===0?i.jsx("div",{style:{color:m.content.muted},children:"No uniform declarations found."}):i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>i.jsx(Ne,{uniform:n,value:t[n.name]??F(n),onChange:s=>r(n.name,s)},n.name)),i.jsx("div",{style:{color:m.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function Ne({uniform:e,value:t,onChange:r}){const n=J(e),s=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=i.jsxs("div",{style:{color:m.content.muted,fontSize:10},children:["Driven by preview ",n]}):I(e)?o=i.jsx(le,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(ae,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=i.jsx(_,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):s&&Array.isArray(t)?o=i.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${s[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,p)=>i.jsx(_,{value:l,label:"xyzw"[p],onChange:w=>{const u=[...t];u[p]=w,r(u)},step:.01},`${e.name}:${p}`))}):o=i.jsx("div",{style:{color:m.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[i.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[i.jsx("span",{style:{color:m.content.primary,fontSize:11},children:e.name}),i.jsx("span",{style:{color:m.content.muted,fontSize:10},children:e.type})]}),o]})}function O({diagnostics:e,files:t}){return e.length===0?i.jsx("div",{style:{color:m.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):i.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const s=r.stage==="program"?null:t[r.stage];return i.jsxs("div",{style:{color:r.severity==="warning"?m.semantic.warning:m.semantic.danger,fontSize:10,lineHeight:1.45},children:[s?.available?$(s.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function Ge(e){const t=await G(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Re(e,t),n=Z(e),s=n?await G(n):null,o={vertex:z("vertex"),fragment:z("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=s===null?z(l,n):{path:n,source:s,available:!0},o}function Qe({documentId:e,assetPath:t,active:r=!0}){const[n,s]=h.useState(null),[o,l]=h.useState(0),[p,w]=h.useState("sphere"),[u,x]=h.useState([]),[d,S]=h.useState({}),[v,C]=h.useState(null);h.useEffect(()=>{if(!r)return;const c=()=>l(j=>j+1),f=Z(t),y=[P(t,c),...f?[P(f,c)]:[]];return()=>{for(const j of y)j()}},[r,t]),h.useEffect(()=>{if(!r)return;let c=!1;return s(null),C(null),Ge(t).then(f=>{c||s(f)},f=>{c||C(f instanceof Error?f.message:String(f))}),()=>{c=!0}},[r,t,o]);const g=h.useMemo(()=>n?Le(n.vertex.source,n.fragment.source):[],[n]);h.useEffect(()=>{S(c=>Object.fromEntries(g.map(f=>[f.name,c[f.name]??F(f)])))},[g]);const R=h.useRef(d);R.current=d;const L=h.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:D,order:ne,body:{kind:"custom",render:()=>i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[i.jsxs("span",{children:["Vertex · ",n?$(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),i.jsxs("span",{children:["Fragment · ",n?$(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),i.jsx("span",{style:{color:m.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:se,order:N,description:`${g.length} reflected`,body:{kind:"custom",data:Object.fromEntries(g.map(c=>[c.name,d[c.name]])),render:()=>i.jsx(De,{descriptors:g,values:d,onChange:(c,f)=>S(y=>({...y,[c]:f}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:u.length>0?ie:D,order:N+100,description:u.length===0?"Compiled":`${u.length} issue${u.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:u},render:()=>n&&i.jsx(O,{diagnostics:u,files:n})}}],[g,u,n,d]);return v?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Shader unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:m.semantic.danger},children:v})}):n?i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),sections:L,status:u.length===0?`GLSL · compiles · ${g.length} uniforms`:`GLSL · ${u.length} compile issues`,fill:!0,children:i.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:m.surface.panel},children:[i.jsx(ke,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:g,valuesRef:R,geometry:p,onDiagnostics:x}),i.jsx("div",{style:{position:"absolute",left:10,top:10},children:i.jsxs(oe,{"aria-label":"Preview geometry",value:p,onChange:c=>w(c.target.value),children:[i.jsx("option",{value:"sphere",children:"Sphere"}),i.jsx("option",{value:"box",children:"Box"}),i.jsx("option",{value:"plane",children:"Plane"})]})}),u.length>0&&i.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${m.semantic.danger}`,borderRadius:6,background:m.surface.overlay},children:i.jsx(O,{diagnostics:u,files:n})})]})}):i.jsx(M,{documentId:e,active:r,type:"shader",title:$(t),status:"Loading GLSL",children:i.jsx("div",{style:{padding:20,color:m.content.muted},children:"Loading shader files…"})})}export{Qe as ShaderAssetDocument};
@@ -1 +1 @@
1
- import{h as s,U as a}from"./three.module-D396a9Mn.js";import{X as r,Y as o}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";class Q extends r{constructor(t,i="tDiffuse"){super(),this.textureID=i,this.uniforms=null,this.material=null,t instanceof s?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=a.clone(t.uniforms),this.material=new s({name:t.name!==void 0?t.name:"unspecified",defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this._fsQuad=new o(this.material)}render(t,i,e){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=e.texture),this._fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this._fsQuad.render(t)):(t.setRenderTarget(i),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this._fsQuad.render(t))}dispose(){this.material.dispose(),this._fsQuad.dispose()}}export{Q as ShaderPass};
1
+ import{h as s,U as a}from"./three.module-IFn-4i31.js";import{Y as r,Z as o}from"./index-Ckxb31Yz.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";class Q extends r{constructor(t,i="tDiffuse"){super(),this.textureID=i,this.uniforms=null,this.material=null,t instanceof s?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=a.clone(t.uniforms),this.material=new s({name:t.name!==void 0?t.name:"unspecified",defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this._fsQuad=new o(this.material)}render(t,i,e){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=e.texture),this._fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this._fsQuad.render(t)):(t.setRenderTarget(i),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this._fsQuad.render(t))}dispose(){this.material.dispose(),this._fsQuad.dispose()}}export{Q as ShaderPass};
@@ -1 +1 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as $}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ei as v,a4 as L,hu as N,hL as wt,bo as pt,ht as B,eq as zt,em as ut,a5 as X,f9 as ft,kA as it,e6 as Bt,i2 as ht,b5 as Dt,aV as Ft}from"./index-GIL7oGEO.js";const At={full:{anchor:{left:0,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},top:{anchor:{left:0,top:0,right:1,bottom:0},offset:{left:0,top:0,right:0,bottom:0}},bottom:{anchor:{left:0,top:1,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},left:{anchor:{left:0,top:0,right:0,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},right:{anchor:{left:1,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},center:{anchor:{left:.5,top:.5,right:.5,bottom:.5},offset:{left:-60,top:-20,right:60,bottom:20}},"top-left":{anchor:{left:0,top:0,right:0,bottom:0},offset:{left:0,top:0,right:120,bottom:40}},"top-right":{anchor:{left:1,top:0,right:1,bottom:0},offset:{left:-120,top:0,right:0,bottom:40}}},mt=["flex-start","center","flex-end"],gt=["flex-start","center","flex-end"];function Ht({row:t,col:e,justify:n,align:r,isActive:a,disabled:s,onSelect:c}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{s||c(n,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:s?"not-allowed":"pointer",borderRadius:v.radiusSmall,background:a?v.accent:"transparent"},children:o.jsx("div",{style:{width:a?6:4,height:a?6:4,borderRadius:"50%",background:a?v.onAccent:v.textMuted}})})}function ce({value:t,onChange:e,disabled:n}){const r=mt.indexOf(t.justify),a=gt.indexOf(t.align);return o.jsx("div",{"data-testid":"alignment-grid",style:{display:"inline-grid",gridTemplateColumns:"repeat(3, 16px)",gridTemplateRows:"repeat(3, 16px)",gap:1,background:v.inputBg,borderRadius:v.radiusMedium,padding:4,opacity:n?.35:1},children:gt.map((s,c)=>mt.map((l,u)=>o.jsx(Ht,{row:c,col:u,justify:l,align:s,isActive:c===a&&u===r,disabled:n,onSelect:(p,h)=>e({justify:p,align:h})},`${c}-${u}`)))})}function de({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(At).map(([n,r])=>o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${n}`,disabled:e,onClick:()=>t(n,r),children:n},n))})}function nt(t){let e=t.replace("#","");e.length===3&&(e=`${e[0]??"0"}${e[0]??"0"}${e[1]??"0"}${e[1]??"0"}${e[2]??"0"}${e[2]??"0"}`);const n=Number.parseInt(e,16);return[n>>16&255,n>>8&255,n&255]}function St(t,e,n){return`#${[t,e,n].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}`}function J(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s),u=c-l;let p=0;u!==0&&(c===r?p=((a-s)/u%6+6)%6:c===a?p=(s-r)/u+2:p=(r-a)/u+4,p/=6);const h=c===0?0:u/c;return[p,h,c]}function K(t,e,n){const r=Math.floor(t*6),a=t*6-r,s=n*(1-e),c=n*(1-a*e),l=n*(1-(1-a)*e);let u=0,p=0,h=0;switch(r%6){case 0:u=n,p=l,h=s;break;case 1:u=c,p=n,h=s;break;case 2:u=s,p=n,h=l;break;case 3:u=s,p=c,h=n;break;case 4:u=l,p=s,h=n;break;case 5:u=n,p=s,h=c;break}return[Math.round(u*255),Math.round(p*255),Math.round(h*255)]}function kt(t,e,n){let r,a,s;if(e===0)r=a=s=n;else{const c=(p,h,d)=>{let b=d;return b<0&&(b+=1),b>1&&(b-=1),b<.16666666666666666?p+(h-p)*6*b:b<.5?h:b<.6666666666666666?p+(h-p)*(.6666666666666666-b)*6:p},l=n<.5?n*(1+e):n+e-n*e,u=2*n-l;r=c(u,l,t+1/3),a=c(u,l,t),s=c(u,l,t-1/3)}return[Math.round(r*255),Math.round(a*255),Math.round(s*255)]}function Pt(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s);let u=0,p=0;const h=(c+l)/2;if(c!==l){const d=c-l;p=h>.5?d/(2-c-l):d/(c+l),c===r?u=((a-s)/d+(a<s?6:0))/6:c===a?u=((s-r)/d+2)/6:u=((r-a)/d+4)/6}return[u,p,h]}function rt(t){if(t.startsWith("#")&&(t.length===4||t.length===7))return t;if(t.startsWith("#")&&t.length===9)return t.slice(0,7);const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e){const[,r,a,s]=e;return`#${[r??"0",a??"0",s??"0"].map(c=>Number.parseInt(c,10).toString(16).padStart(2,"0")).join("")}`}const n=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?/);if(n){const[r,a,s]=kt(Number.parseInt(n[1]??"0",10)/360,Number.parseInt(n[2]??"0",10)/100,Number.parseInt(n[3]??"0",10)/100);return St(r,a,s)}return"#000000"}function lt(t){const e=t.match(/rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);if(e?.[1])return Number.parseFloat(e[1]);const n=t.match(/hsla\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);return n?.[1]?Number.parseFloat(n[1]):t.startsWith("#")&&t.length===9?Number.parseInt(t.slice(7,9),16)/255:1}function xt(t,e,n,r,a){if(a==="hex"){const d=St(t,e,n);return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:d}if(a==="rgb")return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:`rgb(${t}, ${e}, ${n})`;const[s,c,l]=Pt(t,e,n),u=Math.round(s*360),p=Math.round(c*100),h=Math.round(l*100);return r<1?`hsla(${u}, ${p}%, ${h}%, ${r.toFixed(2)})`:`hsl(${u}, ${p}%, ${h}%)`}function Mt(t){const e=t.match(/\d+/g);return!e||e.length<3?"#000000":`#${[e[0]??"0",e[1]??"0",e[2]??"0"].map(n=>Number.parseInt(n,10).toString(16).padStart(2,"0")).join("")}`}const F=200,Z=150,U=14;function Gt({value:t,onChange:e,onChangeEnd:n,onClose:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u}){const p=rt(t),h=nt(p),[d,b]=$.useState(()=>J(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,C]=$.useState(p),z=$.useRef(null),S=$.useRef(null),w=$.useRef(null),E=$.useRef(null),T=$.useRef(null),A=$.useCallback((x=d,y=m,j=f)=>{const[M,R,I]=K(x[0],x[1],x[2]);return xt(M,R,I,y,j)},[d,m,f]);$.useEffect(()=>{C(A())},[A]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,R]=K(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${R})`),y.fillStyle=I,y.fillRect(0,0,F,Z);const P=y.createLinearGradient(0,0,0,Z);P.addColorStop(0,"rgba(0,0,0,0)"),P.addColorStop(1,"rgba(0,0,0,1)"),y.fillStyle=P,y.fillRect(0,0,F,Z)},[d[0]]),$.useEffect(()=>{const x=w.current,y=x?.getContext("2d");if(!x||!y)return;const j=y.createLinearGradient(0,0,F,0);for(let M=0;M<=6;M++){const[R,I,P]=K(M/6,1,1);j.addColorStop(M/6,`rgb(${R},${I},${P})`)}y.fillStyle=j,y.fillRect(0,0,F,U)},[]),$.useEffect(()=>{const x=E.current,y=x?.getContext("2d");if(!x||!y)return;const j=4;for(let q=0;q<U;q+=j)for(let Q=0;Q<F;Q+=j)y.fillStyle=(Q/j+q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(Q,q,j,j);const[M,R,I]=K(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${R},${I},0)`),P.addColorStop(1,`rgba(${M},${R},${I},1)`),y.fillStyle=P,y.fillRect(0,0,F,U)},[d]),$.useEffect(()=>{if(!r)return;function x(j){j.key==="Escape"&&r?.()}function y(j){z.current&&!z.current.contains(j.target)&&r?.()}return document.addEventListener("keydown",x),document.addEventListener("mousedown",y,!0),()=>{document.removeEventListener("keydown",x),document.removeEventListener("mousedown",y,!0)}},[r]);const _=$.useCallback((x,y,j,M)=>{const R=y?.getBoundingClientRect();if(R)if(x==="sat"){const I=[d[0],ct(j,R.left,R.width),_t(M,R.top,R.height)];b(I),N({onChange:e},A(I))}else if(x==="hue"){const I=[ct(j,R.left,R.width),d[1],d[2]];b(I),N({onChange:e},A(I))}else{const I=Math.round(ct(j,R.left,R.width)*100)/100;i(I),N({onChange:e},A(d,I))}},[d,A,e]);$.useEffect(()=>{function x(j){const M=T.current;if(!M)return;j.preventDefault();const R=M==="sat"?S.current:M==="hue"?w.current:E.current;_(M,R,j.clientX,j.clientY)}function y(){if(T.current){T.current=null;const j=A();B({onChange:e,onChangeEnd:n},j),s?.(j)}}return window.addEventListener("mousemove",x),window.addEventListener("mouseup",y),()=>{window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",y)}},[_,A,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,_(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=Ot(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Kt(x)??Ut(x);if(!j)return;b(J(j.r,j.g,j.b)),i(j.a);const M=y?x:xt(j.r,j.g,j.b,j.a,f);N({onChange:e},M),B({onChange:e,onChangeEnd:n},M),s?.(M)},st=()=>{g(x=>x==="hex"?"rgb":x==="rgb"?"hsl":"hex")},O=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(J(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Ct=async()=>{if(O){try{const y=globalThis.EyeDropper,j=await new y().open();at(j.sRGBHex)}catch{}return}if(l){l(y=>{y&&at(y)});return}const x=c?.();x&&at(x)},[It,Lt,Tt]=K(d[0],d[1],d[2]),Nt=`rgba(${It},${Lt},${Tt},${m})`;return o.jsxs(wt,{ref:z,"data-testid":"inspector-color-picker",onMouseDown:x=>x.stopPropagation(),style:{padding:10,width:F+16,boxSizing:"border-box"},children:[o.jsx("canvas",{ref:S,"data-testid":"color-picker-sv",width:F,height:Z,onMouseDown:x=>D("sat",x),style:{cursor:"crosshair",borderRadius:v.radiusSmall,display:"block"}}),o.jsx("canvas",{ref:w,"data-testid":"color-picker-hue",width:F,height:U,onMouseDown:x=>D("hue",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsx("canvas",{ref:E,"data-testid":"color-picker-alpha",width:F,height:U,onMouseDown:x=>D("alpha",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:8},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:v.radiusSmall,flexShrink:0,border:`1px solid ${v.border}`,background:Nt}}),o.jsx(pt,{type:"text","data-testid":"color-picker-text",value:k,onChange:x=>C(x.target.value),onKeyDown:x=>{x.key==="Enter"&&G()},onBlur:G,"data-density":"compact","data-monospace":"true",style:{flex:1}}),o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-format-toggle",onClick:st,title:"Cycle color format",style:{flexShrink:0},children:f.toUpperCase()}),(O||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Ct,title:"Eyedropper",style:{flexShrink:0},children:"⌖"})]}),a&&a.length>0&&o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3,marginTop:8,paddingTop:6,borderTop:`1px solid ${v.border}`},children:a.map((x,y)=>o.jsx("div",{"data-testid":"color-picker-recent",onClick:()=>{const j=rt(x);b(J(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function Y({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--vgai-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function _t(t,e,n){return Et(n?1-(t-e)/n:0)}function Ot(t){return/^#[0-9a-fA-F]{6}$/.test(t)?nt(t):null}function Kt(t){const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e;return{r:Number.parseInt(n??"0",10),g:Number.parseInt(r??"0",10),b:Number.parseInt(a??"0",10),a:s?Number.parseFloat(s):1}}function Ut(t){const e=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e,[c,l,u]=kt(Number.parseInt(n??"0",10)/360,Number.parseInt(r??"0",10)/100,Number.parseInt(a??"0",10)/100);return{r:c,g:l,b:u,a:s?Number.parseFloat(s):1}}function H({label:t,value:e,unit:n="",step:r=1,min:a,max:s,precision:c,disabled:l,onChange:u,onChangeEnd:p,testId:h,style:d}){const b=$.useRef(null),m=c??(r<1?2:r>=100?-2:0),i=$.useMemo(()=>w=>{if(m<0){const T=10**-m;return Math.round(w/T)*T}const E=10**m;return Math.round(w*E)/E},[m]),f=w=>{let E=w;return a!==void 0&&(E=Math.max(a,E)),s!==void 0&&(E=Math.min(s,E)),i(E)},g=w=>{if(l)return;w.preventDefault(),b.current={startX:w.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const E=D=>{if(!b.current)return;D.preventDefault();const G=D.clientX-b.current.startX,st=D.shiftKey?10:D.altKey?.1:1,O=f(b.current.startValue+G*r*st);b.current.last=O,N({onChange:u},O)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",A),window.removeEventListener("keydown",_)},A=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},_=D=>{if(D.key==="Escape"&&b.current){const G=f(b.current.startValue);b.current=null,N({onChange:u},G),B({onChange:u,onChangeEnd:p},G),T()}};window.addEventListener("mousemove",E),window.addEventListener("mouseup",A),window.addEventListener("keydown",_)},[k,C]=$.useState(null),z=$.useRef(!1),S=w=>{const E=Number.parseFloat(w);if(Number.isNaN(E))return;const T=f(E);T!==e&&B({onChange:u,onChangeEnd:p},T)};return o.jsxs("div",{style:{...zt,...d},children:[o.jsx("span",{className:"vgai-scrub-label","data-testid":h?`${h}-label`:void 0,onMouseDown:g,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:v.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(pt,{"data-testid":h,type:"text",value:k??`${e}${n}`,readOnly:l,"data-dynamic":l||void 0,onFocus:w=>{C(`${e}${n}`),w.target.select()},onChange:w=>C(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,C(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(Y,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(H,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"vgai-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(Y,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(H,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"vgai-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Vt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Yt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Yt(t)),c=(p,h)=>{const d=Vt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(H,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(H,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(H,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),C=S=>{e(S),c(!1),u("")},z=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:d,"data-testid":a,style:{position:"relative",flex:1},children:[o.jsxs(L,{type:"button",variant:"secondary",className:"vgai-field-trigger","aria-haspopup":"listbox","aria-expanded":s,disabled:n,"data-testid":"font-picker-input",onClick:()=>{n||c(S=>!S)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z||"—"}),o.jsx(Bt,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),s&&o.jsxs(wt,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--vgai-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(pt,{ref:b,type:"text","data-testid":"font-picker-search",value:l,onChange:S=>{u(S.target.value),h(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:S=>h(S.target.scrollTop),style:{maxHeight:yt*W,overflowY:"auto"},children:o.jsx("div",{style:{height:i,position:"relative"},children:k.map((S,w)=>{const E=f+w,T=S.toLowerCase()===z.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${S}`,onClick:()=>C(S),style:{position:"absolute",top:E*W,left:0,right:0,height:W,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:T?v.accent:"transparent",color:T?v.onAccent:v.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S})},S)})})}),m.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:v.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function qt(t){const e=t.stops.map(n=>`${n.color} ${Math.round(n.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function Qt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const n=t.match(/^radial-gradient\((.+)\)$/);return n?.[1]!==void 0?{type:"radial",inner:n[1]}:null}function Jt(t){const e=t.match(/^(\d+)deg\s*,\s*/);if(e)return{angle:Number.parseInt(e[1]??"180",10),colorPart:t.slice(e[0].length)};if(t.startsWith("to ")){const n=t.match(/^to\s+\w+\s*,\s*/);if(n)return{angle:180,colorPart:t.slice(n[0].length)}}return{angle:180,colorPart:t}}function Zt(t){const e=t.split(/,\s*(?![^(]*\))/).map(n=>{const r=n.trim(),a=r.match(/\s+(\d+)%$/),s=a?Number.parseInt(a[1]??"0",10)/100:-1;return{color:a?r.slice(0,-a[0].length).trim():r,position:s}});for(let n=0;n<e.length;n++){const r=e[n];r&&r.position<0&&(r.position=e.length>1?n/(e.length-1):0)}return e}function xe(t){if(!t||t==="none")return null;const e=Qt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Jt(e.inner):{angle:180,colorPart:e.inner},a=Zt(r);return a.length<2?null:{type:e.type,angle:n,stops:a}}function dt({stops:t,selected:e,onSelect:n,onMove:r,disabled:a,testIdPrefix:s}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((c,l)=>o.jsx("div",{"data-testid":`${s}-${l}`,onClick:()=>n(l),onMouseDown:u=>{if(a)return;u.preventDefault(),n(l);const h=u.target.parentElement?.getBoundingClientRect(),d=i=>h?.width?Math.max(0,Math.min(1,(i-h.left)/h.width)):c.position,b=i=>r(l,d(i.clientX),!1),m=i=>{r(l,d(i.clientX),!0),window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",m)};window.addEventListener("mousemove",b),window.addEventListener("mouseup",m)},style:{position:"absolute",left:`${c.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:c.css,border:`2px solid ${l===e?v.accent:"#fff"}`,transform:"translateX(-50%)",cursor:a?"not-allowed":"pointer"}},l))})}function be({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s,testId:c="gradient-editor"}){const[l,u]=$.useState(0),p=(f,g)=>{g?B({onChange:e,onChangeEnd:n},f):N({onChange:e},f)},h=(f,g,k)=>{const C=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:C},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,C=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(C.length-1),p({...t,stops:C},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,C)=>C!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(Y,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(H,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const V=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:V(t.r,e.r,n),g:V(t.g,e.g,n),b:V(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,V)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.alpha.keys,i,f);c({track:"alpha",i:C}),l(p(k),g)},disabled:r,testIdPrefix:`${a}-alpha-stop`}),o.jsx("div",{"data-testid":`${a}-preview`,style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,backgroundImage:`linear-gradient(90deg, ${d}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(dt,{stops:t.color.keys.map(i=>({position:i.pos,css:jt(i.value)})),selected:s.track==="color"?s.i:-1,onSelect:i=>c({track:"color",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.color.keys,i,f);c({track:"color",i:C}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Y,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,V)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Rt({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(Y,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"vgai-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(H,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(H,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(H,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(H,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Rt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Rt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,Y as C,te as D,me as F,be as G,ye as Q,H as S,we as T,ue as a,fe as b,qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Yt as j,de as k,Gt as l,ee as m,dt as n,Rt as o,xe as p,Vt as q,Wt as u};
1
+ import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as $}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{f7 as v,a5 as L,ih as N,cb as wt,bD as pt,ig as B,fe as zt,c2 as ut,a6 as X,g9 as ft,l1 as it,eX as Bt,iP as ht,bB as Dt,aR as Ft}from"./index-Ckxb31Yz.js";const Ht={full:{anchor:{left:0,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},top:{anchor:{left:0,top:0,right:1,bottom:0},offset:{left:0,top:0,right:0,bottom:0}},bottom:{anchor:{left:0,top:1,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},left:{anchor:{left:0,top:0,right:0,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},right:{anchor:{left:1,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},center:{anchor:{left:.5,top:.5,right:.5,bottom:.5},offset:{left:-60,top:-20,right:60,bottom:20}},"top-left":{anchor:{left:0,top:0,right:0,bottom:0},offset:{left:0,top:0,right:120,bottom:40}},"top-right":{anchor:{left:1,top:0,right:1,bottom:0},offset:{left:-120,top:0,right:0,bottom:40}}},mt=["flex-start","center","flex-end"],gt=["flex-start","center","flex-end"];function At({row:t,col:e,justify:n,align:r,isActive:a,disabled:s,onSelect:c}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{s||c(n,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:s?"not-allowed":"pointer",borderRadius:v.radiusSmall,background:a?v.accent:"transparent"},children:o.jsx("div",{style:{width:a?6:4,height:a?6:4,borderRadius:"50%",background:a?v.onAccent:v.textMuted}})})}function ce({value:t,onChange:e,disabled:n}){const r=mt.indexOf(t.justify),a=gt.indexOf(t.align);return o.jsx("div",{"data-testid":"alignment-grid",style:{display:"inline-grid",gridTemplateColumns:"repeat(3, 16px)",gridTemplateRows:"repeat(3, 16px)",gap:1,background:v.inputBg,borderRadius:v.radiusMedium,padding:4,opacity:n?.35:1},children:gt.map((s,c)=>mt.map((l,u)=>o.jsx(At,{row:c,col:u,justify:l,align:s,isActive:c===a&&u===r,disabled:n,onSelect:(p,h)=>e({justify:p,align:h})},`${c}-${u}`)))})}function de({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(Ht).map(([n,r])=>o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${n}`,disabled:e,onClick:()=>t(n,r),children:n},n))})}function nt(t){let e=t.replace("#","");e.length===3&&(e=`${e[0]??"0"}${e[0]??"0"}${e[1]??"0"}${e[1]??"0"}${e[2]??"0"}${e[2]??"0"}`);const n=Number.parseInt(e,16);return[n>>16&255,n>>8&255,n&255]}function St(t,e,n){return`#${[t,e,n].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}`}function J(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s),u=c-l;let p=0;u!==0&&(c===r?p=((a-s)/u%6+6)%6:c===a?p=(s-r)/u+2:p=(r-a)/u+4,p/=6);const h=c===0?0:u/c;return[p,h,c]}function K(t,e,n){const r=Math.floor(t*6),a=t*6-r,s=n*(1-e),c=n*(1-a*e),l=n*(1-(1-a)*e);let u=0,p=0,h=0;switch(r%6){case 0:u=n,p=l,h=s;break;case 1:u=c,p=n,h=s;break;case 2:u=s,p=n,h=l;break;case 3:u=s,p=c,h=n;break;case 4:u=l,p=s,h=n;break;case 5:u=n,p=s,h=c;break}return[Math.round(u*255),Math.round(p*255),Math.round(h*255)]}function kt(t,e,n){let r,a,s;if(e===0)r=a=s=n;else{const c=(p,h,d)=>{let b=d;return b<0&&(b+=1),b>1&&(b-=1),b<.16666666666666666?p+(h-p)*6*b:b<.5?h:b<.6666666666666666?p+(h-p)*(.6666666666666666-b)*6:p},l=n<.5?n*(1+e):n+e-n*e,u=2*n-l;r=c(u,l,t+1/3),a=c(u,l,t),s=c(u,l,t-1/3)}return[Math.round(r*255),Math.round(a*255),Math.round(s*255)]}function Pt(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s);let u=0,p=0;const h=(c+l)/2;if(c!==l){const d=c-l;p=h>.5?d/(2-c-l):d/(c+l),c===r?u=((a-s)/d+(a<s?6:0))/6:c===a?u=((s-r)/d+2)/6:u=((r-a)/d+4)/6}return[u,p,h]}function rt(t){if(t.startsWith("#")&&(t.length===4||t.length===7))return t;if(t.startsWith("#")&&t.length===9)return t.slice(0,7);const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e){const[,r,a,s]=e;return`#${[r??"0",a??"0",s??"0"].map(c=>Number.parseInt(c,10).toString(16).padStart(2,"0")).join("")}`}const n=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?/);if(n){const[r,a,s]=kt(Number.parseInt(n[1]??"0",10)/360,Number.parseInt(n[2]??"0",10)/100,Number.parseInt(n[3]??"0",10)/100);return St(r,a,s)}return"#000000"}function lt(t){const e=t.match(/rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);if(e?.[1])return Number.parseFloat(e[1]);const n=t.match(/hsla\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);return n?.[1]?Number.parseFloat(n[1]):t.startsWith("#")&&t.length===9?Number.parseInt(t.slice(7,9),16)/255:1}function xt(t,e,n,r,a){if(a==="hex"){const d=St(t,e,n);return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:d}if(a==="rgb")return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:`rgb(${t}, ${e}, ${n})`;const[s,c,l]=Pt(t,e,n),u=Math.round(s*360),p=Math.round(c*100),h=Math.round(l*100);return r<1?`hsla(${u}, ${p}%, ${h}%, ${r.toFixed(2)})`:`hsl(${u}, ${p}%, ${h}%)`}function Mt(t){const e=t.match(/\d+/g);return!e||e.length<3?"#000000":`#${[e[0]??"0",e[1]??"0",e[2]??"0"].map(n=>Number.parseInt(n,10).toString(16).padStart(2,"0")).join("")}`}const F=200,Z=150,U=14;function Gt({value:t,onChange:e,onChangeEnd:n,onClose:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u}){const p=rt(t),h=nt(p),[d,b]=$.useState(()=>J(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,C]=$.useState(p),z=$.useRef(null),S=$.useRef(null),w=$.useRef(null),E=$.useRef(null),T=$.useRef(null),H=$.useCallback((x=d,y=m,j=f)=>{const[M,R,I]=K(x[0],x[1],x[2]);return xt(M,R,I,y,j)},[d,m,f]);$.useEffect(()=>{C(H())},[H]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,R]=K(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${R})`),y.fillStyle=I,y.fillRect(0,0,F,Z);const P=y.createLinearGradient(0,0,0,Z);P.addColorStop(0,"rgba(0,0,0,0)"),P.addColorStop(1,"rgba(0,0,0,1)"),y.fillStyle=P,y.fillRect(0,0,F,Z)},[d[0]]),$.useEffect(()=>{const x=w.current,y=x?.getContext("2d");if(!x||!y)return;const j=y.createLinearGradient(0,0,F,0);for(let M=0;M<=6;M++){const[R,I,P]=K(M/6,1,1);j.addColorStop(M/6,`rgb(${R},${I},${P})`)}y.fillStyle=j,y.fillRect(0,0,F,U)},[]),$.useEffect(()=>{const x=E.current,y=x?.getContext("2d");if(!x||!y)return;const j=4;for(let q=0;q<U;q+=j)for(let Q=0;Q<F;Q+=j)y.fillStyle=(Q/j+q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(Q,q,j,j);const[M,R,I]=K(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${R},${I},0)`),P.addColorStop(1,`rgba(${M},${R},${I},1)`),y.fillStyle=P,y.fillRect(0,0,F,U)},[d]),$.useEffect(()=>{if(!r)return;function x(j){j.key==="Escape"&&r?.()}function y(j){z.current&&!z.current.contains(j.target)&&r?.()}return document.addEventListener("keydown",x),document.addEventListener("mousedown",y,!0),()=>{document.removeEventListener("keydown",x),document.removeEventListener("mousedown",y,!0)}},[r]);const _=$.useCallback((x,y,j,M)=>{const R=y?.getBoundingClientRect();if(R)if(x==="sat"){const I=[d[0],ct(j,R.left,R.width),_t(M,R.top,R.height)];b(I),N({onChange:e},H(I))}else if(x==="hue"){const I=[ct(j,R.left,R.width),d[1],d[2]];b(I),N({onChange:e},H(I))}else{const I=Math.round(ct(j,R.left,R.width)*100)/100;i(I),N({onChange:e},H(d,I))}},[d,H,e]);$.useEffect(()=>{function x(j){const M=T.current;if(!M)return;j.preventDefault();const R=M==="sat"?S.current:M==="hue"?w.current:E.current;_(M,R,j.clientX,j.clientY)}function y(){if(T.current){T.current=null;const j=H();B({onChange:e,onChangeEnd:n},j),s?.(j)}}return window.addEventListener("mousemove",x),window.addEventListener("mouseup",y),()=>{window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",y)}},[_,H,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,_(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=Ot(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Kt(x)??Ut(x);if(!j)return;b(J(j.r,j.g,j.b)),i(j.a);const M=y?x:xt(j.r,j.g,j.b,j.a,f);N({onChange:e},M),B({onChange:e,onChangeEnd:n},M),s?.(M)},st=()=>{g(x=>x==="hex"?"rgb":x==="rgb"?"hsl":"hex")},O=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(J(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Ct=async()=>{if(O){try{const y=globalThis.EyeDropper,j=await new y().open();at(j.sRGBHex)}catch{}return}if(l){l(y=>{y&&at(y)});return}const x=c?.();x&&at(x)},[It,Lt,Tt]=K(d[0],d[1],d[2]),Nt=`rgba(${It},${Lt},${Tt},${m})`;return o.jsxs(wt,{ref:z,"data-testid":"inspector-color-picker",onMouseDown:x=>x.stopPropagation(),style:{padding:10,width:F+16,boxSizing:"border-box"},children:[o.jsx("canvas",{ref:S,"data-testid":"color-picker-sv",width:F,height:Z,onMouseDown:x=>D("sat",x),style:{cursor:"crosshair",borderRadius:v.radiusSmall,display:"block"}}),o.jsx("canvas",{ref:w,"data-testid":"color-picker-hue",width:F,height:U,onMouseDown:x=>D("hue",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsx("canvas",{ref:E,"data-testid":"color-picker-alpha",width:F,height:U,onMouseDown:x=>D("alpha",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:8},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:v.radiusSmall,flexShrink:0,border:`1px solid ${v.border}`,background:Nt}}),o.jsx(pt,{type:"text","data-testid":"color-picker-text",value:k,onChange:x=>C(x.target.value),onKeyDown:x=>{x.key==="Enter"&&G()},onBlur:G,"data-density":"compact","data-monospace":"true",style:{flex:1}}),o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-format-toggle",onClick:st,title:"Cycle color format",style:{flexShrink:0},children:f.toUpperCase()}),(O||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Ct,title:"Eyedropper",style:{flexShrink:0},children:"⌖"})]}),a&&a.length>0&&o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3,marginTop:8,paddingTop:6,borderTop:`1px solid ${v.border}`},children:a.map((x,y)=>o.jsx("div",{"data-testid":"color-picker-recent",onClick:()=>{const j=rt(x);b(J(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function Y({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--vgai-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function _t(t,e,n){return Et(n?1-(t-e)/n:0)}function Ot(t){return/^#[0-9a-fA-F]{6}$/.test(t)?nt(t):null}function Kt(t){const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e;return{r:Number.parseInt(n??"0",10),g:Number.parseInt(r??"0",10),b:Number.parseInt(a??"0",10),a:s?Number.parseFloat(s):1}}function Ut(t){const e=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e,[c,l,u]=kt(Number.parseInt(n??"0",10)/360,Number.parseInt(r??"0",10)/100,Number.parseInt(a??"0",10)/100);return{r:c,g:l,b:u,a:s?Number.parseFloat(s):1}}function A({label:t,value:e,unit:n="",step:r=1,min:a,max:s,precision:c,disabled:l,onChange:u,onChangeEnd:p,testId:h,style:d}){const b=$.useRef(null),m=c??(r<1?2:r>=100?-2:0),i=$.useMemo(()=>w=>{if(m<0){const T=10**-m;return Math.round(w/T)*T}const E=10**m;return Math.round(w*E)/E},[m]),f=w=>{let E=w;return a!==void 0&&(E=Math.max(a,E)),s!==void 0&&(E=Math.min(s,E)),i(E)},g=w=>{if(l)return;w.preventDefault(),b.current={startX:w.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const E=D=>{if(!b.current)return;D.preventDefault();const G=D.clientX-b.current.startX,st=D.shiftKey?10:D.altKey?.1:1,O=f(b.current.startValue+G*r*st);b.current.last=O,N({onChange:u},O)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",_)},H=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},_=D=>{if(D.key==="Escape"&&b.current){const G=f(b.current.startValue);b.current=null,N({onChange:u},G),B({onChange:u,onChangeEnd:p},G),T()}};window.addEventListener("mousemove",E),window.addEventListener("mouseup",H),window.addEventListener("keydown",_)},[k,C]=$.useState(null),z=$.useRef(!1),S=w=>{const E=Number.parseFloat(w);if(Number.isNaN(E))return;const T=f(E);T!==e&&B({onChange:u,onChangeEnd:p},T)};return o.jsxs("div",{style:{...zt,...d},children:[o.jsx("span",{className:"vgai-scrub-label","data-testid":h?`${h}-label`:void 0,onMouseDown:g,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:v.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(pt,{"data-testid":h,type:"text",value:k??`${e}${n}`,readOnly:l,"data-dynamic":l||void 0,onFocus:w=>{C(`${e}${n}`),w.target.select()},onChange:w=>C(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,C(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(Y,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"vgai-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(Y,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"vgai-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Vt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Yt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Yt(t)),c=(p,h)=>{const d=Vt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(A,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(A,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(A,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),C=S=>{e(S),c(!1),u("")},z=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:d,"data-testid":a,style:{position:"relative",flex:1},children:[o.jsxs(L,{type:"button",variant:"secondary",className:"vgai-field-trigger","aria-haspopup":"listbox","aria-expanded":s,disabled:n,"data-testid":"font-picker-input",onClick:()=>{n||c(S=>!S)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z||"—"}),o.jsx(Bt,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),s&&o.jsxs(wt,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--vgai-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(pt,{ref:b,type:"text","data-testid":"font-picker-search",value:l,onChange:S=>{u(S.target.value),h(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:S=>h(S.target.scrollTop),style:{maxHeight:yt*W,overflowY:"auto"},children:o.jsx("div",{style:{height:i,position:"relative"},children:k.map((S,w)=>{const E=f+w,T=S.toLowerCase()===z.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${S}`,onClick:()=>C(S),style:{position:"absolute",top:E*W,left:0,right:0,height:W,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:T?v.accent:"transparent",color:T?v.onAccent:v.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S})},S)})})}),m.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:v.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function qt(t){const e=t.stops.map(n=>`${n.color} ${Math.round(n.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function Qt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const n=t.match(/^radial-gradient\((.+)\)$/);return n?.[1]!==void 0?{type:"radial",inner:n[1]}:null}function Jt(t){const e=t.match(/^(\d+)deg\s*,\s*/);if(e)return{angle:Number.parseInt(e[1]??"180",10),colorPart:t.slice(e[0].length)};if(t.startsWith("to ")){const n=t.match(/^to\s+\w+\s*,\s*/);if(n)return{angle:180,colorPart:t.slice(n[0].length)}}return{angle:180,colorPart:t}}function Zt(t){const e=t.split(/,\s*(?![^(]*\))/).map(n=>{const r=n.trim(),a=r.match(/\s+(\d+)%$/),s=a?Number.parseInt(a[1]??"0",10)/100:-1;return{color:a?r.slice(0,-a[0].length).trim():r,position:s}});for(let n=0;n<e.length;n++){const r=e[n];r&&r.position<0&&(r.position=e.length>1?n/(e.length-1):0)}return e}function xe(t){if(!t||t==="none")return null;const e=Qt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Jt(e.inner):{angle:180,colorPart:e.inner},a=Zt(r);return a.length<2?null:{type:e.type,angle:n,stops:a}}function dt({stops:t,selected:e,onSelect:n,onMove:r,disabled:a,testIdPrefix:s}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((c,l)=>o.jsx("div",{"data-testid":`${s}-${l}`,onClick:()=>n(l),onMouseDown:u=>{if(a)return;u.preventDefault(),n(l);const h=u.target.parentElement?.getBoundingClientRect(),d=i=>h?.width?Math.max(0,Math.min(1,(i-h.left)/h.width)):c.position,b=i=>r(l,d(i.clientX),!1),m=i=>{r(l,d(i.clientX),!0),window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",m)};window.addEventListener("mousemove",b),window.addEventListener("mouseup",m)},style:{position:"absolute",left:`${c.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:c.css,border:`2px solid ${l===e?v.accent:"#fff"}`,transform:"translateX(-50%)",cursor:a?"not-allowed":"pointer"}},l))})}function be({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s,testId:c="gradient-editor"}){const[l,u]=$.useState(0),p=(f,g)=>{g?B({onChange:e,onChangeEnd:n},f):N({onChange:e},f)},h=(f,g,k)=>{const C=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:C},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,C=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(C.length-1),p({...t,stops:C},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,C)=>C!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(Y,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(A,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const V=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:V(t.r,e.r,n),g:V(t.g,e.g,n),b:V(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,V)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.alpha.keys,i,f);c({track:"alpha",i:C}),l(p(k),g)},disabled:r,testIdPrefix:`${a}-alpha-stop`}),o.jsx("div",{"data-testid":`${a}-preview`,style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,backgroundImage:`linear-gradient(90deg, ${d}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(dt,{stops:t.color.keys.map(i=>({position:i.pos,css:jt(i.value)})),selected:s.track==="color"?s.i:-1,onSelect:i=>c({track:"color",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.color.keys,i,f);c({track:"color",i:C}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Y,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,V)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Rt({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(Y,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"vgai-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(A,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(A,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(A,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(A,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Rt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Rt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,Y as C,te as D,me as F,be as G,ye as Q,A as S,we as T,ue as a,fe as b,qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Yt as j,de as k,Gt as l,ee as m,dt as n,Rt as o,xe as p,Vt as q,Wt as u};
@@ -0,0 +1 @@
1
+ import{V as x,g as k,G as S,v as _,ax as H,aV as N}from"./three.module-IFn-4i31.js";import{ee as P}from"./index-Ckxb31Yz.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const z=new x,M=new x;class st{modify(t,o){t=t.clone(),delete t.morphAttributes.position,delete t.morphAttributes.normal;const n=t.attributes;for(const i in n)i!=="position"&&i!=="uv"&&i!=="normal"&&i!=="tangent"&&i!=="color"&&t.deleteAttribute(i);t=P(t);const l=[],s=[],p=t.getAttribute("position"),c=t.getAttribute("uv"),b=t.getAttribute("normal"),h=t.getAttribute("tangent"),A=t.getAttribute("color");let m=null,C=null,V=null,E=null;for(let i=0;i<p.count;i++){const r=new x().fromBufferAttribute(p,i);c&&(C=new k().fromBufferAttribute(c,i)),b&&(V=new x().fromBufferAttribute(b,i)),h&&(m=new S().fromBufferAttribute(h,i)),A&&(E=new _().fromBufferAttribute(A,i));const u=new L(r,C,V,m,E);l.push(u)}let a=t.getIndex();if(a!==null)for(let i=0;i<a.count;i+=3){const r=a.getX(i),u=a.getX(i+1),d=a.getX(i+2),B=new O(l[r],l[u],l[d],r,u,d);s.push(B)}else for(let i=0;i<p.count;i+=3){const r=i,u=i+1,d=i+2,B=new O(l[r],l[u],l[d],r,u,d);s.push(B)}for(let i=0,r=l.length;i<r;i++)T(l[i]);let w,X=o;for(;X--;){if(w=K(l),!w){console.log("THREE.SimplifyModifier: No next vertex");break}J(l,s,w,w.collapseNeighbor)}const f=new H,F=[],v=[],q=[],U=[],I=[];a=[];for(let i=0;i<l.length;i++){const r=l[i];F.push(r.position.x,r.position.y,r.position.z),r.uv&&v.push(r.uv.x,r.uv.y),r.normal&&q.push(r.normal.x,r.normal.y,r.normal.z),r.tangent&&U.push(r.tangent.x,r.tangent.y,r.tangent.z,r.tangent.w),r.color&&I.push(r.color.r,r.color.g,r.color.b),r.id=i}for(let i=0;i<s.length;i++){const r=s[i];a.push(r.v1.id,r.v2.id,r.v3.id)}return f.setAttribute("position",new N(F,3)),v.length>0&&f.setAttribute("uv",new N(v,2)),q.length>0&&f.setAttribute("normal",new N(q,3)),U.length>0&&f.setAttribute("tangent",new N(U,4)),I.length>0&&f.setAttribute("color",new N(I,3)),f.setIndex(a),f}}function R(e,t){e.indexOf(t)===-1&&e.push(t)}function g(e,t){const o=e.indexOf(t);o>-1&&e.splice(o,1)}function j(e,t){const o=t.position.distanceTo(e.position);let n=0;const l=[];for(let c=0,b=e.faces.length;c<b;c++){const h=e.faces[c];h.hasVertex(t)&&l.push(h)}for(let c=0,b=e.faces.length;c<b;c++){let h=1;const A=e.faces[c];for(let m=0;m<l.length;m++){const C=l[m],V=A.normal.dot(C.normal);h=Math.min(h,(1.001-V)/2)}n=Math.max(n,h)}const s=0;return l.length<2&&(n=1),o*n+s}function T(e){if(e.neighbors.length===0){e.collapseNeighbor=null,e.collapseCost=-.01;return}e.collapseCost=1e5,e.collapseNeighbor=null;for(let t=0;t<e.neighbors.length;t++){const o=j(e,e.neighbors[t]);e.collapseNeighbor||(e.collapseNeighbor=e.neighbors[t],e.collapseCost=o,e.minCost=o,e.totalCost=0,e.costCount=0),e.costCount++,e.totalCost+=o,o<e.minCost&&(e.collapseNeighbor=e.neighbors[t],e.minCost=o)}e.collapseCost=e.totalCost/e.costCount}function G(e,t){for(console.assert(e.faces.length===0);e.neighbors.length;){const o=e.neighbors.pop();g(o.neighbors,e)}g(t,e)}function D(e,t){g(t,e),e.v1&&g(e.v1.faces,e),e.v2&&g(e.v2.faces,e),e.v3&&g(e.v3.faces,e);const o=[e.v1,e.v2,e.v3];for(let n=0;n<3;n++){const l=o[n],s=o[(n+1)%3];!l||!s||(l.removeIfNonNeighbor(s),s.removeIfNonNeighbor(l))}}function J(e,t,o,n){if(!n){G(o,e);return}n.uv&&o.uv.copy(n.uv),n.normal&&n.normal.add(o.normal).normalize(),n.tangent&&n.tangent.add(o.tangent).normalize();const l=[];for(let s=0;s<o.neighbors.length;s++)l.push(o.neighbors[s]);for(let s=o.faces.length-1;s>=0;s--)o.faces[s]&&o.faces[s].hasVertex(n)&&D(o.faces[s],t);for(let s=o.faces.length-1;s>=0;s--)o.faces[s].replaceVertex(o,n);G(o,e);for(let s=0;s<l.length;s++)T(l[s])}function K(e){let t=e[0];for(let o=0;o<e.length;o++)e[o].collapseCost<t.collapseCost&&(t=e[o]);return t}class O{constructor(t,o,n,l,s,p){this.a=l,this.b=s,this.c=p,this.v1=t,this.v2=o,this.v3=n,this.normal=new x,this.computeNormal(),t.faces.push(this),t.addUniqueNeighbor(o),t.addUniqueNeighbor(n),o.faces.push(this),o.addUniqueNeighbor(t),o.addUniqueNeighbor(n),n.faces.push(this),n.addUniqueNeighbor(t),n.addUniqueNeighbor(o)}computeNormal(){const t=this.v1.position,o=this.v2.position,n=this.v3.position;z.subVectors(n,o),M.subVectors(t,o),z.cross(M).normalize(),this.normal.copy(z)}hasVertex(t){return t===this.v1||t===this.v2||t===this.v3}replaceVertex(t,o){t===this.v1?this.v1=o:t===this.v2?this.v2=o:t===this.v3&&(this.v3=o),g(t.faces,this),o.faces.push(this),t.removeIfNonNeighbor(this.v1),this.v1.removeIfNonNeighbor(t),t.removeIfNonNeighbor(this.v2),this.v2.removeIfNonNeighbor(t),t.removeIfNonNeighbor(this.v3),this.v3.removeIfNonNeighbor(t),this.v1.addUniqueNeighbor(this.v2),this.v1.addUniqueNeighbor(this.v3),this.v2.addUniqueNeighbor(this.v1),this.v2.addUniqueNeighbor(this.v3),this.v3.addUniqueNeighbor(this.v1),this.v3.addUniqueNeighbor(this.v2),this.computeNormal()}}class L{constructor(t,o,n,l,s){this.position=t,this.uv=o,this.normal=n,this.tangent=l,this.color=s,this.id=-1,this.faces=[],this.neighbors=[],this.collapseCost=0,this.collapseNeighbor=null}addUniqueNeighbor(t){R(this.neighbors,t)}removeIfNonNeighbor(t){const o=this.neighbors,n=this.faces,l=o.indexOf(t);if(l!==-1){for(let s=0;s<n.length;s++)if(n[s].hasVertex(t))return;o.splice(l,1)}}}export{st as SimplifyModifier};
@@ -1 +1 @@
1
- import{V as k,a as F,Q as g,A,b as W,c as T,d as q,S as O}from"./three.module-D396a9Mn.js";function v(r,t){return t.getBoneName!==void 0?t.getBoneName(r):t.names[r.name]}function D(r,t,e={}){const a=new g,u=new k,l=new F,s=new F;e.preserveBoneMatrix=e.preserveBoneMatrix!==void 0?e.preserveBoneMatrix:!0,e.preserveBonePositions=e.preserveBonePositions!==void 0?e.preserveBonePositions:!0,e.useTargetMatrix=e.useTargetMatrix!==void 0?e.useTargetMatrix:!1,e.hip=e.hip!==void 0?e.hip:"hip",e.hipInfluence=e.hipInfluence!==void 0?e.hipInfluence:new k(1,1,1),e.scale=e.scale!==void 0?e.scale:1,e.names=e.names||{};const o=t.isObject3D?t.skeleton.bones:b(t),c=r.isObject3D?r.skeleton.bones:b(r);let i,d,m,x;if(r.isObject3D?r.skeleton.pose():(e.useTargetMatrix=!0,e.preserveBoneMatrix=!1),e.preserveBonePositions){x=[];for(let n=0;n<c.length;n++)x.push(c[n].position.clone())}if(e.preserveBoneMatrix){r.updateMatrixWorld(),r.matrixWorld.identity();for(let n=0;n<r.children.length;++n)r.children[n].updateMatrixWorld(!0)}for(let n=0;n<c.length;++n)i=c[n],d=v(i,e),m=w(d,o),s.copy(i.matrixWorld),m&&(m.updateMatrixWorld(),e.useTargetMatrix?l.copy(m.matrixWorld):(l.copy(r.matrixWorld).invert(),l.multiply(m.matrixWorld)),u.setFromMatrixScale(l),l.scale(u.set(1/u.x,1/u.y,1/u.z)),s.makeRotationFromQuaternion(a.setFromRotationMatrix(l)),r.isObject3D&&e.localOffsets&&e.localOffsets[i.name]&&s.multiply(e.localOffsets[i.name]),s.copyPosition(l)),d===e.hip&&(s.elements[12]*=e.scale*e.hipInfluence.x,s.elements[13]*=e.scale*e.hipInfluence.y,s.elements[14]*=e.scale*e.hipInfluence.z,e.hipPosition!==void 0&&(s.elements[12]+=e.hipPosition.x*e.scale,s.elements[13]+=e.hipPosition.y*e.scale,s.elements[14]+=e.hipPosition.z*e.scale)),i.parent?(i.matrix.copy(i.parent.matrixWorld).invert(),i.matrix.multiply(s)):i.matrix.copy(s),i.matrix.decompose(i.position,i.quaternion,i.scale),i.updateMatrixWorld();if(e.preserveBonePositions)for(let n=0;n<c.length;++n)i=c[n],d=v(i,e)||i.name,d!==e.hip&&i.position.copy(x[n]);e.preserveBoneMatrix&&r.updateMatrixWorld(!0)}function S(r,t,e,a={}){a.useFirstFramePosition=a.useFirstFramePosition!==void 0?a.useFirstFramePosition:!1,a.fps=a.fps!==void 0?a.fps:Math.max(...e.tracks.map(f=>f.times.length))/e.duration,a.names=a.names||[],t.isObject3D||(t=j(t));const u=Math.round(e.duration*(a.fps/1e3)*1e3),l=e.duration/(u-1),s=[],o=new A(t),c=b(r.skeleton),i=[];let d,m,x,n,y;o.clipAction(e).play();let p=0,h=u;a.trim!==void 0?(p=Math.round(a.trim[0]*a.fps),h=Math.min(Math.round(a.trim[1]*a.fps),u)-p,o.update(a.trim[0])):o.update(0),t.updateMatrixWorld();for(let f=0;f<h;++f){const B=f*l;D(r,t,a);for(let M=0;M<c.length;++M)m=c[M],y=v(m,a)||m.name,x=w(y,t.skeleton),x&&(n=i[M]=i[M]||{bone:m},a.hip===y&&(n.pos||(n.pos={times:new Float32Array(h),values:new Float32Array(h*3)}),a.useFirstFramePosition&&(f===0&&(d=m.position.clone()),m.position.sub(d)),n.pos.times[f]=B,m.position.toArray(n.pos.values,f*3)),n.quat||(n.quat={times:new Float32Array(h),values:new Float32Array(h*4)}),n.quat.times[f]=B,m.quaternion.toArray(n.quat.values,f*4));f===h-2?o.update(l-1e-7):o.update(l),t.updateMatrixWorld()}for(let f=0;f<i.length;++f)n=i[f],n&&(n.pos&&s.push(new W(".bones["+n.bone.name+"].position",n.pos.times,n.pos.values)),s.push(new T(".bones["+n.bone.name+"].quaternion",n.quat.times,n.quat.values)));return o.uncacheAction(e),new q(e.name,-1,s)}function Q(r){const t=new Map,e=new Map,a=r.clone();return P(r,a,function(u,l){t.set(l,u),e.set(u,l)}),a.traverse(function(u){if(!u.isSkinnedMesh)return;const l=u,s=t.get(u),o=s.skeleton.bones;l.skeleton=s.skeleton.clone(),l.bindMatrix.copy(s.bindMatrix),l.skeleton.bones=o.map(function(c){return e.get(c)}),l.bind(l.skeleton,l.bindMatrix)}),a}function w(r,t){for(let e=0,a=b(t);e<a.length;e++)if(r===a[e].name)return a[e]}function b(r){return Array.isArray(r)?r:r.bones}function j(r){const t=new O(r.bones[0]);return t.skeleton=r,t}function P(r,t,e){e(r,t);for(let a=0;a<r.children.length;a++)P(r.children[a],t.children[a],e)}export{Q as clone,D as retarget,S as retargetClip};
1
+ import{V as k,a as F,Q as g,A,b as W,c as T,d as q,S as O}from"./three.module-IFn-4i31.js";function v(r,t){return t.getBoneName!==void 0?t.getBoneName(r):t.names[r.name]}function D(r,t,e={}){const a=new g,u=new k,l=new F,s=new F;e.preserveBoneMatrix=e.preserveBoneMatrix!==void 0?e.preserveBoneMatrix:!0,e.preserveBonePositions=e.preserveBonePositions!==void 0?e.preserveBonePositions:!0,e.useTargetMatrix=e.useTargetMatrix!==void 0?e.useTargetMatrix:!1,e.hip=e.hip!==void 0?e.hip:"hip",e.hipInfluence=e.hipInfluence!==void 0?e.hipInfluence:new k(1,1,1),e.scale=e.scale!==void 0?e.scale:1,e.names=e.names||{};const o=t.isObject3D?t.skeleton.bones:b(t),c=r.isObject3D?r.skeleton.bones:b(r);let i,d,m,x;if(r.isObject3D?r.skeleton.pose():(e.useTargetMatrix=!0,e.preserveBoneMatrix=!1),e.preserveBonePositions){x=[];for(let n=0;n<c.length;n++)x.push(c[n].position.clone())}if(e.preserveBoneMatrix){r.updateMatrixWorld(),r.matrixWorld.identity();for(let n=0;n<r.children.length;++n)r.children[n].updateMatrixWorld(!0)}for(let n=0;n<c.length;++n)i=c[n],d=v(i,e),m=w(d,o),s.copy(i.matrixWorld),m&&(m.updateMatrixWorld(),e.useTargetMatrix?l.copy(m.matrixWorld):(l.copy(r.matrixWorld).invert(),l.multiply(m.matrixWorld)),u.setFromMatrixScale(l),l.scale(u.set(1/u.x,1/u.y,1/u.z)),s.makeRotationFromQuaternion(a.setFromRotationMatrix(l)),r.isObject3D&&e.localOffsets&&e.localOffsets[i.name]&&s.multiply(e.localOffsets[i.name]),s.copyPosition(l)),d===e.hip&&(s.elements[12]*=e.scale*e.hipInfluence.x,s.elements[13]*=e.scale*e.hipInfluence.y,s.elements[14]*=e.scale*e.hipInfluence.z,e.hipPosition!==void 0&&(s.elements[12]+=e.hipPosition.x*e.scale,s.elements[13]+=e.hipPosition.y*e.scale,s.elements[14]+=e.hipPosition.z*e.scale)),i.parent?(i.matrix.copy(i.parent.matrixWorld).invert(),i.matrix.multiply(s)):i.matrix.copy(s),i.matrix.decompose(i.position,i.quaternion,i.scale),i.updateMatrixWorld();if(e.preserveBonePositions)for(let n=0;n<c.length;++n)i=c[n],d=v(i,e)||i.name,d!==e.hip&&i.position.copy(x[n]);e.preserveBoneMatrix&&r.updateMatrixWorld(!0)}function S(r,t,e,a={}){a.useFirstFramePosition=a.useFirstFramePosition!==void 0?a.useFirstFramePosition:!1,a.fps=a.fps!==void 0?a.fps:Math.max(...e.tracks.map(f=>f.times.length))/e.duration,a.names=a.names||[],t.isObject3D||(t=j(t));const u=Math.round(e.duration*(a.fps/1e3)*1e3),l=e.duration/(u-1),s=[],o=new A(t),c=b(r.skeleton),i=[];let d,m,x,n,y;o.clipAction(e).play();let p=0,h=u;a.trim!==void 0?(p=Math.round(a.trim[0]*a.fps),h=Math.min(Math.round(a.trim[1]*a.fps),u)-p,o.update(a.trim[0])):o.update(0),t.updateMatrixWorld();for(let f=0;f<h;++f){const B=f*l;D(r,t,a);for(let M=0;M<c.length;++M)m=c[M],y=v(m,a)||m.name,x=w(y,t.skeleton),x&&(n=i[M]=i[M]||{bone:m},a.hip===y&&(n.pos||(n.pos={times:new Float32Array(h),values:new Float32Array(h*3)}),a.useFirstFramePosition&&(f===0&&(d=m.position.clone()),m.position.sub(d)),n.pos.times[f]=B,m.position.toArray(n.pos.values,f*3)),n.quat||(n.quat={times:new Float32Array(h),values:new Float32Array(h*4)}),n.quat.times[f]=B,m.quaternion.toArray(n.quat.values,f*4));f===h-2?o.update(l-1e-7):o.update(l),t.updateMatrixWorld()}for(let f=0;f<i.length;++f)n=i[f],n&&(n.pos&&s.push(new W(".bones["+n.bone.name+"].position",n.pos.times,n.pos.values)),s.push(new T(".bones["+n.bone.name+"].quaternion",n.quat.times,n.quat.values)));return o.uncacheAction(e),new q(e.name,-1,s)}function Q(r){const t=new Map,e=new Map,a=r.clone();return P(r,a,function(u,l){t.set(l,u),e.set(u,l)}),a.traverse(function(u){if(!u.isSkinnedMesh)return;const l=u,s=t.get(u),o=s.skeleton.bones;l.skeleton=s.skeleton.clone(),l.bindMatrix.copy(s.bindMatrix),l.skeleton.bones=o.map(function(c){return e.get(c)}),l.bind(l.skeleton,l.bindMatrix)}),a}function w(r,t){for(let e=0,a=b(t);e<a.length;e++)if(r===a[e].name)return a[e]}function b(r){return Array.isArray(r)?r:r.bones}function j(r){const t=new O(r.bones[0]);return t.skeleton=r,t}function P(r,t,e){e(r,t);for(let a=0;a<r.children.length;a++)P(r.children[a],t.children[a],e)}export{Q as clone,D as retarget,S as retargetClip};
@@ -1,4 +1,4 @@
1
- import{M as i,h as n,ao as r,U as s,B as c,V as o}from"./three.module-D396a9Mn.js";class t extends i{constructor(){const e=t.SkyShader,a=new n({name:e.name,uniforms:s.clone(e.uniforms),vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,side:r,depthWrite:!1});super(new c(1,1,1),a),this.isSky=!0}}t.SkyShader={name:"SkyShader",uniforms:{turbidity:{value:2},rayleigh:{value:1},mieCoefficient:{value:.005},mieDirectionalG:{value:.8},sunPosition:{value:new o},up:{value:new o(0,1,0)}},vertexShader:`
1
+ import{M as i,h as n,ak as r,U as s,B as c,V as o}from"./three.module-IFn-4i31.js";class t extends i{constructor(){const e=t.SkyShader,a=new n({name:e.name,uniforms:s.clone(e.uniforms),vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,side:r,depthWrite:!1});super(new c(1,1,1),a),this.isSky=!0}}t.SkyShader={name:"SkyShader",uniforms:{turbidity:{value:2},rayleigh:{value:1},mieCoefficient:{value:.005},mieDirectionalG:{value:.8},sunPosition:{value:new o},up:{value:new o(0,1,0)}},vertexShader:`
2
2
  uniform vec3 sunPosition;
3
3
  uniform float rayleigh;
4
4
  uniform float turbidity;
@@ -0,0 +1 @@
1
+ import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as m,ap as n,b5 as x,b6 as $,b7 as C,aG as V}from"./index-Ckxb31Yz.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{J as E,C as N,c as A}from"./JsonAssetDocument-BUFzubHM.js";import{AudioViewer as H}from"./AudioViewer-BH_LUYs5.js";import{ImageViewer as R}from"./ImageViewer-BkFie7Hm.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./three.module-IFn-4i31.js";function k(t){const e=(t.split(/[?#]/,1)[0]??"").replace(/^\//,"");return e.startsWith("src/")&&/\.(?:[cm]?[jt]sx?)$/.test(e)}function j(t){const e=$(t);return e.editor==="model"?"model":e.editor==="image"?"image":e.editor==="audio"?"audio":e.editor==="data"?"json":e.editor==="environment"?"environment":e.format==="cube"?"lut":e.format==="glsl"||e.format==="vert"||e.format==="frag"?"shader":k(t)?"module":e.editor==="source"&&e.previewable?"text":"binary"}function b({documentId:t,assetPath:e,active:i=!0}){const[o,l]=f.useState(null),[c,u]=f.useState(null),y=e.split("/").pop()??e;return f.useEffect(()=>{let a=!1;l(null),u(null);const w=e.replace(/^\//,"");let p=0;async function h(){const g=++p;try{const s=`/__editor/source-file?path=${encodeURIComponent(w)}`,S=await fetch(s,{cache:"no-store"}).then(d=>{if(!d.ok)throw new Error(`HTTP ${d.status}`);return d.text()});!a&&g===p&&(l(S),u(null))}catch(s){!a&&g===p&&u(s instanceof Error?s.message:String(s))}}const v=C();return h(),()=>{a=!0,v()}},[e]),r.jsx(m,{documentId:t,active:i,type:"source",title:y,sections:[],status:`source · ${e}`,fill:!0,children:r.jsx("div",{style:{padding:12,height:"100%",minHeight:0,display:"flex",flexDirection:"column",gap:8},children:r.jsx("div",{style:{padding:8,flex:1,minHeight:0,display:"flex",overflow:"hidden",background:n.surface.inset,border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small},children:c!==null||o===null?r.jsx("div",{style:{fontFamily:n.typography.mono,fontSize:11,lineHeight:1.5,color:c?n.semantic.danger:n.content.muted,padding:4},children:c??"Loading…"}):r.jsx(N,{value:o,followChanges:!0,language:A(e),fontSize:11,maxHeight:"100%",ariaLabel:`Source of ${e}`})})})})}function z({documentId:t,assetPath:e,active:i}){const o=e.split("/").pop()??e;return r.jsx(m,{documentId:t,active:i,type:"source",title:o,sections:[],status:`no viewer · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:["No editor package in this project renders ",o,"; the file is available in the project and stays selectable and referenceable."]})})}function O({documentId:t,assetPath:e,active:i=!0}){switch(j(e)){case"model":case"environment":case"lut":case"shader":{const o=j(e);return r.jsx(x,{route:o,documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,whenUnregistered:r.jsx(z,{documentId:t,assetPath:e,active:i})})}case"image":return r.jsx(R,{assetPath:e});case"audio":return r.jsx(H,{assetPath:e});case"json":return r.jsx(E,{documentId:t,assetPath:e,displayName:e.split("/").pop()??e,active:i,sections:[],status:`json · ${e}`});case"module":{const o=V()?.rootPath,l=r.jsx(b,{documentId:t,assetPath:e,active:i});return o?r.jsx(x,{route:"module",documentId:t,assetPath:e,projectRoot:o,displayName:e.split("/").pop()??e,active:i,fallback:l,whenUnregistered:l}):l}case"text":return r.jsx(b,{documentId:t,assetPath:e,active:i});case"binary":return r.jsx(m,{documentId:t,active:i,type:"binary source",title:e.split("/").pop()??e,sections:[],status:`binary · ${e}`,children:r.jsxs("div",{style:{padding:16,color:n.content.muted,fontSize:12},children:[r.jsx("div",{style:{color:n.content.primary,fontWeight:600,marginBottom:6},children:e.split("/").pop()}),"This binary source is available in the project, but it has no safe in-editor renderer. Its file remains selectable and referenceable without being misidentified as another format."]})})}}export{O as SourceAssetViewer,j as sourceAssetRoute};